• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "ANGLETest.h"
2 
3 class SRGBTextureTest : public ANGLETest
4 {
5 protected:
SRGBTextureTest()6     SRGBTextureTest()
7     {
8         setWindowWidth(128);
9         setWindowHeight(128);
10         setConfigRedBits(8);
11         setConfigGreenBits(8);
12         setConfigBlueBits(8);
13         setConfigAlphaBits(8);
14     }
15 
SetUp()16     virtual void SetUp()
17     {
18         ANGLETest::SetUp();
19     }
20 
TearDown()21     virtual void TearDown()
22     {
23         ANGLETest::TearDown();
24     }
25 };
26 
TEST_F(SRGBTextureTest,SRGBValidation)27 TEST_F(SRGBTextureTest, SRGBValidation)
28 {
29     bool supported = extensionEnabled("GL_EXT_sRGB") || getClientVersion() == 3;
30 
31     GLuint tex = 0;
32     glGenTextures(1, &tex);
33     glBindTexture(GL_TEXTURE_2D, tex);
34 
35     GLubyte pixel[3] = { 0 };
36     glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB, 1, 1, 0, GL_SRGB, GL_UNSIGNED_BYTE, pixel);
37     if (supported)
38     {
39         EXPECT_GL_NO_ERROR();
40 
41         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_SRGB, GL_UNSIGNED_BYTE, pixel);
42         EXPECT_GL_NO_ERROR();
43 
44         glGenerateMipmap(GL_TEXTURE_2D);
45         EXPECT_GL_ERROR(GL_INVALID_OPERATION);
46     }
47     else
48     {
49         EXPECT_GL_ERROR(GL_INVALID_ENUM);
50     }
51 
52     glDeleteTextures(1, &tex);
53 }
54 
TEST_F(SRGBTextureTest,SRGBAValidation)55 TEST_F(SRGBTextureTest, SRGBAValidation)
56 {
57     bool supported = extensionEnabled("GL_EXT_sRGB") || getClientVersion() == 3;
58 
59     GLuint tex = 0;
60     glGenTextures(1, &tex);
61     glBindTexture(GL_TEXTURE_2D, tex);
62 
63     GLubyte pixel[4] = { 0 };
64     glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB_ALPHA_EXT, 1, 1, 0, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, pixel);
65     if (supported)
66     {
67         EXPECT_GL_NO_ERROR();
68 
69         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, pixel);
70         EXPECT_GL_NO_ERROR();
71 
72         glGenerateMipmap(GL_TEXTURE_2D);
73         if (getClientVersion() == 2)
74         {
75             EXPECT_GL_ERROR(GL_INVALID_OPERATION);
76         }
77         else
78         {
79             EXPECT_GL_NO_ERROR();
80         }
81     }
82     else
83     {
84         EXPECT_GL_ERROR(GL_INVALID_ENUM);
85     }
86 
87     glDeleteTextures(1, &tex);
88 }
89 
TEST_F(SRGBTextureTest,SRGBARenderbuffer)90 TEST_F(SRGBTextureTest, SRGBARenderbuffer)
91 {
92     bool supported = extensionEnabled("GL_EXT_sRGB") || getClientVersion() == 3;
93 
94     GLuint rbo = 0;
95     glGenRenderbuffers(1, &rbo);
96     glBindRenderbuffer(GL_RENDERBUFFER, rbo);
97 
98     glRenderbufferStorage(GL_RENDERBUFFER, GL_SRGB8_ALPHA8_EXT, 1, 1);
99     if (supported)
100     {
101         EXPECT_GL_NO_ERROR();
102     }
103     else
104     {
105         EXPECT_GL_ERROR(GL_INVALID_ENUM);
106 
107         // Make sure the rbo has a size for future tests
108         glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8_OES, 1, 1);
109         EXPECT_GL_NO_ERROR();
110     }
111 
112     GLuint fbo = 0;
113     glGenFramebuffers(1, &fbo);
114     glBindFramebuffer(GL_FRAMEBUFFER, fbo);
115     glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo);
116     EXPECT_GL_NO_ERROR();
117 
118     GLint colorEncoding = 0;
119     glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
120                                           GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT, &colorEncoding);
121     if (supported)
122     {
123         EXPECT_GL_NO_ERROR();
124         EXPECT_EQ(GL_SRGB_EXT, colorEncoding);
125     }
126     else
127     {
128         EXPECT_GL_ERROR(GL_INVALID_ENUM);
129     }
130 
131     glDeleteFramebuffers(1, &fbo);
132     glDeleteRenderbuffers(1, &rbo);
133 }
134