Index: cc/output/renderer_pixeltest.cc |
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc |
index 269ec585a15a14db189e53ff5cff8090e1dc6060..0610eac0a6fa0678c827e96f061a406090fd8ea1 100644 |
--- a/cc/output/renderer_pixeltest.cc |
+++ b/cc/output/renderer_pixeltest.cc |
@@ -2488,6 +2488,114 @@ TYPED_TEST(RendererPixelTest, TileDrawQuadNearestNeighbor) { |
ExactPixelComparator(true))); |
} |
+// This disables filtering by setting |nearest_neighbor| to true on the |
+// TextureDrawQuad. |
+TYPED_TEST(SoftwareRendererPixelTest, TextureDrawQuadNearestNeighbor) { |
+ gfx::Rect viewport(this->device_viewport_size_); |
+ bool nearest_neighbor = true; |
+ |
+ SkBitmap bitmap; |
+ bitmap.allocN32Pixels(2, 2); |
+ { |
+ SkAutoLockPixels lock(bitmap); |
+ SkCanvas canvas(bitmap); |
+ canvas.drawPoint(0, 0, SK_ColorGREEN); |
+ canvas.drawPoint(0, 1, SK_ColorBLUE); |
+ canvas.drawPoint(1, 0, SK_ColorBLUE); |
+ canvas.drawPoint(1, 1, SK_ColorGREEN); |
+ } |
+ |
+ gfx::Size tile_size(2, 2); |
+ ResourceProvider::ResourceId resource = |
+ this->resource_provider_->CreateResource( |
+ tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
+ RGBA_8888); |
+ |
+ { |
+ SkAutoLockPixels lock(bitmap); |
+ this->resource_provider_->CopyToResource( |
+ resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); |
+ } |
+ |
+ RenderPassId id(1, 1); |
+ gfx::Transform transform_to_root; |
+ scoped_ptr<RenderPass> pass = |
+ CreateTestRenderPass(id, viewport, transform_to_root); |
+ |
+ gfx::Transform content_to_target_transform; |
+ SharedQuadState* shared_state = CreateTestSharedQuadState( |
+ content_to_target_transform, viewport, pass.get()); |
+ |
+ float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
+ TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
+ quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false, |
+ gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK, |
+ vertex_opacity, false, nearest_neighbor); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ |
+ EXPECT_TRUE(this->RunPixelTest( |
+ &pass_list, |
+ base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
+ FuzzyPixelComparator(false, 2.f, 0.f, 256.f, 256, 0.f))); |
+} |
+ |
+// This ensures filtering is enabled by setting |nearest_neighbor| to false on |
+// the TextureDrawQuad. |
+TYPED_TEST(SoftwareRendererPixelTest, TextureDrawQuadLinear) { |
+ gfx::Rect viewport(this->device_viewport_size_); |
+ bool nearest_neighbor = false; |
+ |
+ SkBitmap bitmap; |
+ bitmap.allocN32Pixels(2, 2); |
+ { |
+ SkAutoLockPixels lock(bitmap); |
+ SkCanvas canvas(bitmap); |
+ canvas.drawPoint(0, 0, SK_ColorGREEN); |
+ canvas.drawPoint(0, 1, SK_ColorBLUE); |
+ canvas.drawPoint(1, 0, SK_ColorBLUE); |
+ canvas.drawPoint(1, 1, SK_ColorGREEN); |
+ } |
+ |
+ gfx::Size tile_size(2, 2); |
+ ResourceProvider::ResourceId resource = |
+ this->resource_provider_->CreateResource( |
+ tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
+ RGBA_8888); |
+ |
+ { |
+ SkAutoLockPixels lock(bitmap); |
+ this->resource_provider_->CopyToResource( |
+ resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); |
+ } |
+ |
+ RenderPassId id(1, 1); |
+ gfx::Transform transform_to_root; |
+ scoped_ptr<RenderPass> pass = |
+ CreateTestRenderPass(id, viewport, transform_to_root); |
+ |
+ gfx::Transform content_to_target_transform; |
+ SharedQuadState* shared_state = CreateTestSharedQuadState( |
+ content_to_target_transform, viewport, pass.get()); |
+ |
+ float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
+ TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
+ quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false, |
+ gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK, |
+ vertex_opacity, false, nearest_neighbor); |
+ |
+ RenderPassList pass_list; |
+ pass_list.push_back(pass.Pass()); |
+ |
+ // Allow for a small amount of error as the blending alogrithm used by Skia is |
+ // affected by the offset in the expanded rect. |
+ EXPECT_TRUE(this->RunPixelTest( |
+ &pass_list, |
+ base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers_linear.png")), |
+ FuzzyPixelComparator(false, 100.f, 0.f, 16.f, 16.f, 0.f))); |
+} |
+ |
TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { |
gfx::Size pile_tile_size(1000, 1000); |
gfx::Rect viewport(this->device_viewport_size_); |