mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 21:01:52 +00:00
Added reflection and constant buffers to vertex shaders
This commit is contained in:
@@ -88,6 +88,8 @@ namespace GlitchyEngine
|
|||||||
{
|
{
|
||||||
_vertexShader = Shader.FromFile!<VertexShader>(_window.Context, "content\\basicShader.hlsl", "VS");
|
_vertexShader = Shader.FromFile!<VertexShader>(_window.Context, "content\\basicShader.hlsl", "VS");
|
||||||
|
|
||||||
|
_vertexShader.Buffers[0].SetData(Matrix.Identity);
|
||||||
|
|
||||||
// Create Input Layout
|
// Create Input Layout
|
||||||
|
|
||||||
_vertexLayout = new VertexLayout(_window.Context, new .(
|
_vertexLayout = new VertexLayout(_window.Context, new .(
|
||||||
|
|||||||
@@ -169,7 +169,8 @@ namespace GlitchyEngine.Renderer
|
|||||||
public override void SetVertexShader(VertexShader vertexShader)
|
public override void SetVertexShader(VertexShader vertexShader)
|
||||||
{
|
{
|
||||||
//Todo: nativeContext.VertexShader.SetSamplers();
|
//Todo: nativeContext.VertexShader.SetSamplers();
|
||||||
//Todo: nativeContext.VertexShader.SetConstantBuffers();
|
vertexShader.Buffers.PlatformFetchNativeBuffers();
|
||||||
|
nativeContext.VertexShader.SetConstantBuffers(0, vertexShader.Buffers.nativeBuffers.Count, &vertexShader.Buffers.nativeBuffers);
|
||||||
//Todo: nativeContext.VertexShader.SetShaderResources();
|
//Todo: nativeContext.VertexShader.SetShaderResources();
|
||||||
nativeContext.VertexShader.SetShader(vertexShader.nativeShader);
|
nativeContext.VertexShader.SetShader(vertexShader.nativeShader);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using DirectX.D3D11;
|
using DirectX.D3D11;
|
||||||
using DirectX.D3DCompiler;
|
using DirectX.D3DCompiler;
|
||||||
using DirectX.D3D11Shader;
|
|
||||||
using DirectX.Common;
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
using internal GlitchyEngine.Renderer;
|
using internal GlitchyEngine.Renderer;
|
||||||
|
|
||||||
@@ -15,15 +12,7 @@ namespace GlitchyEngine.Renderer
|
|||||||
|
|
||||||
public override void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null)
|
public override void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null)
|
||||||
{
|
{
|
||||||
ShaderCompileFlags flags = .Default;
|
Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "ps_5_0", DefaultCompileFlags, let shaderBlob);
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
flags |= .Debug;
|
|
||||||
#else
|
|
||||||
flags |= .OptimizationLevel3;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "ps_5_0", flags, let shaderBlob);
|
|
||||||
|
|
||||||
var result = _context.nativeDevice.CreatePixelShader(shaderBlob.GetBufferPointer(), shaderBlob.GetBufferSize(), null, &nativeShader);
|
var result = _context.nativeDevice.CreatePixelShader(shaderBlob.GetBufferPointer(), shaderBlob.GetBufferSize(), null, &nativeShader);
|
||||||
if(result.Failed)
|
if(result.Failed)
|
||||||
@@ -35,36 +24,5 @@ namespace GlitchyEngine.Renderer
|
|||||||
|
|
||||||
shaderBlob?.Release();
|
shaderBlob?.Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Reflect(ID3DBlob* shaderCode)
|
|
||||||
{
|
|
||||||
ID3D11ShaderReflection* reflection = null;
|
|
||||||
var result = D3DCompiler.D3DReflect(shaderCode.GetBufferPointer(), shaderCode.GetBufferSize(), &reflection);
|
|
||||||
if(result.Failed)
|
|
||||||
{
|
|
||||||
Log.EngineLogger.Error($"Failed to reflect pixel shader: Message ({(int)result}): {result}");
|
|
||||||
}
|
|
||||||
|
|
||||||
reflection.GetDescription(let desc);
|
|
||||||
uint32 cBufferCount = desc.ConstantBuffers;
|
|
||||||
|
|
||||||
for(uint32 i < cBufferCount)
|
|
||||||
{
|
|
||||||
reflection.GetResourceBindingDescription(i, let bindDesc);
|
|
||||||
|
|
||||||
var bufferReflection = reflection.GetConstantBufferByIndex(i);
|
|
||||||
|
|
||||||
bufferReflection.GetDescription(let bufferDesc);
|
|
||||||
|
|
||||||
// ConstantBuffer
|
|
||||||
if(bufferDesc.Type == .D3D11_CT_CBUFFER)
|
|
||||||
{
|
|
||||||
GlitchyEngine.Renderer.BufferDescription cBufferDesc = .(bufferDesc.Size, .Constant, .Dynamic, .Write);
|
|
||||||
|
|
||||||
_buffers.Add(bindDesc.BindPoint, StringView(bufferDesc.Name), new Buffer(_context, cBufferDesc), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reflection.Release();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using GlitchyEngine.Renderer;
|
|||||||
using DirectX.Common;
|
using DirectX.Common;
|
||||||
using DirectX.D3D11;
|
using DirectX.D3D11;
|
||||||
using DirectX.D3DCompiler;
|
using DirectX.D3DCompiler;
|
||||||
|
using DirectX.D3D11Shader;
|
||||||
|
|
||||||
using internal GlitchyEngine.Renderer;
|
using internal GlitchyEngine.Renderer;
|
||||||
|
|
||||||
@@ -10,6 +11,13 @@ namespace GlitchyEngine.Renderer
|
|||||||
{
|
{
|
||||||
extension Shader
|
extension Shader
|
||||||
{
|
{
|
||||||
|
protected const ShaderCompileFlags DefaultCompileFlags =
|
||||||
|
#if DEBUG
|
||||||
|
.Debug;
|
||||||
|
#else
|
||||||
|
.OptimizationLevel3;
|
||||||
|
#endif
|
||||||
|
|
||||||
internal static void PlattformCompileShaderFromSource(String code, ShaderDefine[] macros, String entryPoint, String target, ShaderCompileFlags compileFlags, out ID3DBlob* shaderBlob)
|
internal static void PlattformCompileShaderFromSource(String code, ShaderDefine[] macros, String entryPoint, String target, ShaderCompileFlags compileFlags, out ID3DBlob* shaderBlob)
|
||||||
{
|
{
|
||||||
ShaderMacro* nativeMacros = macros == null ? null : new:ScopedAlloc! ShaderMacro[macros.Count]*;
|
ShaderMacro* nativeMacros = macros == null ? null : new:ScopedAlloc! ShaderMacro[macros.Count]*;
|
||||||
@@ -33,5 +41,36 @@ namespace GlitchyEngine.Renderer
|
|||||||
Log.EngineLogger.Error($"Failed to compile Shader: Error Code({(int)result}): {result} | Error Message: {str}");
|
Log.EngineLogger.Error($"Failed to compile Shader: Error Code({(int)result}): {result} | Error Message: {str}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected internal void Reflect(ID3DBlob* shaderCode)
|
||||||
|
{
|
||||||
|
ID3D11ShaderReflection* reflection = null;
|
||||||
|
var result = D3DCompiler.D3DReflect(shaderCode.GetBufferPointer(), shaderCode.GetBufferSize(), &reflection);
|
||||||
|
if(result.Failed)
|
||||||
|
{
|
||||||
|
Log.EngineLogger.Error($"Failed to reflect shader: Message ({(int)result}): {result}");
|
||||||
|
}
|
||||||
|
|
||||||
|
reflection.GetDescription(let desc);
|
||||||
|
uint32 cBufferCount = desc.ConstantBuffers;
|
||||||
|
|
||||||
|
for(uint32 i < cBufferCount)
|
||||||
|
{
|
||||||
|
reflection.GetResourceBindingDescription(i, let bindDesc);
|
||||||
|
|
||||||
|
var bufferReflection = reflection.GetConstantBufferByIndex(i);
|
||||||
|
|
||||||
|
bufferReflection.GetDescription(let bufferDesc);
|
||||||
|
|
||||||
|
// ConstantBuffer
|
||||||
|
if(bufferDesc.Type == .D3D11_CT_CBUFFER)
|
||||||
|
{
|
||||||
|
GlitchyEngine.Renderer.BufferDescription cBufferDesc = .(bufferDesc.Size, .Constant, .Dynamic, .Write);
|
||||||
|
|
||||||
|
_buffers.Add(bindDesc.BindPoint, StringView(bufferDesc.Name), new Buffer(_context, cBufferDesc), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reflection.Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,15 +16,7 @@ namespace GlitchyEngine.Renderer
|
|||||||
|
|
||||||
public override void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null)
|
public override void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null)
|
||||||
{
|
{
|
||||||
ShaderCompileFlags flags = .Default;
|
Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "vs_5_0", DefaultCompileFlags, out nativeCode);
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
flags |= .Debug;
|
|
||||||
#else
|
|
||||||
flags |= .OptimizationLevel3;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Shader.PlattformCompileShaderFromSource(code, macros, entryPoint, "vs_5_0", flags, out nativeCode);
|
|
||||||
|
|
||||||
var result = _context.nativeDevice.CreateVertexShader(nativeCode.GetBufferPointer(), nativeCode.GetBufferSize(), null, &nativeShader);
|
var result = _context.nativeDevice.CreateVertexShader(nativeCode.GetBufferPointer(), nativeCode.GetBufferSize(), null, &nativeShader);
|
||||||
if(result.Failed)
|
if(result.Failed)
|
||||||
@@ -32,7 +24,7 @@ namespace GlitchyEngine.Renderer
|
|||||||
Log.EngineLogger.Error($"Failed to create vertex shader: Message ({(int)result}): {result}");
|
Log.EngineLogger.Error($"Failed to create vertex shader: Message ({(int)result}): {result}");
|
||||||
}
|
}
|
||||||
|
|
||||||
//int i = nativeCode?.Release() ?? (uint32)-1;
|
Reflect(nativeCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
cbuffer Constants
|
cbuffer Constants : register(b0)
|
||||||
|
{
|
||||||
|
float4x4 Transform = float4x4(1, 0, 0, 0,
|
||||||
|
0, 1, 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
cbuffer Constants : register(b1)
|
||||||
{
|
{
|
||||||
float4 BaseColor;
|
float4 BaseColor;
|
||||||
}
|
}
|
||||||
@@ -18,7 +26,7 @@ struct PS_IN
|
|||||||
PS_IN VS(VS_IN input)
|
PS_IN VS(VS_IN input)
|
||||||
{
|
{
|
||||||
PS_IN output;
|
PS_IN output;
|
||||||
output.Position = float4(input.Position, 1);
|
output.Position = mul(Transform, float4(input.Position, 1));
|
||||||
output.Color = input.Color;
|
output.Color = input.Color;
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
|
|||||||
Reference in New Issue
Block a user