render_pass_test_utils.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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,
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return quad_ptr;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SolidColorDrawQuad* AddClippedQuad(TestRenderPass* pass,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   const gfx::Rect& rect,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   SkColor color) {
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect.size(),
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       true,
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return quad_ptr;
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SolidColorDrawQuad* AddTransformedQuad(TestRenderPass* pass,
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                       const gfx::Rect& rect,
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       SkColor color,
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       const gfx::Transform& transform) {
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      transform, rect.size(), rect, rect, false, 1, SkXfermode::kSrcOver_Mode);
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return quad_ptr;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       TestRenderPass* contributing_pass) {
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = to_pass->CreateAndAppendSharedQuadState();
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               false,
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               0,
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               FilterOperations(),
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  to_pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       TestRenderPass* contributing_pass,
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       ResourceProvider::ResourceId mask_resource_id,
10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                       const FilterOperations& filters,
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       gfx::Transform transform) {
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = to_pass->CreateAndAppendSharedQuadState();
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(transform,
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               false,
125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               mask_resource_id,
126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               filters,
12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  to_pass->AppendDrawQuad(quad.PassAs<DrawQuad>());
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
134