From: Steinar H. Gunderson Date: Wed, 15 Nov 2017 23:34:47 +0000 (+0100) Subject: Fix deletion of compute shaders. X-Git-Tag: 1.6.0~67 X-Git-Url: https://git.sesse.net/?p=movit;a=commitdiff_plain;h=6c06dc4215286d0998f50ac4cebfbf0531b5aa19;ds=sidebyside Fix deletion of compute shaders. --- diff --git a/resource_pool.cpp b/resource_pool.cpp index e6f9bb6..2cf470f 100644 --- a/resource_pool.cpp +++ b/resource_pool.cpp @@ -90,6 +90,15 @@ void ResourcePool::delete_program(GLuint glsl_program_num) break; } } + for (map::iterator program_it = compute_programs.begin(); + program_it != compute_programs.end(); + ++program_it) { + if (program_it->second == glsl_program_num) { + compute_programs.erase(program_it); + found_program = true; + break; + } + } assert(found_program); map>::iterator instance_list_it = program_instances.find(glsl_program_num); @@ -105,11 +114,19 @@ void ResourcePool::delete_program(GLuint glsl_program_num) map::iterator shader_it = program_shaders.find(glsl_program_num); - assert(shader_it != program_shaders.end()); - - glDeleteShader(shader_it->second.vs_obj); - glDeleteShader(shader_it->second.fs_obj); - program_shaders.erase(shader_it); + if (shader_it == program_shaders.end()) { + // Should be a compute shader. + map::iterator compute_shader_it = + compute_program_shaders.find(glsl_program_num); + assert(compute_shader_it != compute_program_shaders.end()); + + glDeleteShader(compute_shader_it->second.cs_obj); + compute_program_shaders.erase(compute_shader_it); + } else { + glDeleteShader(shader_it->second.vs_obj); + glDeleteShader(shader_it->second.fs_obj); + program_shaders.erase(shader_it); + } } GLuint ResourcePool::compile_glsl_program(const string& vertex_shader,