render_pass_test_utils.cc revision 6d86b77056ed63eb6871182f42a9fd5f07550f90
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 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/test/render_pass_test_utils.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/quad_sink.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass_draw_quad.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/shared_quad_state.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/solid_color_draw_quad.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/resources/resource_provider.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/render_pass_test_common.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TestRenderPass* AddRenderPass(RenderPassList* pass_list,
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              RenderPass::Id id,
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              const gfx::Rect& output_rect,
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              const gfx::Transform& root_transform) {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TestRenderPass> pass(TestRenderPass::Create());
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pass->SetNew(id, output_rect, output_rect, root_transform);
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestRenderPass* saved = pass.get();
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  pass_list->push_back(pass.PassAs<RenderPass>());
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return saved;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SolidColorDrawQuad* AddQuad(TestRenderPass* pass,
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            const gfx::Rect& rect,
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            SkColor color) {
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect.size(),
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return quad_ptr;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SolidColorDrawQuad* AddClippedQuad(TestRenderPass* pass,
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   const gfx::Rect& rect,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   SkColor color) {
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect.size(),
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       true,
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return quad_ptr;
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SolidColorDrawQuad* AddTransformedQuad(TestRenderPass* pass,
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                       const gfx::Rect& rect,
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       SkColor color,
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       const gfx::Transform& transform) {
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  shared_state->SetAll(transform,
746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       rect.size(),
756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       rect,
766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       rect,
776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       false,
786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       1,
796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return quad_ptr;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       TestRenderPass* contributing_pass) {
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = to_pass->CreateAndAppendSharedQuadState();
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
996d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               false,
106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               0,
107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               FilterOperations(),
11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  to_pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       TestRenderPass* contributing_pass,
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       ResourceProvider::ResourceId mask_resource_id,
11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                       const FilterOperations& filters,
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       gfx::Transform transform) {
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = to_pass->CreateAndAppendSharedQuadState();
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(transform,
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
1276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
1286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               false,
135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               mask_resource_id,
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               filters,
13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  to_pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
144