From e758a4f07eb12ea79e4356772c8fff1fce187d0c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Tue, 13 Jul 2021 20:56:10 +0200 Subject: [PATCH] first working version --- Crow/Default.style | 6 ++-- Crow/src/Fill/SvgPicture.cs | 4 +-- Crow/src/GraphicBackends/vkvg/Surface.cs | 2 +- .../src/GraphicBackends/vkvg/VulkanContext.cs | 35 ++++++++++++++----- Crow/src/Interface.cs | 28 +++++++++++---- Directory.Build.props | 2 +- Samples/BasicTests/BasicTests.cs | 6 ++-- 7 files changed, 58 insertions(+), 25 deletions(-) diff --git a/Crow/Default.style b/Crow/Default.style index 8a6d3e6e..46de42c9 100644 --- a/Crow/Default.style +++ b/Crow/Default.style @@ -328,6 +328,6 @@ MessageBox, Popper, Slider, Spinner, TextBox, NumericControl { Margin="0"; BubbleMouseEvent="MouseWheel|Keyboard"; } -TemplatedControl, GenericStack { - CacheEnabled="true"; -} \ No newline at end of file +//TemplatedControl, GenericStack { +// CacheEnabled="true"; +//} \ No newline at end of file diff --git a/Crow/src/Fill/SvgPicture.cs b/Crow/src/Fill/SvgPicture.cs index cd575767..1f1bb12e 100644 --- a/Crow/src/Fill/SvgPicture.cs +++ b/Crow/src/Fill/SvgPicture.cs @@ -126,7 +126,7 @@ namespace Crow widthRatio = heightRatio; } - gr.Save (); + /*gr.Save (); gr.Translate (rect.Left,rect.Top); gr.Scale (widthRatio, heightRatio); @@ -140,7 +140,7 @@ namespace Crow hSVG.RenderCairoSub (gr, "#" + subPart); } - gr.Restore (); + gr.Restore (); */ } } } diff --git a/Crow/src/GraphicBackends/vkvg/Surface.cs b/Crow/src/GraphicBackends/vkvg/Surface.cs index 98a563c7..de7682cf 100644 --- a/Crow/src/GraphicBackends/vkvg/Surface.cs +++ b/Crow/src/GraphicBackends/vkvg/Surface.cs @@ -52,7 +52,7 @@ namespace vkvg // } public void Flush () { - throw new NotImplementedException (); + //throw new NotImplementedException (); } public void WriteToPng (string path) { diff --git a/Crow/src/GraphicBackends/vkvg/VulkanContext.cs b/Crow/src/GraphicBackends/vkvg/VulkanContext.cs index 39579129..8ca1eb6d 100644 --- a/Crow/src/GraphicBackends/vkvg/VulkanContext.cs +++ b/Crow/src/GraphicBackends/vkvg/VulkanContext.cs @@ -50,9 +50,13 @@ namespace vkvg { string[] EnabledDeviceExtensions => new string[] { Ext.D.VK_KHR_swapchain }; uint width, height; - + public void WaitIdle() => dev.WaitIdle (); public VulkanContext (IntPtr hWin, uint _width, uint _height, bool vsync = false) { this.hWin = hWin; + Instance.VALIDATION = true; + /*Instance.RENDER_DOC_CAPTURE = true;*/ + + SwapChain.IMAGES_USAGE = VkImageUsageFlags.ColorAttachment | VkImageUsageFlags.TransferDst; List instExts = new List (Glfw3.GetRequiredInstanceExtensions ()); if (EnabledInstanceExtensions != null) @@ -100,8 +104,9 @@ namespace vkvg { internal vke.Image blitSource; public void BuildBlitCommand (vkvg.Surface surf) { + cmdPool.Reset(); - blitSource = new vke.Image (dev, new VkImage((ulong)surf.VkImage.ToInt64()), Vulkan.VkFormat.R8g8b8a8Unorm, + blitSource = new vke.Image (dev, new VkImage((ulong)surf.VkImage.ToInt64()), Vulkan.VkFormat.B8g8r8a8Unorm, Vulkan.VkImageUsageFlags.TransferSrc | Vulkan.VkImageUsageFlags.TransferDst | Vulkan.VkImageUsageFlags.ColorAttachment, width, height); @@ -110,17 +115,31 @@ namespace vkvg { vke.PrimaryCommandBuffer cmd = cmds[i]; cmd.Start(); - blitDest.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.TransferDstOptimal); - blitSource.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.TransferSrcOptimal); + blitDest.SetLayout (cmd, VkImageAspectFlags.Color, + VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal, + VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.Transfer); + + blitSource.SetLayout (cmd, VkImageAspectFlags.Color, + VkImageLayout.ColorAttachmentOptimal, VkImageLayout.TransferSrcOptimal, + VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.Transfer); blitSource.BlitTo (cmd, blitDest, VkFilter.Nearest); - blitDest.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.PresentSrcKHR); - blitSource.SetLayout (cmd, VkImageAspectFlags.Color, VkImageLayout.ColorAttachmentOptimal); + blitDest.SetLayout (cmd, VkImageAspectFlags.Color, + VkImageLayout.TransferDstOptimal, VkImageLayout.PresentSrcKHR, + VkPipelineStageFlags.Transfer, VkPipelineStageFlags.BottomOfPipe); + + blitSource.SetLayout (cmd, VkImageAspectFlags.Color, + VkImageLayout.TransferSrcOptimal, VkImageLayout.ColorAttachmentOptimal, + VkPipelineStageFlags.Transfer, VkPipelineStageFlags.ColorAttachmentOutput); cmd.End (); } } + public void WaitAndResetDrawFence () { + drawFence.Wait (); + drawFence.Reset (); + } /// /// Main render method called each frame. get next swapchain image, process resize if needed, submit and present to the presentQueue. /// Wait QueueIdle after presenting. @@ -135,9 +154,7 @@ namespace vkvg { if (cmds[idx] == null) return; - - drawFence.Wait (); - drawFence.Reset (); + WaitAndResetDrawFence(); presentQueue.Submit (cmds[idx], swapChain.presentComplete, drawComplete[idx], drawFence); presentQueue.Present (swapChain, drawComplete[idx]); diff --git a/Crow/src/Interface.cs b/Crow/src/Interface.cs index e23c7afa..5825661a 100644 --- a/Crow/src/Interface.cs +++ b/Crow/src/Interface.cs @@ -1044,6 +1044,14 @@ namespace Crow processDrawing (ctx); }else processDrawing (ctx); + +#if VKVG + if (IsDirty) { + IsDirty = false; + vkCtx.render (); + } +#endif + } finally { PerformanceMeasure.End (PerformanceMeasure.Kind.Update); @@ -1128,7 +1136,13 @@ namespace Crow /// Clipping Rectangles drive the drawing process. For compositing, each object under a clip rectangle should be /// repainted. If it contains also clip rectangles, its cache will be update, or if not cached a full redraw will take place protected virtual void processDrawing(Context ctx){ - + /*ctx.Rectangle (0,0,100,100); + ctx.SetSource (1,0,0,1); + ctx.Fill(); + return;*/ + + //ctx.Flush(); + //surf.WriteToPng ("/home/jp/test.png");*/ DbgLogger.StartEvent (DbgEvtType.ProcessDrawing); if (DragImage != null) @@ -1137,10 +1151,14 @@ namespace Crow if (!clipping.IsEmpty) { PerformanceMeasure.Begin (PerformanceMeasure.Kind.Drawing); +#if VKVG + clear (ctx); +#else ctx.PushGroup (); if (SolidBackground) clear (ctx); +#endif for (int i = GraphicTree.Count -1; i >= 0 ; i--){ Widget p = GraphicTree[i]; @@ -1180,7 +1198,8 @@ namespace Crow #endif #if VKVG - vkCtx.render (); + //vkCtx.render (); + vkCtx.WaitIdle(); #else ctx.PopGroupToSource (); @@ -1198,10 +1217,6 @@ namespace Crow IsDirty = true; } -#if VKVG - vkCtx.render (); -#endif - drawTextCursor (ctx); debugHighlightFocus (ctx); @@ -1383,6 +1398,7 @@ namespace Crow clientRectangle = bounds; #if VKVG + vkCtx.WaitIdle(); vkCtx.blitSource?.Dispose (); surf?.Dispose (); surf = new Surface (vkvgDevice, clientRectangle.Width, clientRectangle.Height); diff --git a/Directory.Build.props b/Directory.Build.props index 8ef04960..917e7dfc 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ true false true - true + false true 0.2.12-beta diff --git a/Samples/BasicTests/BasicTests.cs b/Samples/BasicTests/BasicTests.cs index 7e704916..11eed07e 100644 --- a/Samples/BasicTests/BasicTests.cs +++ b/Samples/BasicTests/BasicTests.cs @@ -38,16 +38,16 @@ namespace Samples //testFiles = new string [] { @"Interfaces/Stack/StretchedInFit4.crow" }; //testFiles = new string [] { @"Interfaces/TemplatedGroup/1.crow" }; //testFiles = new string [] { @"Interfaces/Divers/colorPicker2.crow" }; - testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/GraphicObject", "*.crow")).ToArray (); + //testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/GraphicObject", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Container", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Group", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Stack", "*.crow")).ToArray (); - testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/TemplatedControl", "*.crow")).ToArray (); + /*testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/TemplatedControl", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/TemplatedContainer", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/TemplatedGroup", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Wrapper", "*.crow")).ToArray (); testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Divers", "*.crow")).ToArray (); - testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/DragAndDrop", "*.crow")).ToArray (); + testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/DragAndDrop", "*.crow")).ToArray ();*/ //testFiles = testFiles.Concat (Directory.GetFiles (@"Interfaces/Experimental", "*.crow")).ToArray (); Load (testFiles [idx]).DataSource = this; -- 2.47.3