Home | History | Annotate | Download | only in quads
      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 
     11 namespace cc {
     12 
     13 RenderPassDrawQuad::RenderPassDrawQuad()
     14     : render_pass_id(RenderPass::Id(-1, -1)),
     15       is_replica(false),
     16       mask_resource_id(-1) {
     17 }
     18 
     19 RenderPassDrawQuad::~RenderPassDrawQuad() {
     20 }
     21 
     22 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Create() {
     23   return make_scoped_ptr(new RenderPassDrawQuad);
     24 }
     25 
     26 scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Copy(
     27     const SharedQuadState* copied_shared_quad_state,
     28     RenderPass::Id copied_render_pass_id) const {
     29   scoped_ptr<RenderPassDrawQuad> copy_quad(
     30       new RenderPassDrawQuad(*MaterialCast(this)));
     31   copy_quad->shared_quad_state = copied_shared_quad_state;
     32   copy_quad->render_pass_id = copied_render_pass_id;
     33   return copy_quad.Pass();
     34 }
     35 
     36 void RenderPassDrawQuad::SetNew(
     37     const SharedQuadState* shared_quad_state,
     38     gfx::Rect rect,
     39     RenderPass::Id render_pass_id,
     40     bool is_replica,
     41     ResourceProvider::ResourceId mask_resource_id,
     42     gfx::Rect contents_changed_since_last_frame,
     43     gfx::RectF mask_uv_rect,
     44     const FilterOperations& filters,
     45     skia::RefPtr<SkImageFilter> filter,
     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, filter,
     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     skia::RefPtr<SkImageFilter> filter,
     72     const FilterOperations& background_filters) {
     73   DCHECK_GT(render_pass_id.layer_id, 0);
     74   DCHECK_GE(render_pass_id.index, 0);
     75 
     76   DrawQuad::SetAll(shared_quad_state, DrawQuad::RENDER_PASS, rect, opaque_rect,
     77                    visible_rect, needs_blending);
     78   this->render_pass_id = render_pass_id;
     79   this->is_replica = is_replica;
     80   this->mask_resource_id = mask_resource_id;
     81   this->contents_changed_since_last_frame = contents_changed_since_last_frame;
     82   this->mask_uv_rect = mask_uv_rect;
     83   this->filters = filters;
     84   this->filter = filter;
     85   this->background_filters = background_filters;
     86 }
     87 
     88 void RenderPassDrawQuad::IterateResources(
     89     const ResourceIteratorCallback& callback) {
     90   if (mask_resource_id)
     91     mask_resource_id = callback.Run(mask_resource_id);
     92 }
     93 
     94 const RenderPassDrawQuad* RenderPassDrawQuad::MaterialCast(
     95     const DrawQuad* quad) {
     96   DCHECK_EQ(quad->material, DrawQuad::RENDER_PASS);
     97   return static_cast<const RenderPassDrawQuad*>(quad);
     98 }
     99 
    100 void RenderPassDrawQuad::ExtendValue(base::DictionaryValue* value) const {
    101   value->Set("render_pass_id",
    102              TracedValue::CreateIDRef(render_pass_id.AsTracingId()).release());
    103   value->SetBoolean("is_replica", is_replica);
    104   value->SetInteger("mask_resource_id", mask_resource_id);
    105   value->Set("contents_changed_since_last_frame",
    106              MathUtil::AsValue(contents_changed_since_last_frame).release());
    107   value->Set("mask_uv_rect", MathUtil::AsValue(mask_uv_rect).release());
    108   value->Set("filters", filters.AsValue().release());
    109   // TODO(piman): dump SkImageFilters rather than just indicating if there are
    110   // any or not.
    111   value->SetBoolean("has_filter", !!filter);
    112   value->Set("background_filters", background_filters.AsValue().release());
    113 }
    114 
    115 }  // namespace cc
    116