OLD | NEW |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
507 case DrawQuad::CHECKERBOARD: | 507 case DrawQuad::CHECKERBOARD: |
508 DrawCheckerboardQuad(frame, CheckerboardDrawQuad::MaterialCast(quad)); | 508 DrawCheckerboardQuad(frame, CheckerboardDrawQuad::MaterialCast(quad)); |
509 break; | 509 break; |
510 case DrawQuad::DEBUG_BORDER: | 510 case DrawQuad::DEBUG_BORDER: |
511 DrawDebugBorderQuad(frame, DebugBorderDrawQuad::MaterialCast(quad)); | 511 DrawDebugBorderQuad(frame, DebugBorderDrawQuad::MaterialCast(quad)); |
512 break; | 512 break; |
513 case DrawQuad::IO_SURFACE_CONTENT: | 513 case DrawQuad::IO_SURFACE_CONTENT: |
514 DrawIOSurfaceQuad(frame, IOSurfaceDrawQuad::MaterialCast(quad)); | 514 DrawIOSurfaceQuad(frame, IOSurfaceDrawQuad::MaterialCast(quad)); |
515 break; | 515 break; |
516 case DrawQuad::PICTURE_CONTENT: | 516 case DrawQuad::PICTURE_CONTENT: |
517 DrawPictureQuad(frame, PictureDrawQuad::MaterialCast(quad)); | 517 // PictureDrawQuad should only be used for resourceless software draws. |
| 518 NOTREACHED(); |
518 break; | 519 break; |
519 case DrawQuad::RENDER_PASS: | 520 case DrawQuad::RENDER_PASS: |
520 DrawRenderPassQuad(frame, RenderPassDrawQuad::MaterialCast(quad)); | 521 DrawRenderPassQuad(frame, RenderPassDrawQuad::MaterialCast(quad)); |
521 break; | 522 break; |
522 case DrawQuad::SOLID_COLOR: | 523 case DrawQuad::SOLID_COLOR: |
523 DrawSolidColorQuad(frame, SolidColorDrawQuad::MaterialCast(quad)); | 524 DrawSolidColorQuad(frame, SolidColorDrawQuad::MaterialCast(quad)); |
524 break; | 525 break; |
525 case DrawQuad::STREAM_VIDEO_CONTENT: | 526 case DrawQuad::STREAM_VIDEO_CONTENT: |
526 DrawStreamVideoQuad(frame, StreamVideoDrawQuad::MaterialCast(quad)); | 527 DrawStreamVideoQuad(frame, StreamVideoDrawQuad::MaterialCast(quad)); |
527 break; | 528 break; |
(...skipping 1443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1971 GLC(gl_, gl_->Uniform1i(program->fragment_shader().sampler_location(), 0)); | 1972 GLC(gl_, gl_->Uniform1i(program->fragment_shader().sampler_location(), 0)); |
1972 | 1973 |
1973 SetShaderOpacity(quad->opacity(), | 1974 SetShaderOpacity(quad->opacity(), |
1974 program->fragment_shader().alpha_location()); | 1975 program->fragment_shader().alpha_location()); |
1975 DrawQuadGeometry(frame, | 1976 DrawQuadGeometry(frame, |
1976 quad->quadTransform(), | 1977 quad->quadTransform(), |
1977 quad->rect, | 1978 quad->rect, |
1978 program->vertex_shader().matrix_location()); | 1979 program->vertex_shader().matrix_location()); |
1979 } | 1980 } |
1980 | 1981 |
1981 void GLRenderer::DrawPictureQuad(const DrawingFrame* frame, | |
1982 const PictureDrawQuad* quad) { | |
1983 if (on_demand_tile_raster_bitmap_.width() != quad->texture_size.width() || | |
1984 on_demand_tile_raster_bitmap_.height() != quad->texture_size.height()) { | |
1985 on_demand_tile_raster_bitmap_.allocN32Pixels(quad->texture_size.width(), | |
1986 quad->texture_size.height()); | |
1987 | |
1988 if (on_demand_tile_raster_resource_id_) | |
1989 resource_provider_->DeleteResource(on_demand_tile_raster_resource_id_); | |
1990 | |
1991 on_demand_tile_raster_resource_id_ = resource_provider_->CreateGLTexture( | |
1992 quad->texture_size, | |
1993 GL_TEXTURE_2D, | |
1994 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM, | |
1995 GL_CLAMP_TO_EDGE, | |
1996 ResourceProvider::TextureHintImmutable, | |
1997 quad->texture_format); | |
1998 } | |
1999 | |
2000 SkCanvas canvas(on_demand_tile_raster_bitmap_); | |
2001 quad->raster_source->PlaybackToCanvas(&canvas, quad->content_rect, | |
2002 quad->contents_scale); | |
2003 | |
2004 uint8_t* bitmap_pixels = NULL; | |
2005 SkBitmap on_demand_tile_raster_bitmap_dest; | |
2006 SkColorType colorType = ResourceFormatToSkColorType(quad->texture_format); | |
2007 if (on_demand_tile_raster_bitmap_.colorType() != colorType) { | |
2008 on_demand_tile_raster_bitmap_.copyTo(&on_demand_tile_raster_bitmap_dest, | |
2009 colorType); | |
2010 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the | |
2011 // bitmap data. This check will be removed once crbug.com/293728 is fixed. | |
2012 CHECK_EQ(0u, on_demand_tile_raster_bitmap_dest.rowBytes() % 4); | |
2013 bitmap_pixels = reinterpret_cast<uint8_t*>( | |
2014 on_demand_tile_raster_bitmap_dest.getPixels()); | |
2015 } else { | |
2016 bitmap_pixels = | |
2017 reinterpret_cast<uint8_t*>(on_demand_tile_raster_bitmap_.getPixels()); | |
2018 } | |
2019 | |
2020 resource_provider_->SetPixels(on_demand_tile_raster_resource_id_, | |
2021 bitmap_pixels, | |
2022 gfx::Rect(quad->texture_size), | |
2023 gfx::Rect(quad->texture_size), | |
2024 gfx::Vector2d()); | |
2025 | |
2026 DrawContentQuad(frame, quad, on_demand_tile_raster_resource_id_); | |
2027 } | |
2028 | |
2029 struct TextureProgramBinding { | 1982 struct TextureProgramBinding { |
2030 template <class Program> | 1983 template <class Program> |
2031 void Set(Program* program) { | 1984 void Set(Program* program) { |
2032 DCHECK(program); | 1985 DCHECK(program); |
2033 program_id = program->program(); | 1986 program_id = program->program(); |
2034 sampler_location = program->fragment_shader().sampler_location(); | 1987 sampler_location = program->fragment_shader().sampler_location(); |
2035 matrix_location = program->vertex_shader().matrix_location(); | 1988 matrix_location = program->vertex_shader().matrix_location(); |
2036 background_color_location = | 1989 background_color_location = |
2037 program->fragment_shader().background_color_location(); | 1990 program->fragment_shader().background_color_location(); |
2038 } | 1991 } |
(...skipping 1267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3306 context_support_->ScheduleOverlayPlane( | 3259 context_support_->ScheduleOverlayPlane( |
3307 overlay.plane_z_order, | 3260 overlay.plane_z_order, |
3308 overlay.transform, | 3261 overlay.transform, |
3309 pending_overlay_resources_.back()->texture_id(), | 3262 pending_overlay_resources_.back()->texture_id(), |
3310 overlay.display_rect, | 3263 overlay.display_rect, |
3311 overlay.uv_rect); | 3264 overlay.uv_rect); |
3312 } | 3265 } |
3313 } | 3266 } |
3314 | 3267 |
3315 } // namespace cc | 3268 } // namespace cc |
OLD | NEW |