ktsu.ImGuiApp
2.0.11
Prefix Reserved
See the version list below for details.
dotnet add package ktsu.ImGuiApp --version 2.0.11
NuGet\Install-Package ktsu.ImGuiApp -Version 2.0.11
<PackageReference Include="ktsu.ImGuiApp" Version="2.0.11" />
<PackageVersion Include="ktsu.ImGuiApp" Version="2.0.11" />
<PackageReference Include="ktsu.ImGuiApp" />
paket add ktsu.ImGuiApp --version 2.0.11
#r "nuget: ktsu.ImGuiApp, 2.0.11"
#:package ktsu.ImGuiApp@2.0.11
#addin nuget:?package=ktsu.ImGuiApp&version=2.0.11
#tool nuget:?package=ktsu.ImGuiApp&version=2.0.11
ktsu.ImGuiApp
A .NET library that provides application scaffolding for Dear ImGui, using Silk.NET and Hexa.NET.ImGui.
Introduction
ImGuiApp is a .NET library that provides application scaffolding for Dear ImGui, using Silk.NET for OpenGL and window management and Hexa.NET.ImGui for the ImGui bindings. It simplifies the creation of ImGui-based applications by abstracting away the complexities of window management, rendering, and input handling.
Features
- Simple API: Create ImGui applications with minimal boilerplate code
- Full Integration: Seamless integration with Silk.NET for OpenGL and input handling
- Window Management: Automatic window state, rendering, and input handling
- Performance Optimization: Sleep-based throttled rendering with lowest-selection logic when unfocused, idle, or not visible to maximize resource savings
- DPI Awareness: Built-in support for high-DPI displays and scaling
- Font Management: Flexible font loading system with customization options
- Unicode & Emoji Support: Built-in support for Unicode characters and emojis (enabled by default)
- Texture Support: Built-in texture management for ImGui
- Lifecycle Callbacks: Customizable delegate callbacks for application events
- Menu System: Easy-to-use API for creating application menus
- Positioning Guards: Offscreen positioning checks to keep windows visible
- Modern .NET: Supports .NET 9 and newer
- Active Development: Open-source and actively maintained
Getting Started
Prerequisites
- .NET 9.0 or later
Installation
Package Manager Console
Install-Package ktsu.ImGuiApp
.NET CLI
dotnet add package ktsu.ImGuiApp
Package Reference
<PackageReference Include="ktsu.ImGuiApp" Version="x.y.z" />
Usage Examples
Basic Application
Create a new class and call ImGuiApp.Start()
with your application config:
using ktsu.ImGuiApp;
using Hexa.NET.ImGui;
static class Program
{
static void Main()
{
ImGuiApp.Start(new ImGuiAppConfig()
{
Title = "ImGuiApp Demo",
OnStart = () => { /* Initialization code */ },
OnUpdate = delta => { /* Logic updates */ },
OnRender = delta => { ImGui.Text("Hello, ImGuiApp!"); },
OnAppMenu = () =>
{
if (ImGui.BeginMenu("File"))
{
// Menu items
if (ImGui.MenuItem("Exit"))
{
ImGuiApp.Stop();
}
ImGui.EndMenu();
}
}
});
}
}
Custom Font Management
Use the resource designer to add font files to your project, then load the fonts:
ImGuiApp.Start(new()
{
Title = "ImGuiApp Demo",
OnRender = OnRender,
Fonts = new Dictionary<string, byte[]>
{
{ nameof(Resources.MY_FONT), Resources.MY_FONT }
},
});
Or load the font data manually:
var fontData = File.ReadAllBytes("path/to/font.ttf");
ImGuiApp.Start(new()
{
Title = "ImGuiApp Demo",
OnRender = OnRender,
Fonts = new Dictionary<string, byte[]>
{
{ "MyFont", fontData }
},
});
Then apply the font to ImGui using the FontAppearance
class:
private static void OnRender(float deltaTime)
{
ImGui.Text("Hello, I am normal text!");
using (new FontAppearance("MyFont", 24))
{
ImGui.Text("Hello, I am BIG fancy text!");
}
using (new FontAppearance(32))
{
ImGui.Text("Hello, I am just huge text!");
}
using (new FontAppearance("MyFont"))
{
ImGui.Text("Hello, I am somewhat fancy!");
}
}
Unicode and Emoji Support
ImGuiApp automatically includes support for Unicode characters and emojis. This feature is enabled by default, so you can use extended characters without any configuration:
private static void OnRender(float deltaTime)
{
ImGui.Text("Basic ASCII: Hello World!");
ImGui.Text("Accented characters: café, naïve, résumé");
ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑");
ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿");
ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕");
ImGui.Text("Emojis (if font supports): 😀 🚀 🌟 💻 🎨 🌈");
}
Note: Character display depends on your font's Unicode support. Most modern fonts include extended Latin characters and symbols, but emojis require specialized fonts.
To disable Unicode support (ASCII only), set EnableUnicodeSupport = false
:
ImGuiApp.Start(new()
{
Title = "ASCII Only App",
EnableUnicodeSupport = false, // Disables Unicode support
// ... other settings
});
Texture Management
Load and manage textures with the built-in texture management system:
private static void OnRender(float deltaTime)
{
// Load texture from file path
var textureInfo = ImGuiApp.GetOrLoadTexture("path/to/texture.png");
// Use the texture in ImGui (using the new TextureRef API for Hexa.NET.ImGui)
ImGui.Image(textureInfo.TextureRef, new Vector2(128, 128));
// Clean up when done (optional - textures are cached and managed automatically)
ImGuiApp.DeleteTexture(textureInfo);
}
Full Application with Multiple Windows
using ktsu.ImGuiApp;
using Hexa.NET.ImGui;
using System.Numerics;
class Program
{
private static bool _showDemoWindow = true;
private static bool _showCustomWindow = true;
static void Main()
{
ImGuiApp.Start(new ImGuiAppConfig
{
Title = "Advanced ImGuiApp Demo",
Width = 1280,
Height = 720,
OnStart = OnStart,
OnUpdate = OnUpdate,
OnRender = OnRender,
OnAppMenu = OnAppMenu,
OnShutdown = OnShutdown
});
}
private static void OnStart()
{
// Initialize your application state
Console.WriteLine("Application started");
}
private static void OnUpdate(float deltaTime)
{
// Update your application state
// This runs before rendering each frame
}
private static void OnRender(float deltaTime)
{
// ImGui demo window
if (_showDemoWindow)
ImGui.ShowDemoWindow(ref _showDemoWindow);
// Custom window
if (_showCustomWindow)
{
ImGui.Begin("Custom Window", ref _showCustomWindow);
ImGui.Text($"Frame time: {deltaTime * 1000:F2} ms");
ImGui.Text($"FPS: {1.0f / deltaTime:F1}");
if (ImGui.Button("Click Me"))
Console.WriteLine("Button clicked!");
ImGui.ColorEdit3("Background Color", ref _backgroundColor);
ImGui.End();
}
}
private static void OnAppMenu()
{
if (ImGui.BeginMenu("File"))
{
if (ImGui.MenuItem("Exit"))
ImGuiApp.Stop();
ImGui.EndMenu();
}
if (ImGui.BeginMenu("Windows"))
{
ImGui.MenuItem("Demo Window", string.Empty, ref _showDemoWindow);
ImGui.MenuItem("Custom Window", string.Empty, ref _showCustomWindow);
ImGui.EndMenu();
}
}
private static void OnShutdown()
{
// Clean up resources
Console.WriteLine("Application shutting down");
}
private static Vector3 _backgroundColor = new Vector3(0.45f, 0.55f, 0.60f);
}
API Reference
ImGuiApp
Static Class
The main entry point for creating and managing ImGui applications.
Methods
Name | Parameters | Return Type | Description |
---|---|---|---|
Start |
ImGuiAppConfig config |
void |
Starts the ImGui application with the provided configuration |
Stop |
void |
Stops the running application | |
GetOrLoadTexture |
string path |
ImGuiAppTextureInfo |
Loads a texture from file or returns cached texture info if already loaded |
TryGetTexture |
string path, out ImGuiAppTextureInfo textureInfo |
bool |
Attempts to get a cached texture by path |
DeleteTexture |
uint textureId |
void |
Deletes a texture and frees its resources |
DeleteTexture |
ImGuiAppTextureInfo textureInfo |
void |
Deletes a texture and frees its resources (convenience overload) |
GetWindowSize |
Vector2 |
Returns the current window size | |
SetClipboardText |
string text |
void |
Sets the clipboard text |
GetClipboardText |
string |
Gets the clipboard text |
ImGuiAppConfig
Class
Configuration for the ImGui application.
Properties
Name | Type | Description |
---|---|---|
Title |
string |
The window title |
IconPath |
string |
The file path to the application window icon |
InitialWindowState |
ImGuiAppWindowState |
The initial state of the application window |
TestMode |
bool |
Whether the application is running in test mode |
Fonts |
Dictionary<string, byte[]> |
Font name to font data mapping |
EnableUnicodeSupport |
bool |
Whether to enable Unicode and emoji support (default: true ) |
OnStart |
Action |
Called when the application starts |
OnUpdate |
Action<float> |
Called each frame before rendering (param: delta time) |
OnRender |
Action<float> |
Called each frame for rendering (param: delta time) |
OnAppMenu |
Action |
Called each frame for rendering the application menu |
OnMoveOrResize |
Action |
Called when the application window is moved or resized |
SaveIniSettings |
bool |
Whether ImGui should save window settings to imgui.ini |
PerformanceSettings |
ImGuiAppPerformanceSettings |
Performance settings for throttled rendering |
ImGuiAppPerformanceSettings
Class
Configuration for performance optimization and throttled rendering. Uses precise sleep-based timing control with Thread.Sleep to maintain target frame rates and save system resources when the application is unfocused, idle, or not visible.
Properties
Name | Type | Default | Description |
---|---|---|---|
EnableThrottledRendering |
bool |
true |
Enables/disables throttled rendering feature |
FocusedFps |
double |
30.0 |
Target frame rate when the window is focused and active |
UnfocusedFps |
double |
5.0 |
Target frame rate when the window is unfocused |
IdleFps |
double |
10.0 |
Target frame rate when the application is idle (no user input) |
NotVisibleFps |
double |
2.0 |
Target frame rate when the window is not visible (minimized or hidden) |
EnableIdleDetection |
bool |
true |
Enables/disables idle detection based on user input |
IdleTimeoutSeconds |
double |
30.0 |
Time in seconds without user input before considering the app idle |
Example Usage
ImGuiApp.Start(new ImGuiAppConfig
{
Title = "My Application",
OnRender = OnRender,
PerformanceSettings = new ImGuiAppPerformanceSettings
{
EnableThrottledRendering = true,
FocusedFps = 60.0, // Custom higher rate when focused
UnfocusedFps = 15.0, // Custom rate when unfocused
IdleFps = 2.0, // Custom very low rate when idle
NotVisibleFps = 1.0, // Custom ultra-low rate when minimized
EnableIdleDetection = true,
IdleTimeoutSeconds = 10.0 // Custom idle timeout
}
});
This feature automatically:
- Detects when the window loses/gains focus and visibility state (minimized/hidden)
- Tracks user input (keyboard, mouse movement, clicks, scrolling) for idle detection
- Uses sleep-based timing with Thread.Sleep for precise frame rate control
- Evaluates all applicable throttling conditions and selects the lowest frame rate
- Saves significant CPU and GPU resources without affecting user experience
- Provides instant transitions between different performance states
- Uses conservative defaults: 30 FPS focused, 5 FPS unfocused, 10 FPS idle, 2 FPS not visible
The throttling system uses a "lowest wins" approach - if multiple conditions apply (e.g., unfocused + idle), the lowest frame rate is automatically selected for maximum resource savings.
FontAppearance
Class
A utility class for applying font styles using a using statement.
Constructors
Constructor | Parameters | Description |
---|---|---|
FontAppearance |
string fontName |
Creates a font appearance with the named font at default size |
FontAppearance |
float fontSize |
Creates a font appearance with the default font at the specified size |
FontAppearance |
string fontName, float fontSize |
Creates a font appearance with the named font at the specified size |
Demo Application
Check out the included demo project to see a comprehensive working example:
- Clone or download the repository
- Open the solution in Visual Studio (or run dotnet build)
- Start the ImGuiAppDemo project to see a feature-rich ImGui application
- Explore the different tabs:
- Performance & Throttling: Real-time FPS graph showing sleep-based throttling in action
- Unicode & Emojis: Test character rendering with extended Unicode support
- Widgets & Layout: Comprehensive ImGui widget demonstrations
- Graphics & Plotting: Custom drawing and data visualization examples
The Performance & Throttling tab includes a live graph that visualizes frame rate changes as you focus/unfocus the window, let it go idle, or minimize it - perfect for seeing the throttling system work in real-time!
Contributing
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
Please make sure to update tests as appropriate and adhere to the existing coding style.
License
This project is licensed under the MIT License - see the LICENSE.md file for details.
Versioning
Check the CHANGELOG.md for detailed release notes and version changes.
Acknowledgements
- Dear ImGui - The immediate mode GUI library
- Hexa.NET.ImGui - .NET bindings for Dear ImGui
- Silk.NET - .NET bindings for OpenGL and windowing
- All contributors and the .NET community for their support
Support
If you encounter any issues or have questions, please open an issue.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Hexa.NET.ImGui (>= 2.2.8.4)
- ktsu.Invoker (>= 1.1.0)
- ktsu.ScopedAction (>= 1.1.2)
- ktsu.StrongPaths (>= 1.3.2)
- Silk.NET (>= 2.22.0)
- Silk.NET.Assimp (>= 2.22.0)
- Silk.NET.Direct3D12 (>= 2.22.0)
- Silk.NET.Input.Extensions (>= 2.22.0)
- Silk.NET.Input.Sdl (>= 2.22.0)
- Silk.NET.OpenGLES (>= 2.22.0)
- Silk.NET.OpenXR (>= 2.22.0)
- Silk.NET.Windowing.Sdl (>= 2.22.0)
- SixLabors.ImageSharp (>= 3.1.10)
- System.Text.Json (>= 9.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
2.1.7 | 382 | 8/8/2025 |
2.1.6 | 223 | 8/8/2025 |
2.1.5 | 243 | 8/7/2025 |
2.1.4 | 244 | 8/7/2025 |
2.1.3 | 147 | 7/30/2025 |
2.1.2 | 114 | 7/30/2025 |
2.1.1 | 502 | 7/24/2025 |
2.1.0 | 551 | 7/23/2025 |
2.0.12 | 551 | 7/22/2025 |
2.0.11 | 516 | 7/22/2025 |
2.0.10 | 516 | 7/22/2025 |
2.0.8 | 515 | 7/22/2025 |
2.0.7-pre.1 | 297 | 7/20/2025 |
2.0.6 | 167 | 7/18/2025 |
1.12.5-pre.13 | 140 | 4/28/2025 |
1.12.5-pre.12 | 132 | 4/28/2025 |
1.12.5-pre.11 | 146 | 4/28/2025 |
1.12.5-pre.10 | 139 | 4/28/2025 |
1.12.5-pre.9 | 154 | 4/28/2025 |
1.12.5-pre.8 | 120 | 4/27/2025 |
1.12.5-pre.7 | 117 | 4/27/2025 |
1.12.5-pre.6 | 116 | 4/27/2025 |
1.12.5-pre.5 | 63 | 4/26/2025 |
1.12.5-pre.4 | 72 | 4/25/2025 |
1.12.5-pre.3 | 142 | 4/8/2025 |
1.12.5-pre.2 | 121 | 4/4/2025 |
1.12.5-pre.1 | 126 | 4/4/2025 |
1.12.4 | 781 | 4/4/2025 |
1.12.3 | 297 | 3/30/2025 |
1.12.2 | 596 | 3/30/2025 |
1.12.1 | 134 | 3/29/2025 |
1.12.0 | 188 | 3/21/2025 |
1.11.1-pre.1 | 144 | 3/20/2025 |
1.11.0 | 217 | 3/19/2025 |
1.10.0 | 227 | 3/17/2025 |
1.9.0 | 163 | 3/15/2025 |
1.8.1 | 152 | 3/15/2025 |
1.8.0 | 243 | 3/14/2025 |
1.7.1 | 240 | 3/12/2025 |
1.7.0 | 266 | 3/12/2025 |
1.6.1-pre.1 | 141 | 3/12/2025 |
1.6.0 | 271 | 3/12/2025 |
1.5.1-pre.1 | 149 | 3/11/2025 |
1.5.0 | 344 | 3/7/2025 |
1.4.1-pre.3 | 186 | 3/6/2025 |
1.4.1-pre.2 | 79 | 2/19/2025 |
1.4.1-pre.1 | 92 | 2/17/2025 |
1.4.0 | 386 | 2/17/2025 |
1.3.1-pre.1 | 86 | 2/11/2025 |
1.3.0 | 831 | 2/7/2025 |
1.2.1-pre.1 | 80 | 2/6/2025 |
1.2.0 | 278 | 2/5/2025 |
1.1.0 | 1,066 | 1/5/2025 |
1.0.12 | 216 | 12/28/2024 |
1.0.12-pre.11 | 90 | 1/4/2025 |
1.0.12-pre.10 | 86 | 1/3/2025 |
1.0.12-pre.9 | 89 | 1/3/2025 |
1.0.12-pre.8 | 85 | 1/3/2025 |
1.0.12-pre.7 | 77 | 1/3/2025 |
1.0.12-pre.6 | 81 | 1/1/2025 |
1.0.12-pre.5 | 112 | 12/31/2024 |
1.0.12-pre.4 | 72 | 12/29/2024 |
1.0.12-pre.3 | 76 | 12/28/2024 |
1.0.12-pre.2 | 92 | 12/27/2024 |
1.0.12-pre.1 | 65 | 12/27/2024 |
1.0.11-pre.1 | 70 | 12/27/2024 |
1.0.10-pre.1 | 78 | 12/27/2024 |
1.0.9 | 162 | 12/26/2024 |
1.0.8 | 147 | 12/26/2024 |
1.0.7 | 155 | 12/25/2024 |
1.0.6 | 184 | 12/24/2024 |
1.0.5 | 159 | 12/23/2024 |
1.0.4 | 120 | 12/23/2024 |
1.0.3 | 290 | 12/19/2024 |
1.0.2 | 188 | 12/17/2024 |
1.0.1 | 205 | 12/13/2024 |
1.0.0 | 231 | 12/9/2024 |
1.0.0-alpha.76 | 138 | 12/7/2024 |
1.0.0-alpha.75 | 88 | 12/6/2024 |
1.0.0-alpha.74 | 116 | 12/5/2024 |
1.0.0-alpha.73 | 189 | 12/2/2024 |
1.0.0-alpha.72 | 77 | 12/2/2024 |
1.0.0-alpha.71 | 101 | 12/1/2024 |
1.0.0-alpha.70 | 103 | 11/30/2024 |
1.0.0-alpha.69 | 93 | 11/29/2024 |
1.0.0-alpha.68 | 126 | 11/28/2024 |
1.0.0-alpha.67 | 128 | 11/26/2024 |
1.0.0-alpha.66 | 178 | 11/21/2024 |
1.0.0-alpha.65 | 131 | 11/20/2024 |
1.0.0-alpha.64 | 142 | 11/17/2024 |
1.0.0-alpha.63 | 80 | 11/15/2024 |
1.0.0-alpha.62 | 104 | 11/14/2024 |
1.0.0-alpha.61 | 124 | 11/13/2024 |
1.0.0-alpha.60 | 173 | 11/7/2024 |
1.0.0-alpha.59 | 86 | 11/7/2024 |
1.0.0-alpha.58 | 107 | 11/6/2024 |
1.0.0-alpha.57 | 120 | 11/5/2024 |
1.0.0-alpha.56 | 225 | 11/2/2024 |
1.0.0-alpha.55 | 82 | 11/1/2024 |
1.0.0-alpha.54 | 361 | 10/18/2024 |
1.0.0-alpha.53 | 343 | 10/9/2024 |
1.0.0-alpha.52 | 114 | 10/8/2024 |
1.0.0-alpha.51 | 162 | 10/5/2024 |
1.0.0-alpha.50 | 101 | 10/4/2024 |
1.0.0-alpha.49 | 296 | 9/25/2024 |
1.0.0-alpha.48 | 109 | 9/24/2024 |
1.0.0-alpha.47 | 129 | 9/21/2024 |
1.0.0-alpha.46 | 119 | 9/19/2024 |
1.0.0-alpha.45 | 93 | 9/19/2024 |
1.0.0-alpha.44 | 103 | 9/19/2024 |
1.0.0-alpha.43 | 72 | 9/19/2024 |
1.0.0-alpha.42 | 113 | 9/19/2024 |
1.0.0-alpha.41 | 130 | 9/18/2024 |
1.0.0-alpha.40 | 92 | 9/18/2024 |
1.0.0-alpha.39 | 98 | 9/18/2024 |
1.0.0-alpha.38 | 90 | 9/18/2024 |
1.0.0-alpha.37 | 148 | 9/18/2024 |
1.0.0-alpha.36 | 248 | 9/14/2024 |
## v2.0.11 (patch)
Changes since v2.0.10:
- Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent))
- Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent))
- Add NotVisibleFps setting for ultra-low frame rate when minimized ([@Cursor Agent](https://github.com/Cursor Agent))
- Improve performance throttling with multi-condition rate selection ([@Cursor Agent](https://github.com/Cursor Agent))
- Implement deferred performance updates to prevent mid-cycle rate changes ([@Cursor Agent](https://github.com/Cursor Agent))
- Improve window focus detection and add debug logging for throttling ([@Cursor Agent](https://github.com/Cursor Agent))
- Remove blank lines ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix VSync to prevent resource spikes when unfocused; update .NET SDK. ([@Cursor Agent](https://github.com/Cursor Agent))
- Remove documentation for deferred FPS/UPS update fix. ([@Cursor Agent](https://github.com/Cursor Agent))
- Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent))
- Remove focus checks from input event handlers ([@Cursor Agent](https://github.com/Cursor Agent))
- Implement lowest frame rate throttling with comprehensive condition evaluation ([@Cursor Agent](https://github.com/Cursor Agent))
- Cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Simplify performance update logic and remove unnecessary tracking ([@Cursor Agent](https://github.com/Cursor Agent))
- Simplify VSync management and remove unnecessary context checks ([@Cursor Agent](https://github.com/Cursor Agent))
- Cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Add window visibility throttling for ultra-low resource usage ([@Cursor Agent](https://github.com/Cursor Agent))
- Improve VSync and resource management for unfocused application states ([@Cursor Agent](https://github.com/Cursor Agent))
- Implement sleep-based frame rate throttling and remove UPS settings ([@Cursor Agent](https://github.com/Cursor Agent))
- Fix input focus detection to prevent incorrect idle state management ([@Cursor Agent](https://github.com/Cursor Agent))
- Cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Style cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance performance throttling with lowest-rate selection logic ([@Cursor Agent](https://github.com/Cursor Agent))
- Remove debug throttling properties and simplify focus handling ([@Cursor Agent](https://github.com/Cursor Agent))
- Cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Increase NotVisibleFps from 0.2 to 2.0 for better background performance ([@Cursor Agent](https://github.com/Cursor Agent))
- Add real-time FPS graph with throttling state visualization ([@Cursor Agent](https://github.com/Cursor Agent))
- Fix input focus detection and add throttling debug info ([@Cursor Agent](https://github.com/Cursor Agent))
- Fix performance rate sync and update throttling to prevent ImGui crashes ([@Cursor Agent](https://github.com/Cursor Agent))
- Cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent))
- Adjust not visible frame rate to 0.2 FPS for better resource conservation ([@Cursor Agent](https://github.com/Cursor Agent))
- Remove VSync throttling configuration and related code ([@Cursor Agent](https://github.com/Cursor Agent))
- Merge branch 'cursor/investigate-unfocused-app-resource-usage-045c' of https://github.com/ktsu-dev/ImGuiApp into cursor/investigate-unfocused-app-resource-usage-045c ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.10 (patch)
Changes since v2.0.9:
- Use PackageReleaseNotesFile to handle changelog release notes more robustly ([@Cursor Agent](https://github.com/Cursor Agent))
## v2.0.9 (patch)
Changes since v2.0.8:
- Add Nerd Font tab to ImGuiAppDemo, showcasing various icon sets including Powerline, Font Awesome, Material Design, Weather, Devicons, Octicons, and Brand Logos. Enhanced user guidance for using Nerd Fonts effectively. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor demo app with tabbed interface and improved Unicode/emoji display ([@Cursor Agent](https://github.com/Cursor Agent))
- Improve font memory management with custom font handle tracking ([@Cursor Agent](https://github.com/Cursor Agent))
- Add NotoEmoji font support to ImGuiApp. Introduced NotoEmoji.ttf as a resource for emoji display and updated related resource files. Enhanced PowerShell script to preserve manually placed emoji fonts during Nerd Font installation, ensuring full emoji support in the application. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enable Unicode and emoji support by default in ImGuiApp ([@Cursor Agent](https://github.com/Cursor Agent))
- Enhance ImGuiApp configuration with debugging options ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiAppDemo to streamline tab rendering and remove redundant performance tab code ([@matt-edmondson](https://github.com/matt-edmondson))
- Add launch settings for ImGuiAppDemo with native debugging enabled ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance FontHelper by adding support for extended Unicode and emoji glyph ranges. Introduced initialization flags and cleanup methods to manage memory more effectively. This refactor improves glyph range handling and prevents memory deallocation issues. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor Performance tab into separate method and reorder tabs ([@Cursor Agent](https://github.com/Cursor Agent))
- Refactor FontHelper for flexible Unicode support with user-configured fonts ([@Cursor Agent](https://github.com/Cursor Agent))
- Improve rendering precision and pixel-perfect techniques in ImGui rendering ([@Cursor Agent](https://github.com/Cursor Agent))
- Enhance emoji font support in ImGuiApp. Introduced LoadEmojiFont method to merge emoji fonts with main fonts, ensuring proper display of emojis. Updated FontHelper to manage emoji-specific glyph ranges separately, improving clarity and avoiding conflicts with main font symbols. Updated ImGuiAppDemo to showcase full emoji range support. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor FontHelper to modularize glyph range additions for Latin Extended and emoji characters. Updated ImGuiApp to utilize the new methods for improved clarity and maintainability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add emoji support to Unicode character ranges in ImGuiApp ([@Cursor Agent](https://github.com/Cursor Agent))
- Merge branch 'cursor/address-question-mark-glyphs-8940' of https://github.com/ktsu-dev/ImGuiApp into cursor/address-question-mark-glyphs-8940 ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix scissor rectangle calculations in ImGuiController to ensure non-negative dimensions, preventing potential rendering issues. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor FontHelper to simplify glyph range additions by removing unnecessary type casting to ushort. This change enhances the handling of character ranges for emoji and Latin Extended characters, improving code clarity and maintainability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add Reset method tests and reset performance-related state fields ([@Cursor Agent](https://github.com/Cursor Agent))
- Add performance throttling with configurable rendering and idle detection ([@Cursor Agent](https://github.com/Cursor Agent))
- Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent))
- Fix merge conflict in performance tab text and update FPS description ([@Cursor Agent](https://github.com/Cursor Agent))
- Improve VSync handling during frame rate throttling ([@Cursor Agent](https://github.com/Cursor Agent))
- Add Unicode and emoji support with configurable font rendering ([@Cursor Agent](https://github.com/Cursor Agent))
- Update default font point size in FontAppearance to 14 for improved readability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiFontConfig to enhance Unicode support by consolidating glyph range additions and improving code clarity. Removed redundant comments and streamlined the builder initialization process. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor font loading in ImGuiApp to utilize pre-allocated memory for both main and emoji fonts. This change improves memory management by reusing allocated handles, enhancing performance and reducing memory overhead during font loading. Updated related methods to reflect the new memory handling approach. ([@matt-edmondson](https://github.com/matt-edmondson))
- Changes from background agent bc-34f5e701-6497-49ba-b614-0b4bc857f398 ([@Cursor Agent](https://github.com/Cursor Agent))
- Update default font size check in ImGuiApp to use FontAppearance.DefaultFontPointSize for improved consistency in font handling. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add Unicode and emoji font support with cross-platform detection ([@Cursor Agent](https://github.com/Cursor Agent))
- Add support for Nerd Font icon ranges in FontHelper. Introduced AddNerdFontRanges method to include various icon sets such as Font Awesome, Material Design Icons, and Weather Icons, enhancing glyph range management. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiController for improved code clarity ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor FontHelper and ImGuiApp to simplify character addition and update default font key for compatibility. Removed unnecessary type checks in FontHelper for character ranges and adjusted font index storage in ImGuiApp to dynamically reflect the default font point size. ([@matt-edmondson](https://github.com/matt-edmondson))
- Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent))
- Refactor FontHelper to streamline Unicode and emoji range handling. Removed unused methods and improved memory management for glyph ranges. Updated ImGuiApp to utilize FontHelper for extended Unicode support. ([@matt-edmondson](https://github.com/matt-edmondson))
- Merge remote-tracking branch 'origin/main' into cursor/address-question-mark-glyphs-d05e ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace RobotoMonoNerdFont with NerdFont in ImGuiApp configuration. Add PowerShell script for interactive Nerd Font installation and management, including backup and recovery features. Update resource files to reflect new font integration. ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.8 (patch)
Changes since v2.0.7:
- Improve VSync handling during frame rate throttling ([@Cursor Agent](https://github.com/Cursor Agent))
- Update default performance settings for better resource efficiency ([@Cursor Agent](https://github.com/Cursor Agent))
- Merge main into feature branch and integrate performance tab ([@Cursor Agent](https://github.com/Cursor Agent))
- Add Reset method tests and reset performance-related state fields ([@Cursor Agent](https://github.com/Cursor Agent))
- Add performance throttling with configurable rendering and idle detection ([@Cursor Agent](https://github.com/Cursor Agent))
## v2.0.7 (patch)
Changes since v2.0.6:
- Fix scissor rectangle calculations in ImGuiController to ensure non-negative dimensions, preventing potential rendering issues. ([@matt-edmondson](https://github.com/matt-edmondson))
- Improve rendering precision and pixel-perfect techniques in ImGui rendering ([@Cursor Agent](https://github.com/Cursor Agent))
- Enhance ImGuiApp configuration with debugging options ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance ImGuiAppDemo with new features and UI updates ([@matt-edmondson](https://github.com/matt-edmondson))
- Add launch settings for ImGuiAppDemo with native debugging enabled ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiController for improved code clarity ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.7-pre.1 (prerelease)
Incremental prerelease update.
## v2.0.6 (patch)
Changes since v2.0.5:
- Add GitHub Actions workflow for automatic SDK updates ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.5 (patch)
Changes since v2.0.4:
- Update CLAUDE.md with additional testing and build instructions; enhance PSBuild script to improve release notes truncation logic for compliance with NuGet character limits, including detailed logging for better traceability. ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.4 (patch)
Changes since v2.0.3:
- Refactor Invoke-DotNetPack function in PSBuild script to improve handling of release notes. Updated logic to create a temporary file for truncated content exceeding NuGet's 35,000 character limit, ensuring compliance and enhancing logging for better traceability. ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.3 (patch)
Changes since v2.0.2:
- Enhance Invoke-DotNetPack function in PSBuild script to handle release notes exceeding NuGet's 35,000 character limit. Added logic to truncate long release notes and create a temporary file for compliance, with appropriate logging and cleanup of temporary files after packaging. ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.2 (patch)
Changes since v2.0.1:
- Enhance Test-IsLibraryOnlyProject function in update-winget-manifests.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.1 (patch)
Changes since v2.0.0:
- Enhance New-Changelog function in PSBuild script to truncate release notes exceeding NuGet's 35,000 character limit. This addition ensures compliance with NuGet requirements while providing informative logging about truncation. ([@matt-edmondson](https://github.com/matt-edmondson))
## v2.0.0 (major)
Changes since v1.0.0:
- Enhance documentation ([@matt-edmondson](https://github.com/matt-edmondson))
- Update packages ([@matt-edmondson](https://github.com/matt-edmondson))
- Update build scripts ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance Get-GitRemoteInfo function in update-winget-manifests.ps1 ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor mouse button handling in ImGuiController ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiApp and related classes for thread safety ([@matt-edmondson](https://github.com/matt-edmondson))
- Update DESCRIPTION.md to clarify the purpose of the library as a .NET application scaffolding tool for Dear ImGui, utilizing Silk.NET and ImGui.NET. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor variable declarations in ImGuiApp and related files to use 'var' for improved readability and consistency. Update .editorconfig to change the suggestion level for 'dotnet_style_prefer_auto_properties' from silent to suggestion. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance DPI scaling and font rendering for cross-platform compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement texture caching and memory optimization in ImGuiApp. Introduced a concurrent dictionary for texture management, added a method to load textures with pooled memory usage, and implemented a cleanup function for unused textures. Refactored the texture upload process for improved performance and reliability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add better font management to ImGuiApp and icon to demo project ([@matt-edmondson](https://github.com/matt-edmondson))
- Add constructors and documentation to FontAppearance class ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor DPI detection logic in ForceDpiAware ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor font loading logic in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix version script to exclude merge commits and order logs correctly ([@matt-edmondson](https://github.com/matt-edmondson))
- Add Moq package and enhance ImGuiAppTests with new unit tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Renamed several classes and moved them to their own source files ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance README.md with improved structure and content. Added new sections for Introduction, API Reference, and Acknowledgements. Updated features list for clarity and detail. Included usage examples for application setup and texture management. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update project SDK references to ktsu.Sdk version 1.8.0 ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove redundant release process logging from Invoke-DotNetPublish function in PSBuild script. This cleanup enhances code clarity by eliminating unnecessary information output related to NuGet package publishing. ([@matt-edmondson](https://github.com/matt-edmondson))
- Style conformance ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor font management in ImGuiApp to improve memory handling and performance. Added logic to prevent unnecessary font reloads based on scale factor changes. Implemented cleanup for pinned font data during window closing and enhanced font initialization process. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enable debug tracing in versioning and changelog scripts; handle empty tag scenarios ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace LICENSE file with LICENSE.md and update copyright information ([@matt-edmondson](https://github.com/matt-edmondson))
- Renamed metadata files ([@matt-edmondson](https://github.com/matt-edmondson))
- Update license links in README.md ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove imgui.ini files and add configuration option for saving window settings ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font management and loading in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .gitignore to include additional IDE and OS-specific files ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .editorconfig, .gitignore, and .runsettings; refactor ImGuiApp code for type consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance PSBuild script to make NuGet API key optional ([@matt-edmondson](https://github.com/matt-edmondson))
- Add an overload to ImGuiController.Texture to allow specifying the pixel format ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix mouse wheel scrolling and improve API usage ([@Damon3000s](https://github.com/Damon3000s))
- Refactor font loading to use unmanaged memory ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor texture handling and enhance logging in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace deprecated ImGui enum value ([@Damon3000s](https://github.com/Damon3000s))
- Re-add icon to fix LFS ([@matt-edmondson](https://github.com/matt-edmondson))
- Update GitHub Actions workflow and enhance PSBuild script ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .NET workflow to restrict push triggers and enhance NuGet API key handling ([@matt-edmondson](https://github.com/matt-edmondson))
- Call EndChild instead of just End ([@Damon3000s](https://github.com/Damon3000s))
- Add an image to the demo app to test the texture upload ([@matt-edmondson](https://github.com/matt-edmondson))
- Font system cleanup ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement dynamic font scaling and introduce debug logging in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix font rendering issues with Hexa.NET.ImGui ([@matt-edmondson](https://github.com/matt-edmondson))
- Update font size handling and mapping in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font atlas handling and logging in ImGuiController ([@matt-edmondson](https://github.com/matt-edmondson))
- Reuse the texture upload from ImGuiController to remove code duplication ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiApp to support Linux and Windows console behavior ([@matt-edmondson](https://github.com/matt-edmondson))
- Update packages ([@matt-edmondson](https://github.com/matt-edmondson))
- Try a different method of memory marshaling and reorder some thigns to try fix the font crash ([@matt-edmondson](https://github.com/matt-edmondson))
- Add LICENSE template ([@matt-edmondson](https://github.com/matt-edmondson))
- Replace the Silk.NET window invoker with ktsu.Invoker ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove spelling check ignore comments in ImGuiApp files ([@matt-edmondson](https://github.com/matt-edmondson))
- Update files from Resources.resx ([@Damon3000s](https://github.com/Damon3000s))
- Update ImGuiApp to use Hexa.NET.ImGui for Dear ImGui bindings ([@matt-edmondson](https://github.com/matt-edmondson))
- Apply new editorconfig ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font handling and error management in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Add Silk.NET packages for enhanced graphics and input support ([@matt-edmondson](https://github.com/matt-edmondson))
- Always call ImGui.End for ImGui.Begin ([@Damon3000s](https://github.com/Damon3000s))
- Enhance DPI detection and scaling for Linux and WSL ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance README.md with a new "Getting Started" section detailing prerequisites for .NET 8.0 and Windows OS. Clean up code formatting in the Program class by removing unnecessary blank lines for improved readability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix crash on shutdown when imgui would try to free memory owned by dotnet ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DPI scaling support for Wayland in ForceDpiAware ([@matt-edmondson](https://github.com/matt-edmondson))
- Add additional demo features to ImGuiApp, including a Style Editor, Metrics window, and About section. Enhanced the main demo window with new widgets and improved layout options. Implemented real-time plotting functionality and updated menu items for better navigation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove unnesscessary threading protections that were speculative fixes for the font ownership crash ([@matt-edmondson](https://github.com/matt-edmondson))
- Add conditional compilation for contextLock in ImGuiController ([@matt-edmondson](https://github.com/matt-edmondson))
- Add VSCode configuration files for .NET Core development ([@matt-edmondson](https://github.com/matt-edmondson))
- Add automation scripts for metadata and version management ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix GitHub Actions build failures on forked repositories ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for ForceDpiAware and ImGuiApp functionality ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove obsolete build configuration files and scripts, including Directory.Build.props, Directory.Build.targets, and various PowerShell scripts for metadata and version management. Introduce a new PowerShell module, PSBuild, for automating the build, test, package, and release processes for .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove icon to fix LFS ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate from ImGui.NET to Hexa.NET.ImGui and fix line endings ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiApp startup process by consolidating window initialization and event handler setup into dedicated methods. This improves code organization and readability while maintaining functionality. ([@matt-edmondson](https://github.com/matt-edmondson))
- Throw an exception if the font is not ready yet for some reason ([@matt-edmondson](https://github.com/matt-edmondson))
- Update copyright headers in ImGuiApp files to reflect ownership and licensing. Ensure consistent formatting across multiple files, enhancing clarity and compliance with licensing requirements. ([@matt-edmondson](https://github.com/matt-edmondson))
- Review feedback ([@Damon3000s](https://github.com/Damon3000s))
- Enhance font rendering settings for cross-platform compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font configuration and memory management in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.16-pre.1 (prerelease)
Changes since v1.12.15:
## v1.12.15 (patch)
Changes since v1.12.14:
- Update ImGuiApp to use Hexa.NET.ImGui for Dear ImGui bindings ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.14 (patch)
Changes since v1.12.13:
- Refactor font loading logic in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.13 (patch)
Changes since v1.12.12:
- Enhance font management and loading in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font atlas handling and logging in ImGuiController ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.12 (patch)
Changes since v1.12.11:
- Refactor texture handling and enhance logging in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement dynamic font scaling and introduce debug logging in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.12-pre.3 (prerelease)
Changes since v1.12.12-pre.2:
## v1.12.12-pre.2 (prerelease)
Changes since v1.12.12-pre.1:
## v1.12.12-pre.1 (prerelease)
Changes since v1.12.12:
- Merge 0aa9505c62c546778ed2242018d32dbd8f19814b into 879630f8ad5f5c68c42945b69136d1663b963154 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.12.11 (patch)
Changes since v1.12.10:
- Enhance font configuration and memory management in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.10 (patch)
Changes since v1.12.9:
- Remove imgui.ini files and add configuration option for saving window settings ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.9 (patch)
Changes since v1.12.8:
- Refactor mouse button handling in ImGuiController ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.8 (patch)
Changes since v1.12.7:
- Update .NET workflow to restrict push triggers and enhance NuGet API key handling ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.7 (patch)
Changes since v1.12.6:
- Enhance DPI scaling and font rendering for cross-platform compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor DPI detection logic in ForceDpiAware ([@matt-edmondson](https://github.com/matt-edmondson))
- Update .editorconfig, .gitignore, and .runsettings; refactor ImGuiApp code for type consistency ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix font rendering issues with Hexa.NET.ImGui ([@matt-edmondson](https://github.com/matt-edmondson))
- Update font size handling and mapping in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiApp to support Linux and Windows console behavior ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font handling and error management in ImGuiApp ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance DPI detection and scaling for Linux and WSL ([@matt-edmondson](https://github.com/matt-edmondson))
- Add DPI scaling support for Wayland in ForceDpiAware ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix GitHub Actions build failures on forked repositories ([@matt-edmondson](https://github.com/matt-edmondson))
- Migrate from ImGui.NET to Hexa.NET.ImGui and fix line endings ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font rendering settings for cross-platform compatibility ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.6 (patch)
Changes since v1.12.5:
- Update ImGui.NET references to Hexa.NET.ImGui and bump project SDK versions ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor font configuration handling in ImGui classes ([@matt-edmondson](https://github.com/matt-edmondson))
- Fix ImGuiController font loading and buffer data handling by updating glyph range and removing unnecessary casts ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance font configuration in ImGuiApp and ImGuiController by adding RasterizerDensity and improving texture data handling. Updated font loading to utilize ImFontConfig directly, ensuring better rendering quality and memory management. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiApp and ImGuiController to improve font handling and context management. Updated font configuration to use ImFontConfig directly, removed unnecessary casts, and ensured proper context tracking. Adjusted image loading in demo to eliminate casting issues. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.6-pre.10 (prerelease)
Changes since v1.12.6-pre.9:
## v1.12.6-pre.9 (prerelease)
Changes since v1.12.6-pre.8:
## v1.12.6-pre.8 (prerelease)
Changes since v1.12.6-pre.7:
## v1.12.6-pre.7 (prerelease)
Changes since v1.12.6-pre.6:
## v1.12.6-pre.6 (prerelease)
Changes since v1.12.6-pre.5:
## v1.12.6-pre.5 (prerelease)
Changes since v1.12.6-pre.4:
## v1.12.6-pre.4 (prerelease)
Changes since v1.12.6-pre.3:
## v1.12.6-pre.3 (prerelease)
Changes since v1.12.6-pre.2:
- Bump the ktsu group with 2 updates ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.12.6-pre.2 (prerelease)
Changes since v1.12.6-pre.1:
## v1.12.6-pre.1 (prerelease)
Incremental prerelease update.
## v1.12.5 (patch)
Changes since v1.12.4:
- Update DESCRIPTION.md to clarify the purpose of the library as a .NET application scaffolding tool for Dear ImGui, utilizing Silk.NET and ImGui.NET. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor variable declarations in ImGuiApp and related files to use 'var' for improved readability and consistency. Update .editorconfig to change the suggestion level for 'dotnet_style_prefer_auto_properties' from silent to suggestion. ([@matt-edmondson](https://github.com/matt-edmondson))
- Implement texture caching and memory optimization in ImGuiApp. Introduced a concurrent dictionary for texture management, added a method to load textures with pooled memory usage, and implemented a cleanup function for unused textures. Refactored the texture upload process for improved performance and reliability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add Moq package and enhance ImGuiAppTests with new unit tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance README.md with improved structure and content. Added new sections for Introduction, API Reference, and Acknowledgements. Updated features list for clarity and detail. Included usage examples for application setup and texture management. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update project SDK references to ktsu.Sdk version 1.8.0 ([@matt-edmondson](https://github.com/matt-edmondson))
- Style conformance ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor font management in ImGuiApp to improve memory handling and performance. Added logic to prevent unnecessary font reloads based on scale factor changes. Implemented cleanup for pinned font data during window closing and enhanced font initialization process. ([@matt-edmondson](https://github.com/matt-edmondson))
- Enhance README.md with a new "Getting Started" section detailing prerequisites for .NET 8.0 and Windows OS. Clean up code formatting in the Program class by removing unnecessary blank lines for improved readability. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add additional demo features to ImGuiApp, including a Style Editor, Metrics window, and About section. Enhanced the main demo window with new widgets and improved layout options. Implemented real-time plotting functionality and updated menu items for better navigation. ([@matt-edmondson](https://github.com/matt-edmondson))
- Add VSCode configuration files for .NET Core development ([@matt-edmondson](https://github.com/matt-edmondson))
- Add unit tests for ForceDpiAware and ImGuiApp functionality ([@matt-edmondson](https://github.com/matt-edmondson))
- Remove obsolete build configuration files and scripts, including Directory.Build.props, Directory.Build.targets, and various PowerShell scripts for metadata and version management. Introduce a new PowerShell module, PSBuild, for automating the build, test, package, and release processes for .NET applications. ([@matt-edmondson](https://github.com/matt-edmondson))
- Refactor ImGuiApp startup process by consolidating window initialization and event handler setup into dedicated methods. This improves code organization and readability while maintaining functionality. ([@matt-edmondson](https://github.com/matt-edmondson))
- Update copyright headers in ImGuiApp files to reflect ownership and licensing. Ensure consistent formatting across multiple files, enhancing clarity and compliance with licensing requirements. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.12.5-pre.13 (prerelease)
Changes since v1.12.5-pre.12:
- Bump Moq from 4.20.70 to 4.20.72 ([@dependabot[bot]](https://github.com/dependabot[bot]))
- Bump SixLabors.ImageSharp from 3.1.7 to 3.1.8 ([@dependabot[bot]](https://github.com/dependabot[bot]))
## v1.12.5-pre.12 (prerelease)
Changes since v1.12.5-pre.11:
- Update buffer configuration in ImGuiApp class ([@github-actions[bot]](https://github.com/github-actions[bot]))
## v1.12.5-pre.11 (prerelease)
Changes since v1.12.5-pre.10:
- Add OpenGL context change handling and texture reloading in ImGuiApp ([@github-actions[bot]](https://github.com/github-actions[bot]))
- Add texture reloading test to ImGuiAppTests ([@github-actions[bot]](https://github.com/github-actions[bot]))
## v1.12.5-pre.10 (prerelease)
Changes since v1.12.5-pre.9:
- Refactor image handling in ImGuiApp for improved memory management ([@github-actions[bot]](https://github.com/github-actions[bot]))
## v1.12.5-pre.9 (prerelease)
Changes since v1.12.5-pre.8:
- Add TryGetTexture methods to ImGuiApp for texture retrieval ([@github-actions[bot]](https:... (truncated due to NuGet length limits)