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/quads/render_pass_draw_quad.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/shared_quad_state.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/solid_color_draw_quad.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/resources/resource_provider.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/render_pass_test_common.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TestRenderPass* AddRenderPass(RenderPassList* pass_list,
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                              RenderPassId id,
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              const gfx::Rect& output_rect,
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              const gfx::Transform& root_transform) {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TestRenderPass> pass(TestRenderPass::Create());
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pass->SetNew(id, output_rect, output_rect, root_transform);
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestRenderPass* saved = pass.get();
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  pass_list->push_back(pass.PassAs<RenderPass>());
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return saved;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SolidColorDrawQuad* AddQuad(TestRenderPass* pass,
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            const gfx::Rect& rect,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            SkColor color) {
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect.size(),
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SolidColorDrawQuad* quad =
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return quad;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SolidColorDrawQuad* AddClippedQuad(TestRenderPass* pass,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   const gfx::Rect& rect,
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   SkColor color) {
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect.size(),
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       true,
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SolidColorDrawQuad* quad =
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return quad;
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SolidColorDrawQuad* AddTransformedQuad(TestRenderPass* pass,
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                       const gfx::Rect& rect,
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       SkColor color,
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       const gfx::Transform& transform) {
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  shared_state->SetAll(transform,
716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       rect.size(),
726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       rect,
736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       rect,
746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       false,
756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       1,
766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SolidColorDrawQuad* quad =
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return quad;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       TestRenderPass* contributing_pass) {
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = to_pass->CreateAndAppendSharedQuadState();
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
946d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  RenderPassDrawQuad* quad =
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      to_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               0,
103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               FilterOperations(),
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)               gfx::Vector2dF(),
10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       TestRenderPass* contributing_pass,
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       ResourceProvider::ResourceId mask_resource_id,
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                       const FilterOperations& filters,
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       gfx::Transform transform) {
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SharedQuadState* shared_state = to_pass->CreateAndAppendSharedQuadState();
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(transform,
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
1226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       SkXfermode::kSrcOver_Mode,
1236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       0);
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  RenderPassDrawQuad* quad =
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      to_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               mask_resource_id,
131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               filters,
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)               gfx::Vector2dF(),
13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
138