From ad8a23e9c344592f66ab9b01e1f6021a320bbb3c Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 1 Nov 2019 10:58:54 +0000 Subject: [PATCH] Handle backbuffers in GL that are 0 width or height. Closes #1571 --- renderdoc/driver/gl/gl_driver.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index dc28046e4..79ff4ad92 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -775,15 +775,18 @@ void WrappedOpenGL::CreateReplayBackbuffer(const GLInitParams ¶ms, ResourceI m_Textures[GetResourceManager()->GetID(TextureRes(GetCtx(), col))].creationFlags |= TextureCategory::SwapBuffer; + uint32_t width = RDCMAX(1U, params.width); + uint32_t height = RDCMAX(1U, params.height); + if(params.multiSamples > 1) { - drv.glTextureStorage2DMultisampleEXT(col, target, params.multiSamples, colfmt, params.width, - params.height, true); + drv.glTextureStorage2DMultisampleEXT(col, target, params.multiSamples, colfmt, width, height, + true); } else { - drv.glTextureImage2DEXT(col, target, 0, colfmt, params.width, params.height, 0, - GetBaseFormat(colfmt), GetDataType(colfmt), NULL); + drv.glTextureImage2DEXT(col, target, 0, colfmt, width, height, 0, GetBaseFormat(colfmt), + GetDataType(colfmt), NULL); drv.glTexParameteri(target, eGL_TEXTURE_MAX_LEVEL, 0); drv.glTexParameteri(target, eGL_TEXTURE_MIN_FILTER, eGL_NEAREST); drv.glTexParameteri(target, eGL_TEXTURE_MAG_FILTER, eGL_NEAREST); @@ -792,7 +795,7 @@ void WrappedOpenGL::CreateReplayBackbuffer(const GLInitParams ¶ms, ResourceI } drv.glFramebufferTexture2D(eGL_FRAMEBUFFER, eGL_COLOR_ATTACHMENT0, target, col, 0); - drv.glViewport(0, 0, params.width, params.height); + drv.glViewport(0, 0, width, height); if(params.depthBits > 0 || params.stencilBits > 0) { @@ -835,14 +838,14 @@ void WrappedOpenGL::CreateReplayBackbuffer(const GLInitParams ¶ms, ResourceI if(params.multiSamples > 1) { - drv.glTextureStorage2DMultisampleEXT(depth, target, params.multiSamples, depthfmt, - params.width, params.height, true); + drv.glTextureStorage2DMultisampleEXT(depth, target, params.multiSamples, depthfmt, width, + height, true); } else { drv.glTexParameteri(target, eGL_TEXTURE_MAX_LEVEL, 0); - drv.glTextureImage2DEXT(depth, target, 0, depthfmt, params.width, params.height, 0, - GetBaseFormat(depthfmt), GetDataType(depthfmt), NULL); + drv.glTextureImage2DEXT(depth, target, 0, depthfmt, width, height, 0, GetBaseFormat(depthfmt), + GetDataType(depthfmt), NULL); } if(stencil && params.depthBits == 0)