summaryrefslogtreecommitdiffstats
path: root/cc/output/gl_renderer_pixeltest.cc
diff options
context:
space:
mode:
authorreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-25 17:09:40 +0000
committerreveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-25 17:09:40 +0000
commitcf3645c5d322938c31e2797795ee234dae29daf2 (patch)
tree76362123904fa87b2411b433b2e9b5efeb00240e /cc/output/gl_renderer_pixeltest.cc
parent5d59e0a3f6d7e0c78d99069441aaeccbfc009b38 (diff)
downloadchromium_src-cf3645c5d322938c31e2797795ee234dae29daf2.zip
chromium_src-cf3645c5d322938c31e2797795ee234dae29daf2.tar.gz
chromium_src-cf3645c5d322938c31e2797795ee234dae29daf2.tar.bz2
cc: Fix anti-aliasing of axis-aligned quads.
Axis-aligned quads with edges not aligned to pixel boundaries are rendered incorrectly. These quads need anti-aliasing but current code that determines if anti-aliasing is needed thinks that no axis-aligned quads need it. This fixes the problem by adding alignment to pixel boundaries as an additional requirement to avoid anti-aliasing. BUG=169374 TEST=GLRendererPixelTest.AxisAligned,GLRendererShaderTest.DrawSolidColorShad Review URL: https://chromiumcodereview.appspot.com/12538005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@196423 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/output/gl_renderer_pixeltest.cc')
-rw-r--r--cc/output/gl_renderer_pixeltest.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/cc/output/gl_renderer_pixeltest.cc b/cc/output/gl_renderer_pixeltest.cc
index 064b78b..8da1b24 100644
--- a/cc/output/gl_renderer_pixeltest.cc
+++ b/cc/output/gl_renderer_pixeltest.cc
@@ -524,6 +524,58 @@ TEST_F(GLRendererPixelTest, AntiAliasing) {
base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")),
ExactPixelComparator(true)));
}
+
+TEST_F(GLRendererPixelTest, AxisAligned) {
+ gfx::Rect rect(0, 0, 200, 200);
+
+ RenderPass::Id id(1, 1);
+ gfx::Transform transform_to_root;
+ scoped_ptr<RenderPass> pass =
+ CreateTestRenderPass(id, rect, transform_to_root);
+
+ gfx::Transform red_content_to_target_transform;
+ red_content_to_target_transform.Translate(50, 50);
+ red_content_to_target_transform.Scale(
+ 0.5f + 1.0f / (rect.width() * 2.0f),
+ 0.5f + 1.0f / (rect.height() * 2.0f));
+ scoped_ptr<SharedQuadState> red_shared_state =
+ CreateTestSharedQuadState(red_content_to_target_transform, rect);
+
+ scoped_ptr<SolidColorDrawQuad> red = SolidColorDrawQuad::Create();
+ red->SetNew(red_shared_state.get(), rect, SK_ColorRED);
+
+ pass->quad_list.push_back(red.PassAs<DrawQuad>());
+
+ gfx::Transform yellow_content_to_target_transform;
+ yellow_content_to_target_transform.Translate(25.5f, 25.5f);
+ yellow_content_to_target_transform.Scale(0.5f, 0.5f);
+ scoped_ptr<SharedQuadState> yellow_shared_state =
+ CreateTestSharedQuadState(yellow_content_to_target_transform, rect);
+
+ scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create();
+ yellow->SetNew(yellow_shared_state.get(), rect, SK_ColorYELLOW);
+
+ pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
+
+ gfx::Transform blue_content_to_target_transform;
+ scoped_ptr<SharedQuadState> blue_shared_state =
+ CreateTestSharedQuadState(blue_content_to_target_transform, rect);
+
+ scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create();
+ blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE);
+
+ pass->quad_list.push_back(blue.PassAs<DrawQuad>());
+
+ RenderPassList pass_list;
+ pass_list.push_back(pass.Pass());
+
+ renderer_->DrawFrame(&pass_list);
+
+ EXPECT_TRUE(PixelsMatchReference(
+ base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")),
+ ExactPixelComparator(true)));
+}
+
#endif
} // namespace