From 29a650d8590c0af1f930553c1c8b6294b49801a6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 7 Jan 2020 16:56:22 +0000 Subject: [PATCH] Don't delete the 0 VAO or FBO, even if the application asks nicely --- renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp | 2 +- renderdoc/driver/gl/wrappers/gl_framebuffer_funcs.cpp | 2 +- util/test/demos/gl/gl_vao_0.cpp | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) 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