From 14b8560ebb7ab0a8af2f535ec9c1c89e509577a5 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 18 Jun 2019 12:45:12 +0100 Subject: [PATCH] On GL don't render from empty buffers - it can crash drivers --- renderdoc/driver/gl/gl_rendermesh.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/renderdoc/driver/gl/gl_rendermesh.cpp b/renderdoc/driver/gl/gl_rendermesh.cpp index abeb0d5e9..4327ddc8a 100644 --- a/renderdoc/driver/gl/gl_rendermesh.cpp +++ b/renderdoc/driver/gl/gl_rendermesh.cpp @@ -124,6 +124,15 @@ void GLReplay::RenderMesh(uint32_t eventId, const std::vector &secon GLuint vb = m_pDriver->GetResourceManager()->GetCurrentResource(fmt.vertexResourceId).name; drv.glBindVertexBuffer(0, vb, (GLintptr)fmt.vertexByteOffset, fmt.vertexByteStride); + { + GLint bytesize = 0; + drv.glGetNamedBufferParameterivEXT(vb, eGL_BUFFER_SIZE, &bytesize); + + // skip empty source buffers + if(bytesize == 0) + continue; + } + GLenum secondarytopo = MakeGLPrimitiveTopology(fmt.topology); if(fmt.indexByteStride) @@ -253,6 +262,16 @@ void GLReplay::RenderMesh(uint32_t eventId, const std::vector &secon GLuint vb = m_pDriver->GetResourceManager()->GetCurrentResource(meshData[i]->vertexResourceId).name; + + { + GLint bytesize = 0; + drv.glGetNamedBufferParameterivEXT(vb, eGL_BUFFER_SIZE, &bytesize); + + // skip empty source buffers + if(bytesize == 0) + continue; + } + drv.glBindVertexBuffer(i, vb, offs, meshData[i]->vertexByteStride); if(meshData[i]->instanced)