Index: ui/gl/test/gl_image_test_template.h |
diff --git a/ui/gl/test/gl_image_test_template.h b/ui/gl/test/gl_image_test_template.h |
index 113fb69d53ddf1b89f14b35dc30040efcb9cc077..adcb2588034b4c1d0a4ae35a002d30bc71c9191a 100644 |
--- a/ui/gl/test/gl_image_test_template.h |
+++ b/ui/gl/test/gl_image_test_template.h |
@@ -210,6 +210,60 @@ TYPED_TEST_P(GLImageCopyTest, CopyTexImage) { |
// handles CopyTexImage correctly. |
REGISTER_TYPED_TEST_CASE_P(GLImageCopyTest, CopyTexImage); |
+template <typename GLImageTestDelegate> |
+class GLImageBindTest : public GLImageTest<GLImageTestDelegate> {}; |
+ |
+TYPED_TEST_CASE_P(GLImageBindTest); |
+ |
+TYPED_TEST_P(GLImageBindTest, BindTexImage) { |
+ const gfx::Size image_size(256, 256); |
+ const uint8_t image_color[] = {0x10, 0x20, 0, 0xff}; |
+ |
+ GLuint framebuffer = |
+ GLTestHelper::SetupFramebuffer(image_size.width(), image_size.height()); |
+ ASSERT_TRUE(framebuffer); |
+ glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer); |
+ glViewport(0, 0, image_size.width(), image_size.height()); |
+ |
+ GLuint program = this->CreateSingleTextureProgram(); |
+ GLuint vertex_buffer = gfx::GLHelper::SetupQuadVertexBuffer(); |
+ |
+ for (auto format : gfx::GetBufferFormatsForTesting()) { |
+ if (!TypeParam::IsSupported(format)) { |
+ continue; |
+ } |
+ |
+ // Create a solid color green image of preferred format. This must succeed |
+ // in order for a GLImage to be conformant. |
+ scoped_refptr<gl::GLImage> image = |
+ this->delegate_.CreateSolidColorImage(image_size, format, image_color); |
+ ASSERT_TRUE(image); |
+ |
+ GLuint texture = GLTestHelper::CreateTexture(GL_TEXTURE_2D); |
+ |
+ // Bind |image| to |texture|. |
+ bool rv = image->BindTexImage(GL_TEXTURE_2D); |
+ EXPECT_TRUE(rv); |
+ |
+ // Draw |texture| to viewport and read back pixels to check expectations. |
+ gfx::GLHelper::DrawQuad(vertex_buffer); |
+ |
+ GLTestHelper::CheckPixels(0, 0, image_size.width(), image_size.height(), |
+ image_color); |
+ |
+ // Clean up. |
+ glDeleteTextures(1, &texture); |
+ image->Destroy(true); |
+ } |
+ glDeleteProgram(program); |
+ glDeleteBuffersARB(1, &vertex_buffer); |
+ glDeleteFramebuffersEXT(1, &framebuffer); |
+} |
+ |
+// The GLImageBindTest test case verifies that the GLImage implementation |
+// handles BindTexImage correctly. |
+REGISTER_TYPED_TEST_CASE_P(GLImageBindTest, BindTexImage); |
+ |
} // namespace gl |
#endif // UI_GL_TEST_GL_IMAGE_TEST_TEMPLATE_H_ |