2025-08-12 19:30:40 +02:00

79 lines
1.8 KiB
C#

using System.Numerics;
using ImGuiNET;
using Microsoft.Xna.Framework.Graphics;
namespace skyscraper8.UI.MonoGame.Bridge;
public class TextureDisplayWindow : ImGuiRenderable
{
protected Texture2D _texture;
protected string _name;
protected bool open;
private bool closeable;
protected ImGuiRenderer _renderer;
public TextureDisplayWindow(ImGuiRenderer renderer, Texture2D texture, string name = null, bool closeable = false)
{
if (renderer == null)
throw new ArgumentNullException(nameof(renderer));
_renderer = renderer;
this._texture = texture;
this._name = name;
if (string.IsNullOrEmpty(name))
{
this._name = texture.ToString();
}
this.open = true;
this.closeable = closeable;
}
private bool bound;
private IntPtr _texturePointer;
protected System.Numerics.Vector2 windowSize;
public virtual void Update()
{
if (_texture == null)
return;
if (!bound)
{
_texturePointer = _renderer.BindTexture(_texture);
windowSize = new Vector2(_texture.Width, _texture.Height);
bound = true;
}
}
public void Render()
{
if (!bound)
return;
ImGui.SetNextWindowSize(windowSize);
if (closeable)
ImGui.Begin(_name, ref open);
else
ImGui.Begin(_name);
ImGui.Image(_texturePointer, windowSize);
ImGui.End();
}
public bool WasClosed()
{
return !open;
}
public void Dispose()
{
if (bound)
{
_renderer.UnbindTexture(_texturePointer);
bound = false;
}
_texture.Dispose();
}
}