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 3 // found in the LICENSE file. 4 5 #include "cc/quads/render_pass_draw_quad.h" 6 7 #include "base/values.h" 8 #include "cc/base/math_util.h" 9 #include "cc/debug/traced_value.h" 10 #include "third_party/skia/include/core/SkImageFilter.h" 11 12 namespace cc { 13 14 RenderPassDrawQuad::RenderPassDrawQuad() 15 : render_pass_id(RenderPass::Id(-1, -1)), 16 is_replica(false), 17 mask_resource_id(-1) { 18 } 19 20 RenderPassDrawQuad::~RenderPassDrawQuad() { 21 } 22 23 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Create() { 24 return make_scoped_ptr(new RenderPassDrawQuad); 25 } 26 27 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Copy( 28 const SharedQuadState* copied_shared_quad_state, 29 RenderPass::Id copied_render_pass_id) const { 30 scoped_ptr<RenderPassDrawQuad> copy_quad( 31 new RenderPassDrawQuad(*MaterialCast(this))); 32 copy_quad->shared_quad_state = copied_shared_quad_state; 33 copy_quad->render_pass_id = copied_render_pass_id; 34 return copy_quad.Pass(); 35 } 36 37 void RenderPassDrawQuad::SetNew( 38 const SharedQuadState* shared_quad_state, 39 gfx::Rect rect, 40 RenderPass::Id render_pass_id, 41 bool is_replica, 42 ResourceProvider::ResourceId mask_resource_id, 43 gfx::Rect contents_changed_since_last_frame, 44 gfx::RectF mask_uv_rect, 45 const FilterOperations& filters, 46 const FilterOperations& background_filters) { 47 DCHECK_GT(render_pass_id.layer_id, 0); 48 DCHECK_GE(render_pass_id.index, 0); 49 50 gfx::Rect opaque_rect; 51 gfx::Rect visible_rect = rect; 52 bool needs_blending = false; 53 SetAll(shared_quad_state, rect, opaque_rect, visible_rect, needs_blending, 54 render_pass_id, is_replica, mask_resource_id, 55 contents_changed_since_last_frame, mask_uv_rect, filters, 56 background_filters); 57 } 58 59 void RenderPassDrawQuad::SetAll( 60 const SharedQuadState* shared_quad_state, 61 gfx::Rect rect, 62 gfx::Rect opaque_rect, 63 gfx::Rect visible_rect, 64 bool needs_blending, 65 RenderPass::Id render_pass_id, 66 bool is_replica, 67 ResourceProvider::ResourceId mask_resource_id, 68 gfx::Rect contents_changed_since_last_frame, 69 gfx::RectF mask_uv_rect, 70 const FilterOperations& filters, 71 const FilterOperations& background_filters) { 72 DCHECK_GT(render_pass_id.layer_id, 0); 73 DCHECK_GE(render_pass_id.index, 0); 74 75 DrawQuad::SetAll(shared_quad_state, DrawQuad::RENDER_PASS, rect, opaque_rect, 76 visible_rect, needs_blending); 77 this->render_pass_id = render_pass_id; 78 this->is_replica = is_replica; 79 this->mask_resource_id = mask_resource_id; 80 this->contents_changed_since_last_frame = contents_changed_since_last_frame; 81 this->mask_uv_rect = mask_uv_rect; 82 this->filters = filters; 83 this->background_filters = background_filters; 84 } 85 86 void RenderPassDrawQuad::IterateResources( 87 const ResourceIteratorCallback& callback) { 88 if (mask_resource_id) 89 mask_resource_id = callback.Run(mask_resource_id); 90 } 91 92 const RenderPassDrawQuad* RenderPassDrawQuad::MaterialCast( 93 const DrawQuad* quad) { 94 DCHECK_EQ(quad->material, DrawQuad::RENDER_PASS); 95 return static_cast<const RenderPassDrawQuad*>(quad); 96 } 97 98 void RenderPassDrawQuad::ExtendValue(base::DictionaryValue* value) const { 99 value->Set("render_pass_id", 100 TracedValue::CreateIDRef(render_pass_id.AsTracingId()).release()); 101 value->SetBoolean("is_replica", is_replica); 102 value->SetInteger("mask_resource_id", mask_resource_id); 103 value->Set("contents_changed_since_last_frame", 104 MathUtil::AsValue(contents_changed_since_last_frame).release()); 105 value->Set("mask_uv_rect", MathUtil::AsValue(mask_uv_rect).release()); 106 value->Set("filters", filters.AsValue().release()); 107 value->Set("background_filters", background_filters.AsValue().release()); 108 } 109 110 } // namespace cc 111