1 #include "ANGLETest.h" 2 3 class ClearTest : public ANGLETest 4 { 5 protected: 6 ClearTest() 7 { 8 setWindowWidth(128); 9 setWindowHeight(128); 10 setConfigRedBits(8); 11 setConfigGreenBits(8); 12 setConfigBlueBits(8); 13 setConfigAlphaBits(8); 14 setConfigDepthBits(24); 15 } 16 17 virtual void SetUp() 18 { 19 ANGLETest::SetUp(); 20 21 const std::string vertexShaderSource = SHADER_SOURCE 22 ( 23 precision highp float; 24 attribute vec4 position; 25 26 void main() 27 { 28 gl_Position = position; 29 } 30 ); 31 32 const std::string fragmentShaderSource = SHADER_SOURCE 33 ( 34 precision highp float; 35 36 void main() 37 { 38 gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); 39 } 40 ); 41 42 mProgram = compileProgram(vertexShaderSource, fragmentShaderSource); 43 if (mProgram == 0) 44 { 45 FAIL() << "shader compilation failed."; 46 } 47 } 48 49 virtual void TearDown() 50 { 51 glDeleteProgram(mProgram); 52 53 ANGLETest::TearDown(); 54 } 55 56 GLuint mProgram; 57 }; 58 59 TEST_F(ClearTest, clear_issue) 60 { 61 EXPECT_GL_NO_ERROR(); 62 63 glEnable(GL_DEPTH_TEST); 64 glDepthFunc(GL_LEQUAL); 65 66 glClearColor(0.0, 1.0, 0.0, 1.0); 67 glClearDepthf(0.0); 68 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 69 70 EXPECT_GL_NO_ERROR(); 71 72 GLuint fbo; 73 glGenFramebuffers(1, &fbo); 74 glBindFramebuffer(GL_FRAMEBUFFER, fbo); 75 76 GLuint rbo; 77 glGenRenderbuffers(1, &rbo); 78 glBindRenderbuffer(GL_RENDERBUFFER, rbo); 79 glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB565, 16, 16); 80 81 EXPECT_GL_NO_ERROR(); 82 83 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo); 84 85 EXPECT_GL_NO_ERROR(); 86 87 glClearColor(1.0f, 0.0f, 0.0f, 1.0f); 88 glClearDepthf(1.0f); 89 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 90 91 EXPECT_GL_NO_ERROR(); 92 93 glBindFramebuffer(GL_FRAMEBUFFER, 0); 94 glBindBuffer(GL_ARRAY_BUFFER, 0); 95 96 drawQuad(mProgram, "position", 0.5f); 97 98 EXPECT_PIXEL_EQ(0, 0, 0, 255, 0, 255); 99 } 100