From 611782653c8295cb123613f305901b17ddfcef6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Tue, 21 Sep 2021 16:36:22 +0200 Subject: [PATCH] Adapted Editor to new RenderTarget api --- .../src/EditWindows/SceneViewportWindow.bf | 39 +++++++------------ GlitchyEditor/src/EditorLayer.bf | 22 ++--------- Sandbox/src/TextureViewer.bf | 2 +- 3 files changed, 20 insertions(+), 43 deletions(-) diff --git a/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf b/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf index 3c0ddbf..856b481 100644 --- a/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf +++ b/GlitchyEditor/src/EditWindows/SceneViewportWindow.bf @@ -12,7 +12,7 @@ namespace GlitchyEditor.EditWindows private bool _open = true; - private Texture2D _texture ~ _?.ReleaseRef(); + private RenderTarget2D _renderTarget ~ _?.ReleaseRef(); private bool _hasFocus; @@ -29,17 +29,15 @@ namespace GlitchyEditor.EditWindows get => _hasFocus; } - public Texture2D Texture + public RenderTarget2D RenderTarget { - get => _texture; + get => _renderTarget; set { - if(_texture == value) + if(_renderTarget == value) return; - _texture?.ReleaseRef(); - _texture = value; - _texture?.AddRef(); + SetReference!(_renderTarget, value); } } @@ -48,17 +46,10 @@ namespace GlitchyEditor.EditWindows } private ImGui.Vec2 oldViewportSize; - - Texture2D _lastTexture; + private bool viewPortChanged; public void Show() { - // Hold a reference to the texture until the next frame. - // This is a workaround for the issue that changing the window size will release the texture - _lastTexture?.ReleaseRef(); - _lastTexture = _texture; - _lastTexture.AddRef(); - if(!_open) return; @@ -80,20 +71,20 @@ namespace GlitchyEditor.EditWindows _hasFocus = ImGui.IsWindowFocused(); var viewportSize = ImGui.GetContentRegionAvail(); - - if(_lastTexture != null) - { - ImGui.Image(_lastTexture, viewportSize); - } - - ImGui.End(); if(oldViewportSize != viewportSize) { - ViewportSizeChangedEvent.Invoke(this, *(Vector2*)&viewportSize); - + ViewportSizeChangedEvent.Invoke(this, *(Vector2*)&oldViewportSize); + viewPortChanged = true; oldViewportSize = viewportSize; } + + if(_renderTarget != null) + { + ImGui.Image(_renderTarget, viewportSize); + } + + ImGui.End(); } } } diff --git a/GlitchyEditor/src/EditorLayer.bf b/GlitchyEditor/src/EditorLayer.bf index a72aa50..0cae339 100644 --- a/GlitchyEditor/src/EditorLayer.bf +++ b/GlitchyEditor/src/EditorLayer.bf @@ -29,7 +29,6 @@ namespace GlitchyEditor PerspectiveCameraController _cameraController ~ delete _; RenderTarget2D _renderTarget2D ~ _?.ReleaseRef(); - DepthStencilTarget _depthTarget ~ _?.ReleaseRef(); public this() : base("Example") { @@ -57,8 +56,7 @@ namespace GlitchyEditor _alphaBlendState = new BlendState(_context, blendDesc); _opaqueBlendState = new BlendState(_context, .Default); - _renderTarget2D = new RenderTarget2D(_context, 100, 100, .R8G8B8A8_UNorm); - _depthTarget = new DepthStencilTarget(_context, 100, 100, .D32_Float); + _renderTarget2D = new RenderTarget2D(_context, RenderTarget2DDescription(.R8G8B8A8_UNorm, 100, 100) {DepthStencilFormat = .D32_Float}); SamplerStateDescription desc = .(); @@ -103,10 +101,9 @@ namespace GlitchyEditor TransformSystem.Update(_world); RenderCommand.Clear(_renderTarget2D, .(0.2f, 0.2f, 0.2f)); - _depthTarget.Clear(1.0f, 0, .Depth); + RenderCommand.Clear(_renderTarget2D, 1.0f, 0, .Depth); _context.SetRenderTarget(_renderTarget2D); - _depthTarget.Bind(); _context.BindRenderTargets(); RenderCommand.SetViewport(Viewport(0, 0, _renderTarget2D.Width, _renderTarget2D.Height)); @@ -148,7 +145,7 @@ namespace GlitchyEditor DrawMainMenuBar(); - _editor.SceneViewportWindow.Texture = _renderTarget2D; + _editor.SceneViewportWindow.RenderTarget = _renderTarget2D; _editor.Update(); @@ -204,20 +201,9 @@ namespace GlitchyEditor if(sizeX == 0 || sizeY == 0) return; - var sampler = _renderTarget2D.SamplerState; - - _renderTarget2D.ReleaseRef(); - _depthTarget.ReleaseRef(); - - _renderTarget2D = new RenderTarget2D(_context, sizeX, sizeY, .R8G8B8A8_UNorm); - _editor.SceneViewportWindow.Texture = _renderTarget2D; - - _depthTarget = new DepthStencilTarget(_context, sizeX, sizeY, .D32_Float); + _renderTarget2D.Resize(sizeX, sizeY); _cameraController.AspectRatio = (float)sizeX / (float)sizeY; - - - _renderTarget2D.SamplerState = sampler; } } } diff --git a/Sandbox/src/TextureViewer.bf b/Sandbox/src/TextureViewer.bf index dcbd383..c323cd9 100644 --- a/Sandbox/src/TextureViewer.bf +++ b/Sandbox/src/TextureViewer.bf @@ -113,7 +113,7 @@ namespace Sandbox if(_target == null || viewportSize.x != _target.Width || viewportSize.y != _target.Height) { _target?.ReleaseRef(); - _target = new RenderTarget2D(_context, (.)viewportSize.x, (.)viewportSize.y, .R8G8B8A8_UNorm); + _target = new RenderTarget2D(_context, .(.R8G8B8A8_UNorm, (.)viewportSize.x, (.)viewportSize.y)); _depth?.ReleaseRef(); _depth = new DepthStencilTarget(_context, (.)viewportSize.x, (.)viewportSize.y, .D16_UNorm); }