mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 21:01:52 +00:00
Reworked RenderTarget2D and corresponding API
This commit is contained in:
@@ -17,10 +17,14 @@ namespace GlitchyEngine.Renderer
|
||||
return .D32_Float;
|
||||
case .D32_Float_S8X24_UInt:
|
||||
return .D32_Float_S8X24_UInt;
|
||||
case .None:
|
||||
Log.EngineLogger.Assert(false, "None is not a valid depth stencil format");
|
||||
return .Unknown;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Depth stencil target is technically just a RenderTarget
|
||||
extension DepthStencilTarget
|
||||
{
|
||||
internal ID3D11DepthStencilView* nativeView ~ _?.Release();
|
||||
|
||||
@@ -104,13 +104,18 @@ namespace GlitchyEngine.Renderer
|
||||
|
||||
public override void SetRenderTarget(RenderTarget2D renderTarget, int slot = 0)
|
||||
{
|
||||
if(renderTarget == null)
|
||||
if(renderTarget == null || renderTarget.Description.IsSwapchainTarget)
|
||||
{
|
||||
_renderTargets[slot] = _swapChain.nativeBackBufferTarget;
|
||||
}
|
||||
else
|
||||
{
|
||||
_renderTargets[slot] = renderTarget.nativeRenderTargetView;
|
||||
_renderTargets[slot] = renderTarget._nativeRenderTargetView;
|
||||
}
|
||||
|
||||
if(slot == 0)
|
||||
{
|
||||
SetDepthStencilTarget(renderTarget?.DepthStencilTarget);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +132,7 @@ namespace GlitchyEngine.Renderer
|
||||
}
|
||||
else
|
||||
{
|
||||
nativeContext.ClearRenderTargetView(renderTarget.nativeRenderTargetView, color);
|
||||
nativeContext.ClearRenderTargetView(renderTarget._nativeRenderTargetView, color);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using DirectX.Common;
|
||||
using DirectX.D3D11;
|
||||
|
||||
namespace GlitchyEngine.Renderer
|
||||
@@ -6,17 +7,73 @@ namespace GlitchyEngine.Renderer
|
||||
|
||||
extension RenderTarget2D
|
||||
{
|
||||
protected internal ID3D11RenderTargetView* nativeRenderTargetView ~ _?.Release();
|
||||
protected internal ID3D11Texture2D* _nativeTexture ~ _?.Release();
|
||||
protected internal ID3D11ShaderResourceView* _nativeResourceView ~ _?.Release();
|
||||
protected internal ID3D11RenderTargetView* _nativeRenderTargetView ~ _?.Release();
|
||||
|
||||
protected override void CreateRenderTargetPlatform(Texture2DDesc desc)
|
||||
private void ReleaseAndNullify()
|
||||
{
|
||||
nativeRenderTargetView?.Release();
|
||||
nativeRenderTargetView = null;
|
||||
ReleaseAndNullify!(_nativeTexture);
|
||||
ReleaseAndNullify!(_nativeResourceView);
|
||||
ReleaseAndNullify!(_nativeRenderTargetView);
|
||||
|
||||
CreateTexturePlatform(desc, true, null, 0);
|
||||
ReleaseRefAndNullify!(_depthStenilTarget);
|
||||
}
|
||||
|
||||
var result = _context.nativeDevice.CreateRenderTargetView(nativeTexture, null, &nativeRenderTargetView);
|
||||
Log.EngineLogger.Assert(result.Succeeded, scope $"Failed to create render target view. Error ({result.Underlying}): {result}");
|
||||
public override void Resize(uint32 width, uint32 height)
|
||||
{
|
||||
ReleaseAndNullify();
|
||||
|
||||
_description.Width = width;
|
||||
_description.Height = height;
|
||||
|
||||
ApplyChanges();
|
||||
}
|
||||
|
||||
protected override void PlatformApplyChanges()
|
||||
{
|
||||
ReleaseAndNullify();
|
||||
|
||||
PlatformCreateTexture();
|
||||
|
||||
if(_description.DepthStencilFormat != .None)
|
||||
{
|
||||
_depthStenilTarget = new DepthStencilTarget(_context, _description.Width, _description.Height, _description.DepthStencilFormat);
|
||||
}
|
||||
}
|
||||
|
||||
private void PlatformCreateTexture()
|
||||
{
|
||||
Texture2DDescription desc = .()
|
||||
{
|
||||
Width = _description.Width,
|
||||
Height = _description.Height,
|
||||
ArraySize = _description.ArraySize,
|
||||
MipLevels = _description.MipLevels,
|
||||
Format = _description.PixelFormat,
|
||||
// Always bindable as ShaderResource and RenderTarget
|
||||
BindFlags = .ShaderResource | .RenderTarget,
|
||||
CpuAccessFlags = (.)_description.CpuAccess,
|
||||
// 2D RenderTarget never has misc flags
|
||||
MiscFlags = .None,
|
||||
SampleDesc = .(_description.SampleCount, _description.SampleQuality),
|
||||
// RenderTarget has always Default usage
|
||||
Usage = .Default
|
||||
};
|
||||
|
||||
var result = _context.nativeDevice.CreateTexture2D(ref desc, null, &_nativeTexture);
|
||||
Log.EngineLogger.Assert(result.Succeeded, "Failed to create RenderTarget2D");
|
||||
|
||||
CreateViews();
|
||||
}
|
||||
|
||||
private void CreateViews()
|
||||
{
|
||||
var result = _context.nativeDevice.CreateShaderResourceView(_nativeTexture, null, &_nativeResourceView);
|
||||
Log.EngineLogger.Assert(result.Succeeded, "Failed to create resource view");
|
||||
|
||||
result = _context.nativeDevice.CreateRenderTargetView(_nativeTexture, null, &_nativeRenderTargetView);
|
||||
Log.EngineLogger.Assert(result.Succeeded, "Failed to create render target view");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,11 @@ namespace GlitchyEngine.Renderer
|
||||
{
|
||||
_context.nativeContext.ClearDepthStencilView(target.nativeView, (.)clearFlags, depthValue, stencilValue);
|
||||
}
|
||||
|
||||
public override void Clear(RenderTarget2D renderTarget, float depthValue, uint8 stencilValue, DepthStencilClearFlag clearFlags)
|
||||
{
|
||||
_context.nativeContext.ClearDepthStencilView(renderTarget._depthStenilTarget.nativeView, (.)clearFlags, depthValue, stencilValue);
|
||||
}
|
||||
|
||||
public override void DrawIndexed(GeometryBinding geometry)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user