// Copyright 2011 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 "config.h" #include "cc/texture_copier.h" #include "cc/test/fake_web_graphics_context_3d.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/khronos/GLES2/gl2.h" using namespace cc; using namespace WebKit; using testing::InSequence; using testing::Test; using testing::_; class MockContext : public FakeWebGraphicsContext3D { public: MOCK_METHOD2(bindFramebuffer, void(WGC3Denum, WebGLId)); MOCK_METHOD3(texParameteri, void(WGC3Denum target, WGC3Denum pname, WGC3Dint param)); MOCK_METHOD3(drawArrays, void(WGC3Denum mode, WGC3Dint first, WGC3Dsizei count)); }; TEST(TextureCopierTest, testDrawArraysCopy) { scoped_ptr mockContext(new MockContext); { InSequence sequence; // Here we check just some essential properties of copyTexture() to avoid mirroring the full implementation. EXPECT_CALL(*mockContext, bindFramebuffer(GL_FRAMEBUFFER, _)); // Make sure linear filtering is disabled during the copy. EXPECT_CALL(*mockContext, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)); EXPECT_CALL(*mockContext, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); EXPECT_CALL(*mockContext, drawArrays(_, _, _)); // Linear filtering should be restored. EXPECT_CALL(*mockContext, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); EXPECT_CALL(*mockContext, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); // Default framebuffer should be restored EXPECT_CALL(*mockContext, bindFramebuffer(GL_FRAMEBUFFER, 0)); } int sourceTextureId = 1; int destTextureId = 2; IntSize size(256, 128); scoped_ptr copier(AcceleratedTextureCopier::create(mockContext.get(), false)); TextureCopier::Parameters copy = { sourceTextureId, destTextureId, size }; copier->copyTexture(copy); }