From 515944254071a9066db58d37546207a6dbf43393 Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Wed, 6 Mar 2024 00:15:44 -0800 Subject: [PATCH] start converting tests to be D3D11-compatibility --- BasicCompute/BasicComputeGame.cs | 7 +-- BasicStencil/BasicStencilGame.cs | 2 +- BasicTriangle/BasicTriangleGame.cs | 2 +- ClearScreen/ClearScreenGame.cs | 2 +- .../ClearScreen_MultiWindowGame.cs | 7 ++- CompressedTextures/CompressedTexturesGame.cs | 2 +- ComputeUniforms/ComputeUniformsGame.cs | 2 +- CopyTexture/CopyTextureGame.cs | 27 ++++----- Cube/CubeGame.cs | 30 ++++++---- CullFace/CullFaceGame.cs | 2 +- DepthMSAA/DepthMSAAGame.cs | 2 +- DrawIndirect/DrawIndirectGame.cs | 2 +- GetBufferData/GetBufferDataGame.cs | 52 ++++++++---------- .../InstancingAndOffsetsGame.cs | 2 +- MSAA/MSAAGame.cs | 2 +- MSAACube/MSAACubeGame.cs | 2 +- .../Compiled/CalculateSquares.comp.refresh | Bin 925 -> 1417 bytes .../Shaders/Compiled/FillTexture.comp.refresh | Bin 897 -> 1432 bytes .../Compiled/GradientTexture.comp.refresh | Bin 1557 -> 2331 bytes .../Compiled/PositionColor.vert.refresh | Bin 1061 -> 1808 bytes .../PositionColorInstanced.vert.refresh | Bin 1733 -> 2786 bytes .../PositionColorWithMatrix.vert.refresh | Bin 1357 -> 2240 bytes .../Compiled/PositionSampler.vert.refresh | Bin 1269 -> 2168 bytes .../Shaders/Compiled/RawTriangle.vert.refresh | Bin 1577 -> 2764 bytes .../Shaders/Compiled/Skybox.frag.refresh | Bin 649 -> 1280 bytes .../Shaders/Compiled/Skybox.vert.refresh | Bin 1285 -> 2037 bytes .../Shaders/Compiled/SolidColor.frag.refresh | Bin 457 -> 921 bytes .../Compiled/TexturedDepthQuad.frag.refresh | Bin 1657 -> 2634 bytes .../Compiled/TexturedQuad.frag.refresh | Bin 641 -> 1246 bytes .../Compiled/TexturedQuad.vert.refresh | Bin 1097 -> 1874 bytes .../Compiled/TexturedQuad2DArray.frag.refresh | Bin 969 -> 1683 bytes .../Compiled/TexturedQuad3D.frag.refresh | Bin 969 -> 1678 bytes .../TexturedQuadWithMatrix.vert.refresh | Bin 1393 -> 2306 bytes ...TexturedQuadWithMultiplyColor.frag.refresh | Bin 917 -> 1636 bytes MoonWorks.Test.Common/CopyMoonlibs.targets | 18 +++--- MoonWorks.Test.Common/TestUtils.cs | 2 + RenderTexture2D/RenderTexture2DGame.cs | 2 +- WindowResizing/WindowResizingGame.cs | 2 +- 38 files changed, 84 insertions(+), 85 deletions(-) diff --git a/BasicCompute/BasicComputeGame.cs b/BasicCompute/BasicComputeGame.cs index 88c9e31..813310b 100644 --- a/BasicCompute/BasicComputeGame.cs +++ b/BasicCompute/BasicComputeGame.cs @@ -11,7 +11,7 @@ namespace MoonWorks.Test private Sampler sampler; private GpuBuffer vertexBuffer; - public BasicComputeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public BasicComputeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { // Create the compute pipeline that writes texture data ShaderModule fillTextureComputeShaderModule = new ShaderModule( @@ -115,15 +115,12 @@ namespace MoonWorks.Test cmdbuf.EndComputePass(); - cmdbuf.BeginCopyPass(); - cmdbuf.DownloadFromBuffer(squaresBuffer, transferBuffer, TransferOptions.Overwrite); - cmdbuf.EndCopyPass(); - var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); GraphicsDevice.WaitForFences(fence); GraphicsDevice.ReleaseFence(fence); // Print the squares! + GraphicsDevice.DownloadFromBuffer(squaresBuffer, transferBuffer, TransferOptions.Overwrite); transferBuffer.GetData(squares, 0); Logger.LogInfo("Squares of the first " + squares.Length + " integers: " + string.Join(", ", squares)); } diff --git a/BasicStencil/BasicStencilGame.cs b/BasicStencil/BasicStencilGame.cs index 9a635e7..0593e22 100644 --- a/BasicStencil/BasicStencilGame.cs +++ b/BasicStencil/BasicStencilGame.cs @@ -11,7 +11,7 @@ namespace MoonWorks.Test private GpuBuffer vertexBuffer; private Texture depthStencilTexture; - public BasicStencilGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public BasicStencilGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { // Load the shaders ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColor.vert")); diff --git a/BasicTriangle/BasicTriangleGame.cs b/BasicTriangle/BasicTriangleGame.cs index 490d1f6..bdf67a9 100644 --- a/BasicTriangle/BasicTriangleGame.cs +++ b/BasicTriangle/BasicTriangleGame.cs @@ -14,7 +14,7 @@ namespace MoonWorks.Test private bool useSmallViewport; private bool useScissorRect; - public BasicTriangleGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public BasicTriangleGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { Logger.LogInfo("Press Left to toggle wireframe mode\nPress Down to toggle small viewport\nPress Right to toggle scissor rect"); diff --git a/ClearScreen/ClearScreenGame.cs b/ClearScreen/ClearScreenGame.cs index 811a923..4982ffb 100644 --- a/ClearScreen/ClearScreenGame.cs +++ b/ClearScreen/ClearScreenGame.cs @@ -5,7 +5,7 @@ namespace MoonWorks.Test { class ClearScreenGame : Game { - public ClearScreenGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) { } + public ClearScreenGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { } protected override void Update(System.TimeSpan delta) { } diff --git a/ClearScreen_MultiWindow/ClearScreen_MultiWindowGame.cs b/ClearScreen_MultiWindow/ClearScreen_MultiWindowGame.cs index b41d901..51036f5 100644 --- a/ClearScreen_MultiWindow/ClearScreen_MultiWindowGame.cs +++ b/ClearScreen_MultiWindow/ClearScreen_MultiWindowGame.cs @@ -7,12 +7,17 @@ namespace MoonWorks.Test { private Window secondaryWindow; - public ClearScreen_MultiWindowGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public ClearScreen_MultiWindowGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { + var (windowX, windowY) = MainWindow.Position; + MainWindow.SetPosition(windowX - 360, windowY); + secondaryWindow = new Window( new WindowCreateInfo("Secondary Window", 640, 480, ScreenMode.Windowed, PresentMode.FIFO, false, false), GraphicsDevice.WindowFlags ); + (windowX, windowY) = secondaryWindow.Position; + secondaryWindow.SetPosition(windowX + 360, windowY); GraphicsDevice.ClaimWindow(secondaryWindow, PresentMode.FIFO); } diff --git a/CompressedTextures/CompressedTexturesGame.cs b/CompressedTextures/CompressedTexturesGame.cs index c9234d9..8a37c89 100644 --- a/CompressedTextures/CompressedTexturesGame.cs +++ b/CompressedTextures/CompressedTexturesGame.cs @@ -21,7 +21,7 @@ namespace MoonWorks.Test private int currentTextureIndex; - public CompressedTexturesGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public CompressedTexturesGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { Logger.LogInfo("Press Left and Right to cycle between textures"); Logger.LogInfo("Setting texture to: " + textureNames[0]); diff --git a/ComputeUniforms/ComputeUniformsGame.cs b/ComputeUniforms/ComputeUniformsGame.cs index 12596c2..0c25d16 100644 --- a/ComputeUniforms/ComputeUniformsGame.cs +++ b/ComputeUniforms/ComputeUniformsGame.cs @@ -23,7 +23,7 @@ namespace MoonWorks.Test } } - public ComputeUniformsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public ComputeUniformsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { // Create the compute pipeline that writes texture data ShaderModule gradientTextureComputeShaderModule = new ShaderModule( diff --git a/CopyTexture/CopyTextureGame.cs b/CopyTexture/CopyTextureGame.cs index 2b0f602..6bc89f9 100644 --- a/CopyTexture/CopyTextureGame.cs +++ b/CopyTexture/CopyTextureGame.cs @@ -14,7 +14,7 @@ namespace MoonWorks.Test private Texture textureSmallCopy; private Sampler sampler; - public unsafe CopyTextureGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public unsafe CopyTextureGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { // Load the shaders ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert")); @@ -115,22 +115,19 @@ namespace MoonWorks.Test // Render the half-size copy cmdbuf.Blit(originalTexture, textureSmallCopy, Filter.Linear, WriteOptions.SafeOverwrite); - // Copy the texture to a transfer buffer - TransferBuffer compareBuffer = new TransferBuffer(GraphicsDevice, byteCount); - - cmdbuf.BeginCopyPass(); - cmdbuf.DownloadFromTexture( - originalTexture, - compareBuffer, - new BufferImageCopy(0, 0, 0), - TransferOptions.Overwrite - ); - cmdbuf.EndCopyPass(); - var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); GraphicsDevice.WaitForFences(fence); GraphicsDevice.ReleaseFence(fence); + // Copy the texture to a transfer buffer + TransferBuffer compareBuffer = new TransferBuffer(GraphicsDevice, byteCount); + + GraphicsDevice.DownloadFromTexture( + textureCopy, + compareBuffer, + TransferOptions.Overwrite + ); + // Compare the original bytes to the copied bytes. var copiedBytes = NativeMemory.Alloc(byteCount); var copiedSpan = new System.Span(copiedBytes, (int) byteCount); @@ -140,12 +137,12 @@ namespace MoonWorks.Test if (System.MemoryExtensions.SequenceEqual(originalSpan, copiedSpan)) { - Logger.LogError("SUCCESS! Original texture bytes and the bytes from CopyTextureToBuffer match!"); + Logger.LogError("SUCCESS! Original texture bytes and the downloaded bytes match!"); } else { - Logger.LogError("FAIL! Original texture bytes do not match bytes from CopyTextureToBuffer!"); + Logger.LogError("FAIL! Original texture bytes do not match downloaded bytes!"); } RefreshCS.Refresh.Refresh_Image_Free(pixels); diff --git a/Cube/CubeGame.cs b/Cube/CubeGame.cs index 05fa035..6dcbdad 100644 --- a/Cube/CubeGame.cs +++ b/Cube/CubeGame.cs @@ -26,6 +26,7 @@ namespace MoonWorks.Test private TransferBuffer screenshotTransferBuffer; private Texture screenshotTexture; + private Fence? screenshotFence; private Texture skyboxTexture; private Sampler skyboxSampler; @@ -38,6 +39,7 @@ namespace MoonWorks.Test private Vector3 camPos = new Vector3(0, 1.5f, 4f); private bool takeScreenshot; + private bool screenshotInProgress; private bool swapchainCopied; // don't want to take screenshot if the swapchain was invalid struct DepthUniforms @@ -86,7 +88,7 @@ namespace MoonWorks.Test cubemapUploader.Dispose(); } - public CubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public CubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { ShaderModule cubeVertShaderModule = new ShaderModule( GraphicsDevice, @@ -360,7 +362,7 @@ namespace MoonWorks.Test Logger.LogInfo("Depth-Only Mode enabled: " + depthOnlyEnabled); } - if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right)) + if (!screenshotInProgress && TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right)) { takeScreenshot = true; } @@ -461,32 +463,31 @@ namespace MoonWorks.Test } } - GraphicsDevice.Submit(cmdbuf); - if (takeScreenshot && swapchainCopied) { + screenshotFence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); Task.Run(TakeScreenshot); takeScreenshot = false; swapchainCopied = false; } + else + { + GraphicsDevice.Submit(cmdbuf); + } } private unsafe void TakeScreenshot() { - var commandBuffer = GraphicsDevice.AcquireCommandBuffer(); + screenshotInProgress = true; - commandBuffer.BeginCopyPass(); - commandBuffer.DownloadFromTexture( + GraphicsDevice.WaitForFences(screenshotFence); + + GraphicsDevice.DownloadFromTexture( screenshotTexture, screenshotTransferBuffer, TransferOptions.Overwrite ); - commandBuffer.EndCopyPass(); - - var fence = GraphicsDevice.SubmitAndAcquireFence(commandBuffer); - GraphicsDevice.WaitForFences(fence); - GraphicsDevice.ReleaseFence(fence); ImageUtils.SavePNG( Path.Combine(System.AppContext.BaseDirectory, "screenshot.png"), @@ -496,6 +497,11 @@ namespace MoonWorks.Test (int) screenshotTexture.Height, screenshotTexture.Format == TextureFormat.B8G8R8A8 ); + + GraphicsDevice.ReleaseFence(screenshotFence); + screenshotFence = null; + + screenshotInProgress = false; } public static void Main(string[] args) diff --git a/CullFace/CullFaceGame.cs b/CullFace/CullFaceGame.cs index bba75c2..01c6775 100644 --- a/CullFace/CullFaceGame.cs +++ b/CullFace/CullFaceGame.cs @@ -17,7 +17,7 @@ namespace MoonWorks.Test private bool useClockwiseWinding; - public CullFaceGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public CullFaceGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { Logger.LogInfo("Press Down to toggle the winding order of the triangles (default is counter-clockwise)"); diff --git a/DepthMSAA/DepthMSAAGame.cs b/DepthMSAA/DepthMSAAGame.cs index 48d77fa..a9289f1 100644 --- a/DepthMSAA/DepthMSAAGame.cs +++ b/DepthMSAA/DepthMSAAGame.cs @@ -21,7 +21,7 @@ namespace MoonWorks.Test private SampleCount currentSampleCount = SampleCount.Four; - public DepthMSAAGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public DepthMSAAGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { Logger.LogInfo("Press Left and Right to cycle between sample counts"); Logger.LogInfo("Setting sample count to: " + currentSampleCount); diff --git a/DrawIndirect/DrawIndirectGame.cs b/DrawIndirect/DrawIndirectGame.cs index ad689f8..203d34e 100644 --- a/DrawIndirect/DrawIndirectGame.cs +++ b/DrawIndirect/DrawIndirectGame.cs @@ -10,7 +10,7 @@ namespace MoonWorks.Test private GpuBuffer vertexBuffer; private GpuBuffer drawBuffer; - public DrawIndirectGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public DrawIndirectGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { // Load the shaders ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColor.vert")); diff --git a/GetBufferData/GetBufferDataGame.cs b/GetBufferData/GetBufferDataGame.cs index ae5ef67..98bdb61 100644 --- a/GetBufferData/GetBufferDataGame.cs +++ b/GetBufferData/GetBufferDataGame.cs @@ -6,7 +6,7 @@ namespace MoonWorks.Test { class GetBufferDataGame : Game { - public GetBufferDataGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public GetBufferDataGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { var vertices = new System.Span( [ @@ -33,24 +33,19 @@ namespace MoonWorks.Test var vertexBuffer = resourceUploader.CreateBuffer(vertices, BufferUsageFlags.Vertex); - resourceUploader.Upload(); + // Wait for the vertices to finish copying... + resourceUploader.UploadAndWait(); resourceUploader.Dispose(); var transferBuffer = new TransferBuffer(GraphicsDevice, vertexBuffer.Size); - CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer(); - - cmdbuf.BeginCopyPass(); - cmdbuf.DownloadFromBuffer(vertexBuffer, transferBuffer, TransferOptions.Overwrite); - cmdbuf.EndCopyPass(); - - var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); - - // Wait for the vertices to finish copying... - GraphicsDevice.WaitForFences(fence); - GraphicsDevice.ReleaseFence(fence); - // Read back and print out the vertex values + GraphicsDevice.DownloadFromBuffer( + vertexBuffer, + transferBuffer, + TransferOptions.Overwrite + ); + PositionVertex[] readbackVertices = new PositionVertex[vertices.Length]; transferBuffer.GetData(readbackVertices); for (int i = 0; i < readbackVertices.Length; i += 1) @@ -59,23 +54,22 @@ namespace MoonWorks.Test } // Change the first three vertices and upload - cmdbuf = GraphicsDevice.AcquireCommandBuffer(); transferBuffer.SetData(otherVerts, TransferOptions.Overwrite); + + var cmdbuf = GraphicsDevice.AcquireCommandBuffer(); cmdbuf.BeginCopyPass(); cmdbuf.UploadToBuffer(transferBuffer, vertexBuffer, WriteOptions.SafeOverwrite); cmdbuf.EndCopyPass(); - fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); + var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); GraphicsDevice.WaitForFences(fence); GraphicsDevice.ReleaseFence(fence); // Download the data - cmdbuf = GraphicsDevice.AcquireCommandBuffer(); - cmdbuf.BeginCopyPass(); - cmdbuf.DownloadFromBuffer(vertexBuffer, transferBuffer, TransferOptions.Overwrite); - cmdbuf.EndCopyPass(); - fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); - GraphicsDevice.WaitForFences(fence); - GraphicsDevice.ReleaseFence(fence); + GraphicsDevice.DownloadFromBuffer( + vertexBuffer, + transferBuffer, + TransferOptions.Overwrite + ); // Read the updated buffer transferBuffer.GetData(readbackVertices); @@ -103,13 +97,11 @@ namespace MoonWorks.Test GraphicsDevice.WaitForFences(fence); GraphicsDevice.ReleaseFence(fence); - cmdbuf = GraphicsDevice.AcquireCommandBuffer(); - cmdbuf.BeginCopyPass(); - cmdbuf.DownloadFromBuffer(vertexBuffer, transferBuffer, TransferOptions.Overwrite); - cmdbuf.EndCopyPass(); - fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf); - GraphicsDevice.WaitForFences(fence); - GraphicsDevice.ReleaseFence(fence); + GraphicsDevice.DownloadFromBuffer( + vertexBuffer, + transferBuffer, + TransferOptions.Overwrite + ); // Read the updated buffer transferBuffer.GetData(readbackVertices); diff --git a/InstancingAndOffsets/InstancingAndOffsetsGame.cs b/InstancingAndOffsets/InstancingAndOffsetsGame.cs index 45db9e0..1dd0a8d 100644 --- a/InstancingAndOffsets/InstancingAndOffsetsGame.cs +++ b/InstancingAndOffsets/InstancingAndOffsetsGame.cs @@ -13,7 +13,7 @@ namespace MoonWorks.Test private bool useVertexOffset; private bool useIndexOffset; - public InstancingAndOffsetsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public InstancingAndOffsetsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { Logger.LogInfo("Press Left to toggle vertex offset\nPress Right to toggle index offset"); diff --git a/MSAA/MSAAGame.cs b/MSAA/MSAAGame.cs index 409c9ce..2b81813 100644 --- a/MSAA/MSAAGame.cs +++ b/MSAA/MSAAGame.cs @@ -16,7 +16,7 @@ namespace MoonWorks.Test private SampleCount currentSampleCount = SampleCount.Four; - public MSAAGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public MSAAGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { Logger.LogInfo("Press Left and Right to cycle between sample counts"); Logger.LogInfo("Setting sample count to: " + currentSampleCount); diff --git a/MSAACube/MSAACubeGame.cs b/MSAACube/MSAACubeGame.cs index ea2b220..abc9e91 100644 --- a/MSAACube/MSAACubeGame.cs +++ b/MSAACube/MSAACubeGame.cs @@ -20,7 +20,7 @@ namespace MoonWorks.Test private SampleCount currentSampleCount = SampleCount.Four; - public MSAACubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public MSAACubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { Logger.LogInfo("Press Down to view the other side of the cubemap"); Logger.LogInfo("Press Left and Right to cycle between sample counts"); diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/CalculateSquares.comp.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/CalculateSquares.comp.refresh index db1640d81477885692fe459832a23b0a04372811..14da96dbf355d9d433d1f4b2189d89f6ab464995 100644 GIT binary patch delta 438 zcmZXQJxjwt7{_B3lt}0#I6h-iOK8!dDh{p1noSyM2azKt*Y>cz3-==nu%L6iShRr$#&WlVby}@=f-!)5hR%K)Ot&k&Y*q z6G@{a=wimaz_}AFL6KQXW)b7A_a^~3YGBC1zsKP`7fJn43rSrLH8_AhXw-4420TZe z=Ym(<%ydzs+!ngy_O2bfC@MPsQ3HyODPg(6F97~13g1N2fM;KJ6-idce5Bf4GOf^; F4Bu@DZ delta 13 UcmeC=p3BY>R diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/FillTexture.comp.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/FillTexture.comp.refresh index 9cc02045dc2d4595c18a3f708f4632c23d161e10..82b6cfe5116961c468585af1cdaec3800eaafbbc 100644 GIT binary patch delta 553 zcmZvY-%7(U6voFCluEtzHkTbp*`^o6sW%R1?_?d@#TX^FSr=@Rl0RcArT7-UhHvOe z>Z-5>5)yL0bAI3VdGd93I(ZDA+O1aW`?x%++UIbU3M(3;m@}!6rc7O-G>hh3yp9Fe zMM&QXx~o6Dfxbj$_jG6II<7OBPsvtkLHeUx&A7gWys|0V}j}oe$SRuo~8VIZO>_ z(TK_dt9U(K3xX5dw6xe8P7^R(2+6*RgDtYR@@>;8GG%lfobJK|sLx SSL`3G8D7*5V&3FX!~Fn%>#bk_ delta 13 UcmbQi-N?=o{C0XnAyOhow$C~Kjz11Qf9{X2#=m!3t=8Y&AA8l#KO724WD-Kiav?z_x%>rj z8ay!ma?P14#>pQFXZ3_LP;Jm}SGgy)Wn1A?MG@t2cX0#9z-gQaNx3uaxVH6XTY!&N z?17rH;1wm~wd64r6$xKh6bUMwu%iXvjp*oMLQAPQ?F~;=&Ugk<%82Zr15?t^NKCiA zl-X%p%VVq$aGkO#N&S4zLOdVK{UM4A$yF#}eCv8Fc0BG(<*YSNY zOhiFs_&j;$l+2839ed7_8B)xOAR|fcYzUb2J)B~Eh9v7>2N_pQ53gKk5E|Tan`Dxt zx{VFGwMK)g3x_c9I+0hF+bVrDPgmA`$0YGesE(ki?v?F2s<(h|=NDK%TGZcF*i|!+ zy6xJ)eL_d{#UStct~}-{lLne_26&CyP<7oW+cMk?vSlrsRsc(lX^`lKHawAB6C8SN TE%v@$vqZA)Xx}lH&bIyoWgGs> delta 13 UcmbO&G?j-X$Sv4oBZnXx02-eIRsaA1 diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionColor.vert.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionColor.vert.refresh index 5daef2439b36e20ad2f43b14863c62b631a98e37..67a8967b39b3318e80411582aa7216f93495392f 100644 GIT binary patch delta 766 zcmZuu%}T>S5Duk>5{S<*-dfPmVopj;M1& delta 13 UcmbQhx0Hh=$Sv4oBZndj02+n^VE_OC diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionColorInstanced.vert.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionColorInstanced.vert.refresh index bc78019c9b56303fc648c6a638e75e967b497f8b..9c2c5340ecffcfdb61ce1700713c1a73ca09c10c 100644 GIT binary patch delta 1075 zcmZ`&%SyvQ6fIIj3fbxYx)2g=W2z~Fl2xnNRZAVH?G+ ztkES(g3@1sIoMSW=Qh;G*e+3FDWteHD~~NhCU?10$p<}v>}8c1;vCgn+`xD{RBTvD V{ygXZRn9q!XpyCIB@Ks4{{c;EP|*MY delta 13 UcmaDPdX$$X$Sv4oBga8D03p}}fdBvi diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionColorWithMatrix.vert.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionColorWithMatrix.vert.refresh index 9e90d79bce92b540bf0a2c2b4cd5db42853ab8db..559cef0637ce8abd50dd6fac57d88ad485034ee9 100644 GIT binary patch delta 903 zcmZuu+fIW(5N*69hNKVv!8}4z300mneX(lngK5*&#y3I{nr$iDEVET(4BzA*_yhiv zyDYS$vV;U?X3sfu&bRe-dNRJ7+_%*EJQ^Gq2g}1&E1JtBi3L1nEa75(o$_b}mmuN= z%P|)A+;iI2d)oqa1b+$E;gSnTQXZoJ>O*ku2M-|%_Bs_|mTL%gdlN=0o+NpUcH}u% zZRr`XS7!GDPj-SGPTV@c5PIrfUfH$PNykDotc(LP~11g zaQ3U9t>Y$GLBW2A;ISy0iDzoud0ef?RDi5R8GD!C<{W>aqc05o_Xvj6}9 delta 13 UcmX>gc$SML$Sv4oBZns|03SC4=Kufz diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionSampler.vert.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/PositionSampler.vert.refresh index c95c6484d5aaf2f82952ecc8f0546d9949382247..1bd26729c88ae5d4ddadad6d272fcc5cdc2e95fb 100644 GIT binary patch delta 920 zcmZvb&q~8U5XOrZ(LlgQm}3exq_rotUQ)$^kkXXmErfO(0%^AFZi-bT&*YwGic*Zf}nU0+V0{g)O#-|e4ve)e(RYR$;I$QbF59##nr#o!VAaJ@+g zgF9d(in$=n5>DsdG*rPCp&$^bQ^1dLUf`y|k&G8mHijq(CX~k_rYSb#BG-#F6E00C zD=JN)4>+GoDO(;CZb9oMyRmE`z@Ln#^T1`4^I)8AGGQ8@rUCdAGc-TK)C;pe1|mx&{x0aW{FUG{Va5ao>@NcnT!ol#;N zQ+FR$Y1w5QuVhOS>oA*c?P3=k+gZsl0dmkIfuYLDs*LSIuV(j9dx!9i7N@;M1& diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/RawTriangle.vert.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/RawTriangle.vert.refresh index 3b388c38a6b0841ae62cdb1143daae905a6db3e0..3eda99c606ccce63d1adcd57dc6774f44dcb9285 100644 GIT binary patch literal 2764 zcmZ{m`)(UW6vn4Xofd;zN^e|BJD~*}>KG@a6`~3VCB=;t$tJEM{#!-%rdnySEqfiM zRF!xR9)XuY;-$DqNPNHD8G91D6P-P0&iT$|&Y4~3;D^pLqjkZq7_+=||B^)WwyBuM zXtl1HC25RwD>-lOclPV!tXJQ9)WCklEW>i!RdYF)FY5X8QPO9F=6w<1W&JIQ|EYi% zP1!W}qh_ns+Tdx!;q1I2cPVYDrVw!)B=vYUWbg1{xxMG9=Pjz!dImOgM3pcT@hnN#JAe( zvg9)QCvH#gu|IV9vSii`MIqNMMZ79*MYn}{SDZaLhidBW zq9F7mMD*)N^_zKbI-S^5_m$IK5O2GCy(JkeHh(X_R}9{XMtzp9k2)?_}S{l<0Z zWG929XHWDi6Y*W$-? z<+AmDSur&` zlf%Qf;&7i8$nIR;#f5GLg)VSHb*7_54S8R~BEYfUbbwju^V7gDID``&3to@ev{cce zZUor+OQF}#DAa1jtdzr-q`28OzkH!Se|fB4#ussv@FLA_=J`u#^=4HAWc@6_Hz~N} tZsuV=S4R;>Jyb@A3RQ$|yMLc_ykNHo9E`$?4mOIj$*Av+H_fKz{153m#6bW6 delta 13 UcmX>jx{`+_$Sv4oBZn#*03JjGvH$=8 diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/Skybox.frag.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/Skybox.frag.refresh index 6cc78dd750ffbd22ffb9ee8657b581e127238aab..8be0b5d75dc450c7f089468baecdba98ec198f0d 100644 GIT binary patch literal 1280 zcmZ`&U279T6rCpBwr<^iSW!ffslKF8Lcl0uZC_#=3xP;BRNt0uG7XE{-LN}bTBP7_ z^H=#Ic+TucHmDbFX6~6Y=YGs)bmo3q5kjo|Xb914yjsUrYzjv_21wf#4Il#8npyh; zchFAtwB3Ev;rW(maxrJyVqL6aPrvqqi1-8eE_??(;z)p96RJY|gz&1cMStM+hr|Bh z)SJxbUaIdx<%L0{ylIfAi4JZQc^fre5KY2tS|?aw)bm=xGP%zZf7Xk`I6*!OJvdn1 zZ+DmRt?OUULzUx}sd21sdvTmhK@okZvGx}XV2pY9C7kmp<9+ODjM-<&-$RG&ao=<+ z%>D`XYrrJ@DfpZPW7aM4yMdL{Bz{!Htby1wRAXZ$Kc6@@g|QymbDV5qC69U!3Brg` zk1>0oG5@B9pepoAwHT(i%VLb-Q99wYeGp5EPIPZS}i#_eZ z$sv9M1@=blH!{3~HzH)fBj_wqz3ftbxC&!mcTeQfgURJ

SSdJatrp@$kECK02ulMkN^Mx diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/Skybox.vert.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/Skybox.vert.refresh index 22abe5164a82f53f14114956bd08c961ffc69a98..9299f15c95dd2f1e409105fed12c09299d96bb03 100644 GIT binary patch delta 771 zcmZva%}&BV6orv!Vwwj7sok_yUl99|~r8_TkS2tN&*Hw|x#uX+lR z2%6eyn9kz?E2t=O3LD(bHmq>#Uy1&jv$;W+MbRupkRUrJGV)ehUBC(zQ< z{Yx*3hIe7*X0K3I5|I=~G?bMC2}Q#&s8X2dqp`_kBAMJPMqgn?xIlO`_xC)ta2Lv5 zETy`GqU5@;kaORhpy>-L2>uv^a3@5Jjhiq+ delta 13 Ucmey$-^#@jDN3?z*=uK9<=%sj25v5+LMxhXCMZ7H`jU^D1l57MK|C@O6FL@E1 z*{10Vx@EKb=FOWoFKO?pe?23Fn0d#uUfZ3=RV;}ne&e++YCr_AIdi(*ez%qDLF@47 zfQ%JUH$-w)#k`os$^GO<2@{LhOW14R5k~{u>QEKp14XmK5pGwxp67NiRWKTyvtYoAcbwXdT z?o}sC^IY8|qe3^G*QO(}N-a|%Pvza^L&x)a7YC?*`%l3u^dAzH9mw?W)t#RWLp{}b zPNRW*#1~Wi`|Ryk4yJW&IWhi5@3!f2OKD1N+zcZz{V-G!2b=1SM{3*2)Ugd7x++DLpNY3X zyisqAckQg3)XKq``TfuA|LxSMZ|{sZ{GP zxlC^0BPgDUN^?c7M`7Uq4t&5T%_Y-7k51_Q1!oFnB};B(npRwsWE7t6$Y#5$=vS+I zI1L&<@R$5f*NTs)XU6;ZGsJ9N=D5#b1#O(WMy#3UK)Zjm+Lc#E9{3e1MPip815TPq zsa80gmtU_Y^Z8;rvgdl< zWM1nnmxk$MHynN9OS)t#9CSGP115 zHnZkn10{^^Fgtg}N~YKv9a>s#wRPJH!ASZWw?T+HOO>n+!2XUfh|ShRtc^tiX8&Qs z@CLjk8KuF2T@KBrgPS{Z%>ap_> G`2PXm%r@Ns delta 13 UcmX>l@{@-p$Sv4oBS$G403t2~PXGV_ diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuad.frag.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuad.frag.refresh index 0b955c1d505782864609dea388de9ae2b231b088..a1a3e0fcc0facbf19637e0fd3788166552f26624 100644 GIT binary patch literal 1246 zcmZ`&U279T6rCnbTeogMtSBPLR9{k%5K0uWwl8TL3xP;BRNsarnTCaJHq1^+Mf&Ib zRlW$GGuhn?iUT(@_uMn*e(Yp;8GT+8Lag1_gs9ivY~m=kMJS#EuX_oa!a-7L)v@{to_kK)^T zstx>xt8Jw3yIE!?2#FpztoaokEc(3j8pb)4{vpm>^x0p@KR{>f?a*~8-1!;K8^9#& zIry9beby`SyM>)oBz{u(tby1IR1;t)pZWb&`Y*xUMu0r(JuXPZs7IeYa54WbcIvTC z^7pV)i#Yl8*%Pt%m=Srbm5Vj~0@A>K3Y0l^VAQ8ijVCbP{|Xj+I)ITw{0s{0jo5Ew z_yDVokO3dTE{r}t|8$dPvF)76;xoyQ(&%ZDTWy-QeRL8AMIf@V)lwCn%9mf&r{|6y z2056?ST2QS^&}wWM~-Fr5D;L1MbF(Q} WKGgF2tj-0|XuOnw2LAvGoAm$y delta 13 Ucmcb|*~rQg15Rn|4b;W8!b~ zSNX-n^K5sQspyd5&OP_c+%sppd-$=j=V;t`Kk7Img(u@$I+IS>Sq9aZaSB2lVPi?G z)*3ap7q{Hamuu9goDo7&n|5v{YaQi$ISJY%Ad{N2n)ftE^jA>)sY6Gdl2fgD)q1^J z+x42Aj@OGXL*EO7w(qrquHTG#S7Zau-~!?MKSE2MW>kbjr#GCe^H5|Zc9ip z(UAkvP}H4f6wgBM!0#UW-PpfSDs+IerWW;rIEdOp#}ht&BzVw{8^Kp8WY3_+-BhcD zL1!oE#V75ipVx4TT0ac)T2X%B4FipMlsDA6s+-~Ak|u*3KgrRtr#;+(0nW&CU8vX8T((99U(C1-_DdgB_Pw)-7La7ErF=d>k~*X&9Zvo5p&5w#p^DwqdN-^I9!?P5&yqFxk7I z0_S!6&Db;!_79J}N;m5Dy#02kAD2tt$|a+bsJPl>-k77^&y{-paA!>i_2S61`uSdN+PTyuI8%W4$| z{;y+Ue?bs(UH&b8D}Ai4NSgZ5`a#BzkN-vD@gmp7~yY^;cqZOSkR1o587+ zOrTU)r??rMvMe)F#1@f?8|;@yl994($h9u1ZdUd$^03ubmXf=E-0!wi&3RAx_6H>x BP=Wve delta 13 Ucmcb_cano8$Sv4oBZn&s03Wmi>i_@% diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuad2DArray.frag.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuad2DArray.frag.refresh index 3587389d3175b0ca0fc1f3e8d11df5ddec70e2ce..df4b41c6650a4f6fdaa85efc3077c102cf5d72b9 100644 GIT binary patch delta 733 zcmZWn%SyvQ6pas10{Mqorcg?)UHJk{EfyD*rWSX@G@ZoIBvWQ?M3It@@Jsvz7cTrO zZzoAJ)j%M*_uO;OIWs>;AI|Y)=-=&Gmi2k~eNgOw?ORqb&%=;Q@|eY;km*e#f+aa4 zl1H%uF5P*z<=F3zP4Ed5!GO@-30?3NJR@wyf~5#U#la1_t#ij-CmmTxeMeWF7$VA4ZcI^$IDJqN8k;!>+?-3YAW8pSos&YI4+L^gDGKqtVx+u~Jn``ZA+xUSMGNIaIKcb5qNqW18Q7 QS3t?}T4e@@rdT`nFJVyX3IG5A delta 13 UcmbQtdy<_c$Sv4oBgau@03B)sDF6Tf diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuad3D.frag.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuad3D.frag.refresh index a94da746b3527463cb657efade61409a75a4eee9..8fd6d2bbccb727879d5bef6a11fb720e503dfb27 100644 GIT binary patch delta 728 zcmZuv%WA?v6iscRC6IrZWdsqcuKHRuR_aPIR=OL;IFklrCd^Dqp-BF~f9by4F8Wu! zP7)_p1A*k;bI(2J%=}(%ovZ24e?GG;>+9m@Ja2qAEGt-Kj8TDJl8AA!evEmrLN`dz zFp`Q2chPA&_NQYbcv#GdLb!X4mo!yx082@*;*3eE+@RCEb?gnijy7cXsb%JG_sUwz}DxmS_ct%7>mEn2k z(Gukhq~kS-64yk$w}bAh%-TgJ?*D9BMFc&!GTJgn)6{3NJBqsFLMzfM{Yh@3&`BVO zFQhoyrD6nCXe;c039g=Bme*a diff --git a/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuadWithMatrix.vert.refresh b/MoonWorks.Test.Common/Content/Shaders/Compiled/TexturedQuadWithMatrix.vert.refresh index ba7f4e1abb8ee19370d449afd427e4102bc0a930..c07a5138a236d0cdddbef044151a53a40d1884f1 100644 GIT binary patch delta 934 zcmZ`%O;5r=5G8&jrU@70513;~umQx2hKs0?gMk1NZ%rvJS!uguyG4vKO+5K`{AvCJ zXW1X%Uvb}DD+q!fgJt^3FEW9LD5O{m(`3oL~X&`OC zQM;~MANZ*^m7Zk2zMi*X9=QXaGRb&?1GL!!p2=~r?s6_>e|rBkE`XpZJdyblMuXmP z;&ug3Q@58aGimn8LF?GvLgnMT=Wf40ylo(-T6wc*3kpIq(ZmV8RtZl(lRKg<3Rww( z@=~rnQ*dfDp%!Vv6=yS81wvvPEU|Y1QG(7^v{{9i4IPNHJhF9+cHvqbnoc9E)yq;< zDJnwd1^cRA6S<4dHjBqAATKLR(m$~Pp8-pGZPJGM|t8dRx997j5h8r-aO zL51)b<13v=NS*}}{OLHKEs)2V5NMpFncUy9?ovtTcTe7AG8=ZxUbTxcnPl>hOAkyc zW#cc<9P^0C!YAJWdS-M5p^A<+m?mz`x^5i&1N^+=*e*D^zjO>Vr7&Pnc>R7SS|46+{dD65mAQk;n#5A%}R?IAp+Rg3Fb1CFR N{ZdJp!B}h^`v<`k>`4Fs delta 13 UcmaFDGnJhs$Sv4oBgaH$03O!_5dZ)H diff --git a/MoonWorks.Test.Common/CopyMoonlibs.targets b/MoonWorks.Test.Common/CopyMoonlibs.targets index 4641909..98312e8 100644 --- a/MoonWorks.Test.Common/CopyMoonlibs.targets +++ b/MoonWorks.Test.Common/CopyMoonlibs.targets @@ -8,43 +8,43 @@ %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest + Always diff --git a/MoonWorks.Test.Common/TestUtils.cs b/MoonWorks.Test.Common/TestUtils.cs index 89318d9..11b6668 100644 --- a/MoonWorks.Test.Common/TestUtils.cs +++ b/MoonWorks.Test.Common/TestUtils.cs @@ -4,6 +4,8 @@ namespace MoonWorks.Test { public static class TestUtils { + public static Backend DefaultBackend = Backend.D3D11; // change this to test different backends + public static WindowCreateInfo GetStandardWindowCreateInfo() { return new WindowCreateInfo( diff --git a/RenderTexture2D/RenderTexture2DGame.cs b/RenderTexture2D/RenderTexture2DGame.cs index 102d714..9c4337a 100644 --- a/RenderTexture2D/RenderTexture2DGame.cs +++ b/RenderTexture2D/RenderTexture2DGame.cs @@ -12,7 +12,7 @@ namespace MoonWorks.Test private Texture[] textures = new Texture[4]; private Sampler sampler; - public RenderTexture2DGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public RenderTexture2DGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { // Load the shaders ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert")); diff --git a/WindowResizing/WindowResizingGame.cs b/WindowResizing/WindowResizingGame.cs index 4d9dff7..a85853c 100644 --- a/WindowResizing/WindowResizingGame.cs +++ b/WindowResizing/WindowResizingGame.cs @@ -20,7 +20,7 @@ namespace MoonWorks.Test new Res(3840, 2160), }; - public WindowResizingGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true) + public WindowResizingGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.DefaultBackend, 60, true) { ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("RawTriangle.vert")); ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));