| Index: cc/resource_provider_unittest.cc
|
| diff --git a/cc/resource_provider_unittest.cc b/cc/resource_provider_unittest.cc
|
| index 851144c9dcfefb6d0e69eda000b2e683449f8d26..71912b30d055f14a322f8c1c7c795ba74d6dd5c4 100644
|
| --- a/cc/resource_provider_unittest.cc
|
| +++ b/cc/resource_provider_unittest.cc
|
| @@ -10,6 +10,7 @@
|
| #include "cc/scoped_ptr_hash_map.h"
|
| #include "cc/test/compositor_fake_web_graphics_context_3d.h"
|
| #include "cc/test/fake_web_compositor_output_surface.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/khronos/GLES2/gl2.h"
|
| #include "third_party/khronos/GLES2/gl2ext.h"
|
| @@ -18,6 +19,8 @@
|
|
|
| using namespace WebKit;
|
|
|
| +using testing::Mock;
|
| +
|
| namespace cc {
|
| namespace {
|
|
|
| @@ -580,6 +583,61 @@ TEST_P(ResourceProviderTest, DeleteTransferredResources)
|
| EXPECT_EQ(0u, childResourceProvider->numResources());
|
| }
|
|
|
| +class TextureStateTrackingContext : public FakeWebGraphicsContext3D {
|
| +public:
|
| + MOCK_METHOD2(bindTexture, void(WGC3Denum target, WebGLId texture));
|
| + MOCK_METHOD3(texParameteri, void(WGC3Denum target, WGC3Denum pname, WGC3Dint param));
|
| +};
|
| +
|
| +TEST_P(ResourceProviderTest, ScopedSampler)
|
| +{
|
| + // Sampling is only supported for GL textures.
|
| + if (GetParam() != ResourceProvider::GLTexture)
|
| + return;
|
| +
|
| + scoped_ptr<GraphicsContext> outputSurface(FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGraphicsContext3D>(new TextureStateTrackingContext)));
|
| + TextureStateTrackingContext* context = static_cast<TextureStateTrackingContext*>(outputSurface->context3D());
|
| + scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outputSurface.get()));
|
| +
|
| + gfx::Size size(1, 1);
|
| + WGC3Denum format = GL_RGBA;
|
| + int pool = 1;
|
| + int textureId = 1;
|
| +
|
| + // Check that the texture gets created with the right sampler settings.
|
| + EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, textureId));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
|
| + ResourceProvider::ResourceId id = resourceProvider->createResource(pool, size, format, ResourceProvider::TextureUsageAny);
|
| +
|
| + // Creating a sampler with the default filter should not change any texture
|
| + // parameters.
|
| + {
|
| + EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, textureId));
|
| + ResourceProvider::ScopedSamplerGL sampler(resourceProvider.get(), id, GL_TEXTURE_2D, GL_LINEAR);
|
| + }
|
| +
|
| + // Using a different filter should be reflected in the texture parameters.
|
| + {
|
| + EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, textureId));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
|
| + ResourceProvider::ScopedSamplerGL sampler(resourceProvider.get(), id, GL_TEXTURE_2D, GL_NEAREST);
|
| + }
|
| +
|
| + // Test resetting to the default filter.
|
| + {
|
| + EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, textureId));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
| + EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
| + ResourceProvider::ScopedSamplerGL sampler(resourceProvider.get(), id, GL_TEXTURE_2D, GL_LINEAR);
|
| + }
|
| +
|
| + Mock::VerifyAndClearExpectations(context);
|
| +}
|
| +
|
| INSTANTIATE_TEST_CASE_P(ResourceProviderTests,
|
| ResourceProviderTest,
|
| ::testing::Values(ResourceProvider::GLTexture,
|
|
|