Keep references to Images used by ImGui

This commit is contained in:
Simon Lübeß
2021-09-21 16:49:10 +02:00
parent 611782653c
commit eb2bbf4b82
4 changed files with 36 additions and 9 deletions
@@ -71,13 +71,6 @@ namespace GlitchyEditor.EditWindows
_hasFocus = ImGui.IsWindowFocused();
var viewportSize = ImGui.GetContentRegionAvail();
if(oldViewportSize != viewportSize)
{
ViewportSizeChangedEvent.Invoke(this, *(Vector2*)&oldViewportSize);
viewPortChanged = true;
oldViewportSize = viewportSize;
}
if(_renderTarget != null)
{
@@ -85,6 +78,13 @@ namespace GlitchyEditor.EditWindows
}
ImGui.End();
if(oldViewportSize != viewportSize)
{
ViewportSizeChangedEvent.Invoke(this, *(Vector2*)&oldViewportSize);
viewPortChanged = true;
oldViewportSize = viewportSize;
}
}
}
}
@@ -20,5 +20,8 @@ namespace ImGui
public static extern void Image(Texture2D texture, Vec2 size, Vec2 uv0 = Vec2.Zero, Vec2 uv1 = Vec2.Ones, Vec4 tint_col = Vec4.Ones, Vec4 border_col = Vec4.Zero);
// Wouldn't be necesseary if RenderTarget2D was Texture2D
public static extern void Image(RenderTarget2D texture, Vec2 size, Vec2 uv0 = Vec2.Zero, Vec2 uv1 = Vec2.Ones, Vec4 tint_col = Vec4.Ones, Vec4 border_col = Vec4.Zero);
/// Releases references that accumulated calls like ImGui::Image
protected internal static extern void CleanupFrame();
}
}
+4
View File
@@ -2,6 +2,8 @@ using System;
using ImGui;
using GlitchyEngine.Events;
using internal ImGui;
namespace GlitchyEngine.ImGui
{
public class ImGuiLayer : Layer
@@ -207,6 +209,8 @@ namespace GlitchyEngine.ImGui
ImGui.Render();
ImGuiImplDX11.RenderDrawData(ImGui.GetDrawData());
ImGui.CleanupFrame();
if(io.ConfigFlags.HasFlag(.ViewportsEnable))
{
ImGui.UpdatePlatformWindows();
+22 -2
View File
@@ -1,4 +1,6 @@
using GlitchyEngine.Renderer;
using System.Collections;
using DirectX.D3D11;
namespace ImGui
{
@@ -6,14 +8,32 @@ namespace ImGui
extension ImGui
{
static List<ID3D11ShaderResourceView*> _resourceViews = new .() ~ delete _;
public static override void Image(Texture2D texture, Vec2 size, Vec2 uv0 = Vec2.Zero, Vec2 uv1 = Vec2.Ones, Vec4 tint_col = Vec4.Ones, Vec4 border_col = Vec4.Zero)
{
ImGui.Image(texture.nativeResourceView, size, uv0, uv1, tint_col, border_col);
var view = texture.nativeResourceView..AddRef();
_resourceViews.Add(view);
ImGui.Image(view, size, uv0, uv1, tint_col, border_col);
}
public static override void Image(RenderTarget2D texture, Vec2 size, Vec2 uv0 = Vec2.Zero, Vec2 uv1 = Vec2.Ones, Vec4 tint_col = Vec4.Ones, Vec4 border_col = Vec4.Zero)
{
ImGui.Image(texture._nativeResourceView, size, uv0, uv1, tint_col, border_col);
var view = texture._nativeResourceView..AddRef();
_resourceViews.Add(view);
ImGui.Image(view, size, uv0, uv1, tint_col, border_col);
}
protected internal static override void CleanupFrame()
{
for(var view in _resourceViews)
{
view.Release();
}
_resourceViews.Clear();
}
}
}