| #include "ANGLETest.h" |
| |
| class FramebufferFormatsTest : public ANGLETest |
| { |
| protected: |
| FramebufferFormatsTest() |
| { |
| setWindowWidth(128); |
| setWindowHeight(128); |
| setConfigRedBits(8); |
| setConfigGreenBits(8); |
| setConfigBlueBits(8); |
| setConfigAlphaBits(8); |
| } |
| |
| void checkBitCount(GLuint fbo, GLenum channel, GLint minBits) |
| { |
| glBindFramebuffer(GL_FRAMEBUFFER, fbo); |
| |
| GLint bits = 0; |
| glGetIntegerv(channel, &bits); |
| |
| if (minBits == 0) |
| { |
| EXPECT_EQ(minBits, bits); |
| } |
| else |
| { |
| EXPECT_GE(bits, minBits); |
| } |
| } |
| |
| void testBitCounts(GLuint fbo, GLint minRedBits, GLint minGreenBits, GLint minBlueBits, |
| GLint minAlphaBits, GLint minDepthBits, GLint minStencilBits) |
| { |
| checkBitCount(fbo, GL_RED_BITS, minRedBits); |
| checkBitCount(fbo, GL_GREEN_BITS, minGreenBits); |
| checkBitCount(fbo, GL_BLUE_BITS, minBlueBits); |
| checkBitCount(fbo, GL_ALPHA_BITS, minAlphaBits); |
| checkBitCount(fbo, GL_DEPTH_BITS, minDepthBits); |
| checkBitCount(fbo, GL_STENCIL_BITS, minStencilBits); |
| } |
| |
| void testTextureFormat(GLenum internalFormat, GLint minRedBits, GLint minGreenBits, GLint minBlueBits, |
| GLint minAlphaBits) |
| { |
| GLuint tex = 0; |
| glGenTextures(1, &tex); |
| glBindTexture(GL_TEXTURE_2D, tex); |
| glTexStorage2DEXT(GL_TEXTURE_2D, 1, internalFormat, 1, 1); |
| |
| GLuint fbo = 0; |
| glGenFramebuffers(1, &fbo); |
| glBindFramebuffer(GL_FRAMEBUFFER, fbo); |
| glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0); |
| |
| testBitCounts(fbo, minRedBits, minGreenBits, minBlueBits, minAlphaBits, 0, 0); |
| |
| glDeleteTextures(1, &tex); |
| glDeleteFramebuffers(1, &fbo); |
| } |
| |
| virtual void SetUp() |
| { |
| ANGLETest::SetUp(); |
| } |
| |
| virtual void TearDown() |
| { |
| ANGLETest::TearDown(); |
| } |
| }; |
| |
| TEST_F(FramebufferFormatsTest, RGBA4) |
| { |
| testTextureFormat(GL_RGBA4, 4, 4, 4, 4); |
| } |
| |
| TEST_F(FramebufferFormatsTest, RGB565) |
| { |
| testTextureFormat(GL_RGB565, 5, 6, 5, 0); |
| } |
| |
| TEST_F(FramebufferFormatsTest, RGB8) |
| { |
| testTextureFormat(GL_RGB8_OES, 8, 8, 8, 0); |
| } |
| |
| TEST_F(FramebufferFormatsTest, BGRA8) |
| { |
| testTextureFormat(GL_BGRA8_EXT, 8, 8, 8, 8); |
| } |
| |
| TEST_F(FramebufferFormatsTest, RGBA8) |
| { |
| testTextureFormat(GL_RGBA8_OES, 8, 8, 8, 8); |
| } |
| |