OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 #include "cc/layers/append_quads_data.h" | 6 #include "cc/layers/append_quads_data.h" |
7 #include "cc/output/gl_renderer.h" | 7 #include "cc/output/gl_renderer.h" |
8 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
9 #include "cc/quads/picture_draw_quad.h" | 9 #include "cc/quads/picture_draw_quad.h" |
10 #include "cc/quads/texture_draw_quad.h" | 10 #include "cc/quads/texture_draw_quad.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 bool premultiplied_alpha, | 116 bool premultiplied_alpha, |
117 const SharedQuadState* shared_state, | 117 const SharedQuadState* shared_state, |
118 ResourceProvider* resource_provider, | 118 ResourceProvider* resource_provider, |
119 RenderPass* render_pass) { | 119 RenderPass* render_pass) { |
120 SkPMColor pixel_color = premultiplied_alpha ? | 120 SkPMColor pixel_color = premultiplied_alpha ? |
121 SkPreMultiplyColor(texel_color) : | 121 SkPreMultiplyColor(texel_color) : |
122 SkPackARGB32NoCheck(SkColorGetA(texel_color), | 122 SkPackARGB32NoCheck(SkColorGetA(texel_color), |
123 SkColorGetR(texel_color), | 123 SkColorGetR(texel_color), |
124 SkColorGetG(texel_color), | 124 SkColorGetG(texel_color), |
125 SkColorGetB(texel_color)); | 125 SkColorGetB(texel_color)); |
126 size_t num_pixels = static_cast<size_t>(rect.width()) * rect.height(); | 126 std::vector<uint32_t> pixels(rect.size().GetArea(), pixel_color); |
127 std::vector<uint32_t> pixels(num_pixels, pixel_color); | |
128 | 127 |
129 ResourceProvider::ResourceId resource = resource_provider->CreateResource( | 128 ResourceProvider::ResourceId resource = |
130 rect.size(), GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 129 resource_provider->CreateResource(rect.size(), |
131 RGBA_8888); | 130 GL_CLAMP_TO_EDGE, |
132 resource_provider->CopyToResource( | 131 ResourceProvider::TextureHintImmutable, |
133 resource, reinterpret_cast<uint8_t*>(&pixels.front()), rect.size()); | 132 RGBA_8888); |
| 133 resource_provider->SetPixels( |
| 134 resource, |
| 135 reinterpret_cast<uint8_t*>(&pixels.front()), |
| 136 rect, |
| 137 rect, |
| 138 gfx::Vector2d()); |
134 | 139 |
135 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 140 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
136 | 141 |
137 TextureDrawQuad* quad = | 142 TextureDrawQuad* quad = |
138 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 143 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
139 quad->SetNew(shared_state, | 144 quad->SetNew(shared_state, |
140 rect, | 145 rect, |
141 gfx::Rect(), | 146 gfx::Rect(), |
142 rect, | 147 rect, |
143 resource, | 148 resource, |
144 premultiplied_alpha, | 149 premultiplied_alpha, |
145 gfx::PointF(0.0f, 0.0f), // uv_top_left | 150 gfx::PointF(0.0f, 0.0f), // uv_top_left |
146 gfx::PointF(1.0f, 1.0f), // uv_bottom_right | 151 gfx::PointF(1.0f, 1.0f), // uv_bottom_right |
147 background_color, | 152 background_color, |
148 vertex_opacity, | 153 vertex_opacity, |
149 false, // flipped | 154 false, // flipped |
150 false); // nearest_neighbor | 155 false); // nearest_neighbor |
151 } | 156 } |
152 | 157 |
153 typedef ::testing::Types<GLRenderer, | 158 typedef ::testing::Types<GLRenderer, |
154 SoftwareRenderer, | 159 SoftwareRenderer, |
155 GLRendererWithExpandedViewport, | 160 GLRendererWithExpandedViewport, |
156 SoftwareRendererWithExpandedViewport> RendererTypes; | 161 SoftwareRendererWithExpandedViewport> RendererTypes; |
157 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | 162 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); |
158 | 163 |
159 template <typename RendererType> | 164 template <typename RendererType> |
160 class SoftwareRendererPixelTest : public RendererPixelTest<RendererType> {}; | |
161 | |
162 typedef ::testing::Types<SoftwareRenderer, SoftwareRendererWithExpandedViewport> | |
163 SoftwareRendererTypes; | |
164 TYPED_TEST_CASE(SoftwareRendererPixelTest, SoftwareRendererTypes); | |
165 | |
166 template <typename RendererType> | |
167 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { | 165 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { |
168 public: | 166 public: |
169 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) | 167 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) |
170 : fuzzy_(discard_alpha), exact_(discard_alpha) {} | 168 : fuzzy_(discard_alpha), exact_(discard_alpha) {} |
171 | 169 |
172 bool Compare(const SkBitmap& actual_bmp, | 170 bool Compare(const SkBitmap& actual_bmp, |
173 const SkBitmap& expected_bmp) const override; | 171 const SkBitmap& expected_bmp) const override; |
174 | 172 |
175 private: | 173 private: |
176 FuzzyPixelOffByOneComparator fuzzy_; | 174 FuzzyPixelOffByOneComparator fuzzy_; |
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 while (!rect.IsEmpty()) { | 865 while (!rect.IsEmpty()) { |
868 rect.Inset(6, 6, 4, 4); | 866 rect.Inset(6, 6, 4, 4); |
869 canvas.drawRect( | 867 canvas.drawRect( |
870 SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()), | 868 SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()), |
871 paint); | 869 paint); |
872 rect.Inset(6, 6, 4, 4); | 870 rect.Inset(6, 6, 4, 4); |
873 } | 871 } |
874 | 872 |
875 ResourceProvider::ResourceId mask_resource_id = | 873 ResourceProvider::ResourceId mask_resource_id = |
876 this->resource_provider_->CreateResource( | 874 this->resource_provider_->CreateResource( |
877 mask_rect.size(), GL_CLAMP_TO_EDGE, | 875 mask_rect.size(), |
878 ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); | 876 GL_CLAMP_TO_EDGE, |
| 877 ResourceProvider::TextureHintImmutable, |
| 878 RGBA_8888); |
879 { | 879 { |
880 SkAutoLockPixels lock(bitmap); | 880 SkAutoLockPixels lock(bitmap); |
881 this->resource_provider_->CopyToResource( | 881 this->resource_provider_->SetPixels( |
882 mask_resource_id, reinterpret_cast<uint8_t*>(bitmap.getPixels()), | 882 mask_resource_id, |
883 mask_rect.size()); | 883 reinterpret_cast<uint8_t*>(bitmap.getPixels()), |
| 884 mask_rect, |
| 885 mask_rect, |
| 886 gfx::Vector2d()); |
884 } | 887 } |
885 | 888 |
886 // This RenderPassDrawQuad does not include the full |viewport_rect| which is | 889 // This RenderPassDrawQuad does not include the full |viewport_rect| which is |
887 // the size of the child render pass. | 890 // the size of the child render pass. |
888 gfx::Rect sub_rect = gfx::Rect(50, 50, 200, 100); | 891 gfx::Rect sub_rect = gfx::Rect(50, 50, 200, 100); |
889 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x()); | 892 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x()); |
890 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y()); | 893 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y()); |
891 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right()); | 894 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right()); |
892 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); | 895 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); |
893 | 896 |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1369 | 1372 |
1370 RenderPassList pass_list; | 1373 RenderPassList pass_list; |
1371 pass_list.push_back(pass.Pass()); | 1374 pass_list.push_back(pass.Pass()); |
1372 | 1375 |
1373 EXPECT_TRUE(this->RunPixelTest( | 1376 EXPECT_TRUE(this->RunPixelTest( |
1374 &pass_list, | 1377 &pass_list, |
1375 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), | 1378 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), |
1376 FuzzyPixelOffByOneComparator(true))); | 1379 FuzzyPixelOffByOneComparator(true))); |
1377 } | 1380 } |
1378 | 1381 |
1379 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) { | 1382 TYPED_TEST(RendererPixelTest, PictureDrawQuadIdentityScale) { |
1380 gfx::Size pile_tile_size(1000, 1000); | 1383 gfx::Size pile_tile_size(1000, 1000); |
1381 gfx::Rect viewport(this->device_viewport_size_); | 1384 gfx::Rect viewport(this->device_viewport_size_); |
1382 // TODO(enne): the renderer should figure this out on its own. | 1385 // TODO(enne): the renderer should figure this out on its own. |
1383 ResourceFormat texture_format = RGBA_8888; | 1386 ResourceFormat texture_format = RGBA_8888; |
1384 bool nearest_neighbor = false; | 1387 bool nearest_neighbor = false; |
1385 | 1388 |
1386 RenderPassId id(1, 1); | 1389 RenderPassId id(1, 1); |
1387 gfx::Transform transform_to_root; | 1390 gfx::Transform transform_to_root; |
1388 scoped_ptr<RenderPass> pass = | 1391 scoped_ptr<RenderPass> pass = |
1389 CreateTestRenderPass(id, viewport, transform_to_root); | 1392 CreateTestRenderPass(id, viewport, transform_to_root); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1449 RenderPassList pass_list; | 1452 RenderPassList pass_list; |
1450 pass_list.push_back(pass.Pass()); | 1453 pass_list.push_back(pass.Pass()); |
1451 | 1454 |
1452 EXPECT_TRUE(this->RunPixelTest( | 1455 EXPECT_TRUE(this->RunPixelTest( |
1453 &pass_list, | 1456 &pass_list, |
1454 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), | 1457 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), |
1455 ExactPixelComparator(true))); | 1458 ExactPixelComparator(true))); |
1456 } | 1459 } |
1457 | 1460 |
1458 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. | 1461 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. |
1459 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadOpacity) { | 1462 TYPED_TEST(RendererPixelTest, PictureDrawQuadOpacity) { |
1460 gfx::Size pile_tile_size(1000, 1000); | 1463 gfx::Size pile_tile_size(1000, 1000); |
1461 gfx::Rect viewport(this->device_viewport_size_); | 1464 gfx::Rect viewport(this->device_viewport_size_); |
1462 ResourceFormat texture_format = RGBA_8888; | 1465 ResourceFormat texture_format = RGBA_8888; |
1463 bool nearest_neighbor = false; | 1466 bool nearest_neighbor = false; |
1464 | 1467 |
1465 RenderPassId id(1, 1); | 1468 RenderPassId id(1, 1); |
1466 gfx::Transform transform_to_root; | 1469 gfx::Transform transform_to_root; |
1467 scoped_ptr<RenderPass> pass = | 1470 scoped_ptr<RenderPass> pass = |
1468 CreateTestRenderPass(id, viewport, transform_to_root); | 1471 CreateTestRenderPass(id, viewport, transform_to_root); |
1469 | 1472 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1526 return true; | 1529 return true; |
1527 } | 1530 } |
1528 | 1531 |
1529 template<> | 1532 template<> |
1530 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { | 1533 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { |
1531 return true; | 1534 return true; |
1532 } | 1535 } |
1533 | 1536 |
1534 // If we disable image filtering, then a 2x2 bitmap should appear as four | 1537 // If we disable image filtering, then a 2x2 bitmap should appear as four |
1535 // huge sharp squares. | 1538 // huge sharp squares. |
1536 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadDisableImageFiltering) { | 1539 TYPED_TEST(RendererPixelTest, PictureDrawQuadDisableImageFiltering) { |
1537 // We only care about this in software mode since bilinear filtering is | 1540 // We only care about this in software mode since bilinear filtering is |
1538 // cheap in hardware. | 1541 // cheap in hardware. |
1539 if (!IsSoftwareRenderer<TypeParam>()) | 1542 if (!IsSoftwareRenderer<TypeParam>()) |
1540 return; | 1543 return; |
1541 | 1544 |
1542 gfx::Size pile_tile_size(1000, 1000); | 1545 gfx::Size pile_tile_size(1000, 1000); |
1543 gfx::Rect viewport(this->device_viewport_size_); | 1546 gfx::Rect viewport(this->device_viewport_size_); |
1544 ResourceFormat texture_format = RGBA_8888; | 1547 ResourceFormat texture_format = RGBA_8888; |
1545 bool nearest_neighbor = false; | 1548 bool nearest_neighbor = false; |
1546 | 1549 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1583 | 1586 |
1584 this->disable_picture_quad_image_filtering_ = true; | 1587 this->disable_picture_quad_image_filtering_ = true; |
1585 | 1588 |
1586 EXPECT_TRUE(this->RunPixelTest( | 1589 EXPECT_TRUE(this->RunPixelTest( |
1587 &pass_list, | 1590 &pass_list, |
1588 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 1591 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
1589 ExactPixelComparator(true))); | 1592 ExactPixelComparator(true))); |
1590 } | 1593 } |
1591 | 1594 |
1592 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. | 1595 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. |
1593 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNearestNeighbor) { | 1596 TYPED_TEST(RendererPixelTest, PictureDrawQuadNearestNeighbor) { |
1594 gfx::Size pile_tile_size(1000, 1000); | 1597 gfx::Size pile_tile_size(1000, 1000); |
1595 gfx::Rect viewport(this->device_viewport_size_); | 1598 gfx::Rect viewport(this->device_viewport_size_); |
1596 ResourceFormat texture_format = RGBA_8888; | 1599 ResourceFormat texture_format = RGBA_8888; |
1597 bool nearest_neighbor = true; | 1600 bool nearest_neighbor = true; |
1598 | 1601 |
1599 RenderPassId id(1, 1); | 1602 RenderPassId id(1, 1); |
1600 gfx::Transform transform_to_root; | 1603 gfx::Transform transform_to_root; |
1601 scoped_ptr<RenderPass> pass = | 1604 scoped_ptr<RenderPass> pass = |
1602 CreateTestRenderPass(id, viewport, transform_to_root); | 1605 CreateTestRenderPass(id, viewport, transform_to_root); |
1603 | 1606 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1652 SkCanvas canvas(bitmap); | 1655 SkCanvas canvas(bitmap); |
1653 canvas.drawPoint(0, 0, SK_ColorGREEN); | 1656 canvas.drawPoint(0, 0, SK_ColorGREEN); |
1654 canvas.drawPoint(0, 1, SK_ColorBLUE); | 1657 canvas.drawPoint(0, 1, SK_ColorBLUE); |
1655 canvas.drawPoint(1, 0, SK_ColorBLUE); | 1658 canvas.drawPoint(1, 0, SK_ColorBLUE); |
1656 canvas.drawPoint(1, 1, SK_ColorGREEN); | 1659 canvas.drawPoint(1, 1, SK_ColorGREEN); |
1657 } | 1660 } |
1658 | 1661 |
1659 gfx::Size tile_size(2, 2); | 1662 gfx::Size tile_size(2, 2); |
1660 ResourceProvider::ResourceId resource = | 1663 ResourceProvider::ResourceId resource = |
1661 this->resource_provider_->CreateResource( | 1664 this->resource_provider_->CreateResource( |
1662 tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 1665 tile_size, |
| 1666 GL_CLAMP_TO_EDGE, |
| 1667 ResourceProvider::TextureHintImmutable, |
1663 RGBA_8888); | 1668 RGBA_8888); |
1664 | 1669 |
1665 { | 1670 { |
1666 SkAutoLockPixels lock(bitmap); | 1671 SkAutoLockPixels lock(bitmap); |
1667 this->resource_provider_->CopyToResource( | 1672 this->resource_provider_->SetPixels( |
1668 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); | 1673 resource, |
| 1674 static_cast<uint8_t*>(bitmap.getPixels()), |
| 1675 gfx::Rect(tile_size), |
| 1676 gfx::Rect(tile_size), |
| 1677 gfx::Vector2d()); |
1669 } | 1678 } |
1670 | 1679 |
1671 RenderPassId id(1, 1); | 1680 RenderPassId id(1, 1); |
1672 gfx::Transform transform_to_root; | 1681 gfx::Transform transform_to_root; |
1673 scoped_ptr<RenderPass> pass = | 1682 scoped_ptr<RenderPass> pass = |
1674 CreateTestRenderPass(id, viewport, transform_to_root); | 1683 CreateTestRenderPass(id, viewport, transform_to_root); |
1675 | 1684 |
1676 gfx::Transform content_to_target_transform; | 1685 gfx::Transform content_to_target_transform; |
1677 SharedQuadState* shared_state = CreateTestSharedQuadState( | 1686 SharedQuadState* shared_state = CreateTestSharedQuadState( |
1678 content_to_target_transform, viewport, pass.get()); | 1687 content_to_target_transform, viewport, pass.get()); |
1679 | 1688 |
1680 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); | 1689 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); |
1681 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, | 1690 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, |
1682 gfx::Rect(tile_size), tile_size, swizzle_contents, | 1691 gfx::Rect(tile_size), tile_size, swizzle_contents, |
1683 nearest_neighbor); | 1692 nearest_neighbor); |
1684 | 1693 |
1685 RenderPassList pass_list; | 1694 RenderPassList pass_list; |
1686 pass_list.push_back(pass.Pass()); | 1695 pass_list.push_back(pass.Pass()); |
1687 | 1696 |
1688 EXPECT_TRUE(this->RunPixelTest( | 1697 EXPECT_TRUE(this->RunPixelTest( |
1689 &pass_list, | 1698 &pass_list, |
1690 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 1699 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
1691 ExactPixelComparator(true))); | 1700 ExactPixelComparator(true))); |
1692 } | 1701 } |
1693 | 1702 |
1694 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { | 1703 TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) { |
1695 gfx::Size pile_tile_size(1000, 1000); | 1704 gfx::Size pile_tile_size(1000, 1000); |
1696 gfx::Rect viewport(this->device_viewport_size_); | 1705 gfx::Rect viewport(this->device_viewport_size_); |
1697 // TODO(enne): the renderer should figure this out on its own. | 1706 // TODO(enne): the renderer should figure this out on its own. |
1698 ResourceFormat texture_format = RGBA_8888; | 1707 ResourceFormat texture_format = RGBA_8888; |
1699 bool nearest_neighbor = false; | 1708 bool nearest_neighbor = false; |
1700 | 1709 |
1701 RenderPassId id(1, 1); | 1710 RenderPassId id(1, 1); |
1702 gfx::Transform transform_to_root; | 1711 gfx::Transform transform_to_root; |
1703 scoped_ptr<RenderPass> pass = | 1712 scoped_ptr<RenderPass> pass = |
1704 CreateTestRenderPass(id, viewport, transform_to_root); | 1713 CreateTestRenderPass(id, viewport, transform_to_root); |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1985 this->device_viewport_size_.width() / 2, | 1994 this->device_viewport_size_.width() / 2, |
1986 this->device_viewport_size_.height() / 2); | 1995 this->device_viewport_size_.height() / 2); |
1987 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( | 1996 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( |
1988 &pass_list, | 1997 &pass_list, |
1989 pass_list.front(), | 1998 pass_list.front(), |
1990 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), | 1999 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), |
1991 ExactPixelComparator(true), | 2000 ExactPixelComparator(true), |
1992 &capture_rect)); | 2001 &capture_rect)); |
1993 } | 2002 } |
1994 | 2003 |
| 2004 TEST_F(GLRendererPixelTest, PictureDrawQuadTexture4444) { |
| 2005 gfx::Size pile_tile_size(1000, 1000); |
| 2006 gfx::Rect viewport(this->device_viewport_size_); |
| 2007 ResourceFormat texture_format = RGBA_4444; |
| 2008 bool nearest_neighbor = false; |
| 2009 |
| 2010 RenderPassId id(1, 1); |
| 2011 gfx::Transform transform_to_root; |
| 2012 scoped_ptr<RenderPass> pass = |
| 2013 CreateTestRenderPass(id, viewport, transform_to_root); |
| 2014 |
| 2015 // One viewport-filling blue quad |
| 2016 scoped_ptr<FakePicturePile> blue_recording = |
| 2017 FakePicturePile::CreateFilledPile(pile_tile_size, viewport.size()); |
| 2018 SkPaint blue_paint; |
| 2019 blue_paint.setColor(SK_ColorBLUE); |
| 2020 blue_recording->add_draw_rect_with_paint(viewport, blue_paint); |
| 2021 blue_recording->RerecordPile(); |
| 2022 scoped_refptr<FakePicturePileImpl> blue_pile = |
| 2023 FakePicturePileImpl::CreateFromPile(blue_recording.get(), nullptr); |
| 2024 |
| 2025 gfx::Transform blue_content_to_target_transform; |
| 2026 SharedQuadState* blue_shared_state = CreateTestSharedQuadState( |
| 2027 blue_content_to_target_transform, viewport, pass.get()); |
| 2028 |
| 2029 PictureDrawQuad* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
| 2030 blue_quad->SetNew(blue_shared_state, viewport, gfx::Rect(), viewport, |
| 2031 gfx::RectF(0.f, 0.f, 1.f, 1.f), viewport.size(), |
| 2032 nearest_neighbor, texture_format, viewport, 1.f, |
| 2033 blue_pile.get()); |
| 2034 |
| 2035 RenderPassList pass_list; |
| 2036 pass_list.push_back(pass.Pass()); |
| 2037 |
| 2038 EXPECT_TRUE(this->RunPixelTest(&pass_list, |
| 2039 base::FilePath(FILE_PATH_LITERAL("blue.png")), |
| 2040 ExactPixelComparator(true))); |
| 2041 } |
| 2042 |
1995 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { | 2043 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { |
1996 gfx::Rect rect(this->device_viewport_size_); | 2044 gfx::Rect rect(this->device_viewport_size_); |
1997 | 2045 |
1998 RenderPassId id(1, 1); | 2046 RenderPassId id(1, 1); |
1999 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 2047 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
2000 | 2048 |
2001 SharedQuadState* shared_state = | 2049 SharedQuadState* shared_state = |
2002 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 2050 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
2003 | 2051 |
2004 gfx::Size texture_size(4, 4); | 2052 gfx::Rect texture_rect(4, 4); |
2005 SkPMColor colors[4] = { | 2053 SkPMColor colors[4] = { |
2006 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)), | 2054 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)), |
2007 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)), | 2055 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)), |
2008 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)), | 2056 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)), |
2009 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)), | 2057 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)), |
2010 }; | 2058 }; |
2011 uint32_t pixels[16] = { | 2059 uint32_t pixels[16] = { |
2012 colors[0], colors[0], colors[1], colors[1], | 2060 colors[0], colors[0], colors[1], colors[1], |
2013 colors[0], colors[0], colors[1], colors[1], | 2061 colors[0], colors[0], colors[1], colors[1], |
2014 colors[2], colors[2], colors[3], colors[3], | 2062 colors[2], colors[2], colors[3], colors[3], |
2015 colors[2], colors[2], colors[3], colors[3], | 2063 colors[2], colors[2], colors[3], colors[3], |
2016 }; | 2064 }; |
2017 ResourceProvider::ResourceId resource = | 2065 ResourceProvider::ResourceId resource = |
2018 this->resource_provider_->CreateResource( | 2066 this->resource_provider_->CreateResource( |
2019 texture_size, GL_REPEAT, ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 2067 texture_rect.size(), |
| 2068 GL_REPEAT, |
| 2069 ResourceProvider::TextureHintImmutable, |
2020 RGBA_8888); | 2070 RGBA_8888); |
2021 this->resource_provider_->CopyToResource( | 2071 this->resource_provider_->SetPixels( |
2022 resource, reinterpret_cast<uint8_t*>(pixels), texture_size); | 2072 resource, |
| 2073 reinterpret_cast<uint8_t*>(pixels), |
| 2074 texture_rect, |
| 2075 texture_rect, |
| 2076 gfx::Vector2d()); |
2023 | 2077 |
2024 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 2078 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
2025 TextureDrawQuad* texture_quad = | 2079 TextureDrawQuad* texture_quad = |
2026 pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 2080 pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
2027 texture_quad->SetNew( | 2081 texture_quad->SetNew( |
2028 shared_state, gfx::Rect(this->device_viewport_size_), gfx::Rect(), | 2082 shared_state, |
2029 gfx::Rect(this->device_viewport_size_), resource, | 2083 gfx::Rect(this->device_viewport_size_), |
| 2084 gfx::Rect(), |
| 2085 gfx::Rect(this->device_viewport_size_), |
| 2086 resource, |
2030 true, // premultiplied_alpha | 2087 true, // premultiplied_alpha |
2031 gfx::PointF(0.0f, 0.0f), // uv_top_left | 2088 gfx::PointF(0.0f, 0.0f), // uv_top_left |
2032 gfx::PointF( // uv_bottom_right | 2089 gfx::PointF( // uv_bottom_right |
2033 this->device_viewport_size_.width() / texture_size.width(), | 2090 this->device_viewport_size_.width() / texture_rect.width(), |
2034 this->device_viewport_size_.height() / texture_size.height()), | 2091 this->device_viewport_size_.height() / texture_rect.height()), |
2035 SK_ColorWHITE, vertex_opacity, | 2092 SK_ColorWHITE, |
| 2093 vertex_opacity, |
2036 false, // flipped | 2094 false, // flipped |
2037 false); // nearest_neighbor | 2095 false); // nearest_neighbor |
2038 | 2096 |
2039 RenderPassList pass_list; | 2097 RenderPassList pass_list; |
2040 pass_list.push_back(pass.Pass()); | 2098 pass_list.push_back(pass.Pass()); |
2041 | 2099 |
2042 EXPECT_TRUE(this->RunPixelTest( | 2100 EXPECT_TRUE(this->RunPixelTest( |
2043 &pass_list, | 2101 &pass_list, |
2044 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), | 2102 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), |
2045 FuzzyPixelOffByOneComparator(true))); | 2103 FuzzyPixelOffByOneComparator(true))); |
2046 } | 2104 } |
2047 | 2105 |
2048 #endif // !defined(OS_ANDROID) | 2106 #endif // !defined(OS_ANDROID) |
2049 | 2107 |
2050 } // namespace | 2108 } // namespace |
2051 } // namespace cc | 2109 } // namespace cc |
OLD | NEW |