blob: 0e1c3e2e95de7fdfb9decd35a59e28ff04146823 [file] [log] [blame]
Geoff Lang8a079e52013-10-18 16:13:33 -04001#include "ANGLETest.h"
Jamie Madill62af5462014-08-26 13:16:37 -04002#include "EGLWindow.h"
Jamie Madill8add0eb2014-08-26 13:16:35 -04003#include "OSWindow.h"
4
5OSWindow *ANGLETest::mOSWindow = NULL;
Geoff Lang8a079e52013-10-18 16:13:33 -04006
7ANGLETest::ANGLETest()
Jamie Madill62af5462014-08-26 13:16:37 -04008 : mEGLWindow(NULL)
Geoff Lang8a079e52013-10-18 16:13:33 -04009{
Jamie Madill62af5462014-08-26 13:16:37 -040010 mEGLWindow = new EGLWindow(1280, 720, 2, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE);
Geoff Lang8a079e52013-10-18 16:13:33 -040011}
12
Geoff Lang8a079e52013-10-18 16:13:33 -040013void ANGLETest::SetUp()
14{
Jamie Madill62af5462014-08-26 13:16:37 -040015 ResizeWindow(mEGLWindow->getWidth(), mEGLWindow->getHeight());
Geoff Lang8a079e52013-10-18 16:13:33 -040016 if (!createEGLContext())
17 {
18 FAIL() << "egl context creation failed.";
19 }
20}
21
22void ANGLETest::TearDown()
23{
24 swapBuffers();
25 if (!destroyEGLContext())
26 {
27 FAIL() << "egl context destruction failed.";
28 }
Jamie Madill8add0eb2014-08-26 13:16:35 -040029
30 // Check for quit message
31 Event myEvent;
32 while (mOSWindow->popEvent(&myEvent))
33 {
34 if (myEvent.Type == Event::EVENT_CLOSED)
35 {
36 exit(0);
37 }
38 }
Geoff Lang8a079e52013-10-18 16:13:33 -040039}
40
41void ANGLETest::swapBuffers()
42{
Jamie Madill62af5462014-08-26 13:16:37 -040043 mEGLWindow->swap();
Geoff Lang8a079e52013-10-18 16:13:33 -040044}
45
46void ANGLETest::drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth)
47{
48 GLint positionLocation = glGetAttribLocation(program, positionAttribName.c_str());
49
50 glUseProgram(program);
51
52 const GLfloat vertices[] =
53 {
54 -1.0f, 1.0f, quadDepth,
55 -1.0f, -1.0f, quadDepth,
56 1.0f, -1.0f, quadDepth,
57
58 -1.0f, 1.0f, quadDepth,
59 1.0f, -1.0f, quadDepth,
60 1.0f, 1.0f, quadDepth,
61 };
62
63 glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
64 glEnableVertexAttribArray(positionLocation);
65
66 glDrawArrays(GL_TRIANGLES, 0, 6);
67
68 glDisableVertexAttribArray(positionLocation);
69 glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, 0, NULL);
70
71 glUseProgram(0);
72}
73
Geoff Langefc551f2013-10-31 10:20:28 -040074GLuint ANGLETest::compileShader(GLenum type, const std::string &source)
75{
76 GLuint shader = glCreateShader(type);
77
78 const char *sourceArray[1] = { source.c_str() };
79 glShaderSource(shader, 1, sourceArray, NULL);
80 glCompileShader(shader);
81
82 GLint compileResult;
83 glGetShaderiv(shader, GL_COMPILE_STATUS, &compileResult);
84
85 if (compileResult == 0)
86 {
87 GLint infoLogLength;
88 glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
89
90 std::vector<GLchar> infoLog(infoLogLength);
91 glGetShaderInfoLog(shader, infoLog.size(), NULL, infoLog.data());
92
93 std::cerr << "shader compilation failed: " << infoLog.data();
94
95 glDeleteShader(shader);
96 shader = 0;
97 }
98
99 return shader;
100}
101
Geoff Lang8a079e52013-10-18 16:13:33 -0400102bool ANGLETest::extensionEnabled(const std::string &extName)
103{
104 const char* extString = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
105 return strstr(extString, extName.c_str()) != NULL;
106}
107
108void ANGLETest::setClientVersion(int clientVersion)
109{
Jamie Madill62af5462014-08-26 13:16:37 -0400110 mEGLWindow->setClientVersion(clientVersion);
Geoff Lang8a079e52013-10-18 16:13:33 -0400111}
112
113void ANGLETest::setWindowWidth(int width)
114{
Jamie Madill62af5462014-08-26 13:16:37 -0400115 mEGLWindow->setWidth(width);
Geoff Lang8a079e52013-10-18 16:13:33 -0400116}
117
118void ANGLETest::setWindowHeight(int height)
119{
Jamie Madill62af5462014-08-26 13:16:37 -0400120 mEGLWindow->setHeight(height);
Geoff Lang8a079e52013-10-18 16:13:33 -0400121}
122
Geoff Langefc551f2013-10-31 10:20:28 -0400123void ANGLETest::setConfigRedBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400124{
Jamie Madill62af5462014-08-26 13:16:37 -0400125 mEGLWindow->setConfigRedBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400126}
127
Geoff Langefc551f2013-10-31 10:20:28 -0400128void ANGLETest::setConfigGreenBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400129{
Jamie Madill62af5462014-08-26 13:16:37 -0400130 mEGLWindow->setConfigGreenBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400131}
132
Geoff Langefc551f2013-10-31 10:20:28 -0400133void ANGLETest::setConfigBlueBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400134{
Jamie Madill62af5462014-08-26 13:16:37 -0400135 mEGLWindow->setConfigBlueBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400136}
137
Geoff Langefc551f2013-10-31 10:20:28 -0400138void ANGLETest::setConfigAlphaBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400139{
Jamie Madill62af5462014-08-26 13:16:37 -0400140 mEGLWindow->setConfigAlphaBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400141}
142
Geoff Langefc551f2013-10-31 10:20:28 -0400143void ANGLETest::setConfigDepthBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400144{
Jamie Madill62af5462014-08-26 13:16:37 -0400145 mEGLWindow->setConfigDepthBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400146}
147
Geoff Langefc551f2013-10-31 10:20:28 -0400148void ANGLETest::setConfigStencilBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400149{
Jamie Madill62af5462014-08-26 13:16:37 -0400150 mEGLWindow->setConfigStencilBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400151}
152
153void ANGLETest::setMultisampleEnabled(bool enabled)
154{
Jamie Madill62af5462014-08-26 13:16:37 -0400155 mEGLWindow->setMultisample(enabled);
Geoff Lang8a079e52013-10-18 16:13:33 -0400156}
157
158int ANGLETest::getClientVersion() const
159{
Jamie Madill62af5462014-08-26 13:16:37 -0400160 return mEGLWindow->getClientVersion();
Geoff Lang8a079e52013-10-18 16:13:33 -0400161}
162
163int ANGLETest::getWindowWidth() const
164{
Jamie Madill62af5462014-08-26 13:16:37 -0400165 return mEGLWindow->getWidth();
Geoff Lang8a079e52013-10-18 16:13:33 -0400166}
167
168int ANGLETest::getWindowHeight() const
169{
Jamie Madill62af5462014-08-26 13:16:37 -0400170 return mEGLWindow->getHeight();
Geoff Lang8a079e52013-10-18 16:13:33 -0400171}
172
Geoff Langefc551f2013-10-31 10:20:28 -0400173bool ANGLETest::isMultisampleEnabled() const
Geoff Lang8a079e52013-10-18 16:13:33 -0400174{
Jamie Madill62af5462014-08-26 13:16:37 -0400175 return mEGLWindow->isMultisample();
Geoff Lang8a079e52013-10-18 16:13:33 -0400176}
177
178bool ANGLETest::createEGLContext()
179{
Jamie Madill62af5462014-08-26 13:16:37 -0400180 return mEGLWindow->initializeGL(mOSWindow);
Geoff Lang8a079e52013-10-18 16:13:33 -0400181}
182
183bool ANGLETest::destroyEGLContext()
184{
Jamie Madill62af5462014-08-26 13:16:37 -0400185 mEGLWindow->destroyGL();
Geoff Lang8a079e52013-10-18 16:13:33 -0400186 return true;
187}
Geoff Langbb134672013-10-23 13:06:46 -0400188
Jamie Madill8add0eb2014-08-26 13:16:35 -0400189bool ANGLETest::InitTestWindow()
190{
191 mOSWindow = CreateOSWindow();
192 if (!mOSWindow->initialize("ANGLE_TEST", 128, 128))
193 {
194 return false;
195 }
196
197 mOSWindow->setVisible(true);
198
199 return true;
200}
201
202bool ANGLETest::DestroyTestWindow()
203{
204 if (mOSWindow)
205 {
206 mOSWindow->destroy();
207 delete mOSWindow;
208 mOSWindow = NULL;
209 }
210
211 return true;
212}
213
214bool ANGLETest::ResizeWindow(int width, int height)
215{
216 return mOSWindow->resize(width, height);
217}
218
Geoff Langbb134672013-10-23 13:06:46 -0400219void ANGLETestEnvironment::SetUp()
220{
221 if (!ANGLETest::InitTestWindow())
222 {
223 FAIL() << "Failed to create ANGLE test window.";
224 }
225}
226
227void ANGLETestEnvironment::TearDown()
228{
229 ANGLETest::DestroyTestWindow();
230}