Home | History | Annotate | Download | only in test
      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