mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Keep references to Images used by ImGui
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user