|  | // Copyright (c) 2012 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 <GLES2/gl2extchromium.h> | 
|  | #include <cmath> | 
|  |  | 
|  | #include "gpu/command_buffer/tests/gl_manager.h" | 
|  | #include "gpu/command_buffer/tests/gl_test_utils.h" | 
|  | #include "testing/gmock/include/gmock/gmock.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace gpu { | 
|  |  | 
|  | class CHROMIUMPathRenderingTest : public testing::Test { | 
|  | public: | 
|  | static const GLsizei kResolution = 100; | 
|  |  | 
|  | protected: | 
|  | virtual void SetUp() { | 
|  | GLManager::Options options; | 
|  | options.size = gfx::Size(kResolution, kResolution); | 
|  | gl_.Initialize(options); | 
|  | } | 
|  |  | 
|  | virtual void TearDown() { gl_.Destroy(); } | 
|  |  | 
|  | void ExpectEqualMatrix(const GLfloat* expected, const GLfloat* actual) { | 
|  | for (size_t i = 0; i < 16; ++i) { | 
|  | EXPECT_EQ(expected[i], actual[i]); | 
|  | } | 
|  | } | 
|  | void ExpectEqualMatrix(const GLfloat* expected, const GLint* actual) { | 
|  | for (size_t i = 0; i < 16; ++i) { | 
|  | EXPECT_EQ(static_cast<GLint>(round(expected[i])), actual[i]); | 
|  | } | 
|  | } | 
|  | GLManager gl_; | 
|  | }; | 
|  |  | 
|  | TEST_F(CHROMIUMPathRenderingTest, TestMatrix) { | 
|  | if (!GLTestHelper::HasExtension("GL_CHROMIUM_path_rendering")) { | 
|  | return; | 
|  | } | 
|  | static const GLfloat kIdentityMatrix[16] = { | 
|  | 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, | 
|  | 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; | 
|  | static const GLfloat kSeqMatrix[16] = { | 
|  | 0.5f, -0.5f, -0.1f,  -0.8f,  4.4f,   5.5f,   6.6f,   7.7f, | 
|  | 8.8f, 9.9f,  10.11f, 11.22f, 12.33f, 13.44f, 14.55f, 15.66f}; | 
|  | static const GLenum kMatrixModes[] = {GL_PATH_MODELVIEW_CHROMIUM, | 
|  | GL_PATH_PROJECTION_CHROMIUM}; | 
|  | static const GLenum kGetMatrixModes[] = {GL_PATH_MODELVIEW_MATRIX_CHROMIUM, | 
|  | GL_PATH_PROJECTION_MATRIX_CHROMIUM}; | 
|  |  | 
|  | for (size_t i = 0; i < arraysize(kMatrixModes); ++i) { | 
|  | GLfloat mf[16]; | 
|  | GLint mi[16]; | 
|  | memset(mf, 0, sizeof(mf)); | 
|  | memset(mi, 0, sizeof(mi)); | 
|  | glGetFloatv(kGetMatrixModes[i], mf); | 
|  | glGetIntegerv(kGetMatrixModes[i], mi); | 
|  | ExpectEqualMatrix(kIdentityMatrix, mf); | 
|  | ExpectEqualMatrix(kIdentityMatrix, mi); | 
|  |  | 
|  | glMatrixLoadfCHROMIUM(kMatrixModes[i], kSeqMatrix); | 
|  | memset(mf, 0, sizeof(mf)); | 
|  | memset(mi, 0, sizeof(mi)); | 
|  | glGetFloatv(kGetMatrixModes[i], mf); | 
|  | glGetIntegerv(kGetMatrixModes[i], mi); | 
|  | ExpectEqualMatrix(kSeqMatrix, mf); | 
|  | ExpectEqualMatrix(kSeqMatrix, mi); | 
|  |  | 
|  | glMatrixLoadIdentityCHROMIUM(kMatrixModes[i]); | 
|  | memset(mf, 0, sizeof(mf)); | 
|  | memset(mi, 0, sizeof(mi)); | 
|  | glGetFloatv(kGetMatrixModes[i], mf); | 
|  | glGetIntegerv(kGetMatrixModes[i], mi); | 
|  | ExpectEqualMatrix(kIdentityMatrix, mf); | 
|  | ExpectEqualMatrix(kIdentityMatrix, mi); | 
|  |  | 
|  | EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); | 
|  | } | 
|  | } | 
|  |  | 
|  | TEST_F(CHROMIUMPathRenderingTest, TestMatrixErrors) { | 
|  | if (!GLTestHelper::HasExtension("GL_CHROMIUM_path_rendering")) { | 
|  | return; | 
|  | } | 
|  | GLfloat mf[16]; | 
|  | memset(mf, 0, sizeof(mf)); | 
|  |  | 
|  | // This should fail. | 
|  | glMatrixLoadfCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM - 1, mf); | 
|  | EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError()); | 
|  |  | 
|  | glMatrixLoadfCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM, mf); | 
|  | EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); | 
|  |  | 
|  | // This should fail. | 
|  | glMatrixLoadIdentityCHROMIUM(GL_PATH_PROJECTION_CHROMIUM + 1); | 
|  | EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError()); | 
|  |  | 
|  | glMatrixLoadIdentityCHROMIUM(GL_PATH_PROJECTION_CHROMIUM); | 
|  | EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); | 
|  | } | 
|  |  | 
|  | }  // namespace gpu |