forked from MoonsideGames/MoonWorks
Compare commits
No commits in common. "f3c74aa72acbbc0f1e99818f8cc2ed1f350e6ceb" and "030745361b5c517b234a1ea80e104468920b529e" have entirely different histories.
f3c74aa72a
...
030745361b
|
@ -24,4 +24,13 @@
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="src\Video\Shaders\Compiled\FullscreenVert.spv">
|
||||||
|
<LogicalName>MoonWorks.Shaders.FullscreenVert.spv</LogicalName>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="src\Video\Shaders\Compiled\YUV2RGBAFrag.spv">
|
||||||
|
<LogicalName>MoonWorks.Shaders.YUV2RGBAFrag.spv</LogicalName>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -14,6 +14,8 @@ namespace MoonWorks.Graphics
|
||||||
public SDL2.SDL.SDL_WindowFlags WindowFlags => (SDL2.SDL.SDL_WindowFlags) windowFlags;
|
public SDL2.SDL.SDL_WindowFlags WindowFlags => (SDL2.SDL.SDL_WindowFlags) windowFlags;
|
||||||
|
|
||||||
// Built-in video pipeline
|
// Built-in video pipeline
|
||||||
|
private ShaderModule VideoVertexShader { get; }
|
||||||
|
private ShaderModule VideoFragmentShader { get; }
|
||||||
internal GraphicsPipeline VideoPipeline { get; }
|
internal GraphicsPipeline VideoPipeline { get; }
|
||||||
|
|
||||||
public bool IsDisposed { get; private set; }
|
public bool IsDisposed { get; private set; }
|
||||||
|
@ -23,7 +25,8 @@ namespace MoonWorks.Graphics
|
||||||
public GraphicsDevice(
|
public GraphicsDevice(
|
||||||
Backend preferredBackend,
|
Backend preferredBackend,
|
||||||
bool debugMode
|
bool debugMode
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
Backend = (Backend) Refresh.Refresh_SelectBackend((Refresh.Backend) preferredBackend, out windowFlags);
|
Backend = (Backend) Refresh.Refresh_SelectBackend((Refresh.Backend) preferredBackend, out windowFlags);
|
||||||
|
|
||||||
if (Backend == Backend.Invalid)
|
if (Backend == Backend.Invalid)
|
||||||
|
@ -35,43 +38,25 @@ namespace MoonWorks.Graphics
|
||||||
Conversions.BoolToByte(debugMode)
|
Conversions.BoolToByte(debugMode)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check for optional video shaders
|
VideoVertexShader = new ShaderModule(this, GetEmbeddedResource("MoonWorks.Shaders.FullscreenVert.spv"));
|
||||||
string basePath = SDL2.SDL.SDL_GetBasePath();
|
VideoFragmentShader = new ShaderModule(this, GetEmbeddedResource("MoonWorks.Shaders.YUV2RGBAFrag.spv"));
|
||||||
string videoVertPath = Path.Combine(basePath, "Fullscreen.refresh");
|
|
||||||
string videoFragPath = Path.Combine(basePath, "YUV2RGBA.refresh");
|
|
||||||
if (File.Exists(videoVertPath) && File.Exists(videoFragPath))
|
|
||||||
{
|
|
||||||
ShaderModule videoVertShader = new ShaderModule(this, videoVertPath);
|
|
||||||
ShaderModule videoFragShader = new ShaderModule(this, videoFragPath);
|
|
||||||
|
|
||||||
VideoPipeline = new GraphicsPipeline(
|
VideoPipeline = new GraphicsPipeline(
|
||||||
this,
|
this,
|
||||||
new GraphicsPipelineCreateInfo
|
new GraphicsPipelineCreateInfo
|
||||||
{
|
{
|
||||||
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
AttachmentInfo = new GraphicsPipelineAttachmentInfo(
|
||||||
new ColorAttachmentDescription(
|
new ColorAttachmentDescription(TextureFormat.R8G8B8A8, ColorAttachmentBlendState.None)
|
||||||
TextureFormat.R8G8B8A8,
|
),
|
||||||
ColorAttachmentBlendState.None
|
DepthStencilState = DepthStencilState.Disable,
|
||||||
)
|
VertexShaderInfo = GraphicsShaderInfo.Create(VideoVertexShader, "main", 0),
|
||||||
),
|
FragmentShaderInfo = GraphicsShaderInfo.Create(VideoFragmentShader, "main", 3),
|
||||||
DepthStencilState = DepthStencilState.Disable,
|
VertexInputState = VertexInputState.Empty,
|
||||||
VertexShaderInfo = GraphicsShaderInfo.Create(
|
RasterizerState = RasterizerState.CCW_CullNone,
|
||||||
videoVertShader,
|
PrimitiveType = PrimitiveType.TriangleList,
|
||||||
"main",
|
MultisampleState = MultisampleState.None
|
||||||
0
|
}
|
||||||
),
|
);
|
||||||
FragmentShaderInfo = GraphicsShaderInfo.Create(
|
|
||||||
videoFragShader,
|
|
||||||
"main",
|
|
||||||
3
|
|
||||||
),
|
|
||||||
VertexInputState = VertexInputState.Empty,
|
|
||||||
RasterizerState = RasterizerState.CCW_CullNone,
|
|
||||||
PrimitiveType = PrimitiveType.TriangleList,
|
|
||||||
MultisampleState = MultisampleState.None
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ClaimWindow(Window window, PresentMode presentMode)
|
public bool ClaimWindow(Window window, PresentMode presentMode)
|
||||||
|
@ -117,7 +102,7 @@ namespace MoonWorks.Graphics
|
||||||
|
|
||||||
public CommandBuffer AcquireCommandBuffer()
|
public CommandBuffer AcquireCommandBuffer()
|
||||||
{
|
{
|
||||||
return new CommandBuffer(this, Refresh.Refresh_AcquireCommandBuffer(Handle));
|
return new CommandBuffer(this, Refresh.Refresh_AcquireCommandBuffer(Handle, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsafe void Submit(CommandBuffer commandBuffer)
|
public unsafe void Submit(CommandBuffer commandBuffer)
|
||||||
|
@ -229,6 +214,11 @@ namespace MoonWorks.Graphics
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Stream GetEmbeddedResource(string name)
|
||||||
|
{
|
||||||
|
return typeof(GraphicsDevice).Assembly.GetManifestResourceStream(name);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void Dispose(bool disposing)
|
protected virtual void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
if (!IsDisposed)
|
if (!IsDisposed)
|
||||||
|
|
|
@ -5,7 +5,7 @@ using System.IO;
|
||||||
namespace MoonWorks.Graphics
|
namespace MoonWorks.Graphics
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Shader modules expect input in Refresh bytecode format.
|
/// Shader modules expect input in SPIR-V bytecode format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ShaderModule : GraphicsResource
|
public class ShaderModule : GraphicsResource
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -50,11 +50,6 @@ namespace MoonWorks.Video
|
||||||
public VideoPlayer(GraphicsDevice graphicsDevice, AudioDevice audioDevice)
|
public VideoPlayer(GraphicsDevice graphicsDevice, AudioDevice audioDevice)
|
||||||
{
|
{
|
||||||
GraphicsDevice = graphicsDevice;
|
GraphicsDevice = graphicsDevice;
|
||||||
if (GraphicsDevice.VideoPipeline == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Missing video shaders!");
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioDevice = audioDevice;
|
AudioDevice = audioDevice;
|
||||||
LinearSampler = new Sampler(graphicsDevice, SamplerCreateInfo.LinearClamp);
|
LinearSampler = new Sampler(graphicsDevice, SamplerCreateInfo.LinearClamp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue