blob: 1bed5e76fc3c4f0e8c87a2299f1409e2da863540 [file] [log] [blame]
#include "ANGLETest.h"
#include "EGLWindow.h"
#include "OSWindow.h"
OSWindow *ANGLETest::mOSWindow = NULL;
ANGLETest::ANGLETest()
: mEGLWindow(NULL)
{
mEGLWindow = new EGLWindow(1280, 720, 2, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE);
}
void ANGLETest::SetUp()
{
ResizeWindow(mEGLWindow->getWidth(), mEGLWindow->getHeight());
if (!createEGLContext())
{
FAIL() << "egl context creation failed.";
}
}
void ANGLETest::TearDown()
{
swapBuffers();
mOSWindow->messageLoop();
if (!destroyEGLContext())
{
FAIL() << "egl context destruction failed.";
}
// Check for quit message
Event myEvent;
while (mOSWindow->popEvent(&myEvent))
{
if (myEvent.Type == Event::EVENT_CLOSED)
{
exit(0);
}
}
}
void ANGLETest::swapBuffers()
{
mEGLWindow->swap();
}
void ANGLETest::drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth)
{
GLint positionLocation = glGetAttribLocation(program, positionAttribName.c_str());
glUseProgram(program);
const GLfloat vertices[] =
{
-1.0f, 1.0f, quadDepth,
-1.0f, -1.0f, quadDepth,
1.0f, -1.0f, quadDepth,
-1.0f, 1.0f, quadDepth,
1.0f, -1.0f, quadDepth,
1.0f, 1.0f, quadDepth,
};
glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(positionLocation);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(positionLocation);
glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, 0, NULL);
glUseProgram(0);
}
GLuint ANGLETest::compileShader(GLenum type, const std::string &source)
{
GLuint shader = glCreateShader(type);
const char *sourceArray[1] = { source.c_str() };
glShaderSource(shader, 1, sourceArray, NULL);
glCompileShader(shader);
GLint compileResult;
glGetShaderiv(shader, GL_COMPILE_STATUS, &compileResult);
if (compileResult == 0)
{
GLint infoLogLength;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
std::vector<GLchar> infoLog(infoLogLength);
glGetShaderInfoLog(shader, infoLog.size(), NULL, infoLog.data());
std::cerr << "shader compilation failed: " << infoLog.data();
glDeleteShader(shader);
shader = 0;
}
return shader;
}
bool ANGLETest::extensionEnabled(const std::string &extName)
{
const char* extString = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
return strstr(extString, extName.c_str()) != NULL;
}
void ANGLETest::setClientVersion(int clientVersion)
{
mEGLWindow->setClientVersion(clientVersion);
}
void ANGLETest::setWindowWidth(int width)
{
mEGLWindow->setWidth(width);
}
void ANGLETest::setWindowHeight(int height)
{
mEGLWindow->setHeight(height);
}
void ANGLETest::setConfigRedBits(int bits)
{
mEGLWindow->setConfigRedBits(bits);
}
void ANGLETest::setConfigGreenBits(int bits)
{
mEGLWindow->setConfigGreenBits(bits);
}
void ANGLETest::setConfigBlueBits(int bits)
{
mEGLWindow->setConfigBlueBits(bits);
}
void ANGLETest::setConfigAlphaBits(int bits)
{
mEGLWindow->setConfigAlphaBits(bits);
}
void ANGLETest::setConfigDepthBits(int bits)
{
mEGLWindow->setConfigDepthBits(bits);
}
void ANGLETest::setConfigStencilBits(int bits)
{
mEGLWindow->setConfigStencilBits(bits);
}
void ANGLETest::setMultisampleEnabled(bool enabled)
{
mEGLWindow->setMultisample(enabled);
}
int ANGLETest::getClientVersion() const
{
return mEGLWindow->getClientVersion();
}
int ANGLETest::getWindowWidth() const
{
return mEGLWindow->getWidth();
}
int ANGLETest::getWindowHeight() const
{
return mEGLWindow->getHeight();
}
bool ANGLETest::isMultisampleEnabled() const
{
return mEGLWindow->isMultisample();
}
bool ANGLETest::createEGLContext()
{
return mEGLWindow->initializeGL(mOSWindow);
}
bool ANGLETest::destroyEGLContext()
{
mEGLWindow->destroyGL();
return true;
}
bool ANGLETest::InitTestWindow()
{
mOSWindow = CreateOSWindow();
if (!mOSWindow->initialize("ANGLE_TEST", 128, 128))
{
return false;
}
mOSWindow->setVisible(true);
return true;
}
bool ANGLETest::DestroyTestWindow()
{
if (mOSWindow)
{
mOSWindow->destroy();
delete mOSWindow;
mOSWindow = NULL;
}
return true;
}
bool ANGLETest::ResizeWindow(int width, int height)
{
return mOSWindow->resize(width, height);
}
void ANGLETestEnvironment::SetUp()
{
if (!ANGLETest::InitTestWindow())
{
FAIL() << "Failed to create ANGLE test window.";
}
}
void ANGLETestEnvironment::TearDown()
{
ANGLETest::DestroyTestWindow();
}