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