blob: 1bed5e76fc3c4f0e8c87a2299f1409e2da863540 [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();
Jamie Madill9e16d402014-09-08 17:36:33 -040025 mOSWindow->messageLoop();
26
Geoff Lang8a079e52013-10-18 16:13:33 -040027 if (!destroyEGLContext())
28 {
29 FAIL() << "egl context destruction failed.";
30 }
Jamie Madill8add0eb2014-08-26 13:16:35 -040031
32 // Check for quit message
33 Event myEvent;
34 while (mOSWindow->popEvent(&myEvent))
35 {
36 if (myEvent.Type == Event::EVENT_CLOSED)
37 {
38 exit(0);
39 }
40 }
Geoff Lang8a079e52013-10-18 16:13:33 -040041}
42
43void ANGLETest::swapBuffers()
44{
Jamie Madill62af5462014-08-26 13:16:37 -040045 mEGLWindow->swap();
Geoff Lang8a079e52013-10-18 16:13:33 -040046}
47
48void ANGLETest::drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth)
49{
50 GLint positionLocation = glGetAttribLocation(program, positionAttribName.c_str());
51
52 glUseProgram(program);
53
54 const GLfloat vertices[] =
55 {
56 -1.0f, 1.0f, quadDepth,
57 -1.0f, -1.0f, quadDepth,
58 1.0f, -1.0f, quadDepth,
59
60 -1.0f, 1.0f, quadDepth,
61 1.0f, -1.0f, quadDepth,
62 1.0f, 1.0f, quadDepth,
63 };
64
65 glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
66 glEnableVertexAttribArray(positionLocation);
67
68 glDrawArrays(GL_TRIANGLES, 0, 6);
69
70 glDisableVertexAttribArray(positionLocation);
71 glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, 0, NULL);
72
73 glUseProgram(0);
74}
75
Geoff Langefc551f2013-10-31 10:20:28 -040076GLuint ANGLETest::compileShader(GLenum type, const std::string &source)
77{
78 GLuint shader = glCreateShader(type);
79
80 const char *sourceArray[1] = { source.c_str() };
81 glShaderSource(shader, 1, sourceArray, NULL);
82 glCompileShader(shader);
83
84 GLint compileResult;
85 glGetShaderiv(shader, GL_COMPILE_STATUS, &compileResult);
86
87 if (compileResult == 0)
88 {
89 GLint infoLogLength;
90 glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
91
92 std::vector<GLchar> infoLog(infoLogLength);
93 glGetShaderInfoLog(shader, infoLog.size(), NULL, infoLog.data());
94
95 std::cerr << "shader compilation failed: " << infoLog.data();
96
97 glDeleteShader(shader);
98 shader = 0;
99 }
100
101 return shader;
102}
103
Geoff Lang8a079e52013-10-18 16:13:33 -0400104bool ANGLETest::extensionEnabled(const std::string &extName)
105{
106 const char* extString = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
107 return strstr(extString, extName.c_str()) != NULL;
108}
109
110void ANGLETest::setClientVersion(int clientVersion)
111{
Jamie Madill62af5462014-08-26 13:16:37 -0400112 mEGLWindow->setClientVersion(clientVersion);
Geoff Lang8a079e52013-10-18 16:13:33 -0400113}
114
115void ANGLETest::setWindowWidth(int width)
116{
Jamie Madill62af5462014-08-26 13:16:37 -0400117 mEGLWindow->setWidth(width);
Geoff Lang8a079e52013-10-18 16:13:33 -0400118}
119
120void ANGLETest::setWindowHeight(int height)
121{
Jamie Madill62af5462014-08-26 13:16:37 -0400122 mEGLWindow->setHeight(height);
Geoff Lang8a079e52013-10-18 16:13:33 -0400123}
124
Geoff Langefc551f2013-10-31 10:20:28 -0400125void ANGLETest::setConfigRedBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400126{
Jamie Madill62af5462014-08-26 13:16:37 -0400127 mEGLWindow->setConfigRedBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400128}
129
Geoff Langefc551f2013-10-31 10:20:28 -0400130void ANGLETest::setConfigGreenBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400131{
Jamie Madill62af5462014-08-26 13:16:37 -0400132 mEGLWindow->setConfigGreenBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400133}
134
Geoff Langefc551f2013-10-31 10:20:28 -0400135void ANGLETest::setConfigBlueBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400136{
Jamie Madill62af5462014-08-26 13:16:37 -0400137 mEGLWindow->setConfigBlueBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400138}
139
Geoff Langefc551f2013-10-31 10:20:28 -0400140void ANGLETest::setConfigAlphaBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400141{
Jamie Madill62af5462014-08-26 13:16:37 -0400142 mEGLWindow->setConfigAlphaBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400143}
144
Geoff Langefc551f2013-10-31 10:20:28 -0400145void ANGLETest::setConfigDepthBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400146{
Jamie Madill62af5462014-08-26 13:16:37 -0400147 mEGLWindow->setConfigDepthBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400148}
149
Geoff Langefc551f2013-10-31 10:20:28 -0400150void ANGLETest::setConfigStencilBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400151{
Jamie Madill62af5462014-08-26 13:16:37 -0400152 mEGLWindow->setConfigStencilBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400153}
154
155void ANGLETest::setMultisampleEnabled(bool enabled)
156{
Jamie Madill62af5462014-08-26 13:16:37 -0400157 mEGLWindow->setMultisample(enabled);
Geoff Lang8a079e52013-10-18 16:13:33 -0400158}
159
160int ANGLETest::getClientVersion() const
161{
Jamie Madill62af5462014-08-26 13:16:37 -0400162 return mEGLWindow->getClientVersion();
Geoff Lang8a079e52013-10-18 16:13:33 -0400163}
164
165int ANGLETest::getWindowWidth() const
166{
Jamie Madill62af5462014-08-26 13:16:37 -0400167 return mEGLWindow->getWidth();
Geoff Lang8a079e52013-10-18 16:13:33 -0400168}
169
170int ANGLETest::getWindowHeight() const
171{
Jamie Madill62af5462014-08-26 13:16:37 -0400172 return mEGLWindow->getHeight();
Geoff Lang8a079e52013-10-18 16:13:33 -0400173}
174
Geoff Langefc551f2013-10-31 10:20:28 -0400175bool ANGLETest::isMultisampleEnabled() const
Geoff Lang8a079e52013-10-18 16:13:33 -0400176{
Jamie Madill62af5462014-08-26 13:16:37 -0400177 return mEGLWindow->isMultisample();
Geoff Lang8a079e52013-10-18 16:13:33 -0400178}
179
180bool ANGLETest::createEGLContext()
181{
Jamie Madill62af5462014-08-26 13:16:37 -0400182 return mEGLWindow->initializeGL(mOSWindow);
Geoff Lang8a079e52013-10-18 16:13:33 -0400183}
184
185bool ANGLETest::destroyEGLContext()
186{
Jamie Madill62af5462014-08-26 13:16:37 -0400187 mEGLWindow->destroyGL();
Geoff Lang8a079e52013-10-18 16:13:33 -0400188 return true;
189}
Geoff Langbb134672013-10-23 13:06:46 -0400190
Jamie Madill8add0eb2014-08-26 13:16:35 -0400191bool ANGLETest::InitTestWindow()
192{
193 mOSWindow = CreateOSWindow();
194 if (!mOSWindow->initialize("ANGLE_TEST", 128, 128))
195 {
196 return false;
197 }
198
199 mOSWindow->setVisible(true);
200
201 return true;
202}
203
204bool ANGLETest::DestroyTestWindow()
205{
206 if (mOSWindow)
207 {
208 mOSWindow->destroy();
209 delete mOSWindow;
210 mOSWindow = NULL;
211 }
212
213 return true;
214}
215
216bool ANGLETest::ResizeWindow(int width, int height)
217{
218 return mOSWindow->resize(width, height);
219}
220
Geoff Langbb134672013-10-23 13:06:46 -0400221void ANGLETestEnvironment::SetUp()
222{
223 if (!ANGLETest::InitTestWindow())
224 {
225 FAIL() << "Failed to create ANGLE test window.";
226 }
227}
228
229void ANGLETestEnvironment::TearDown()
230{
231 ANGLETest::DestroyTestWindow();
232}