diff --git a/GlitchyEngine/src/Application.bf b/GlitchyEngine/src/Application.bf index ac7b996..9c76627 100644 --- a/GlitchyEngine/src/Application.bf +++ b/GlitchyEngine/src/Application.bf @@ -1,6 +1,5 @@ using System; using GlitchyEngine.Events; -using GlitchyEngine.Platform.DX11; using GlitchyEngine.ImGui; using GlitchyEngine.Math; using DirectX.D3D11; @@ -97,7 +96,7 @@ namespace GlitchyEngine Runtime.FatalError("Failed to compile Vertex Shader"); } - result = Dx11Cheater.Device.CreateVertexShader(vsCode.GetBufferPointer(), vsCode.GetBufferSize(), null, &_vertexShader); + result = Window.Context.[Friend]nativeDevice.CreateVertexShader(vsCode.GetBufferPointer(), vsCode.GetBufferSize(), null, &_vertexShader); if(result.Failed) { @@ -112,7 +111,7 @@ namespace GlitchyEngine InputElementDescription("COLOR", 0, .R8G8B8A8_UNorm, 0) ); - result = Dx11Cheater.Device.CreateInputLayout(&elementDescs, (.)elementDescs.Count, vsCode.GetBufferPointer(), vsCode.GetBufferSize(), &_inputLayout); + result = Window.Context.[Friend]nativeDevice.CreateInputLayout(&elementDescs, (.)elementDescs.Count, vsCode.GetBufferPointer(), vsCode.GetBufferSize(), &_inputLayout); vsCode.Release(); @@ -137,7 +136,7 @@ namespace GlitchyEngine Runtime.FatalError("Failed to compile Pixel Shader"); } - result = Dx11Cheater.Device.CreatePixelShader(psCode.GetBufferPointer(), psCode.GetBufferSize(), null, &_pixelShader); + result = Window.Context.[Friend]nativeDevice.CreatePixelShader(psCode.GetBufferPointer(), psCode.GetBufferSize(), null, &_pixelShader); psCode.Release(); @@ -217,7 +216,7 @@ namespace GlitchyEngine Window.Context.SetVertexBuffer(0, _vertexBuffer); Window.Context.SetIndexBuffer(_indexBuffer); - var _immediateContext = Dx11Cheater.ImmediateContext; + var _immediateContext = Window.Context.[Friend]nativeContext; _immediateContext.InputAssembler.SetInputLayout(_inputLayout); _immediateContext.InputAssembler.SetPrimitiveTopology(.TriangleList); @@ -226,7 +225,7 @@ namespace GlitchyEngine Window.Context.SetRasterizerState(_rasterizerState); - _immediateContext.Rasterizer.SetViewports(1, &Dx11Cheater.BackbufferViewport); + Window.Context.SetViewport(Window.Context.SwapChain.BackbufferViewport); _immediateContext.PixelShader.SetShader(_pixelShader, null, 0); diff --git a/GlitchyEngine/src/ImGui/ImGuiLayer.bf b/GlitchyEngine/src/ImGui/ImGuiLayer.bf index e3609f7..6898535 100644 --- a/GlitchyEngine/src/ImGui/ImGuiLayer.bf +++ b/GlitchyEngine/src/ImGui/ImGuiLayer.bf @@ -2,10 +2,6 @@ using System; using ImGui; using GlitchyEngine.Events; -// Temporary -using GlitchyEngine.Platform.DX11; -//using GlitchyEngine.Platform.DX11.Renderer; - namespace GlitchyEngine.ImGui { public class ImGuiLayer : Layer diff --git a/GlitchyEngine/src/Platform/DX11/Dx11Cheater.bf b/GlitchyEngine/src/Platform/DX11/Dx11Cheater.bf deleted file mode 100644 index d6c76dd..0000000 --- a/GlitchyEngine/src/Platform/DX11/Dx11Cheater.bf +++ /dev/null @@ -1,17 +0,0 @@ -using DirectX.D3D11; -using DirectX.DXGI; - -namespace GlitchyEngine.Platform.DX11 -{ - public static class Dx11Cheater - { - public static ID3D11Device* Device; - public static ID3D11DeviceContext* ImmediateContext; - - public static ID3D11DeviceContext* Context => ImmediateContext; - - public static IDXGISwapChain* SwapChain; - public static ID3D11RenderTargetView* BackbufferTarget; - public static Viewport BackbufferViewport; - } -} diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf index 8925ccb..d4f495f 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf @@ -7,19 +7,13 @@ using DirectX.DXGI.DXGI1_2; using GlitchyEngine.Renderer; using GlitchyEngine.Math; -using GlitchyEngine.Platform.DX11; - using internal GlitchyEngine.Renderer; -//using internal GlitchyEngine.Platform.DX11.Renderer; namespace GlitchyEngine.Renderer -//namespace GlitchyEngine.Platform.DX11.Renderer { /// DirectX 11 specific implementation of the GraphicsContext extension GraphicsContext - //public class Dx11Context : GraphicsContext { - //private Dx11SwapChain _swapChain; private SwapChain _swapChain; internal Windows.HWnd nativeWindowHandle; @@ -40,7 +34,6 @@ namespace GlitchyEngine.Renderer nativeWindowHandle = windowHandle; _swapChain = new SwapChain(this); - //_swapChain = new Dx11SwapChain(this); } public ~this() @@ -94,9 +87,6 @@ namespace GlitchyEngine.Renderer } } #endif - - Dx11Cheater.Device = nativeDevice; - Dx11Cheater.ImmediateContext = nativeContext; Log.EngineLogger.Trace("D3D11 Device and Context created (Feature level: {})", deviceLevel); } @@ -110,7 +100,6 @@ namespace GlitchyEngine.Renderer if(renderTarget == null) { _renderTargets[slot] = _swapChain.nativeBackBufferTarget; - //_immediateContext.OutputMerger.SetRenderTargets(1, &_swapChain._backBufferTarget, null); } else { @@ -161,5 +150,10 @@ namespace GlitchyEngine.Renderer { nativeContext.Rasterizer.SetState(_currentRasterizerState.nativeRasterizerState); } + + public override void SetViewports(uint32 viewportsCount, GlitchyEngine.Renderer.Viewport* viewports) + { + nativeContext.Rasterizer.SetViewports(viewportsCount, (.)viewports); + } } } diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf index 8c3435d..df32d5c 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11SwapChain.bf @@ -1,6 +1,5 @@ using DirectX.D3D11; using DirectX.DXGI.DXGI1_2; -using GlitchyEngine.Platform.DX11; using System.Diagnostics; using internal GlitchyEngine.Renderer; @@ -19,7 +18,6 @@ namespace GlitchyEngine.Renderer internal IDXGISwapChain1* nativeSwapChain; internal ID3D11RenderTargetView* nativeBackBufferTarget; - private DirectX.D3D11.Viewport _backBufferViewport; public override uint32 Width { @@ -51,7 +49,6 @@ namespace GlitchyEngine.Renderer public override GraphicsContext Context => _context; - //public this(Dx11Context context) public this(GraphicsContext context) { _context = context; @@ -129,8 +126,6 @@ namespace GlitchyEngine.Renderer Debug.Assert(createResult.Succeeded, scope $"Failed to create swap chain. Message({(int32)createResult}):{createResult}"); factory.Release(); - - Dx11Cheater.SwapChain = nativeSwapChain; } nativeSwapChain.GetBuffer(0, let backBuffer); @@ -138,11 +133,7 @@ namespace GlitchyEngine.Renderer RenderTargetViewDescription rtvDesc = .(backBuffer, .Texture2D, backBufferViewFormat); _context.nativeDevice.CreateRenderTargetView(backBuffer, &rtvDesc, &nativeBackBufferTarget); - Dx11Cheater.BackbufferTarget = nativeBackBufferTarget; - - _backBufferViewport = DirectX.D3D11.Viewport(0, 0, _width, _height, 0.0f, 1.0f); - - Dx11Cheater.BackbufferViewport = _backBufferViewport; + _backBufferViewport = GlitchyEngine.Renderer.Viewport(0, 0, _width, _height, 0.0f, 1.0f); backBuffer.Release(); } diff --git a/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf b/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf index fdaf54e..c56dd0f 100644 --- a/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf +++ b/GlitchyEngine/src/Platform/Windows/WindowsWindow.bf @@ -7,9 +7,7 @@ using DirectX.Windows.Kernel32; using DirectX.Windows.WindowMessages; using GlitchyEngine.Events; using System.Diagnostics; -using GlitchyEngine.Platform.DX11; using GlitchyEngine.Math; -//using GlitchyEngine.Platform.DX11.Renderer; using GlitchyEngine.Renderer; using static System.Windows; @@ -198,7 +196,6 @@ namespace GlitchyEngine _windowHandle = CreateWindowExW(.None, _windowClass.ClassName, desc.Title.ToScopedNativeWChar!(), .WS_OVERLAPPEDWINDOW | .WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, desc.Width, desc.Height, 0, 0, (.)_instanceHandle, null); - //_graphicsContext = new Dx11Context(_windowHandle); _graphicsContext = new GraphicsContext(_windowHandle); _graphicsContext.Init(); @@ -208,8 +205,6 @@ namespace GlitchyEngine LoadWindowRectangle(); Log.EngineLogger.Trace("Created window \"{}\" ({}, {})", Title, Width, Height); - - //DirectX.Init(_windowHandle, (.)Width, (.)Height); } private bool _isResizingOrMoving; diff --git a/GlitchyEngine/src/Renderer/GraphicsContext.bf b/GlitchyEngine/src/Renderer/GraphicsContext.bf index 7acb38a..f80dca7 100644 --- a/GlitchyEngine/src/Renderer/GraphicsContext.bf +++ b/GlitchyEngine/src/Renderer/GraphicsContext.bf @@ -1,15 +1,14 @@ using GlitchyEngine.Math; +using System; namespace GlitchyEngine.Renderer { public class RenderTarget; - //public abstract class GraphicsContext public class GraphicsContext { private RasterizerState _currentRasterizerState; - //public abstract SwapChain SwapChain {get;} public extern SwapChain SwapChain {get;} /** @@ -17,7 +16,6 @@ namespace GlitchyEngine.Renderer */ //public static extern uint32 MaxRenderTargetCount(); - //public abstract void Init(); public extern void Init(); /** @@ -27,7 +25,6 @@ namespace GlitchyEngine.Renderer * @remarks When @RenderTarget is null the backbuffer will be bound. * @BindRenderTargets has to be called in order to bind the rendertargets. */ - //public abstract void SetRenderTarget(RenderTarget renderTarget, int slot = 0); public extern void SetRenderTarget(RenderTarget renderTarget, int slot = 0); /** @@ -36,7 +33,6 @@ namespace GlitchyEngine.Renderer * @param slot The slot to which the rendertarget will be bound. * @remarks When @RenderTarget is null the backbuffer will be bound. */ - //public abstract void BindRenderTargets(); // Todo: maybe do this automatically when a drawcall is issued public extern void BindRenderTargets(); // Todo: maybe do this automatically when a drawcall is issued /** @@ -45,7 +41,6 @@ namespace GlitchyEngine.Renderer * @param color The color to clear the render target with. * @remarks When @renderTarget is null the backbuffer will be cleared. */ - //public abstract void ClearRenderTarget(RenderTarget renderTarget, ColorRGBA color); public extern void ClearRenderTarget(RenderTarget renderTarget, ColorRGBA color); //public abstract void SetViewport(Viewport viewport); @@ -91,5 +86,27 @@ namespace GlitchyEngine.Renderer { return _currentRasterizerState; } + + [Inline] + public void SetViewport(Viewport viewport) + { + var viewport; + SetViewports(1, &viewport); + } + + [Inline] + public void SetViewports(Viewport[] viewports) + { + SetViewports((.)viewports.Count, viewports.CArray()); + } + + [Inline] + public void SetViewports(Viewport[CSize] viewports) where CSize : const int + { + var viewports; + SetViewports(CSize, &viewports); + } + + public extern void SetViewports(uint32 viewportsLength, Viewport* viewports); } } diff --git a/GlitchyEngine/src/Renderer/SwapChain.bf b/GlitchyEngine/src/Renderer/SwapChain.bf index 5790c5f..b984050 100644 --- a/GlitchyEngine/src/Renderer/SwapChain.bf +++ b/GlitchyEngine/src/Renderer/SwapChain.bf @@ -2,6 +2,8 @@ namespace GlitchyEngine.Renderer { public class SwapChain { + private Viewport _backBufferViewport; + public extern GraphicsContext Context {get;} /** @@ -15,6 +17,8 @@ namespace GlitchyEngine.Renderer */ public extern uint32 Height {get; set;} + public Viewport BackbufferViewport => _backBufferViewport; + public extern void Init(); /**