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
+6 -36
View File
@@ -76,9 +76,10 @@ namespace GlitchyEngine
VertexLayout _vertexLayout ~ delete _;
VertexShader _vertexShader ~ delete _;
PixelShader _pixelShader ~ delete _;
ID3D11VertexShader* _vertexShader ~ _?.Release();
//ID3D11VertexShader* _vertexShader ~ _?.Release();
private Vector3 CircleCoord(float angle)
{
@@ -87,39 +88,14 @@ namespace GlitchyEngine
private void MakeTestTriangle()
{
// Compile vertex shader
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");
}
_vertexShader = Shader.FromFile!<VertexShader>(_window.Context, "content\\basicShader.hlsl", "VS");
// Create Input Layout
_vertexLayout = new VertexLayout(_window.Context, new .(
VertexElement("POSITION", 0, .R32G32B32_Float, 0),
VertexElement("COLOR", 0, .R8G8B8A8_UNorm, 0)
), vsCode);
vsCode.Release();
if(result.Failed)
{
Debug.Write("ERROR: Failed to create input layout: {}", result);
Runtime.FatalError("Failed to create input layout");
}
), _vertexShader.[Friend]nativeCode);
//
// Load pixel shader
@@ -157,12 +133,6 @@ namespace GlitchyEngine
_indexBuffer = new IndexBuffer(Window.Context, (.)indices.Count, .Immutable);
_indexBuffer.SetData(indices);
if(result.Failed)
{
Debug.Write("ERROR: Failed to create Vertex Buffer: {}", result);
Runtime.FatalError();
}
// Create rasterizer state
GlitchyEngine.Renderer.RasterizerStateDescription rsDesc = .(.Solid, .Back, true);
_rasterizerState = new RasterizerState(Window.Context, rsDesc);
@@ -205,7 +175,7 @@ namespace GlitchyEngine
var _immediateContext = _window.Context.[Friend]nativeContext;
_immediateContext.VertexShader.SetShader(_vertexShader, null, 0);
_window.Context.SetVertexShader(_vertexShader);
_window.Context.SetRasterizerState(_rasterizerState);
@@ -166,6 +166,14 @@ namespace GlitchyEngine.Renderer
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)
{
//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);
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();
}
}
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;
}
}
}
@@ -112,6 +112,8 @@ namespace GlitchyEngine.Renderer
public extern void SetVertexLayout(VertexLayout vertexLayout);
public extern void SetPrimitiveTopology(PrimitiveTopology primitiveTopology);
public extern void SetVertexShader(VertexShader vertexShader);
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 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);
}
}