Added vertex shader

This commit is contained in:
Simon Lübeß
2020-12-24 23:53:56 +01:00
parent 9964a1f5ad
commit 3a599fd21a
5 changed files with 54 additions and 37 deletions
+5 -35
View File
@@ -76,9 +76,10 @@ namespace GlitchyEngine
VertexLayout _vertexLayout ~ delete _; VertexLayout _vertexLayout ~ delete _;
VertexShader _vertexShader ~ delete _;
PixelShader _pixelShader ~ delete _; PixelShader _pixelShader ~ delete _;
ID3D11VertexShader* _vertexShader ~ _?.Release(); //ID3D11VertexShader* _vertexShader ~ _?.Release();
private Vector3 CircleCoord(float angle) private Vector3 CircleCoord(float angle)
{ {
@@ -87,39 +88,14 @@ namespace GlitchyEngine
private void MakeTestTriangle() private void MakeTestTriangle()
{ {
// Compile vertex shader _vertexShader = Shader.FromFile!<VertexShader>(_window.Context, "content\\basicShader.hlsl", "VS");
ID3DBlob* vsCode = null;
ID3DBlob* errorBlob = null;
var result = D3DCompiler.D3DCompileFromFile("content\\basicShader.hlsl".ToScopedNativeWChar!(), null, .StandardInclude, "VS", "vs_5_0", .Debug, .None, &vsCode, &errorBlob);
if(result.Failed || errorBlob != null)
{
Debug.Write("ERROR: Failed to compile Vertex Shader: {}", result);
Runtime.FatalError("Failed to compile Vertex Shader");
}
result = Window.Context.[Friend]nativeDevice.CreateVertexShader(vsCode.GetBufferPointer(), vsCode.GetBufferSize(), null, &_vertexShader);
if(result.Failed)
{
Debug.Write("ERROR: Failed to create Vertex Shader: {}", result);
Runtime.FatalError("Failed to create Vertex Shader");
}
// Create Input Layout // Create Input Layout
_vertexLayout = new VertexLayout(_window.Context, new .( _vertexLayout = new VertexLayout(_window.Context, new .(
VertexElement("POSITION", 0, .R32G32B32_Float, 0), VertexElement("POSITION", 0, .R32G32B32_Float, 0),
VertexElement("COLOR", 0, .R8G8B8A8_UNorm, 0) VertexElement("COLOR", 0, .R8G8B8A8_UNorm, 0)
), vsCode); ), _vertexShader.[Friend]nativeCode);
vsCode.Release();
if(result.Failed)
{
Debug.Write("ERROR: Failed to create input layout: {}", result);
Runtime.FatalError("Failed to create input layout");
}
// //
// Load pixel shader // Load pixel shader
@@ -157,12 +133,6 @@ namespace GlitchyEngine
_indexBuffer = new IndexBuffer(Window.Context, (.)indices.Count, .Immutable); _indexBuffer = new IndexBuffer(Window.Context, (.)indices.Count, .Immutable);
_indexBuffer.SetData(indices); _indexBuffer.SetData(indices);
if(result.Failed)
{
Debug.Write("ERROR: Failed to create Vertex Buffer: {}", result);
Runtime.FatalError();
}
// Create rasterizer state // Create rasterizer state
GlitchyEngine.Renderer.RasterizerStateDescription rsDesc = .(.Solid, .Back, true); GlitchyEngine.Renderer.RasterizerStateDescription rsDesc = .(.Solid, .Back, true);
_rasterizerState = new RasterizerState(Window.Context, rsDesc); _rasterizerState = new RasterizerState(Window.Context, rsDesc);
@@ -205,7 +175,7 @@ namespace GlitchyEngine
var _immediateContext = _window.Context.[Friend]nativeContext; var _immediateContext = _window.Context.[Friend]nativeContext;
_immediateContext.VertexShader.SetShader(_vertexShader, null, 0); _window.Context.SetVertexShader(_vertexShader);
_window.Context.SetRasterizerState(_rasterizerState); _window.Context.SetRasterizerState(_rasterizerState);
@@ -166,6 +166,14 @@ namespace GlitchyEngine.Renderer
nativeContext.InputAssembler.SetPrimitiveTopology((DirectX.Common.PrimitiveTopology)primitiveTopology); nativeContext.InputAssembler.SetPrimitiveTopology((DirectX.Common.PrimitiveTopology)primitiveTopology);
} }
public override void SetVertexShader(VertexShader vertexShader)
{
//Todo: nativeContext.VertexShader.SetSamplers();
//Todo: nativeContext.VertexShader.SetConstantBuffers();
//Todo: nativeContext.VertexShader.SetShaderResources();
nativeContext.VertexShader.SetShader(vertexShader.nativeShader);
}
public override void SetPixelShader(PixelShader pixelShader) public override void SetPixelShader(PixelShader pixelShader)
{ {
//Todo: nativeContext.PixelShader.SetSamplers(); //Todo: nativeContext.PixelShader.SetSamplers();
@@ -29,7 +29,8 @@ namespace GlitchyEngine.Renderer
var result = D3DCompiler.D3DCompile(code.CStr(), (.)code.Length, null, nativeMacros, null, entryPoint, target, compileFlags, .None, &shaderBlob, &errorBlob); var result = D3DCompiler.D3DCompile(code.CStr(), (.)code.Length, null, nativeMacros, null, entryPoint, target, compileFlags, .None, &shaderBlob, &errorBlob);
if(result.Failed) if(result.Failed)
{ {
Log.EngineLogger.Error($"Failed to compile Shader: Error Code({(int)result}): {result} | Error Message: {scope String((char8*)errorBlob.GetBufferPointer(), errorBlob.GetBufferSize())}"); StringView str = StringView((char8*)errorBlob.GetBufferPointer(), errorBlob.GetBufferSize());
Log.EngineLogger.Error($"Failed to compile Shader: Error Code({(int)result}): {result} | Error Message: {str}");
} }
} }
} }
@@ -81,4 +82,32 @@ namespace GlitchyEngine.Renderer
reflection.Release(); reflection.Release();
} }
} }
extension VertexShader
{
internal ID3D11VertexShader* nativeShader ~ _?.Release();
internal ID3DBlob* nativeCode ~ _?.Release();
public override void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null)
{
ShaderCompileFlags flags = .Default;
#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);
if(result.Failed)
{
Log.EngineLogger.Error($"Failed to create vertex shader: Message ({(int)result}): {result}");
}
//int i = nativeCode?.Release() ?? (uint32)-1;
}
}
} }
@@ -113,6 +113,8 @@ namespace GlitchyEngine.Renderer
public extern void SetPrimitiveTopology(PrimitiveTopology primitiveTopology); public extern void SetPrimitiveTopology(PrimitiveTopology primitiveTopology);
public extern void SetVertexShader(VertexShader vertexShader);
public extern void SetPixelShader(PixelShader pixelShader); public extern void SetPixelShader(PixelShader pixelShader);
} }
} }
+8
View File
@@ -51,4 +51,12 @@ namespace GlitchyEngine.Renderer
public override extern void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null); public override extern void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null);
} }
public class VertexShader : Shader
{
public this(GraphicsContext context, String source, String entryPoint, ShaderDefine[] macros = null)
: base(context, source, entryPoint, macros) { }
public override extern void CompileFromSource(String code, String entryPoint, ShaderDefine[] macros = null);
}
} }