Browse Source

Render tests gpu accel

Krzysztof Krysiński 5 months ago
parent
commit
699dd14caf

+ 1 - 1
src/PixiDocks

@@ -1 +1 @@
-Subproject commit 30a62cf6fe0ff3e9517a2bbcd38a423b5194e2ff
+Subproject commit 8c9a1f874ec8d1f7cd773a1f6b044deb0343ad1a

+ 7 - 1
tests/PixiEditor.Tests/AvaloniaTestRunner.cs

@@ -1,5 +1,7 @@
 using Avalonia;
 using Avalonia.Headless;
+using Avalonia.Platform;
+using Drawie.Interop.VulkanAvalonia;
 using PixiEditor.Tests;
 
 [assembly:TestFramework("PixiEditor.Tests.AvaloniaTestRunner", "PixiEditor.Tests")]
@@ -10,6 +12,10 @@ namespace PixiEditor.Tests
     public class AvaloniaTestRunner
     {
         public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<App>()
-            .UseHeadless(new AvaloniaHeadlessPlatformOptions());
+            .UseHeadless(new AvaloniaHeadlessPlatformOptions()
+            {
+                UseHeadlessDrawing = true,
+                FrameBufferFormat = PixelFormat.Rgba8888,
+            });
     }
 }

+ 1 - 0
tests/PixiEditor.Tests/PixiEditor.Tests.csproj

@@ -27,6 +27,7 @@
 
 
     <ItemGroup>
+      <ProjectReference Include="..\..\src\Drawie\src\DrawiEngine.Desktop\DrawiEngine.Desktop.csproj" />
       <ProjectReference Include="..\..\src\PixiEditor.Desktop\PixiEditor.Desktop.csproj" />
       <ProjectReference Include="..\..\src\PixiEditor.Linux\PixiEditor.Linux.csproj" />
       <ProjectReference Include="..\..\src\PixiEditor.MacOs\PixiEditor.MacOs.csproj" />

+ 47 - 18
tests/PixiEditor.Tests/PixiEditorTest.cs

@@ -1,6 +1,11 @@
 using Drawie.Backend.Core.Bridge;
+using Drawie.Numerics;
+using Drawie.RenderApi.Vulkan;
+using Drawie.Silk;
 using Drawie.Skia;
+using Drawie.Windowing;
 using DrawiEngine;
+using DrawiEngine.Desktop;
 using Microsoft.Extensions.DependencyInjection;
 using PixiEditor.Extensions.Runtime;
 using PixiEditor.Helpers;
@@ -22,8 +27,12 @@ public class PixiEditorTest
             return;
         }
 
-        SkiaDrawingBackend skiaDrawingBackend = new SkiaDrawingBackend();
-        DrawingBackendApi.SetupBackend(skiaDrawingBackend, new DrawieRenderingDispatcher());
+        var engine = DesktopDrawingEngine.CreateDefaultDesktop();
+        var app = new TestingApp();
+        app.Initialize(engine);
+        IWindow window = app.CreateMainWindow();
+        window.Initialize();
+        DrawingBackendApi.InitializeBackend(engine.RenderApi);
     }
 }
 
@@ -33,27 +42,34 @@ public class FullPixiEditorTest : PixiEditorTest
     {
         ExtensionLoader loader = new ExtensionLoader("TestExtensions", "TestExtensions/Unpacked");
 
-        IOperatingSystem os;
-        if (System.OperatingSystem.IsWindows())
+        if (IOperatingSystem.Current == null)
         {
-            os = new WindowsOperatingSystem();
-        }
-        else if (System.OperatingSystem.IsLinux())
-        {
-            os = new LinuxOperatingSystem();
-        }
-        else if (System.OperatingSystem.IsMacOS())
-        {
-            os = new MacOperatingSystem();
+            IOperatingSystem os;
+            if (System.OperatingSystem.IsWindows())
+            {
+                os = new WindowsOperatingSystem();
+            }
+            else if (System.OperatingSystem.IsLinux())
+            {
+                os = new LinuxOperatingSystem();
+            }
+            else if (System.OperatingSystem.IsMacOS())
+            {
+                os = new MacOperatingSystem();
+            }
+            else
+            {
+                throw new NotSupportedException("Unsupported operating system");
+            }
+
+            IOperatingSystem.RegisterOS(os);
         }
-        else
+
+        if (IPlatform.Current == null)
         {
-            throw new NotSupportedException("Unsupported operating system");
+            IPlatform.RegisterPlatform(new TestPlatform());
         }
 
-        IOperatingSystem.RegisterOS(os);
-        IPlatform.RegisterPlatform(new TestPlatform());
-
         var services = new ServiceCollection()
             .AddPlatform()
             .AddPixiEditor(loader)
@@ -81,4 +97,17 @@ public class FullPixiEditorTest : PixiEditorTest
 
         public IAdditionalContentProvider? AdditionalContentProvider { get; } = new NullAdditionalContentProvider();
     }
+}
+
+public class TestingApp : DrawieApp
+{
+    public override IWindow CreateMainWindow()
+    {
+        return Engine.WindowingPlatform.CreateWindow("Testing app", VecI.One);
+    }
+
+    protected override void OnInitialize()
+    {
+
+    }
 }

+ 30 - 28
tests/PixiEditor.Tests/RenderTests.cs

@@ -2,6 +2,8 @@ using Avalonia.Headless.XUnit;
 using Drawie.Backend.Core;
 using Drawie.Backend.Core.ColorsImpl;
 using Drawie.Backend.Core.Surfaces;
+using Drawie.Backend.Core.Surfaces.ImageData;
+using Drawie.Numerics;
 using PixiEditor.ChangeableDocument.Changeables.Animations;
 using PixiEditor.Models.IO;
 using PixiEditor.ViewModels.Document;
@@ -10,34 +12,28 @@ namespace PixiEditor.Tests;
 
 public class RenderTests : FullPixiEditorTest
 {
-    [AvaloniaFact]
-    public void TestThatPixiFilesRenderTheSameResultAsSavedPng()
+    [AvaloniaTheory]
+    [InlineData("fibi")]
+    [InlineData("Pond")]
+    public void TestThatPixiFilesRenderTheSameResultAsSavedPng(string fileName)
     {
-        string[] files = Directory.GetFiles("TestFiles/RenderTests", "*.pixi");
-        string[] results = Directory.GetFiles("TestFiles/RenderTests", "*.png");
+        string pixiFile = Path.Combine("TestFiles", "RenderTests", fileName + ".pixi");
+        string pngFile = Path.Combine("TestFiles", "RenderTests", fileName + ".png");
+        var document = Importer.ImportDocument(pixiFile);
 
-        Assert.Equal(files.Length, results.Length);
+        Assert.NotNull(pngFile);
 
-        for (int i = 0; i < files.Length; i++)
-        {
-            string pixiFile = files[i];
-            var document = Importer.ImportDocument(pixiFile);
-            var pngFile = results.FirstOrDefault(x => x.EndsWith(Path.GetFileNameWithoutExtension(pixiFile) + ".png"));
-
-            Assert.NotNull(pngFile);
-
-            var result = document.TryRenderWholeImage(0);
+        var result = document.TryRenderWholeImage(0);
 
-            Assert.True(result is { IsT1: true, AsT1: not null }); // Check if rendering was successful
+        Assert.True(result is { IsT1: true, AsT1: not null }); // Check if rendering was successful
 
-            using var image = result.AsT1;
+        using var image = result.AsT1;
 
-            using var toCompareTo = Importer.ImportImage(results[i], document.SizeBindable);
+        using var toCompareTo = Importer.ImportImage(pngFile, document.SizeBindable);
 
-            Assert.NotNull(toCompareTo);
+        Assert.NotNull(toCompareTo);
 
-            Assert.True(PixelCompare(image, toCompareTo));
-        }
+        Assert.True(PixelCompare(image, toCompareTo));
     }
 
     private static bool PixelCompare(Surface image, Surface compareTo)
@@ -47,22 +43,28 @@ public class RenderTests : FullPixiEditorTest
             return false;
         }
 
-        Pixmap imagePixmap = image.PeekPixels();
-        Pixmap compareToPixmap = compareTo.PeekPixels();
+        using Surface compareSurface1 = new Surface(image.Size);
+        using Surface compareSurface2 = new Surface(image.Size);
+
+        compareSurface1.DrawingSurface.Canvas.DrawSurface(image.DrawingSurface, 0, 0);
+        compareSurface2.DrawingSurface.Canvas.DrawSurface(compareTo.DrawingSurface, 0, 0);
+
+        var imageData1 = compareSurface1.PeekPixels();
+        var imageData2 = compareSurface2.PeekPixels();
 
-        if (imagePixmap == null || compareToPixmap == null)
+        if (imageData1.Width != imageData2.Width || imageData1.Height != imageData2.Height)
         {
             return false;
         }
 
-        for (int y = 0; y < image.Size.Y; y++)
+        for (int y = 0; y < imageData1.Height; y++)
         {
-            for (int x = 0; x < image.Size.X; x++)
+            for (int x = 0; x < imageData1.Width; x++)
             {
-                Color color1 = imagePixmap.GetPixelColor(x, y);
-                Color color2 = compareToPixmap.GetPixelColor(x, y);
+                var pixel1 = imageData1.GetPixelColor(x, y);
+                var pixel2 = imageData2.GetPixelColor(x, y);
 
-                if (color1 != color2)
+                if (pixel1 != pixel2)
                 {
                     return false;
                 }

BIN
tests/PixiEditor.Tests/TestFiles/RenderTests/Pond.pixi


BIN
tests/PixiEditor.Tests/TestFiles/RenderTests/fibi.pixi


BIN
tests/PixiEditor.Tests/TestFiles/RenderTests/fibi.png


+ 21 - 0
tests/PixiEditorTests.sln

@@ -121,6 +121,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PixiEditor.MacOs", "..\src\
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PixiEditor.Linux", "..\src\PixiEditor.Linux\PixiEditor.Linux.csproj", "{C7D2CAEE-2DF4-4920-AE9F-E3323E80AAF4}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawiEngine.Desktop", "..\src\Drawie\src\DrawiEngine.Desktop\DrawiEngine.Desktop.csproj", "{F021BE50-BDFB-427C-9495-888347C4E3B3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Windowing", "..\src\Drawie\src\Drawie.Windowing\Drawie.Windowing.csproj", "{37662F23-90F7-4B41-8E45-5D1B09A96803}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Windowing.Glfw", "..\src\Drawie\src\Drawie.Windowing.Glfw\Drawie.Windowing.Glfw.csproj", "{B13E1D5E-EF6B-4193-8BE6-4C85F8C1EE59}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -346,6 +352,18 @@ Global
 		{C7D2CAEE-2DF4-4920-AE9F-E3323E80AAF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{C7D2CAEE-2DF4-4920-AE9F-E3323E80AAF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C7D2CAEE-2DF4-4920-AE9F-E3323E80AAF4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F021BE50-BDFB-427C-9495-888347C4E3B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F021BE50-BDFB-427C-9495-888347C4E3B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F021BE50-BDFB-427C-9495-888347C4E3B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F021BE50-BDFB-427C-9495-888347C4E3B3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{37662F23-90F7-4B41-8E45-5D1B09A96803}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{37662F23-90F7-4B41-8E45-5D1B09A96803}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{37662F23-90F7-4B41-8E45-5D1B09A96803}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{37662F23-90F7-4B41-8E45-5D1B09A96803}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B13E1D5E-EF6B-4193-8BE6-4C85F8C1EE59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B13E1D5E-EF6B-4193-8BE6-4C85F8C1EE59}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B13E1D5E-EF6B-4193-8BE6-4C85F8C1EE59}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B13E1D5E-EF6B-4193-8BE6-4C85F8C1EE59}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{0EF3CAB9-7361-472C-8789-D17D4EA2DEBB} = {D914C08C-5F1A-4E13-AAA6-F25E8C9748E2}
@@ -404,5 +422,8 @@ Global
 		{B4A2F5BC-A07D-4C99-B022-B959B54CC4A0} = {E118E6FE-67E7-4472-A8D7-E7F470E66131}
 		{554F618D-DDD1-484B-AE89-540852FF7D4F} = {E118E6FE-67E7-4472-A8D7-E7F470E66131}
 		{C7D2CAEE-2DF4-4920-AE9F-E3323E80AAF4} = {E118E6FE-67E7-4472-A8D7-E7F470E66131}
+		{F021BE50-BDFB-427C-9495-888347C4E3B3} = {E118E6FE-67E7-4472-A8D7-E7F470E66131}
+		{37662F23-90F7-4B41-8E45-5D1B09A96803} = {E118E6FE-67E7-4472-A8D7-E7F470E66131}
+		{B13E1D5E-EF6B-4193-8BE6-4C85F8C1EE59} = {E118E6FE-67E7-4472-A8D7-E7F470E66131}
 	EndGlobalSection
 EndGlobal