diff --git a/renderdoc/driver/gl/gl_overlay.cpp b/renderdoc/driver/gl/gl_overlay.cpp index 76cb3f9c4..0f272826e 100644 --- a/renderdoc/driver/gl/gl_overlay.cpp +++ b/renderdoc/driver/gl/gl_overlay.cpp @@ -419,6 +419,26 @@ ResourceId GLReplay::RenderOverlay(ResourceId texid, const Subresource &sub, Com drv.glTexParameteri(texBindingEnum, eGL_TEXTURE_WRAP_S, eGL_CLAMP_TO_EDGE); drv.glTexParameteri(texBindingEnum, eGL_TEXTURE_WRAP_T, eGL_CLAMP_TO_EDGE); } + + // clear all mips first + drv.glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + drv.glDisable(eGL_BLEND); + drv.glDisable(eGL_SCISSOR_TEST); + drv.glDepthMask(GL_FALSE); + drv.glDisable(eGL_CULL_FACE); + drv.glDisable(eGL_DEPTH_TEST); + drv.glDisable(eGL_STENCIL_TEST); + drv.glStencilMask(0); + + GLfloat black[4] = {}; + for(GLint i = 0; i < texMips; i++) + { + drv.glFramebufferTexture2D(eGL_FRAMEBUFFER, eGL_COLOR_ATTACHMENT0, texBindingEnum, + DebugData.overlayTex, i); + drv.glClearBufferfv(eGL_COLOR, 0, black); + } + + // bind the desired mip drv.glFramebufferTexture2D(eGL_FRAMEBUFFER, eGL_COLOR_ATTACHMENT0, texBindingEnum, DebugData.overlayTex, sub.mip); diff --git a/util/test/demos/gl/gl_overlay_test.cpp b/util/test/demos/gl/gl_overlay_test.cpp index 9c8212a54..f904e939e 100644 --- a/util/test/demos/gl/gl_overlay_test.cpp +++ b/util/test/demos/gl/gl_overlay_test.cpp @@ -192,6 +192,18 @@ void main() GLuint subfbo = MakeFBO(); glBindFramebuffer(GL_FRAMEBUFFER, subfbo); + + // clear all mips/slices first + GLfloat black[4] = {}; + for(GLint s = 0; s < 5; s++) + { + for(GLint m = 0; m < 4; m++) + { + glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, subtex, m, s); + glClearBufferfv(GL_COLOR, 0, black); + } + } + glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, subtex, 2, 2); while(Running())