Compare commits
No commits in common. "qoa_test" and "main" have entirely different histories.
|
@ -1,2 +0,0 @@
|
||||||
*.ogg filter=lfs diff=lfs merge=lfs -text
|
|
||||||
*.qoa filter=lfs diff=lfs merge=lfs -text
|
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
// 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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
BIN
Content/housecleaning_herbal_mix.ogg (Stored with Git LFS)
BIN
Content/housecleaning_herbal_mix.ogg (Stored with Git LFS)
Binary file not shown.
BIN
Content/housecleaning_herbal_mix.qoa (Stored with Git LFS)
BIN
Content/housecleaning_herbal_mix.qoa (Stored with Git LFS)
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>net7.0</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RootNamespace>MoonWorksTest</RootNamespace>
|
<RootNamespace>MoonWorksTest</RootNamespace>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit a869a0e958fd307a2883d111489ea7c49793baf6
|
Subproject commit 111df04c0f7be740108cc3536eda3629572714d8
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,15 +1,12 @@
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using MoonWorks.Graphics;
|
using MoonWorks.Math;
|
||||||
using MoonWorks.Math.Float;
|
|
||||||
|
|
||||||
namespace MoonWorksTest
|
namespace MoonWorksTest
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
struct PositionTexture : MoonWorks.Graphics.IVertexType
|
struct PositionTexture
|
||||||
{
|
{
|
||||||
public Vector3 Position;
|
public Vector3 Position;
|
||||||
public Vector2 Texture;
|
public Vector2 Texture;
|
||||||
|
}
|
||||||
public static VertexElementFormat[] Formats => new VertexElementFormat[] { VertexElementFormat.Vector3, VertexElementFormat.Vector2 };
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,14 +15,9 @@ namespace MoonWorksTest
|
||||||
ScreenMode = ScreenMode.Windowed
|
ScreenMode = ScreenMode.Windowed
|
||||||
};
|
};
|
||||||
|
|
||||||
FrameLimiterSettings limiterSettings = new FrameLimiterSettings
|
TestGame game = new TestGame(
|
||||||
{
|
|
||||||
Mode = FrameLimiterMode.Uncapped
|
|
||||||
};
|
|
||||||
|
|
||||||
TestGame game = new TestGame(
|
|
||||||
windowCreateInfo,
|
windowCreateInfo,
|
||||||
limiterSettings,
|
PresentMode.FIFO,
|
||||||
60,
|
60,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
|
@ -23,17 +23,23 @@ namespace MoonWorksTest
|
||||||
|
|
||||||
GraphicsPipeline mainGraphicsPipeline;
|
GraphicsPipeline mainGraphicsPipeline;
|
||||||
|
|
||||||
|
byte[] screenshotPixels;
|
||||||
|
Buffer screenshotBuffer;
|
||||||
|
uint screenshotBufferSize;
|
||||||
|
|
||||||
StaticSound music;
|
StaticSound music;
|
||||||
StaticSoundInstance musicInstance;
|
StaticSoundInstance musicInstance;
|
||||||
StreamingSoundOgg musicStream;
|
StreamingSoundOgg musicStream;
|
||||||
|
|
||||||
public TestGame(WindowCreateInfo windowCreateInfo, FrameLimiterSettings limiterSettings, int targetTimestep = 60, bool debugMode = false) : base(windowCreateInfo, limiterSettings, targetTimestep, debugMode)
|
bool screenshotInProgress = false;
|
||||||
|
|
||||||
|
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;
|
||||||
|
@ -42,8 +48,8 @@ namespace MoonWorksTest
|
||||||
|
|
||||||
var uploadCommandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
var uploadCommandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
||||||
|
|
||||||
woodTexture = Texture.FromImageFile(GraphicsDevice, uploadCommandBuffer, "Content/woodgrain.png");
|
woodTexture = Texture.LoadPNG(GraphicsDevice, uploadCommandBuffer, "Content/woodgrain.png");
|
||||||
noiseTexture = Texture.FromImageFile(GraphicsDevice, uploadCommandBuffer, "Content/noise.png");
|
noiseTexture = Texture.LoadPNG(GraphicsDevice, uploadCommandBuffer, "Content/noise.png");
|
||||||
|
|
||||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
||||||
|
|
||||||
|
@ -75,51 +81,54 @@ 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(
|
||||||
MainWindow.SwapchainFormat,
|
GraphicsDevice.GetSwapchainFormat(Window),
|
||||||
ColorAttachmentBlendState.None
|
ColorAttachmentBlendState.None
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
DepthStencilState = DepthStencilState.Disable,
|
DepthStencilState = DepthStencilState.Disable,
|
||||||
VertexShaderInfo = GraphicsShaderInfo.Create(passthroughVertexShaderModule, "main", 0),
|
VertexShaderInfo = GraphicsShaderInfo.Create(passthroughVertexShaderModule, "main", 0),
|
||||||
VertexInputState = VertexInputState.CreateSingleBinding<PositionTexture>(),
|
VertexInputState = new VertexInputState(
|
||||||
|
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
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
*/
|
|
||||||
|
|
||||||
// music = StaticSound.LoadOgg(AudioDevice, Path.Combine("Content", "title_screen.ogg"));
|
screenshotBufferSize = windowWidth * windowHeight * 4;
|
||||||
// musicInstance = music.CreateInstance();
|
screenshotPixels = new byte[screenshotBufferSize];
|
||||||
|
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", "housecleaning_herbal_mix.ogg"));
|
musicStream = StreamingSoundOgg.Load(AudioDevice, Path.Combine("Content", "title_screen.ogg"), false, true);
|
||||||
musicStream.QueueSyncPlay();
|
musicStream.Play();
|
||||||
|
}
|
||||||
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)
|
||||||
{
|
{
|
||||||
raymarchUniforms.time += (float)dt.TotalSeconds;
|
raymarchUniforms.time += (float)dt.TotalSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Draw(double alpha)
|
protected override void Draw(System.TimeSpan dt, double alpha)
|
||||||
{
|
{
|
||||||
var commandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
var commandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
||||||
|
|
||||||
var swapchainTexture = commandBuffer.AcquireSwapchainTexture(MainWindow);
|
var swapchainTexture = commandBuffer.AcquireSwapchainTexture(Window);
|
||||||
|
var takeScreenshot = Inputs.Keyboard.IsPressed(Keycode.S) && !screenshotInProgress && (swapchainTexture != null);
|
||||||
|
|
||||||
if (swapchainTexture != null)
|
if (swapchainTexture != null)
|
||||||
{
|
{
|
||||||
|
@ -127,7 +136,6 @@ namespace MoonWorksTest
|
||||||
new ColorAttachmentInfo(swapchainTexture, clearColor)
|
new ColorAttachmentInfo(swapchainTexture, clearColor)
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
|
||||||
commandBuffer.BindGraphicsPipeline(mainGraphicsPipeline);
|
commandBuffer.BindGraphicsPipeline(mainGraphicsPipeline);
|
||||||
|
|
||||||
commandBuffer.BindVertexBuffers(vertexBuffer);
|
commandBuffer.BindVertexBuffers(vertexBuffer);
|
||||||
|
@ -138,16 +146,46 @@ 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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Destroy()
|
private void SaveScreenshot()
|
||||||
|
{
|
||||||
|
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