render_pass_test_common.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1// Copyright 2012 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/test/render_pass_test_common.h"
6
7#include "cc/quads/checkerboard_draw_quad.h"
8#include "cc/quads/debug_border_draw_quad.h"
9#include "cc/quads/io_surface_draw_quad.h"
10#include "cc/quads/render_pass_draw_quad.h"
11#include "cc/quads/shared_quad_state.h"
12#include "cc/quads/solid_color_draw_quad.h"
13#include "cc/quads/stream_video_draw_quad.h"
14#include "cc/quads/texture_draw_quad.h"
15#include "cc/quads/tile_draw_quad.h"
16#include "cc/quads/yuv_video_draw_quad.h"
17#include "cc/resources/resource_provider.h"
18#include "ui/gfx/transform.h"
19
20namespace cc {
21
22void TestRenderPass::AppendQuad(scoped_ptr<cc::DrawQuad> quad) {
23  quad_list.push_back(quad.Pass());
24}
25
26void TestRenderPass::AppendSharedQuadState(
27    scoped_ptr<cc::SharedQuadState> state) {
28  shared_quad_state_list.push_back(state.Pass());
29}
30
31void TestRenderPass::AppendOneOfEveryQuadType(
32    ResourceProvider* resource_provider,
33    RenderPass::Id child_pass) {
34  gfx::Rect rect(0, 0, 100, 100);
35  gfx::Rect opaque_rect(10, 10, 80, 80);
36  const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
37  cc::ResourceProvider::ResourceId resource1 =
38      resource_provider->CreateResource(
39          gfx::Size(45, 5),
40          GL_CLAMP_TO_EDGE,
41          ResourceProvider::TextureUsageAny,
42          resource_provider->best_texture_format());
43  resource_provider->AllocateForTesting(resource1);
44  cc::ResourceProvider::ResourceId resource2 =
45      resource_provider->CreateResource(
46          gfx::Size(346, 61),
47          GL_CLAMP_TO_EDGE,
48          ResourceProvider::TextureUsageAny,
49          resource_provider->best_texture_format());
50  resource_provider->AllocateForTesting(resource2);
51  cc::ResourceProvider::ResourceId resource3 =
52      resource_provider->CreateResource(
53          gfx::Size(12, 134),
54          GL_CLAMP_TO_EDGE,
55          ResourceProvider::TextureUsageAny,
56          resource_provider->best_texture_format());
57  resource_provider->AllocateForTesting(resource3);
58  cc::ResourceProvider::ResourceId resource4 =
59      resource_provider->CreateResource(
60          gfx::Size(56, 12),
61          GL_CLAMP_TO_EDGE,
62          ResourceProvider::TextureUsageAny,
63          resource_provider->best_texture_format());
64  resource_provider->AllocateForTesting(resource4);
65  cc::ResourceProvider::ResourceId resource5 =
66      resource_provider->CreateResource(
67          gfx::Size(73, 26),
68          GL_CLAMP_TO_EDGE,
69          ResourceProvider::TextureUsageAny,
70          resource_provider->best_texture_format());
71  resource_provider->AllocateForTesting(resource5);
72  cc::ResourceProvider::ResourceId resource6 =
73      resource_provider->CreateResource(
74          gfx::Size(64, 92),
75          GL_CLAMP_TO_EDGE,
76          ResourceProvider::TextureUsageAny,
77          resource_provider->best_texture_format());
78  resource_provider->AllocateForTesting(resource6);
79  cc::ResourceProvider::ResourceId resource7 =
80      resource_provider->CreateResource(
81          gfx::Size(9, 14),
82          GL_CLAMP_TO_EDGE,
83          ResourceProvider::TextureUsageAny,
84          resource_provider->best_texture_format());
85  resource_provider->AllocateForTesting(resource7);
86
87  scoped_ptr<cc::SharedQuadState> shared_state = cc::SharedQuadState::Create();
88  shared_state->SetAll(gfx::Transform(),
89                       rect.size(),
90                       rect,
91                       rect,
92                       false,
93                       1);
94
95  scoped_ptr<cc::CheckerboardDrawQuad> checkerboard_quad =
96      cc::CheckerboardDrawQuad::Create();
97  checkerboard_quad->SetNew(shared_state.get(),
98                            rect,
99                            SK_ColorRED);
100  AppendQuad(checkerboard_quad.PassAs<DrawQuad>());
101
102  scoped_ptr<cc::DebugBorderDrawQuad> debug_border_quad =
103      cc::DebugBorderDrawQuad::Create();
104  debug_border_quad->SetNew(shared_state.get(),
105                            rect,
106                            SK_ColorRED,
107                            1);
108  AppendQuad(debug_border_quad.PassAs<DrawQuad>());
109
110  scoped_ptr<cc::IOSurfaceDrawQuad> io_surface_quad =
111      cc::IOSurfaceDrawQuad::Create();
112  io_surface_quad->SetNew(shared_state.get(),
113                          rect,
114                          opaque_rect,
115                          gfx::Size(50, 50),
116                          resource7,
117                          cc::IOSurfaceDrawQuad::FLIPPED);
118  AppendQuad(io_surface_quad.PassAs<DrawQuad>());
119
120  if (child_pass.layer_id) {
121    scoped_ptr<cc::RenderPassDrawQuad> render_pass_quad =
122        cc::RenderPassDrawQuad::Create();
123    render_pass_quad->SetNew(shared_state.get(),
124                             rect,
125                             child_pass,
126                             false,
127                             resource5,
128                             rect,
129                             gfx::RectF(),
130                             FilterOperations(),
131                             FilterOperations());
132    AppendQuad(render_pass_quad.PassAs<DrawQuad>());
133
134    scoped_ptr<cc::RenderPassDrawQuad> render_pass_replica_quad =
135        cc::RenderPassDrawQuad::Create();
136    render_pass_replica_quad->SetNew(shared_state.get(),
137                                     rect,
138                                     child_pass,
139                                     true,
140                                     resource5,
141                                     rect,
142                                     gfx::RectF(),
143                                     FilterOperations(),
144                                     FilterOperations());
145    AppendQuad(render_pass_replica_quad.PassAs<DrawQuad>());
146  }
147
148  scoped_ptr<cc::SolidColorDrawQuad> solid_color_quad =
149      cc::SolidColorDrawQuad::Create();
150  solid_color_quad->SetNew(shared_state.get(),
151                           rect,
152                           SK_ColorRED,
153                           false);
154  AppendQuad(solid_color_quad.PassAs<DrawQuad>());
155
156  scoped_ptr<cc::StreamVideoDrawQuad> stream_video_quad =
157      cc::StreamVideoDrawQuad::Create();
158  stream_video_quad->SetNew(shared_state.get(),
159                            rect,
160                            opaque_rect,
161                            resource6,
162                            gfx::Transform());
163  AppendQuad(stream_video_quad.PassAs<DrawQuad>());
164
165  scoped_ptr<cc::TextureDrawQuad> texture_quad =
166      cc::TextureDrawQuad::Create();
167  texture_quad->SetNew(shared_state.get(),
168                       rect,
169                       opaque_rect,
170                       resource1,
171                       false,
172                       gfx::PointF(0.f, 0.f),
173                       gfx::PointF(1.f, 1.f),
174                       SK_ColorTRANSPARENT,
175                       vertex_opacity,
176                       false);
177  AppendQuad(texture_quad.PassAs<DrawQuad>());
178
179  scoped_ptr<cc::TileDrawQuad> scaled_tile_quad =
180      cc::TileDrawQuad::Create();
181  scaled_tile_quad->SetNew(shared_state.get(),
182                           rect,
183                           opaque_rect,
184                           resource2,
185                           gfx::RectF(0, 0, 50, 50),
186                           gfx::Size(50, 50),
187                           false);
188  AppendQuad(scaled_tile_quad.PassAs<DrawQuad>());
189
190  scoped_ptr<cc::SharedQuadState> transformed_state = shared_state->Copy();
191  gfx::Transform rotation;
192  rotation.Rotate(45);
193  transformed_state->content_to_target_transform =
194      transformed_state->content_to_target_transform * rotation;
195  scoped_ptr<cc::TileDrawQuad> transformed_tile_quad =
196      cc::TileDrawQuad::Create();
197  transformed_tile_quad->SetNew(transformed_state.get(),
198                                rect,
199                                opaque_rect,
200                                resource3,
201                                gfx::RectF(0, 0, 100, 100),
202                                gfx::Size(100, 100),
203                                false);
204  AppendQuad(transformed_tile_quad.PassAs<DrawQuad>());
205
206  scoped_ptr<cc::SharedQuadState> shared_state2 = cc::SharedQuadState::Create();
207  shared_state->SetAll(gfx::Transform(), rect.size(), rect, rect, false, 1);
208
209  scoped_ptr<cc::TileDrawQuad> tile_quad = cc::TileDrawQuad::Create();
210  tile_quad->SetNew(shared_state2.get(),
211                    rect,
212                    opaque_rect,
213                    resource4,
214                    gfx::RectF(0, 0, 100, 100),
215                    gfx::Size(100, 100),
216                    false);
217  AppendQuad(tile_quad.PassAs<DrawQuad>());
218
219  ResourceProvider::ResourceId plane_resources[4];
220  for (int i = 0; i < 4; ++i) {
221    plane_resources[i] =
222        resource_provider->CreateResource(
223            gfx::Size(20, 12),
224            GL_CLAMP_TO_EDGE,
225            ResourceProvider::TextureUsageAny,
226            resource_provider->best_texture_format());
227    resource_provider->AllocateForTesting(plane_resources[i]);
228  }
229  scoped_ptr<cc::YUVVideoDrawQuad> yuv_quad =
230      cc::YUVVideoDrawQuad::Create();
231  yuv_quad->SetNew(shared_state2.get(),
232                   rect,
233                   opaque_rect,
234                   gfx::Size(100, 100),
235                   plane_resources[0],
236                   plane_resources[1],
237                   plane_resources[2],
238                   plane_resources[3]);
239  AppendQuad(yuv_quad.PassAs<DrawQuad>());
240
241  AppendSharedQuadState(shared_state.Pass());
242  AppendSharedQuadState(transformed_state.Pass());
243  AppendSharedQuadState(shared_state2.Pass());
244}
245
246}  // namespace cc
247