using Ghost.Core; using Ghost.Graphics.Contracts; using Ghost.Graphics.RHI; namespace Ghost.Graphics.Core; internal class SwapChainTargetStrategy : IRenderTargetStrategy { private readonly ISwapChain _swapChain; public SwapChainTargetStrategy(ISwapChain swapChain) { _swapChain = swapChain; } public Handle GetRenderTarget() { return _swapChain.GetCurrentBackBuffer(); } public void BeginRender(ICommandBuffer cmd) { cmd.ResourceBarrier(GetRenderTarget().AsResource(), ResourceState.Present, ResourceState.RenderTarget); } public void EndRender(ICommandBuffer cmd) { cmd.ResourceBarrier(GetRenderTarget().AsResource(), ResourceState.RenderTarget, ResourceState.Present); } public void Present() { _swapChain.Present(); } } internal class TextureTargetStrategy : IRenderTargetStrategy { private readonly Handle _texture; public TextureTargetStrategy(Handle texture) { _texture = texture; } public Handle GetRenderTarget() { return _texture; } public void BeginRender(ICommandBuffer cmd) { } public void EndRender(ICommandBuffer cmd) { } public void Present() { } }