blob: 25060890217514b1f88dc413ffcf2ae2dc7db141 [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
Austin Kinross18b931d2014-09-29 12:58:31 -07007ANGLETest::ANGLETest(EGLint glesMajorVersion, EGLint requestedRenderer)
8 : mEGLWindow(NULL),
9 mRequestedRenderer(requestedRenderer)
Geoff Lang8a079e52013-10-18 16:13:33 -040010{
Austin Kinross18b931d2014-09-29 12:58:31 -070011 mEGLWindow = new EGLWindow(1280, 720, glesMajorVersion, requestedRenderer);
Geoff Lang8a079e52013-10-18 16:13:33 -040012}
13
Geoff Lang8a079e52013-10-18 16:13:33 -040014void ANGLETest::SetUp()
15{
Austin Kinross18b931d2014-09-29 12:58:31 -070016 // As per the spec for ANGLE_platform_angle, the value of EGL_PLATFORM_ANGLE_TYPE_ANGLE is ignored if an EGLDisplay
17 // was previously created for any value of EGLNativeDisplayType.
18 // As a result, if we wish to request a different display type then we need to recreate the OS Window.
19 if (mOSWindow->getRequestedRenderer() != EGL_NONE && mOSWindow->getRequestedRenderer() != mRequestedRenderer)
20 {
21 ANGLETest::DestroyTestWindow();
22
23 if (!ANGLETest::InitTestWindow())
24 {
25 FAIL() << "Failed to create ANGLE test window.";
26 }
27 }
28
Jamie Madill62af5462014-08-26 13:16:37 -040029 ResizeWindow(mEGLWindow->getWidth(), mEGLWindow->getHeight());
Geoff Lang8a079e52013-10-18 16:13:33 -040030 if (!createEGLContext())
31 {
32 FAIL() << "egl context creation failed.";
33 }
34}
35
36void ANGLETest::TearDown()
37{
38 swapBuffers();
Jamie Madill9e16d402014-09-08 17:36:33 -040039 mOSWindow->messageLoop();
40
Geoff Lang8a079e52013-10-18 16:13:33 -040041 if (!destroyEGLContext())
42 {
43 FAIL() << "egl context destruction failed.";
44 }
Jamie Madill8add0eb2014-08-26 13:16:35 -040045
46 // Check for quit message
47 Event myEvent;
48 while (mOSWindow->popEvent(&myEvent))
49 {
50 if (myEvent.Type == Event::EVENT_CLOSED)
51 {
52 exit(0);
53 }
54 }
Geoff Lang8a079e52013-10-18 16:13:33 -040055}
56
57void ANGLETest::swapBuffers()
58{
Jamie Madill62af5462014-08-26 13:16:37 -040059 mEGLWindow->swap();
Geoff Lang8a079e52013-10-18 16:13:33 -040060}
61
62void ANGLETest::drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth)
63{
64 GLint positionLocation = glGetAttribLocation(program, positionAttribName.c_str());
65
66 glUseProgram(program);
67
68 const GLfloat vertices[] =
69 {
70 -1.0f, 1.0f, quadDepth,
71 -1.0f, -1.0f, quadDepth,
72 1.0f, -1.0f, quadDepth,
73
74 -1.0f, 1.0f, quadDepth,
75 1.0f, -1.0f, quadDepth,
76 1.0f, 1.0f, quadDepth,
77 };
78
79 glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
80 glEnableVertexAttribArray(positionLocation);
81
82 glDrawArrays(GL_TRIANGLES, 0, 6);
83
84 glDisableVertexAttribArray(positionLocation);
85 glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, 0, NULL);
86
87 glUseProgram(0);
88}
89
Geoff Langefc551f2013-10-31 10:20:28 -040090GLuint ANGLETest::compileShader(GLenum type, const std::string &source)
91{
92 GLuint shader = glCreateShader(type);
93
94 const char *sourceArray[1] = { source.c_str() };
95 glShaderSource(shader, 1, sourceArray, NULL);
96 glCompileShader(shader);
97
98 GLint compileResult;
99 glGetShaderiv(shader, GL_COMPILE_STATUS, &compileResult);
100
101 if (compileResult == 0)
102 {
103 GLint infoLogLength;
104 glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);
105
106 std::vector<GLchar> infoLog(infoLogLength);
107 glGetShaderInfoLog(shader, infoLog.size(), NULL, infoLog.data());
108
109 std::cerr << "shader compilation failed: " << infoLog.data();
110
111 glDeleteShader(shader);
112 shader = 0;
113 }
114
115 return shader;
116}
117
Geoff Lang8a079e52013-10-18 16:13:33 -0400118bool ANGLETest::extensionEnabled(const std::string &extName)
119{
120 const char* extString = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
121 return strstr(extString, extName.c_str()) != NULL;
122}
123
Geoff Lang8a079e52013-10-18 16:13:33 -0400124void ANGLETest::setWindowWidth(int width)
125{
Jamie Madill62af5462014-08-26 13:16:37 -0400126 mEGLWindow->setWidth(width);
Geoff Lang8a079e52013-10-18 16:13:33 -0400127}
128
129void ANGLETest::setWindowHeight(int height)
130{
Jamie Madill62af5462014-08-26 13:16:37 -0400131 mEGLWindow->setHeight(height);
Geoff Lang8a079e52013-10-18 16:13:33 -0400132}
133
Geoff Langefc551f2013-10-31 10:20:28 -0400134void ANGLETest::setConfigRedBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400135{
Jamie Madill62af5462014-08-26 13:16:37 -0400136 mEGLWindow->setConfigRedBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400137}
138
Geoff Langefc551f2013-10-31 10:20:28 -0400139void ANGLETest::setConfigGreenBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400140{
Jamie Madill62af5462014-08-26 13:16:37 -0400141 mEGLWindow->setConfigGreenBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400142}
143
Geoff Langefc551f2013-10-31 10:20:28 -0400144void ANGLETest::setConfigBlueBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400145{
Jamie Madill62af5462014-08-26 13:16:37 -0400146 mEGLWindow->setConfigBlueBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400147}
148
Geoff Langefc551f2013-10-31 10:20:28 -0400149void ANGLETest::setConfigAlphaBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400150{
Jamie Madill62af5462014-08-26 13:16:37 -0400151 mEGLWindow->setConfigAlphaBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400152}
153
Geoff Langefc551f2013-10-31 10:20:28 -0400154void ANGLETest::setConfigDepthBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400155{
Jamie Madill62af5462014-08-26 13:16:37 -0400156 mEGLWindow->setConfigDepthBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400157}
158
Geoff Langefc551f2013-10-31 10:20:28 -0400159void ANGLETest::setConfigStencilBits(int bits)
Geoff Lang8a079e52013-10-18 16:13:33 -0400160{
Jamie Madill62af5462014-08-26 13:16:37 -0400161 mEGLWindow->setConfigStencilBits(bits);
Geoff Lang8a079e52013-10-18 16:13:33 -0400162}
163
164void ANGLETest::setMultisampleEnabled(bool enabled)
165{
Jamie Madill62af5462014-08-26 13:16:37 -0400166 mEGLWindow->setMultisample(enabled);
Geoff Lang8a079e52013-10-18 16:13:33 -0400167}
168
169int ANGLETest::getClientVersion() const
170{
Jamie Madill62af5462014-08-26 13:16:37 -0400171 return mEGLWindow->getClientVersion();
Geoff Lang8a079e52013-10-18 16:13:33 -0400172}
173
174int ANGLETest::getWindowWidth() const
175{
Jamie Madill62af5462014-08-26 13:16:37 -0400176 return mEGLWindow->getWidth();
Geoff Lang8a079e52013-10-18 16:13:33 -0400177}
178
179int ANGLETest::getWindowHeight() const
180{
Jamie Madill62af5462014-08-26 13:16:37 -0400181 return mEGLWindow->getHeight();
Geoff Lang8a079e52013-10-18 16:13:33 -0400182}
183
Geoff Langefc551f2013-10-31 10:20:28 -0400184bool ANGLETest::isMultisampleEnabled() const
Geoff Lang8a079e52013-10-18 16:13:33 -0400185{
Jamie Madill62af5462014-08-26 13:16:37 -0400186 return mEGLWindow->isMultisample();
Geoff Lang8a079e52013-10-18 16:13:33 -0400187}
188
189bool ANGLETest::createEGLContext()
190{
Jamie Madill62af5462014-08-26 13:16:37 -0400191 return mEGLWindow->initializeGL(mOSWindow);
Geoff Lang8a079e52013-10-18 16:13:33 -0400192}
193
194bool ANGLETest::destroyEGLContext()
195{
Jamie Madill62af5462014-08-26 13:16:37 -0400196 mEGLWindow->destroyGL();
Geoff Lang8a079e52013-10-18 16:13:33 -0400197 return true;
198}
Geoff Langbb134672013-10-23 13:06:46 -0400199
Jamie Madill8add0eb2014-08-26 13:16:35 -0400200bool ANGLETest::InitTestWindow()
201{
202 mOSWindow = CreateOSWindow();
203 if (!mOSWindow->initialize("ANGLE_TEST", 128, 128))
204 {
205 return false;
206 }
207
208 mOSWindow->setVisible(true);
209
210 return true;
211}
212
213bool ANGLETest::DestroyTestWindow()
214{
215 if (mOSWindow)
216 {
217 mOSWindow->destroy();
218 delete mOSWindow;
219 mOSWindow = NULL;
220 }
221
222 return true;
223}
224
225bool ANGLETest::ResizeWindow(int width, int height)
226{
227 return mOSWindow->resize(width, height);
228}
229
Geoff Langbb134672013-10-23 13:06:46 -0400230void ANGLETestEnvironment::SetUp()
231{
232 if (!ANGLETest::InitTestWindow())
233 {
234 FAIL() << "Failed to create ANGLE test window.";
235 }
236}
237
238void ANGLETestEnvironment::TearDown()
239{
240 ANGLETest::DestroyTestWindow();
241}