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

Side by Side Diff: cc/quads/render_pass_draw_quad.cc

Issue 23455060: mix-blend-mode implementation for accelerated layers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/quads/render_pass_draw_quad.h" 5 #include "cc/quads/render_pass_draw_quad.h"
6 6
7 #include "base/values.h" 7 #include "base/values.h"
8 #include "cc/base/math_util.h" 8 #include "cc/base/math_util.h"
9 #include "cc/debug/traced_value.h" 9 #include "cc/debug/traced_value.h"
10 #include "third_party/skia/include/core/SkImageFilter.h" 10 #include "third_party/skia/include/core/SkImageFilter.h"
11 11
12 namespace cc { 12 namespace cc {
13 13
14 RenderPassDrawQuad::RenderPassDrawQuad() 14 RenderPassDrawQuad::RenderPassDrawQuad()
15 : render_pass_id(RenderPass::Id(-1, -1)), 15 : render_pass_id(RenderPass::Id(-1, -1)),
16 is_replica(false), 16 is_replica(false),
17 mask_resource_id(-1) { 17 mask_resource_id(-1),
18 blend_mode(SkXfermode::kSrcOver_Mode) {
18 } 19 }
19 20
20 RenderPassDrawQuad::~RenderPassDrawQuad() { 21 RenderPassDrawQuad::~RenderPassDrawQuad() {
21 } 22 }
22 23
23 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Create() { 24 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Create() {
24 return make_scoped_ptr(new RenderPassDrawQuad); 25 return make_scoped_ptr(new RenderPassDrawQuad);
25 } 26 }
26 27
27 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Copy( 28 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Copy(
28 const SharedQuadState* copied_shared_quad_state, 29 const SharedQuadState* copied_shared_quad_state,
29 RenderPass::Id copied_render_pass_id) const { 30 RenderPass::Id copied_render_pass_id) const {
30 scoped_ptr<RenderPassDrawQuad> copy_quad( 31 scoped_ptr<RenderPassDrawQuad> copy_quad(
31 new RenderPassDrawQuad(*MaterialCast(this))); 32 new RenderPassDrawQuad(*MaterialCast(this)));
32 copy_quad->shared_quad_state = copied_shared_quad_state; 33 copy_quad->shared_quad_state = copied_shared_quad_state;
33 copy_quad->render_pass_id = copied_render_pass_id; 34 copy_quad->render_pass_id = copied_render_pass_id;
34 return copy_quad.Pass(); 35 return copy_quad.Pass();
35 } 36 }
36 37
37 void RenderPassDrawQuad::SetNew( 38 void RenderPassDrawQuad::SetNew(
38 const SharedQuadState* shared_quad_state, 39 const SharedQuadState* shared_quad_state,
39 gfx::Rect rect, 40 gfx::Rect rect,
40 RenderPass::Id render_pass_id, 41 RenderPass::Id render_pass_id,
41 bool is_replica, 42 bool is_replica,
42 ResourceProvider::ResourceId mask_resource_id, 43 ResourceProvider::ResourceId mask_resource_id,
43 gfx::Rect contents_changed_since_last_frame, 44 gfx::Rect contents_changed_since_last_frame,
44 gfx::RectF mask_uv_rect, 45 gfx::RectF mask_uv_rect,
45 const FilterOperations& filters, 46 const FilterOperations& filters,
46 skia::RefPtr<SkImageFilter> filter, 47 skia::RefPtr<SkImageFilter> filter,
47 const FilterOperations& background_filters) { 48 const FilterOperations& background_filters,
49 SkXfermode::Mode blend_mode) {
48 DCHECK_GT(render_pass_id.layer_id, 0); 50 DCHECK_GT(render_pass_id.layer_id, 0);
49 DCHECK_GE(render_pass_id.index, 0); 51 DCHECK_GE(render_pass_id.index, 0);
50 52
51 gfx::Rect opaque_rect; 53 gfx::Rect opaque_rect;
52 gfx::Rect visible_rect = rect; 54 gfx::Rect visible_rect = rect;
53 bool needs_blending = false; 55 bool needs_blending = false;
54 SetAll(shared_quad_state, rect, opaque_rect, visible_rect, needs_blending, 56 SetAll(shared_quad_state, rect, opaque_rect, visible_rect, needs_blending,
55 render_pass_id, is_replica, mask_resource_id, 57 render_pass_id, is_replica, mask_resource_id,
56 contents_changed_since_last_frame, mask_uv_rect, filters, filter, 58 contents_changed_since_last_frame, mask_uv_rect, filters, filter,
57 background_filters); 59 background_filters, blend_mode);
58 } 60 }
59 61
60 void RenderPassDrawQuad::SetAll( 62 void RenderPassDrawQuad::SetAll(
61 const SharedQuadState* shared_quad_state, 63 const SharedQuadState* shared_quad_state,
62 gfx::Rect rect, 64 gfx::Rect rect,
63 gfx::Rect opaque_rect, 65 gfx::Rect opaque_rect,
64 gfx::Rect visible_rect, 66 gfx::Rect visible_rect,
65 bool needs_blending, 67 bool needs_blending,
66 RenderPass::Id render_pass_id, 68 RenderPass::Id render_pass_id,
67 bool is_replica, 69 bool is_replica,
68 ResourceProvider::ResourceId mask_resource_id, 70 ResourceProvider::ResourceId mask_resource_id,
69 gfx::Rect contents_changed_since_last_frame, 71 gfx::Rect contents_changed_since_last_frame,
70 gfx::RectF mask_uv_rect, 72 gfx::RectF mask_uv_rect,
71 const FilterOperations& filters, 73 const FilterOperations& filters,
72 skia::RefPtr<SkImageFilter> filter, 74 skia::RefPtr<SkImageFilter> filter,
73 const FilterOperations& background_filters) { 75 const FilterOperations& background_filters,
76 SkXfermode::Mode blend_mode) {
74 DCHECK_GT(render_pass_id.layer_id, 0); 77 DCHECK_GT(render_pass_id.layer_id, 0);
75 DCHECK_GE(render_pass_id.index, 0); 78 DCHECK_GE(render_pass_id.index, 0);
76 79
77 DrawQuad::SetAll(shared_quad_state, DrawQuad::RENDER_PASS, rect, opaque_rect, 80 DrawQuad::SetAll(shared_quad_state, DrawQuad::RENDER_PASS, rect, opaque_rect,
78 visible_rect, needs_blending); 81 visible_rect, needs_blending);
79 this->render_pass_id = render_pass_id; 82 this->render_pass_id = render_pass_id;
80 this->is_replica = is_replica; 83 this->is_replica = is_replica;
81 this->mask_resource_id = mask_resource_id; 84 this->mask_resource_id = mask_resource_id;
82 this->contents_changed_since_last_frame = contents_changed_since_last_frame; 85 this->contents_changed_since_last_frame = contents_changed_since_last_frame;
83 this->mask_uv_rect = mask_uv_rect; 86 this->mask_uv_rect = mask_uv_rect;
84 this->filters = filters; 87 this->filters = filters;
85 this->filter = filter; 88 this->filter = filter;
86 this->background_filters = background_filters; 89 this->background_filters = background_filters;
90 this->blend_mode = blend_mode;
87 } 91 }
88 92
89 void RenderPassDrawQuad::IterateResources( 93 void RenderPassDrawQuad::IterateResources(
90 const ResourceIteratorCallback& callback) { 94 const ResourceIteratorCallback& callback) {
91 if (mask_resource_id) 95 if (mask_resource_id)
92 mask_resource_id = callback.Run(mask_resource_id); 96 mask_resource_id = callback.Run(mask_resource_id);
93 } 97 }
94 98
95 const RenderPassDrawQuad* RenderPassDrawQuad::MaterialCast( 99 const RenderPassDrawQuad* RenderPassDrawQuad::MaterialCast(
96 const DrawQuad* quad) { 100 const DrawQuad* quad) {
(...skipping 10 matching lines...) Expand all
107 MathUtil::AsValue(contents_changed_since_last_frame).release()); 111 MathUtil::AsValue(contents_changed_since_last_frame).release());
108 value->Set("mask_uv_rect", MathUtil::AsValue(mask_uv_rect).release()); 112 value->Set("mask_uv_rect", MathUtil::AsValue(mask_uv_rect).release());
109 value->Set("filters", filters.AsValue().release()); 113 value->Set("filters", filters.AsValue().release());
110 // TODO(piman): dump SkImageFilters rather than just indicating if there are 114 // TODO(piman): dump SkImageFilters rather than just indicating if there are
111 // any or not. 115 // any or not.
112 value->SetBoolean("has_filter", !!filter); 116 value->SetBoolean("has_filter", !!filter);
113 value->Set("background_filters", background_filters.AsValue().release()); 117 value->Set("background_filters", background_filters.AsValue().release());
114 } 118 }
115 119
116 } // namespace cc 120 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698