diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index 2a344b744..6330082a6 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -4831,7 +4831,7 @@ void WrappedOpenGL::glDeleteVertexArrays(GLsizei n, const GLuint *arrays) for(GLsizei i = 0; i < n; i++) { GLResource res = VertexArrayRes(GetCtx(), arrays[i]); - if(GetResourceManager()->HasCurrentResource(res)) + if(GetResourceManager()->HasCurrentResource(res) && arrays[i]) { if(GetResourceManager()->HasResourceRecord(res)) GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager()); diff --git a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp index 2c6f6b692..6792cb258 100644 --- a/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp @@ -2100,7 +2100,7 @@ void WrappedOpenGL::glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers) for(GLsizei i = 0; i < n; i++) { GLResource res = FramebufferRes(GetCtx(), framebuffers[i]); - if(GetResourceManager()->HasCurrentResource(res)) + if(GetResourceManager()->HasCurrentResource(res) && framebuffers[i]) { if(GetResourceManager()->HasResourceRecord(res)) GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager()); diff --git a/util/test/demos/gl/gl_vao_0.cpp b/util/test/demos/gl/gl_vao_0.cpp index b5046ff0c..3ddd57569 100644 --- a/util/test/demos/gl/gl_vao_0.cpp +++ b/util/test/demos/gl/gl_vao_0.cpp @@ -107,6 +107,13 @@ void main() float col[] = {0.4f, 0.5f, 0.6f, 1.0f}; glClearBufferfv(GL_COLOR, 0, col); + // try to delete VAO 0. Should do nothing + GLuint zero = 0; + glDeleteVertexArrays(1, &zero); + + // same with FBO 0 + glDeleteFramebuffers(1, &zero); + glUseProgram(program); // use both buffers