Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3225)

Unified Diff: cc/output/gl_renderer.cc

Issue 2613903002: The great shader refactor: Move all programs to a common cache (Closed)
Patch Set: Incorporate review feedback Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/gl_renderer.cc
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index 506681e6a43b0d522553df0231f9f84231d43c08..22261146b2a56c8584c84438a7b01d3f421b2378 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -3286,67 +3286,29 @@ void GLRenderer::PrepareGeometry(BoundGeometry binding) {
}
const GLRenderer::DebugBorderProgram* GLRenderer::GetDebugBorderProgram() {
- if (!debug_border_program_.initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::debugBorderProgram::initialize");
- debug_border_program_.Initialize(output_surface_->context_provider(),
- ProgramKey::DebugBorder());
- }
- return &debug_border_program_;
+ return GetProgram(ProgramKey::DebugBorder());
}
const GLRenderer::SolidColorProgram* GLRenderer::GetSolidColorProgram() {
- if (!solid_color_program_.initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::solidColorProgram::initialize");
- solid_color_program_.Initialize(output_surface_->context_provider(),
- ProgramKey::SolidColor(NO_AA));
- }
- return &solid_color_program_;
+ return GetProgram(ProgramKey::SolidColor(NO_AA));
}
const GLRenderer::SolidColorProgramAA* GLRenderer::GetSolidColorProgramAA() {
- if (!solid_color_program_aa_.initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::solidColorProgramAA::initialize");
- solid_color_program_aa_.Initialize(output_surface_->context_provider(),
- ProgramKey::SolidColor(USE_AA));
- }
- return &solid_color_program_aa_;
+ return GetProgram(ProgramKey::SolidColor(USE_AA));
}
const GLRenderer::RenderPassProgram* GLRenderer::GetRenderPassProgram(
TexCoordPrecision precision,
BlendMode blend_mode) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassProgram* program = &render_pass_program_[precision][blend_mode];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::renderPassProgram::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, SAMPLER_TYPE_2D, blend_mode, NO_AA,
- NO_MASK, false, false));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(
+ precision, SAMPLER_TYPE_2D, blend_mode, NO_AA, NO_MASK, false, false));
}
const GLRenderer::RenderPassProgramAA* GLRenderer::GetRenderPassProgramAA(
TexCoordPrecision precision,
BlendMode blend_mode) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassProgramAA* program =
- &render_pass_program_aa_[precision][blend_mode];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::renderPassProgramAA::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, SAMPLER_TYPE_2D, blend_mode, USE_AA,
- NO_MASK, false, false));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(
+ precision, SAMPLER_TYPE_2D, blend_mode, USE_AA, NO_MASK, false, false));
}
const GLRenderer::RenderPassMaskProgram* GLRenderer::GetRenderPassMaskProgram(
@@ -3354,23 +3316,9 @@ const GLRenderer::RenderPassMaskProgram* GLRenderer::GetRenderPassMaskProgram(
SamplerType sampler,
BlendMode blend_mode,
bool mask_for_background) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassMaskProgram* program =
- &render_pass_mask_program_[precision][sampler][blend_mode]
- [mask_for_background ? HAS_MASK : NO_MASK];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgram::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, sampler, blend_mode, NO_AA, HAS_MASK,
- mask_for_background, false));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(precision, sampler, blend_mode,
+ NO_AA, HAS_MASK, mask_for_background,
+ false));
}
const GLRenderer::RenderPassMaskProgramAA*
@@ -3378,62 +3326,23 @@ GLRenderer::GetRenderPassMaskProgramAA(TexCoordPrecision precision,
SamplerType sampler,
BlendMode blend_mode,
bool mask_for_background) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassMaskProgramAA* program =
- &render_pass_mask_program_aa_[precision][sampler][blend_mode]
- [mask_for_background ? HAS_MASK : NO_MASK];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgramAA::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, sampler, blend_mode, USE_AA, HAS_MASK,
- mask_for_background, false));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(precision, sampler, blend_mode,
+ USE_AA, HAS_MASK,
+ mask_for_background, false));
}
const GLRenderer::RenderPassColorMatrixProgram*
GLRenderer::GetRenderPassColorMatrixProgram(TexCoordPrecision precision,
BlendMode blend_mode) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassColorMatrixProgram* program =
- &render_pass_color_matrix_program_[precision][blend_mode];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::renderPassColorMatrixProgram::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, SAMPLER_TYPE_2D, blend_mode, NO_AA,
- NO_MASK, false, true));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(
+ precision, SAMPLER_TYPE_2D, blend_mode, NO_AA, NO_MASK, false, true));
}
const GLRenderer::RenderPassColorMatrixProgramAA*
GLRenderer::GetRenderPassColorMatrixProgramAA(TexCoordPrecision precision,
BlendMode blend_mode) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassColorMatrixProgramAA* program =
- &render_pass_color_matrix_program_aa_[precision][blend_mode];
- if (!program->initialized()) {
- TRACE_EVENT0("cc",
- "GLRenderer::renderPassColorMatrixProgramAA::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, SAMPLER_TYPE_2D, blend_mode, USE_AA,
- NO_MASK, false, true));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(
+ precision, SAMPLER_TYPE_2D, blend_mode, USE_AA, NO_MASK, false, true));
}
const GLRenderer::RenderPassMaskColorMatrixProgram*
@@ -3442,24 +3351,9 @@ GLRenderer::GetRenderPassMaskColorMatrixProgram(
SamplerType sampler,
BlendMode blend_mode,
bool mask_for_background) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassMaskColorMatrixProgram* program =
- &render_pass_mask_color_matrix_program_[precision][sampler][blend_mode]
- [mask_for_background ? HAS_MASK : NO_MASK];
- if (!program->initialized()) {
- TRACE_EVENT0("cc",
- "GLRenderer::renderPassMaskColorMatrixProgram::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, sampler, blend_mode, NO_AA, HAS_MASK,
- mask_for_background, true));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(precision, sampler, blend_mode,
+ NO_AA, HAS_MASK, mask_for_background,
+ true));
}
const GLRenderer::RenderPassMaskColorMatrixProgramAA*
@@ -3468,201 +3362,80 @@ GLRenderer::GetRenderPassMaskColorMatrixProgramAA(
SamplerType sampler,
BlendMode blend_mode,
bool mask_for_background) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- DCHECK_GE(blend_mode, 0);
- DCHECK_LE(blend_mode, LAST_BLEND_MODE);
- RenderPassMaskColorMatrixProgramAA* program =
- &render_pass_mask_color_matrix_program_aa_[precision][sampler][blend_mode]
- [mask_for_background ? HAS_MASK : NO_MASK];
- if (!program->initialized()) {
- TRACE_EVENT0("cc",
- "GLRenderer::renderPassMaskColorMatrixProgramAA::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::RenderPass(precision, sampler, blend_mode, USE_AA, HAS_MASK,
- mask_for_background, true));
- }
- return program;
+ return GetProgram(ProgramKey::RenderPass(precision, sampler, blend_mode,
+ USE_AA, HAS_MASK,
+ mask_for_background, true));
}
const GLRenderer::TileProgram* GLRenderer::GetTileProgram(
TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TileProgram* program = &tile_program_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::tileProgram::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Tile(precision, sampler, NO_AA, NO_SWIZZLE, false));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Tile(precision, sampler, NO_AA, NO_SWIZZLE, false));
}
const GLRenderer::TileProgramOpaque* GLRenderer::GetTileProgramOpaque(
TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TileProgramOpaque* program = &tile_program_opaque_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::tileProgramOpaque::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Tile(precision, sampler, NO_AA, NO_SWIZZLE, true));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Tile(precision, sampler, NO_AA, NO_SWIZZLE, true));
}
const GLRenderer::TileProgramAA* GLRenderer::GetTileProgramAA(
TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TileProgramAA* program = &tile_program_aa_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::tileProgramAA::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Tile(precision, sampler, USE_AA, NO_SWIZZLE, false));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Tile(precision, sampler, USE_AA, NO_SWIZZLE, false));
}
const GLRenderer::TileProgramSwizzle* GLRenderer::GetTileProgramSwizzle(
TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TileProgramSwizzle* program = &tile_program_swizzle_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzle::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Tile(precision, sampler, NO_AA, DO_SWIZZLE, false));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Tile(precision, sampler, NO_AA, DO_SWIZZLE, false));
}
const GLRenderer::TileProgramSwizzleOpaque*
GLRenderer::GetTileProgramSwizzleOpaque(TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TileProgramSwizzleOpaque* program =
- &tile_program_swizzle_opaque_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzleOpaque::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Tile(precision, sampler, NO_AA, DO_SWIZZLE, true));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Tile(precision, sampler, NO_AA, DO_SWIZZLE, true));
}
const GLRenderer::TileProgramSwizzleAA* GLRenderer::GetTileProgramSwizzleAA(
TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TileProgramSwizzleAA* program = &tile_program_swizzle_aa_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::tileProgramSwizzleAA::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Tile(precision, sampler, USE_AA, DO_SWIZZLE, false));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Tile(precision, sampler, USE_AA, DO_SWIZZLE, false));
}
const GLRenderer::TextureProgram* GLRenderer::GetTextureProgram(
TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TextureProgram* program = &texture_program_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::textureProgram::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Texture(precision, sampler, PREMULTIPLIED_ALPHA, false));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Texture(precision, sampler, PREMULTIPLIED_ALPHA, false));
}
const GLRenderer::NonPremultipliedTextureProgram*
GLRenderer::GetNonPremultipliedTextureProgram(TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- NonPremultipliedTextureProgram* program =
- &nonpremultiplied_texture_program_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc",
- "GLRenderer::NonPremultipliedTextureProgram::Initialize");
- program->Initialize(output_surface_->context_provider(),
- ProgramKey::Texture(precision, sampler,
- NON_PREMULTIPLIED_ALPHA, false));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Texture(precision, sampler, NON_PREMULTIPLIED_ALPHA, false));
}
const GLRenderer::TextureBackgroundProgram*
GLRenderer::GetTextureBackgroundProgram(TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- TextureBackgroundProgram* program =
- &texture_background_program_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::textureProgram::initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Texture(precision, sampler, PREMULTIPLIED_ALPHA, true));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Texture(precision, sampler, PREMULTIPLIED_ALPHA, true));
}
const GLRenderer::NonPremultipliedTextureBackgroundProgram*
GLRenderer::GetNonPremultipliedTextureBackgroundProgram(
TexCoordPrecision precision,
SamplerType sampler) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- DCHECK_GE(sampler, 0);
- DCHECK_LE(sampler, LAST_SAMPLER_TYPE);
- NonPremultipliedTextureBackgroundProgram* program =
- &nonpremultiplied_texture_background_program_[precision][sampler];
- if (!program->initialized()) {
- TRACE_EVENT0("cc",
- "GLRenderer::NonPremultipliedTextureProgram::Initialize");
- program->Initialize(
- output_surface_->context_provider(),
- ProgramKey::Texture(precision, sampler, NON_PREMULTIPLIED_ALPHA, true));
- }
- return program;
+ return GetProgram(
+ ProgramKey::Texture(precision, sampler, NON_PREMULTIPLIED_ALPHA, true));
}
const GLRenderer::VideoYUVProgram* GLRenderer::GetVideoYUVProgram(
@@ -3689,16 +3462,24 @@ const GLRenderer::VideoYUVProgram* GLRenderer::GetVideoYUVProgram(
const GLRenderer::VideoStreamTextureProgram*
GLRenderer::GetVideoStreamTextureProgram(TexCoordPrecision precision) {
- DCHECK_GE(precision, 0);
- DCHECK_LE(precision, LAST_TEX_COORD_PRECISION);
- VideoStreamTextureProgram* program =
- &video_stream_texture_program_[precision];
- if (!program->initialized()) {
- TRACE_EVENT0("cc", "GLRenderer::streamTextureProgram::initialize");
- program->Initialize(output_surface_->context_provider(),
- ProgramKey::VideoStream(precision));
+ return GetProgram(ProgramKey::VideoStream(precision));
+}
+
+const Program* GLRenderer::GetProgram(const ProgramKey& desc) {
+ std::unique_ptr<Program>& program = program_cache_[desc];
+ if (!program) {
+ program.reset(new Program);
+ program->Initialize(output_surface_->context_provider(), desc);
}
- return program;
+ return program.get();
+}
+
+const Program* GLRenderer::GetProgramIfInitialized(
+ const ProgramKey& desc) const {
+ const auto found = program_cache_.find(desc);
+ if (found == program_cache_.end())
+ return nullptr;
+ return found->second.get();
}
void GLRenderer::CleanupSharedObjects() {
@@ -3706,22 +3487,6 @@ void GLRenderer::CleanupSharedObjects() {
for (int i = 0; i <= LAST_TEX_COORD_PRECISION; ++i) {
for (int j = 0; j <= LAST_SAMPLER_TYPE; ++j) {
- tile_program_[i][j].Cleanup(gl_);
- tile_program_opaque_[i][j].Cleanup(gl_);
- tile_program_swizzle_[i][j].Cleanup(gl_);
- tile_program_swizzle_opaque_[i][j].Cleanup(gl_);
- tile_program_aa_[i][j].Cleanup(gl_);
- tile_program_swizzle_aa_[i][j].Cleanup(gl_);
-
- for (int k = 0; k <= LAST_BLEND_MODE; k++) {
- for (int l = 0; l <= LAST_MASK_VALUE; ++l) {
- render_pass_mask_program_[i][j][k][l].Cleanup(gl_);
- render_pass_mask_program_aa_[i][j][k][l].Cleanup(gl_);
- render_pass_mask_color_matrix_program_aa_[i][j][k][l].Cleanup(gl_);
- render_pass_mask_color_matrix_program_[i][j][k][l].Cleanup(gl_);
- }
- }
-
for (int k = 0; k < 2; k++) {
for (int l = 0; l < 2; l++) {
for (int m = 0; m < 2; m++) {
@@ -3730,26 +3495,10 @@ void GLRenderer::CleanupSharedObjects() {
}
}
}
- for (int j = 0; j <= LAST_BLEND_MODE; j++) {
- render_pass_program_[i][j].Cleanup(gl_);
- render_pass_program_aa_[i][j].Cleanup(gl_);
- render_pass_color_matrix_program_[i][j].Cleanup(gl_);
- render_pass_color_matrix_program_aa_[i][j].Cleanup(gl_);
- }
-
- for (int j = 0; j <= LAST_SAMPLER_TYPE; ++j) {
- texture_program_[i][j].Cleanup(gl_);
- nonpremultiplied_texture_program_[i][j].Cleanup(gl_);
- texture_background_program_[i][j].Cleanup(gl_);
- nonpremultiplied_texture_background_program_[i][j].Cleanup(gl_);
- }
-
- video_stream_texture_program_[i].Cleanup(gl_);
}
-
- debug_border_program_.Cleanup(gl_);
- solid_color_program_.Cleanup(gl_);
- solid_color_program_aa_.Cleanup(gl_);
+ for (auto& iter : program_cache_)
+ iter.second->Cleanup(gl_);
+ program_cache_.clear();
if (offscreen_framebuffer_id_)
gl_->DeleteFramebuffers(1, &offscreen_framebuffer_id_);
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698