diff --git a/Examples/WindowResizingExample.cs b/Examples/WindowResizingExample.cs
new file mode 100644
index 0000000..4a73080
--- /dev/null
+++ b/Examples/WindowResizingExample.cs
@@ -0,0 +1,112 @@
+using MoonWorks;
+using MoonWorks.Graphics;
+using MoonWorks.Input;
+
+namespace MoonWorksGraphicsTests;
+
+class WindowResizingExample : Example
+{
+ private GraphicsPipeline pipeline;
+
+ private int currentResolutionIndex;
+ private record struct Res(uint Width, uint Height);
+ private Res[] resolutions =
+ [
+ new Res(640, 480),
+ new Res(1280, 720),
+ new Res(1024, 1024),
+ new Res(1600, 900),
+ new Res(1920, 1080),
+ new Res(3200, 1800),
+ new Res(3840, 2160),
+ ];
+
+ public override void Init(Window window, GraphicsDevice graphicsDevice, Inputs inputs)
+ {
+ Window = window;
+ GraphicsDevice = graphicsDevice;
+ Inputs = inputs;
+
+ Window.SetTitle("WindowResizing");
+
+ Logger.LogInfo("Press left and right to resize the window!");
+
+ Shader vertShader = new Shader(
+ GraphicsDevice,
+ TestUtils.GetShaderPath("RawTriangle.vert"),
+ "main",
+ ShaderStage.Vertex,
+ ShaderFormat.SPIRV
+ );
+
+ Shader fragShader = new Shader(
+ GraphicsDevice,
+ TestUtils.GetShaderPath("SolidColor.frag"),
+ "main",
+ ShaderStage.Fragment,
+ ShaderFormat.SPIRV
+ );
+
+ GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
+ Window.SwapchainFormat,
+ vertShader,
+ fragShader
+ );
+ pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
+ }
+
+ public override void Update(System.TimeSpan delta)
+ {
+ int prevResolutionIndex = currentResolutionIndex;
+
+ if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
+ {
+ currentResolutionIndex -= 1;
+ if (currentResolutionIndex < 0)
+ {
+ currentResolutionIndex = resolutions.Length - 1;
+ }
+ }
+
+ if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
+ {
+ currentResolutionIndex += 1;
+ if (currentResolutionIndex >= resolutions.Length)
+ {
+ currentResolutionIndex = 0;
+ }
+ }
+
+ if (prevResolutionIndex != currentResolutionIndex)
+ {
+ Logger.LogInfo("Setting resolution to: " + resolutions[currentResolutionIndex]);
+ Window.SetSize(resolutions[currentResolutionIndex].Width, resolutions[currentResolutionIndex].Height);
+ }
+ }
+
+ public override void Draw(double alpha)
+ {
+ CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
+ Texture swapchainTexture = cmdbuf.AcquireSwapchainTexture(Window);
+ if (swapchainTexture != null)
+ {
+ var renderPass = cmdbuf.BeginRenderPass(
+ new ColorAttachmentInfo(
+ swapchainTexture,
+ false,
+ Color.Black
+ )
+ );
+ renderPass.BindGraphicsPipeline(pipeline);
+ renderPass.DrawPrimitives(0, 1);
+ cmdbuf.EndRenderPass(renderPass);
+ }
+ GraphicsDevice.Submit(cmdbuf);
+ }
+
+ public override void Destroy()
+ {
+ pipeline.Dispose();
+ Window.SetSize(640, 480);
+ }
+}
diff --git a/Examples/WindowResizingGame.cs b/Examples/WindowResizingGame.cs
deleted file mode 100644
index 21260e2..0000000
--- a/Examples/WindowResizingGame.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using MoonWorks;
-using MoonWorks.Graphics;
-
-namespace MoonWorks.Test
-{
- class WindowResizingGame : Game
- {
- private GraphicsPipeline pipeline;
-
- private int currentResolutionIndex;
- private record struct Res(uint Width, uint Height);
- private Res[] resolutions = new Res[]
- {
- new Res(640, 480),
- new Res(1280, 720),
- new Res(1024, 1024),
- new Res(1600, 900),
- new Res(1920, 1080),
- new Res(3200, 1800),
- new Res(3840, 2160),
- };
-
- public WindowResizingGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), TestUtils.PreferredBackends, 60, true)
- {
- ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("RawTriangle.vert"));
- ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
-
- GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
- MainWindow.SwapchainFormat,
- vertShaderModule,
- fragShaderModule
- );
- pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
- }
-
- protected override void Update(System.TimeSpan delta)
- {
- int prevResolutionIndex = currentResolutionIndex;
-
- if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
- {
- currentResolutionIndex -= 1;
- if (currentResolutionIndex < 0)
- {
- currentResolutionIndex = resolutions.Length - 1;
- }
- }
-
- if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
- {
- currentResolutionIndex += 1;
- if (currentResolutionIndex >= resolutions.Length)
- {
- currentResolutionIndex = 0;
- }
- }
-
- if (prevResolutionIndex != currentResolutionIndex)
- {
- Logger.LogInfo("Setting resolution to: " + resolutions[currentResolutionIndex]);
- MainWindow.SetWindowSize(resolutions[currentResolutionIndex].Width, resolutions[currentResolutionIndex].Height);
- }
- }
-
- protected override void Draw(double alpha)
- {
- CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
- Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
- if (backbuffer != null)
- {
- cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, WriteOptions.Cycle, Color.Black));
- cmdbuf.BindGraphicsPipeline(pipeline);
- cmdbuf.DrawPrimitives(0, 1);
- cmdbuf.EndRenderPass();
- }
- GraphicsDevice.Submit(cmdbuf);
- }
-
- public static void Main(string[] args)
- {
- WindowResizingGame game = new WindowResizingGame();
- game.Run();
- }
- }
-}
diff --git a/MoonWorksGraphicsTests.csproj b/MoonWorksGraphicsTests.csproj
index dab7714..b0a6d00 100644
--- a/MoonWorksGraphicsTests.csproj
+++ b/MoonWorksGraphicsTests.csproj
@@ -53,6 +53,7 @@
+
diff --git a/Program.cs b/Program.cs
index 41fee29..56e5d26 100644
--- a/Program.cs
+++ b/Program.cs
@@ -36,7 +36,8 @@ class Program : Game
new TextureMipmapsExample(),
new TriangleVertexBufferExample(),
new VertexSamplerExample(),
- new VideoPlayerExample()
+ new VideoPlayerExample(),
+ new WindowResizingExample()
];
int ExampleIndex = 0;