From 742ae8c90792ed87e220388778c056aedefc80f3 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Thu, 28 Jul 2022 13:46:47 +0200 Subject: [PATCH] Fix viewpoint buffer not getting cleared when in the menus --- src/common/rendering/gl/gl_framebuffer.cpp | 1 + src/common/rendering/gles/gles_framebuffer.cpp | 1 + .../rendering/hwrenderer/data/hw_viewpointbuffer.cpp | 9 +++++++-- src/common/rendering/vulkan/system/vk_framebuffer.cpp | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/common/rendering/gl/gl_framebuffer.cpp b/src/common/rendering/gl/gl_framebuffer.cpp index 52cf004d03..3913a21e13 100644 --- a/src/common/rendering/gl/gl_framebuffer.cpp +++ b/src/common/rendering/gl/gl_framebuffer.cpp @@ -484,6 +484,7 @@ void OpenGLFrameBuffer::SetSaveBuffers(bool yes) void OpenGLFrameBuffer::BeginFrame() { SetViewportRects(nullptr); + mViewpoints->Clear(); if (GLRenderer != nullptr) GLRenderer->BeginFrame(); } diff --git a/src/common/rendering/gles/gles_framebuffer.cpp b/src/common/rendering/gles/gles_framebuffer.cpp index c858e969f9..db2a69902b 100644 --- a/src/common/rendering/gles/gles_framebuffer.cpp +++ b/src/common/rendering/gles/gles_framebuffer.cpp @@ -369,6 +369,7 @@ void OpenGLFrameBuffer::WaitForCommands(bool finish) void OpenGLFrameBuffer::BeginFrame() { SetViewportRects(nullptr); + mViewpoints->Clear(); if (GLRenderer != nullptr) GLRenderer->BeginFrame(); } diff --git a/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.cpp b/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.cpp index 90001b7b97..f60cda5e10 100644 --- a/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.cpp +++ b/src/common/rendering/hwrenderer/data/hw_viewpointbuffer.cpp @@ -117,11 +117,16 @@ int HWViewpointBuffer::SetViewpoint(FRenderState &di, HWViewpointUniforms *vp) void HWViewpointBuffer::Clear() { + bool needNewPipeline = mUploadIndex > 0; // Clear might be called multiple times before any actual rendering + mUploadIndex = 0; mClipPlaneInfo.Clear(); - mPipelinePos++; - mPipelinePos %= mPipelineNbr; + if (needNewPipeline) + { + mPipelinePos++; + mPipelinePos %= mPipelineNbr; + } mBuffer = mBufferPipeline[mPipelinePos]; } diff --git a/src/common/rendering/vulkan/system/vk_framebuffer.cpp b/src/common/rendering/vulkan/system/vk_framebuffer.cpp index 55ce448fdc..b93e597849 100644 --- a/src/common/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/common/rendering/vulkan/system/vk_framebuffer.cpp @@ -419,6 +419,7 @@ TArray VulkanFrameBuffer::GetScreenshotBuffer(int &pitch, ESSType &colo void VulkanFrameBuffer::BeginFrame() { SetViewportRects(nullptr); + mViewpoints->Clear(); mCommands->BeginFrame(); mTextureManager->BeginFrame(); mScreenBuffers->BeginFrame(screen->mScreenViewport.width, screen->mScreenViewport.height, screen->mSceneViewport.width, screen->mSceneViewport.height);