Index: gpu/command_buffer/tests/gl_ext_srgb_unittest.cc |
diff --git a/gpu/command_buffer/tests/gl_ext_srgb_unittest.cc b/gpu/command_buffer/tests/gl_ext_srgb_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..53b3c24fc3d4d2a260d0ddb4f0745f3def90c417 |
--- /dev/null |
+++ b/gpu/command_buffer/tests/gl_ext_srgb_unittest.cc |
@@ -0,0 +1,74 @@ |
+// Copyright (c) 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <GLES2/gl2.h> |
+#include <GLES2/gl2ext.h> |
+ |
+#include "gpu/command_buffer/tests/gl_manager.h" |
+#include "gpu/command_buffer/tests/gl_test_utils.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace gpu { |
+ |
+// A collection of tests that exercise the GL_EXT_srgb extension. |
+class GLEXTSRGBTest : public testing::Test { |
+ protected: |
+ void SetUp() override { gl_.Initialize(GLManager::Options()); } |
+ void TearDown() override { gl_.Destroy(); } |
+ bool IsApplicable() const { |
+ return GLTestHelper::HasExtension("GL_EXT_sRGB"); |
+ } |
+ GLManager gl_; |
+}; |
+ |
+// Test to ensure that GL_SRGB_ALPHA as glTex(Sub)Image2D parameter works. This |
+// is tricky because GL_SRGB_ALPHA is valid in OpenGL ES 2.0 but not valid in |
+// OpenGL. |
+TEST_F(GLEXTSRGBTest, TexImageSRGBALPHAFormat) { |
+ if (!IsApplicable()) |
+ return; |
+ static const int kWidth = 10; |
+ static const int kHeight = 10; |
+ static const int kSubImageX = kWidth / 2; |
+ static const int kSubImageY = kHeight / 2; |
+ static const int kSubImageWidth = kWidth / 2; |
+ static const int kSubImageHeight = kHeight / 2; |
+ static const uint8 kImageColor[] = {255, 255, 255, 255}; |
+ static const uint8 kSubImageColor[] = {128, 128, 128, 128}; |
+ |
+ uint8 pixels[kWidth * kHeight * 4]; |
+ |
+ GLuint tex = 0; |
+ glGenTextures(1, &tex); |
+ glBindTexture(GL_TEXTURE_2D, tex); |
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
+ |
+ memset(pixels, kImageColor[0], sizeof(pixels)); |
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB_ALPHA_EXT, kWidth, kHeight, 0, |
+ GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, pixels); |
+ EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); |
+ |
+ memset(pixels, kSubImageColor[0], sizeof(pixels)); |
+ glTexSubImage2D(GL_TEXTURE_2D, 0, kSubImageX, kSubImageY, kSubImageWidth, |
+ kSubImageHeight, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, pixels); |
+ EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); |
+ glBindTexture(GL_TEXTURE_2D, 0); |
+ GLuint fbo = 0; |
+ glGenFramebuffers(1, &fbo); |
+ glBindFramebuffer(GL_FRAMEBUFFER, fbo); |
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, |
+ tex, 0); |
+ EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), |
+ glCheckFramebufferStatus(GL_FRAMEBUFFER)); |
+ |
+ GLTestHelper::CheckPixels(0, 0, kSubImageX, kHeight, 0, kImageColor); |
+ GLTestHelper::CheckPixels(0, 0, kWidth, kSubImageY, 0, kImageColor); |
+ GLTestHelper::CheckPixels(kSubImageX, kSubImageY, kSubImageWidth, |
+ kSubImageHeight, 0, kSubImageColor); |
+} |
+ |
+} // namespace gpu |