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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 ResourceProvider* resource_provider, | 159 ResourceProvider* resource_provider, |
160 TextureMailboxDeleter* texture_mailbox_deleter, | 160 TextureMailboxDeleter* texture_mailbox_deleter, |
161 int highp_threshold_min) | 161 int highp_threshold_min) |
162 : DirectRenderer(client, settings, output_surface, resource_provider), | 162 : DirectRenderer(client, settings, output_surface, resource_provider), |
163 offscreen_framebuffer_id_(0), | 163 offscreen_framebuffer_id_(0), |
164 shared_geometry_quad_(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)), | 164 shared_geometry_quad_(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)), |
165 context_(output_surface->context_provider()->Context3d()), | 165 context_(output_surface->context_provider()->Context3d()), |
166 context_support_(output_surface->context_provider()->ContextSupport()), | 166 context_support_(output_surface->context_provider()->ContextSupport()), |
167 texture_mailbox_deleter_(texture_mailbox_deleter), | 167 texture_mailbox_deleter_(texture_mailbox_deleter), |
168 is_backbuffer_discarded_(false), | 168 is_backbuffer_discarded_(false), |
169 is_using_bind_uniform_(false), | |
170 visible_(true), | 169 visible_(true), |
171 is_scissor_enabled_(false), | 170 is_scissor_enabled_(false), |
172 stencil_shadow_(false), | 171 stencil_shadow_(false), |
173 blend_shadow_(false), | 172 blend_shadow_(false), |
174 highp_threshold_min_(highp_threshold_min), | 173 highp_threshold_min_(highp_threshold_min), |
175 highp_threshold_cache_(0), | 174 highp_threshold_cache_(0), |
176 on_demand_tile_raster_resource_id_(0) { | 175 on_demand_tile_raster_resource_id_(0) { |
177 DCHECK(context_); | 176 DCHECK(context_); |
178 DCHECK(context_support_); | 177 DCHECK(context_support_); |
179 } | 178 } |
(...skipping 25 matching lines...) Expand all Loading... |
205 capabilities_.avoid_pow2_textures = context_caps.fast_npot_mo8_textures; | 204 capabilities_.avoid_pow2_textures = context_caps.fast_npot_mo8_textures; |
206 | 205 |
207 capabilities_.using_offscreen_context3d = true; | 206 capabilities_.using_offscreen_context3d = true; |
208 | 207 |
209 capabilities_.using_map_image = | 208 capabilities_.using_map_image = |
210 settings_->use_map_image && context_caps.map_image; | 209 settings_->use_map_image && context_caps.map_image; |
211 | 210 |
212 capabilities_.using_discard_framebuffer = | 211 capabilities_.using_discard_framebuffer = |
213 context_caps.discard_framebuffer; | 212 context_caps.discard_framebuffer; |
214 | 213 |
215 is_using_bind_uniform_ = context_caps.bind_uniform_location; | |
216 | |
217 if (!InitializeSharedObjects()) | 214 if (!InitializeSharedObjects()) |
218 return false; | 215 return false; |
219 | 216 |
220 // Make sure the viewport and context gets initialized, even if it is to zero. | 217 // Make sure the viewport and context gets initialized, even if it is to zero. |
221 ViewportChanged(); | 218 ViewportChanged(); |
222 return true; | 219 return true; |
223 } | 220 } |
224 | 221 |
225 void GLRenderer::InitializeGrContext() { | 222 void GLRenderer::InitializeGrContext() { |
226 skia::RefPtr<GrGLInterface> interface = skia::AdoptRef( | 223 skia::RefPtr<GrGLInterface> interface = skia::AdoptRef( |
(...skipping 1471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1698 bitmap_pixels, | 1695 bitmap_pixels, |
1699 gfx::Rect(quad->texture_size), | 1696 gfx::Rect(quad->texture_size), |
1700 gfx::Rect(quad->texture_size), | 1697 gfx::Rect(quad->texture_size), |
1701 gfx::Vector2d()); | 1698 gfx::Vector2d()); |
1702 | 1699 |
1703 DrawContentQuad(frame, quad, on_demand_tile_raster_resource_id_); | 1700 DrawContentQuad(frame, quad, on_demand_tile_raster_resource_id_); |
1704 } | 1701 } |
1705 | 1702 |
1706 struct TextureProgramBinding { | 1703 struct TextureProgramBinding { |
1707 template <class Program> | 1704 template <class Program> |
1708 void Set(Program* program, WebKit::WebGraphicsContext3D* context) { | 1705 void Set(Program* program) { |
1709 DCHECK(program && (program->initialized() || context->isContextLost())); | 1706 DCHECK(program); |
1710 program_id = program->program(); | 1707 program_id = program->program(); |
1711 sampler_location = program->fragment_shader().sampler_location(); | 1708 sampler_location = program->fragment_shader().sampler_location(); |
1712 matrix_location = program->vertex_shader().matrix_location(); | 1709 matrix_location = program->vertex_shader().matrix_location(); |
1713 background_color_location = | 1710 background_color_location = |
1714 program->fragment_shader().background_color_location(); | 1711 program->fragment_shader().background_color_location(); |
1715 } | 1712 } |
1716 int program_id; | 1713 int program_id; |
1717 int sampler_location; | 1714 int sampler_location; |
1718 int matrix_location; | 1715 int matrix_location; |
1719 int background_color_location; | 1716 int background_color_location; |
1720 }; | 1717 }; |
1721 | 1718 |
1722 struct TexTransformTextureProgramBinding : TextureProgramBinding { | 1719 struct TexTransformTextureProgramBinding : TextureProgramBinding { |
1723 template <class Program> | 1720 template <class Program> |
1724 void Set(Program* program, WebKit::WebGraphicsContext3D* context) { | 1721 void Set(Program* program) { |
1725 TextureProgramBinding::Set(program, context); | 1722 TextureProgramBinding::Set(program); |
1726 tex_transform_location = program->vertex_shader().tex_transform_location(); | 1723 tex_transform_location = program->vertex_shader().tex_transform_location(); |
1727 vertex_opacity_location = | 1724 vertex_opacity_location = |
1728 program->vertex_shader().vertex_opacity_location(); | 1725 program->vertex_shader().vertex_opacity_location(); |
1729 } | 1726 } |
1730 int tex_transform_location; | 1727 int tex_transform_location; |
1731 int vertex_opacity_location; | 1728 int vertex_opacity_location; |
1732 }; | 1729 }; |
1733 | 1730 |
1734 void GLRenderer::FlushTextureQuadCache() { | 1731 void GLRenderer::FlushTextureQuadCache() { |
1735 // Check to see if we have anything to draw. | 1732 // Check to see if we have anything to draw. |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1802 void GLRenderer::EnqueueTextureQuad(const DrawingFrame* frame, | 1799 void GLRenderer::EnqueueTextureQuad(const DrawingFrame* frame, |
1803 const TextureDrawQuad* quad) { | 1800 const TextureDrawQuad* quad) { |
1804 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( | 1801 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( |
1805 context_, &highp_threshold_cache_, highp_threshold_min_, | 1802 context_, &highp_threshold_cache_, highp_threshold_min_, |
1806 quad->shared_quad_state->visible_content_rect.bottom_right()); | 1803 quad->shared_quad_state->visible_content_rect.bottom_right()); |
1807 | 1804 |
1808 // Choose the correct texture program binding | 1805 // Choose the correct texture program binding |
1809 TexTransformTextureProgramBinding binding; | 1806 TexTransformTextureProgramBinding binding; |
1810 if (quad->premultiplied_alpha) { | 1807 if (quad->premultiplied_alpha) { |
1811 if (quad->background_color == SK_ColorTRANSPARENT) { | 1808 if (quad->background_color == SK_ColorTRANSPARENT) { |
1812 binding.Set(GetTextureProgram(tex_coord_precision), Context()); | 1809 binding.Set(GetTextureProgram(tex_coord_precision)); |
1813 } else { | 1810 } else { |
1814 binding.Set(GetTextureBackgroundProgram(tex_coord_precision), Context()); | 1811 binding.Set(GetTextureBackgroundProgram(tex_coord_precision)); |
1815 } | 1812 } |
1816 } else { | 1813 } else { |
1817 if (quad->background_color == SK_ColorTRANSPARENT) { | 1814 if (quad->background_color == SK_ColorTRANSPARENT) { |
1818 binding.Set(GetNonPremultipliedTextureProgram(tex_coord_precision), | 1815 binding.Set(GetNonPremultipliedTextureProgram(tex_coord_precision)); |
1819 Context()); | |
1820 } else { | 1816 } else { |
1821 binding.Set( | 1817 binding.Set( |
1822 GetNonPremultipliedTextureBackgroundProgram(tex_coord_precision), | 1818 GetNonPremultipliedTextureBackgroundProgram(tex_coord_precision)); |
1823 Context()); | |
1824 } | 1819 } |
1825 } | 1820 } |
1826 | 1821 |
1827 int resource_id = quad->resource_id; | 1822 int resource_id = quad->resource_id; |
1828 | 1823 |
1829 if (draw_cache_.program_id != binding.program_id || | 1824 if (draw_cache_.program_id != binding.program_id || |
1830 draw_cache_.resource_id != resource_id || | 1825 draw_cache_.resource_id != resource_id || |
1831 draw_cache_.needs_blending != quad->ShouldDrawWithBlending() || | 1826 draw_cache_.needs_blending != quad->ShouldDrawWithBlending() || |
1832 draw_cache_.background_color != quad->background_color || | 1827 draw_cache_.background_color != quad->background_color || |
1833 draw_cache_.matrix_data.size() >= 8) { | 1828 draw_cache_.matrix_data.size() >= 8) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1866 | 1861 |
1867 void GLRenderer::DrawIOSurfaceQuad(const DrawingFrame* frame, | 1862 void GLRenderer::DrawIOSurfaceQuad(const DrawingFrame* frame, |
1868 const IOSurfaceDrawQuad* quad) { | 1863 const IOSurfaceDrawQuad* quad) { |
1869 SetBlendEnabled(quad->ShouldDrawWithBlending()); | 1864 SetBlendEnabled(quad->ShouldDrawWithBlending()); |
1870 | 1865 |
1871 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( | 1866 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( |
1872 context_, &highp_threshold_cache_, highp_threshold_min_, | 1867 context_, &highp_threshold_cache_, highp_threshold_min_, |
1873 quad->shared_quad_state->visible_content_rect.bottom_right()); | 1868 quad->shared_quad_state->visible_content_rect.bottom_right()); |
1874 | 1869 |
1875 TexTransformTextureProgramBinding binding; | 1870 TexTransformTextureProgramBinding binding; |
1876 binding.Set(GetTextureIOSurfaceProgram(tex_coord_precision), Context()); | 1871 binding.Set(GetTextureIOSurfaceProgram(tex_coord_precision)); |
1877 | 1872 |
1878 SetUseProgram(binding.program_id); | 1873 SetUseProgram(binding.program_id); |
1879 GLC(Context(), Context()->uniform1i(binding.sampler_location, 0)); | 1874 GLC(Context(), Context()->uniform1i(binding.sampler_location, 0)); |
1880 if (quad->orientation == IOSurfaceDrawQuad::FLIPPED) { | 1875 if (quad->orientation == IOSurfaceDrawQuad::FLIPPED) { |
1881 GLC(Context(), | 1876 GLC(Context(), |
1882 Context()->uniform4f(binding.tex_transform_location, | 1877 Context()->uniform4f(binding.tex_transform_location, |
1883 0, | 1878 0, |
1884 quad->io_surface_size.height(), | 1879 quad->io_surface_size.height(), |
1885 quad->io_surface_size.width(), | 1880 quad->io_surface_size.width(), |
1886 quad->io_surface_size.height() * -1.0f)); | 1881 quad->io_surface_size.height() * -1.0f)); |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2509 | 2504 |
2510 bool GLRenderer::MakeContextCurrent() { return context_->makeContextCurrent(); } | 2505 bool GLRenderer::MakeContextCurrent() { return context_->makeContextCurrent(); } |
2511 | 2506 |
2512 bool GLRenderer::InitializeSharedObjects() { | 2507 bool GLRenderer::InitializeSharedObjects() { |
2513 TRACE_EVENT0("cc", "GLRenderer::InitializeSharedObjects"); | 2508 TRACE_EVENT0("cc", "GLRenderer::InitializeSharedObjects"); |
2514 MakeContextCurrent(); | 2509 MakeContextCurrent(); |
2515 | 2510 |
2516 // Create an FBO for doing offscreen rendering. | 2511 // Create an FBO for doing offscreen rendering. |
2517 GLC(context_, offscreen_framebuffer_id_ = context_->createFramebuffer()); | 2512 GLC(context_, offscreen_framebuffer_id_ = context_->createFramebuffer()); |
2518 | 2513 |
2519 // We will always need these programs to render, so create the programs | |
2520 // eagerly so that the shader compilation can start while we do other work. | |
2521 // Other programs are created lazily on first access. | |
2522 shared_geometry_ = make_scoped_ptr( | 2514 shared_geometry_ = make_scoped_ptr( |
2523 new GeometryBinding(context_, QuadVertexRect())); | 2515 new GeometryBinding(context_, QuadVertexRect())); |
2524 render_pass_program_ = make_scoped_ptr( | 2516 // We will always need these programs to render, so initialize the programs |
2525 new RenderPassProgram(context_, TexCoordPrecisionMedium)); | 2517 // eagerly so that the shader compilation can start while we do other work. |
2526 render_pass_program_highp_ = make_scoped_ptr( | 2518 // Other programs are initialized lazily on first access. |
2527 new RenderPassProgram(context_, TexCoordPrecisionHigh)); | 2519 render_pass_program_.Initialize(output_surface_->context_provider(), |
2528 tile_program_ = make_scoped_ptr( | 2520 TexCoordPrecisionMedium); |
2529 new TileProgram(context_, TexCoordPrecisionMedium)); | 2521 render_pass_program_highp_.Initialize(output_surface_->context_provider(), |
2530 tile_program_opaque_ = make_scoped_ptr( | 2522 TexCoordPrecisionHigh); |
2531 new TileProgramOpaque(context_, TexCoordPrecisionMedium)); | 2523 tile_program_.Initialize(output_surface_->context_provider(), |
2532 tile_program_highp_ = make_scoped_ptr( | 2524 TexCoordPrecisionMedium); |
2533 new TileProgram(context_, TexCoordPrecisionHigh)); | 2525 tile_program_opaque_.Initialize(output_surface_->context_provider(), |
2534 tile_program_opaque_highp_ = make_scoped_ptr( | 2526 TexCoordPrecisionMedium); |
2535 new TileProgramOpaque(context_, TexCoordPrecisionHigh)); | 2527 tile_program_highp_.Initialize(output_surface_->context_provider(), |
| 2528 TexCoordPrecisionHigh); |
| 2529 tile_program_opaque_highp_.Initialize(output_surface_->context_provider(), |
| 2530 TexCoordPrecisionHigh); |
2536 | 2531 |
2537 GLC(context_, context_->flush()); | 2532 GLC(context_, context_->flush()); |
2538 | 2533 |
2539 return true; | 2534 return true; |
2540 } | 2535 } |
2541 | 2536 |
2542 const GLRenderer::TileCheckerboardProgram* | 2537 const GLRenderer::TileCheckerboardProgram* |
2543 GLRenderer::GetTileCheckerboardProgram() { | 2538 GLRenderer::GetTileCheckerboardProgram() { |
2544 if (!tile_checkerboard_program_) | 2539 if (!tile_checkerboard_program_.initialized()) { |
2545 tile_checkerboard_program_ = make_scoped_ptr( | |
2546 new TileCheckerboardProgram(context_, TexCoordPrecisionNA)); | |
2547 if (!tile_checkerboard_program_->initialized()) { | |
2548 TRACE_EVENT0("cc", "GLRenderer::checkerboardProgram::initalize"); | 2540 TRACE_EVENT0("cc", "GLRenderer::checkerboardProgram::initalize"); |
2549 tile_checkerboard_program_->Initialize(context_, is_using_bind_uniform_); | 2541 tile_checkerboard_program_.Initialize( |
2550 } | 2542 output_surface_->context_provider(), TexCoordPrecisionNA); |
2551 return tile_checkerboard_program_.get(); | 2543 } |
| 2544 return &tile_checkerboard_program_; |
2552 } | 2545 } |
2553 | 2546 |
2554 const GLRenderer::DebugBorderProgram* GLRenderer::GetDebugBorderProgram() { | 2547 const GLRenderer::DebugBorderProgram* GLRenderer::GetDebugBorderProgram() { |
2555 if (!debug_border_program_) | 2548 if (!debug_border_program_.initialized()) { |
2556 debug_border_program_ = make_scoped_ptr( | |
2557 new DebugBorderProgram(context_, TexCoordPrecisionNA)); | |
2558 if (!debug_border_program_->initialized()) { | |
2559 TRACE_EVENT0("cc", "GLRenderer::debugBorderProgram::initialize"); | 2549 TRACE_EVENT0("cc", "GLRenderer::debugBorderProgram::initialize"); |
2560 debug_border_program_->Initialize(context_, is_using_bind_uniform_); | 2550 debug_border_program_.Initialize( |
2561 } | 2551 output_surface_->context_provider(), TexCoordPrecisionNA); |
2562 return debug_border_program_.get(); | 2552 } |
| 2553 return &debug_border_program_; |
2563 } | 2554 } |
2564 | 2555 |
2565 const GLRenderer::SolidColorProgram* GLRenderer::GetSolidColorProgram() { | 2556 const GLRenderer::SolidColorProgram* GLRenderer::GetSolidColorProgram() { |
2566 if (!solid_color_program_) | 2557 if (!solid_color_program_.initialized()) { |
2567 solid_color_program_ = make_scoped_ptr( | |
2568 new SolidColorProgram(context_, TexCoordPrecisionNA)); | |
2569 if (!solid_color_program_->initialized()) { | |
2570 TRACE_EVENT0("cc", "GLRenderer::solidColorProgram::initialize"); | 2558 TRACE_EVENT0("cc", "GLRenderer::solidColorProgram::initialize"); |
2571 solid_color_program_->Initialize(context_, is_using_bind_uniform_); | 2559 solid_color_program_.Initialize( |
2572 } | 2560 output_surface_->context_provider(), TexCoordPrecisionNA); |
2573 return solid_color_program_.get(); | 2561 } |
| 2562 return &solid_color_program_; |
2574 } | 2563 } |
2575 | 2564 |
2576 const GLRenderer::SolidColorProgramAA* GLRenderer::GetSolidColorProgramAA() { | 2565 const GLRenderer::SolidColorProgramAA* GLRenderer::GetSolidColorProgramAA() { |
2577 if (!solid_color_program_aa_) { | 2566 if (!solid_color_program_aa_.initialized()) { |
2578 solid_color_program_aa_ = | |
2579 make_scoped_ptr(new SolidColorProgramAA(context_, TexCoordPrecisionNA)); | |
2580 } | |
2581 if (!solid_color_program_aa_->initialized()) { | |
2582 TRACE_EVENT0("cc", "GLRenderer::solidColorProgramAA::initialize"); | 2567 TRACE_EVENT0("cc", "GLRenderer::solidColorProgramAA::initialize"); |
2583 solid_color_program_aa_->Initialize(context_, is_using_bind_uniform_); | 2568 solid_color_program_aa_.Initialize( |
2584 } | 2569 output_surface_->context_provider(), TexCoordPrecisionNA); |
2585 return solid_color_program_aa_.get(); | 2570 } |
| 2571 return &solid_color_program_aa_; |
2586 } | 2572 } |
2587 | 2573 |
2588 const GLRenderer::RenderPassProgram* GLRenderer::GetRenderPassProgram( | 2574 const GLRenderer::RenderPassProgram* GLRenderer::GetRenderPassProgram( |
2589 TexCoordPrecision precision) { | 2575 TexCoordPrecision precision) { |
2590 scoped_ptr<RenderPassProgram>& program = | 2576 RenderPassProgram* program = |
2591 (precision == TexCoordPrecisionHigh) ? render_pass_program_highp_ | 2577 (precision == TexCoordPrecisionHigh) ? &render_pass_program_highp_ |
2592 : render_pass_program_; | 2578 : &render_pass_program_; |
2593 DCHECK(program); | |
2594 if (!program->initialized()) { | 2579 if (!program->initialized()) { |
2595 TRACE_EVENT0("cc", "GLRenderer::renderPassProgram::initialize"); | 2580 TRACE_EVENT0("cc", "GLRenderer::renderPassProgram::initialize"); |
2596 program->Initialize(context_, is_using_bind_uniform_); | 2581 program->Initialize(output_surface_->context_provider(), precision); |
2597 } | 2582 } |
2598 return program.get(); | 2583 return program; |
2599 } | 2584 } |
2600 | 2585 |
2601 const GLRenderer::RenderPassProgramAA* GLRenderer::GetRenderPassProgramAA( | 2586 const GLRenderer::RenderPassProgramAA* GLRenderer::GetRenderPassProgramAA( |
2602 TexCoordPrecision precision) { | 2587 TexCoordPrecision precision) { |
2603 scoped_ptr<RenderPassProgramAA>& program = | 2588 RenderPassProgramAA* program = |
2604 (precision == TexCoordPrecisionHigh) ? render_pass_program_aa_highp_ | 2589 (precision == TexCoordPrecisionHigh) ? &render_pass_program_aa_highp_ |
2605 : render_pass_program_aa_; | 2590 : &render_pass_program_aa_; |
2606 if (!program) | |
2607 program = | |
2608 make_scoped_ptr(new RenderPassProgramAA(context_, precision)); | |
2609 if (!program->initialized()) { | 2591 if (!program->initialized()) { |
2610 TRACE_EVENT0("cc", "GLRenderer::renderPassProgramAA::initialize"); | 2592 TRACE_EVENT0("cc", "GLRenderer::renderPassProgramAA::initialize"); |
2611 program->Initialize(context_, is_using_bind_uniform_); | 2593 program->Initialize(output_surface_->context_provider(), precision); |
2612 } | 2594 } |
2613 return program.get(); | 2595 return program; |
2614 } | 2596 } |
2615 | 2597 |
2616 const GLRenderer::RenderPassMaskProgram* | 2598 const GLRenderer::RenderPassMaskProgram* |
2617 GLRenderer::GetRenderPassMaskProgram(TexCoordPrecision precision) { | 2599 GLRenderer::GetRenderPassMaskProgram(TexCoordPrecision precision) { |
2618 scoped_ptr<RenderPassMaskProgram>& program = | 2600 RenderPassMaskProgram* program = |
2619 (precision == TexCoordPrecisionHigh) ? render_pass_mask_program_highp_ | 2601 (precision == TexCoordPrecisionHigh) ? &render_pass_mask_program_highp_ |
2620 : render_pass_mask_program_; | 2602 : &render_pass_mask_program_; |
2621 if (!program) | |
2622 program = make_scoped_ptr(new RenderPassMaskProgram(context_, precision)); | |
2623 if (!program->initialized()) { | 2603 if (!program->initialized()) { |
2624 TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgram::initialize"); | 2604 TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgram::initialize"); |
2625 program->Initialize(context_, is_using_bind_uniform_); | 2605 program->Initialize(output_surface_->context_provider(), precision); |
2626 } | 2606 } |
2627 return program.get(); | 2607 return program; |
2628 } | 2608 } |
2629 | 2609 |
2630 const GLRenderer::RenderPassMaskProgramAA* | 2610 const GLRenderer::RenderPassMaskProgramAA* |
2631 GLRenderer::GetRenderPassMaskProgramAA(TexCoordPrecision precision) { | 2611 GLRenderer::GetRenderPassMaskProgramAA(TexCoordPrecision precision) { |
2632 scoped_ptr<RenderPassMaskProgramAA>& program = | 2612 RenderPassMaskProgramAA* program = |
2633 (precision == TexCoordPrecisionHigh) ? render_pass_mask_program_aa_highp_ | 2613 (precision == TexCoordPrecisionHigh) ? &render_pass_mask_program_aa_highp_ |
2634 : render_pass_mask_program_aa_; | 2614 : &render_pass_mask_program_aa_; |
2635 if (!program) | |
2636 program = | |
2637 make_scoped_ptr(new RenderPassMaskProgramAA(context_, precision)); | |
2638 if (!program->initialized()) { | 2615 if (!program->initialized()) { |
2639 TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgramAA::initialize"); | 2616 TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgramAA::initialize"); |
2640 program->Initialize(context_, is_using_bind_uniform_); | 2617 program->Initialize(output_surface_->context_provider(), precision); |
2641 } | 2618 } |
2642 return program.get(); | 2619 return program; |
2643 } | 2620 } |
2644 | 2621 |
2645 const GLRenderer::RenderPassColorMatrixProgram* | 2622 const GLRenderer::RenderPassColorMatrixProgram* |
2646 GLRenderer::GetRenderPassColorMatrixProgram(TexCoordPrecision precision) { | 2623 GLRenderer::GetRenderPassColorMatrixProgram(TexCoordPrecision precision) { |
2647 scoped_ptr<RenderPassColorMatrixProgram>& program = | 2624 RenderPassColorMatrixProgram* program = |
2648 (precision == TexCoordPrecisionHigh) ? | 2625 (precision == TexCoordPrecisionHigh) ? |
2649 render_pass_color_matrix_program_highp_ : | 2626 &render_pass_color_matrix_program_highp_ : |
2650 render_pass_color_matrix_program_; | 2627 &render_pass_color_matrix_program_; |
2651 if (!program) | |
2652 program = make_scoped_ptr( | |
2653 new RenderPassColorMatrixProgram(context_, precision)); | |
2654 if (!program->initialized()) { | 2628 if (!program->initialized()) { |
2655 TRACE_EVENT0("cc", "GLRenderer::renderPassColorMatrixProgram::initialize"); | 2629 TRACE_EVENT0("cc", "GLRenderer::renderPassColorMatrixProgram::initialize"); |
2656 program->Initialize(context_, is_using_bind_uniform_); | 2630 program->Initialize(output_surface_->context_provider(), precision); |
2657 } | 2631 } |
2658 return program.get(); | 2632 return program; |
2659 } | 2633 } |
2660 | 2634 |
2661 const GLRenderer::RenderPassColorMatrixProgramAA* | 2635 const GLRenderer::RenderPassColorMatrixProgramAA* |
2662 GLRenderer::GetRenderPassColorMatrixProgramAA(TexCoordPrecision precision) { | 2636 GLRenderer::GetRenderPassColorMatrixProgramAA(TexCoordPrecision precision) { |
2663 scoped_ptr<RenderPassColorMatrixProgramAA>& program = | 2637 RenderPassColorMatrixProgramAA* program = |
2664 (precision == TexCoordPrecisionHigh) ? | 2638 (precision == TexCoordPrecisionHigh) ? |
2665 render_pass_color_matrix_program_aa_highp_ : | 2639 &render_pass_color_matrix_program_aa_highp_ : |
2666 render_pass_color_matrix_program_aa_; | 2640 &render_pass_color_matrix_program_aa_; |
2667 if (!program) | |
2668 program = make_scoped_ptr( | |
2669 new RenderPassColorMatrixProgramAA(context_, precision)); | |
2670 if (!program->initialized()) { | 2641 if (!program->initialized()) { |
2671 TRACE_EVENT0("cc", | 2642 TRACE_EVENT0("cc", |
2672 "GLRenderer::renderPassColorMatrixProgramAA::initialize"); | 2643 "GLRenderer::renderPassColorMatrixProgramAA::initialize"); |
2673 program->Initialize(context_, is_using_bind_uniform_); | 2644 program->Initialize(output_surface_->context_provider(), precision); |
2674 } | 2645 } |
2675 return program.get(); | 2646 return program; |
2676 } | 2647 } |
2677 | 2648 |
2678 const GLRenderer::RenderPassMaskColorMatrixProgram* | 2649 const GLRenderer::RenderPassMaskColorMatrixProgram* |
2679 GLRenderer::GetRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) { | 2650 GLRenderer::GetRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) { |
2680 scoped_ptr<RenderPassMaskColorMatrixProgram>& program = | 2651 RenderPassMaskColorMatrixProgram* program = |
2681 (precision == TexCoordPrecisionHigh) ? | 2652 (precision == TexCoordPrecisionHigh) ? |
2682 render_pass_mask_color_matrix_program_highp_ : | 2653 &render_pass_mask_color_matrix_program_highp_ : |
2683 render_pass_mask_color_matrix_program_; | 2654 &render_pass_mask_color_matrix_program_; |
2684 if (!program) | |
2685 program = make_scoped_ptr( | |
2686 new RenderPassMaskColorMatrixProgram(context_, precision)); | |
2687 if (!program->initialized()) { | 2655 if (!program->initialized()) { |
2688 TRACE_EVENT0("cc", | 2656 TRACE_EVENT0("cc", |
2689 "GLRenderer::renderPassMaskColorMatrixProgram::initialize"); | 2657 "GLRenderer::renderPassMaskColorMatrixProgram::initialize"); |
2690 program->Initialize(context_, is_using_bind_uniform_); | 2658 program->Initialize(output_surface_->context_provider(), precision); |
2691 } | 2659 } |
2692 return program.get(); | 2660 return program; |
2693 } | 2661 } |
2694 | 2662 |
2695 const GLRenderer::RenderPassMaskColorMatrixProgramAA* | 2663 const GLRenderer::RenderPassMaskColorMatrixProgramAA* |
2696 GLRenderer::GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision) { | 2664 GLRenderer::GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision) { |
2697 scoped_ptr<RenderPassMaskColorMatrixProgramAA>& program = | 2665 RenderPassMaskColorMatrixProgramAA* program = |
2698 (precision == TexCoordPrecisionHigh) ? | 2666 (precision == TexCoordPrecisionHigh) ? |
2699 render_pass_mask_color_matrix_program_aa_highp_ : | 2667 &render_pass_mask_color_matrix_program_aa_highp_ : |
2700 render_pass_mask_color_matrix_program_aa_; | 2668 &render_pass_mask_color_matrix_program_aa_; |
2701 if (!program) | |
2702 program = make_scoped_ptr( | |
2703 new RenderPassMaskColorMatrixProgramAA(context_, precision)); | |
2704 if (!program->initialized()) { | 2669 if (!program->initialized()) { |
2705 TRACE_EVENT0("cc", | 2670 TRACE_EVENT0("cc", |
2706 "GLRenderer::renderPassMaskColorMatrixProgramAA::initialize"); | 2671 "GLRenderer::renderPassMaskColorMatrixProgramAA::initialize"); |
2707 program->Initialize(context_, is_using_bind_uniform_); | 2672 program->Initialize(output_surface_->context_provider(), precision); |
2708 } | 2673 } |
2709 return program.get(); | 2674 return program; |
2710 } | 2675 } |
2711 | 2676 |
2712 const GLRenderer::TileProgram* GLRenderer::GetTileProgram( | 2677 const GLRenderer::TileProgram* GLRenderer::GetTileProgram( |
2713 TexCoordPrecision precision) { | 2678 TexCoordPrecision precision) { |
2714 scoped_ptr<TileProgram>& program = | 2679 TileProgram* program = |
2715 (precision == TexCoordPrecisionHigh) ? tile_program_highp_ | 2680 (precision == TexCoordPrecisionHigh) ? &tile_program_highp_ |
2716 : tile_program_; | 2681 : &tile_program_; |
| 2682 if (!program->initialized()) { |
| 2683 TRACE_EVENT0("cc", "GLRenderer::tileProgram::initialize"); |
| 2684 program->Initialize(output_surface_->context_provider(), precision); |
| 2685 } |
| 2686 return program; |
| 2687 } |
| 2688 |
| 2689 const GLRenderer::TileProgramOpaque* GLRenderer::GetTileProgramOpaque( |
| 2690 TexCoordPrecision precision) { |
| 2691 TileProgramOpaque* program = |
| 2692 (precision == TexCoordPrecisionHigh) ? &tile_program_opaque_highp_ |
| 2693 : &tile_program_opaque_; |
2717 DCHECK(program); | 2694 DCHECK(program); |
2718 if (!program->initialized()) { | 2695 if (!program->initialized()) { |
2719 TRACE_EVENT0("cc", "GLRenderer::tileProgram::initialize"); | |
2720 program->Initialize(context_, is_using_bind_uniform_); | |
2721 } | |
2722 return program.get(); | |
2723 } | |
2724 | |
2725 const GLRenderer::TileProgramOpaque* GLRenderer::GetTileProgramOpaque( | |
2726 TexCoordPrecision precision) { | |
2727 scoped_ptr<TileProgramOpaque>& program = | |
2728 (precision == TexCoordPrecisionHigh) ? tile_program_opaque_highp_ | |
2729 : tile_program_opaque_; | |
2730 DCHECK(program); | |
2731 if (!program->initialized()) { | |
2732 TRACE_EVENT0("cc", "GLRenderer::tileProgramOpaque::initialize"); | 2696 TRACE_EVENT0("cc", "GLRenderer::tileProgramOpaque::initialize"); |
2733 program->Initialize(context_, is_using_bind_uniform_); | 2697 program->Initialize(output_surface_->context_provider(), precision); |
2734 } | 2698 } |
2735 return program.get(); | 2699 return program; |
2736 } | 2700 } |
2737 | 2701 |
2738 const GLRenderer::TileProgramAA* GLRenderer::GetTileProgramAA( | 2702 const GLRenderer::TileProgramAA* GLRenderer::GetTileProgramAA( |
2739 TexCoordPrecision precision) { | 2703 TexCoordPrecision precision) { |
2740 scoped_ptr<TileProgramAA>& program = | 2704 TileProgramAA* program = |
2741 (precision == TexCoordPrecisionHigh) ? tile_program_aa_highp_ | 2705 (precision == TexCoordPrecisionHigh) ? &tile_program_aa_highp_ |
2742 : tile_program_aa_; | 2706 : &tile_program_aa_; |
2743 if (!program) | |
2744 program = make_scoped_ptr(new TileProgramAA(context_, precision)); | |
2745 if (!program->initialized()) { | 2707 if (!program->initialized()) { |
2746 TRACE_EVENT0("cc", "GLRenderer::tileProgramAA::initialize"); | 2708 TRACE_EVENT0("cc", "GLRenderer::tileProgramAA::initialize"); |
2747 program->Initialize(context_, is_using_bind_uniform_); | 2709 program->Initialize(output_surface_->context_provider(), precision); |
2748 } | 2710 } |
2749 return program.get(); | 2711 return program; |
2750 } | 2712 } |
2751 | 2713 |
2752 const GLRenderer::TileProgramSwizzle* GLRenderer::GetTileProgramSwizzle( | 2714 const GLRenderer::TileProgramSwizzle* GLRenderer::GetTileProgramSwizzle( |
2753 TexCoordPrecision precision) { | 2715 TexCoordPrecision precision) { |
2754 scoped_ptr<TileProgramSwizzle>& program = | 2716 TileProgramSwizzle* program = |
2755 (precision == TexCoordPrecisionHigh) ? tile_program_swizzle_highp_ | 2717 (precision == TexCoordPrecisionHigh) ? &tile_program_swizzle_highp_ |
2756 : tile_program_swizzle_; | 2718 : &tile_program_swizzle_; |
2757 if (!program) | |
2758 program = make_scoped_ptr(new TileProgramSwizzle(context_, precision)); | |
2759 if (!program->initialized()) { | 2719 if (!program->initialized()) { |
2760 TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzle::initialize"); | 2720 TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzle::initialize"); |
2761 program->Initialize(context_, is_using_bind_uniform_); | 2721 program->Initialize(output_surface_->context_provider(), precision); |
2762 } | 2722 } |
2763 return program.get(); | 2723 return program; |
2764 } | 2724 } |
2765 | 2725 |
2766 const GLRenderer::TileProgramSwizzleOpaque* | 2726 const GLRenderer::TileProgramSwizzleOpaque* |
2767 GLRenderer::GetTileProgramSwizzleOpaque(TexCoordPrecision precision) { | 2727 GLRenderer::GetTileProgramSwizzleOpaque(TexCoordPrecision precision) { |
2768 scoped_ptr<TileProgramSwizzleOpaque>& program = | 2728 TileProgramSwizzleOpaque* program = |
2769 (precision == TexCoordPrecisionHigh) ? tile_program_swizzle_opaque_highp_ | 2729 (precision == TexCoordPrecisionHigh) ? &tile_program_swizzle_opaque_highp_ |
2770 : tile_program_swizzle_opaque_; | 2730 : &tile_program_swizzle_opaque_; |
2771 if (!program) | |
2772 program = make_scoped_ptr( | |
2773 new TileProgramSwizzleOpaque(context_, precision)); | |
2774 if (!program->initialized()) { | 2731 if (!program->initialized()) { |
2775 TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzleOpaque::initialize"); | 2732 TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzleOpaque::initialize"); |
2776 program->Initialize(context_, is_using_bind_uniform_); | 2733 program->Initialize(output_surface_->context_provider(), precision); |
2777 } | 2734 } |
2778 return program.get(); | 2735 return program; |
2779 } | 2736 } |
2780 | 2737 |
2781 const GLRenderer::TileProgramSwizzleAA* GLRenderer::GetTileProgramSwizzleAA( | 2738 const GLRenderer::TileProgramSwizzleAA* GLRenderer::GetTileProgramSwizzleAA( |
2782 TexCoordPrecision precision) { | 2739 TexCoordPrecision precision) { |
2783 scoped_ptr<TileProgramSwizzleAA>& program = | 2740 TileProgramSwizzleAA* program = |
2784 (precision == TexCoordPrecisionHigh) ? tile_program_swizzle_aa_highp_ | 2741 (precision == TexCoordPrecisionHigh) ? &tile_program_swizzle_aa_highp_ |
2785 : tile_program_swizzle_aa_; | 2742 : &tile_program_swizzle_aa_; |
2786 if (!program) | |
2787 program = make_scoped_ptr(new TileProgramSwizzleAA(context_, precision)); | |
2788 if (!program->initialized()) { | 2743 if (!program->initialized()) { |
2789 TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzleAA::initialize"); | 2744 TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzleAA::initialize"); |
2790 program->Initialize(context_, is_using_bind_uniform_); | 2745 program->Initialize(output_surface_->context_provider(), precision); |
2791 } | 2746 } |
2792 return program.get(); | 2747 return program; |
2793 } | 2748 } |
2794 | 2749 |
2795 const GLRenderer::TextureProgram* GLRenderer::GetTextureProgram( | 2750 const GLRenderer::TextureProgram* GLRenderer::GetTextureProgram( |
2796 TexCoordPrecision precision) { | 2751 TexCoordPrecision precision) { |
2797 scoped_ptr<TextureProgram>& program = | 2752 TextureProgram* program = |
2798 (precision == TexCoordPrecisionHigh) ? texture_program_highp_ | 2753 (precision == TexCoordPrecisionHigh) ? &texture_program_highp_ |
2799 : texture_program_; | 2754 : &texture_program_; |
2800 if (!program) | |
2801 program = make_scoped_ptr(new TextureProgram(context_, precision)); | |
2802 if (!program->initialized()) { | 2755 if (!program->initialized()) { |
2803 TRACE_EVENT0("cc", "GLRenderer::textureProgram::initialize"); | 2756 TRACE_EVENT0("cc", "GLRenderer::textureProgram::initialize"); |
2804 program->Initialize(context_, is_using_bind_uniform_); | 2757 program->Initialize(output_surface_->context_provider(), precision); |
2805 } | 2758 } |
2806 return program.get(); | 2759 return program; |
2807 } | 2760 } |
2808 | 2761 |
2809 const GLRenderer::NonPremultipliedTextureProgram* | 2762 const GLRenderer::NonPremultipliedTextureProgram* |
2810 GLRenderer::GetNonPremultipliedTextureProgram(TexCoordPrecision precision) { | 2763 GLRenderer::GetNonPremultipliedTextureProgram(TexCoordPrecision precision) { |
2811 scoped_ptr<NonPremultipliedTextureProgram>& program = | 2764 NonPremultipliedTextureProgram* program = |
2812 (precision == TexCoordPrecisionHigh) ? | 2765 (precision == TexCoordPrecisionHigh) ? |
2813 nonpremultiplied_texture_program_highp_ : | 2766 &nonpremultiplied_texture_program_highp_ : |
2814 nonpremultiplied_texture_program_; | 2767 &nonpremultiplied_texture_program_; |
2815 if (!program) { | |
2816 program = make_scoped_ptr( | |
2817 new NonPremultipliedTextureProgram(context_, precision)); | |
2818 } | |
2819 if (!program->initialized()) { | 2768 if (!program->initialized()) { |
2820 TRACE_EVENT0("cc", | 2769 TRACE_EVENT0("cc", |
2821 "GLRenderer::NonPremultipliedTextureProgram::Initialize"); | 2770 "GLRenderer::NonPremultipliedTextureProgram::Initialize"); |
2822 program->Initialize(context_, is_using_bind_uniform_); | 2771 program->Initialize(output_surface_->context_provider(), precision); |
2823 } | 2772 } |
2824 return program.get(); | 2773 return program; |
2825 } | 2774 } |
2826 | 2775 |
2827 const GLRenderer::TextureBackgroundProgram* | 2776 const GLRenderer::TextureBackgroundProgram* |
2828 GLRenderer::GetTextureBackgroundProgram(TexCoordPrecision precision) { | 2777 GLRenderer::GetTextureBackgroundProgram(TexCoordPrecision precision) { |
2829 scoped_ptr<TextureBackgroundProgram>& program = | 2778 TextureBackgroundProgram* program = |
2830 (precision == TexCoordPrecisionHigh) ? texture_background_program_highp_ | 2779 (precision == TexCoordPrecisionHigh) ? &texture_background_program_highp_ |
2831 : texture_background_program_; | 2780 : &texture_background_program_; |
2832 if (!program) { | |
2833 program = make_scoped_ptr( | |
2834 new TextureBackgroundProgram(context_, precision)); | |
2835 } | |
2836 if (!program->initialized()) { | 2781 if (!program->initialized()) { |
2837 TRACE_EVENT0("cc", "GLRenderer::textureProgram::initialize"); | 2782 TRACE_EVENT0("cc", "GLRenderer::textureProgram::initialize"); |
2838 program->Initialize(context_, is_using_bind_uniform_); | 2783 program->Initialize(output_surface_->context_provider(), precision); |
2839 } | 2784 } |
2840 return program.get(); | 2785 return program; |
2841 } | 2786 } |
2842 | 2787 |
2843 const GLRenderer::NonPremultipliedTextureBackgroundProgram* | 2788 const GLRenderer::NonPremultipliedTextureBackgroundProgram* |
2844 GLRenderer::GetNonPremultipliedTextureBackgroundProgram( | 2789 GLRenderer::GetNonPremultipliedTextureBackgroundProgram( |
2845 TexCoordPrecision precision) { | 2790 TexCoordPrecision precision) { |
2846 scoped_ptr<NonPremultipliedTextureBackgroundProgram>& program = | 2791 NonPremultipliedTextureBackgroundProgram* program = |
2847 (precision == TexCoordPrecisionHigh) ? | 2792 (precision == TexCoordPrecisionHigh) ? |
2848 nonpremultiplied_texture_background_program_highp_ : | 2793 &nonpremultiplied_texture_background_program_highp_ : |
2849 nonpremultiplied_texture_background_program_; | 2794 &nonpremultiplied_texture_background_program_; |
2850 if (!program) { | |
2851 program = make_scoped_ptr( | |
2852 new NonPremultipliedTextureBackgroundProgram(context_, precision)); | |
2853 } | |
2854 if (!program->initialized()) { | 2795 if (!program->initialized()) { |
2855 TRACE_EVENT0("cc", | 2796 TRACE_EVENT0("cc", |
2856 "GLRenderer::NonPremultipliedTextureProgram::Initialize"); | 2797 "GLRenderer::NonPremultipliedTextureProgram::Initialize"); |
2857 program->Initialize(context_, is_using_bind_uniform_); | 2798 program->Initialize(output_surface_->context_provider(), precision); |
2858 } | 2799 } |
2859 return program.get(); | 2800 return program; |
2860 } | 2801 } |
2861 | 2802 |
2862 const GLRenderer::TextureIOSurfaceProgram* | 2803 const GLRenderer::TextureIOSurfaceProgram* |
2863 GLRenderer::GetTextureIOSurfaceProgram(TexCoordPrecision precision) { | 2804 GLRenderer::GetTextureIOSurfaceProgram(TexCoordPrecision precision) { |
2864 scoped_ptr<TextureIOSurfaceProgram>& program = | 2805 TextureIOSurfaceProgram* program = |
2865 (precision == TexCoordPrecisionHigh) ? texture_io_surface_program_highp_ | 2806 (precision == TexCoordPrecisionHigh) ? &texture_io_surface_program_highp_ |
2866 : texture_io_surface_program_; | 2807 : &texture_io_surface_program_; |
2867 if (!program) | |
2868 program = | |
2869 make_scoped_ptr(new TextureIOSurfaceProgram(context_, precision)); | |
2870 if (!program->initialized()) { | 2808 if (!program->initialized()) { |
2871 TRACE_EVENT0("cc", "GLRenderer::textureIOSurfaceProgram::initialize"); | 2809 TRACE_EVENT0("cc", "GLRenderer::textureIOSurfaceProgram::initialize"); |
2872 program->Initialize(context_, is_using_bind_uniform_); | 2810 program->Initialize(output_surface_->context_provider(), precision); |
2873 } | 2811 } |
2874 return program.get(); | 2812 return program; |
2875 } | 2813 } |
2876 | 2814 |
2877 const GLRenderer::VideoYUVProgram* GLRenderer::GetVideoYUVProgram( | 2815 const GLRenderer::VideoYUVProgram* GLRenderer::GetVideoYUVProgram( |
2878 TexCoordPrecision precision) { | 2816 TexCoordPrecision precision) { |
2879 scoped_ptr<VideoYUVProgram>& program = | 2817 VideoYUVProgram* program = |
2880 (precision == TexCoordPrecisionHigh) ? video_yuv_program_highp_ | 2818 (precision == TexCoordPrecisionHigh) ? &video_yuv_program_highp_ |
2881 : video_yuv_program_; | 2819 : &video_yuv_program_; |
2882 if (!program) | |
2883 program = make_scoped_ptr(new VideoYUVProgram(context_, precision)); | |
2884 if (!program->initialized()) { | 2820 if (!program->initialized()) { |
2885 TRACE_EVENT0("cc", "GLRenderer::videoYUVProgram::initialize"); | 2821 TRACE_EVENT0("cc", "GLRenderer::videoYUVProgram::initialize"); |
2886 program->Initialize(context_, is_using_bind_uniform_); | 2822 program->Initialize(output_surface_->context_provider(), precision); |
2887 } | 2823 } |
2888 return program.get(); | 2824 return program; |
2889 } | 2825 } |
2890 | 2826 |
2891 const GLRenderer::VideoYUVAProgram* GLRenderer::GetVideoYUVAProgram( | 2827 const GLRenderer::VideoYUVAProgram* GLRenderer::GetVideoYUVAProgram( |
2892 TexCoordPrecision precision) { | 2828 TexCoordPrecision precision) { |
2893 scoped_ptr<VideoYUVAProgram>& program = | 2829 VideoYUVAProgram* program = |
2894 (precision == TexCoordPrecisionHigh) ? video_yuva_program_highp_ | 2830 (precision == TexCoordPrecisionHigh) ? &video_yuva_program_highp_ |
2895 : video_yuva_program_; | 2831 : &video_yuva_program_; |
2896 if (!program) | |
2897 program = make_scoped_ptr(new VideoYUVAProgram(context_, precision)); | |
2898 if (!program->initialized()) { | 2832 if (!program->initialized()) { |
2899 TRACE_EVENT0("cc", "GLRenderer::videoYUVAProgram::initialize"); | 2833 TRACE_EVENT0("cc", "GLRenderer::videoYUVAProgram::initialize"); |
2900 program->Initialize(context_, is_using_bind_uniform_); | 2834 program->Initialize(output_surface_->context_provider(), precision); |
2901 } | 2835 } |
2902 return program.get(); | 2836 return program; |
2903 } | 2837 } |
2904 | 2838 |
2905 const GLRenderer::VideoStreamTextureProgram* | 2839 const GLRenderer::VideoStreamTextureProgram* |
2906 GLRenderer::GetVideoStreamTextureProgram(TexCoordPrecision precision) { | 2840 GLRenderer::GetVideoStreamTextureProgram(TexCoordPrecision precision) { |
2907 if (!Capabilities().using_egl_image) | 2841 if (!Capabilities().using_egl_image) |
2908 return NULL; | 2842 return NULL; |
2909 scoped_ptr<VideoStreamTextureProgram>& program = | 2843 VideoStreamTextureProgram* program = (precision == TexCoordPrecisionHigh) |
2910 (precision == TexCoordPrecisionHigh) ? video_stream_texture_program_highp_ | 2844 ? &video_stream_texture_program_highp_ |
2911 : video_stream_texture_program_; | 2845 : &video_stream_texture_program_; |
2912 if (!program) | |
2913 program = | |
2914 make_scoped_ptr(new VideoStreamTextureProgram(context_, precision)); | |
2915 if (!program->initialized()) { | 2846 if (!program->initialized()) { |
2916 TRACE_EVENT0("cc", "GLRenderer::streamTextureProgram::initialize"); | 2847 TRACE_EVENT0("cc", "GLRenderer::streamTextureProgram::initialize"); |
2917 program->Initialize(context_, is_using_bind_uniform_); | 2848 program->Initialize(output_surface_->context_provider(), precision); |
2918 } | 2849 } |
2919 return program.get(); | 2850 return program; |
2920 } | 2851 } |
2921 | 2852 |
2922 void GLRenderer::CleanupSharedObjects() { | 2853 void GLRenderer::CleanupSharedObjects() { |
2923 MakeContextCurrent(); | 2854 MakeContextCurrent(); |
2924 | 2855 |
2925 shared_geometry_.reset(); | 2856 shared_geometry_.reset(); |
2926 | 2857 |
2927 if (tile_program_) | 2858 tile_program_.Cleanup(context_); |
2928 tile_program_->Cleanup(context_); | 2859 tile_program_opaque_.Cleanup(context_); |
2929 if (tile_program_opaque_) | 2860 tile_program_swizzle_.Cleanup(context_); |
2930 tile_program_opaque_->Cleanup(context_); | 2861 tile_program_swizzle_opaque_.Cleanup(context_); |
2931 if (tile_program_swizzle_) | 2862 tile_program_aa_.Cleanup(context_); |
2932 tile_program_swizzle_->Cleanup(context_); | 2863 tile_program_swizzle_aa_.Cleanup(context_); |
2933 if (tile_program_swizzle_opaque_) | 2864 tile_checkerboard_program_.Cleanup(context_); |
2934 tile_program_swizzle_opaque_->Cleanup(context_); | |
2935 if (tile_program_aa_) | |
2936 tile_program_aa_->Cleanup(context_); | |
2937 if (tile_program_swizzle_aa_) | |
2938 tile_program_swizzle_aa_->Cleanup(context_); | |
2939 if (tile_checkerboard_program_) | |
2940 tile_checkerboard_program_->Cleanup(context_); | |
2941 | 2865 |
2942 if (tile_program_highp_) | 2866 tile_program_highp_.Cleanup(context_); |
2943 tile_program_highp_->Cleanup(context_); | 2867 tile_program_opaque_highp_.Cleanup(context_); |
2944 if (tile_program_opaque_highp_) | 2868 tile_program_swizzle_highp_.Cleanup(context_); |
2945 tile_program_opaque_highp_->Cleanup(context_); | 2869 tile_program_swizzle_opaque_highp_.Cleanup(context_); |
2946 if (tile_program_swizzle_highp_) | 2870 tile_program_aa_highp_.Cleanup(context_); |
2947 tile_program_swizzle_highp_->Cleanup(context_); | 2871 tile_program_swizzle_aa_highp_.Cleanup(context_); |
2948 if (tile_program_swizzle_opaque_highp_) | |
2949 tile_program_swizzle_opaque_highp_->Cleanup(context_); | |
2950 if (tile_program_aa_highp_) | |
2951 tile_program_aa_highp_->Cleanup(context_); | |
2952 if (tile_program_swizzle_aa_highp_) | |
2953 tile_program_swizzle_aa_highp_->Cleanup(context_); | |
2954 | 2872 |
2955 if (render_pass_mask_program_) | 2873 render_pass_mask_program_.Cleanup(context_); |
2956 render_pass_mask_program_->Cleanup(context_); | 2874 render_pass_program_.Cleanup(context_); |
2957 if (render_pass_program_) | 2875 render_pass_mask_program_aa_.Cleanup(context_); |
2958 render_pass_program_->Cleanup(context_); | 2876 render_pass_program_aa_.Cleanup(context_); |
2959 if (render_pass_mask_program_aa_) | 2877 render_pass_color_matrix_program_.Cleanup(context_); |
2960 render_pass_mask_program_aa_->Cleanup(context_); | 2878 render_pass_mask_color_matrix_program_aa_.Cleanup(context_); |
2961 if (render_pass_program_aa_) | 2879 render_pass_color_matrix_program_aa_.Cleanup(context_); |
2962 render_pass_program_aa_->Cleanup(context_); | 2880 render_pass_mask_color_matrix_program_.Cleanup(context_); |
2963 if (render_pass_color_matrix_program_) | |
2964 render_pass_color_matrix_program_->Cleanup(context_); | |
2965 if (render_pass_mask_color_matrix_program_aa_) | |
2966 render_pass_mask_color_matrix_program_aa_->Cleanup(context_); | |
2967 if (render_pass_color_matrix_program_aa_) | |
2968 render_pass_color_matrix_program_aa_->Cleanup(context_); | |
2969 if (render_pass_mask_color_matrix_program_) | |
2970 render_pass_mask_color_matrix_program_->Cleanup(context_); | |
2971 | 2881 |
2972 if (render_pass_mask_program_highp_) | 2882 render_pass_mask_program_highp_.Cleanup(context_); |
2973 render_pass_mask_program_highp_->Cleanup(context_); | 2883 render_pass_program_highp_.Cleanup(context_); |
2974 if (render_pass_program_highp_) | 2884 render_pass_mask_program_aa_highp_.Cleanup(context_); |
2975 render_pass_program_highp_->Cleanup(context_); | 2885 render_pass_program_aa_highp_.Cleanup(context_); |
2976 if (render_pass_mask_program_aa_highp_) | 2886 render_pass_color_matrix_program_highp_.Cleanup(context_); |
2977 render_pass_mask_program_aa_highp_->Cleanup(context_); | 2887 render_pass_mask_color_matrix_program_aa_highp_.Cleanup(context_); |
2978 if (render_pass_program_aa_highp_) | 2888 render_pass_color_matrix_program_aa_highp_.Cleanup(context_); |
2979 render_pass_program_aa_highp_->Cleanup(context_); | 2889 render_pass_mask_color_matrix_program_highp_.Cleanup(context_); |
2980 if (render_pass_color_matrix_program_highp_) | |
2981 render_pass_color_matrix_program_highp_->Cleanup(context_); | |
2982 if (render_pass_mask_color_matrix_program_aa_highp_) | |
2983 render_pass_mask_color_matrix_program_aa_highp_->Cleanup(context_); | |
2984 if (render_pass_color_matrix_program_aa_highp_) | |
2985 render_pass_color_matrix_program_aa_highp_->Cleanup(context_); | |
2986 if (render_pass_mask_color_matrix_program_highp_) | |
2987 render_pass_mask_color_matrix_program_highp_->Cleanup(context_); | |
2988 | 2890 |
2989 if (texture_program_) | 2891 texture_program_.Cleanup(context_); |
2990 texture_program_->Cleanup(context_); | 2892 nonpremultiplied_texture_program_.Cleanup(context_); |
2991 if (nonpremultiplied_texture_program_) | 2893 texture_background_program_.Cleanup(context_); |
2992 nonpremultiplied_texture_program_->Cleanup(context_); | 2894 nonpremultiplied_texture_background_program_.Cleanup(context_); |
2993 if (texture_background_program_) | 2895 texture_io_surface_program_.Cleanup(context_); |
2994 texture_background_program_->Cleanup(context_); | |
2995 if (nonpremultiplied_texture_background_program_) | |
2996 nonpremultiplied_texture_background_program_->Cleanup(context_); | |
2997 if (texture_io_surface_program_) | |
2998 texture_io_surface_program_->Cleanup(context_); | |
2999 | 2896 |
3000 if (texture_program_highp_) | 2897 texture_program_highp_.Cleanup(context_); |
3001 texture_program_highp_->Cleanup(context_); | 2898 nonpremultiplied_texture_program_highp_.Cleanup(context_); |
3002 if (nonpremultiplied_texture_program_highp_) | 2899 texture_background_program_highp_.Cleanup(context_); |
3003 nonpremultiplied_texture_program_highp_->Cleanup(context_); | 2900 nonpremultiplied_texture_background_program_highp_.Cleanup(context_); |
3004 if (texture_background_program_highp_) | 2901 texture_io_surface_program_highp_.Cleanup(context_); |
3005 texture_background_program_highp_->Cleanup(context_); | |
3006 if (nonpremultiplied_texture_background_program_highp_) | |
3007 nonpremultiplied_texture_background_program_highp_->Cleanup(context_); | |
3008 if (texture_io_surface_program_highp_) | |
3009 texture_io_surface_program_highp_->Cleanup(context_); | |
3010 | 2902 |
3011 if (video_yuv_program_) | 2903 video_yuv_program_.Cleanup(context_); |
3012 video_yuv_program_->Cleanup(context_); | 2904 video_yuva_program_.Cleanup(context_); |
3013 if (video_yuva_program_) | 2905 video_stream_texture_program_.Cleanup(context_); |
3014 video_yuva_program_->Cleanup(context_); | |
3015 if (video_stream_texture_program_) | |
3016 video_stream_texture_program_->Cleanup(context_); | |
3017 | 2906 |
3018 if (video_yuv_program_highp_) | 2907 video_yuv_program_highp_.Cleanup(context_); |
3019 video_yuv_program_highp_->Cleanup(context_); | 2908 video_yuva_program_highp_.Cleanup(context_); |
3020 if (video_yuva_program_highp_) | 2909 video_stream_texture_program_highp_.Cleanup(context_); |
3021 video_yuva_program_highp_->Cleanup(context_); | |
3022 if (video_stream_texture_program_highp_) | |
3023 video_stream_texture_program_highp_->Cleanup(context_); | |
3024 | 2910 |
3025 if (debug_border_program_) | 2911 debug_border_program_.Cleanup(context_); |
3026 debug_border_program_->Cleanup(context_); | 2912 solid_color_program_.Cleanup(context_); |
3027 if (solid_color_program_) | 2913 solid_color_program_aa_.Cleanup(context_); |
3028 solid_color_program_->Cleanup(context_); | |
3029 if (solid_color_program_aa_) | |
3030 solid_color_program_aa_->Cleanup(context_); | |
3031 | 2914 |
3032 if (offscreen_framebuffer_id_) | 2915 if (offscreen_framebuffer_id_) |
3033 GLC(context_, context_->deleteFramebuffer(offscreen_framebuffer_id_)); | 2916 GLC(context_, context_->deleteFramebuffer(offscreen_framebuffer_id_)); |
3034 | 2917 |
3035 if (on_demand_tile_raster_resource_id_) | 2918 if (on_demand_tile_raster_resource_id_) |
3036 resource_provider_->DeleteResource(on_demand_tile_raster_resource_id_); | 2919 resource_provider_->DeleteResource(on_demand_tile_raster_resource_id_); |
3037 | 2920 |
3038 ReleaseRenderPassTextures(); | 2921 ReleaseRenderPassTextures(); |
3039 } | 2922 } |
3040 | 2923 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3078 GLC(context_, context_->disable(GL_SCISSOR_TEST)); | 2961 GLC(context_, context_->disable(GL_SCISSOR_TEST)); |
3079 } | 2962 } |
3080 | 2963 |
3081 bool GLRenderer::CanUseSkiaGPUBackend() const { | 2964 bool GLRenderer::CanUseSkiaGPUBackend() const { |
3082 // The Skia GPU backend requires a stencil buffer. See ReinitializeGrCanvas | 2965 // The Skia GPU backend requires a stencil buffer. See ReinitializeGrCanvas |
3083 // implementation. | 2966 // implementation. |
3084 return gr_context_ && context_->getContextAttributes().stencil; | 2967 return gr_context_ && context_->getContextAttributes().stencil; |
3085 } | 2968 } |
3086 | 2969 |
3087 bool GLRenderer::IsContextLost() { | 2970 bool GLRenderer::IsContextLost() { |
3088 return (context_->getGraphicsResetStatusARB() != GL_NO_ERROR); | 2971 return output_surface_->context_provider()->IsContextLost(); |
3089 } | 2972 } |
3090 | 2973 |
3091 } // namespace cc | 2974 } // namespace cc |
OLD | NEW |