Added rudimentary DepthStencilTarget

This commit is contained in:
Simon Lübeß
2021-05-30 19:49:10 +02:00
parent 562f4855bd
commit bf94f10a64
6 changed files with 98 additions and 2 deletions
@@ -0,0 +1,38 @@
using DirectX.D3D11;
using internal GlitchyEngine.Renderer;
namespace GlitchyEngine.Renderer
{
extension DepthStencilTarget
{
internal ID3D11DepthStencilView* nativeView ~ _?.Release();
protected override void PlatformCreate()
{
Texture2DDescription desc = .();
desc.Format = .D32_Float;
desc.ArraySize = 1;
desc.BindFlags = .DepthStencil;
desc.Width = _width;
desc.Height = _height;
desc.SampleDesc = .(1, 0);
ID3D11Texture2D* tex = ?;
_context.nativeDevice.CreateTexture2D(ref desc, null, &tex);
_context.nativeDevice.CreateDepthStencilView(tex, null, &nativeView);
tex.Release();
}
public override void Bind()
{
_context.SetDepthStencilTarget(this);
}
public override void Clear(float depthValue, uint8 stencilValue, DepthStencilClearFlag clearFlags)
{
_context.nativeContext.ClearDepthStencilView(nativeView, (.)clearFlags, depthValue, stencilValue);
}
}
}
@@ -92,8 +92,14 @@ namespace GlitchyEngine.Renderer
}
private ID3D11DepthStencilView* _depthStencilTarget;
private ID3D11RenderTargetView*[MaxRTVCount] _renderTargets;
internal void SetDepthStencilTarget(DepthStencilTarget target)
{
_depthStencilTarget = target?.nativeView;
}
public override void SetRenderTarget(RenderTarget renderTarget, int slot = 0)
{
@@ -109,7 +115,7 @@ namespace GlitchyEngine.Renderer
public override void BindRenderTargets()
{
nativeContext.OutputMerger.SetRenderTargets(MaxRTVCount, &_renderTargets, null);
nativeContext.OutputMerger.SetRenderTargets(MaxRTVCount, &_renderTargets, _depthStencilTarget);
}
public override void ClearRenderTarget(RenderTarget renderTarget, ColorRGBA color)
@@ -1,5 +1,7 @@
using GlitchyEngine.Math;
using internal GlitchyEngine.Renderer;
namespace GlitchyEngine.Renderer
{
using internal GlitchyEngine.Renderer;
@@ -26,6 +28,11 @@ namespace GlitchyEngine.Renderer
_context.ClearRenderTarget(renderTarget, clearColor);
}
public override void Clear(DepthStencilTarget target, float depthValue, uint8 stencilValue, DepthStencilClearFlag clearFlags)
{
_context.nativeContext.ClearDepthStencilView(target.nativeView, (.)clearFlags, depthValue, stencilValue);
}
public override void DrawIndexed(GeometryBinding geometry)
{
_context.DrawIndexed(geometry.IndexCount, geometry.IndexByteOffset, 0);