diff --git a/CopyMoonlibs.targets b/CopyMoonlibs.targets index 8998eba..3c89bae 100644 --- a/CopyMoonlibs.targets +++ b/CopyMoonlibs.targets @@ -8,19 +8,19 @@ %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always diff --git a/lib/MoonWorks b/lib/MoonWorks index 4dbd5a2..178a5ea 160000 --- a/lib/MoonWorks +++ b/lib/MoonWorks @@ -1 +1 @@ -Subproject commit 4dbd5a2cbeab38f78274644f3b44fe1fa727f304 +Subproject commit 178a5ea3cfa4ce4ccbcd9e0b6726a8cda791c810 diff --git a/moonlibs/x64/Refresh.dll b/moonlibs/x64/Refresh.dll index 18c4da4..83ac3e9 100644 --- a/moonlibs/x64/Refresh.dll +++ b/moonlibs/x64/Refresh.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfd3a79a93788ce81f4d261835f46e522000aed7e03d76a5a10d270ef9c178df -size 241857 +oid sha256:a83bbfe1deea0aca2dc52ce54b2f28836d5a7629e41cd34df190814c04e5548c +size 134144 diff --git a/src/MoonWorksDearImGuiScaffoldGame.cs b/src/MoonWorksDearImGuiScaffoldGame.cs index 8ee9a81..c5948bb 100644 --- a/src/MoonWorksDearImGuiScaffoldGame.cs +++ b/src/MoonWorksDearImGuiScaffoldGame.cs @@ -19,11 +19,13 @@ class MoonWorksDearImGuiScaffoldGame : Game private uint VertexCount = 0; private uint IndexCount = 0; - private MoonWorks.Graphics.Buffer ImGuiVertexBuffer = null; - private MoonWorks.Graphics.Buffer ImGuiIndexBuffer = null; + private GpuBuffer ImGuiVertexBuffer = null; + private GpuBuffer ImGuiIndexBuffer = null; private TextureStorage TextureStorage; + private ResourceUploader ResourceUploader; + public MoonWorksDearImGuiScaffoldGame( WindowCreateInfo windowCreateInfo, FrameLimiterSettings frameLimiterSettings, @@ -31,6 +33,7 @@ class MoonWorksDearImGuiScaffoldGame : Game ) : base(windowCreateInfo, frameLimiterSettings, 60, debugMode) { TextureStorage = new TextureStorage(); + ResourceUploader = new ResourceUploader(GraphicsDevice); ImGui.CreateContext(); @@ -177,7 +180,7 @@ class MoonWorksDearImGuiScaffoldGame : Game ImGuiVertexBuffer?.Dispose(); VertexCount = (uint)(drawDataPtr.TotalVtxCount * 1.5f); - ImGuiVertexBuffer = MoonWorks.Graphics.Buffer.Create( + ImGuiVertexBuffer = GpuBuffer.Create( GraphicsDevice, BufferUsageFlags.Vertex, VertexCount @@ -189,7 +192,7 @@ class MoonWorksDearImGuiScaffoldGame : Game ImGuiIndexBuffer?.Dispose(); IndexCount = (uint)(drawDataPtr.TotalIdxCount * 1.5f); - ImGuiIndexBuffer = MoonWorks.Graphics.Buffer.Create( + ImGuiIndexBuffer = GpuBuffer.Create( GraphicsDevice, BufferUsageFlags.Index, IndexCount @@ -203,24 +206,24 @@ class MoonWorksDearImGuiScaffoldGame : Game { var cmdList = drawDataPtr.CmdLists[n]; - commandBuffer.SetBufferData( + ResourceUploader.SetBufferData( ImGuiVertexBuffer, - cmdList.VtxBuffer.Data, vertexOffset, - (uint)cmdList.VtxBuffer.Size + new Span((void*) cmdList.VtxBuffer.Data, cmdList.VtxBuffer.Size) ); - commandBuffer.SetBufferData( + ResourceUploader.SetBufferData( ImGuiIndexBuffer, - cmdList.IdxBuffer.Data, indexOffset, - (uint)cmdList.IdxBuffer.Size + new Span((void*) cmdList.IdxBuffer.Data, cmdList.IdxBuffer.Size) ); - vertexOffset += (uint)cmdList.VtxBuffer.Size; - indexOffset += (uint)cmdList.IdxBuffer.Size; + vertexOffset += (uint) cmdList.VtxBuffer.Size; + indexOffset += (uint) cmdList.IdxBuffer.Size; } + ResourceUploader.Upload(); + GraphicsDevice.Submit(commandBuffer); } @@ -249,7 +252,7 @@ class MoonWorksDearImGuiScaffoldGame : Game commandBuffer.BindGraphicsPipeline(ImGuiPipeline); - var vertexUniformOffset = commandBuffer.PushVertexShaderUniforms( + commandBuffer.PushVertexShaderUniforms( Matrix4x4.CreateOrthographicOffCenter(0, ioPtr.DisplaySize.X, ioPtr.DisplaySize.Y, 0, -1, 1) ); @@ -294,9 +297,7 @@ class MoonWorksDearImGuiScaffoldGame : Game commandBuffer.DrawIndexedPrimitives( vertexOffset, indexOffset, - drawCmd.ElemCount / 3, - vertexUniformOffset, - 0 + drawCmd.ElemCount / 3 ); indexOffset += drawCmd.ElemCount; @@ -308,9 +309,9 @@ class MoonWorksDearImGuiScaffoldGame : Game commandBuffer.EndRenderPass(); } - private void BuildFontAtlas() + private unsafe void BuildFontAtlas() { - var commandBuffer = GraphicsDevice.AcquireCommandBuffer(); + var resourceUploader = new ResourceUploader(GraphicsDevice); var io = ImGui.GetIO(); @@ -321,17 +322,14 @@ class MoonWorksDearImGuiScaffoldGame : Game out int bytesPerPixel ); - var fontTexture = Texture.CreateTexture2D( - GraphicsDevice, - (uint)width, - (uint)height, - TextureFormat.R8G8B8A8, - TextureUsageFlags.Sampler + var fontTexture = resourceUploader.CreateTexture2D( + new Span((void*) pixelData, width * height * bytesPerPixel), + (uint) width, + (uint) height ); - commandBuffer.SetTextureData(fontTexture, pixelData, (uint)(width * height * bytesPerPixel)); - - GraphicsDevice.Submit(commandBuffer); + resourceUploader.Upload(); + resourceUploader.Dispose(); io.Fonts.SetTexID(fontTexture.Handle); io.Fonts.ClearTexData();