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