diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 2067736b5..492174700 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -1071,8 +1071,12 @@ namespace bgfx } m_numPredefined = 0; - GL_CHECK(glUseProgram(0) ); - GL_CHECK(glDeleteProgram(m_id) ); + if (0 != m_id) + { + GL_CHECK(glUseProgram(0) ); + GL_CHECK(glDeleteProgram(m_id) ); + m_id = 0; + } m_vcref.invalidate(s_renderCtx->m_vaoStateCache); } diff --git a/src/renderer_gl.h b/src/renderer_gl.h index 3da047cde..5d6a1d1ce 100755 --- a/src/renderer_gl.h +++ b/src/renderer_gl.h @@ -583,6 +583,11 @@ namespace bgfx struct Shader { + Shader() + : m_id(0) + { + } + void create(GLenum _type, Memory* _mem) { m_id = glCreateShader(_type); @@ -622,7 +627,11 @@ namespace bgfx void destroy() { - GL_CHECK(glDeleteShader(m_id) ); + if (0 != m_id) + { + GL_CHECK(glDeleteShader(m_id) ); + m_id = 0; + } } GLuint m_id; @@ -657,7 +666,8 @@ namespace bgfx struct Program { Program() - : m_constantBuffer(NULL) + : m_id(0) + , m_constantBuffer(NULL) , m_numPredefined(0) { }