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();
|
_hasFocus = ImGui.IsWindowFocused();
|
||||||
|
|
||||||
var viewportSize = ImGui.GetContentRegionAvail();
|
var viewportSize = ImGui.GetContentRegionAvail();
|
||||||
|
|
||||||
if(oldViewportSize != viewportSize)
|
|
||||||
{
|
|
||||||
ViewportSizeChangedEvent.Invoke(this, *(Vector2*)&oldViewportSize);
|
|
||||||
viewPortChanged = true;
|
|
||||||
oldViewportSize = viewportSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_renderTarget != null)
|
if(_renderTarget != null)
|
||||||
{
|
{
|
||||||
@@ -85,6 +78,13 @@ namespace GlitchyEditor.EditWindows
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImGui.End();
|
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);
|
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
|
// 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);
|
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 ImGui;
|
||||||
using GlitchyEngine.Events;
|
using GlitchyEngine.Events;
|
||||||
|
|
||||||
|
using internal ImGui;
|
||||||
|
|
||||||
namespace GlitchyEngine.ImGui
|
namespace GlitchyEngine.ImGui
|
||||||
{
|
{
|
||||||
public class ImGuiLayer : Layer
|
public class ImGuiLayer : Layer
|
||||||
@@ -207,6 +209,8 @@ namespace GlitchyEngine.ImGui
|
|||||||
ImGui.Render();
|
ImGui.Render();
|
||||||
ImGuiImplDX11.RenderDrawData(ImGui.GetDrawData());
|
ImGuiImplDX11.RenderDrawData(ImGui.GetDrawData());
|
||||||
|
|
||||||
|
ImGui.CleanupFrame();
|
||||||
|
|
||||||
if(io.ConfigFlags.HasFlag(.ViewportsEnable))
|
if(io.ConfigFlags.HasFlag(.ViewportsEnable))
|
||||||
{
|
{
|
||||||
ImGui.UpdatePlatformWindows();
|
ImGui.UpdatePlatformWindows();
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using GlitchyEngine.Renderer;
|
using GlitchyEngine.Renderer;
|
||||||
|
using System.Collections;
|
||||||
|
using DirectX.D3D11;
|
||||||
|
|
||||||
namespace ImGui
|
namespace ImGui
|
||||||
{
|
{
|
||||||
@@ -6,14 +8,32 @@ namespace ImGui
|
|||||||
|
|
||||||
extension 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)
|
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)
|
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