Home | History | Annotate | Download | only in angle_tests
      1 #include "ANGLETest.h"
      2 
      3 class SRGBTextureTest : public ANGLETest
      4 {
      5 protected:
      6     SRGBTextureTest()
      7     {
      8         setWindowWidth(128);
      9         setWindowHeight(128);
     10         setConfigRedBits(8);
     11         setConfigGreenBits(8);
     12         setConfigBlueBits(8);
     13         setConfigAlphaBits(8);
     14     }
     15 
     16     virtual void SetUp()
     17     {
     18         ANGLETest::SetUp();
     19     }
     20 
     21     virtual void TearDown()
     22     {
     23         ANGLETest::TearDown();
     24     }
     25 };
     26 
     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 
     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 
     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