Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(893)

Side by Side Diff: cc/output/renderer_pixeltest.cc

Issue 18432002: Blend TextureLayer background-color at draw time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: implemented software renderer Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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.h" 5 #include "base/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/resources/platform_color.h" 11 #include "cc/resources/platform_color.h"
11 #include "cc/resources/sync_point_helper.h" 12 #include "cc/resources/sync_point_helper.h"
12 #include "cc/test/fake_picture_pile_impl.h" 13 #include "cc/test/fake_picture_pile_impl.h"
13 #include "cc/test/pixel_test.h" 14 #include "cc/test/pixel_test.h"
14 #include "gpu/GLES2/gl2extchromium.h" 15 #include "gpu/GLES2/gl2extchromium.h"
15 #include "third_party/skia/include/core/SkImageFilter.h" 16 #include "third_party/skia/include/core/SkImageFilter.h"
16 #include "third_party/skia/include/core/SkMatrix.h" 17 #include "third_party/skia/include/core/SkMatrix.h"
17 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" 18 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h"
18 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" 19 #include "third_party/skia/include/effects/SkColorMatrixFilter.h"
19 #include "ui/gfx/rect_conversions.h" 20 #include "ui/gfx/rect_conversions.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 0, // mask_resource_id 88 0, // mask_resource_id
88 rect, // contents_changed_since_last_frame 89 rect, // contents_changed_since_last_frame
89 gfx::RectF(), // mask_uv_rect 90 gfx::RectF(), // mask_uv_rect
90 FilterOperations(), // foreground filters 91 FilterOperations(), // foreground filters
91 skia::RefPtr<SkImageFilter>(), // foreground filter 92 skia::RefPtr<SkImageFilter>(), // foreground filter
92 FilterOperations()); // background filters 93 FilterOperations()); // background filters
93 94
94 return quad.PassAs<DrawQuad>(); 95 return quad.PassAs<DrawQuad>();
95 } 96 }
96 97
98 scoped_ptr<TextureDrawQuad> CreateTestTextureDrawQuad(
99 gfx::Rect rect,
100 SkColor texel_color,
101 SkColor background_color,
102 SharedQuadState* shared_state,
103 ResourceProvider* resource_provider) {
104 SkBitmap image;
105 image.setConfig(SkBitmap::kARGB_8888_Config, rect.width(), rect.height());
106 image.allocPixels();
107 image.eraseColor(texel_color);
108 ResourceProvider::ResourceId resource = resource_provider->CreateResource(
109 rect.size(), GL_RGBA, ResourceProvider::TextureUsageAny);
110 resource_provider->SetPixels(
111 resource,
112 static_cast<uint8_t*>(image.getAddr(0, 0)),
113 rect,
114 rect,
115 gfx::Vector2d());
116
117 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
118
119 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
120 quad->SetNew(shared_state,
121 rect,
122 gfx::Rect(),
123 resource,
124 true, // premultiplied_alpha
125 gfx::PointF(0.0f, 0.0f), // uv_top_left
126 gfx::PointF(1.0f, 1.0f), // uv_bottom_right
127 vertex_opacity,
128 background_color,
129 false); // flipped
130 return quad.Pass();
131 }
132
97 typedef ::testing::Types<GLRenderer, 133 typedef ::testing::Types<GLRenderer,
98 SoftwareRenderer, 134 SoftwareRenderer,
99 GLRendererWithExpandedViewport, 135 GLRendererWithExpandedViewport,
100 SoftwareRendererWithExpandedViewport> RendererTypes; 136 SoftwareRendererWithExpandedViewport> RendererTypes;
101 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); 137 TYPED_TEST_CASE(RendererPixelTest, RendererTypes);
102 138
103 typedef ::testing::Types<GLRenderer, 139 typedef ::testing::Types<GLRenderer,
104 GLRendererWithSkiaGPUBackend, 140 GLRendererWithSkiaGPUBackend,
105 SoftwareRenderer> RendererTypesWithSkiaGPUBackend; 141 SoftwareRenderer> RendererTypesWithSkiaGPUBackend;
106 template <typename RendererType> 142 template <typename RendererType>
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 pass_list.push_back(child_pass.Pass()); 247 pass_list.push_back(child_pass.Pass());
212 pass_list.push_back(root_pass.Pass()); 248 pass_list.push_back(root_pass.Pass());
213 249
214 EXPECT_TRUE(this->RunPixelTestWithReadbackTarget( 250 EXPECT_TRUE(this->RunPixelTestWithReadbackTarget(
215 &pass_list, 251 &pass_list,
216 child_pass_ptr, 252 child_pass_ptr,
217 base::FilePath(FILE_PATH_LITERAL("green_small.png")), 253 base::FilePath(FILE_PATH_LITERAL("green_small.png")),
218 ExactPixelComparator(true))); 254 ExactPixelComparator(true)));
219 } 255 }
220 256
257 TYPED_TEST(RendererPixelTest, TextureWithoutBackground) {
258 gfx::Rect rect(this->device_viewport_size_);
259
260 RenderPass::Id id(1, 1);
261 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
262
263 scoped_ptr<SharedQuadState> shared_state =
264 CreateTestSharedQuadState(gfx::Transform(), rect);
265
266 scoped_ptr<TextureDrawQuad> texture_quad = CreateTestTextureDrawQuad(
267 gfx::Rect(this->device_viewport_size_),
268 SkColorSetARGB(128, 0, 255, 0), // Texel color.
269 SK_ColorTRANSPARENT, // Background color.
270 shared_state.get(),
271 this->resource_provider_.get());
272 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>());
273
274 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
275 color_quad->SetNew(shared_state.get(), rect, SK_ColorWHITE, false);
276 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
277
278 RenderPassList pass_list;
279 pass_list.push_back(pass.Pass());
280
281 EXPECT_TRUE(this->RunPixelTest(
282 &pass_list,
283 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
284 FuzzyPixelOffByOneComparator(true)));
285 }
286
287 TYPED_TEST(RendererPixelTest, TextureWithBackground) {
288 gfx::Rect rect(this->device_viewport_size_);
289
290 RenderPass::Id id(1, 1);
291 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
292
293 scoped_ptr<SharedQuadState> texture_quad_state =
294 CreateTestSharedQuadState(gfx::Transform(), rect);
295 texture_quad_state->opacity = 0.5f;
296
297 scoped_ptr<TextureDrawQuad> texture_quad = CreateTestTextureDrawQuad(
298 gfx::Rect(this->device_viewport_size_),
299 SK_ColorTRANSPARENT, // Texel color.
300 SK_ColorGREEN, // Background color.
301 texture_quad_state.get(),
302 this->resource_provider_.get());
303 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>());
304
305 scoped_ptr<SharedQuadState> color_quad_state =
306 CreateTestSharedQuadState(gfx::Transform(), rect);
307 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
308 color_quad->SetNew(color_quad_state.get(), rect, SK_ColorWHITE, false);
309 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
310
311 RenderPassList pass_list;
312 pass_list.push_back(pass.Pass());
313
314 EXPECT_TRUE(this->RunPixelTest(
315 &pass_list,
316 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
317 FuzzyPixelOffByOneComparator(true)));
318 }
319
221 class VideoGLRendererPixelTest : public GLRendererPixelTest { 320 class VideoGLRendererPixelTest : public GLRendererPixelTest {
222 protected: 321 protected:
223 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad( 322 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad(
224 SharedQuadState* shared_state, bool with_alpha, bool is_transparent) { 323 SharedQuadState* shared_state, bool with_alpha, bool is_transparent) {
225 gfx::Rect rect(this->device_viewport_size_); 324 gfx::Rect rect(this->device_viewport_size_);
226 gfx::Rect opaque_rect(0, 0, 0, 0); 325 gfx::Rect opaque_rect(0, 0, 0, 0);
227 326
228 ResourceProvider::ResourceId y_resource = 327 ResourceProvider::ResourceId y_resource =
229 resource_provider_->CreateResource( 328 resource_provider_->CreateResource(
230 this->device_viewport_size_, 329 this->device_viewport_size_,
(...skipping 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 1336
1238 EXPECT_TRUE(this->RunPixelTest( 1337 EXPECT_TRUE(this->RunPixelTest(
1239 &pass_list, 1338 &pass_list,
1240 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), 1339 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")),
1241 ExactPixelComparator(true))); 1340 ExactPixelComparator(true)));
1242 } 1341 }
1243 #endif // !defined(OS_ANDROID) 1342 #endif // !defined(OS_ANDROID)
1244 1343
1245 } // namespace 1344 } // namespace
1246 } // namespace cc 1345 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698