blob: 1d6d3e136bfccab01f099b45d5865880e434fbc3 [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
Geoff Lang0d3683c2014-10-23 11:08:16 -04005ANGLETest::ANGLETest(EGLint glesMajorVersion, const EGLPlatformParameters &platform)
6 : mEGLWindow(NULL)
Geoff Lang8a079e52013-10-18 16:13:33 -04007{
Geoff Lang0d3683c2014-10-23 11:08:16 -04008 mEGLWindow = new EGLWindow(1280, 720, glesMajorVersion, platform);
9}
10
11ANGLETest::~ANGLETest()
12{
13 delete mEGLWindow;
14 mEGLWindow = NULL;
Geoff Lang8a079e52013-10-18 16:13:33 -040015}
16
Geoff Lang8a079e52013-10-18 16:13:33 -040017void ANGLETest::SetUp()
18{
Geoff Lang0d3683c2014-10-23 11:08:16 -040019 if (!ResizeWindow(mEGLWindow->getWidth(), mEGLWindow->getHeight()))
Jamie Madill4119ed32014-10-01 10:41:40 -040020 {
21 FAIL() << "Failed to resize ANGLE test window.";
22 }
23
Geoff Lang8a079e52013-10-18 16:13:33 -040024 if (!createEGLContext())
25 {
26 FAIL() << "egl context creation failed.";
27 }
28}
29
30void ANGLETest::TearDown()
31{
32 swapBuffers();
Jamie Madill9e16d402014-09-08 17:36:33 -040033 mOSWindow->messageLoop();
34
Geoff Lang8a079e52013-10-18 16:13:33 -040035 if (!destroyEGLContext())
36 {
37 FAIL() << "egl context destruction failed.";
38 }
Jamie Madill8add0eb2014-08-26 13:16:35 -040039
40 // Check for quit message
41 Event myEvent;
42 while (mOSWindow->popEvent(&myEvent))
43 {
44 if (myEvent.Type == Event::EVENT_CLOSED)
45 {
46 exit(0);
47 }
48 }
Geoff Lang8a079e52013-10-18 16:13:33 -040049}
50
51void ANGLETest::swapBuffers()
52{
Jamie Madill62af5462014-08-26 13:16:37 -040053 mEGLWindow->swap();
Geoff Lang8a079e52013-10-18 16:13:33 -040054}
55
Austin Kinross4fd18b12014-12-22 12:32:05 -080056void ANGLETest::drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth, GLfloat quadScale)
Geoff Lang8a079e52013-10-18 16:13:33 -040057{
58 GLint positionLocation = glGetAttribLocation(program, positionAttribName.c_str());
59
60 glUseProgram(program);
61
62 const GLfloat vertices[] =
63 {
Austin Kinross4fd18b12014-12-22 12:32:05 -080064 -1.0f * quadScale, 1.0f * quadScale, quadDepth,
65 -1.0f * quadScale, -1.0f * quadScale, quadDepth,
66 1.0f * quadScale, -1.0f * quadScale, quadDepth,
Geoff Lang8a079e52013-10-18 16:13:33 -040067
Austin Kinross4fd18b12014-12-22 12:32:05 -080068 -1.0f * quadScale, 1.0f * quadScale, quadDepth,
69 1.0f * quadScale, -1.0f * quadScale, quadDepth,
70 1.0f * quadScale, 1.0f * quadScale, quadDepth,
Geoff Lang8a079e52013-10-18 16:13:33 -040071 };
72
73 glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
74 glEnableVertexAttribArray(positionLocation);
75
76 glDrawArrays(GL_TRIANGLES, 0, 6);
77
78 glDisableVertexAttribArray(positionLocation);
79 glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, 0, NULL);
80
81 glUseProgram(0);
82}
83
Geoff Langefc551f2013-10-31 10:20:28 -040084GLuint ANGLETest::compileShader(GLenum type, const std::string &source)
85{
86 GLuint shader = glCreateShader(type);
87
88 const char *sourceArray[1] = { source.c_str() };
89 glShaderSource(shader, 1, sourceArray, NULL);
90 glCompileShader(shader);
91
92 GLint compileResult;
93 glGetShaderiv(shader, GL_COMPILE_STATUS, &compileResult);
94
95 if (compileResult == 0)
96 {
97 GLint infoLogLength;
98 glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
99
100 std::vector<GLchar> infoLog(infoLogLength);
Jamie Madillb4fd0c92014-10-01 17:40:24 -0400101 glGetShaderInfoLog(shader, infoLog.size(), NULL, &infoLog[0]);
Geoff Langefc551f2013-10-31 10:20:28 -0400102
Jamie Madillb4fd0c92014-10-01 17:40:24 -0400103 std::cerr << "shader compilation failed: " << &infoLog[0];
Geoff Langefc551f2013-10-31 10:20:28 -0400104
105 glDeleteShader(shader);
106 shader = 0;
107 }
108
109 return shader;
110}
111
Geoff Lang8a079e52013-10-18 16:13:33 -0400112bool ANGLETest::extensionEnabled(const std::string &extName)
113{
114 const char* extString = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
115 return strstr(extString, extName.c_str()) != NULL;
116}
117
Geoff Lang8a079e52013-10-18 16:13:33 -0400118void ANGLETest::setWindowWidth(int width)
119{
Jamie Madill62af5462014-08-26 13:16:37 -0400120 mEGLWindow->setWidth(width);
Geoff Lang8a079e52013-10-18 16:13:33 -0400121}
122
123void ANGLETest::setWindowHeight(int height)
124{
Jamie Madill62af5462014-08-26 13:16:37 -0400125 mEGLWindow->setHeight(height);
Geoff Lang8a079e52013-10-18 16:13:33 -0400126}
127
Geoff Langefc551f2013-10-31 10:20:28 -0400128void ANGLETest::setConfigRedBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400129{
Jamie Madill62af5462014-08-26 13:16:37 -0400130 mEGLWindow->setConfigRedBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400131}
132
Geoff Langefc551f2013-10-31 10:20:28 -0400133void ANGLETest::setConfigGreenBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400134{
Jamie Madill62af5462014-08-26 13:16:37 -0400135 mEGLWindow->setConfigGreenBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400136}
137
Geoff Langefc551f2013-10-31 10:20:28 -0400138void ANGLETest::setConfigBlueBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400139{
Jamie Madill62af5462014-08-26 13:16:37 -0400140 mEGLWindow->setConfigBlueBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400141}
142
Geoff Langefc551f2013-10-31 10:20:28 -0400143void ANGLETest::setConfigAlphaBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400144{
Jamie Madill62af5462014-08-26 13:16:37 -0400145 mEGLWindow->setConfigAlphaBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400146}
147
Geoff Langefc551f2013-10-31 10:20:28 -0400148void ANGLETest::setConfigDepthBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400149{
Jamie Madill62af5462014-08-26 13:16:37 -0400150 mEGLWindow->setConfigDepthBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400151}
152
Geoff Langefc551f2013-10-31 10:20:28 -0400153void ANGLETest::setConfigStencilBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400154{
Jamie Madill62af5462014-08-26 13:16:37 -0400155 mEGLWindow->setConfigStencilBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400156}
157
158void ANGLETest::setMultisampleEnabled(bool enabled)
159{
Jamie Madill62af5462014-08-26 13:16:37 -0400160 mEGLWindow->setMultisample(enabled);
Geoff Lang8a079e52013-10-18 16:13:33 -0400161}
162
163int ANGLETest::getClientVersion() const
164{
Jamie Madill62af5462014-08-26 13:16:37 -0400165 return mEGLWindow->getClientVersion();
Geoff Lang8a079e52013-10-18 16:13:33 -0400166}
167
Geoff Langb9266272015-01-29 13:25:14 +0000168EGLWindow *ANGLETest::getEGLWindow() const
169{
170 return mEGLWindow;
171}
172
Geoff Lang8a079e52013-10-18 16:13:33 -0400173int ANGLETest::getWindowWidth() const
174{
Jamie Madill62af5462014-08-26 13:16:37 -0400175 return mEGLWindow->getWidth();
Geoff Lang8a079e52013-10-18 16:13:33 -0400176}
177
178int ANGLETest::getWindowHeight() const
179{
Jamie Madill62af5462014-08-26 13:16:37 -0400180 return mEGLWindow->getHeight();
Geoff Lang8a079e52013-10-18 16:13:33 -0400181}
182
Geoff Langefc551f2013-10-31 10:20:28 -0400183bool ANGLETest::isMultisampleEnabled() const
Geoff Lang8a079e52013-10-18 16:13:33 -0400184{
Jamie Madill62af5462014-08-26 13:16:37 -0400185 return mEGLWindow->isMultisample();
Geoff Lang8a079e52013-10-18 16:13:33 -0400186}
187
188bool ANGLETest::createEGLContext()
189{
Jamie Madill62af5462014-08-26 13:16:37 -0400190 return mEGLWindow->initializeGL(mOSWindow);
Geoff Lang8a079e52013-10-18 16:13:33 -0400191}
192
193bool ANGLETest::destroyEGLContext()
194{
Jamie Madill62af5462014-08-26 13:16:37 -0400195 mEGLWindow->destroyGL();
Geoff Lang8a079e52013-10-18 16:13:33 -0400196 return true;
197}
Geoff Langbb134672013-10-23 13:06:46 -0400198
Geoff Lang0d3683c2014-10-23 11:08:16 -0400199bool ANGLETest::InitTestWindow()
Jamie Madill8add0eb2014-08-26 13:16:35 -0400200{
201 mOSWindow = CreateOSWindow();
202 if (!mOSWindow->initialize("ANGLE_TEST", 128, 128))
203 {
204 return false;
205 }
206
Geoff Lang0d3683c2014-10-23 11:08:16 -0400207 mOSWindow->setVisible(true);
Jamie Madill8add0eb2014-08-26 13:16:35 -0400208
209 return true;
210}
211
Geoff Lang0d3683c2014-10-23 11:08:16 -0400212bool ANGLETest::DestroyTestWindow()
Jamie Madill8add0eb2014-08-26 13:16:35 -0400213{
214 if (mOSWindow)
215 {
216 mOSWindow->destroy();
217 delete mOSWindow;
218 mOSWindow = NULL;
219 }
220
221 return true;
222}
223
Geoff Lang0d3683c2014-10-23 11:08:16 -0400224bool ANGLETest::ResizeWindow(int width, int height)
Jamie Madill8add0eb2014-08-26 13:16:35 -0400225{
226 return mOSWindow->resize(width, height);
227}
228
Geoff Lang0d3683c2014-10-23 11:08:16 -0400229void ANGLETest::SetWindowVisible(bool isVisible)
Geoff Langbb134672013-10-23 13:06:46 -0400230{
Jamie Madill4119ed32014-10-01 10:41:40 -0400231 mOSWindow->setVisible(isVisible);
Geoff Langbb134672013-10-23 13:06:46 -0400232}
Geoff Lang0d3683c2014-10-23 11:08:16 -0400233
234OSWindow *ANGLETest::mOSWindow = NULL;
235
236void ANGLETestEnvironment::SetUp()
237{
238 if (!ANGLETest::InitTestWindow())
239 {
240 FAIL() << "Failed to create ANGLE test window.";
241 }
242}
243
244void ANGLETestEnvironment::TearDown()
245{
246 ANGLETest::DestroyTestWindow();
247}