render_pass_test_common.cc revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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 skia::RefPtr<SkImageFilter>(), 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 skia::RefPtr<SkImageFilter>(), 145 FilterOperations()); 146 AppendQuad(render_pass_replica_quad.PassAs<DrawQuad>()); 147 } 148 149 scoped_ptr<cc::SolidColorDrawQuad> solid_color_quad = 150 cc::SolidColorDrawQuad::Create(); 151 solid_color_quad->SetNew(shared_state.get(), 152 rect, 153 SK_ColorRED, 154 false); 155 AppendQuad(solid_color_quad.PassAs<DrawQuad>()); 156 157 scoped_ptr<cc::StreamVideoDrawQuad> stream_video_quad = 158 cc::StreamVideoDrawQuad::Create(); 159 stream_video_quad->SetNew(shared_state.get(), 160 rect, 161 opaque_rect, 162 resource6, 163 gfx::Transform()); 164 AppendQuad(stream_video_quad.PassAs<DrawQuad>()); 165 166 scoped_ptr<cc::TextureDrawQuad> texture_quad = 167 cc::TextureDrawQuad::Create(); 168 texture_quad->SetNew(shared_state.get(), 169 rect, 170 opaque_rect, 171 resource1, 172 false, 173 gfx::PointF(0.f, 0.f), 174 gfx::PointF(1.f, 1.f), 175 SK_ColorTRANSPARENT, 176 vertex_opacity, 177 false); 178 AppendQuad(texture_quad.PassAs<DrawQuad>()); 179 180 scoped_ptr<cc::TileDrawQuad> scaled_tile_quad = 181 cc::TileDrawQuad::Create(); 182 scaled_tile_quad->SetNew(shared_state.get(), 183 rect, 184 opaque_rect, 185 resource2, 186 gfx::RectF(0, 0, 50, 50), 187 gfx::Size(50, 50), 188 false); 189 AppendQuad(scaled_tile_quad.PassAs<DrawQuad>()); 190 191 scoped_ptr<cc::SharedQuadState> transformed_state = shared_state->Copy(); 192 gfx::Transform rotation; 193 rotation.Rotate(45); 194 transformed_state->content_to_target_transform = 195 transformed_state->content_to_target_transform * rotation; 196 scoped_ptr<cc::TileDrawQuad> transformed_tile_quad = 197 cc::TileDrawQuad::Create(); 198 transformed_tile_quad->SetNew(transformed_state.get(), 199 rect, 200 opaque_rect, 201 resource3, 202 gfx::RectF(0, 0, 100, 100), 203 gfx::Size(100, 100), 204 false); 205 AppendQuad(transformed_tile_quad.PassAs<DrawQuad>()); 206 207 scoped_ptr<cc::TileDrawQuad> tile_quad = 208 cc::TileDrawQuad::Create(); 209 tile_quad->SetNew(shared_state.get(), 210 rect, 211 opaque_rect, 212 resource4, 213 gfx::RectF(0, 0, 100, 100), 214 gfx::Size(100, 100), 215 false); 216 AppendQuad(tile_quad.PassAs<DrawQuad>()); 217 218 ResourceProvider::ResourceId plane_resources[4]; 219 for (int i = 0; i < 4; ++i) { 220 plane_resources[i] = 221 resource_provider->CreateResource( 222 gfx::Size(20, 12), 223 GL_CLAMP_TO_EDGE, 224 ResourceProvider::TextureUsageAny, 225 resource_provider->best_texture_format()); 226 resource_provider->AllocateForTesting(plane_resources[i]); 227 } 228 scoped_ptr<cc::YUVVideoDrawQuad> yuv_quad = 229 cc::YUVVideoDrawQuad::Create(); 230 yuv_quad->SetNew(shared_state.get(), 231 rect, 232 opaque_rect, 233 gfx::Size(100, 100), 234 plane_resources[0], 235 plane_resources[1], 236 plane_resources[2], 237 plane_resources[3]); 238 AppendQuad(yuv_quad.PassAs<DrawQuad>()); 239 240 AppendSharedQuadState(transformed_state.Pass()); 241 AppendSharedQuadState(shared_state.Pass()); 242} 243 244} // namespace cc 245