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