mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Added vertex shader
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,6 +112,8 @@ namespace GlitchyEngine.Renderer
|
|||||||
public extern void SetVertexLayout(VertexLayout vertexLayout);
|
public extern void SetVertexLayout(VertexLayout vertexLayout);
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user