From 229629a587626af77a6da91526926480536c38a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sun, 16 Aug 2026 16:43:15 +0200 Subject: [PATCH] Fixed crash when resizing window --- GlitchyEditor/src/EditorLayer.bf | 3 +++ .../Platform/DX11/Renderer/Dx11RenderTarget.bf | 15 +++++++++++++++ .../src/Platform/DX11/Renderer/Dx11SwapChain.bf | 3 ++- GlitchyEngine/src/Renderer/RenderTarget.bf | 2 -- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/GlitchyEditor/src/EditorLayer.bf b/GlitchyEditor/src/EditorLayer.bf index 2576519..5ddf302 100644 --- a/GlitchyEditor/src/EditorLayer.bf +++ b/GlitchyEditor/src/EditorLayer.bf @@ -426,6 +426,9 @@ namespace GlitchyEditor // Clear the swapchain-buffer RenderCommand.Clear(null, .Color | .Depth, .(0.2f, 0.2f, 0.2f), 1.0f, 0); + // Explicitly set the swap chain as render target, because we end a frame with it bound and the RTV might stop existing if we resized the swapchain between frames. + // TODO: maybe we need to be smarter about how we handle resizing in general: should the RenderTarget check during resize whether it is bound and update the GraphicsContext?! + RenderCommand.SetRenderTarget(null); RenderCommand.SetBlendState(_alphaBlendState); RenderCommand.SetDepthStencilState(_depthStencilState); diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RenderTarget.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RenderTarget.bf index 2986c6e..e62800d 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RenderTarget.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RenderTarget.bf @@ -72,6 +72,8 @@ namespace GlitchyEngine.Renderer { PlatformCreateTexture(); } + + SetDebugNames(); if(_description.DepthStencilFormat != .Unknown) { @@ -131,6 +133,18 @@ namespace GlitchyEngine.Renderer } } + private void SetDebugNames() + { + _nativeTexture.SetDebugName(Identifier); + _nativeResourceView.SetDebugName(scope $"{Identifier}: SRV"); + _nativeRenderTargetView.SetDebugName(scope $"{Identifier}: RTV"); + + if (_depthStenilTarget != null) + { + _depthStenilTarget.nativeView.SetDebugName(scope $"{Identifier}: DSV"); + } + } + protected override TextureViewBinding PlatformGetViewBinding() { return new .(_nativeResourceView, _samplerState?.nativeSamplerState); @@ -255,6 +269,7 @@ namespace GlitchyEngine.Renderer ID3D11Texture2D* texture = null; var result = NativeDevice.CreateTexture2D(ref desc, null, &texture); + texture.SetDebugName(target.DebugName); Log.EngineLogger.Assert(result.Succeeded, "Failed to create RenderTarget2D"); // TODO: calculate the max mip level diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf index 6899bc9..420c4ab 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf @@ -116,8 +116,9 @@ namespace GlitchyEngine.Renderer desc.IsSwapchainTarget = true; _backBuffer = new RenderTarget2D(desc); - _backBuffer.Identifier = "Backbuffer"; + _backBuffer.Identifier = "Back buffer"; _backBuffer.SamplerState = SamplerStateManager.LinearClamp; + _backBuffer.ApplyChanges(); } _backBufferViewport = GlitchyEngine.Renderer.Viewport(0, 0, _width, _height, 0.0f, 1.0f); diff --git a/GlitchyEngine/src/Renderer/RenderTarget.bf b/GlitchyEngine/src/Renderer/RenderTarget.bf index 8278c21..da5ea8f 100644 --- a/GlitchyEngine/src/Renderer/RenderTarget.bf +++ b/GlitchyEngine/src/Renderer/RenderTarget.bf @@ -62,8 +62,6 @@ namespace GlitchyEngine.Renderer Debug.Profiler.ProfileResourceFunction!(); _description = description; - - ApplyChanges(); } /// Recreates the render target using the current description