mirror of
https://github.com/prime31/FNA-VSCode-Template.git
synced 2025-10-31 21:50:44 +07:00
79 lines
2.3 KiB
C#
79 lines
2.3 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using ImGuiNET;
|
|
using ImGuiNET.SampleProgram.XNA;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace Nez
|
|
{
|
|
public class ImGuiFinalRenderDelegate : IFinalRenderDelegate
|
|
{
|
|
public Scene scene { get; set; }
|
|
|
|
ImGuiRenderer _imGuiRenderer;
|
|
RenderTarget2D _lastRenderTarget;
|
|
IntPtr _renderTargetId;
|
|
|
|
public ImGuiFinalRenderDelegate()
|
|
{
|
|
_imGuiRenderer = new ImGuiRenderer(Core.instance);
|
|
_imGuiRenderer.RebuildFontAtlas();
|
|
ImGui.GetIO().ConfigWindowsMoveFromTitleBarOnly = true;
|
|
}
|
|
|
|
public void handleFinalRender( Color letterboxColor, RenderTarget2D source, Rectangle finalRenderDestinationRect, SamplerState samplerState )
|
|
{
|
|
if(_lastRenderTarget != source)
|
|
{
|
|
// unbind the old texture if we had one
|
|
if(_lastRenderTarget != null)
|
|
_imGuiRenderer.UnbindTexture(_renderTargetId);
|
|
|
|
// bind the new texture
|
|
_lastRenderTarget = source;
|
|
_renderTargetId = _imGuiRenderer.BindTexture(source);
|
|
}
|
|
|
|
Core.graphicsDevice.setRenderTarget( null );
|
|
Core.graphicsDevice.Clear( letterboxColor );
|
|
|
|
|
|
_imGuiRenderer.BeforeLayout(Time.time);
|
|
layoutGui();
|
|
_imGuiRenderer.AfterLayout();
|
|
}
|
|
|
|
void layoutGui()
|
|
{
|
|
ImGui.ShowDemoWindow();
|
|
|
|
var maxSize = new System.Numerics.Vector2(_lastRenderTarget.Width, _lastRenderTarget.Height);
|
|
var minSize = maxSize / 4;
|
|
unsafe
|
|
{
|
|
ImGui.SetNextWindowSizeConstraints(minSize, maxSize, data =>
|
|
{
|
|
var size = (*data).CurrentSize;
|
|
var ratio = size.X / _lastRenderTarget.Width;
|
|
(*data).DesiredSize.Y = ratio * _lastRenderTarget.Height;
|
|
});
|
|
}
|
|
|
|
ImGui.SetNextWindowPos(new System.Numerics.Vector2(0, 0), ImGuiCond.FirstUseEver);
|
|
ImGui.Begin("Game Window");
|
|
ImGui.Image(_renderTargetId, ImGui.GetContentRegionAvail());
|
|
ImGui.End();
|
|
}
|
|
|
|
public void onAddedToScene()
|
|
{}
|
|
|
|
public void onSceneBackBufferSizeChanged( int newWidth, int newHeight )
|
|
{}
|
|
|
|
public void unload()
|
|
{}
|
|
}
|
|
}
|