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