trying out QOA
parent
922e4cf0f1
commit
3d5731f40d
|
@ -0,0 +1,2 @@
|
||||||
|
*.ogg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.qoa filter=lfs diff=lfs merge=lfs -text
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": ".NET Core Launch (console)",
|
||||||
|
"type": "coreclr",
|
||||||
|
"request": "launch",
|
||||||
|
"preLaunchTask": "build",
|
||||||
|
"program": "${workspaceFolder}/bin/Debug/net7.0/MoonWorksTest.dll",
|
||||||
|
"args": [],
|
||||||
|
"cwd": "${workspaceFolder}",
|
||||||
|
"console": "internalConsole",
|
||||||
|
"stopAtEntry": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": ".NET Core Attach",
|
||||||
|
"type": "coreclr",
|
||||||
|
"request": "attach"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "build",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"build",
|
||||||
|
"${workspaceFolder}/MoonWorksTest.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "publish",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"publish",
|
||||||
|
"${workspaceFolder}/MoonWorksTest.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "watch",
|
||||||
|
"command": "dotnet",
|
||||||
|
"type": "process",
|
||||||
|
"args": [
|
||||||
|
"watch",
|
||||||
|
"run",
|
||||||
|
"${workspaceFolder}/MoonWorksTest.csproj",
|
||||||
|
"/property:GenerateFullPaths=true",
|
||||||
|
"/consoleloggerparameters:NoSummary"
|
||||||
|
],
|
||||||
|
"problemMatcher": "$msCompile"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RootNamespace>MoonWorksTest</RootNamespace>
|
<RootNamespace>MoonWorksTest</RootNamespace>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 111df04c0f7be740108cc3536eda3629572714d8
|
Subproject commit a869a0e958fd307a2883d111489ea7c49793baf6
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,12 +1,15 @@
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using MoonWorks.Math;
|
using MoonWorks.Graphics;
|
||||||
|
using MoonWorks.Math.Float;
|
||||||
|
|
||||||
namespace MoonWorksTest
|
namespace MoonWorksTest
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
struct PositionTexture
|
struct PositionTexture : MoonWorks.Graphics.IVertexType
|
||||||
{
|
{
|
||||||
public Vector3 Position;
|
public Vector3 Position;
|
||||||
public Vector2 Texture;
|
public Vector2 Texture;
|
||||||
|
|
||||||
|
public static VertexElementFormat[] Formats => new VertexElementFormat[] { VertexElementFormat.Vector3, VertexElementFormat.Vector2 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,9 +15,14 @@ namespace MoonWorksTest
|
||||||
ScreenMode = ScreenMode.Windowed
|
ScreenMode = ScreenMode.Windowed
|
||||||
};
|
};
|
||||||
|
|
||||||
|
FrameLimiterSettings limiterSettings = new FrameLimiterSettings
|
||||||
|
{
|
||||||
|
Mode = FrameLimiterMode.Uncapped
|
||||||
|
};
|
||||||
|
|
||||||
TestGame game = new TestGame(
|
TestGame game = new TestGame(
|
||||||
windowCreateInfo,
|
windowCreateInfo,
|
||||||
PresentMode.FIFO,
|
limiterSettings,
|
||||||
60,
|
60,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
|
@ -23,23 +23,17 @@ namespace MoonWorksTest
|
||||||
|
|
||||||
GraphicsPipeline mainGraphicsPipeline;
|
GraphicsPipeline mainGraphicsPipeline;
|
||||||
|
|
||||||
byte[] screenshotPixels;
|
|
||||||
Buffer screenshotBuffer;
|
|
||||||
uint screenshotBufferSize;
|
|
||||||
|
|
||||||
StaticSound music;
|
StaticSound music;
|
||||||
StaticSoundInstance musicInstance;
|
StaticSoundInstance musicInstance;
|
||||||
StreamingSoundOgg musicStream;
|
StreamingSoundOgg musicStream;
|
||||||
|
|
||||||
bool screenshotInProgress = false;
|
public TestGame(WindowCreateInfo windowCreateInfo, FrameLimiterSettings limiterSettings, int targetTimestep = 60, bool debugMode = false) : base(windowCreateInfo, limiterSettings, targetTimestep, debugMode)
|
||||||
|
|
||||||
public TestGame(WindowCreateInfo windowCreateInfo, PresentMode presentMode, int targetTimestep = 60, bool debugMode = false) : base(windowCreateInfo, presentMode, targetTimestep, debugMode)
|
|
||||||
{
|
{
|
||||||
var windowWidth = windowCreateInfo.WindowWidth;
|
var windowWidth = windowCreateInfo.WindowWidth;
|
||||||
var windowHeight = windowCreateInfo.WindowHeight;
|
var windowHeight = windowCreateInfo.WindowHeight;
|
||||||
|
|
||||||
passthroughVertexShaderModule = new ShaderModule(GraphicsDevice, Path.Combine("Content", "passthrough_vert.spv"));
|
//passthroughVertexShaderModule = new ShaderModule(GraphicsDevice, Path.Combine("Content", "passthrough_vert.spv"));
|
||||||
raymarchFragmentShaderModule = new ShaderModule(GraphicsDevice, Path.Combine("Content", "hexagon_grid.spv"));
|
//raymarchFragmentShaderModule = new ShaderModule(GraphicsDevice, Path.Combine("Content", "hexagon_grid.spv"));
|
||||||
|
|
||||||
raymarchUniforms.time = 0;
|
raymarchUniforms.time = 0;
|
||||||
raymarchUniforms.padding = 0;
|
raymarchUniforms.padding = 0;
|
||||||
|
@ -48,8 +42,8 @@ namespace MoonWorksTest
|
||||||
|
|
||||||
var uploadCommandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
var uploadCommandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
||||||
|
|
||||||
woodTexture = Texture.LoadPNG(GraphicsDevice, uploadCommandBuffer, "Content/woodgrain.png");
|
woodTexture = Texture.FromImageFile(GraphicsDevice, uploadCommandBuffer, "Content/woodgrain.png");
|
||||||
noiseTexture = Texture.LoadPNG(GraphicsDevice, uploadCommandBuffer, "Content/noise.png");
|
noiseTexture = Texture.FromImageFile(GraphicsDevice, uploadCommandBuffer, "Content/noise.png");
|
||||||
|
|
||||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
||||||
|
|
||||||
|
@ -81,41 +75,39 @@ namespace MoonWorksTest
|
||||||
|
|
||||||
/* Pipeline */
|
/* Pipeline */
|
||||||
|
|
||||||
|
/*
|
||||||
mainGraphicsPipeline = new GraphicsPipeline(
|
mainGraphicsPipeline = new GraphicsPipeline(
|
||||||
GraphicsDevice,
|
GraphicsDevice,
|
||||||
new GraphicsPipelineCreateInfo
|
new GraphicsPipelineCreateInfo
|
||||||
{
|
{
|
||||||
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
||||||
new ColorAttachmentDescription(
|
new ColorAttachmentDescription(
|
||||||
GraphicsDevice.GetSwapchainFormat(Window),
|
MainWindow.SwapchainFormat,
|
||||||
ColorAttachmentBlendState.None
|
ColorAttachmentBlendState.None
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
DepthStencilState = DepthStencilState.Disable,
|
DepthStencilState = DepthStencilState.Disable,
|
||||||
VertexShaderInfo = GraphicsShaderInfo.Create(passthroughVertexShaderModule, "main", 0),
|
VertexShaderInfo = GraphicsShaderInfo.Create(passthroughVertexShaderModule, "main", 0),
|
||||||
VertexInputState = new VertexInputState(
|
VertexInputState = VertexInputState.CreateSingleBinding<PositionTexture>(),
|
||||||
VertexBinding.Create<PositionTexture>(),
|
|
||||||
VertexAttribute.Create<PositionTexture>("Position", 0),
|
|
||||||
VertexAttribute.Create<PositionTexture>("Texture", 1)
|
|
||||||
),
|
|
||||||
PrimitiveType = PrimitiveType.TriangleList,
|
PrimitiveType = PrimitiveType.TriangleList,
|
||||||
FragmentShaderInfo = GraphicsShaderInfo.Create<RaymarchUniforms>(raymarchFragmentShaderModule, "main", 2),
|
FragmentShaderInfo = GraphicsShaderInfo.Create<RaymarchUniforms>(raymarchFragmentShaderModule, "main", 2),
|
||||||
RasterizerState = RasterizerState.CW_CullBack,
|
RasterizerState = RasterizerState.CW_CullBack,
|
||||||
ViewportState = new ViewportState((int)Window.Width, (int)Window.Height),
|
|
||||||
MultisampleState = MultisampleState.None
|
MultisampleState = MultisampleState.None
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
screenshotBufferSize = windowWidth * windowHeight * 4;
|
// music = StaticSound.LoadOgg(AudioDevice, Path.Combine("Content", "title_screen.ogg"));
|
||||||
screenshotPixels = new byte[screenshotBufferSize];
|
// musicInstance = music.CreateInstance();
|
||||||
screenshotBuffer = new Buffer(GraphicsDevice, 0, screenshotBufferSize);
|
|
||||||
|
|
||||||
music = StaticSound.LoadOgg(AudioDevice, Path.Combine("Content", "title_screen.ogg"));
|
|
||||||
musicInstance = music.CreateInstance();
|
|
||||||
// musicInstance.Play();
|
// musicInstance.Play();
|
||||||
|
|
||||||
musicStream = StreamingSoundOgg.Load(AudioDevice, Path.Combine("Content", "title_screen.ogg"), false, true);
|
musicStream = StreamingSoundOgg.Load(AudioDevice, Path.Combine("Content", "housecleaning_herbal_mix.ogg"));
|
||||||
musicStream.Play();
|
musicStream.QueueSyncPlay();
|
||||||
|
|
||||||
|
var musicQoaStream = StreamingSoundQoa.Load(AudioDevice, Path.Combine("Content", "housecleaning_herbal_mix.qoa"));
|
||||||
|
musicQoaStream.QueueSyncPlay();
|
||||||
|
|
||||||
|
AudioDevice.SyncPlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update(System.TimeSpan dt)
|
protected override void Update(System.TimeSpan dt)
|
||||||
|
@ -123,12 +115,11 @@ namespace MoonWorksTest
|
||||||
raymarchUniforms.time += (float)dt.TotalSeconds;
|
raymarchUniforms.time += (float)dt.TotalSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Draw(System.TimeSpan dt, double alpha)
|
protected override void Draw(double alpha)
|
||||||
{
|
{
|
||||||
var commandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
var commandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
||||||
|
|
||||||
var swapchainTexture = commandBuffer.AcquireSwapchainTexture(Window);
|
var swapchainTexture = commandBuffer.AcquireSwapchainTexture(MainWindow);
|
||||||
var takeScreenshot = Inputs.Keyboard.IsPressed(Keycode.S) && !screenshotInProgress && (swapchainTexture != null);
|
|
||||||
|
|
||||||
if (swapchainTexture != null)
|
if (swapchainTexture != null)
|
||||||
{
|
{
|
||||||
|
@ -136,6 +127,7 @@ namespace MoonWorksTest
|
||||||
new ColorAttachmentInfo(swapchainTexture, clearColor)
|
new ColorAttachmentInfo(swapchainTexture, clearColor)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
commandBuffer.BindGraphicsPipeline(mainGraphicsPipeline);
|
commandBuffer.BindGraphicsPipeline(mainGraphicsPipeline);
|
||||||
|
|
||||||
commandBuffer.BindVertexBuffers(vertexBuffer);
|
commandBuffer.BindVertexBuffers(vertexBuffer);
|
||||||
|
@ -146,46 +138,16 @@ namespace MoonWorksTest
|
||||||
|
|
||||||
var fragmentParamOffset = commandBuffer.PushFragmentShaderUniforms(raymarchUniforms);
|
var fragmentParamOffset = commandBuffer.PushFragmentShaderUniforms(raymarchUniforms);
|
||||||
commandBuffer.DrawPrimitives(0, 1, 0, fragmentParamOffset);
|
commandBuffer.DrawPrimitives(0, 1, 0, fragmentParamOffset);
|
||||||
|
*/
|
||||||
|
|
||||||
commandBuffer.EndRenderPass();
|
commandBuffer.EndRenderPass();
|
||||||
|
|
||||||
if (takeScreenshot)
|
|
||||||
{
|
|
||||||
commandBuffer.CopyTextureToBuffer(new TextureSlice(swapchainTexture), screenshotBuffer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsDevice.Submit(commandBuffer);
|
GraphicsDevice.Submit(commandBuffer);
|
||||||
|
|
||||||
if (takeScreenshot)
|
|
||||||
{
|
|
||||||
Task.Run(() => SaveScreenshot());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveScreenshot()
|
protected override void Destroy()
|
||||||
{
|
|
||||||
screenshotInProgress = true;
|
|
||||||
|
|
||||||
var name = "MoonWorksTest-" + System.DateTime.Now.ToString("MM-dd-yyyy-hh-mm-ss") + ".png";
|
|
||||||
System.Console.WriteLine("Saving screenshot " + name + " ...");
|
|
||||||
|
|
||||||
GraphicsDevice.Wait();
|
|
||||||
screenshotBuffer.GetData(screenshotPixels, screenshotBufferSize);
|
|
||||||
|
|
||||||
Texture.SavePNG(
|
|
||||||
name,
|
|
||||||
1280,
|
|
||||||
720,
|
|
||||||
GraphicsDevice.GetSwapchainFormat(Window),
|
|
||||||
screenshotPixels
|
|
||||||
);
|
|
||||||
|
|
||||||
System.Console.WriteLine("Screenshot saved!");
|
|
||||||
|
|
||||||
screenshotInProgress = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnDestroy()
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue