From 3a4c8342a02eb83e2eb75d0d2c20979d9e586bab Mon Sep 17 00:00:00 2001 From: vladislavbelov Date: Sun, 30 Oct 2022 00:38:45 +0000 Subject: [PATCH] Makes AcquireNextBackbuffer returns true in case of successful backbuffer acquirement. This was SVN commit r27184. --- source/renderer/Renderer.cpp | 23 +++++++++++++---------- source/renderer/backend/IDevice.h | 2 +- source/renderer/backend/dummy/Device.cpp | 3 ++- source/renderer/backend/dummy/Device.h | 2 +- source/renderer/backend/gl/Device.cpp | 3 ++- source/renderer/backend/gl/Device.h | 2 +- source/renderer/backend/vulkan/Device.cpp | 3 ++- source/renderer/backend/vulkan/Device.h | 2 +- source/tools/atlas/GameInterface/View.cpp | 3 ++- 9 files changed, 25 insertions(+), 18 deletions(-) diff --git a/source/renderer/Renderer.cpp b/source/renderer/Renderer.cpp index 51225dbb8c..aedb586669 100644 --- a/source/renderer/Renderer.cpp +++ b/source/renderer/Renderer.cpp @@ -420,7 +420,11 @@ void CRenderer::RenderFrame(const bool needsPresent) else { if (needsPresent) - g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer(); + { + // In case of no acquired backbuffer we have nothing render to. + if (!g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer()) + return; + } if (m_ShouldPreloadResourcesBeforeNextFrame) { @@ -545,8 +549,8 @@ void CRenderer::RenderScreenShot(const bool needsPresent) const size_t width = static_cast(g_xres), height = static_cast(g_yres); const size_t bpp = 24; - if (needsPresent) - g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer(); + if (needsPresent && !g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer()) + return; // Hide log messages and re-render RenderFrameImpl(true, false); @@ -655,15 +659,14 @@ void CRenderer::RenderBigScreenShot(const bool needsPresent) } g_Game->GetView()->GetCamera()->SetProjection(projection); - if (needsPresent) - g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer(); + if (needsPresent && g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer()) + { + RenderFrameImpl(false, false); - RenderFrameImpl(false, false); - - m->deviceCommandContext->ReadbackFramebufferSync(0, 0, tileWidth, tileHeight, tileData); - m->deviceCommandContext->Flush(); - if (needsPresent) + m->deviceCommandContext->ReadbackFramebufferSync(0, 0, tileWidth, tileHeight, tileData); + m->deviceCommandContext->Flush(); g_VideoMode.GetBackendDevice()->Present(); + } // Copy the tile pixels into the main image for (int y = 0; y < tileHeight; ++y) diff --git a/source/renderer/backend/IDevice.h b/source/renderer/backend/IDevice.h index f7af8f27d7..da9632f11f 100644 --- a/source/renderer/backend/IDevice.h +++ b/source/renderer/backend/IDevice.h @@ -100,7 +100,7 @@ public: virtual std::unique_ptr CreateShaderProgram( const CStr& name, const CShaderDefines& defines) = 0; - virtual void AcquireNextBackbuffer() = 0; + virtual bool AcquireNextBackbuffer() = 0; virtual void Present() = 0; virtual bool IsTextureFormatSupported(const Format format) const = 0; diff --git a/source/renderer/backend/dummy/Device.cpp b/source/renderer/backend/dummy/Device.cpp index 1474bc9193..5549c4e2ef 100644 --- a/source/renderer/backend/dummy/Device.cpp +++ b/source/renderer/backend/dummy/Device.cpp @@ -114,9 +114,10 @@ std::unique_ptr CDevice::CreateShaderProgram( return CShaderProgram::Create(this); } -void CDevice::AcquireNextBackbuffer() +bool CDevice::AcquireNextBackbuffer() { // We have nothing to acquire. + return true; } void CDevice::Present() diff --git a/source/renderer/backend/dummy/Device.h b/source/renderer/backend/dummy/Device.h index 72f1bd822a..5761579f3d 100644 --- a/source/renderer/backend/dummy/Device.h +++ b/source/renderer/backend/dummy/Device.h @@ -77,7 +77,7 @@ public: std::unique_ptr CreateShaderProgram( const CStr& name, const CShaderDefines& defines) override; - void AcquireNextBackbuffer() override; + bool AcquireNextBackbuffer() override; void Present() override; bool IsTextureFormatSupported(const Format format) const override; diff --git a/source/renderer/backend/gl/Device.cpp b/source/renderer/backend/gl/Device.cpp index 274f881470..f5192641fb 100644 --- a/source/renderer/backend/gl/Device.cpp +++ b/source/renderer/backend/gl/Device.cpp @@ -906,10 +906,11 @@ std::unique_ptr CDevice::CreateShaderProgram( return CShaderProgram::Create(this, name, defines); } -void CDevice::AcquireNextBackbuffer() +bool CDevice::AcquireNextBackbuffer() { ENSURE(!m_BackbufferAcquired); m_BackbufferAcquired = true; + return true; } void CDevice::Present() diff --git a/source/renderer/backend/gl/Device.h b/source/renderer/backend/gl/Device.h index daef2e5a8e..16664e3aa9 100644 --- a/source/renderer/backend/gl/Device.h +++ b/source/renderer/backend/gl/Device.h @@ -94,7 +94,7 @@ public: std::unique_ptr CreateShaderProgram( const CStr& name, const CShaderDefines& defines) override; - void AcquireNextBackbuffer() override; + bool AcquireNextBackbuffer() override; void Present() override; bool IsTextureFormatSupported(const Format format) const override; diff --git a/source/renderer/backend/vulkan/Device.cpp b/source/renderer/backend/vulkan/Device.cpp index 041892238a..5a699734a2 100644 --- a/source/renderer/backend/vulkan/Device.cpp +++ b/source/renderer/backend/vulkan/Device.cpp @@ -150,8 +150,9 @@ std::unique_ptr CDevice::CreateShaderProgram( return nullptr; } -void CDevice::AcquireNextBackbuffer() +bool CDevice::AcquireNextBackbuffer() { + return false; } void CDevice::Present() diff --git a/source/renderer/backend/vulkan/Device.h b/source/renderer/backend/vulkan/Device.h index 1a851c8122..c20a721221 100644 --- a/source/renderer/backend/vulkan/Device.h +++ b/source/renderer/backend/vulkan/Device.h @@ -82,7 +82,7 @@ public: std::unique_ptr CreateShaderProgram( const CStr& name, const CShaderDefines& defines) override; - void AcquireNextBackbuffer() override; + bool AcquireNextBackbuffer() override; void Present() override; bool IsTextureFormatSupported(const Format format) const override; diff --git a/source/tools/atlas/GameInterface/View.cpp b/source/tools/atlas/GameInterface/View.cpp index 563c0312e0..01c378263b 100644 --- a/source/tools/atlas/GameInterface/View.cpp +++ b/source/tools/atlas/GameInterface/View.cpp @@ -223,7 +223,8 @@ void AtlasViewGame::Update(float realFrameLength) void AtlasViewGame::Render() { - g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer(); + if (!g_VideoMode.GetBackendDevice()->AcquireNextBackbuffer()) + return; SViewPort vp = { 0, 0, g_xres, g_yres }; CCamera& camera = GetCamera();