1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "cc/test/test_web_graphics_context_3d.h" 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "gpu/GLES2/gl2extchromium.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/khronos/GLES2/gl2ext.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace cc { 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static bool check_parameter_value(TestWebGraphicsContext3D* context, 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLenum pname, 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint expected_value) { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLint actual_value = 0; 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->getTexParameteriv(GL_TEXTURE_2D, pname, &actual_value); 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return expected_value == actual_value; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static void expect_default_parameter_values(TestWebGraphicsContext3D* context) { 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value(context, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value( 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR)); 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value(context, GL_TEXTURE_WRAP_S, GL_REPEAT)); 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value(context, GL_TEXTURE_WRAP_T, GL_REPEAT)); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value( 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context, GL_TEXTURE_POOL_CHROMIUM, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM)); 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value(context, GL_TEXTURE_USAGE_ANGLE, GL_NONE)); 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(TestWebGraphicsContext3DTest, GetDefaultTextureParameterValues) { 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<TestWebGraphicsContext3D> context( 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestWebGraphicsContext3D::Create()); 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint texture = context->createTexture(); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->bindTexture(GL_TEXTURE_2D, texture); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expect_default_parameter_values(context.get()); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(TestWebGraphicsContext3DTest, SetAndGetTextureParameter) { 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<TestWebGraphicsContext3D> context( 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestWebGraphicsContext3D::Create()); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint texture = context->createTexture(); 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->bindTexture(GL_TEXTURE_2D, texture); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) check_parameter_value(context.get(), GL_TEXTURE_MIN_FILTER, GL_NEAREST)); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(TestWebGraphicsContext3DTest, 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetAndGetMultipleTextureParametersOnMultipleTextures) { 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<TestWebGraphicsContext3D> context( 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) TestWebGraphicsContext3D::Create()); 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Set and get non-default texture parameters on the first texture. 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint first_texture = context->createTexture(); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->bindTexture(GL_TEXTURE_2D, first_texture); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) check_parameter_value(context.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) check_parameter_value(context.get(), GL_TEXTURE_MAG_FILTER, GL_NEAREST)); 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Set and get different, non-default texture parameters on the second 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // texture. 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GLuint second_texture = context->createTexture(); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->bindTexture(GL_TEXTURE_2D, second_texture); 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->texParameteri( 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->texParameteri( 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value( 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST)); 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(check_parameter_value( 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context.get(), GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR)); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Get texture parameters on the first texture and verify they are still 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // intact. 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context->bindTexture(GL_TEXTURE_2D, first_texture); 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) check_parameter_value(context.get(), GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) check_parameter_value(context.get(), GL_TEXTURE_MAG_FILTER, GL_NEAREST)); 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace cc 98