• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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