using Refresh again

refresh2
cosmonaut 2024-06-05 12:34:24 -07:00
parent 3cfb43438c
commit baf51d2ee9
31 changed files with 366 additions and 370 deletions

6
.gitmodules vendored
View File

@ -10,6 +10,6 @@
[submodule "lib/dav1dfile"] [submodule "lib/dav1dfile"]
path = lib/dav1dfile path = lib/dav1dfile
url = https://github.com/MoonsideGames/dav1dfile.git url = https://github.com/MoonsideGames/dav1dfile.git
[submodule "SDL2_gpuCS"] [submodule "lib/RefreshCS"]
path = lib/SDL2_gpuCS path = lib/RefreshCS
url = https://github.com/MoonsideGames/SDL2_gpuCS.git url = https://github.com/MoonsideGames/RefreshCS.git

View File

@ -11,7 +11,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="lib\FAudio\csharp\FAudio.cs" /> <Compile Include="lib\FAudio\csharp\FAudio.cs" />
<Compile Include="lib\SDL2_gpuCS\SDL2_gpuCS.cs" /> <Compile Include="lib\RefreshCS\RefreshCS.cs" />
<Compile Include="lib\SDL2-CS\src\SDL2.cs" /> <Compile Include="lib\SDL2-CS\src\SDL2.cs" />
<Compile Include="lib\WellspringCS\WellspringCS.cs" /> <Compile Include="lib\WellspringCS\WellspringCS.cs" />
<Compile Include="lib\dav1dfile\csharp\dav1dfile.cs" /> <Compile Include="lib\dav1dfile\csharp\dav1dfile.cs" />

1
lib/RefreshCS Submodule

@ -0,0 +1 @@
Subproject commit a0cdff3054c646a532e5850c0ab89d4611069237

@ -1 +0,0 @@
Subproject commit 70925aa394c0f24388f3cfb97f1c6ee1f91baf52

View File

@ -85,8 +85,14 @@ namespace MoonWorks
debugMode debugMode
); );
SDL.SDL_WindowFlags windowFlags = 0;
if ((preferredBackends & BackendFlags.Vulkan) != 0)
{
windowFlags |= SDL.SDL_WindowFlags.SDL_WINDOW_VULKAN;
}
Logger.LogInfo("Initializing main window..."); Logger.LogInfo("Initializing main window...");
MainWindow = new Window(windowCreateInfo, GraphicsDevice.WindowFlags | SDL.SDL_WindowFlags.SDL_WINDOW_HIDDEN); MainWindow = new Window(windowCreateInfo, windowFlags | SDL.SDL_WindowFlags.SDL_WINDOW_HIDDEN);
if (!GraphicsDevice.ClaimWindow(MainWindow, windowCreateInfo.SwapchainComposition, windowCreateInfo.PresentMode)) if (!GraphicsDevice.ClaimWindow(MainWindow, windowCreateInfo.SwapchainComposition, windowCreateInfo.PresentMode))
{ {

View File

@ -1,7 +1,6 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2; using RefreshCS;
using SDL2_gpuCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
@ -82,7 +81,7 @@ public class CommandBuffer
} }
#endif #endif
var texturePtr = SDL_Gpu.SDL_GpuAcquireSwapchainTexture( var texturePtr = Refresh.Refresh_AcquireSwapchainTexture(
Handle, Handle,
window.Handle, window.Handle,
out var width, out var width,
@ -123,14 +122,14 @@ public class CommandBuffer
AssertColorTarget(colorAttachmentInfo); AssertColorTarget(colorAttachmentInfo);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[1]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[1];
sdlColorAttachmentInfos[0] = colorAttachmentInfo.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfo.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
1, 1,
(SDL_Gpu.DepthStencilAttachmentInfo*) nint.Zero (Refresh.DepthStencilAttachmentInfo*) nint.Zero
); );
var renderPass = Device.RenderPassPool.Obtain(); var renderPass = Device.RenderPassPool.Obtain();
@ -171,15 +170,15 @@ public class CommandBuffer
AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, colorAttachmentInfoTwo.TextureSlice.Texture); AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, colorAttachmentInfoTwo.TextureSlice.Texture);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[2]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[2];
sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToRefresh();
sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToSDL(); sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
2, 2,
(SDL_Gpu.DepthStencilAttachmentInfo*) nint.Zero (Refresh.DepthStencilAttachmentInfo*) nint.Zero
); );
var renderPass = Device.RenderPassPool.Obtain(); var renderPass = Device.RenderPassPool.Obtain();
@ -227,16 +226,16 @@ public class CommandBuffer
AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, colorAttachmentInfoThree.TextureSlice.Texture); AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, colorAttachmentInfoThree.TextureSlice.Texture);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[3]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[3];
sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToRefresh();
sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToSDL(); sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToRefresh();
sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToSDL(); sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
3, 3,
(SDL_Gpu.DepthStencilAttachmentInfo*) nint.Zero (Refresh.DepthStencilAttachmentInfo*) nint.Zero
); );
var renderPass = Device.RenderPassPool.Obtain(); var renderPass = Device.RenderPassPool.Obtain();
@ -290,17 +289,17 @@ public class CommandBuffer
AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, colorAttachmentInfoFour.TextureSlice.Texture); AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, colorAttachmentInfoFour.TextureSlice.Texture);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[4]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[4];
sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToRefresh();
sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToSDL(); sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToRefresh();
sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToSDL(); sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToRefresh();
sdlColorAttachmentInfos[3] = colorAttachmentInfoFour.ToSDL(); sdlColorAttachmentInfos[3] = colorAttachmentInfoFour.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
4, 4,
(SDL_Gpu.DepthStencilAttachmentInfo*) nint.Zero (Refresh.DepthStencilAttachmentInfo*) nint.Zero
); );
var renderPass = Device.RenderPassPool.Obtain(); var renderPass = Device.RenderPassPool.Obtain();
@ -334,11 +333,11 @@ public class CommandBuffer
AssertValidDepthAttachment(depthStencilAttachmentInfo); AssertValidDepthAttachment(depthStencilAttachmentInfo);
#endif #endif
var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToSDL(); var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
(SDL_Gpu.ColorAttachmentInfo*) nint.Zero, (Refresh.ColorAttachmentInfo*) nint.Zero,
0, 0,
&sdlDepthStencilAttachmentInfo &sdlDepthStencilAttachmentInfo
); );
@ -376,12 +375,12 @@ public class CommandBuffer
AssertSameSampleCount(colorAttachmentInfo.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture); AssertSameSampleCount(colorAttachmentInfo.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[1]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[1];
sdlColorAttachmentInfos[0] = colorAttachmentInfo.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfo.ToRefresh();
var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToSDL(); var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
1, 1,
@ -431,13 +430,13 @@ public class CommandBuffer
AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture); AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[2]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[2];
sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToRefresh();
sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToSDL(); sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToRefresh();
var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToSDL(); var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
2, 2,
@ -494,14 +493,14 @@ public class CommandBuffer
AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture); AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[3]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[3];
sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToRefresh();
sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToSDL(); sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToRefresh();
sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToSDL(); sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToRefresh();
var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToSDL(); var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
3, 3,
@ -565,15 +564,15 @@ public class CommandBuffer
AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture); AssertSameSampleCount(colorAttachmentInfoOne.TextureSlice.Texture, depthStencilAttachmentInfo.TextureSlice.Texture);
#endif #endif
var sdlColorAttachmentInfos = stackalloc SDL_Gpu.ColorAttachmentInfo[4]; var sdlColorAttachmentInfos = stackalloc Refresh.ColorAttachmentInfo[4];
sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToSDL(); sdlColorAttachmentInfos[0] = colorAttachmentInfoOne.ToRefresh();
sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToSDL(); sdlColorAttachmentInfos[1] = colorAttachmentInfoTwo.ToRefresh();
sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToSDL(); sdlColorAttachmentInfos[2] = colorAttachmentInfoThree.ToRefresh();
sdlColorAttachmentInfos[3] = colorAttachmentInfoFour.ToSDL(); sdlColorAttachmentInfos[3] = colorAttachmentInfoFour.ToRefresh();
var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToSDL(); var sdlDepthStencilAttachmentInfo = depthStencilAttachmentInfo.ToRefresh();
var renderPassHandle = SDL_Gpu.SDL_GpuBeginRenderPass( var renderPassHandle = Refresh.Refresh_BeginRenderPass(
Handle, Handle,
sdlColorAttachmentInfos, sdlColorAttachmentInfos,
4, 4,
@ -613,7 +612,7 @@ public class CommandBuffer
renderPass.active = false; renderPass.active = false;
#endif #endif
SDL_Gpu.SDL_GpuEndRenderPass( Refresh.Refresh_EndRenderPass(
renderPass.Handle renderPass.Handle
); );
@ -633,11 +632,11 @@ public class CommandBuffer
Filter filter, Filter filter,
bool cycle bool cycle
) { ) {
SDL_Gpu.SDL_GpuBlit( Refresh.Refresh_Blit(
Handle, Handle,
source.ToSDL(), source.ToRefresh(),
destination.ToSDL(), destination.ToRefresh(),
(SDL_Gpu.Filter) filter, (Refresh.Filter) filter,
Conversions.BoolToInt(cycle) Conversions.BoolToInt(cycle)
); );
} }
@ -651,13 +650,13 @@ public class CommandBuffer
computePassActive = true; computePassActive = true;
#endif #endif
var sdlTextureBinding = readWriteTextureBinding.ToSDL(); var sdlTextureBinding = readWriteTextureBinding.ToRefresh();
var computePassHandle = SDL_Gpu.SDL_GpuBeginComputePass( var computePassHandle = Refresh.Refresh_BeginComputePass(
Handle, Handle,
&sdlTextureBinding, &sdlTextureBinding,
1, 1,
(SDL_Gpu.StorageBufferReadWriteBinding*) nint.Size, (Refresh.StorageBufferReadWriteBinding*) nint.Size,
0 0
); );
@ -680,11 +679,11 @@ public class CommandBuffer
computePassActive = true; computePassActive = true;
#endif #endif
var sdlBufferBinding = readWriteBufferBinding.ToSDL(); var sdlBufferBinding = readWriteBufferBinding.ToRefresh();
var computePassHandle = SDL_Gpu.SDL_GpuBeginComputePass( var computePassHandle = Refresh.Refresh_BeginComputePass(
Handle, Handle,
(SDL_Gpu.StorageTextureReadWriteBinding*) nint.Zero, (Refresh.StorageTextureReadWriteBinding*) nint.Zero,
0, 0,
&sdlBufferBinding, &sdlBufferBinding,
1 1
@ -710,10 +709,10 @@ public class CommandBuffer
computePassActive = true; computePassActive = true;
#endif #endif
var sdlTextureBinding = readWriteTextureBinding.ToSDL(); var sdlTextureBinding = readWriteTextureBinding.ToRefresh();
var sdlBufferBinding = readWriteBufferBinding.ToSDL(); var sdlBufferBinding = readWriteBufferBinding.ToRefresh();
var computePassHandle = SDL_Gpu.SDL_GpuBeginComputePass( var computePassHandle = Refresh.Refresh_BeginComputePass(
Handle, Handle,
&sdlTextureBinding, &sdlTextureBinding,
1, 1,
@ -749,11 +748,11 @@ public class CommandBuffer
(nuint) (readWriteBufferBindings.Length * Marshal.SizeOf<StorageBufferReadWriteBinding>()) (nuint) (readWriteBufferBindings.Length * Marshal.SizeOf<StorageBufferReadWriteBinding>())
); );
var computePassHandle = SDL_Gpu.SDL_GpuBeginComputePass( var computePassHandle = Refresh.Refresh_BeginComputePass(
Handle, Handle,
(SDL_Gpu.StorageTextureReadWriteBinding*) sdlTextureBindings, (Refresh.StorageTextureReadWriteBinding*) sdlTextureBindings,
(uint) readWriteTextureBindings.Length, (uint) readWriteTextureBindings.Length,
(SDL_Gpu.StorageBufferReadWriteBinding*) sdlBufferBindings, (Refresh.StorageBufferReadWriteBinding*) sdlBufferBindings,
(uint) readWriteBufferBindings.Length (uint) readWriteBufferBindings.Length
); );
@ -779,7 +778,7 @@ public class CommandBuffer
computePass.active = false; computePass.active = false;
#endif #endif
SDL_Gpu.SDL_GpuEndComputePass( Refresh.Refresh_EndComputePass(
computePass.Handle computePass.Handle
); );
@ -802,7 +801,7 @@ public class CommandBuffer
copyPassActive = true; copyPassActive = true;
#endif #endif
var copyPassHandle = SDL_Gpu.SDL_GpuBeginCopyPass(Handle); var copyPassHandle = Refresh.Refresh_BeginCopyPass(Handle);
var copyPass = Device.CopyPassPool.Obtain(); var copyPass = Device.CopyPassPool.Obtain();
copyPass.SetHandle(copyPassHandle); copyPass.SetHandle(copyPassHandle);
@ -818,7 +817,7 @@ public class CommandBuffer
copyPassActive = false; copyPassActive = false;
#endif #endif
SDL_Gpu.SDL_GpuEndCopyPass( Refresh.Refresh_EndCopyPass(
copyPass.Handle copyPass.Handle
); );

View File

@ -1,6 +1,5 @@
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2; using RefreshCS;
using SDL2_gpuCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
@ -32,7 +31,7 @@ public class ComputePass
// TODO: validate formats? // TODO: validate formats?
#endif #endif
SDL_Gpu.SDL_GpuBindComputePipeline( Refresh.Refresh_BindComputePipeline(
Handle, Handle,
computePipeline.Handle computePipeline.Handle
); );
@ -57,9 +56,9 @@ public class ComputePass
AssertTextureHasComputeStorageReadFlag(textureSlice.Texture); AssertTextureHasComputeStorageReadFlag(textureSlice.Texture);
#endif #endif
var sdlTextureSlice = textureSlice.ToSDL(); var sdlTextureSlice = textureSlice.ToRefresh();
SDL_Gpu.SDL_GpuBindComputeStorageTextures( Refresh.Refresh_BindComputeStorageTextures(
Handle, Handle,
slot, slot,
&sdlTextureSlice, &sdlTextureSlice,
@ -84,7 +83,7 @@ public class ComputePass
var bufferHandle = buffer.Handle; var bufferHandle = buffer.Handle;
SDL_Gpu.SDL_GpuBindComputeStorageBuffers( Refresh.Refresh_BindComputeStorageBuffers(
Handle, Handle,
slot, slot,
&bufferHandle, &bufferHandle,
@ -111,7 +110,7 @@ public class ComputePass
} }
#endif #endif
SDL_Gpu.SDL_GpuPushComputeUniformData( Refresh.Refresh_PushComputeUniformData(
Handle, Handle,
slot, slot,
(nint) uniformsPtr, (nint) uniformsPtr,
@ -153,7 +152,7 @@ public class ComputePass
} }
#endif #endif
SDL_Gpu.SDL_GpuDispatchCompute( Refresh.Refresh_DispatchCompute(
Handle, Handle,
groupCountX, groupCountX,
groupCountY, groupCountY,

View File

@ -1,5 +1,5 @@
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
@ -32,11 +32,11 @@ public class CopyPass
AssertBufferBoundsCheck(transferBuffer.Size, copyParams.BufferOffset, textureRegion.Size); AssertBufferBoundsCheck(transferBuffer.Size, copyParams.BufferOffset, textureRegion.Size);
#endif #endif
SDL_Gpu.SDL_GpuUploadToTexture( Refresh.Refresh_UploadToTexture(
Handle, Handle,
transferBuffer.Handle, transferBuffer.Handle,
textureRegion.ToSDL(), textureRegion.ToRefresh(),
copyParams.ToSDL(), copyParams.ToRefresh(),
Conversions.BoolToInt(cycle) Conversions.BoolToInt(cycle)
); );
} }
@ -78,11 +78,11 @@ public class CopyPass
AssertBufferBoundsCheck(buffer.Size, copyParams.DstOffset, copyParams.Size); AssertBufferBoundsCheck(buffer.Size, copyParams.DstOffset, copyParams.Size);
#endif #endif
SDL_Gpu.SDL_GpuUploadToBuffer( Refresh.Refresh_UploadToBuffer(
Handle, Handle,
transferBuffer.Handle, transferBuffer.Handle,
buffer.Handle, buffer.Handle,
copyParams.ToSDL(), copyParams.ToRefresh(),
Conversions.BoolToInt(cycle) Conversions.BoolToInt(cycle)
); );
} }
@ -149,10 +149,10 @@ public class CopyPass
} }
#endif #endif
SDL_Gpu.SDL_GpuCopyTextureToTexture( Refresh.Refresh_CopyTextureToTexture(
Handle, Handle,
source.ToSDL(), source.ToRefresh(),
destination.ToSDL(), destination.ToRefresh(),
Conversions.BoolToInt(cycle) Conversions.BoolToInt(cycle)
); );
} }
@ -174,11 +174,11 @@ public class CopyPass
AssertBufferBoundsCheck(destination.Size, copyParams.DstOffset, copyParams.Size); AssertBufferBoundsCheck(destination.Size, copyParams.DstOffset, copyParams.Size);
#endif #endif
SDL_Gpu.SDL_GpuCopyBufferToBuffer( Refresh.Refresh_CopyBufferToBuffer(
Handle, Handle,
source.Handle, source.Handle,
destination.Handle, destination.Handle,
copyParams.ToSDL(), copyParams.ToRefresh(),
Conversions.BoolToInt(cycle) Conversions.BoolToInt(cycle)
); );
} }

View File

@ -35,7 +35,7 @@ namespace MoonWorks.Graphics.Font
VertexBuffer = GpuBuffer.Create<Vertex>(GraphicsDevice, BufferUsageFlags.Vertex, INITIAL_VERTEX_COUNT); VertexBuffer = GpuBuffer.Create<Vertex>(GraphicsDevice, BufferUsageFlags.Vertex, INITIAL_VERTEX_COUNT);
IndexBuffer = GpuBuffer.Create<uint>(GraphicsDevice, BufferUsageFlags.Index, INITIAL_INDEX_COUNT); IndexBuffer = GpuBuffer.Create<uint>(GraphicsDevice, BufferUsageFlags.Index, INITIAL_INDEX_COUNT);
TransferBuffer = TransferBuffer.Create<byte>(GraphicsDevice, TransferUsage.Buffer, VertexBuffer.Size + IndexBuffer.Size); TransferBuffer = TransferBuffer.Create<byte>(GraphicsDevice, TransferUsage.Buffer, TransferBufferMapFlags.Write, VertexBuffer.Size + IndexBuffer.Size);
} }
// Call this to initialize or reset the batch. // Call this to initialize or reset the batch.
@ -119,35 +119,35 @@ namespace MoonWorks.Graphics.Font
if (newTransferBufferNeeded) if (newTransferBufferNeeded)
{ {
TransferBuffer.Dispose(); TransferBuffer.Dispose();
TransferBuffer = new TransferBuffer(GraphicsDevice, TransferUsage.Buffer, VertexBuffer.Size + IndexBuffer.Size); TransferBuffer = new TransferBuffer(GraphicsDevice, TransferUsage.Buffer, TransferBufferMapFlags.Write, VertexBuffer.Size + IndexBuffer.Size);
} }
if (vertexDataLengthInBytes > 0 && indexDataLengthInBytes > 0) if (vertexDataLengthInBytes > 0 && indexDataLengthInBytes > 0)
{ {
TransferBuffer.SetData(vertexSpan, TransferOptions.Cycle); TransferBuffer.SetData(vertexSpan, true);
TransferBuffer.SetData(indexSpan, (uint) vertexSpan.Length, TransferOptions.Unsafe); TransferBuffer.SetData(indexSpan, (uint) vertexSpan.Length, false);
commandBuffer.BeginCopyPass(); var copyPass = commandBuffer.BeginCopyPass();
commandBuffer.UploadToBuffer(TransferBuffer, VertexBuffer, new BufferCopy(0, 0, (uint) vertexSpan.Length), WriteOptions.Cycle); copyPass.UploadToBuffer(TransferBuffer, VertexBuffer, new BufferCopy(0, 0, (uint) vertexSpan.Length), true);
commandBuffer.UploadToBuffer(TransferBuffer, IndexBuffer, new BufferCopy((uint) vertexSpan.Length, 0, (uint) indexSpan.Length), WriteOptions.Cycle); copyPass.UploadToBuffer(TransferBuffer, IndexBuffer, new BufferCopy((uint) vertexSpan.Length, 0, (uint) indexSpan.Length), true);
commandBuffer.EndCopyPass(); commandBuffer.EndCopyPass(copyPass);
} }
PrimitiveCount = vertexCount / 2; PrimitiveCount = vertexCount / 2;
} }
// Call this AFTER binding your text pipeline! // Call this AFTER binding your text pipeline!
public void Render(CommandBuffer commandBuffer, Math.Float.Matrix4x4 transformMatrix) public void Render(RenderPass renderPass, Math.Float.Matrix4x4 transformMatrix)
{ {
commandBuffer.BindFragmentSamplers(new TextureSamplerBinding( renderPass.BindFragmentSamplers(new TextureSamplerBinding(
CurrentFont.Texture, CurrentFont.Texture,
GraphicsDevice.LinearSampler GraphicsDevice.LinearSampler
)); ));
commandBuffer.BindVertexBuffers(VertexBuffer); renderPass.BindVertexBuffer(VertexBuffer);
commandBuffer.BindIndexBuffer(IndexBuffer, IndexElementSize.ThirtyTwo); renderPass.BindIndexBuffer(IndexBuffer, IndexElementSize.ThirtyTwo);
commandBuffer.PushVertexShaderUniforms(transformMatrix); renderPass.PushVertexUniformData(transformMatrix);
commandBuffer.PushFragmentShaderUniforms(CurrentFont.DistanceRange); renderPass.PushFragmentUniformData(CurrentFont.DistanceRange);
commandBuffer.DrawIndexedPrimitives( renderPass.DrawIndexedPrimitives(
0, 0,
0, 0,
PrimitiveCount PrimitiveCount

View File

@ -3,8 +3,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using MoonWorks.Video; using MoonWorks.Video;
using SDL2; using RefreshCS;
using SDL2_gpuCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
@ -17,9 +16,6 @@ namespace MoonWorks.Graphics
public BackendFlags Backend { get; } public BackendFlags Backend { get; }
public bool DebugMode { get; } public bool DebugMode { get; }
private uint windowFlags;
public SDL2.SDL.SDL_WindowFlags WindowFlags => (SDL2.SDL.SDL_WindowFlags) windowFlags;
// Built-in video pipeline // Built-in video pipeline
internal GraphicsPipeline VideoPipeline { get; } internal GraphicsPipeline VideoPipeline { get; }
@ -39,9 +35,9 @@ namespace MoonWorks.Graphics
private readonly HashSet<GCHandle> resources = new HashSet<GCHandle>(); private readonly HashSet<GCHandle> resources = new HashSet<GCHandle>();
private CommandBufferPool CommandBufferPool; private CommandBufferPool CommandBufferPool;
private FencePool FencePool; private FencePool FencePool;
internal RenderPassPool RenderPassPool; internal RenderPassPool RenderPassPool = new RenderPassPool();
internal ComputePassPool ComputePassPool; internal ComputePassPool ComputePassPool = new ComputePassPool();
internal CopyPassPool CopyPassPool; internal CopyPassPool CopyPassPool = new CopyPassPool();
internal unsafe GraphicsDevice( internal unsafe GraphicsDevice(
BackendFlags preferredBackends, BackendFlags preferredBackends,
@ -52,15 +48,15 @@ namespace MoonWorks.Graphics
throw new System.Exception("Could not set graphics backend!"); throw new System.Exception("Could not set graphics backend!");
} }
Handle = SDL_Gpu.SDL_GpuCreateDevice( Handle = Refresh.Refresh_CreateDevice(
(SDL_Gpu.BackendFlags) preferredBackends, (Refresh.BackendFlags) preferredBackends,
Conversions.BoolToByte(debugMode) Conversions.BoolToByte(debugMode)
); );
DebugMode = debugMode; DebugMode = debugMode;
// TODO: check for CreateDevice fail // TODO: check for CreateDevice fail
Backend = (BackendFlags) SDL_Gpu.SDL_GpuGetBackend(Handle); Backend = (BackendFlags) Refresh.Refresh_GetBackend(Handle);
// Check for replacement stock shaders // Check for replacement stock shaders
string basePath = System.AppContext.BaseDirectory; string basePath = System.AppContext.BaseDirectory;
@ -257,11 +253,11 @@ namespace MoonWorks.Graphics
} }
var success = Conversions.IntToBool( var success = Conversions.IntToBool(
SDL_Gpu.SDL_GpuClaimWindow( Refresh.Refresh_ClaimWindow(
Handle, Handle,
window.Handle, window.Handle,
(SDL_Gpu.SwapchainComposition) swapchainComposition, (Refresh.SwapchainComposition) swapchainComposition,
(SDL_Gpu.PresentMode) presentMode (Refresh.PresentMode) presentMode
) )
); );
@ -287,7 +283,7 @@ namespace MoonWorks.Graphics
{ {
if (window.Claimed) if (window.Claimed)
{ {
SDL_Gpu.SDL_GpuUnclaimWindow( Refresh.Refresh_UnclaimWindow(
Handle, Handle,
window.Handle window.Handle
); );
@ -316,11 +312,11 @@ namespace MoonWorks.Graphics
return; return;
} }
SDL_Gpu.SDL_GpuSetSwapchainParameters( Refresh.Refresh_SetSwapchainParameters(
Handle, Handle,
window.Handle, window.Handle,
(SDL_Gpu.SwapchainComposition) swapchainComposition, (Refresh.SwapchainComposition) swapchainComposition,
(SDL_Gpu.PresentMode) presentMode (Refresh.PresentMode) presentMode
); );
} }
@ -332,7 +328,7 @@ namespace MoonWorks.Graphics
public CommandBuffer AcquireCommandBuffer() public CommandBuffer AcquireCommandBuffer()
{ {
var commandBuffer = CommandBufferPool.Obtain(); var commandBuffer = CommandBufferPool.Obtain();
commandBuffer.SetHandle(SDL_Gpu.SDL_GpuAcquireCommandBuffer(Handle)); commandBuffer.SetHandle(Refresh.Refresh_AcquireCommandBuffer(Handle));
#if DEBUG #if DEBUG
commandBuffer.ResetStateTracking(); commandBuffer.ResetStateTracking();
#endif #endif
@ -351,7 +347,7 @@ namespace MoonWorks.Graphics
} }
#endif #endif
SDL_Gpu.SDL_GpuSubmit( Refresh.Refresh_Submit(
commandBuffer.Handle commandBuffer.Handle
); );
@ -368,7 +364,7 @@ namespace MoonWorks.Graphics
/// <returns></returns> /// <returns></returns>
public Fence SubmitAndAcquireFence(CommandBuffer commandBuffer) public Fence SubmitAndAcquireFence(CommandBuffer commandBuffer)
{ {
var fenceHandle = SDL_Gpu.SDL_GpuSubmitAndAcquireFence( var fenceHandle = Refresh.Refresh_SubmitAndAcquireFence(
commandBuffer.Handle commandBuffer.Handle
); );
@ -383,7 +379,7 @@ namespace MoonWorks.Graphics
/// </summary> /// </summary>
public void Wait() public void Wait()
{ {
SDL_Gpu.SDL_GpuWait(Handle); Refresh.Refresh_Wait(Handle);
} }
/// <summary> /// <summary>
@ -393,7 +389,7 @@ namespace MoonWorks.Graphics
{ {
var fenceHandle = fence.Handle; var fenceHandle = fence.Handle;
SDL_Gpu.SDL_GpuWaitForFences( Refresh.Refresh_WaitForFences(
Handle, Handle,
1, 1,
1, 1,
@ -414,7 +410,7 @@ namespace MoonWorks.Graphics
handlePtr[0] = fenceOne.Handle; handlePtr[0] = fenceOne.Handle;
handlePtr[1] = fenceTwo.Handle; handlePtr[1] = fenceTwo.Handle;
SDL_Gpu.SDL_GpuWaitForFences( Refresh.Refresh_WaitForFences(
Handle, Handle,
Conversions.BoolToInt(waitAll), Conversions.BoolToInt(waitAll),
2, 2,
@ -437,7 +433,7 @@ namespace MoonWorks.Graphics
handlePtr[1] = fenceTwo.Handle; handlePtr[1] = fenceTwo.Handle;
handlePtr[2] = fenceThree.Handle; handlePtr[2] = fenceThree.Handle;
SDL_Gpu.SDL_GpuWaitForFences( Refresh.Refresh_WaitForFences(
Handle, Handle,
Conversions.BoolToInt(waitAll), Conversions.BoolToInt(waitAll),
3, 3,
@ -462,7 +458,7 @@ namespace MoonWorks.Graphics
handlePtr[2] = fenceThree.Handle; handlePtr[2] = fenceThree.Handle;
handlePtr[3] = fenceFour.Handle; handlePtr[3] = fenceFour.Handle;
SDL_Gpu.SDL_GpuWaitForFences( Refresh.Refresh_WaitForFences(
Handle, Handle,
Conversions.BoolToInt(waitAll), Conversions.BoolToInt(waitAll),
4, 4,
@ -483,7 +479,7 @@ namespace MoonWorks.Graphics
handlePtr[i] = fences[i].Handle; handlePtr[i] = fences[i].Handle;
} }
SDL_Gpu.SDL_GpuWaitForFences( Refresh.Refresh_WaitForFences(
Handle, Handle,
Conversions.BoolToInt(waitAll), Conversions.BoolToInt(waitAll),
4, 4,
@ -497,7 +493,7 @@ namespace MoonWorks.Graphics
/// <exception cref="InvalidOperationException">Throws if the fence query indicates that the graphics device has been lost.</exception> /// <exception cref="InvalidOperationException">Throws if the fence query indicates that the graphics device has been lost.</exception>
public bool QueryFence(Fence fence) public bool QueryFence(Fence fence)
{ {
var result = SDL_Gpu.SDL_GpuQueryFence(Handle, fence.Handle); var result = Refresh.Refresh_QueryFence(Handle, fence.Handle);
if (result < 0) if (result < 0)
{ {
@ -512,7 +508,7 @@ namespace MoonWorks.Graphics
/// </summary> /// </summary>
public void ReleaseFence(Fence fence) public void ReleaseFence(Fence fence)
{ {
SDL_Gpu.SDL_GpuReleaseFence(Handle, fence.Handle); Refresh.Refresh_ReleaseFence(Handle, fence.Handle);
fence.Handle = IntPtr.Zero; fence.Handle = IntPtr.Zero;
FencePool.Return(fence); FencePool.Return(fence);
} }
@ -524,7 +520,7 @@ namespace MoonWorks.Graphics
throw new System.ArgumentException("Cannot get swapchain format of unclaimed window!"); throw new System.ArgumentException("Cannot get swapchain format of unclaimed window!");
} }
return (TextureFormat) SDL_Gpu.SDL_GpuGetSwapchainTextureFormat(Handle, window.Handle); return (TextureFormat) Refresh.Refresh_GetSwapchainTextureFormat(Handle, window.Handle);
} }
internal void AddResourceReference(GCHandle resourceReference) internal void AddResourceReference(GCHandle resourceReference)
@ -572,7 +568,7 @@ namespace MoonWorks.Graphics
} }
} }
SDL_Gpu.SDL_GpuDestroyDevice(Handle); Refresh.Refresh_DestroyDevice(Handle);
IsDisposed = true; IsDisposed = true;
} }

View File

@ -23,7 +23,7 @@ namespace MoonWorks.Graphics
{ {
var pixelData = var pixelData =
Refresh.Refresh_Image_Load( Refresh.Refresh_Image_Load(
(nint) ptr, ptr,
data.Length, data.Length,
out var w, out var w,
out var h, out var h,
@ -34,7 +34,7 @@ namespace MoonWorks.Graphics
height = (uint) h; height = (uint) h;
sizeInBytes = (uint) len; sizeInBytes = (uint) len;
return pixelData; return (nint) pixelData;
} }
} }
@ -89,7 +89,7 @@ namespace MoonWorks.Graphics
{ {
var result = var result =
Refresh.Refresh_Image_Info( Refresh.Refresh_Image_Info(
(nint) ptr, ptr,
data.Length, data.Length,
out var w, out var w,
out var h, out var h,
@ -100,7 +100,7 @@ namespace MoonWorks.Graphics
height = (uint) h; height = (uint) h;
sizeInBytes = (uint) len; sizeInBytes = (uint) len;
return Conversions.ByteToBool(result); return Conversions.IntToBool(result);
} }
} }
@ -141,9 +141,9 @@ namespace MoonWorks.Graphics
/// <summary> /// <summary>
/// Frees pixel data obtained from GetPixelData methods. /// Frees pixel data obtained from GetPixelData methods.
/// </summary> /// </summary>
public static void FreePixelData(IntPtr pixels) public unsafe static void FreePixelData(IntPtr pixels)
{ {
Refresh.Refresh_Image_Free(pixels); Refresh.Refresh_Image_Free((byte*) pixels);
} }
/// <summary> /// <summary>
@ -159,7 +159,7 @@ namespace MoonWorks.Graphics
) { ) {
var sizeInBytes = width * height * 4; var sizeInBytes = width * height * 4;
var pixelsPtr = NativeMemory.Alloc((nuint) sizeInBytes); var pixelsPtr = (byte*) NativeMemory.Alloc((nuint) sizeInBytes);
var pixelsSpan = new Span<byte>(pixelsPtr, sizeInBytes); var pixelsSpan = new Span<byte>(pixelsPtr, sizeInBytes);
transferBuffer.GetData(pixelsSpan, bufferOffsetInBytes); transferBuffer.GetData(pixelsSpan, bufferOffsetInBytes);
@ -167,7 +167,7 @@ namespace MoonWorks.Graphics
if (bgra) if (bgra)
{ {
// if data is bgra, we have to swap the R and B channels // if data is bgra, we have to swap the R and B channels
var rgbaPtr = NativeMemory.Alloc((nuint) sizeInBytes); var rgbaPtr = (byte*) NativeMemory.Alloc((nuint) sizeInBytes);
var rgbaSpan = new Span<byte>(rgbaPtr, sizeInBytes); var rgbaSpan = new Span<byte>(rgbaPtr, sizeInBytes);
for (var i = 0; i < sizeInBytes; i += 4) for (var i = 0; i < sizeInBytes; i += 4)
@ -182,7 +182,7 @@ namespace MoonWorks.Graphics
pixelsPtr = rgbaPtr; pixelsPtr = rgbaPtr;
} }
Refresh.Refresh_Image_SavePNG(path, (nint) pixelsPtr, width, height); Refresh.Refresh_Image_SavePNG(path, pixelsPtr, width, height);
NativeMemory.Free(pixelsPtr); NativeMemory.Free(pixelsPtr);
} }

View File

@ -3,14 +3,14 @@ using System.Threading;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
public abstract class SDL_GpuResource : GraphicsResource public abstract class RefreshResource : GraphicsResource
{ {
public IntPtr Handle { get => handle; internal set => handle = value; } public IntPtr Handle { get => handle; internal set => handle = value; }
private IntPtr handle; private IntPtr handle;
protected abstract Action<IntPtr, IntPtr> ReleaseFunction { get; } protected abstract Action<IntPtr, IntPtr> ReleaseFunction { get; }
protected SDL_GpuResource(GraphicsDevice device) : base(device) protected RefreshResource(GraphicsDevice device) : base(device)
{ {
} }

View File

@ -1,10 +1,10 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
// Recreate certain types in here so we can hide the SDL_GpuCS namespace // Recreate certain types in here so we can hide the Refresh namespace
public enum PrimitiveType public enum PrimitiveType
{ {
@ -334,9 +334,9 @@ public struct DepthStencilValue
} }
// FIXME: can we do an unsafe cast somehow? // FIXME: can we do an unsafe cast somehow?
public SDL_Gpu.DepthStencilValue ToSDL() public Refresh.DepthStencilValue ToRefresh()
{ {
return new SDL_Gpu.DepthStencilValue return new Refresh.DepthStencilValue
{ {
Depth = Depth, Depth = Depth,
Stencil = Stencil Stencil = Stencil
@ -369,9 +369,9 @@ public struct Rect
} }
// FIXME: can we do an unsafe cast somehow? // FIXME: can we do an unsafe cast somehow?
public SDL_Gpu.Rect ToSDL() public Refresh.Rect ToRefresh()
{ {
return new SDL_Gpu.Rect return new Refresh.Rect
{ {
X = X, X = X,
Y = Y, Y = Y,
@ -421,9 +421,9 @@ public struct Viewport
MaxDepth = maxDepth; MaxDepth = maxDepth;
} }
public SDL_Gpu.Viewport ToSDL() public Refresh.Viewport ToRefresh()
{ {
return new SDL_Gpu.Viewport return new Refresh.Viewport
{ {
X = X, X = X,
Y = Y, Y = Y,
@ -452,13 +452,13 @@ public struct VertexBinding
}; };
} }
public SDL_Gpu.VertexBinding ToSDL() public Refresh.VertexBinding ToRefresh()
{ {
return new SDL_Gpu.VertexBinding return new Refresh.VertexBinding
{ {
Binding = Binding, Binding = Binding,
Stride = Stride, Stride = Stride,
InputRate = (SDL_Gpu.VertexInputRate) InputRate InputRate = (Refresh.VertexInputRate) InputRate
}; };
} }
} }
@ -471,13 +471,13 @@ public struct VertexAttribute
public VertexElementFormat Format; public VertexElementFormat Format;
public uint Offset; public uint Offset;
public SDL_Gpu.VertexAttribute ToSDL() public Refresh.VertexAttribute ToRefresh()
{ {
return new SDL_Gpu.VertexAttribute return new Refresh.VertexAttribute
{ {
Location = Location, Location = Location,
Binding = Binding, Binding = Binding,
Format = (SDL_Gpu.VertexElementFormat) Format, Format = (Refresh.VertexElementFormat) Format,
Offset = Offset Offset = Offset
}; };
} }
@ -491,14 +491,14 @@ public struct StencilOpState
public StencilOp DepthFailOp; public StencilOp DepthFailOp;
public CompareOp CompareOp; public CompareOp CompareOp;
public SDL_Gpu.StencilOpState ToSDL() public Refresh.StencilOpState ToRefresh()
{ {
return new SDL_Gpu.StencilOpState return new Refresh.StencilOpState
{ {
FailOp = (SDL_Gpu.StencilOp) FailOp, FailOp = (Refresh.StencilOp) FailOp,
PassOp = (SDL_Gpu.StencilOp) PassOp, PassOp = (Refresh.StencilOp) PassOp,
DepthFailOp = (SDL_Gpu.StencilOp) DepthFailOp, DepthFailOp = (Refresh.StencilOp) DepthFailOp,
CompareOp = (SDL_Gpu.CompareOp) CompareOp CompareOp = (Refresh.CompareOp) CompareOp
}; };
} }
} }
@ -574,20 +574,20 @@ public struct ColorAttachmentInfo
Cycle = cycle; Cycle = cycle;
} }
public SDL_Gpu.ColorAttachmentInfo ToSDL() public Refresh.ColorAttachmentInfo ToRefresh()
{ {
return new SDL_Gpu.ColorAttachmentInfo return new Refresh.ColorAttachmentInfo
{ {
TextureSlice = TextureSlice.ToSDL(), TextureSlice = TextureSlice.ToRefresh(),
ClearColor = new SDL_Gpu.Color ClearColor = new Refresh.Color
{ {
R = ClearColor.R / 255f, R = ClearColor.R / 255f,
G = ClearColor.G / 255f, G = ClearColor.G / 255f,
B = ClearColor.B / 255f, B = ClearColor.B / 255f,
A = ClearColor.A / 255f A = ClearColor.A / 255f
}, },
LoadOp = (SDL_Gpu.LoadOp) LoadOp, LoadOp = (Refresh.LoadOp) LoadOp,
StoreOp = (SDL_Gpu.StoreOp) StoreOp, StoreOp = (Refresh.StoreOp) StoreOp,
Cycle = Conversions.BoolToInt(Cycle) Cycle = Conversions.BoolToInt(Cycle)
}; };
} }
@ -720,16 +720,16 @@ public struct DepthStencilAttachmentInfo
Cycle = cycle; Cycle = cycle;
} }
public SDL_Gpu.DepthStencilAttachmentInfo ToSDL() public Refresh.DepthStencilAttachmentInfo ToRefresh()
{ {
return new SDL_Gpu.DepthStencilAttachmentInfo return new Refresh.DepthStencilAttachmentInfo
{ {
TextureSlice = TextureSlice.ToSDL(), TextureSlice = TextureSlice.ToRefresh(),
DepthStencilClearValue = DepthStencilClearValue.ToSDL(), DepthStencilClearValue = DepthStencilClearValue.ToRefresh(),
LoadOp = (SDL_Gpu.LoadOp) LoadOp, LoadOp = (Refresh.LoadOp) LoadOp,
StoreOp = (SDL_Gpu.StoreOp) StoreOp, StoreOp = (Refresh.StoreOp) StoreOp,
StencilLoadOp = (SDL_Gpu.LoadOp) StencilLoadOp, StencilLoadOp = (Refresh.LoadOp) StencilLoadOp,
StencilStoreOp = (SDL_Gpu.StoreOp) StencilStoreOp, StencilStoreOp = (Refresh.StoreOp) StencilStoreOp,
Cycle = Conversions.BoolToInt(Cycle) Cycle = Conversions.BoolToInt(Cycle)
}; };
} }
@ -788,9 +788,9 @@ public struct BufferCopy
Size = size; Size = size;
} }
public SDL_Gpu.BufferCopy ToSDL() public Refresh.BufferCopy ToRefresh()
{ {
return new SDL_Gpu.BufferCopy return new Refresh.BufferCopy
{ {
SourceOffset = SrcOffset, SourceOffset = SrcOffset,
DestinationOffset = DstOffset, DestinationOffset = DstOffset,
@ -811,9 +811,9 @@ public readonly record struct BufferImageCopy(
uint BufferStride, uint BufferStride,
uint BufferImageHeight uint BufferImageHeight
) { ) {
public SDL_Gpu.BufferImageCopy ToSDL() public Refresh.BufferImageCopy ToRefresh()
{ {
return new SDL_Gpu.BufferImageCopy return new Refresh.BufferImageCopy
{ {
BufferOffset = BufferOffset, BufferOffset = BufferOffset,
BufferStride = BufferStride, BufferStride = BufferStride,
@ -828,9 +828,9 @@ public readonly record struct GraphicsPipelineResourceInfo(
uint StorageTextureCount, uint StorageTextureCount,
uint UniformBufferCount uint UniformBufferCount
) { ) {
public SDL_Gpu.GraphicsPipelineResourceInfo ToSDL() public Refresh.GraphicsPipelineResourceInfo ToRefresh()
{ {
return new SDL_Gpu.GraphicsPipelineResourceInfo return new Refresh.GraphicsPipelineResourceInfo
{ {
SamplerCount = SamplerCount, SamplerCount = SamplerCount,
StorageBufferCount = StorageBufferCount, StorageBufferCount = StorageBufferCount,
@ -847,9 +847,9 @@ public readonly record struct ComputePipelineResourceInfo(
uint ReadWriteStorageBufferCount, uint ReadWriteStorageBufferCount,
uint UniformBufferCount uint UniformBufferCount
) { ) {
public SDL_Gpu.ComputePipelineResourceInfo ToSDL() public Refresh.ComputePipelineResourceInfo ToRefresh()
{ {
return new SDL_Gpu.ComputePipelineResourceInfo return new Refresh.ComputePipelineResourceInfo
{ {
ReadOnlyStorageTextureCount = ReadOnlyStorageTextureCount, ReadOnlyStorageTextureCount = ReadOnlyStorageTextureCount,
ReadOnlyStorageBufferCount = ReadOnlyStorageBufferCount, ReadOnlyStorageBufferCount = ReadOnlyStorageBufferCount,
@ -867,9 +867,9 @@ public readonly record struct BufferBinding(
GpuBuffer Buffer, GpuBuffer Buffer,
uint Offset uint Offset
) { ) {
public SDL_Gpu.BufferBinding ToSDL() public Refresh.BufferBinding ToRefresh()
{ {
return new SDL_Gpu.BufferBinding return new Refresh.BufferBinding
{ {
Buffer = Buffer.Handle, Buffer = Buffer.Handle,
Offset = Offset Offset = Offset
@ -884,9 +884,9 @@ public readonly record struct TextureSamplerBinding(
Texture Texture, Texture Texture,
Sampler Sampler Sampler Sampler
) { ) {
public SDL_Gpu.TextureSamplerBinding ToSDL() public Refresh.TextureSamplerBinding ToRefresh()
{ {
return new SDL_Gpu.TextureSamplerBinding return new Refresh.TextureSamplerBinding
{ {
Texture = Texture.Handle, Texture = Texture.Handle,
Sampler = Sampler.Handle Sampler = Sampler.Handle
@ -898,9 +898,9 @@ public readonly record struct StorageBufferReadWriteBinding(
GpuBuffer Buffer, GpuBuffer Buffer,
bool cycle bool cycle
) { ) {
public SDL_Gpu.StorageBufferReadWriteBinding ToSDL() public Refresh.StorageBufferReadWriteBinding ToRefresh()
{ {
return new SDL_Gpu.StorageBufferReadWriteBinding return new Refresh.StorageBufferReadWriteBinding
{ {
Buffer = Buffer.Handle, Buffer = Buffer.Handle,
Cycle = Conversions.BoolToInt(cycle) Cycle = Conversions.BoolToInt(cycle)
@ -912,11 +912,11 @@ public readonly record struct StorageTextureReadWriteBinding(
in TextureSlice TextureSlice, in TextureSlice TextureSlice,
bool cycle bool cycle
) { ) {
public SDL_Gpu.StorageTextureReadWriteBinding ToSDL() public Refresh.StorageTextureReadWriteBinding ToRefresh()
{ {
return new SDL_Gpu.StorageTextureReadWriteBinding return new Refresh.StorageTextureReadWriteBinding
{ {
TextureSlice = TextureSlice.ToSDL(), TextureSlice = TextureSlice.ToRefresh(),
Cycle = Conversions.BoolToInt(cycle) Cycle = Conversions.BoolToInt(cycle)
}; };
} }

View File

@ -1,6 +1,6 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
/// <summary> /// <summary>
@ -59,7 +59,7 @@ public class RenderPass
} }
#endif #endif
SDL_Gpu.SDL_GpuBindGraphicsPipeline( Refresh.Refresh_BindGraphicsPipeline(
Handle, Handle,
graphicsPipeline.Handle graphicsPipeline.Handle
); );
@ -78,9 +78,9 @@ public class RenderPass
AssertRenderPassActive(); AssertRenderPassActive();
#endif #endif
SDL_Gpu.SDL_GpuSetViewport( Refresh.Refresh_SetViewport(
Handle, Handle,
viewport.ToSDL() viewport.ToRefresh()
); );
} }
@ -98,9 +98,9 @@ public class RenderPass
} }
#endif #endif
SDL_Gpu.SDL_GpuSetScissor( Refresh.Refresh_SetScissor(
Handle, Handle,
scissor.ToSDL() scissor.ToRefresh()
); );
} }
@ -117,9 +117,9 @@ public class RenderPass
AssertGraphicsPipelineBound(); AssertGraphicsPipelineBound();
#endif #endif
var sdlBufferBinding = bufferBinding.ToSDL(); var sdlBufferBinding = bufferBinding.ToRefresh();
SDL_Gpu.SDL_GpuBindVertexBuffers( Refresh.Refresh_BindVertexBuffers(
Handle, Handle,
firstBinding, firstBinding,
&sdlBufferBinding, &sdlBufferBinding,
@ -142,10 +142,10 @@ public class RenderPass
AssertGraphicsPipelineBound(); AssertGraphicsPipelineBound();
#endif #endif
SDL_Gpu.SDL_GpuBindIndexBuffer( Refresh.Refresh_BindIndexBuffer(
Handle, Handle,
bufferBinding.ToSDL(), bufferBinding.ToRefresh(),
(SDL_Gpu.IndexElementSize) indexElementSize (Refresh.IndexElementSize) indexElementSize
); );
} }
@ -163,9 +163,9 @@ public class RenderPass
AssertTextureHasSamplerFlag(textureSamplerBinding.Texture); AssertTextureHasSamplerFlag(textureSamplerBinding.Texture);
#endif #endif
var sdlTextureSamplerBinding = textureSamplerBinding.ToSDL(); var sdlTextureSamplerBinding = textureSamplerBinding.ToRefresh();
SDL_Gpu.SDL_GpuBindVertexSamplers( Refresh.Refresh_BindVertexSamplers(
Handle, Handle,
slot, slot,
&sdlTextureSamplerBinding, &sdlTextureSamplerBinding,
@ -183,9 +183,9 @@ public class RenderPass
AssertTextureHasGraphicsStorageFlag(textureSlice.Texture); AssertTextureHasGraphicsStorageFlag(textureSlice.Texture);
#endif #endif
var sdlTextureSlice = textureSlice.ToSDL(); var sdlTextureSlice = textureSlice.ToRefresh();
SDL_Gpu.SDL_GpuBindVertexStorageTextures( Refresh.Refresh_BindVertexStorageTextures(
Handle, Handle,
slot, slot,
&sdlTextureSlice, &sdlTextureSlice,
@ -205,7 +205,7 @@ public class RenderPass
var bufferHandle = buffer.Handle; var bufferHandle = buffer.Handle;
SDL_Gpu.SDL_GpuBindVertexStorageBuffers( Refresh.Refresh_BindVertexStorageBuffers(
Handle, Handle,
slot, slot,
&bufferHandle, &bufferHandle,
@ -223,9 +223,9 @@ public class RenderPass
AssertTextureHasSamplerFlag(textureSamplerBinding.Texture); AssertTextureHasSamplerFlag(textureSamplerBinding.Texture);
#endif #endif
var sdlTextureSamplerBinding = textureSamplerBinding.ToSDL(); var sdlTextureSamplerBinding = textureSamplerBinding.ToRefresh();
SDL_Gpu.SDL_GpuBindFragmentSamplers( Refresh.Refresh_BindFragmentSamplers(
Handle, Handle,
slot, slot,
&sdlTextureSamplerBinding, &sdlTextureSamplerBinding,
@ -243,9 +243,9 @@ public class RenderPass
AssertTextureHasGraphicsStorageFlag(textureSlice.Texture); AssertTextureHasGraphicsStorageFlag(textureSlice.Texture);
#endif #endif
var sdlTextureSlice = textureSlice.ToSDL(); var sdlTextureSlice = textureSlice.ToRefresh();
SDL_Gpu.SDL_GpuBindFragmentStorageTextures( Refresh.Refresh_BindFragmentStorageTextures(
Handle, Handle,
slot, slot,
&sdlTextureSlice, &sdlTextureSlice,
@ -265,7 +265,7 @@ public class RenderPass
var bufferHandle = buffer.Handle; var bufferHandle = buffer.Handle;
SDL_Gpu.SDL_GpuBindFragmentStorageBuffers( Refresh.Refresh_BindFragmentStorageBuffers(
Handle, Handle,
slot, slot,
&bufferHandle, &bufferHandle,
@ -287,7 +287,7 @@ public class RenderPass
} }
#endif #endif
SDL_Gpu.SDL_GpuPushVertexUniformData( Refresh.Refresh_PushVertexUniformData(
Handle, Handle,
slot, slot,
(nint) uniformsPtr, (nint) uniformsPtr,
@ -320,7 +320,7 @@ public class RenderPass
} }
#endif #endif
SDL_Gpu.SDL_GpuPushFragmentUniformData( Refresh.Refresh_PushFragmentUniformData(
Handle, Handle,
slot, slot,
(nint) uniformsPtr, (nint) uniformsPtr,
@ -356,7 +356,7 @@ public class RenderPass
AssertGraphicsPipelineBound(); AssertGraphicsPipelineBound();
#endif #endif
SDL_Gpu.SDL_GpuDrawIndexedPrimitives( Refresh.Refresh_DrawIndexedPrimitives(
Handle, Handle,
baseVertex, baseVertex,
startIndex, startIndex,
@ -380,7 +380,7 @@ public class RenderPass
AssertGraphicsPipelineBound(); AssertGraphicsPipelineBound();
#endif #endif
SDL_Gpu.SDL_GpuDrawPrimitives( Refresh.Refresh_DrawPrimitives(
Handle, Handle,
vertexStart, vertexStart,
primitiveCount primitiveCount
@ -405,7 +405,7 @@ public class RenderPass
AssertGraphicsPipelineBound(); AssertGraphicsPipelineBound();
#endif #endif
SDL_Gpu.SDL_GpuDrawPrimitivesIndirect( Refresh.Refresh_DrawPrimitivesIndirect(
Handle, Handle,
buffer.Handle, buffer.Handle,
offsetInBytes, offsetInBytes,
@ -432,7 +432,7 @@ public class RenderPass
AssertGraphicsPipelineBound(); AssertGraphicsPipelineBound();
#endif #endif
SDL_Gpu.SDL_GpuDrawIndexedPrimitivesIndirect( Refresh.Refresh_DrawIndexedPrimitivesIndirect(
Handle, Handle,
buffer.Handle, buffer.Handle,
offsetInBytes, offsetInBytes,

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
using System; using System;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
@ -6,9 +6,9 @@ namespace MoonWorks.Graphics
/// <summary> /// <summary>
/// Compute pipelines perform arbitrary parallel processing on input data. /// Compute pipelines perform arbitrary parallel processing on input data.
/// </summary> /// </summary>
public class ComputePipeline : SDL_GpuResource public class ComputePipeline : RefreshResource
{ {
protected override Action<IntPtr, IntPtr> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseComputePipeline; protected override Action<IntPtr, IntPtr> ReleaseFunction => Refresh.Refresh_ReleaseComputePipeline;
public ComputePipelineResourceInfo ResourceInfo { get; } public ComputePipelineResourceInfo ResourceInfo { get; }
@ -18,13 +18,13 @@ namespace MoonWorks.Graphics
ComputePipelineResourceInfo resourceInfo ComputePipelineResourceInfo resourceInfo
) : base(device) ) : base(device)
{ {
var sdlComputePipelineCreateInfo = new SDL_Gpu.ComputePipelineCreateInfo var sdlComputePipelineCreateInfo = new Refresh.ComputePipelineCreateInfo
{ {
ComputeShader = computeShader.Handle, ComputeShader = computeShader.Handle,
PipelineResourceInfo = resourceInfo.ToSDL() PipelineResourceInfo = resourceInfo.ToRefresh()
}; };
Handle = SDL_Gpu.SDL_GpuCreateComputePipeline( Handle = Refresh.Refresh_CreateComputePipeline(
device.Handle, device.Handle,
sdlComputePipelineCreateInfo sdlComputePipelineCreateInfo
); );

View File

@ -1,5 +1,5 @@
using System; using System;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
@ -10,9 +10,9 @@ namespace MoonWorks.Graphics;
/// The Fence object itself is basically just a wrapper for the Refresh_Fence. <br/> /// The Fence object itself is basically just a wrapper for the Refresh_Fence. <br/>
/// The internal handle is replaced so that we can pool Fence objects to manage garbage. /// The internal handle is replaced so that we can pool Fence objects to manage garbage.
/// </summary> /// </summary>
public class Fence : SDL_GpuResource public class Fence : RefreshResource
{ {
protected override Action<nint, nint> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseFence; protected override Action<nint, nint> ReleaseFunction => Refresh.Refresh_ReleaseFence;
internal Fence(GraphicsDevice device) : base(device) internal Fence(GraphicsDevice device) : base(device)
{ {

View File

@ -1,15 +1,15 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
/// <summary> /// <summary>
/// GpuBuffers are generic data containers that can be used by the GPU. /// GpuBuffers are generic data containers that can be used by the GPU.
/// </summary> /// </summary>
public class GpuBuffer : SDL_GpuResource public class GpuBuffer : RefreshResource
{ {
protected override Action<IntPtr, IntPtr> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseBuffer; protected override Action<IntPtr, IntPtr> ReleaseFunction => Refresh.Refresh_ReleaseBuffer;
public BufferUsageFlags UsageFlags { get; } public BufferUsageFlags UsageFlags { get; }
@ -27,7 +27,7 @@ public class GpuBuffer : SDL_GpuResource
{ {
if (Device.DebugMode) if (Device.DebugMode)
{ {
SDL_Gpu.SDL_GpuSetBufferName( Refresh.Refresh_SetBufferName(
Device.Handle, Device.Handle,
Handle, Handle,
value value
@ -71,9 +71,9 @@ public class GpuBuffer : SDL_GpuResource
uint sizeInBytes uint sizeInBytes
) : base(device) ) : base(device)
{ {
Handle = SDL_Gpu.SDL_GpuCreateBuffer( Handle = Refresh.Refresh_CreateBuffer(
device.Handle, device.Handle,
(SDL_Gpu.BufferUsageFlags) usageFlags, (Refresh.BufferUsageFlags) usageFlags,
sizeInBytes sizeInBytes
); );
UsageFlags = usageFlags; UsageFlags = usageFlags;

View File

@ -1,6 +1,6 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
@ -8,9 +8,9 @@ namespace MoonWorks.Graphics
/// Graphics pipelines encapsulate all of the render state in a single object. <br/> /// Graphics pipelines encapsulate all of the render state in a single object. <br/>
/// These pipelines are bound before draw calls are issued. /// These pipelines are bound before draw calls are issued.
/// </summary> /// </summary>
public class GraphicsPipeline : SDL_GpuResource public class GraphicsPipeline : RefreshResource
{ {
protected override Action<IntPtr, IntPtr> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseGraphicsPipeline; protected override Action<IntPtr, IntPtr> ReleaseFunction => Refresh.Refresh_ReleaseGraphicsPipeline;
public GraphicsPipelineResourceInfo VertexShaderResourceInfo { get; } public GraphicsPipelineResourceInfo VertexShaderResourceInfo { get; }
public GraphicsPipelineResourceInfo FragmentShaderResourceInfo { get; } public GraphicsPipelineResourceInfo FragmentShaderResourceInfo { get; }
@ -25,34 +25,34 @@ namespace MoonWorks.Graphics
in GraphicsPipelineCreateInfo graphicsPipelineCreateInfo in GraphicsPipelineCreateInfo graphicsPipelineCreateInfo
) : base(device) ) : base(device)
{ {
SDL_Gpu.GraphicsPipelineCreateInfo sdlGraphicsPipelineCreateInfo; Refresh.GraphicsPipelineCreateInfo sdlGraphicsPipelineCreateInfo;
var vertexAttributes = (SDL_Gpu.VertexAttribute*) NativeMemory.Alloc( var vertexAttributes = (Refresh.VertexAttribute*) NativeMemory.Alloc(
(nuint) (graphicsPipelineCreateInfo.VertexInputState.VertexAttributes.Length * Marshal.SizeOf<SDL_Gpu.VertexAttribute>()) (nuint) (graphicsPipelineCreateInfo.VertexInputState.VertexAttributes.Length * Marshal.SizeOf<Refresh.VertexAttribute>())
); );
for (var i = 0; i < graphicsPipelineCreateInfo.VertexInputState.VertexAttributes.Length; i += 1) for (var i = 0; i < graphicsPipelineCreateInfo.VertexInputState.VertexAttributes.Length; i += 1)
{ {
vertexAttributes[i] = graphicsPipelineCreateInfo.VertexInputState.VertexAttributes[i].ToSDL(); vertexAttributes[i] = graphicsPipelineCreateInfo.VertexInputState.VertexAttributes[i].ToRefresh();
} }
var vertexBindings = (SDL_Gpu.VertexBinding*) NativeMemory.Alloc( var vertexBindings = (Refresh.VertexBinding*) NativeMemory.Alloc(
(nuint) (graphicsPipelineCreateInfo.VertexInputState.VertexBindings.Length * Marshal.SizeOf<SDL_Gpu.VertexBinding>()) (nuint) (graphicsPipelineCreateInfo.VertexInputState.VertexBindings.Length * Marshal.SizeOf<Refresh.VertexBinding>())
); );
for (var i = 0; i < graphicsPipelineCreateInfo.VertexInputState.VertexBindings.Length; i += 1) for (var i = 0; i < graphicsPipelineCreateInfo.VertexInputState.VertexBindings.Length; i += 1)
{ {
vertexBindings[i] = graphicsPipelineCreateInfo.VertexInputState.VertexBindings[i].ToSDL(); vertexBindings[i] = graphicsPipelineCreateInfo.VertexInputState.VertexBindings[i].ToRefresh();
} }
var colorAttachmentDescriptions = stackalloc SDL_Gpu.ColorAttachmentDescription[ var colorAttachmentDescriptions = stackalloc Refresh.ColorAttachmentDescription[
graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions.Length graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions.Length
]; ];
for (var i = 0; i < graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions.Length; i += 1) for (var i = 0; i < graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions.Length; i += 1)
{ {
colorAttachmentDescriptions[i].Format = (SDL_Gpu.TextureFormat) graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions[i].Format; colorAttachmentDescriptions[i].Format = (Refresh.TextureFormat) graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions[i].Format;
colorAttachmentDescriptions[i].BlendState = graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions[i].BlendState.ToSDL(); colorAttachmentDescriptions[i].BlendState = graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions[i].BlendState.ToRefresh();
} }
sdlGraphicsPipelineCreateInfo.VertexShader = graphicsPipelineCreateInfo.VertexShader.Handle; sdlGraphicsPipelineCreateInfo.VertexShader = graphicsPipelineCreateInfo.VertexShader.Handle;
@ -63,26 +63,26 @@ namespace MoonWorks.Graphics
sdlGraphicsPipelineCreateInfo.VertexInputState.VertexBindings = vertexBindings; sdlGraphicsPipelineCreateInfo.VertexInputState.VertexBindings = vertexBindings;
sdlGraphicsPipelineCreateInfo.VertexInputState.VertexBindingCount = (uint) graphicsPipelineCreateInfo.VertexInputState.VertexBindings.Length; sdlGraphicsPipelineCreateInfo.VertexInputState.VertexBindingCount = (uint) graphicsPipelineCreateInfo.VertexInputState.VertexBindings.Length;
sdlGraphicsPipelineCreateInfo.PrimitiveType = (SDL_Gpu.PrimitiveType) graphicsPipelineCreateInfo.PrimitiveType; sdlGraphicsPipelineCreateInfo.PrimitiveType = (Refresh.PrimitiveType) graphicsPipelineCreateInfo.PrimitiveType;
sdlGraphicsPipelineCreateInfo.RasterizerState = graphicsPipelineCreateInfo.RasterizerState.ToSDL(); sdlGraphicsPipelineCreateInfo.RasterizerState = graphicsPipelineCreateInfo.RasterizerState.ToRefresh();
sdlGraphicsPipelineCreateInfo.MultisampleState = graphicsPipelineCreateInfo.MultisampleState.ToSDL(); sdlGraphicsPipelineCreateInfo.MultisampleState = graphicsPipelineCreateInfo.MultisampleState.ToRefresh();
sdlGraphicsPipelineCreateInfo.DepthStencilState = graphicsPipelineCreateInfo.DepthStencilState.ToSDL(); sdlGraphicsPipelineCreateInfo.DepthStencilState = graphicsPipelineCreateInfo.DepthStencilState.ToRefresh();
sdlGraphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentCount = (uint) graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions.Length; sdlGraphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentCount = (uint) graphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions.Length;
sdlGraphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions = colorAttachmentDescriptions; sdlGraphicsPipelineCreateInfo.AttachmentInfo.ColorAttachmentDescriptions = colorAttachmentDescriptions;
sdlGraphicsPipelineCreateInfo.AttachmentInfo.DepthStencilFormat = (SDL_Gpu.TextureFormat) graphicsPipelineCreateInfo.AttachmentInfo.DepthStencilFormat; sdlGraphicsPipelineCreateInfo.AttachmentInfo.DepthStencilFormat = (Refresh.TextureFormat) graphicsPipelineCreateInfo.AttachmentInfo.DepthStencilFormat;
sdlGraphicsPipelineCreateInfo.AttachmentInfo.HasDepthStencilAttachment = Conversions.BoolToInt(graphicsPipelineCreateInfo.AttachmentInfo.HasDepthStencilAttachment); sdlGraphicsPipelineCreateInfo.AttachmentInfo.HasDepthStencilAttachment = Conversions.BoolToInt(graphicsPipelineCreateInfo.AttachmentInfo.HasDepthStencilAttachment);
sdlGraphicsPipelineCreateInfo.VertexResourceInfo = graphicsPipelineCreateInfo.VertexShaderResourceInfo.ToSDL(); sdlGraphicsPipelineCreateInfo.VertexResourceInfo = graphicsPipelineCreateInfo.VertexShaderResourceInfo.ToRefresh();
sdlGraphicsPipelineCreateInfo.FragmentResourceInfo = graphicsPipelineCreateInfo.FragmentShaderResourceInfo.ToSDL(); sdlGraphicsPipelineCreateInfo.FragmentResourceInfo = graphicsPipelineCreateInfo.FragmentShaderResourceInfo.ToRefresh();
sdlGraphicsPipelineCreateInfo.BlendConstants[0] = graphicsPipelineCreateInfo.BlendConstants.R; sdlGraphicsPipelineCreateInfo.BlendConstants[0] = graphicsPipelineCreateInfo.BlendConstants.R;
sdlGraphicsPipelineCreateInfo.BlendConstants[1] = graphicsPipelineCreateInfo.BlendConstants.G; sdlGraphicsPipelineCreateInfo.BlendConstants[1] = graphicsPipelineCreateInfo.BlendConstants.G;
sdlGraphicsPipelineCreateInfo.BlendConstants[2] = graphicsPipelineCreateInfo.BlendConstants.B; sdlGraphicsPipelineCreateInfo.BlendConstants[2] = graphicsPipelineCreateInfo.BlendConstants.B;
sdlGraphicsPipelineCreateInfo.BlendConstants[3] = graphicsPipelineCreateInfo.BlendConstants.A; sdlGraphicsPipelineCreateInfo.BlendConstants[3] = graphicsPipelineCreateInfo.BlendConstants.A;
Handle = SDL_Gpu.SDL_GpuCreateGraphicsPipeline(device.Handle, sdlGraphicsPipelineCreateInfo); Handle = Refresh.Refresh_CreateGraphicsPipeline(device.Handle, sdlGraphicsPipelineCreateInfo);
if (Handle == IntPtr.Zero) if (Handle == IntPtr.Zero)
{ {
throw new Exception("Could not create graphics pipeline!"); throw new Exception("Could not create graphics pipeline!");

View File

@ -1,23 +1,23 @@
using System; using System;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
/// <summary> /// <summary>
/// A sampler specifies how a texture will be sampled in a shader. /// A sampler specifies how a texture will be sampled in a shader.
/// </summary> /// </summary>
public class Sampler : SDL_GpuResource public class Sampler : RefreshResource
{ {
protected override Action<IntPtr, IntPtr> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseSampler; protected override Action<IntPtr, IntPtr> ReleaseFunction => Refresh.Refresh_ReleaseSampler;
public Sampler( public Sampler(
GraphicsDevice device, GraphicsDevice device,
in SamplerCreateInfo samplerCreateInfo in SamplerCreateInfo samplerCreateInfo
) : base(device) ) : base(device)
{ {
Handle = SDL_Gpu.SDL_GpuCreateSampler( Handle = Refresh.Refresh_CreateSampler(
device.Handle, device.Handle,
samplerCreateInfo.ToSDL() samplerCreateInfo.ToRefresh()
); );
} }
} }

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
using System; using System;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -8,9 +8,9 @@ namespace MoonWorks.Graphics
/// <summary> /// <summary>
/// Shader modules expect input in Refresh bytecode format. /// Shader modules expect input in Refresh bytecode format.
/// </summary> /// </summary>
public class Shader : SDL_GpuResource public class Shader : RefreshResource
{ {
protected override Action<IntPtr, IntPtr> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseShader; protected override Action<IntPtr, IntPtr> ReleaseFunction => Refresh.Refresh_ReleaseShader;
public unsafe Shader( public unsafe Shader(
GraphicsDevice device, GraphicsDevice device,
@ -46,14 +46,14 @@ namespace MoonWorks.Graphics
var bytecodeSpan = new Span<byte>(bytecodeBuffer, (int) stream.Length); var bytecodeSpan = new Span<byte>(bytecodeBuffer, (int) stream.Length);
stream.ReadExactly(bytecodeSpan); stream.ReadExactly(bytecodeSpan);
SDL_Gpu.ShaderCreateInfo shaderCreateInfo; Refresh.ShaderCreateInfo shaderCreateInfo;
shaderCreateInfo.CodeSize = (nuint) stream.Length; shaderCreateInfo.CodeSize = (nuint) stream.Length;
shaderCreateInfo.Code = (byte*) bytecodeBuffer; shaderCreateInfo.Code = (byte*) bytecodeBuffer;
shaderCreateInfo.EntryPointName = entryPointName; shaderCreateInfo.EntryPointName = entryPointName;
shaderCreateInfo.Stage = (SDL_Gpu.ShaderStage) shaderStage; shaderCreateInfo.Stage = (Refresh.ShaderStage) shaderStage;
shaderCreateInfo.Format = (SDL_Gpu.ShaderFormat) shaderFormat; shaderCreateInfo.Format = (Refresh.ShaderFormat) shaderFormat;
var shaderModule = SDL_Gpu.SDL_GpuCreateShader( var shaderModule = Refresh.Refresh_CreateShader(
device.Handle, device.Handle,
shaderCreateInfo shaderCreateInfo
); );

View File

@ -1,13 +1,12 @@
using System; using System;
using System.IO; using RefreshCS;
using SDL2_gpuCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
/// <summary> /// <summary>
/// A container for pixel data. /// A container for pixel data.
/// </summary> /// </summary>
public class Texture : SDL_GpuResource public class Texture : RefreshResource
{ {
public uint Width { get; internal set; } public uint Width { get; internal set; }
public uint Height { get; internal set; } public uint Height { get; internal set; }
@ -29,7 +28,7 @@ namespace MoonWorks.Graphics
{ {
if (Device.DebugMode) if (Device.DebugMode)
{ {
SDL_Gpu.SDL_GpuSetTextureName( Refresh.Refresh_SetTextureName(
Device.Handle, Device.Handle,
Handle, Handle,
value value
@ -41,7 +40,7 @@ namespace MoonWorks.Graphics
} }
// FIXME: this allocates a delegate instance // FIXME: this allocates a delegate instance
protected override Action<IntPtr, IntPtr> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseTexture; protected override Action<IntPtr, IntPtr> ReleaseFunction => Refresh.Refresh_ReleaseTexture;
/// <summary> /// <summary>
/// Creates a 2D texture. /// Creates a 2D texture.
@ -179,9 +178,9 @@ namespace MoonWorks.Graphics
in TextureCreateInfo textureCreateInfo in TextureCreateInfo textureCreateInfo
) : base(device) ) : base(device)
{ {
Handle = SDL_Gpu.SDL_GpuCreateTexture( Handle = Refresh.Refresh_CreateTexture(
device.Handle, device.Handle,
textureCreateInfo.ToSDL() textureCreateInfo.ToRefresh()
); );
Format = textureCreateInfo.Format; Format = textureCreateInfo.Format;

View File

@ -1,12 +1,12 @@
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
public unsafe class TransferBuffer : SDL_GpuResource public unsafe class TransferBuffer : RefreshResource
{ {
protected override Action<IntPtr, IntPtr> ReleaseFunction => SDL_Gpu.SDL_GpuReleaseTransferBuffer; protected override Action<IntPtr, IntPtr> ReleaseFunction => Refresh.Refresh_ReleaseTransferBuffer;
/// <summary> /// <summary>
/// Size in bytes. /// Size in bytes.
@ -48,10 +48,10 @@ namespace MoonWorks.Graphics
uint sizeInBytes uint sizeInBytes
) : base(device) ) : base(device)
{ {
Handle = SDL_Gpu.SDL_GpuCreateTransferBuffer( Handle = Refresh.Refresh_CreateTransferBuffer(
device.Handle, device.Handle,
(SDL_Gpu.TransferUsage) usage, (Refresh.TransferUsage) usage,
(SDL_Gpu.TransferBufferMapFlags) mapFlags, (Refresh.TransferBufferMapFlags) mapFlags,
sizeInBytes sizeInBytes
); );
Size = sizeInBytes; Size = sizeInBytes;
@ -82,11 +82,11 @@ namespace MoonWorks.Graphics
fixed (T* dataPtr = data) fixed (T* dataPtr = data)
{ {
SDL_Gpu.SDL_GpuSetTransferData( Refresh.Refresh_SetTransferData(
Device.Handle, Device.Handle,
(nint) dataPtr, (nint) dataPtr,
Handle, Handle,
new SDL_Gpu.BufferCopy new Refresh.BufferCopy
{ {
SourceOffset = 0, SourceOffset = 0,
DestinationOffset = bufferOffsetInBytes, DestinationOffset = bufferOffsetInBytes,
@ -134,11 +134,11 @@ namespace MoonWorks.Graphics
fixed (T* dataPtr = data) fixed (T* dataPtr = data)
{ {
SDL_Gpu.SDL_GpuGetTransferData( Refresh.Refresh_GetTransferData(
Device.Handle, Device.Handle,
Handle, Handle,
(nint) dataPtr, (nint) dataPtr,
new SDL_Gpu.BufferCopy new Refresh.BufferCopy
{ {
SourceOffset = bufferOffsetInBytes, SourceOffset = bufferOffsetInBytes,
DestinationOffset = 0, DestinationOffset = 0,

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
@ -106,18 +106,18 @@ namespace MoonWorks.Graphics
ColorWriteMask = ColorComponentFlags.None ColorWriteMask = ColorComponentFlags.None
}; };
public SDL_Gpu.ColorAttachmentBlendState ToSDL() public Refresh.ColorAttachmentBlendState ToRefresh()
{ {
return new SDL_Gpu.ColorAttachmentBlendState return new Refresh.ColorAttachmentBlendState
{ {
BlendEnable = Conversions.BoolToInt(BlendEnable), BlendEnable = Conversions.BoolToInt(BlendEnable),
AlphaBlendOp = (SDL_Gpu.BlendOp) AlphaBlendOp, AlphaBlendOp = (Refresh.BlendOp) AlphaBlendOp,
ColorBlendOp = (SDL_Gpu.BlendOp) ColorBlendOp, ColorBlendOp = (Refresh.BlendOp) ColorBlendOp,
ColorWriteMask = (SDL_Gpu.ColorComponentFlags) ColorWriteMask, ColorWriteMask = (Refresh.ColorComponentFlags) ColorWriteMask,
DestinationAlphaBlendFactor = (SDL_Gpu.BlendFactor) DestinationAlphaBlendFactor, DestinationAlphaBlendFactor = (Refresh.BlendFactor) DestinationAlphaBlendFactor,
DestinationColorBlendFactor = (SDL_Gpu.BlendFactor) DestinationColorBlendFactor, DestinationColorBlendFactor = (Refresh.BlendFactor) DestinationColorBlendFactor,
SourceAlphaBlendFactor = (SDL_Gpu.BlendFactor) SourceAlphaBlendFactor, SourceAlphaBlendFactor = (Refresh.BlendFactor) SourceAlphaBlendFactor,
SourceColorBlendFactor = (SDL_Gpu.BlendFactor) SourceColorBlendFactor SourceColorBlendFactor = (Refresh.BlendFactor) SourceColorBlendFactor
}; };
} }
} }

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
@ -93,17 +93,17 @@ namespace MoonWorks.Graphics
StencilTestEnable = false StencilTestEnable = false
}; };
public SDL_Gpu.DepthStencilState ToSDL() public Refresh.DepthStencilState ToRefresh()
{ {
return new SDL_Gpu.DepthStencilState return new Refresh.DepthStencilState
{ {
DepthTestEnable = Conversions.BoolToInt(DepthTestEnable), DepthTestEnable = Conversions.BoolToInt(DepthTestEnable),
BackStencilState = BackStencilState.ToSDL(), BackStencilState = BackStencilState.ToRefresh(),
FrontStencilState = FrontStencilState.ToSDL(), FrontStencilState = FrontStencilState.ToRefresh(),
CompareMask = CompareMask, CompareMask = CompareMask,
WriteMask = WriteMask, WriteMask = WriteMask,
Reference = Reference, Reference = Reference,
CompareOp = (SDL_Gpu.CompareOp) CompareOp, CompareOp = (Refresh.CompareOp) CompareOp,
DepthBoundsTestEnable = Conversions.BoolToInt(DepthBoundsTestEnable), DepthBoundsTestEnable = Conversions.BoolToInt(DepthBoundsTestEnable),
DepthWriteEnable = Conversions.BoolToInt(DepthWriteEnable), DepthWriteEnable = Conversions.BoolToInt(DepthWriteEnable),
MinDepthBounds = MinDepthBounds, MinDepthBounds = MinDepthBounds,

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
@ -24,11 +24,11 @@ namespace MoonWorks.Graphics
SampleMask = sampleMask; SampleMask = sampleMask;
} }
public SDL_Gpu.MultisampleState ToSDL() public Refresh.MultisampleState ToRefresh()
{ {
return new SDL_Gpu.MultisampleState return new Refresh.MultisampleState
{ {
MultisampleCount = (SDL_Gpu.SampleCount) MultisampleCount, MultisampleCount = (Refresh.SampleCount) MultisampleCount,
SampleMask = SampleMask SampleMask = SampleMask
}; };
} }

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
@ -106,17 +106,17 @@ public struct RasterizerState
DepthBiasEnable = false DepthBiasEnable = false
}; };
public SDL_Gpu.RasterizerState ToSDL() public Refresh.RasterizerState ToRefresh()
{ {
return new SDL_Gpu.RasterizerState return new Refresh.RasterizerState
{ {
CullMode = (SDL_Gpu.CullMode) CullMode, CullMode = (Refresh.CullMode) CullMode,
DepthBiasClamp = DepthBiasClamp, DepthBiasClamp = DepthBiasClamp,
DepthBiasConstantFactor = DepthBiasConstantFactor, DepthBiasConstantFactor = DepthBiasConstantFactor,
DepthBiasEnable = Conversions.BoolToInt(DepthBiasEnable), DepthBiasEnable = Conversions.BoolToInt(DepthBiasEnable),
DepthBiasSlopeFactor = DepthBiasSlopeFactor, DepthBiasSlopeFactor = DepthBiasSlopeFactor,
FillMode = (SDL_Gpu.FillMode) FillMode, FillMode = (Refresh.FillMode) FillMode,
FrontFace = (SDL_Gpu.FrontFace) FrontFace FrontFace = (Refresh.FrontFace) FrontFace
}; };
} }
} }

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
@ -150,24 +150,24 @@ public struct SamplerCreateInfo
MaxLod = 1000 MaxLod = 1000
}; };
public SDL_Gpu.SamplerCreateInfo ToSDL() public Refresh.SamplerCreateInfo ToRefresh()
{ {
return new SDL_Gpu.SamplerCreateInfo return new Refresh.SamplerCreateInfo
{ {
MinFilter = (SDL_Gpu.Filter) MinFilter, MinFilter = (Refresh.Filter) MinFilter,
MagFilter = (SDL_Gpu.Filter) MagFilter, MagFilter = (Refresh.Filter) MagFilter,
MipmapMode = (SDL_Gpu.SamplerMipmapMode) MipmapMode, MipmapMode = (Refresh.SamplerMipmapMode) MipmapMode,
AddressModeU = (SDL_Gpu.SamplerAddressMode) AddressModeU, AddressModeU = (Refresh.SamplerAddressMode) AddressModeU,
AddressModeV = (SDL_Gpu.SamplerAddressMode) AddressModeV, AddressModeV = (Refresh.SamplerAddressMode) AddressModeV,
AddressModeW = (SDL_Gpu.SamplerAddressMode) AddressModeW, AddressModeW = (Refresh.SamplerAddressMode) AddressModeW,
MipLodBias = MipLodBias, MipLodBias = MipLodBias,
AnisotropyEnable = Conversions.BoolToByte(AnisotropyEnable), AnisotropyEnable = Conversions.BoolToInt(AnisotropyEnable),
MaxAnisotropy = MaxAnisotropy, MaxAnisotropy = MaxAnisotropy,
CompareEnable = Conversions.BoolToByte(CompareEnable), CompareEnable = Conversions.BoolToInt(CompareEnable),
CompareOp = (SDL_Gpu.CompareOp) CompareOp, CompareOp = (Refresh.CompareOp) CompareOp,
MinLod = MinLod, MinLod = MinLod,
MaxLod = MaxLod, MaxLod = MaxLod,
BorderColor = (SDL_Gpu.BorderColor) BorderColor BorderColor = (Refresh.BorderColor) BorderColor
}; };
} }
} }

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
@ -17,9 +17,9 @@ namespace MoonWorks.Graphics
public TextureFormat Format; public TextureFormat Format;
public TextureUsageFlags UsageFlags; public TextureUsageFlags UsageFlags;
public SDL_Gpu.TextureCreateInfo ToSDL() public Refresh.TextureCreateInfo ToRefresh()
{ {
return new SDL_Gpu.TextureCreateInfo return new Refresh.TextureCreateInfo
{ {
Width = Width, Width = Width,
Height = Height, Height = Height,
@ -27,9 +27,9 @@ namespace MoonWorks.Graphics
IsCube = Conversions.BoolToInt(IsCube), IsCube = Conversions.BoolToInt(IsCube),
LayerCount = LayerCount, LayerCount = LayerCount,
LevelCount = LevelCount, LevelCount = LevelCount,
SampleCount = (SDL_Gpu.SampleCount) SampleCount, SampleCount = (Refresh.SampleCount) SampleCount,
Format = (SDL_Gpu.TextureFormat) Format, Format = (Refresh.TextureFormat) Format,
UsageFlags = (SDL_Gpu.TextureUsageFlags) UsageFlags UsageFlags = (Refresh.TextureUsageFlags) UsageFlags
}; };
} }
} }

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics namespace MoonWorks.Graphics
{ {
@ -29,11 +29,11 @@ namespace MoonWorks.Graphics
Depth = texture.Depth; Depth = texture.Depth;
} }
public SDL_Gpu.TextureRegion ToSDL() public Refresh.TextureRegion ToRefresh()
{ {
return new SDL_Gpu.TextureRegion return new Refresh.TextureRegion
{ {
TextureSlice = TextureSlice.ToSDL(), TextureSlice = TextureSlice.ToRefresh(),
X = X, X = X,
Y = Y, Y = Y,
Z = Z, Z = Z,

View File

@ -1,4 +1,4 @@
using SDL2_gpuCS; using RefreshCS;
namespace MoonWorks.Graphics; namespace MoonWorks.Graphics;
/// <summary> /// <summary>
@ -19,9 +19,9 @@ public struct TextureSlice
Layer = 0; Layer = 0;
} }
public SDL_Gpu.TextureSlice ToSDL() public Refresh.TextureSlice ToRefresh()
{ {
return new SDL_Gpu.TextureSlice return new Refresh.TextureSlice
{ {
Texture = Texture.Handle, Texture = Texture.Handle,
MipLevel = MipLevel, MipLevel = MipLevel,

View File

@ -242,11 +242,11 @@ namespace MoonWorks.Video
if (TransferBuffer == null || TransferBuffer.Size < ySpan.Length + uSpan.Length + vSpan.Length) if (TransferBuffer == null || TransferBuffer.Size < ySpan.Length + uSpan.Length + vSpan.Length)
{ {
TransferBuffer?.Dispose(); TransferBuffer?.Dispose();
TransferBuffer = new TransferBuffer(Device, TransferUsage.Texture, (uint) (ySpan.Length + uSpan.Length + vSpan.Length)); TransferBuffer = new TransferBuffer(Device, TransferUsage.Texture, TransferBufferMapFlags.Write, (uint) (ySpan.Length + uSpan.Length + vSpan.Length));
} }
TransferBuffer.SetData(ySpan, 0, TransferOptions.Cycle); TransferBuffer.SetData(ySpan, 0, true);
TransferBuffer.SetData(uSpan, (uint) ySpan.Length, TransferOptions.Unsafe); TransferBuffer.SetData(uSpan, (uint) ySpan.Length, false);
TransferBuffer.SetData(vSpan, (uint) (ySpan.Length + uSpan.Length), TransferOptions.Unsafe); TransferBuffer.SetData(vSpan, (uint) (ySpan.Length + uSpan.Length), false);
uOffset = (uint) ySpan.Length; uOffset = (uint) ySpan.Length;
vOffset = (uint) (ySpan.Length + vSpan.Length); vOffset = (uint) (ySpan.Length + vSpan.Length);
@ -257,9 +257,9 @@ namespace MoonWorks.Video
var commandBuffer = Device.AcquireCommandBuffer(); var commandBuffer = Device.AcquireCommandBuffer();
commandBuffer.BeginCopyPass(); var copyPass = commandBuffer.BeginCopyPass();
commandBuffer.UploadToTexture( copyPass.UploadToTexture(
TransferBuffer, TransferBuffer,
yTexture, yTexture,
new BufferImageCopy new BufferImageCopy
@ -268,10 +268,10 @@ namespace MoonWorks.Video
BufferStride = yStride, BufferStride = yStride,
BufferImageHeight = yTexture.Height BufferImageHeight = yTexture.Height
}, },
WriteOptions.Cycle true
); );
commandBuffer.UploadToTexture( copyPass.UploadToTexture(
TransferBuffer, TransferBuffer,
uTexture, uTexture,
new BufferImageCopy{ new BufferImageCopy{
@ -279,10 +279,10 @@ namespace MoonWorks.Video
BufferStride = uvStride, BufferStride = uvStride,
BufferImageHeight = uTexture.Height BufferImageHeight = uTexture.Height
}, },
WriteOptions.Cycle true
); );
commandBuffer.UploadToTexture( copyPass.UploadToTexture(
TransferBuffer, TransferBuffer,
vTexture, vTexture,
new BufferImageCopy new BufferImageCopy
@ -291,25 +291,22 @@ namespace MoonWorks.Video
BufferStride = uvStride, BufferStride = uvStride,
BufferImageHeight = vTexture.Height BufferImageHeight = vTexture.Height
}, },
WriteOptions.Cycle true
); );
commandBuffer.EndCopyPass(); commandBuffer.EndCopyPass(copyPass);
commandBuffer.BeginRenderPass( var renderPass = commandBuffer.BeginRenderPass(
new ColorAttachmentInfo(RenderTexture, WriteOptions.Cycle, Color.Black) new ColorAttachmentInfo(RenderTexture, true, Color.Black)
); );
commandBuffer.BindGraphicsPipeline(Device.VideoPipeline); renderPass.BindGraphicsPipeline(Device.VideoPipeline);
commandBuffer.BindFragmentSamplers( renderPass.BindFragmentSamplers(new TextureSamplerBinding(yTexture, LinearSampler), 0);
new TextureSamplerBinding(yTexture, LinearSampler), renderPass.BindFragmentSamplers(new TextureSamplerBinding(uTexture, LinearSampler), 1);
new TextureSamplerBinding(uTexture, LinearSampler), renderPass.BindFragmentSamplers(new TextureSamplerBinding(vTexture, LinearSampler), 2);
new TextureSamplerBinding(vTexture, LinearSampler) renderPass.DrawPrimitives(0, 1);
);
commandBuffer.DrawPrimitives(0, 1); commandBuffer.EndRenderPass(renderPass);
commandBuffer.EndRenderPass();
Device.Submit(commandBuffer); Device.Submit(commandBuffer);
} }