diff --git a/src/common/rendering/gl/gl_framebuffer.cpp b/src/common/rendering/gl/gl_framebuffer.cpp index 52cf004d0..3913a21e1 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 c858e969f..db2a69902 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 90001b7b9..f60cda5e1 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 55ce448fd..b93e59784 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);