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 "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 | 72 |
73 RenderPassList render_passes_in_draw_order_; | 73 RenderPassList render_passes_in_draw_order_; |
74 }; | 74 }; |
75 | 75 |
76 #define EXPECT_PROGRAM_VALID(program_binding) \ | 76 #define EXPECT_PROGRAM_VALID(program_binding) \ |
77 do { \ | 77 do { \ |
78 EXPECT_TRUE((program_binding)->program()); \ | 78 EXPECT_TRUE((program_binding)->program()); \ |
79 EXPECT_TRUE((program_binding)->initialized()); \ | 79 EXPECT_TRUE((program_binding)->initialized()); \ |
80 } while (false) | 80 } while (false) |
81 | 81 |
82 static inline SkXfermode::Mode BlendModeToSkXfermode(BlendMode blend_mode) { | 82 static inline SkBlendMode BlendModeToSkXfermode(BlendMode blend_mode) { |
83 switch (blend_mode) { | 83 switch (blend_mode) { |
84 case BLEND_MODE_NONE: | 84 case BLEND_MODE_NONE: |
85 case BLEND_MODE_NORMAL: | 85 case BLEND_MODE_NORMAL: |
86 return SkXfermode::kSrcOver_Mode; | 86 return SkBlendMode::kSrcOver; |
87 case BLEND_MODE_SCREEN: | 87 case BLEND_MODE_SCREEN: |
88 return SkXfermode::kScreen_Mode; | 88 return SkBlendMode::kScreen; |
89 case BLEND_MODE_OVERLAY: | 89 case BLEND_MODE_OVERLAY: |
90 return SkXfermode::kOverlay_Mode; | 90 return SkBlendMode::kOverlay; |
91 case BLEND_MODE_DARKEN: | 91 case BLEND_MODE_DARKEN: |
92 return SkXfermode::kDarken_Mode; | 92 return SkBlendMode::kDarken; |
93 case BLEND_MODE_LIGHTEN: | 93 case BLEND_MODE_LIGHTEN: |
94 return SkXfermode::kLighten_Mode; | 94 return SkBlendMode::kLighten; |
95 case BLEND_MODE_COLOR_DODGE: | 95 case BLEND_MODE_COLOR_DODGE: |
96 return SkXfermode::kColorDodge_Mode; | 96 return SkBlendMode::kColorDodge; |
97 case BLEND_MODE_COLOR_BURN: | 97 case BLEND_MODE_COLOR_BURN: |
98 return SkXfermode::kColorBurn_Mode; | 98 return SkBlendMode::kColorBurn; |
99 case BLEND_MODE_HARD_LIGHT: | 99 case BLEND_MODE_HARD_LIGHT: |
100 return SkXfermode::kHardLight_Mode; | 100 return SkBlendMode::kHardLight; |
101 case BLEND_MODE_SOFT_LIGHT: | 101 case BLEND_MODE_SOFT_LIGHT: |
102 return SkXfermode::kSoftLight_Mode; | 102 return SkBlendMode::kSoftLight; |
103 case BLEND_MODE_DIFFERENCE: | 103 case BLEND_MODE_DIFFERENCE: |
104 return SkXfermode::kDifference_Mode; | 104 return SkBlendMode::kDifference; |
105 case BLEND_MODE_EXCLUSION: | 105 case BLEND_MODE_EXCLUSION: |
106 return SkXfermode::kExclusion_Mode; | 106 return SkBlendMode::kExclusion; |
107 case BLEND_MODE_MULTIPLY: | 107 case BLEND_MODE_MULTIPLY: |
108 return SkXfermode::kMultiply_Mode; | 108 return SkBlendMode::kMultiply; |
109 case BLEND_MODE_HUE: | 109 case BLEND_MODE_HUE: |
110 return SkXfermode::kHue_Mode; | 110 return SkBlendMode::kHue; |
111 case BLEND_MODE_SATURATION: | 111 case BLEND_MODE_SATURATION: |
112 return SkXfermode::kSaturation_Mode; | 112 return SkBlendMode::kSaturation; |
113 case BLEND_MODE_COLOR: | 113 case BLEND_MODE_COLOR: |
114 return SkXfermode::kColor_Mode; | 114 return SkBlendMode::kColor; |
115 case BLEND_MODE_LUMINOSITY: | 115 case BLEND_MODE_LUMINOSITY: |
116 return SkXfermode::kLuminosity_Mode; | 116 return SkBlendMode::kLuminosity; |
117 } | 117 } |
118 return SkXfermode::kSrcOver_Mode; | 118 return SkBlendMode::kSrcOver; |
119 } | 119 } |
120 | 120 |
121 // Explicitly named to be a friend in GLRenderer for shader access. | 121 // Explicitly named to be a friend in GLRenderer for shader access. |
122 class GLRendererShaderPixelTest : public GLRendererPixelTest { | 122 class GLRendererShaderPixelTest : public GLRendererPixelTest { |
123 public: | 123 public: |
124 void SetUp() override { | 124 void SetUp() override { |
125 GLRendererPixelTest::SetUp(); | 125 GLRendererPixelTest::SetUp(); |
126 ASSERT_FALSE(renderer()->IsContextLost()); | 126 ASSERT_FALSE(renderer()->IsContextLost()); |
127 } | 127 } |
128 | 128 |
(...skipping 1085 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1214 FilterOperations filters; | 1214 FilterOperations filters; |
1215 filters.Append( | 1215 filters.Append( |
1216 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make( | 1216 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make( |
1217 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr))); | 1217 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr))); |
1218 | 1218 |
1219 gfx::Transform transform_causing_aa; | 1219 gfx::Transform transform_causing_aa; |
1220 transform_causing_aa.Rotate(20.0); | 1220 transform_causing_aa.Rotate(20.0); |
1221 | 1221 |
1222 for (int i = 0; i <= LAST_BLEND_MODE; ++i) { | 1222 for (int i = 0; i <= LAST_BLEND_MODE; ++i) { |
1223 BlendMode blend_mode = static_cast<BlendMode>(i); | 1223 BlendMode blend_mode = static_cast<BlendMode>(i); |
1224 SkXfermode::Mode xfer_mode = BlendModeToSkXfermode(blend_mode); | 1224 SkBlendMode xfer_mode = BlendModeToSkXfermode(blend_mode); |
1225 settings_.force_blending_with_shaders = (blend_mode != BLEND_MODE_NONE); | 1225 settings_.force_blending_with_shaders = (blend_mode != BLEND_MODE_NONE); |
1226 // RenderPassProgram | 1226 // RenderPassProgram |
1227 render_passes_in_draw_order_.clear(); | 1227 render_passes_in_draw_order_.clear(); |
1228 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1228 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
1229 child_pass_id, | 1229 child_pass_id, |
1230 child_rect, | 1230 child_rect, |
1231 gfx::Transform()); | 1231 gfx::Transform()); |
1232 | 1232 |
1233 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1233 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
1234 gfx::Rect(viewport_size), gfx::Transform()); | 1234 gfx::Rect(viewport_size), gfx::Transform()); |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1420 ASSERT_TRUE(clipped); | 1420 ASSERT_TRUE(clipped); |
1421 | 1421 |
1422 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1422 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
1423 child_pass_id, | 1423 child_pass_id, |
1424 child_rect, | 1424 child_rect, |
1425 transform_preventing_aa); | 1425 transform_preventing_aa); |
1426 | 1426 |
1427 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1427 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
1428 gfx::Rect(viewport_size), gfx::Transform()); | 1428 gfx::Rect(viewport_size), gfx::Transform()); |
1429 | 1429 |
1430 AddRenderPassQuad(root_pass, | 1430 AddRenderPassQuad(root_pass, child_pass, 0, FilterOperations(), |
1431 child_pass, | 1431 transform_preventing_aa, SkBlendMode::kSrcOver); |
1432 0, | |
1433 FilterOperations(), | |
1434 transform_preventing_aa, | |
1435 SkXfermode::kSrcOver_Mode); | |
1436 | 1432 |
1437 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1433 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
1438 DrawFrame(renderer_.get(), viewport_size); | 1434 DrawFrame(renderer_.get(), viewport_size); |
1439 | 1435 |
1440 // If use_aa incorrectly ignores clipping, it will use the | 1436 // If use_aa incorrectly ignores clipping, it will use the |
1441 // RenderPassProgramAA shader instead of the RenderPassProgram. | 1437 // RenderPassProgramAA shader instead of the RenderPassProgram. |
1442 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, BLEND_MODE_NONE); | 1438 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, BLEND_MODE_NONE); |
1443 } | 1439 } |
1444 | 1440 |
1445 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { | 1441 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1829 bool nearest_neighbor = false; | 1825 bool nearest_neighbor = false; |
1830 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 1826 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
1831 gfx::PointF uv_top_left(0, 0); | 1827 gfx::PointF uv_top_left(0, 0); |
1832 gfx::PointF uv_bottom_right(1, 1); | 1828 gfx::PointF uv_bottom_right(1, 1); |
1833 | 1829 |
1834 TextureDrawQuad* overlay_quad = | 1830 TextureDrawQuad* overlay_quad = |
1835 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 1831 root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
1836 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState(); | 1832 SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState(); |
1837 shared_state->SetAll(gfx::Transform(), viewport_size, | 1833 shared_state->SetAll(gfx::Transform(), viewport_size, |
1838 gfx::Rect(viewport_size), gfx::Rect(viewport_size), | 1834 gfx::Rect(viewport_size), gfx::Rect(viewport_size), |
1839 false, 1, SkXfermode::kSrcOver_Mode, 0); | 1835 false, 1, SkBlendMode::kSrcOver, 0); |
1840 overlay_quad->SetNew(shared_state, gfx::Rect(viewport_size), | 1836 overlay_quad->SetNew(shared_state, gfx::Rect(viewport_size), |
1841 gfx::Rect(viewport_size), gfx::Rect(viewport_size), | 1837 gfx::Rect(viewport_size), gfx::Rect(viewport_size), |
1842 resource_id, premultiplied_alpha, uv_top_left, | 1838 resource_id, premultiplied_alpha, uv_top_left, |
1843 uv_bottom_right, SK_ColorTRANSPARENT, vertex_opacity, | 1839 uv_bottom_right, SK_ColorTRANSPARENT, vertex_opacity, |
1844 flipped, nearest_neighbor, false); | 1840 flipped, nearest_neighbor, false); |
1845 | 1841 |
1846 // Verify that overlay_quad actually gets turned into an overlay, and even | 1842 // Verify that overlay_quad actually gets turned into an overlay, and even |
1847 // though it's not drawn, that its sync point is waited on. | 1843 // though it's not drawn, that its sync point is waited on. |
1848 EXPECT_CALL(*context, waitSyncToken(MatchesSyncToken(sync_token))).Times(1); | 1844 EXPECT_CALL(*context, waitSyncToken(MatchesSyncToken(sync_token))).Times(1); |
1849 EXPECT_CALL( | 1845 EXPECT_CALL( |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1981 renderer_->SetVisible(true); | 1977 renderer_->SetVisible(true); |
1982 Mock::VerifyAndClearExpectations(context_support_ptr_); | 1978 Mock::VerifyAndClearExpectations(context_support_ptr_); |
1983 | 1979 |
1984 EXPECT_CALL(*context_support_ptr_, SetAggressivelyFreeResources(true)); | 1980 EXPECT_CALL(*context_support_ptr_, SetAggressivelyFreeResources(true)); |
1985 renderer_->SetVisible(false); | 1981 renderer_->SetVisible(false); |
1986 Mock::VerifyAndClearExpectations(context_support_ptr_); | 1982 Mock::VerifyAndClearExpectations(context_support_ptr_); |
1987 } | 1983 } |
1988 | 1984 |
1989 } // namespace | 1985 } // namespace |
1990 } // namespace cc | 1986 } // namespace cc |
OLD | NEW |