Compare commits
2 Commits
2bd6531766
...
74b6e00bc8
Author | SHA1 | Date |
---|---|---|
Caleb Cornett | 74b6e00bc8 | |
Caleb Cornett | a64db5d0e1 |
|
@ -2,3 +2,4 @@ bin/
|
|||
obj/
|
||||
.vs/
|
||||
*.csproj.user
|
||||
Properties/
|
|
@ -4,139 +4,139 @@ using MoonWorks.Math.Float;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class BasicComputeGame : Game
|
||||
{
|
||||
private GraphicsPipeline drawPipeline;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
private Buffer vertexBuffer;
|
||||
class BasicComputeGame : Game
|
||||
{
|
||||
private GraphicsPipeline drawPipeline;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
private Buffer vertexBuffer;
|
||||
|
||||
public BasicComputeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Create the compute pipeline that writes texture data
|
||||
ShaderModule fillTextureComputeShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("FillTexture.comp")
|
||||
);
|
||||
public BasicComputeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Create the compute pipeline that writes texture data
|
||||
ShaderModule fillTextureComputeShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("FillTexture.comp")
|
||||
);
|
||||
|
||||
ComputePipeline fillTextureComputePipeline = new ComputePipeline(
|
||||
GraphicsDevice,
|
||||
ComputeShaderInfo.Create(fillTextureComputeShaderModule, "main", 0, 1)
|
||||
);
|
||||
ComputePipeline fillTextureComputePipeline = new ComputePipeline(
|
||||
GraphicsDevice,
|
||||
ComputeShaderInfo.Create(fillTextureComputeShaderModule, "main", 0, 1)
|
||||
);
|
||||
|
||||
// Create the compute pipeline that calculates squares of numbers
|
||||
ShaderModule calculateSquaresComputeShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("CalculateSquares.comp")
|
||||
);
|
||||
// Create the compute pipeline that calculates squares of numbers
|
||||
ShaderModule calculateSquaresComputeShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("CalculateSquares.comp")
|
||||
);
|
||||
|
||||
ComputePipeline calculateSquaresComputePipeline = new ComputePipeline(
|
||||
GraphicsDevice,
|
||||
ComputeShaderInfo.Create(calculateSquaresComputeShaderModule, "main", 1, 0)
|
||||
);
|
||||
ComputePipeline calculateSquaresComputePipeline = new ComputePipeline(
|
||||
GraphicsDevice,
|
||||
ComputeShaderInfo.Create(calculateSquaresComputeShaderModule, "main", 1, 0)
|
||||
);
|
||||
|
||||
// Create the graphics pipeline
|
||||
ShaderModule vertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.vert")
|
||||
);
|
||||
// Create the graphics pipeline
|
||||
ShaderModule vertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.vert")
|
||||
);
|
||||
|
||||
ShaderModule fragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.frag")
|
||||
);
|
||||
ShaderModule fragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.frag")
|
||||
);
|
||||
|
||||
GraphicsPipelineCreateInfo drawPipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
GraphicsPipelineCreateInfo drawPipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
drawPipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
drawPipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
drawPipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
drawPipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
|
||||
drawPipeline = new GraphicsPipeline(
|
||||
GraphicsDevice,
|
||||
drawPipelineCreateInfo
|
||||
);
|
||||
drawPipeline = new GraphicsPipeline(
|
||||
GraphicsDevice,
|
||||
drawPipelineCreateInfo
|
||||
);
|
||||
|
||||
// Create buffers and textures
|
||||
uint[] squares = new uint[64];
|
||||
Buffer squaresBuffer = Buffer.Create<uint>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Compute,
|
||||
(uint) squares.Length
|
||||
);
|
||||
// Create buffers and textures
|
||||
uint[] squares = new uint[64];
|
||||
Buffer squaresBuffer = Buffer.Create<uint>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Compute,
|
||||
(uint) squares.Length
|
||||
);
|
||||
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
6
|
||||
);
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
6
|
||||
);
|
||||
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Compute | TextureUsageFlags.Sampler
|
||||
);
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Compute | TextureUsageFlags.Sampler
|
||||
);
|
||||
|
||||
sampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
sampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
|
||||
// Upload GPU resources and dispatch compute work
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
// Upload GPU resources and dispatch compute work
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
|
||||
cmdbuf.SetBufferData(vertexBuffer, new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
});
|
||||
cmdbuf.SetBufferData(vertexBuffer, new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
});
|
||||
|
||||
// This should result in a bright yellow texture!
|
||||
cmdbuf.BindComputePipeline(fillTextureComputePipeline);
|
||||
cmdbuf.BindComputeTextures(texture);
|
||||
cmdbuf.DispatchCompute(texture.Width / 8, texture.Height / 8, 1, 0);
|
||||
// This should result in a bright yellow texture!
|
||||
cmdbuf.BindComputePipeline(fillTextureComputePipeline);
|
||||
cmdbuf.BindComputeTextures(texture);
|
||||
cmdbuf.DispatchCompute(texture.Width / 8, texture.Height / 8, 1, 0);
|
||||
|
||||
// This calculates the squares of the first N integers!
|
||||
cmdbuf.BindComputePipeline(calculateSquaresComputePipeline);
|
||||
cmdbuf.BindComputeBuffers(squaresBuffer);
|
||||
cmdbuf.DispatchCompute((uint) squares.Length / 8, 1, 1, 0);
|
||||
// This calculates the squares of the first N integers!
|
||||
cmdbuf.BindComputePipeline(calculateSquaresComputePipeline);
|
||||
cmdbuf.BindComputeBuffers(squaresBuffer);
|
||||
cmdbuf.DispatchCompute((uint) squares.Length / 8, 1, 1, 0);
|
||||
|
||||
var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
GraphicsDevice.ReleaseFence(fence);
|
||||
|
||||
// Print the squares!
|
||||
squaresBuffer.GetData(squares);
|
||||
Logger.LogInfo("Squares of the first " + squares.Length + " integers: " + string.Join(", ", squares));
|
||||
}
|
||||
// Print the squares!
|
||||
squaresBuffer.GetData(squares);
|
||||
Logger.LogInfo("Squares of the first " + squares.Length + " integers: " + string.Join(", ", squares));
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(drawPipeline);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.DrawPrimitives(0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(drawPipeline);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.DrawPrimitives(0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
BasicComputeGame game = new BasicComputeGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
BasicComputeGame game = new BasicComputeGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,107 +4,107 @@ using MoonWorks.Math.Float;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class BasicStencilGame : Game
|
||||
{
|
||||
private GraphicsPipeline maskerPipeline;
|
||||
private GraphicsPipeline maskeePipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Texture depthStencilTexture;
|
||||
class BasicStencilGame : Game
|
||||
{
|
||||
private GraphicsPipeline maskerPipeline;
|
||||
private GraphicsPipeline maskeePipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Texture depthStencilTexture;
|
||||
|
||||
public BasicStencilGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColor.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
public BasicStencilGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColor.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
|
||||
// Create the graphics pipelines
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.AttachmentInfo.HasDepthStencilAttachment = true;
|
||||
pipelineCreateInfo.AttachmentInfo.DepthStencilFormat = TextureFormat.D16S8;
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>();
|
||||
pipelineCreateInfo.DepthStencilState = new DepthStencilState
|
||||
{
|
||||
StencilTestEnable = true,
|
||||
FrontStencilState = new StencilOpState
|
||||
{
|
||||
Reference = 1,
|
||||
WriteMask = 0xFF,
|
||||
CompareOp = CompareOp.Never,
|
||||
FailOp = StencilOp.Replace,
|
||||
}
|
||||
};
|
||||
maskerPipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipelines
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.AttachmentInfo.HasDepthStencilAttachment = true;
|
||||
pipelineCreateInfo.AttachmentInfo.DepthStencilFormat = TextureFormat.D16S8;
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>();
|
||||
pipelineCreateInfo.DepthStencilState = new DepthStencilState
|
||||
{
|
||||
StencilTestEnable = true,
|
||||
FrontStencilState = new StencilOpState
|
||||
{
|
||||
Reference = 1,
|
||||
WriteMask = 0xFF,
|
||||
CompareOp = CompareOp.Never,
|
||||
FailOp = StencilOp.Replace,
|
||||
}
|
||||
};
|
||||
maskerPipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
pipelineCreateInfo.DepthStencilState = new DepthStencilState
|
||||
{
|
||||
StencilTestEnable = true,
|
||||
FrontStencilState = new StencilOpState
|
||||
{
|
||||
Reference = 0,
|
||||
CompareMask = 0xFF,
|
||||
WriteMask = 0,
|
||||
CompareOp = CompareOp.Equal,
|
||||
}
|
||||
};
|
||||
maskeePipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
pipelineCreateInfo.DepthStencilState = new DepthStencilState
|
||||
{
|
||||
StencilTestEnable = true,
|
||||
FrontStencilState = new StencilOpState
|
||||
{
|
||||
Reference = 0,
|
||||
CompareMask = 0xFF,
|
||||
WriteMask = 0,
|
||||
CompareOp = CompareOp.Equal,
|
||||
}
|
||||
};
|
||||
maskeePipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
depthStencilTexture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.D16S8,
|
||||
TextureUsageFlags.DepthStencilTarget
|
||||
);
|
||||
vertexBuffer = Buffer.Create<PositionColorVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 6);
|
||||
// Create and populate the GPU resources
|
||||
depthStencilTexture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.D16S8,
|
||||
TextureUsageFlags.DepthStencilTarget
|
||||
);
|
||||
vertexBuffer = Buffer.Create<PositionColorVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 6);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-0.5f, 0.5f, 0), Color.Yellow),
|
||||
new PositionColorVertex(new Vector3(0.5f, 0.5f, 0), Color.Yellow),
|
||||
new PositionColorVertex(new Vector3(0, -0.5f, 0), Color.Yellow),
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-0.5f, 0.5f, 0), Color.Yellow),
|
||||
new PositionColorVertex(new Vector3(0.5f, 0.5f, 0), Color.Yellow),
|
||||
new PositionColorVertex(new Vector3(0, -0.5f, 0), Color.Yellow),
|
||||
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.Red),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.Lime),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.Blue),
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.Red),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.Lime),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.Blue),
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(
|
||||
new DepthStencilAttachmentInfo(depthStencilTexture, new DepthStencilValue(0, 0), StoreOp.DontCare, StoreOp.DontCare),
|
||||
new ColorAttachmentInfo(backbuffer, Color.Black)
|
||||
);
|
||||
cmdbuf.BindGraphicsPipeline(maskerPipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.DrawPrimitives(0, 1, 0, 0);
|
||||
cmdbuf.BindGraphicsPipeline(maskeePipeline);
|
||||
cmdbuf.DrawPrimitives(3, 1, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(
|
||||
new DepthStencilAttachmentInfo(depthStencilTexture, new DepthStencilValue(0, 0), StoreOp.DontCare, StoreOp.DontCare),
|
||||
new ColorAttachmentInfo(backbuffer, Color.Black)
|
||||
);
|
||||
cmdbuf.BindGraphicsPipeline(maskerPipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.DrawPrimitives(0, 1, 0, 0);
|
||||
cmdbuf.BindGraphicsPipeline(maskeePipeline);
|
||||
cmdbuf.DrawPrimitives(3, 1, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
BasicStencilGame p = new BasicStencilGame();
|
||||
p.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
BasicStencilGame p = new BasicStencilGame();
|
||||
p.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace MoonWorks.Test
|
|||
|
||||
public BasicTriangleGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left to toggle wireframe mode\nPress Down to toggle small viewport\nPress Right to toggle scissor rect");
|
||||
Logger.LogInfo("Press Left to toggle wireframe mode\nPress Down to toggle small viewport\nPress Right to toggle scissor rect");
|
||||
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("RawTriangle.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
|
|
|
@ -5,129 +5,129 @@ using System.IO;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class CompressedTexturesGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Sampler sampler;
|
||||
private Texture[] textures;
|
||||
private string[] textureNames = new string[]
|
||||
{
|
||||
"BC1",
|
||||
"BC2",
|
||||
"BC3",
|
||||
"BC7"
|
||||
};
|
||||
class CompressedTexturesGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Sampler sampler;
|
||||
private Texture[] textures;
|
||||
private string[] textureNames = new string[]
|
||||
{
|
||||
"BC1",
|
||||
"BC2",
|
||||
"BC3",
|
||||
"BC7"
|
||||
};
|
||||
|
||||
private int currentTextureIndex;
|
||||
private int currentTextureIndex;
|
||||
|
||||
public CompressedTexturesGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to cycle between textures");
|
||||
Logger.LogInfo("Setting texture to: " + textureNames[0]);
|
||||
public CompressedTexturesGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to cycle between textures");
|
||||
Logger.LogInfo("Setting texture to: " + textureNames[0]);
|
||||
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create sampler
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
||||
// Create sampler
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
||||
|
||||
// Create texture array
|
||||
textures = new Texture[textureNames.Length];
|
||||
// Create texture array
|
||||
textures = new Texture[textureNames.Length];
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
for (int i = 0; i < textureNames.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(textureNames[i]);
|
||||
using (FileStream fs = new FileStream(TestUtils.GetTexturePath(textureNames[i] + ".dds"), FileMode.Open, FileAccess.Read))
|
||||
textures[i] = Texture.LoadDDS(GraphicsDevice, cmdbuf, fs);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
for (int i = 0; i < textureNames.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(textureNames[i]);
|
||||
using (FileStream fs = new FileStream(TestUtils.GetTexturePath(textureNames[i] + ".dds"), FileMode.Open, FileAccess.Read))
|
||||
textures[i] = Texture.LoadDDS(GraphicsDevice, cmdbuf, fs);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
int prevSamplerIndex = currentTextureIndex;
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
int prevSamplerIndex = currentTextureIndex;
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
currentTextureIndex -= 1;
|
||||
if (currentTextureIndex < 0)
|
||||
{
|
||||
currentTextureIndex = textureNames.Length - 1;
|
||||
}
|
||||
}
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
currentTextureIndex -= 1;
|
||||
if (currentTextureIndex < 0)
|
||||
{
|
||||
currentTextureIndex = textureNames.Length - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
currentTextureIndex += 1;
|
||||
if (currentTextureIndex >= textureNames.Length)
|
||||
{
|
||||
currentTextureIndex = 0;
|
||||
}
|
||||
}
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
currentTextureIndex += 1;
|
||||
if (currentTextureIndex >= textureNames.Length)
|
||||
{
|
||||
currentTextureIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (prevSamplerIndex != currentTextureIndex)
|
||||
{
|
||||
Logger.LogInfo("Setting texture to: " + textureNames[currentTextureIndex]);
|
||||
}
|
||||
}
|
||||
if (prevSamplerIndex != currentTextureIndex)
|
||||
{
|
||||
Logger.LogInfo("Setting texture to: " + textureNames[currentTextureIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(textures[currentTextureIndex], sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(textures[currentTextureIndex], sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CompressedTexturesGame game = new CompressedTexturesGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CompressedTexturesGame game = new CompressedTexturesGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,126 +4,126 @@ using MoonWorks.Math.Float;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class ComputeUniformsGame : Game
|
||||
{
|
||||
private GraphicsPipeline drawPipeline;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
private Buffer vertexBuffer;
|
||||
class ComputeUniformsGame : Game
|
||||
{
|
||||
private GraphicsPipeline drawPipeline;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
private Buffer vertexBuffer;
|
||||
|
||||
struct GradientTextureComputeUniforms
|
||||
{
|
||||
public uint groupCountX;
|
||||
public uint groupCountY;
|
||||
struct GradientTextureComputeUniforms
|
||||
{
|
||||
public uint groupCountX;
|
||||
public uint groupCountY;
|
||||
|
||||
public GradientTextureComputeUniforms(uint w, uint h)
|
||||
{
|
||||
groupCountX = w;
|
||||
groupCountY = h;
|
||||
}
|
||||
}
|
||||
public GradientTextureComputeUniforms(uint w, uint h)
|
||||
{
|
||||
groupCountX = w;
|
||||
groupCountY = h;
|
||||
}
|
||||
}
|
||||
|
||||
public ComputeUniformsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Create the compute pipeline that writes texture data
|
||||
ShaderModule gradientTextureComputeShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("GradientTexture.comp")
|
||||
);
|
||||
public ComputeUniformsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Create the compute pipeline that writes texture data
|
||||
ShaderModule gradientTextureComputeShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("GradientTexture.comp")
|
||||
);
|
||||
|
||||
ComputePipeline gradientTextureComputePipeline = new ComputePipeline(
|
||||
GraphicsDevice,
|
||||
ComputeShaderInfo.Create<GradientTextureComputeUniforms>(gradientTextureComputeShaderModule, "main", 0, 1)
|
||||
);
|
||||
ComputePipeline gradientTextureComputePipeline = new ComputePipeline(
|
||||
GraphicsDevice,
|
||||
ComputeShaderInfo.Create<GradientTextureComputeUniforms>(gradientTextureComputeShaderModule, "main", 0, 1)
|
||||
);
|
||||
|
||||
// Create the graphics pipeline
|
||||
ShaderModule vertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.vert")
|
||||
);
|
||||
// Create the graphics pipeline
|
||||
ShaderModule vertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.vert")
|
||||
);
|
||||
|
||||
ShaderModule fragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.frag")
|
||||
);
|
||||
ShaderModule fragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.frag")
|
||||
);
|
||||
|
||||
GraphicsPipelineCreateInfo drawPipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
drawPipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
drawPipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
GraphicsPipelineCreateInfo drawPipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
drawPipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
drawPipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
|
||||
drawPipeline = new GraphicsPipeline(
|
||||
GraphicsDevice,
|
||||
drawPipelineCreateInfo
|
||||
);
|
||||
drawPipeline = new GraphicsPipeline(
|
||||
GraphicsDevice,
|
||||
drawPipelineCreateInfo
|
||||
);
|
||||
|
||||
// Create buffers and textures
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
6
|
||||
);
|
||||
// Create buffers and textures
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
6
|
||||
);
|
||||
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Compute | TextureUsageFlags.Sampler
|
||||
);
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Compute | TextureUsageFlags.Sampler
|
||||
);
|
||||
|
||||
sampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
sampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
|
||||
// Upload GPU resources and dispatch compute work
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(vertexBuffer, new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
});
|
||||
// Upload GPU resources and dispatch compute work
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(vertexBuffer, new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
});
|
||||
|
||||
GradientTextureComputeUniforms gradientUniforms = new GradientTextureComputeUniforms(
|
||||
texture.Width / 8,
|
||||
texture.Height / 8
|
||||
);
|
||||
GradientTextureComputeUniforms gradientUniforms = new GradientTextureComputeUniforms(
|
||||
texture.Width / 8,
|
||||
texture.Height / 8
|
||||
);
|
||||
|
||||
cmdbuf.BindComputePipeline(gradientTextureComputePipeline);
|
||||
cmdbuf.BindComputeTextures(texture);
|
||||
uint offset = cmdbuf.PushComputeShaderUniforms(gradientUniforms);
|
||||
cmdbuf.DispatchCompute(gradientUniforms.groupCountX, gradientUniforms.groupCountY, 1, offset);
|
||||
cmdbuf.BindComputePipeline(gradientTextureComputePipeline);
|
||||
cmdbuf.BindComputeTextures(texture);
|
||||
uint offset = cmdbuf.PushComputeShaderUniforms(gradientUniforms);
|
||||
cmdbuf.DispatchCompute(gradientUniforms.groupCountX, gradientUniforms.groupCountY, 1, offset);
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(drawPipeline);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.DrawPrimitives(0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(drawPipeline);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.DrawPrimitives(0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
ComputeUniformsGame game = new ComputeUniformsGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
ComputeUniformsGame game = new ComputeUniformsGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,72 +5,72 @@ using MoonWorks.Math.Float;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class CopyTextureGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture originalTexture;
|
||||
private Texture textureCopy;
|
||||
private Texture textureSmallCopy;
|
||||
private Sampler sampler;
|
||||
class CopyTextureGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture originalTexture;
|
||||
private Texture textureCopy;
|
||||
private Texture textureSmallCopy;
|
||||
private Sampler sampler;
|
||||
|
||||
public unsafe CopyTextureGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
public unsafe CopyTextureGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions[0].BlendState = ColorAttachmentBlendState.AlphaBlend;
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions[0].BlendState = ColorAttachmentBlendState.AlphaBlend;
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create sampler
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
// Create sampler
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 12);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 12);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 12);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 12);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1f, 0f, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0f, 0f, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0f, 1f, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1f, 1f, 0), new Vector2(0, 1)),
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1f, 0f, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0f, 0f, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0f, 1f, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1f, 1f, 0), new Vector2(0, 1)),
|
||||
|
||||
new PositionTextureVertex(new Vector3(0f, 0f, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1f, 0f, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1f, 1f, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(0f, 1f, 0), new Vector2(0, 1)),
|
||||
new PositionTextureVertex(new Vector3(0f, 0f, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1f, 0f, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1f, 1f, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(0f, 1f, 0), new Vector2(0, 1)),
|
||||
|
||||
new PositionTextureVertex(new Vector3(-0.5f, -1f, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0.5f, -1f, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0.5f, 0f, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-0.5f, 0f, 0), new Vector2(0, 1))
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
new PositionTextureVertex(new Vector3(-0.5f, -1f, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0.5f, -1f, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3( 0.5f, 0f, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-0.5f, 0f, 0), new Vector2(0, 1))
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
|
||||
// Load the texture. Storing the texture bytes so we can compare them.
|
||||
// Load the texture. Storing the texture bytes so we can compare them.
|
||||
var fileStream = new System.IO.FileStream(TestUtils.GetTexturePath("ravioli.png"), System.IO.FileMode.Open, System.IO.FileAccess.Read);
|
||||
var fileLength = fileStream.Length;
|
||||
var fileBuffer = NativeMemory.Alloc((nuint) fileLength);
|
||||
|
@ -87,54 +87,54 @@ namespace MoonWorks.Test
|
|||
|
||||
NativeMemory.Free(fileBuffer);
|
||||
|
||||
TextureCreateInfo textureCreateInfo = new TextureCreateInfo();
|
||||
textureCreateInfo.Width = (uint) width;
|
||||
textureCreateInfo.Height = (uint) height;
|
||||
textureCreateInfo.Depth = 1;
|
||||
textureCreateInfo.Format = TextureFormat.R8G8B8A8;
|
||||
textureCreateInfo.IsCube = false;
|
||||
textureCreateInfo.LevelCount = 1;
|
||||
textureCreateInfo.UsageFlags = TextureUsageFlags.Sampler;
|
||||
TextureCreateInfo textureCreateInfo = new TextureCreateInfo();
|
||||
textureCreateInfo.Width = (uint) width;
|
||||
textureCreateInfo.Height = (uint) height;
|
||||
textureCreateInfo.Depth = 1;
|
||||
textureCreateInfo.Format = TextureFormat.R8G8B8A8;
|
||||
textureCreateInfo.IsCube = false;
|
||||
textureCreateInfo.LevelCount = 1;
|
||||
textureCreateInfo.UsageFlags = TextureUsageFlags.Sampler;
|
||||
|
||||
originalTexture = new Texture(GraphicsDevice, textureCreateInfo);
|
||||
cmdbuf.SetTextureData(originalTexture, pixels, (uint) byteCount);
|
||||
originalTexture = new Texture(GraphicsDevice, textureCreateInfo);
|
||||
cmdbuf.SetTextureData(originalTexture, pixels, (uint) byteCount);
|
||||
|
||||
// Create a 1:1 copy of the texture
|
||||
textureCopy = new Texture(GraphicsDevice, textureCreateInfo);
|
||||
cmdbuf.CopyTextureToTexture(
|
||||
new TextureSlice(originalTexture),
|
||||
new TextureSlice(textureCopy),
|
||||
Filter.Linear
|
||||
);
|
||||
// Create a 1:1 copy of the texture
|
||||
textureCopy = new Texture(GraphicsDevice, textureCreateInfo);
|
||||
cmdbuf.CopyTextureToTexture(
|
||||
new TextureSlice(originalTexture),
|
||||
new TextureSlice(textureCopy),
|
||||
Filter.Linear
|
||||
);
|
||||
|
||||
// Create a half-sized copy of this texture
|
||||
textureCreateInfo.Width /= 2;
|
||||
textureCreateInfo.Height /= 2;
|
||||
textureSmallCopy = new Texture(GraphicsDevice, textureCreateInfo);
|
||||
cmdbuf.CopyTextureToTexture(
|
||||
new TextureSlice(originalTexture),
|
||||
new TextureSlice(
|
||||
textureSmallCopy,
|
||||
new Rect(
|
||||
(int) textureCreateInfo.Width,
|
||||
(int) textureCreateInfo.Height
|
||||
)
|
||||
),
|
||||
Filter.Linear
|
||||
);
|
||||
// Create a half-sized copy of this texture
|
||||
textureCreateInfo.Width /= 2;
|
||||
textureCreateInfo.Height /= 2;
|
||||
textureSmallCopy = new Texture(GraphicsDevice, textureCreateInfo);
|
||||
cmdbuf.CopyTextureToTexture(
|
||||
new TextureSlice(originalTexture),
|
||||
new TextureSlice(
|
||||
textureSmallCopy,
|
||||
new Rect(
|
||||
(int) textureCreateInfo.Width,
|
||||
(int) textureCreateInfo.Height
|
||||
)
|
||||
),
|
||||
Filter.Linear
|
||||
);
|
||||
|
||||
// Copy the texture to a buffer
|
||||
Buffer compareBuffer = Buffer.Create<byte>(GraphicsDevice, 0, (uint) byteCount);
|
||||
cmdbuf.CopyTextureToBuffer(new TextureSlice(originalTexture), compareBuffer);
|
||||
// Copy the texture to a buffer
|
||||
Buffer compareBuffer = Buffer.Create<byte>(GraphicsDevice, 0, (uint) byteCount);
|
||||
cmdbuf.CopyTextureToBuffer(new TextureSlice(originalTexture), compareBuffer);
|
||||
|
||||
var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
GraphicsDevice.ReleaseFence(fence);
|
||||
|
||||
// Compare the original bytes to the copied bytes.
|
||||
var copiedBytes = NativeMemory.Alloc((nuint) byteCount);
|
||||
// Compare the original bytes to the copied bytes.
|
||||
var copiedBytes = NativeMemory.Alloc((nuint) byteCount);
|
||||
var copiedSpan = new System.Span<byte>(copiedBytes, byteCount);
|
||||
compareBuffer.GetData(copiedSpan);
|
||||
compareBuffer.GetData(copiedSpan);
|
||||
|
||||
var originalSpan = new System.Span<byte>((void*) pixels, byteCount);
|
||||
|
||||
|
@ -149,35 +149,35 @@ namespace MoonWorks.Test
|
|||
}
|
||||
|
||||
RefreshCS.Refresh.Refresh_Image_Free(pixels);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(originalTexture, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, 0);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(textureCopy, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(4, 0, 2, 0, 0);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(textureSmallCopy, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(8, 0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(originalTexture, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, 0);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(textureCopy, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(4, 0, 2, 0, 0);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(textureSmallCopy, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(8, 0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CopyTextureGame game = new CopyTextureGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CopyTextureGame game = new CopyTextureGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
722
Cube/CubeGame.cs
722
Cube/CubeGame.cs
|
@ -6,52 +6,52 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class CubeGame : Game
|
||||
{
|
||||
private GraphicsPipeline cubePipeline;
|
||||
private GraphicsPipeline cubePipelineDepthOnly;
|
||||
private GraphicsPipeline skyboxPipeline;
|
||||
private GraphicsPipeline skyboxPipelineDepthOnly;
|
||||
private GraphicsPipeline blitPipeline;
|
||||
class CubeGame : Game
|
||||
{
|
||||
private GraphicsPipeline cubePipeline;
|
||||
private GraphicsPipeline cubePipelineDepthOnly;
|
||||
private GraphicsPipeline skyboxPipeline;
|
||||
private GraphicsPipeline skyboxPipelineDepthOnly;
|
||||
private GraphicsPipeline blitPipeline;
|
||||
|
||||
private Texture depthTexture;
|
||||
private Sampler depthSampler;
|
||||
private DepthUniforms depthUniforms;
|
||||
private Texture depthTexture;
|
||||
private Sampler depthSampler;
|
||||
private DepthUniforms depthUniforms;
|
||||
|
||||
private Buffer cubeVertexBuffer;
|
||||
private Buffer skyboxVertexBuffer;
|
||||
private Buffer blitVertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Buffer cubeVertexBuffer;
|
||||
private Buffer skyboxVertexBuffer;
|
||||
private Buffer blitVertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
|
||||
private Texture skyboxTexture;
|
||||
private Sampler skyboxSampler;
|
||||
private Texture skyboxTexture;
|
||||
private Sampler skyboxSampler;
|
||||
|
||||
private bool finishedLoading = false;
|
||||
private float cubeTimer = 0f;
|
||||
private Quaternion cubeRotation = Quaternion.Identity;
|
||||
private Quaternion previousCubeRotation = Quaternion.Identity;
|
||||
private bool depthOnlyEnabled = false;
|
||||
private Vector3 camPos = new Vector3(0, 1.5f, 4f);
|
||||
private bool finishedLoading = false;
|
||||
private float cubeTimer = 0f;
|
||||
private Quaternion cubeRotation = Quaternion.Identity;
|
||||
private Quaternion previousCubeRotation = Quaternion.Identity;
|
||||
private bool depthOnlyEnabled = false;
|
||||
private Vector3 camPos = new Vector3(0, 1.5f, 4f);
|
||||
|
||||
private TaskFactory taskFactory = new TaskFactory();
|
||||
private bool takeScreenshot;
|
||||
|
||||
struct DepthUniforms
|
||||
{
|
||||
public float ZNear;
|
||||
public float ZFar;
|
||||
struct DepthUniforms
|
||||
{
|
||||
public float ZNear;
|
||||
public float ZFar;
|
||||
|
||||
public DepthUniforms(float zNear, float zFar)
|
||||
{
|
||||
ZNear = zNear;
|
||||
ZFar = zFar;
|
||||
}
|
||||
}
|
||||
public DepthUniforms(float zNear, float zFar)
|
||||
{
|
||||
ZNear = zNear;
|
||||
ZFar = zFar;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadCubemap(CommandBuffer cmdbuf, string[] imagePaths)
|
||||
{
|
||||
for (uint i = 0; i < imagePaths.Length; i++)
|
||||
{
|
||||
void LoadCubemap(CommandBuffer cmdbuf, string[] imagePaths)
|
||||
{
|
||||
for (uint i = 0; i < imagePaths.Length; i++)
|
||||
{
|
||||
var textureSlice = new TextureSlice(
|
||||
skyboxTexture,
|
||||
new Rect(0, 0, (int) skyboxTexture.Width, (int) skyboxTexture.Height),
|
||||
|
@ -61,383 +61,383 @@ namespace MoonWorks.Test
|
|||
);
|
||||
|
||||
Texture.SetDataFromImageFile(cmdbuf, textureSlice, imagePaths[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public CubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
ShaderModule cubeVertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("PositionColorWithMatrix.vert")
|
||||
);
|
||||
ShaderModule cubeFragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("SolidColor.frag")
|
||||
);
|
||||
public CubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
ShaderModule cubeVertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("PositionColorWithMatrix.vert")
|
||||
);
|
||||
ShaderModule cubeFragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("SolidColor.frag")
|
||||
);
|
||||
|
||||
ShaderModule skyboxVertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("Skybox.vert")
|
||||
);
|
||||
ShaderModule skyboxFragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("Skybox.frag")
|
||||
);
|
||||
ShaderModule skyboxVertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("Skybox.vert")
|
||||
);
|
||||
ShaderModule skyboxFragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("Skybox.frag")
|
||||
);
|
||||
|
||||
ShaderModule blitVertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.vert")
|
||||
);
|
||||
ShaderModule blitFragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedDepthQuad.frag")
|
||||
);
|
||||
ShaderModule blitVertShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedQuad.vert")
|
||||
);
|
||||
ShaderModule blitFragShaderModule = new ShaderModule(
|
||||
GraphicsDevice,
|
||||
TestUtils.GetShaderPath("TexturedDepthQuad.frag")
|
||||
);
|
||||
|
||||
depthTexture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.D16,
|
||||
TextureUsageFlags.DepthStencilTarget | TextureUsageFlags.Sampler
|
||||
);
|
||||
depthSampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
depthUniforms = new DepthUniforms(0.01f, 100f);
|
||||
depthTexture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.D16,
|
||||
TextureUsageFlags.DepthStencilTarget | TextureUsageFlags.Sampler
|
||||
);
|
||||
depthSampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
depthUniforms = new DepthUniforms(0.01f, 100f);
|
||||
|
||||
skyboxTexture = Texture.CreateTextureCube(
|
||||
GraphicsDevice,
|
||||
2048,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Sampler
|
||||
);
|
||||
skyboxSampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
skyboxTexture = Texture.CreateTextureCube(
|
||||
GraphicsDevice,
|
||||
2048,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Sampler
|
||||
);
|
||||
skyboxSampler = new Sampler(GraphicsDevice, new SamplerCreateInfo());
|
||||
|
||||
cubeVertexBuffer = Buffer.Create<PositionColorVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
24
|
||||
);
|
||||
skyboxVertexBuffer = Buffer.Create<PositionVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
24
|
||||
);
|
||||
indexBuffer = Buffer.Create<uint>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Index,
|
||||
36
|
||||
); // Using uint here just to test IndexElementSize=32
|
||||
cubeVertexBuffer = Buffer.Create<PositionColorVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
24
|
||||
);
|
||||
skyboxVertexBuffer = Buffer.Create<PositionVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
24
|
||||
);
|
||||
indexBuffer = Buffer.Create<uint>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Index,
|
||||
36
|
||||
); // Using uint here just to test IndexElementSize=32
|
||||
|
||||
blitVertexBuffer = Buffer.Create<PositionTextureVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
6
|
||||
);
|
||||
blitVertexBuffer = Buffer.Create<PositionTextureVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
6
|
||||
);
|
||||
|
||||
Task loadingTask = Task.Run(() => UploadGPUAssets());
|
||||
Task loadingTask = Task.Run(() => UploadGPUAssets());
|
||||
|
||||
// Create the cube pipelines
|
||||
// Create the cube pipelines
|
||||
|
||||
GraphicsPipelineCreateInfo cubePipelineCreateInfo = new GraphicsPipelineCreateInfo
|
||||
{
|
||||
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
||||
TextureFormat.D16,
|
||||
new ColorAttachmentDescription(
|
||||
MainWindow.SwapchainFormat,
|
||||
ColorAttachmentBlendState.Opaque
|
||||
)
|
||||
),
|
||||
DepthStencilState = DepthStencilState.DepthReadWrite,
|
||||
VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(cubeVertShaderModule, "main", 0),
|
||||
VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>(),
|
||||
PrimitiveType = PrimitiveType.TriangleList,
|
||||
FragmentShaderInfo = GraphicsShaderInfo.Create(cubeFragShaderModule, "main", 0),
|
||||
RasterizerState = RasterizerState.CW_CullBack,
|
||||
MultisampleState = MultisampleState.None
|
||||
};
|
||||
cubePipeline = new GraphicsPipeline(GraphicsDevice, cubePipelineCreateInfo);
|
||||
GraphicsPipelineCreateInfo cubePipelineCreateInfo = new GraphicsPipelineCreateInfo
|
||||
{
|
||||
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
||||
TextureFormat.D16,
|
||||
new ColorAttachmentDescription(
|
||||
MainWindow.SwapchainFormat,
|
||||
ColorAttachmentBlendState.Opaque
|
||||
)
|
||||
),
|
||||
DepthStencilState = DepthStencilState.DepthReadWrite,
|
||||
VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(cubeVertShaderModule, "main", 0),
|
||||
VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>(),
|
||||
PrimitiveType = PrimitiveType.TriangleList,
|
||||
FragmentShaderInfo = GraphicsShaderInfo.Create(cubeFragShaderModule, "main", 0),
|
||||
RasterizerState = RasterizerState.CW_CullBack,
|
||||
MultisampleState = MultisampleState.None
|
||||
};
|
||||
cubePipeline = new GraphicsPipeline(GraphicsDevice, cubePipelineCreateInfo);
|
||||
|
||||
cubePipelineCreateInfo.AttachmentInfo = new GraphicsPipelineAttachmentInfo(TextureFormat.D16);
|
||||
cubePipelineDepthOnly = new GraphicsPipeline(GraphicsDevice, cubePipelineCreateInfo);
|
||||
cubePipelineCreateInfo.AttachmentInfo = new GraphicsPipelineAttachmentInfo(TextureFormat.D16);
|
||||
cubePipelineDepthOnly = new GraphicsPipeline(GraphicsDevice, cubePipelineCreateInfo);
|
||||
|
||||
// Create the skybox pipelines
|
||||
// Create the skybox pipelines
|
||||
|
||||
GraphicsPipelineCreateInfo skyboxPipelineCreateInfo = new GraphicsPipelineCreateInfo
|
||||
{
|
||||
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
||||
TextureFormat.D16,
|
||||
new ColorAttachmentDescription(
|
||||
MainWindow.SwapchainFormat,
|
||||
ColorAttachmentBlendState.Opaque
|
||||
)
|
||||
),
|
||||
DepthStencilState = DepthStencilState.DepthReadWrite,
|
||||
VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(skyboxVertShaderModule, "main", 0),
|
||||
VertexInputState = VertexInputState.CreateSingleBinding<PositionVertex>(),
|
||||
PrimitiveType = PrimitiveType.TriangleList,
|
||||
FragmentShaderInfo = GraphicsShaderInfo.Create(skyboxFragShaderModule, "main", 1),
|
||||
RasterizerState = RasterizerState.CW_CullNone,
|
||||
MultisampleState = MultisampleState.None,
|
||||
};
|
||||
skyboxPipeline = new GraphicsPipeline(GraphicsDevice, skyboxPipelineCreateInfo);
|
||||
GraphicsPipelineCreateInfo skyboxPipelineCreateInfo = new GraphicsPipelineCreateInfo
|
||||
{
|
||||
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
||||
TextureFormat.D16,
|
||||
new ColorAttachmentDescription(
|
||||
MainWindow.SwapchainFormat,
|
||||
ColorAttachmentBlendState.Opaque
|
||||
)
|
||||
),
|
||||
DepthStencilState = DepthStencilState.DepthReadWrite,
|
||||
VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(skyboxVertShaderModule, "main", 0),
|
||||
VertexInputState = VertexInputState.CreateSingleBinding<PositionVertex>(),
|
||||
PrimitiveType = PrimitiveType.TriangleList,
|
||||
FragmentShaderInfo = GraphicsShaderInfo.Create(skyboxFragShaderModule, "main", 1),
|
||||
RasterizerState = RasterizerState.CW_CullNone,
|
||||
MultisampleState = MultisampleState.None,
|
||||
};
|
||||
skyboxPipeline = new GraphicsPipeline(GraphicsDevice, skyboxPipelineCreateInfo);
|
||||
|
||||
skyboxPipelineCreateInfo.AttachmentInfo = new GraphicsPipelineAttachmentInfo(TextureFormat.D16);
|
||||
skyboxPipelineDepthOnly = new GraphicsPipeline(GraphicsDevice, skyboxPipelineCreateInfo);
|
||||
skyboxPipelineCreateInfo.AttachmentInfo = new GraphicsPipelineAttachmentInfo(TextureFormat.D16);
|
||||
skyboxPipelineDepthOnly = new GraphicsPipeline(GraphicsDevice, skyboxPipelineCreateInfo);
|
||||
|
||||
// Create the blit pipeline
|
||||
// Create the blit pipeline
|
||||
|
||||
GraphicsPipelineCreateInfo blitPipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
GraphicsPipelineCreateInfo blitPipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
blitVertShaderModule,
|
||||
blitFragShaderModule
|
||||
);
|
||||
blitPipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
blitPipelineCreateInfo.FragmentShaderInfo = GraphicsShaderInfo.Create<DepthUniforms>(blitFragShaderModule, "main", 1);
|
||||
blitVertShaderModule,
|
||||
blitFragShaderModule
|
||||
);
|
||||
blitPipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
blitPipelineCreateInfo.FragmentShaderInfo = GraphicsShaderInfo.Create<DepthUniforms>(blitFragShaderModule, "main", 1);
|
||||
blitPipeline = new GraphicsPipeline(GraphicsDevice, blitPipelineCreateInfo);
|
||||
}
|
||||
}
|
||||
|
||||
private void UploadGPUAssets()
|
||||
{
|
||||
Logger.LogInfo("Loading...");
|
||||
private void UploadGPUAssets()
|
||||
{
|
||||
Logger.LogInfo("Loading...");
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
|
||||
cmdbuf.SetBufferData(
|
||||
cubeVertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-1, -1, -1), new Color(1f, 0f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, -1), new Color(1f, 0f, 0f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, -1), new Color(1f, 0f, 0f)),
|
||||
cmdbuf.SetBufferData(
|
||||
cubeVertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-1, -1, -1), new Color(1f, 0f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, -1), new Color(1f, 0f, 0f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, -1), new Color(1f, 0f, 0f)),
|
||||
|
||||
new PositionColorVertex(new Vector3(-1, -1, 1), new Color(0f, 1f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, 1), new Color(0f, 1f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, 1), new Color(0f, 1f, 0f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 1f, 0f)),
|
||||
new PositionColorVertex(new Vector3(-1, -1, 1), new Color(0f, 1f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, 1), new Color(0f, 1f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, 1), new Color(0f, 1f, 0f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 1f, 0f)),
|
||||
|
||||
new PositionColorVertex(new Vector3(-1, -1, -1), new Color(0f, 0f, 1f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, -1), new Color(0f, 0f, 1f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 0f, 1f)),
|
||||
new PositionColorVertex(new Vector3(-1, -1, 1), new Color(0f, 0f, 1f)),
|
||||
new PositionColorVertex(new Vector3(-1, -1, -1), new Color(0f, 0f, 1f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, -1), new Color(0f, 0f, 1f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 0f, 1f)),
|
||||
new PositionColorVertex(new Vector3(-1, -1, 1), new Color(0f, 0f, 1f)),
|
||||
|
||||
new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, -1), new Color(1f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, 1), new Color(1f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, 1), new Color(1f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, -1), new Color(1f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, 1), new Color(1f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, 1), new Color(1f, 0.5f, 0f)),
|
||||
|
||||
new PositionColorVertex(new Vector3(-1, -1, -1), new Color(1f, 0f, 0.5f)),
|
||||
new PositionColorVertex(new Vector3(-1, -1, 1), new Color(1f, 0f, 0.5f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, 1), new Color(1f, 0f, 0.5f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0f, 0.5f)),
|
||||
new PositionColorVertex(new Vector3(-1, -1, -1), new Color(1f, 0f, 0.5f)),
|
||||
new PositionColorVertex(new Vector3(-1, -1, 1), new Color(1f, 0f, 0.5f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, 1), new Color(1f, 0f, 0.5f)),
|
||||
new PositionColorVertex(new Vector3(1, -1, -1), new Color(1f, 0f, 0.5f)),
|
||||
|
||||
new PositionColorVertex(new Vector3(-1, 1, -1), new Color(0f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, 1), new Color(0f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, -1), new Color(0f, 0.5f, 0f))
|
||||
}
|
||||
);
|
||||
new PositionColorVertex(new Vector3(-1, 1, -1), new Color(0f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(-1, 1, 1), new Color(0f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, 1), new Color(0f, 0.5f, 0f)),
|
||||
new PositionColorVertex(new Vector3(1, 1, -1), new Color(0f, 0.5f, 0f))
|
||||
}
|
||||
);
|
||||
|
||||
cmdbuf.SetBufferData(
|
||||
skyboxVertexBuffer,
|
||||
new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
cmdbuf.SetBufferData(
|
||||
skyboxVertexBuffer,
|
||||
new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10))
|
||||
}
|
||||
);
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10))
|
||||
}
|
||||
);
|
||||
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new uint[]
|
||||
{
|
||||
0, 1, 2, 0, 2, 3,
|
||||
6, 5, 4, 7, 6, 4,
|
||||
8, 9, 10, 8, 10, 11,
|
||||
14, 13, 12, 15, 14, 12,
|
||||
16, 17, 18, 16, 18, 19,
|
||||
22, 21, 20, 23, 22, 20
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new uint[]
|
||||
{
|
||||
0, 1, 2, 0, 2, 3,
|
||||
6, 5, 4, 7, 6, 4,
|
||||
8, 9, 10, 8, 10, 11,
|
||||
14, 13, 12, 15, 14, 12,
|
||||
16, 17, 18, 16, 18, 19,
|
||||
22, 21, 20, 23, 22, 20
|
||||
}
|
||||
);
|
||||
|
||||
cmdbuf.SetBufferData(
|
||||
blitVertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
blitVertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
|
||||
LoadCubemap(cmdbuf, new string[]
|
||||
{
|
||||
TestUtils.GetTexturePath("right.png"),
|
||||
TestUtils.GetTexturePath("left.png"),
|
||||
TestUtils.GetTexturePath("top.png"),
|
||||
TestUtils.GetTexturePath("bottom.png"),
|
||||
TestUtils.GetTexturePath("front.png"),
|
||||
TestUtils.GetTexturePath("back.png")
|
||||
});
|
||||
LoadCubemap(cmdbuf, new string[]
|
||||
{
|
||||
TestUtils.GetTexturePath("right.png"),
|
||||
TestUtils.GetTexturePath("left.png"),
|
||||
TestUtils.GetTexturePath("top.png"),
|
||||
TestUtils.GetTexturePath("bottom.png"),
|
||||
TestUtils.GetTexturePath("front.png"),
|
||||
TestUtils.GetTexturePath("back.png")
|
||||
});
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
|
||||
finishedLoading = true;
|
||||
Logger.LogInfo("Finished loading!");
|
||||
Logger.LogInfo("Press Left to toggle Depth-Only Mode");
|
||||
Logger.LogInfo("Press Down to move the camera upwards");
|
||||
finishedLoading = true;
|
||||
Logger.LogInfo("Finished loading!");
|
||||
Logger.LogInfo("Press Left to toggle Depth-Only Mode");
|
||||
Logger.LogInfo("Press Down to move the camera upwards");
|
||||
Logger.LogInfo("Press Right to save a screenshot");
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
cubeTimer += (float) delta.TotalSeconds;
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
cubeTimer += (float) delta.TotalSeconds;
|
||||
|
||||
previousCubeRotation = cubeRotation;
|
||||
previousCubeRotation = cubeRotation;
|
||||
|
||||
cubeRotation = Quaternion.CreateFromYawPitchRoll(
|
||||
cubeTimer * 2f,
|
||||
0,
|
||||
cubeTimer * 2f
|
||||
);
|
||||
cubeRotation = Quaternion.CreateFromYawPitchRoll(
|
||||
cubeTimer * 2f,
|
||||
0,
|
||||
cubeTimer * 2f
|
||||
);
|
||||
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Bottom))
|
||||
{
|
||||
camPos.Y = System.MathF.Min(camPos.Y + 0.2f, 15f);
|
||||
}
|
||||
else
|
||||
{
|
||||
camPos.Y = System.MathF.Max(camPos.Y - 0.4f, 1.5f);
|
||||
}
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Bottom))
|
||||
{
|
||||
camPos.Y = System.MathF.Min(camPos.Y + 0.2f, 15f);
|
||||
}
|
||||
else
|
||||
{
|
||||
camPos.Y = System.MathF.Max(camPos.Y - 0.4f, 1.5f);
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
depthOnlyEnabled = !depthOnlyEnabled;
|
||||
Logger.LogInfo("Depth-Only Mode enabled: " + depthOnlyEnabled);
|
||||
}
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
depthOnlyEnabled = !depthOnlyEnabled;
|
||||
Logger.LogInfo("Depth-Only Mode enabled: " + depthOnlyEnabled);
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
takeScreenshot = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
Matrix4x4 proj = Matrix4x4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.ToRadians(75f),
|
||||
(float) MainWindow.Width / MainWindow.Height,
|
||||
depthUniforms.ZNear,
|
||||
depthUniforms.ZFar
|
||||
);
|
||||
Matrix4x4 view = Matrix4x4.CreateLookAt(
|
||||
camPos,
|
||||
Vector3.Zero,
|
||||
Vector3.Up
|
||||
);
|
||||
TransformVertexUniform skyboxUniforms = new TransformVertexUniform(view * proj);
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
Matrix4x4 proj = Matrix4x4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.ToRadians(75f),
|
||||
(float) MainWindow.Width / MainWindow.Height,
|
||||
depthUniforms.ZNear,
|
||||
depthUniforms.ZFar
|
||||
);
|
||||
Matrix4x4 view = Matrix4x4.CreateLookAt(
|
||||
camPos,
|
||||
Vector3.Zero,
|
||||
Vector3.Up
|
||||
);
|
||||
TransformVertexUniform skyboxUniforms = new TransformVertexUniform(view * proj);
|
||||
|
||||
Matrix4x4 model = Matrix4x4.CreateFromQuaternion(
|
||||
Quaternion.Slerp(
|
||||
previousCubeRotation,
|
||||
cubeRotation,
|
||||
(float) alpha
|
||||
)
|
||||
);
|
||||
TransformVertexUniform cubeUniforms = new TransformVertexUniform(model * view * proj);
|
||||
Matrix4x4 model = Matrix4x4.CreateFromQuaternion(
|
||||
Quaternion.Slerp(
|
||||
previousCubeRotation,
|
||||
cubeRotation,
|
||||
(float) alpha
|
||||
)
|
||||
);
|
||||
TransformVertexUniform cubeUniforms = new TransformVertexUniform(model * view * proj);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture swapchainTexture = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (swapchainTexture != null)
|
||||
{
|
||||
if (!finishedLoading)
|
||||
{
|
||||
float sine = System.MathF.Abs(System.MathF.Sin(cubeTimer));
|
||||
Color clearColor = new Color(sine, sine, sine);
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture swapchainTexture = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (swapchainTexture != null)
|
||||
{
|
||||
if (!finishedLoading)
|
||||
{
|
||||
float sine = System.MathF.Abs(System.MathF.Sin(cubeTimer));
|
||||
Color clearColor = new Color(sine, sine, sine);
|
||||
|
||||
// Just show a clear screen.
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(swapchainTexture, clearColor));
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!depthOnlyEnabled)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(
|
||||
new DepthStencilAttachmentInfo(depthTexture, new DepthStencilValue(1f, 0)),
|
||||
new ColorAttachmentInfo(swapchainTexture, LoadOp.DontCare)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdbuf.BeginRenderPass(
|
||||
new DepthStencilAttachmentInfo(depthTexture, new DepthStencilValue(1f, 0))
|
||||
);
|
||||
}
|
||||
// Just show a clear screen.
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(swapchainTexture, clearColor));
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!depthOnlyEnabled)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(
|
||||
new DepthStencilAttachmentInfo(depthTexture, new DepthStencilValue(1f, 0)),
|
||||
new ColorAttachmentInfo(swapchainTexture, LoadOp.DontCare)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmdbuf.BeginRenderPass(
|
||||
new DepthStencilAttachmentInfo(depthTexture, new DepthStencilValue(1f, 0))
|
||||
);
|
||||
}
|
||||
|
||||
// Draw cube
|
||||
cmdbuf.BindGraphicsPipeline(depthOnlyEnabled ? cubePipelineDepthOnly : cubePipeline);
|
||||
cmdbuf.BindVertexBuffers(cubeVertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.ThirtyTwo);
|
||||
uint vertexParamOffset = cmdbuf.PushVertexShaderUniforms(cubeUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexParamOffset, 0);
|
||||
// Draw cube
|
||||
cmdbuf.BindGraphicsPipeline(depthOnlyEnabled ? cubePipelineDepthOnly : cubePipeline);
|
||||
cmdbuf.BindVertexBuffers(cubeVertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.ThirtyTwo);
|
||||
uint vertexParamOffset = cmdbuf.PushVertexShaderUniforms(cubeUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexParamOffset, 0);
|
||||
|
||||
// Draw skybox
|
||||
cmdbuf.BindGraphicsPipeline(depthOnlyEnabled ? skyboxPipelineDepthOnly : skyboxPipeline);
|
||||
cmdbuf.BindVertexBuffers(skyboxVertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.ThirtyTwo);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(skyboxTexture, skyboxSampler));
|
||||
vertexParamOffset = cmdbuf.PushVertexShaderUniforms(skyboxUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexParamOffset, 0);
|
||||
// Draw skybox
|
||||
cmdbuf.BindGraphicsPipeline(depthOnlyEnabled ? skyboxPipelineDepthOnly : skyboxPipeline);
|
||||
cmdbuf.BindVertexBuffers(skyboxVertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.ThirtyTwo);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(skyboxTexture, skyboxSampler));
|
||||
vertexParamOffset = cmdbuf.PushVertexShaderUniforms(skyboxUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexParamOffset, 0);
|
||||
|
||||
cmdbuf.EndRenderPass();
|
||||
cmdbuf.EndRenderPass();
|
||||
|
||||
if (depthOnlyEnabled)
|
||||
{
|
||||
// Draw the depth buffer as a grayscale image
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(swapchainTexture, LoadOp.DontCare));
|
||||
if (depthOnlyEnabled)
|
||||
{
|
||||
// Draw the depth buffer as a grayscale image
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(swapchainTexture, LoadOp.DontCare));
|
||||
|
||||
cmdbuf.BindGraphicsPipeline(blitPipeline);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(depthTexture, depthSampler));
|
||||
cmdbuf.BindVertexBuffers(blitVertexBuffer);
|
||||
uint fragParamOffset = cmdbuf.PushFragmentShaderUniforms(depthUniforms);
|
||||
cmdbuf.DrawPrimitives(0, 2, vertexParamOffset, fragParamOffset);
|
||||
cmdbuf.BindGraphicsPipeline(blitPipeline);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(depthTexture, depthSampler));
|
||||
cmdbuf.BindVertexBuffers(blitVertexBuffer);
|
||||
uint fragParamOffset = cmdbuf.PushFragmentShaderUniforms(depthUniforms);
|
||||
cmdbuf.DrawPrimitives(0, 2, vertexParamOffset, fragParamOffset);
|
||||
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
}
|
||||
}
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
|
||||
if (takeScreenshot)
|
||||
{
|
||||
|
@ -448,7 +448,7 @@ namespace MoonWorks.Test
|
|||
|
||||
takeScreenshot = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private System.Action<object?> TakeScreenshot = texture =>
|
||||
{
|
||||
|
@ -458,10 +458,10 @@ namespace MoonWorks.Test
|
|||
}
|
||||
};
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CubeGame game = new CubeGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CubeGame game = new CubeGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,77 +5,77 @@ using System.Runtime.InteropServices;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class DrawIndirectGame : Game
|
||||
{
|
||||
private GraphicsPipeline graphicsPipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer drawBuffer;
|
||||
class DrawIndirectGame : Game
|
||||
{
|
||||
private GraphicsPipeline graphicsPipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer drawBuffer;
|
||||
|
||||
public DrawIndirectGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColor.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
public DrawIndirectGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColor.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>();
|
||||
graphicsPipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>();
|
||||
graphicsPipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create and populate the vertex buffer
|
||||
vertexBuffer = Buffer.Create<PositionColorVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 6);
|
||||
drawBuffer = Buffer.Create<IndirectDrawCommand>(GraphicsDevice, BufferUsageFlags.Indirect, 2);
|
||||
// Create and populate the vertex buffer
|
||||
vertexBuffer = Buffer.Create<PositionColorVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 6);
|
||||
drawBuffer = Buffer.Create<IndirectDrawCommand>(GraphicsDevice, BufferUsageFlags.Indirect, 2);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-0.5f, -1, 0), Color.Blue),
|
||||
new PositionColorVertex(new Vector3(-1f, 1, 0), Color.Green),
|
||||
new PositionColorVertex(new Vector3(0f, 1, 0), Color.Red),
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-0.5f, -1, 0), Color.Blue),
|
||||
new PositionColorVertex(new Vector3(-1f, 1, 0), Color.Green),
|
||||
new PositionColorVertex(new Vector3(0f, 1, 0), Color.Red),
|
||||
|
||||
new PositionColorVertex(new Vector3(.5f, -1, 0), Color.Blue),
|
||||
new PositionColorVertex(new Vector3(1f, 1, 0), Color.Green),
|
||||
new PositionColorVertex(new Vector3(0f, 1, 0), Color.Red),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
drawBuffer,
|
||||
new IndirectDrawCommand[]
|
||||
{
|
||||
new IndirectDrawCommand(3, 1, 3, 0),
|
||||
new IndirectDrawCommand(3, 1, 0, 0),
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
new PositionColorVertex(new Vector3(.5f, -1, 0), Color.Blue),
|
||||
new PositionColorVertex(new Vector3(1f, 1, 0), Color.Green),
|
||||
new PositionColorVertex(new Vector3(0f, 1, 0), Color.Red),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
drawBuffer,
|
||||
new IndirectDrawCommand[]
|
||||
{
|
||||
new IndirectDrawCommand(3, 1, 3, 0),
|
||||
new IndirectDrawCommand(3, 1, 0, 0),
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(graphicsPipeline);
|
||||
cmdbuf.BindVertexBuffers(new BufferBinding(vertexBuffer, 0));
|
||||
cmdbuf.DrawPrimitivesIndirect(drawBuffer, 0, 2, (uint) Marshal.SizeOf<IndirectDrawCommand>(), 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(graphicsPipeline);
|
||||
cmdbuf.BindVertexBuffers(new BufferBinding(vertexBuffer, 0));
|
||||
cmdbuf.DrawPrimitivesIndirect(drawBuffer, 0, 2, (uint) Marshal.SizeOf<IndirectDrawCommand>(), 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
DrawIndirectGame game = new DrawIndirectGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
DrawIndirectGame game = new DrawIndirectGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,109 +5,109 @@ using System.Runtime.InteropServices;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class GetBufferDataGame : Game
|
||||
{
|
||||
public GetBufferDataGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
PositionVertex[] vertices = new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(0, 0, 0)),
|
||||
new PositionVertex(new Vector3(0, 0, 1)),
|
||||
new PositionVertex(new Vector3(0, 1, 0)),
|
||||
new PositionVertex(new Vector3(0, 1, 1)),
|
||||
new PositionVertex(new Vector3(1, 0, 0)),
|
||||
new PositionVertex(new Vector3(1, 0, 1)),
|
||||
new PositionVertex(new Vector3(1, 1, 0)),
|
||||
new PositionVertex(new Vector3(1, 1, 1)),
|
||||
};
|
||||
class GetBufferDataGame : Game
|
||||
{
|
||||
public GetBufferDataGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
PositionVertex[] vertices = new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(0, 0, 0)),
|
||||
new PositionVertex(new Vector3(0, 0, 1)),
|
||||
new PositionVertex(new Vector3(0, 1, 0)),
|
||||
new PositionVertex(new Vector3(0, 1, 1)),
|
||||
new PositionVertex(new Vector3(1, 0, 0)),
|
||||
new PositionVertex(new Vector3(1, 0, 1)),
|
||||
new PositionVertex(new Vector3(1, 1, 0)),
|
||||
new PositionVertex(new Vector3(1, 1, 1)),
|
||||
};
|
||||
|
||||
PositionVertex[] otherVerts = new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(1, 2, 3)),
|
||||
new PositionVertex(new Vector3(4, 5, 6)),
|
||||
new PositionVertex(new Vector3(7, 8, 9))
|
||||
};
|
||||
PositionVertex[] otherVerts = new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(1, 2, 3)),
|
||||
new PositionVertex(new Vector3(4, 5, 6)),
|
||||
new PositionVertex(new Vector3(7, 8, 9))
|
||||
};
|
||||
|
||||
int vertexSize = Marshal.SizeOf<PositionVertex>();
|
||||
int vertexSize = Marshal.SizeOf<PositionVertex>();
|
||||
|
||||
Buffer vertexBuffer = Buffer.Create<PositionVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
(uint) vertices.Length
|
||||
);
|
||||
Buffer vertexBuffer = Buffer.Create<PositionVertex>(
|
||||
GraphicsDevice,
|
||||
BufferUsageFlags.Vertex,
|
||||
(uint) vertices.Length
|
||||
);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(vertexBuffer, vertices);
|
||||
var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(vertexBuffer, vertices);
|
||||
var fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
|
||||
// Wait for the vertices to finish uploading...
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
// Wait for the vertices to finish uploading...
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
GraphicsDevice.ReleaseFence(fence);
|
||||
|
||||
// Read back and print out the vertex values
|
||||
PositionVertex[] readbackVertices = new PositionVertex[vertices.Length];
|
||||
vertexBuffer.GetData(readbackVertices);
|
||||
for (int i = 0; i < readbackVertices.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(readbackVertices[i].ToString());
|
||||
}
|
||||
// Read back and print out the vertex values
|
||||
PositionVertex[] readbackVertices = new PositionVertex[vertices.Length];
|
||||
vertexBuffer.GetData(readbackVertices);
|
||||
for (int i = 0; i < readbackVertices.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(readbackVertices[i].ToString());
|
||||
}
|
||||
|
||||
// Change the first three vertices
|
||||
cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(vertexBuffer, otherVerts);
|
||||
fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
// Change the first three vertices
|
||||
cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(vertexBuffer, otherVerts);
|
||||
fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
GraphicsDevice.ReleaseFence(fence);
|
||||
|
||||
// Read the updated buffer
|
||||
vertexBuffer.GetData(readbackVertices);
|
||||
Logger.LogInfo("=== Change first three vertices ===");
|
||||
for (int i = 0; i < readbackVertices.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(readbackVertices[i].ToString());
|
||||
}
|
||||
// Read the updated buffer
|
||||
vertexBuffer.GetData(readbackVertices);
|
||||
Logger.LogInfo("=== Change first three vertices ===");
|
||||
for (int i = 0; i < readbackVertices.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(readbackVertices[i].ToString());
|
||||
}
|
||||
|
||||
// Change the last two vertices
|
||||
cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
otherVerts,
|
||||
(uint) (vertexSize * (vertices.Length - 2)),
|
||||
1,
|
||||
2
|
||||
);
|
||||
fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
// Change the last two vertices
|
||||
cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
otherVerts,
|
||||
(uint) (vertexSize * (vertices.Length - 2)),
|
||||
1,
|
||||
2
|
||||
);
|
||||
fence = GraphicsDevice.SubmitAndAcquireFence(cmdbuf);
|
||||
GraphicsDevice.WaitForFences(fence);
|
||||
GraphicsDevice.ReleaseFence(fence);
|
||||
|
||||
// Read the updated buffer
|
||||
vertexBuffer.GetData(readbackVertices);
|
||||
Logger.LogInfo("=== Change last two vertices ===");
|
||||
for (int i = 0; i < readbackVertices.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(readbackVertices[i].ToString());
|
||||
}
|
||||
}
|
||||
// Read the updated buffer
|
||||
vertexBuffer.GetData(readbackVertices);
|
||||
Logger.LogInfo("=== Change last two vertices ===");
|
||||
for (int i = 0; i < readbackVertices.Length; i += 1)
|
||||
{
|
||||
Logger.LogInfo(readbackVertices[i].ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? swapchainTexture = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (swapchainTexture != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(swapchainTexture, Color.Black));
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? swapchainTexture = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (swapchainTexture != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(swapchainTexture, Color.Black));
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
GetBufferDataGame game = new GetBufferDataGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
GetBufferDataGame game = new GetBufferDataGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,103 +4,103 @@ using MoonWorks.Math.Float;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class InstancingAndOffsetsGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
class InstancingAndOffsetsGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
|
||||
private bool useVertexOffset;
|
||||
private bool useIndexOffset;
|
||||
private bool useVertexOffset;
|
||||
private bool useIndexOffset;
|
||||
|
||||
public InstancingAndOffsetsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left to toggle vertex offset\nPress Right to toggle index offset");
|
||||
public InstancingAndOffsetsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left to toggle vertex offset\nPress Right to toggle index offset");
|
||||
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColorInstanced.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionColorInstanced.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>();
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionColorVertex>();
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create and populate the vertex and index buffers
|
||||
vertexBuffer = Buffer.Create<PositionColorVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 9);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
// Create and populate the vertex and index buffers
|
||||
vertexBuffer = Buffer.Create<PositionColorVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 9);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.Red),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.Lime),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.Blue),
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionColorVertex[]
|
||||
{
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.Red),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.Lime),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.Blue),
|
||||
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.Orange),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.Green),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.Aqua),
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.Orange),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.Green),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.Aqua),
|
||||
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.White),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.White),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.White),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
3, 4, 5,
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
new PositionColorVertex(new Vector3(-1, 1, 0), Color.White),
|
||||
new PositionColorVertex(new Vector3(1, 1, 0), Color.White),
|
||||
new PositionColorVertex(new Vector3(0, -1, 0), Color.White),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
3, 4, 5,
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
useVertexOffset = !useVertexOffset;
|
||||
Logger.LogInfo("Using vertex offset: " + useVertexOffset);
|
||||
}
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
useVertexOffset = !useVertexOffset;
|
||||
Logger.LogInfo("Using vertex offset: " + useVertexOffset);
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
useIndexOffset = !useIndexOffset;
|
||||
Logger.LogInfo("Using index offset: " + useIndexOffset);
|
||||
}
|
||||
}
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
useIndexOffset = !useIndexOffset;
|
||||
Logger.LogInfo("Using index offset: " + useIndexOffset);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
uint vertexOffset = useVertexOffset ? 3u : 0;
|
||||
uint indexOffset = useIndexOffset ? 3u : 0;
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
uint vertexOffset = useVertexOffset ? 3u : 0;
|
||||
uint indexOffset = useIndexOffset ? 3u : 0;
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.DrawInstancedPrimitives(vertexOffset, indexOffset, 1, 16, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.DrawInstancedPrimitives(vertexOffset, indexOffset, 1, 16, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
InstancingAndOffsetsGame p = new InstancingAndOffsetsGame();
|
||||
p.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
InstancingAndOffsetsGame p = new InstancingAndOffsetsGame();
|
||||
p.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,80 +56,80 @@ namespace MoonWorks.Test
|
|||
return SDL2.SDL.SDL_GetBasePath() + "Content/Textures/" + textureName;
|
||||
}
|
||||
|
||||
public static string GetVideoPath(string videoName)
|
||||
{
|
||||
return SDL2.SDL.SDL_GetBasePath() + "Content/Videos/" + videoName;
|
||||
}
|
||||
public static string GetVideoPath(string videoName)
|
||||
{
|
||||
return SDL2.SDL.SDL_GetBasePath() + "Content/Videos/" + videoName;
|
||||
}
|
||||
|
||||
public enum ButtonType
|
||||
{
|
||||
Left, // A/left arrow on keyboard, left face button on gamepad
|
||||
Bottom, // S/down arrow on keyboard, bottom face button on gamepad
|
||||
Right // D/right arrow on keyboard, right face button on gamepad
|
||||
}
|
||||
public enum ButtonType
|
||||
{
|
||||
Left, // A/left arrow on keyboard, left face button on gamepad
|
||||
Bottom, // S/down arrow on keyboard, bottom face button on gamepad
|
||||
Right // D/right arrow on keyboard, right face button on gamepad
|
||||
}
|
||||
|
||||
public static bool CheckButtonPressed(Input.Inputs inputs, ButtonType buttonType)
|
||||
{
|
||||
bool pressed = false;
|
||||
public static bool CheckButtonPressed(Input.Inputs inputs, ButtonType buttonType)
|
||||
{
|
||||
bool pressed = false;
|
||||
|
||||
if (buttonType == ButtonType.Left)
|
||||
{
|
||||
pressed = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadLeft.IsPressed) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.A) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.Left)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Bottom)
|
||||
{
|
||||
pressed = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadDown.IsPressed) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.S) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.Down)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Right)
|
||||
{
|
||||
pressed = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadRight.IsPressed) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.D) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.Right)
|
||||
);
|
||||
}
|
||||
if (buttonType == ButtonType.Left)
|
||||
{
|
||||
pressed = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadLeft.IsPressed) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.A) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.Left)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Bottom)
|
||||
{
|
||||
pressed = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadDown.IsPressed) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.S) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.Down)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Right)
|
||||
{
|
||||
pressed = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadRight.IsPressed) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.D) ||
|
||||
inputs.Keyboard.IsPressed(Input.KeyCode.Right)
|
||||
);
|
||||
}
|
||||
|
||||
return pressed;
|
||||
}
|
||||
return pressed;
|
||||
}
|
||||
|
||||
public static bool CheckButtonDown(Input.Inputs inputs, ButtonType buttonType)
|
||||
{
|
||||
bool down = false;
|
||||
public static bool CheckButtonDown(Input.Inputs inputs, ButtonType buttonType)
|
||||
{
|
||||
bool down = false;
|
||||
|
||||
if (buttonType == ButtonType.Left)
|
||||
{
|
||||
down = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadLeft.IsDown) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.A) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.Left)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Bottom)
|
||||
{
|
||||
down = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadDown.IsDown) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.S) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.Down)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Right)
|
||||
{
|
||||
down = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadRight.IsDown) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.D) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.Right)
|
||||
);
|
||||
}
|
||||
if (buttonType == ButtonType.Left)
|
||||
{
|
||||
down = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadLeft.IsDown) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.A) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.Left)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Bottom)
|
||||
{
|
||||
down = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadDown.IsDown) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.S) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.Down)
|
||||
);
|
||||
}
|
||||
else if (buttonType == ButtonType.Right)
|
||||
{
|
||||
down = (
|
||||
(inputs.GamepadExists(0) && inputs.GetGamepad(0).DpadRight.IsDown) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.D) ||
|
||||
inputs.Keyboard.IsDown(Input.KeyCode.Right)
|
||||
);
|
||||
}
|
||||
|
||||
return down;
|
||||
}
|
||||
}
|
||||
return down;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
public struct TransformVertexUniform
|
||||
{
|
||||
public Matrix4x4 ViewProjection;
|
||||
public struct TransformVertexUniform
|
||||
{
|
||||
public Matrix4x4 ViewProjection;
|
||||
|
||||
public TransformVertexUniform(Matrix4x4 viewProjection)
|
||||
{
|
||||
ViewProjection = viewProjection;
|
||||
}
|
||||
}
|
||||
public TransformVertexUniform(Matrix4x4 viewProjection)
|
||||
{
|
||||
ViewProjection = viewProjection;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,12 +20,12 @@ namespace MoonWorks.Test
|
|||
};
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
{
|
||||
return Position.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct PositionColorVertex : IVertexType
|
||||
{
|
||||
public Vector3 Position;
|
||||
|
@ -67,9 +67,9 @@ namespace MoonWorks.Test
|
|||
VertexElementFormat.Vector2
|
||||
};
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
public override string ToString()
|
||||
{
|
||||
return Position + " | " + TexCoord;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,130 +5,130 @@ using RefreshCS;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class RenderTexture3DGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture rt;
|
||||
private Sampler sampler;
|
||||
class RenderTexture3DGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture rt;
|
||||
private Sampler sampler;
|
||||
|
||||
private float t;
|
||||
private Color[] colors = new Color[]
|
||||
{
|
||||
Color.Red,
|
||||
Color.Green,
|
||||
Color.Blue,
|
||||
};
|
||||
private float t;
|
||||
private Color[] colors = new Color[]
|
||||
{
|
||||
Color.Red,
|
||||
Color.Green,
|
||||
Color.Blue,
|
||||
};
|
||||
|
||||
struct FragUniform
|
||||
{
|
||||
public float Depth;
|
||||
struct FragUniform
|
||||
{
|
||||
public float Depth;
|
||||
|
||||
public FragUniform(float depth)
|
||||
{
|
||||
Depth = depth;
|
||||
}
|
||||
}
|
||||
public FragUniform(float depth)
|
||||
{
|
||||
Depth = depth;
|
||||
}
|
||||
}
|
||||
|
||||
public RenderTexture3DGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad3D.frag"));
|
||||
public RenderTexture3DGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad3D.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo = GraphicsShaderInfo.Create<FragUniform>(fragShaderModule, "main", 1);
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo = GraphicsShaderInfo.Create<FragUniform>(fragShaderModule, "main", 1);
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create samplers
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
||||
// Create samplers
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearWrap);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
rt = Texture.CreateTexture3D(
|
||||
GraphicsDevice,
|
||||
16,
|
||||
16,
|
||||
(uint) colors.Length,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler
|
||||
);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
rt = Texture.CreateTexture3D(
|
||||
GraphicsDevice,
|
||||
16,
|
||||
16,
|
||||
(uint) colors.Length,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler
|
||||
);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
|
||||
// Clear each depth slice of the RT to a different color
|
||||
for (uint i = 0; i < colors.Length; i += 1)
|
||||
{
|
||||
ColorAttachmentInfo attachmentInfo = new ColorAttachmentInfo
|
||||
{
|
||||
Texture = rt,
|
||||
ClearColor = colors[i],
|
||||
Depth = i,
|
||||
Layer = 0,
|
||||
Level = 0,
|
||||
LoadOp = LoadOp.Clear,
|
||||
StoreOp = StoreOp.Store
|
||||
};
|
||||
cmdbuf.BeginRenderPass(attachmentInfo);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
// Clear each depth slice of the RT to a different color
|
||||
for (uint i = 0; i < colors.Length; i += 1)
|
||||
{
|
||||
ColorAttachmentInfo attachmentInfo = new ColorAttachmentInfo
|
||||
{
|
||||
Texture = rt,
|
||||
ClearColor = colors[i],
|
||||
Depth = i,
|
||||
Layer = 0,
|
||||
Level = 0,
|
||||
LoadOp = LoadOp.Clear,
|
||||
StoreOp = StoreOp.Store
|
||||
};
|
||||
cmdbuf.BeginRenderPass(attachmentInfo);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
t += 0.01f;
|
||||
FragUniform fragUniform = new FragUniform(t);
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
t += 0.01f;
|
||||
FragUniform fragUniform = new FragUniform(t);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(rt, sampler));
|
||||
uint fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniform);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, fragParamOffset);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(rt, sampler));
|
||||
uint fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniform);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, fragParamOffset);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
RenderTexture3DGame game = new RenderTexture3DGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
RenderTexture3DGame game = new RenderTexture3DGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,171 +6,171 @@ using System.Runtime.InteropServices;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class RenderTextureCubeGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture cubemap;
|
||||
private Sampler sampler;
|
||||
class RenderTextureCubeGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture cubemap;
|
||||
private Sampler sampler;
|
||||
|
||||
private Vector3 camPos = new Vector3(0, 0, 4f);
|
||||
private Vector3 camPos = new Vector3(0, 0, 4f);
|
||||
|
||||
private Color[] colors = new Color[]
|
||||
{
|
||||
Color.Red,
|
||||
Color.Green,
|
||||
Color.Blue,
|
||||
Color.Orange,
|
||||
Color.Yellow,
|
||||
Color.Purple,
|
||||
};
|
||||
private Color[] colors = new Color[]
|
||||
{
|
||||
Color.Red,
|
||||
Color.Green,
|
||||
Color.Blue,
|
||||
Color.Orange,
|
||||
Color.Yellow,
|
||||
Color.Purple,
|
||||
};
|
||||
|
||||
public RenderTextureCubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Down to view the other side of the cubemap");
|
||||
public RenderTextureCubeGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Down to view the other side of the cubemap");
|
||||
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("Skybox.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("Skybox.frag"));
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("Skybox.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("Skybox.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo.UniformBufferSize = (uint) Marshal.SizeOf<TransformVertexUniform>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo.UniformBufferSize = (uint) Marshal.SizeOf<TransformVertexUniform>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create samplers
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
// Create samplers
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 24);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 36);
|
||||
cubemap = Texture.CreateTextureCube(
|
||||
GraphicsDevice,
|
||||
16,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler
|
||||
);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 24);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 36);
|
||||
cubemap = Texture.CreateTextureCube(
|
||||
GraphicsDevice,
|
||||
16,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler
|
||||
);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionVertex[]
|
||||
{
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, -10, -10)),
|
||||
new PositionVertex(new Vector3(-10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, 10)),
|
||||
new PositionVertex(new Vector3(10, -10, -10)),
|
||||
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10))
|
||||
}
|
||||
);
|
||||
new PositionVertex(new Vector3(-10, 10, -10)),
|
||||
new PositionVertex(new Vector3(-10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, 10)),
|
||||
new PositionVertex(new Vector3(10, 10, -10))
|
||||
}
|
||||
);
|
||||
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2, 0, 2, 3,
|
||||
6, 5, 4, 7, 6, 4,
|
||||
8, 9, 10, 8, 10, 11,
|
||||
14, 13, 12, 15, 14, 12,
|
||||
16, 17, 18, 16, 18, 19,
|
||||
22, 21, 20, 23, 22, 20
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2, 0, 2, 3,
|
||||
6, 5, 4, 7, 6, 4,
|
||||
8, 9, 10, 8, 10, 11,
|
||||
14, 13, 12, 15, 14, 12,
|
||||
16, 17, 18, 16, 18, 19,
|
||||
22, 21, 20, 23, 22, 20
|
||||
}
|
||||
);
|
||||
|
||||
// Clear each slice of the cubemap to a different color
|
||||
for (uint i = 0; i < 6; i += 1)
|
||||
{
|
||||
ColorAttachmentInfo attachmentInfo = new ColorAttachmentInfo
|
||||
{
|
||||
Texture = cubemap,
|
||||
ClearColor = colors[i],
|
||||
Depth = 0,
|
||||
Layer = i,
|
||||
Level = 0,
|
||||
LoadOp = LoadOp.Clear,
|
||||
StoreOp = StoreOp.Store
|
||||
};
|
||||
cmdbuf.BeginRenderPass(attachmentInfo);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
// Clear each slice of the cubemap to a different color
|
||||
for (uint i = 0; i < 6; i += 1)
|
||||
{
|
||||
ColorAttachmentInfo attachmentInfo = new ColorAttachmentInfo
|
||||
{
|
||||
Texture = cubemap,
|
||||
ClearColor = colors[i],
|
||||
Depth = 0,
|
||||
Layer = i,
|
||||
Level = 0,
|
||||
LoadOp = LoadOp.Clear,
|
||||
StoreOp = StoreOp.Store
|
||||
};
|
||||
cmdbuf.BeginRenderPass(attachmentInfo);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Bottom))
|
||||
{
|
||||
camPos.Z *= -1;
|
||||
}
|
||||
}
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Bottom))
|
||||
{
|
||||
camPos.Z *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
Matrix4x4 proj = Matrix4x4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.ToRadians(75f),
|
||||
(float) MainWindow.Width / MainWindow.Height,
|
||||
0.01f,
|
||||
100f
|
||||
);
|
||||
Matrix4x4 view = Matrix4x4.CreateLookAt(
|
||||
camPos,
|
||||
Vector3.Zero,
|
||||
Vector3.Up
|
||||
);
|
||||
TransformVertexUniform vertUniforms = new TransformVertexUniform(view * proj);
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
Matrix4x4 proj = Matrix4x4.CreatePerspectiveFieldOfView(
|
||||
MathHelper.ToRadians(75f),
|
||||
(float) MainWindow.Width / MainWindow.Height,
|
||||
0.01f,
|
||||
100f
|
||||
);
|
||||
Matrix4x4 view = Matrix4x4.CreateLookAt(
|
||||
camPos,
|
||||
Vector3.Zero,
|
||||
Vector3.Up
|
||||
);
|
||||
TransformVertexUniform vertUniforms = new TransformVertexUniform(view * proj);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(cubemap, sampler));
|
||||
uint vertexUniformOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexUniformOffset, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(cubemap, sampler));
|
||||
uint vertexUniformOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 12, vertexUniformOffset, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
RenderTextureCubeGame game = new RenderTextureCubeGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
RenderTextureCubeGame game = new RenderTextureCubeGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,179 +4,179 @@ using MoonWorks.Math.Float;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class RenderTextureMipmapsGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture texture;
|
||||
class RenderTextureMipmapsGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture texture;
|
||||
|
||||
private Sampler[] samplers = new Sampler[5];
|
||||
private Sampler[] samplers = new Sampler[5];
|
||||
|
||||
private float scale = 0.5f;
|
||||
private int currentSamplerIndex = 0;
|
||||
private Color[] colors = new Color[]
|
||||
{
|
||||
Color.Red,
|
||||
Color.Green,
|
||||
Color.Blue,
|
||||
Color.Yellow,
|
||||
};
|
||||
private float scale = 0.5f;
|
||||
private int currentSamplerIndex = 0;
|
||||
private Color[] colors = new Color[]
|
||||
{
|
||||
Color.Red,
|
||||
Color.Green,
|
||||
Color.Blue,
|
||||
Color.Yellow,
|
||||
};
|
||||
|
||||
private string GetSamplerString(int index)
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return "PointClamp";
|
||||
case 1:
|
||||
return "LinearClamp";
|
||||
case 2:
|
||||
return "PointClamp with Mip LOD Bias = 0.25";
|
||||
case 3:
|
||||
return "PointClamp with Min LOD = 1";
|
||||
case 4:
|
||||
return "PointClamp with Max LOD = 1";
|
||||
default:
|
||||
throw new System.Exception("Unknown sampler!");
|
||||
}
|
||||
}
|
||||
private string GetSamplerString(int index)
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
return "PointClamp";
|
||||
case 1:
|
||||
return "LinearClamp";
|
||||
case 2:
|
||||
return "PointClamp with Mip LOD Bias = 0.25";
|
||||
case 3:
|
||||
return "PointClamp with Min LOD = 1";
|
||||
case 4:
|
||||
return "PointClamp with Max LOD = 1";
|
||||
default:
|
||||
throw new System.Exception("Unknown sampler!");
|
||||
}
|
||||
}
|
||||
|
||||
public RenderTextureMipmapsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to shrink/expand the scale of the quad");
|
||||
Logger.LogInfo("Press Down to cycle through sampler states");
|
||||
Logger.LogInfo(GetSamplerString(currentSamplerIndex));
|
||||
public RenderTextureMipmapsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to shrink/expand the scale of the quad");
|
||||
Logger.LogInfo("Press Down to cycle through sampler states");
|
||||
Logger.LogInfo(GetSamplerString(currentSamplerIndex));
|
||||
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuadWithMatrix.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuadWithMatrix.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(vertShaderModule, "main", 0);
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(vertShaderModule, "main", 0);
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create samplers
|
||||
SamplerCreateInfo samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplers[0] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
// Create samplers
|
||||
SamplerCreateInfo samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplers[0] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
|
||||
samplerCreateInfo = SamplerCreateInfo.LinearClamp;
|
||||
samplers[1] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
samplerCreateInfo = SamplerCreateInfo.LinearClamp;
|
||||
samplers[1] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
|
||||
samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplerCreateInfo.MipLodBias = 0.25f;
|
||||
samplers[2] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplerCreateInfo.MipLodBias = 0.25f;
|
||||
samplers[2] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
|
||||
samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplerCreateInfo.MinLod = 1;
|
||||
samplers[3] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplerCreateInfo.MinLod = 1;
|
||||
samplers[3] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
|
||||
samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplerCreateInfo.MaxLod = 1;
|
||||
samplers[4] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
samplerCreateInfo = SamplerCreateInfo.PointClamp;
|
||||
samplerCreateInfo.MaxLod = 1;
|
||||
samplers[4] = new Sampler(GraphicsDevice, samplerCreateInfo);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler,
|
||||
4
|
||||
);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
MainWindow.Width,
|
||||
MainWindow.Height,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.ColorTarget | TextureUsageFlags.Sampler,
|
||||
4
|
||||
);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
|
||||
// Clear each mip level to a different color
|
||||
for (uint i = 0; i < texture.LevelCount; i += 1)
|
||||
{
|
||||
ColorAttachmentInfo attachmentInfo = new ColorAttachmentInfo
|
||||
{
|
||||
Texture = texture,
|
||||
ClearColor = colors[i],
|
||||
Depth = 0,
|
||||
Layer = 0,
|
||||
Level = i,
|
||||
LoadOp = LoadOp.Clear,
|
||||
StoreOp = StoreOp.Store
|
||||
};
|
||||
cmdbuf.BeginRenderPass(attachmentInfo);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
// Clear each mip level to a different color
|
||||
for (uint i = 0; i < texture.LevelCount; i += 1)
|
||||
{
|
||||
ColorAttachmentInfo attachmentInfo = new ColorAttachmentInfo
|
||||
{
|
||||
Texture = texture,
|
||||
ClearColor = colors[i],
|
||||
Depth = 0,
|
||||
Layer = 0,
|
||||
Level = i,
|
||||
LoadOp = LoadOp.Clear,
|
||||
StoreOp = StoreOp.Store
|
||||
};
|
||||
cmdbuf.BeginRenderPass(attachmentInfo);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
scale = System.MathF.Max(0.01f, scale - 0.01f);
|
||||
}
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
scale = System.MathF.Max(0.01f, scale - 0.01f);
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
scale = System.MathF.Min(1f, scale + 0.01f);
|
||||
}
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
scale = System.MathF.Min(1f, scale + 0.01f);
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Bottom))
|
||||
{
|
||||
currentSamplerIndex = (currentSamplerIndex + 1) % samplers.Length;
|
||||
Logger.LogInfo(GetSamplerString(currentSamplerIndex));
|
||||
}
|
||||
}
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Bottom))
|
||||
{
|
||||
currentSamplerIndex = (currentSamplerIndex + 1) % samplers.Length;
|
||||
Logger.LogInfo(GetSamplerString(currentSamplerIndex));
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
TransformVertexUniform vertUniforms = new TransformVertexUniform(Matrix4x4.CreateScale(scale, scale, 1));
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
TransformVertexUniform vertUniforms = new TransformVertexUniform(Matrix4x4.CreateScale(scale, scale, 1));
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, samplers[currentSamplerIndex]));
|
||||
uint vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, vertParamOffset, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, samplers[currentSamplerIndex]));
|
||||
uint vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, vertParamOffset, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
RenderTextureMipmapsGame game = new RenderTextureMipmapsGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
RenderTextureMipmapsGame game = new RenderTextureMipmapsGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,143 +5,143 @@ using RefreshCS;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class Texture3DGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
class Texture3DGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
|
||||
private int currentDepth = 0;
|
||||
private int currentDepth = 0;
|
||||
|
||||
struct FragUniform
|
||||
{
|
||||
public float Depth;
|
||||
struct FragUniform
|
||||
{
|
||||
public float Depth;
|
||||
|
||||
public FragUniform(float depth)
|
||||
{
|
||||
Depth = depth;
|
||||
}
|
||||
}
|
||||
public FragUniform(float depth)
|
||||
{
|
||||
Depth = depth;
|
||||
}
|
||||
}
|
||||
|
||||
public Texture3DGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to cycle between depth slices");
|
||||
public Texture3DGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to cycle between depth slices");
|
||||
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad3D.frag"));
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad3D.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo = GraphicsShaderInfo.Create<FragUniform>(fragShaderModule, "main", 1);
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo = GraphicsShaderInfo.Create<FragUniform>(fragShaderModule, "main", 1);
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create samplers
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
// Create samplers
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
texture = Texture.CreateTexture3D(GraphicsDevice, 16, 16, 7, TextureFormat.R8G8B8A8, TextureUsageFlags.Sampler);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
texture = Texture.CreateTexture3D(GraphicsDevice, 16, 16, 7, TextureFormat.R8G8B8A8, TextureUsageFlags.Sampler);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
|
||||
// Load each depth subimage of the 3D texture
|
||||
for (uint i = 0; i < texture.Depth; i += 1)
|
||||
{
|
||||
TextureSlice slice = new TextureSlice(
|
||||
texture,
|
||||
new Rect(0, 0, (int) texture.Width, (int) texture.Height),
|
||||
i
|
||||
);
|
||||
// Load each depth subimage of the 3D texture
|
||||
for (uint i = 0; i < texture.Depth; i += 1)
|
||||
{
|
||||
TextureSlice slice = new TextureSlice(
|
||||
texture,
|
||||
new Rect(0, 0, (int) texture.Width, (int) texture.Height),
|
||||
i
|
||||
);
|
||||
|
||||
Texture.SetDataFromImageFile(
|
||||
cmdbuf,
|
||||
slice,
|
||||
TestUtils.GetTexturePath($"tex3d_{i}.png")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
int prevDepth = currentDepth;
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
int prevDepth = currentDepth;
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
currentDepth -= 1;
|
||||
if (currentDepth < 0)
|
||||
{
|
||||
currentDepth = (int) texture.Depth - 1;
|
||||
}
|
||||
}
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
currentDepth -= 1;
|
||||
if (currentDepth < 0)
|
||||
{
|
||||
currentDepth = (int) texture.Depth - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
currentDepth += 1;
|
||||
if (currentDepth >= texture.Depth)
|
||||
{
|
||||
currentDepth = 0;
|
||||
}
|
||||
}
|
||||
if (TestUtils.CheckButtonPressed(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
currentDepth += 1;
|
||||
if (currentDepth >= texture.Depth)
|
||||
{
|
||||
currentDepth = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (prevDepth != currentDepth)
|
||||
{
|
||||
Logger.LogInfo("Setting depth to: " + currentDepth);
|
||||
}
|
||||
}
|
||||
if (prevDepth != currentDepth)
|
||||
{
|
||||
Logger.LogInfo("Setting depth to: " + currentDepth);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
FragUniform fragUniform = new FragUniform((float) currentDepth / texture.Depth);
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
FragUniform fragUniform = new FragUniform((float) currentDepth / texture.Depth);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
uint fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniform);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, fragParamOffset);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
uint fragParamOffset = cmdbuf.PushFragmentShaderUniforms(fragUniform);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, fragParamOffset);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
Texture3DGame game = new Texture3DGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
Texture3DGame game = new Texture3DGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,124 +5,124 @@ using RefreshCS;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class TextureMipmapsGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
class TextureMipmapsGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
|
||||
private float scale = 0.5f;
|
||||
private float scale = 0.5f;
|
||||
|
||||
public TextureMipmapsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to shrink/expand the scale of the quad");
|
||||
public TextureMipmapsGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
Logger.LogInfo("Press Left and Right to shrink/expand the scale of the quad");
|
||||
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuadWithMatrix.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuadWithMatrix.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(vertShaderModule, "main", 0);
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo = GraphicsShaderInfo.Create<TransformVertexUniform>(vertShaderModule, "main", 0);
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
256,
|
||||
256,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Sampler,
|
||||
4
|
||||
);
|
||||
// Create and populate the GPU resources
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
texture = Texture.CreateTexture2D(
|
||||
GraphicsDevice,
|
||||
256,
|
||||
256,
|
||||
TextureFormat.R8G8B8A8,
|
||||
TextureUsageFlags.Sampler,
|
||||
4
|
||||
);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
|
||||
// Set the various mip levels
|
||||
for (int i = 0; i < texture.LevelCount; i += 1)
|
||||
{
|
||||
int w = (int) texture.Width >> i;
|
||||
int h = (int) texture.Height >> i;
|
||||
TextureSlice slice = new TextureSlice(
|
||||
texture,
|
||||
new Rect(0, 0, w, h),
|
||||
0,
|
||||
0,
|
||||
(uint) i
|
||||
);
|
||||
// Set the various mip levels
|
||||
for (int i = 0; i < texture.LevelCount; i += 1)
|
||||
{
|
||||
int w = (int) texture.Width >> i;
|
||||
int h = (int) texture.Height >> i;
|
||||
TextureSlice slice = new TextureSlice(
|
||||
texture,
|
||||
new Rect(0, 0, w, h),
|
||||
0,
|
||||
0,
|
||||
(uint) i
|
||||
);
|
||||
|
||||
Texture.SetDataFromImageFile(cmdbuf, slice, TestUtils.GetTexturePath($"mip{i}.png"));
|
||||
}
|
||||
}
|
||||
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
scale = System.MathF.Max(0.01f, scale - 0.01f);
|
||||
}
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Left))
|
||||
{
|
||||
scale = System.MathF.Max(0.01f, scale - 0.01f);
|
||||
}
|
||||
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
scale = System.MathF.Min(1f, scale + 0.01f);
|
||||
}
|
||||
}
|
||||
if (TestUtils.CheckButtonDown(Inputs, TestUtils.ButtonType.Right))
|
||||
{
|
||||
scale = System.MathF.Min(1f, scale + 0.01f);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
TransformVertexUniform vertUniforms = new TransformVertexUniform(Matrix4x4.CreateScale(scale, scale, 1));
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
TransformVertexUniform vertUniforms = new TransformVertexUniform(Matrix4x4.CreateScale(scale, scale, 1));
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
uint vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, vertParamOffset, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
uint vertParamOffset = cmdbuf.PushVertexShaderUniforms(vertUniforms);
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, vertParamOffset, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
TextureMipmapsGame game = new TextureMipmapsGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
TextureMipmapsGame game = new TextureMipmapsGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,70 +4,70 @@ using MoonWorks.Math.Float;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class VertexSamplerGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
class VertexSamplerGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Buffer vertexBuffer;
|
||||
private Texture texture;
|
||||
private Sampler sampler;
|
||||
|
||||
public VertexSamplerGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionSampler.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
public VertexSamplerGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("PositionSampler.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.VertexShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 3);
|
||||
texture = Texture.CreateTexture2D(GraphicsDevice, 3, 1, TextureFormat.R8G8B8A8, TextureUsageFlags.Sampler);
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 3);
|
||||
texture = Texture.CreateTexture2D(GraphicsDevice, 3, 1, TextureFormat.R8G8B8A8, TextureUsageFlags.Sampler);
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.PointClamp);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(0.334f, 0)),
|
||||
new PositionTextureVertex(new Vector3(0, -1, 0), new Vector2(0.667f, 0)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetTextureData(texture, new Color[] { Color.Yellow, Color.Indigo, Color.HotPink });
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(0.334f, 0)),
|
||||
new PositionTextureVertex(new Vector3(0, -1, 0), new Vector2(0.667f, 0)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetTextureData(texture, new Color[] { Color.Yellow, Color.Indigo, Color.HotPink });
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
protected override void Update(System.TimeSpan delta) { }
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindVertexSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
cmdbuf.DrawPrimitives(0, 1, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindVertexSamplers(new TextureSamplerBinding(texture, sampler));
|
||||
cmdbuf.DrawPrimitives(0, 1, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
VertexSamplerGame p = new VertexSamplerGame();
|
||||
p.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
VertexSamplerGame p = new VertexSamplerGame();
|
||||
p.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,96 +4,96 @@ using MoonWorks.Video;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class VideoPlayerGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Sampler sampler;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
class VideoPlayerGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
private Sampler sampler;
|
||||
private Buffer vertexBuffer;
|
||||
private Buffer indexBuffer;
|
||||
|
||||
private Video.VideoAV1 video;
|
||||
private VideoPlayer videoPlayer;
|
||||
private Video.VideoAV1 video;
|
||||
private VideoPlayer videoPlayer;
|
||||
|
||||
public VideoPlayerGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
public VideoPlayerGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 60, true)
|
||||
{
|
||||
// Load the shaders
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("TexturedQuad.frag"));
|
||||
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
// Create the graphics pipeline
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipelineCreateInfo.VertexInputState = VertexInputState.CreateSingleBinding<PositionTextureVertex>();
|
||||
pipelineCreateInfo.FragmentShaderInfo.SamplerBindingCount = 1;
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
|
||||
// Create the sampler
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearClamp);
|
||||
// Create the sampler
|
||||
sampler = new Sampler(GraphicsDevice, SamplerCreateInfo.LinearClamp);
|
||||
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
// Create and populate the GPU resources
|
||||
vertexBuffer = Buffer.Create<PositionTextureVertex>(GraphicsDevice, BufferUsageFlags.Vertex, 4);
|
||||
indexBuffer = Buffer.Create<ushort>(GraphicsDevice, BufferUsageFlags.Index, 6);
|
||||
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
cmdbuf.SetBufferData(
|
||||
vertexBuffer,
|
||||
new PositionTextureVertex[]
|
||||
{
|
||||
new PositionTextureVertex(new Vector3(-1, -1, 0), new Vector2(0, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, -1, 0), new Vector2(1, 0)),
|
||||
new PositionTextureVertex(new Vector3(1, 1, 0), new Vector2(1, 1)),
|
||||
new PositionTextureVertex(new Vector3(-1, 1, 0), new Vector2(0, 1)),
|
||||
}
|
||||
);
|
||||
cmdbuf.SetBufferData(
|
||||
indexBuffer,
|
||||
new ushort[]
|
||||
{
|
||||
0, 1, 2,
|
||||
0, 2, 3,
|
||||
}
|
||||
);
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
|
||||
// Load the video
|
||||
video = new VideoAV1(GraphicsDevice, TestUtils.GetVideoPath("hello.obu"), 25);
|
||||
// Load the video
|
||||
video = new VideoAV1(GraphicsDevice, TestUtils.GetVideoPath("hello.obu"), 25);
|
||||
|
||||
// Play the video
|
||||
videoPlayer = new VideoPlayer(GraphicsDevice);
|
||||
videoPlayer.Load(video);
|
||||
videoPlayer.Loop = true;
|
||||
videoPlayer.Play();
|
||||
}
|
||||
// Play the video
|
||||
videoPlayer = new VideoPlayer(GraphicsDevice);
|
||||
videoPlayer.Load(video);
|
||||
videoPlayer.Loop = true;
|
||||
videoPlayer.Play();
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
videoPlayer.Render();
|
||||
}
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
videoPlayer.Render();
|
||||
}
|
||||
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(videoPlayer.RenderTexture, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.CornflowerBlue));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.BindVertexBuffers(vertexBuffer);
|
||||
cmdbuf.BindIndexBuffer(indexBuffer, IndexElementSize.Sixteen);
|
||||
cmdbuf.BindFragmentSamplers(new TextureSamplerBinding(videoPlayer.RenderTexture, sampler));
|
||||
cmdbuf.DrawIndexedPrimitives(0, 0, 2, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
VideoPlayerGame game = new VideoPlayerGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
VideoPlayerGame game = new VideoPlayerGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,83 +3,83 @@ using MoonWorks.Graphics;
|
|||
|
||||
namespace MoonWorks.Test
|
||||
{
|
||||
class WindowResizingGame : Game
|
||||
{
|
||||
private GraphicsPipeline pipeline;
|
||||
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),
|
||||
};
|
||||
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(), 60, true)
|
||||
{
|
||||
ShaderModule vertShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("RawTriangle.vert"));
|
||||
ShaderModule fragShaderModule = new ShaderModule(GraphicsDevice, TestUtils.GetShaderPath("SolidColor.frag"));
|
||||
public WindowResizingGame() : base(TestUtils.GetStandardWindowCreateInfo(), TestUtils.GetStandardFrameLimiterSettings(), 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);
|
||||
}
|
||||
GraphicsPipelineCreateInfo pipelineCreateInfo = TestUtils.GetStandardGraphicsPipelineCreateInfo(
|
||||
MainWindow.SwapchainFormat,
|
||||
vertShaderModule,
|
||||
fragShaderModule
|
||||
);
|
||||
pipeline = new GraphicsPipeline(GraphicsDevice, pipelineCreateInfo);
|
||||
}
|
||||
|
||||
protected override void Update(System.TimeSpan delta)
|
||||
{
|
||||
int prevResolutionIndex = currentResolutionIndex;
|
||||
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.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 (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);
|
||||
}
|
||||
}
|
||||
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, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.DrawPrimitives(0, 1, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
protected override void Draw(double alpha)
|
||||
{
|
||||
CommandBuffer cmdbuf = GraphicsDevice.AcquireCommandBuffer();
|
||||
Texture? backbuffer = cmdbuf.AcquireSwapchainTexture(MainWindow);
|
||||
if (backbuffer != null)
|
||||
{
|
||||
cmdbuf.BeginRenderPass(new ColorAttachmentInfo(backbuffer, Color.Black));
|
||||
cmdbuf.BindGraphicsPipeline(pipeline);
|
||||
cmdbuf.DrawPrimitives(0, 1, 0, 0);
|
||||
cmdbuf.EndRenderPass();
|
||||
}
|
||||
GraphicsDevice.Submit(cmdbuf);
|
||||
}
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
WindowResizingGame game = new WindowResizingGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
WindowResizingGame game = new WindowResizingGame();
|
||||
game.Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue