Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: cc/gl_renderer_unittest.cc

Issue 12036091: Fixes a bug when the framebuffer is cleared with invalid scissor rect (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/direct_renderer.cc ('k') | cc/test/render_pass_test_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/gl_renderer_unittest.cc
diff --git a/cc/gl_renderer_unittest.cc b/cc/gl_renderer_unittest.cc
index 89603b1ece65c8fc80ad1e4ae92a6678a0ed091f..e9665abadb837ded2ab6d38e8a4068e0fdbff705 100644
--- a/cc/gl_renderer_unittest.cc
+++ b/cc/gl_renderer_unittest.cc
@@ -636,5 +636,63 @@ TEST(GLRendererTest2, shouldClearRootRenderPass)
Mock::VerifyAndClearExpectations(&mockContext);
}
+class ScissorTestOnClearCheckingContext : public FakeWebGraphicsContext3D {
+public:
+ ScissorTestOnClearCheckingContext() : m_scissorEnabled(false) { }
+
+ virtual void clear(WGC3Dbitfield)
+ {
+ EXPECT_FALSE(m_scissorEnabled);
+ }
+
+ virtual void enable(WGC3Denum cap)
+ {
+ if (cap == GL_SCISSOR_TEST)
+ m_scissorEnabled = true;
+ }
+
+ virtual void disable(WGC3Denum cap)
+ {
+ if (cap == GL_SCISSOR_TEST)
+ m_scissorEnabled = false;
+ }
+
+private:
+ bool m_scissorEnabled;
+};
+
+TEST(GLRendererTest2, scissorTestWhenClearing) {
+ FakeRendererClient mockClient;
+ scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new ScissorTestOnClearCheckingContext)));
+ scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outputSurface.get()));
+ FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get());
+ EXPECT_TRUE(renderer.initialize());
+ EXPECT_FALSE(renderer.capabilities().usingPartialSwap);
+
+ gfx::Rect viewportRect(mockClient.deviceViewportSize());
+ ScopedPtrVector<RenderPass>& renderPasses = mockClient.renderPassesInDrawOrder();
+ renderPasses.clear();
+
+ gfx::Rect grandChildRect(25, 25);
+ RenderPass::Id grandChildPassId(3, 0);
+ TestRenderPass* grandChildPass = addRenderPass(renderPasses, grandChildPassId, grandChildRect, gfx::Transform());
+ addClippedQuad(grandChildPass, grandChildRect, SK_ColorYELLOW);
+
+ gfx::Rect childRect(50, 50);
+ RenderPass::Id childPassId(2, 0);
+ TestRenderPass* childPass = addRenderPass(renderPasses, childPassId, childRect, gfx::Transform());
+ addQuad(childPass, childRect, SK_ColorBLUE);
+
+ RenderPass::Id rootPassId(1, 0);
+ TestRenderPass* rootPass = addRenderPass(renderPasses, rootPassId, viewportRect, gfx::Transform());
+ addQuad(rootPass, viewportRect, SK_ColorGREEN);
+
+ addRenderPassQuad(rootPass, childPass);
+ addRenderPassQuad(childPass, grandChildPass);
+
+ renderer.decideRenderPassAllocationsForFrame(mockClient.renderPassesInDrawOrder());
+ renderer.drawFrame(mockClient.renderPassesInDrawOrder());
+}
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/direct_renderer.cc ('k') | cc/test/render_pass_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698