Added RasterizerState

This commit is contained in:
Simon Lübeß
2020-11-25 20:04:51 +01:00
parent 5954fbc411
commit ff16f6a895
5 changed files with 155 additions and 15 deletions
@@ -155,5 +155,10 @@ namespace GlitchyEngine.Renderer
{
nativeContext.InputAssembler.SetIndexBuffer(buffer.nativeBuffer, indexFormat == .Index32Bit ? .R32_UInt : .R16_UInt, byteOffset);
}
protected override void SetRasterizerStateImpl()
{
nativeContext.Rasterizer.SetState(_currentRasterizerState.nativeRasterizerState);
}
}
}
@@ -0,0 +1,63 @@
using DirectX.D3D11;
using internal GlitchyEngine.Renderer;
namespace GlitchyEngine.Renderer
{
extension FillMode
{
public static explicit operator DirectX.D3D11.FillMode(Self fm) => fm == .Solid ? .Solid : .Wireframe;
}
extension CullMode
{
public static explicit operator DirectX.D3D11.CullMode(Self cm)
{
if(cm == .None)
return .None;
if(cm == .Front)
return .Front;
return .Back;
}
}
extension RasterizerStateDescription
{
public static explicit operator DirectX.D3D11.RasterizerStateDescription(Self description)
{
DirectX.D3D11.RasterizerStateDescription result = .();
result.FillMode = (.)description.FillMode;
result.CullMode = (.)description.CullMode;
result.FrontCounterClockwise = description.FrontCounterClockwise;
result.DepthBias = description.DepthBias;
result.DepthBiasClamp = description.DepthBiasClamp;
result.SlopeScaledDepthBias = description.SlopeScaledDepthBias;
result.DepthClipEnable = description.DepthClipEnabled;
result.ScissorEnable = description.ScissorEnabled;
result.MultisampleEnable = description.MultisampleEnabled;
result.AntialiasedLineEnable = description.AntialiasedLineEnabled;
return result;
}
}
extension RasterizerState
{
internal DirectX.D3D11.RasterizerStateDescription nativeDescription;
internal ID3D11RasterizerState* nativeRasterizerState ~ _?.Release();
public override this(GraphicsContext context, GlitchyEngine.Renderer.RasterizerStateDescription description) : this(context)
{
_description = description;
nativeDescription = (.)_description;
var result = context.nativeDevice.CreateRasterizerState(ref nativeDescription, &nativeRasterizerState);
if(result.Failed)
{
Log.EngineLogger.Error("Failed to create rasterizer state. Message({}): {}", (int)result, result);
}
}
}
}