summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/framebuffer_manager_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/service/framebuffer_manager_unittest.cc')
-rw-r--r--gpu/command_buffer/service/framebuffer_manager_unittest.cc104
1 files changed, 103 insertions, 1 deletions
diff --git a/gpu/command_buffer/service/framebuffer_manager_unittest.cc b/gpu/command_buffer/service/framebuffer_manager_unittest.cc
index ed435c1..57fed7b 100644
--- a/gpu/command_buffer/service/framebuffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/framebuffer_manager_unittest.cc
@@ -75,7 +75,109 @@ TEST_F(FramebufferManagerTest, Destroy) {
ASSERT_TRUE(info1 == NULL);
}
-// TODO(gman): Write test for AttachRenderbuffer
+class FramebufferInfoTest : public testing::Test {
+ public:
+ static const GLuint kClient1Id = 1;
+ static const GLuint kService1Id = 11;
+
+ FramebufferInfoTest()
+ : manager_() {
+ }
+ ~FramebufferInfoTest() {
+ manager_.Destroy(false);
+ }
+
+ protected:
+ virtual void SetUp() {
+ gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
+ ::gfx::GLInterface::SetGLInterface(gl_.get());
+ manager_.CreateFramebufferInfo(kClient1Id, kService1Id);
+ info_ = manager_.GetFramebufferInfo(kClient1Id);
+ ASSERT_TRUE(info_ != NULL);
+ }
+
+ virtual void TearDown() {
+ ::gfx::GLInterface::SetGLInterface(NULL);
+ gl_.reset();
+ }
+
+ // Use StrictMock to make 100% sure we know how GL will be called.
+ scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
+ FramebufferManager manager_;
+ FramebufferManager::FramebufferInfo* info_;
+};
+
+// GCC requires these declarations, but MSVC requires they not be present
+#ifndef COMPILER_MSVC
+const GLuint FramebufferInfoTest::kClient1Id;
+const GLuint FramebufferInfoTest::kService1Id;
+#endif
+
+TEST_F(FramebufferInfoTest, Basic) {
+ EXPECT_EQ(kService1Id, info_->service_id());
+ EXPECT_FALSE(info_->IsDeleted());
+}
+
+TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
+ const GLuint kRenderbufferClient1Id = 33;
+ const GLuint kRenderbufferService1Id = 333;
+ const GLuint kRenderbufferClient2Id = 34;
+ const GLuint kRenderbufferService2Id = 334;
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT));
+
+ RenderbufferManager rb_manager;
+ rb_manager.CreateRenderbufferInfo(
+ kRenderbufferClient1Id, kRenderbufferService1Id);
+ RenderbufferManager::RenderbufferInfo* rb_info1 =
+ rb_manager.GetRenderbufferInfo(kRenderbufferClient1Id);
+ ASSERT_TRUE(rb_info1 != NULL);
+
+ // check adding one attachment
+ info_->AttachRenderbuffer(GL_COLOR_ATTACHMENT0, rb_info1);
+ EXPECT_TRUE(info_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
+
+ // check adding another
+ info_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, rb_info1);
+ EXPECT_TRUE(info_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
+ EXPECT_TRUE(info_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
+
+ // check marking them as cleared.
+ info_->MarkAttachedRenderbuffersAsCleared();
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
+
+ // Check adding one that is already cleared.
+ info_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, rb_info1);
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
+
+ // Check marking the renderbuffer as unclared.
+ rb_info1->set_internal_format(GL_RGBA);
+ EXPECT_TRUE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
+
+ // Clear it.
+ info_->MarkAttachedRenderbuffersAsCleared();
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
+
+ // Check replacing an attachment
+ rb_manager.CreateRenderbufferInfo(
+ kRenderbufferClient2Id, kRenderbufferService2Id);
+ RenderbufferManager::RenderbufferInfo* rb_info2 =
+ rb_manager.GetRenderbufferInfo(kRenderbufferClient2Id);
+ ASSERT_TRUE(rb_info2 != NULL);
+
+ info_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, rb_info2);
+ EXPECT_TRUE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
+
+ // Check removing it.
+ info_->AttachRenderbuffer(GL_STENCIL_ATTACHMENT, NULL);
+ EXPECT_FALSE(info_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
+
+ rb_manager.Destroy(false);
+}
} // namespace gles2
} // namespace gpu