12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass_draw_quad.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/debug/trace_event_argument.h" 8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/values.h" 9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "cc/base/math_util.h" 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "cc/debug/traced_value.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h" 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderPassDrawQuad::RenderPassDrawQuad() 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) : render_pass_id(RenderPassId(-1, -1)), 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mask_resource_id(static_cast<ResourceProvider::ResourceId>(-1)) { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderPassDrawQuad::~RenderPassDrawQuad() { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void RenderPassDrawQuad::SetNew(const SharedQuadState* shared_quad_state, 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Rect& rect, 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Rect& visible_rect, 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RenderPassId render_pass_id, 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ResourceProvider::ResourceId mask_resource_id, 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::RectF& mask_uv_rect, 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const FilterOperations& filters, 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Vector2dF& filters_scale, 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const FilterOperations& background_filters) { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_GT(render_pass_id.layer_id, 0); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_GE(render_pass_id.index, 0); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect opaque_rect; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool needs_blending = false; 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SetAll(shared_quad_state, 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) rect, 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) opaque_rect, 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) visible_rect, 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) needs_blending, 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) render_pass_id, 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mask_resource_id, 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mask_uv_rect, 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) filters, 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) filters_scale, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) background_filters); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void RenderPassDrawQuad::SetAll(const SharedQuadState* shared_quad_state, 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Rect& rect, 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Rect& opaque_rect, 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Rect& visible_rect, 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) bool needs_blending, 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RenderPassId render_pass_id, 5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ResourceProvider::ResourceId mask_resource_id, 5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::RectF& mask_uv_rect, 5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const FilterOperations& filters, 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Vector2dF& filters_scale, 6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const FilterOperations& background_filters) { 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_GT(render_pass_id.layer_id, 0); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_GE(render_pass_id.index, 0); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrawQuad::SetAll(shared_quad_state, DrawQuad::RENDER_PASS, rect, opaque_rect, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) visible_rect, needs_blending); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this->render_pass_id = render_pass_id; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this->mask_resource_id = mask_resource_id; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this->mask_uv_rect = mask_uv_rect; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this->filters = filters; 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) this->filters_scale = filters_scale; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this->background_filters = background_filters; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderPassDrawQuad::IterateResources( 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ResourceIteratorCallback& callback) { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (mask_resource_id) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mask_resource_id = callback.Run(mask_resource_id); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const RenderPassDrawQuad* RenderPassDrawQuad::MaterialCast( 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DrawQuad* quad) { 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(quad->material, DrawQuad::RENDER_PASS); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<const RenderPassDrawQuad*>(quad); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void RenderPassDrawQuad::ExtendValue(base::debug::TracedValue* value) const { 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TracedValue::SetIDRef(render_pass_id.AsTracingId(), value, "render_pass_id"); 88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch value->SetInteger("mask_resource_id", mask_resource_id); 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->BeginArray("mask_uv_rect"); 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MathUtil::AddToTracedValue(mask_uv_rect, value); 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->EndArray(); 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->BeginDictionary("filters"); 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) filters.AsValueInto(value); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->EndDictionary(); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) value->BeginArray("filters_scale"); 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MathUtil::AddToTracedValue(filters_scale, value); 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) value->EndArray(); 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->BeginDictionary("background_filters"); 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) background_filters.AsValueInto(value); 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) value->EndDictionary(); 105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 108