feat: ImGui debug overlay — FPS, camera position, entity count

- ImGui.NET 1.91.6.1 integrated into Engine.Graphics.Vulkan
- VulkanImGui.cs: font atlas upload (staging → VkImage), sampler,
  descriptor set (COMBINED_IMAGE_SAMPLER), separate pipeline with
  alpha blending, no depth write, dynamic scissor
- ImGui shaders: imgui.vert (ortho MVP push constant) + imgui.frag
  (font texture sampler)
- Dynamic vertex/index buffers (HOST_VISIBLE, grow on demand)
- IRenderer interface: BeginImGuiFrame/EndImGuiFrame default methods
- Program.cs: debug window with FPS, camera pos/target, entity count
- 0 critical validation errors, ~750 FPS with physics + ImGui
This commit is contained in:
emil28092005
2026-06-18 17:34:42 +03:00
parent e67e312d28
commit bfde04b381
14 changed files with 906 additions and 2 deletions
@@ -957,6 +957,57 @@ public unsafe struct VkImageCreateInfo
public VkImageLayout initialLayout;
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct VkImageSubresourceLayers
{
public VkImageAspectFlags aspectMask;
public uint mipLevel;
public uint baseArrayLayer;
public uint layerCount;
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct VkBufferImageCopyRegion
{
public ulong bufferOffset;
public uint bufferRowLength;
public uint bufferImageHeight;
public VkImageSubresourceLayers imageSubresource;
public VkOffset3D imageOffset;
public VkExtent3D imageExtent;
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct VkSamplerCreateInfo
{
public VkStructureType sType;
public nint pNext;
public uint flags;
public VkFilter magFilter;
public VkFilter minFilter;
public VkSamplerMipmapMode mipmapMode;
public VkSamplerAddressMode addressModeU;
public VkSamplerAddressMode addressModeV;
public VkSamplerAddressMode addressModeW;
public float mipLodBias;
public VkBool32 anisotropyEnable;
public float maxAnisotropy;
public VkBool32 compareEnable;
public VkCompareOp compareOp;
public float minLod;
public float maxLod;
public int borderColor;
public VkBool32 unnormalizedCoordinates;
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct VkDescriptorImageInfo
{
public VkSampler sampler;
public VkImageView imageView;
public VkImageLayout imageLayout;
}
[StructLayout(LayoutKind.Sequential)]
public unsafe struct VkPushConstantRange
{