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