blob: 9c3d52b0c8755f2dd5d09716b13b4e0937b8f8b4 [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
Austin Kinross18b931d2014-09-29 12:58:31 -07005ANGLETest::ANGLETest(EGLint glesMajorVersion, EGLint requestedRenderer)
6 : mEGLWindow(NULL),
Jamie Madill4119ed32014-10-01 10:41:40 -04007 mOSWindow(NULL)
Geoff Lang8a079e52013-10-18 16:13:33 -04008{
Austin Kinross18b931d2014-09-29 12:58:31 -07009 mEGLWindow = new EGLWindow(1280, 720, glesMajorVersion, requestedRenderer);
Geoff Lang8a079e52013-10-18 16:13:33 -040010}
11
Geoff Lang8a079e52013-10-18 16:13:33 -040012void ANGLETest::SetUp()
13{
Jamie Madill4119ed32014-10-01 10:41:40 -040014 if (!initTestWindow())
Austin Kinross18b931d2014-09-29 12:58:31 -070015 {
Jamie Madill4119ed32014-10-01 10:41:40 -040016 FAIL() << "Failed to create ANGLE test window.";
Austin Kinross18b931d2014-09-29 12:58:31 -070017 }
18
Jamie Madill4119ed32014-10-01 10:41:40 -040019 if (!resizeWindow(mEGLWindow->getWidth(), mEGLWindow->getHeight()))
20 {
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 }
Jamie Madill4119ed32014-10-01 10:41:40 -040049
50 if (!destroyTestWindow())
51 {
52 FAIL() << "ANGLE test window destruction failed.";
53 }
Geoff Lang8a079e52013-10-18 16:13:33 -040054}
55
56void ANGLETest::swapBuffers()
57{
Jamie Madill62af5462014-08-26 13:16:37 -040058 mEGLWindow->swap();
Geoff Lang8a079e52013-10-18 16:13:33 -040059}
60
61void ANGLETest::drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth)
62{
63 GLint positionLocation = glGetAttribLocation(program, positionAttribName.c_str());
64
65 glUseProgram(program);
66
67 const GLfloat vertices[] =
68 {
69 -1.0f, 1.0f, quadDepth,
70 -1.0f, -1.0f, quadDepth,
71 1.0f, -1.0f, quadDepth,
72
73 -1.0f, 1.0f, quadDepth,
74 1.0f, -1.0f, quadDepth,
75 1.0f, 1.0f, quadDepth,
76 };
77
78 glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
79 glEnableVertexAttribArray(positionLocation);
80
81 glDrawArrays(GL_TRIANGLES, 0, 6);
82
83 glDisableVertexAttribArray(positionLocation);
84 glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, 0, NULL);
85
86 glUseProgram(0);
87}
88
Geoff Langefc551f2013-10-31 10:20:28 -040089GLuint ANGLETest::compileShader(GLenum type, const std::string &source)
90{
91 GLuint shader = glCreateShader(type);
92
93 const char *sourceArray[1] = { source.c_str() };
94 glShaderSource(shader, 1, sourceArray, NULL);
95 glCompileShader(shader);
96
97 GLint compileResult;
98 glGetShaderiv(shader, GL_COMPILE_STATUS, &compileResult);
99
100 if (compileResult == 0)
101 {
102 GLint infoLogLength;
103 glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
104
105 std::vector<GLchar> infoLog(infoLogLength);
Jamie Madillb4fd0c92014-10-01 17:40:24 -0400106 glGetShaderInfoLog(shader, infoLog.size(), NULL, &infoLog[0]);
Geoff Langefc551f2013-10-31 10:20:28 -0400107
Jamie Madillb4fd0c92014-10-01 17:40:24 -0400108 std::cerr << "shader compilation failed: " << &infoLog[0];
Geoff Langefc551f2013-10-31 10:20:28 -0400109
110 glDeleteShader(shader);
111 shader = 0;
112 }
113
114 return shader;
115}
116
Geoff Lang8a079e52013-10-18 16:13:33 -0400117bool ANGLETest::extensionEnabled(const std::string &extName)
118{
119 const char* extString = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
120 return strstr(extString, extName.c_str()) != NULL;
121}
122
Geoff Lang8a079e52013-10-18 16:13:33 -0400123void ANGLETest::setWindowWidth(int width)
124{
Jamie Madill62af5462014-08-26 13:16:37 -0400125 mEGLWindow->setWidth(width);
Geoff Lang8a079e52013-10-18 16:13:33 -0400126}
127
128void ANGLETest::setWindowHeight(int height)
129{
Jamie Madill62af5462014-08-26 13:16:37 -0400130 mEGLWindow->setHeight(height);
Geoff Lang8a079e52013-10-18 16:13:33 -0400131}
132
Geoff Langefc551f2013-10-31 10:20:28 -0400133void ANGLETest::setConfigRedBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400134{
Jamie Madill62af5462014-08-26 13:16:37 -0400135 mEGLWindow->setConfigRedBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400136}
137
Geoff Langefc551f2013-10-31 10:20:28 -0400138void ANGLETest::setConfigGreenBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400139{
Jamie Madill62af5462014-08-26 13:16:37 -0400140 mEGLWindow->setConfigGreenBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400141}
142
Geoff Langefc551f2013-10-31 10:20:28 -0400143void ANGLETest::setConfigBlueBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400144{
Jamie Madill62af5462014-08-26 13:16:37 -0400145 mEGLWindow->setConfigBlueBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400146}
147
Geoff Langefc551f2013-10-31 10:20:28 -0400148void ANGLETest::setConfigAlphaBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400149{
Jamie Madill62af5462014-08-26 13:16:37 -0400150 mEGLWindow->setConfigAlphaBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400151}
152
Geoff Langefc551f2013-10-31 10:20:28 -0400153void ANGLETest::setConfigDepthBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400154{
Jamie Madill62af5462014-08-26 13:16:37 -0400155 mEGLWindow->setConfigDepthBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400156}
157
Geoff Langefc551f2013-10-31 10:20:28 -0400158void ANGLETest::setConfigStencilBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400159{
Jamie Madill62af5462014-08-26 13:16:37 -0400160 mEGLWindow->setConfigStencilBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400161}
162
163void ANGLETest::setMultisampleEnabled(bool enabled)
164{
Jamie Madill62af5462014-08-26 13:16:37 -0400165 mEGLWindow->setMultisample(enabled);
Geoff Lang8a079e52013-10-18 16:13:33 -0400166}
167
168int ANGLETest::getClientVersion() const
169{
Jamie Madill62af5462014-08-26 13:16:37 -0400170 return mEGLWindow->getClientVersion();
Geoff Lang8a079e52013-10-18 16:13:33 -0400171}
172
173int 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
Jamie Madill4119ed32014-10-01 10:41:40 -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
Jamie Madill4119ed32014-10-01 10:41:40 -0400207 mOSWindow->setVisible(false);
Jamie Madill8add0eb2014-08-26 13:16:35 -0400208
209 return true;
210}
211
Jamie Madill4119ed32014-10-01 10:41:40 -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
Jamie Madill4119ed32014-10-01 10:41:40 -0400224bool ANGLETest::resizeWindow(int width, int height)
Jamie Madill8add0eb2014-08-26 13:16:35 -0400225{
226 return mOSWindow->resize(width, height);
227}
228
Jamie Madill4119ed32014-10-01 10:41:40 -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}