1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <GLES2/gl2.h> 6#include <GLES2/gl2ext.h> 7#include <GLES2/gl2extchromium.h> 8#include <cmath> 9 10#include "gpu/command_buffer/tests/gl_manager.h" 11#include "gpu/command_buffer/tests/gl_test_utils.h" 12#include "testing/gmock/include/gmock/gmock.h" 13#include "testing/gtest/include/gtest/gtest.h" 14 15namespace gpu { 16 17class CHROMIUMPathRenderingTest : public testing::Test { 18 public: 19 static const GLsizei kResolution = 100; 20 21 protected: 22 virtual void SetUp() { 23 GLManager::Options options; 24 options.size = gfx::Size(kResolution, kResolution); 25 gl_.Initialize(options); 26 } 27 28 virtual void TearDown() { gl_.Destroy(); } 29 30 void ExpectEqualMatrix(const GLfloat* expected, const GLfloat* actual) { 31 for (size_t i = 0; i < 16; ++i) { 32 EXPECT_EQ(expected[i], actual[i]); 33 } 34 } 35 void ExpectEqualMatrix(const GLfloat* expected, const GLint* actual) { 36 for (size_t i = 0; i < 16; ++i) { 37 EXPECT_EQ(static_cast<GLint>(round(expected[i])), actual[i]); 38 } 39 } 40 GLManager gl_; 41}; 42 43TEST_F(CHROMIUMPathRenderingTest, TestMatrix) { 44 if (!GLTestHelper::HasExtension("GL_CHROMIUM_path_rendering")) { 45 return; 46 } 47 static const GLfloat kIdentityMatrix[16] = { 48 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 49 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; 50 static const GLfloat kSeqMatrix[16] = { 51 0.5f, -0.5f, -0.1f, -0.8f, 4.4f, 5.5f, 6.6f, 7.7f, 52 8.8f, 9.9f, 10.11f, 11.22f, 12.33f, 13.44f, 14.55f, 15.66f}; 53 static const GLenum kMatrixModes[] = {GL_PATH_MODELVIEW_CHROMIUM, 54 GL_PATH_PROJECTION_CHROMIUM}; 55 static const GLenum kGetMatrixModes[] = {GL_PATH_MODELVIEW_MATRIX_CHROMIUM, 56 GL_PATH_PROJECTION_MATRIX_CHROMIUM}; 57 58 for (size_t i = 0; i < arraysize(kMatrixModes); ++i) { 59 GLfloat mf[16]; 60 GLint mi[16]; 61 memset(mf, 0, sizeof(mf)); 62 memset(mi, 0, sizeof(mi)); 63 glGetFloatv(kGetMatrixModes[i], mf); 64 glGetIntegerv(kGetMatrixModes[i], mi); 65 ExpectEqualMatrix(kIdentityMatrix, mf); 66 ExpectEqualMatrix(kIdentityMatrix, mi); 67 68 glMatrixLoadfCHROMIUM(kMatrixModes[i], kSeqMatrix); 69 memset(mf, 0, sizeof(mf)); 70 memset(mi, 0, sizeof(mi)); 71 glGetFloatv(kGetMatrixModes[i], mf); 72 glGetIntegerv(kGetMatrixModes[i], mi); 73 ExpectEqualMatrix(kSeqMatrix, mf); 74 ExpectEqualMatrix(kSeqMatrix, mi); 75 76 glMatrixLoadIdentityCHROMIUM(kMatrixModes[i]); 77 memset(mf, 0, sizeof(mf)); 78 memset(mi, 0, sizeof(mi)); 79 glGetFloatv(kGetMatrixModes[i], mf); 80 glGetIntegerv(kGetMatrixModes[i], mi); 81 ExpectEqualMatrix(kIdentityMatrix, mf); 82 ExpectEqualMatrix(kIdentityMatrix, mi); 83 84 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); 85 } 86} 87 88TEST_F(CHROMIUMPathRenderingTest, TestMatrixErrors) { 89 if (!GLTestHelper::HasExtension("GL_CHROMIUM_path_rendering")) { 90 return; 91 } 92 GLfloat mf[16]; 93 memset(mf, 0, sizeof(mf)); 94 95 // This should fail. 96 glMatrixLoadfCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM - 1, mf); 97 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError()); 98 99 glMatrixLoadfCHROMIUM(GL_PATH_MODELVIEW_CHROMIUM, mf); 100 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); 101 102 // This should fail. 103 glMatrixLoadIdentityCHROMIUM(GL_PATH_PROJECTION_CHROMIUM + 1); 104 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), glGetError()); 105 106 glMatrixLoadIdentityCHROMIUM(GL_PATH_PROJECTION_CHROMIUM); 107 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); 108} 109 110} // namespace gpu 111