1 // 2 // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #ifndef ANGLE_TESTS_ANGLE_TEST_H_ 8 #define ANGLE_TESTS_ANGLE_TEST_H_ 9 10 #include "gtest/gtest.h" 11 12 #define GL_GLEXT_PROTOTYPES 13 14 #include <GLES3/gl3.h> 15 #include <GLES3/gl3ext.h> 16 #include <GLES2/gl2.h> 17 #include <GLES2/gl2ext.h> 18 #include <EGL/egl.h> 19 #include <EGL/eglext.h> 20 #include <algorithm> 21 22 #define EXPECT_GL_ERROR(err) EXPECT_EQ((err), glGetError()) 23 #define EXPECT_GL_NO_ERROR() EXPECT_GL_ERROR(GL_NO_ERROR) 24 25 #define ASSERT_GL_ERROR(err) ASSERT_EQ((err), glGetError()) 26 #define ASSERT_GL_NO_ERROR() ASSERT_GL_ERROR(GL_NO_ERROR) 27 28 #define EXPECT_PIXEL_EQ(x, y, r, g, b, a) \ 29 { \ 30 GLubyte pixel[4]; \ 31 glReadPixels((x), (y), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel); \ 32 EXPECT_GL_NO_ERROR(); \ 33 EXPECT_EQ((r), pixel[0]); \ 34 EXPECT_EQ((g), pixel[1]); \ 35 EXPECT_EQ((b), pixel[2]); \ 36 EXPECT_EQ((a), pixel[3]); \ 37 } 38 39 #define SHADER_SOURCE(...) #__VA_ARGS__ 40 41 class ANGLETest : public testing::Test 42 { 43 protected: 44 ANGLETest(); 45 46 public: 47 static bool InitTestWindow(); 48 static bool DestroyTestWindow(); 49 static bool ReizeWindow(int width, int height); 50 51 protected: 52 virtual void SetUp(); 53 virtual void TearDown(); 54 55 virtual void swapBuffers(); 56 57 static void drawQuad(GLuint program, const std::string& positionAttribName, GLfloat quadDepth); 58 static GLuint compileShader(GLenum type, const std::string &source); 59 static GLuint compileProgram(const std::string &vsSource, const std::string &fsSource); 60 static bool extensionEnabled(const std::string &extName); 61 62 void setClientVersion(int clientVersion); 63 void setWindowWidth(int width); 64 void setWindowHeight(int height); 65 void setConfigRedBits(int bits); 66 void setConfigGreenBits(int bits); 67 void setConfigBlueBits(int bits); 68 void setConfigAlphaBits(int bits); 69 void setConfigDepthBits(int bits); 70 void setConfigStencilBits(int bits); 71 void setMultisampleEnabled(bool enabled); 72 73 int getClientVersion() const; 74 int getWindowWidth() const; 75 int getWindowHeight() const; 76 int getConfigRedBits() const; 77 int getConfigGreenBits() const; 78 int getConfigBlueBits() const; 79 int getConfigAlphaBits() const; 80 int getConfigDepthBits() const; 81 int getConfigStencilBits() const; 82 bool isMultisampleEnabled() const; 83 84 private: 85 bool createEGLContext(); 86 bool destroyEGLContext(); 87 88 int mClientVersion; 89 int mWidth; 90 int mHeight; 91 int mRedBits; 92 int mGreenBits; 93 int mBlueBits; 94 int mAlphaBits; 95 int mDepthBits; 96 int mStencilBits; 97 bool mMultisample; 98 99 EGLConfig mConfig; 100 EGLSurface mSurface; 101 EGLContext mContext; 102 103 static EGLDisplay mDisplay; 104 static EGLNativeWindowType mNativeWindow; 105 static EGLNativeDisplayType mNativeDisplay; 106 }; 107 108 class ANGLETestEnvironment : public testing::Environment 109 { 110 public: 111 virtual void SetUp(); 112 virtual void TearDown(); 113 }; 114 115 #endif // ANGLE_TESTS_ANGLE_TEST_H_ 116