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