summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authornick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-25 17:32:20 +0000
committernick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-25 17:32:20 +0000
commitf088145ace0e944476074c58114aba217f9438e3 (patch)
treeceb320ec1f4f7b682743ac13fd5bbd850b5b28a8 /cc
parent51a5a9dfd1dc14e4bbccbb2cb661f84df495b2fe (diff)
downloadchromium_src-f088145ace0e944476074c58114aba217f9438e3.zip
chromium_src-f088145ace0e944476074c58114aba217f9438e3.tar.gz
chromium_src-f088145ace0e944476074c58114aba217f9438e3.tar.bz2
Revert 196423 "cc: Fix anti-aliasing of axis-aligned quads."
[Reason for revert: AxisAligned unit test is failing on some of the Mac bots.] > 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 TBR=reveman@chromium.org Review URL: https://codereview.chromium.org/14465006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@196427 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/output/gl_renderer.cc32
-rw-r--r--cc/output/gl_renderer_pixeltest.cc52
-rw-r--r--cc/output/gl_renderer_unittest.cc34
-rw-r--r--cc/test/data/axis_aligned.png0
-rw-r--r--cc/test/render_pass_test_utils.cc16
-rw-r--r--cc/test/render_pass_test_utils.h6
6 files changed, 12 insertions, 128 deletions
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index 19b215b..cf7b64b 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -81,10 +81,6 @@ bool NeedsIOSurfaceReadbackWorkaround() {
#endif
}
-// Smallest unit that impact anti-aliasing output. We use this to
-// determine when anti-aliasing is unnecessary.
-const float kAntiAliasingEpsilon = 1.0f / 1024.0f;
-
} // anonymous namespace
scoped_ptr<GLRenderer> GLRenderer::Create(RendererClient* client,
@@ -719,8 +715,7 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
// Use anti-aliasing programs only when necessary.
bool use_aa = (!device_quad.IsRectilinear() ||
- !gfx::IsNearestRectWithinDistance(device_quad.BoundingBox(),
- kAntiAliasingEpsilon));
+ !device_quad.BoundingBox().IsExpressibleAsRect());
if (use_aa) {
device_layer_bounds.InflateAntiAliasingDistance();
device_layer_edges.InflateAntiAliasingDistance();
@@ -1016,11 +1011,11 @@ bool GLRenderer::SetupQuadForAntialiasing(
device_transform, gfx::QuadF(quad->visibleContentRect()), &clipped);
DCHECK(!clipped);
+ // TODO(reveman): Axis-aligned is not enough to avoid anti-aliasing.
+ // Bounding rectangle for quad also needs to be expressible as an integer
+ // rectangle. crbug.com/169374
bool is_axis_aligned_in_target = device_layer_quad.IsRectilinear();
- bool is_nearest_rect_within_epsilon = is_axis_aligned_in_target &&
- gfx::IsNearestRectWithinDistance(device_layer_quad.BoundingBox(),
- kAntiAliasingEpsilon);
- bool use_aa = !clipped && !is_nearest_rect_within_epsilon && quad->IsEdge();
+ bool use_aa = !clipped && !is_axis_aligned_in_target && quad->IsEdge();
if (!use_aa)
return false;
@@ -1205,16 +1200,13 @@ void GLRenderer::DrawContentQuad(const DrawingFrame* frame,
// is mapped to the unit square by the vertex shader and mapped
// back to normalized texture coordinates by the fragment shader
// after being clamped to 0-1 range.
- float tex_clamp_x = std::min(
- 0.5f, 0.5f * clamp_tex_rect.width() - kAntiAliasingEpsilon);
- float tex_clamp_y = std::min(
- 0.5f, 0.5f * clamp_tex_rect.height() - kAntiAliasingEpsilon);
- float geom_clamp_x = std::min(
- tex_clamp_x * tex_to_geom_scale_x,
- 0.5f * clamp_geom_rect.width() - kAntiAliasingEpsilon);
- float geom_clamp_y = std::min(
- tex_clamp_y * tex_to_geom_scale_y,
- 0.5f * clamp_geom_rect.height() - kAntiAliasingEpsilon);
+ const float epsilon = 1.0f / 1024.0f;
+ float tex_clamp_x = std::min(0.5f, 0.5f * clamp_tex_rect.width() - epsilon);
+ float tex_clamp_y = std::min(0.5f, 0.5f * clamp_tex_rect.height() - epsilon);
+ float geom_clamp_x = std::min(tex_clamp_x * tex_to_geom_scale_x,
+ 0.5f * clamp_geom_rect.width() - epsilon);
+ float geom_clamp_y = std::min(tex_clamp_y * tex_to_geom_scale_y,
+ 0.5f * clamp_geom_rect.height() - epsilon);
clamp_geom_rect.Inset(geom_clamp_x, geom_clamp_y, geom_clamp_x, geom_clamp_y);
clamp_tex_rect.Inset(tex_clamp_x, tex_clamp_y, tex_clamp_x, tex_clamp_y);
diff --git a/cc/output/gl_renderer_pixeltest.cc b/cc/output/gl_renderer_pixeltest.cc
index 8da1b24..064b78b 100644
--- a/cc/output/gl_renderer_pixeltest.cc
+++ b/cc/output/gl_renderer_pixeltest.cc
@@ -524,58 +524,6 @@ 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
diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc
index bbd261a..ef56cc2 100644
--- a/cc/output/gl_renderer_unittest.cc
+++ b/cc/output/gl_renderer_unittest.cc
@@ -325,12 +325,6 @@ class GLRendererShaderTest : public testing::Test {
renderer_->render_pass_color_matrix_program_aa_->program());
}
- void TestSolidColorProgramAA() {
- EXPECT_PROGRAM_VALID(renderer_->solid_color_program_aa_);
- EXPECT_TRUE(renderer_->program_shadow_ ==
- renderer_->solid_color_program_aa_->program());
- }
-
scoped_ptr<OutputSurface> output_surface_;
FakeRendererClient mock_client_;
scoped_ptr<ResourceProvider> resource_provider_;
@@ -1277,34 +1271,6 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
TestRenderPassMaskColorMatrixProgramAA();
}
-TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
- gfx::Rect viewport_rect(mock_client_.DeviceViewportSize());
- ScopedPtrVector<RenderPass>* render_passes =
- mock_client_.render_passes_in_draw_order();
-
- RenderPass::Id root_pass_id(1, 0);
- TestRenderPass* root_pass;
-
- gfx::Transform pixel_aligned_transform_causing_aa;
- pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f);
- pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f);
-
- render_passes->clear();
-
- root_pass = AddRenderPass(
- render_passes, root_pass_id, viewport_rect, gfx::Transform());
- AddTransformedQuad(root_pass,
- viewport_rect,
- SK_ColorYELLOW,
- pixel_aligned_transform_causing_aa);
-
- renderer_->DecideRenderPassAllocationsForFrame(
- *mock_client_.render_passes_in_draw_order());
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order());
-
- TestSolidColorProgramAA();
-}
-
class OutputSurfaceMockContext : public TestWebGraphicsContext3D {
public:
// Specifically override methods even if they are unused (used in conjunction
diff --git a/cc/test/data/axis_aligned.png b/cc/test/data/axis_aligned.png
deleted file mode 100644
index e69de29..0000000
--- a/cc/test/data/axis_aligned.png
+++ /dev/null
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc
index 719be7f..24cb778 100644
--- a/cc/test/render_pass_test_utils.cc
+++ b/cc/test/render_pass_test_utils.cc
@@ -57,22 +57,6 @@ SolidColorDrawQuad* AddClippedQuad(TestRenderPass* pass,
return quad_ptr;
}
-SolidColorDrawQuad* AddTransformedQuad(TestRenderPass* pass,
- gfx::Rect rect,
- SkColor color,
- const gfx::Transform& transform) {
- MockQuadCuller quad_sink(&pass->quad_list, &pass->shared_quad_state_list);
- AppendQuadsData data(pass->id);
- SharedQuadState* shared_state =
- quad_sink.UseSharedQuadState(SharedQuadState::Create());
- shared_state->SetAll(transform, rect.size(), rect, rect, false, 1);
- scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
- quad->SetNew(shared_state, rect, color);
- SolidColorDrawQuad* quad_ptr = quad.get();
- quad_sink.Append(quad.PassAs<DrawQuad>(), &data);
- return quad_ptr;
-}
-
void AddRenderPassQuad(TestRenderPass* to_pass,
TestRenderPass* contributing_pass) {
MockQuadCuller quad_sink(&to_pass->quad_list,
diff --git a/cc/test/render_pass_test_utils.h b/cc/test/render_pass_test_utils.h
index 01a7ca0..fdc6366 100644
--- a/cc/test/render_pass_test_utils.h
+++ b/cc/test/render_pass_test_utils.h
@@ -38,12 +38,6 @@ SolidColorDrawQuad* AddClippedQuad(TestRenderPass* pass,
gfx::Rect rect,
SkColor color);
-// Adds a solid quad with a transform to a given render pass.
-SolidColorDrawQuad* AddTransformedQuad(TestRenderPass* pass,
- gfx::Rect rect,
- SkColor color,
- const gfx::Transform& transform);
-
// Adds a render pass quad to an existing render pass.
void AddRenderPassQuad(TestRenderPass* to_pass,
TestRenderPass* contributing_pass);