diff options
author | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-25 17:09:40 +0000 |
---|---|---|
committer | reveman@chromium.org <reveman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-25 17:09:40 +0000 |
commit | cf3645c5d322938c31e2797795ee234dae29daf2 (patch) | |
tree | 76362123904fa87b2411b433b2e9b5efeb00240e /cc/output/gl_renderer_pixeltest.cc | |
parent | 5d59e0a3f6d7e0c78d99069441aaeccbfc009b38 (diff) | |
download | chromium_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.cc | 52 |
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 |