From a1096aaf92e98bd573a78b586c7b42a6019836c3 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 11 Feb 2026 13:32:41 +0100 Subject: [PATCH] Fix crash when `MultiScaler` shader is not yet loaded on first frame --- Source/Engine/Graphics/RenderBuffers.cpp | 4 ++++ Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/Source/Engine/Graphics/RenderBuffers.cpp b/Source/Engine/Graphics/RenderBuffers.cpp index df79cd50d..8b67a64b3 100644 --- a/Source/Engine/Graphics/RenderBuffers.cpp +++ b/Source/Engine/Graphics/RenderBuffers.cpp @@ -84,6 +84,8 @@ GPUTexture* RenderBuffers::RequestHalfResDepth(GPUContext* context) const auto currentFrame = Engine::FrameCount; if (LastFrameHalfResDepth == currentFrame) return HalfResDepth; + if (!MultiScaler::Instance()->IsReady()) + return DepthBuffer; const int32 halfDepthWidth = RenderTools::GetResolution(_width, ResolutionMode::Half); const int32 halfDepthHeight = RenderTools::GetResolution(_height, ResolutionMode::Half); @@ -119,6 +121,8 @@ GPUTexture* RenderBuffers::RequestHiZ(GPUContext* context, bool fullRes, int32 m const auto currentFrame = Engine::FrameCount; if (LastFrameHiZ == currentFrame) return HiZ; + if (!MultiScaler::Instance()->IsReady()) + return nullptr; LastFrameHiZ = currentFrame; // Allocate or resize buffer (with full mip-chain) diff --git a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp index e992b7c5a..38d4e295c 100644 --- a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp +++ b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp @@ -262,6 +262,14 @@ GPUTexture* ScreenSpaceReflectionsPass::Render(RenderContext& renderContext, GPU GPUTexture* depthBufferTrace = settings.DepthResolution == ResolutionMode::Half ? buffers->RequestHalfResDepth(context) : buffers->DepthBuffer; data.DepthMips = 1; #endif + if (depthBufferTrace == nullptr) + { + RenderTargetPool::Release(colorBuffer0); + RenderTargetPool::Release(colorBuffer1); + RenderTargetPool::Release(traceBuffer); + RenderTargetPool::Release(resolveBuffer); + return nullptr; + } // Prepare constants context->UpdateCB(cb, &data);