Added SetViewport to GraphicsContext, removed Dx11Cheater, cleanup

This commit is contained in:
Simon Lübeß
2020-11-25 21:23:05 +01:00
parent 684669321a
commit 0d4bab5dba
8 changed files with 38 additions and 59 deletions
+5 -6
View File
@@ -1,6 +1,5 @@
using System; using System;
using GlitchyEngine.Events; using GlitchyEngine.Events;
using GlitchyEngine.Platform.DX11;
using GlitchyEngine.ImGui; using GlitchyEngine.ImGui;
using GlitchyEngine.Math; using GlitchyEngine.Math;
using DirectX.D3D11; using DirectX.D3D11;
@@ -97,7 +96,7 @@ namespace GlitchyEngine
Runtime.FatalError("Failed to compile Vertex Shader"); 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) if(result.Failed)
{ {
@@ -112,7 +111,7 @@ namespace GlitchyEngine
InputElementDescription("COLOR", 0, .R8G8B8A8_UNorm, 0) 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(); vsCode.Release();
@@ -137,7 +136,7 @@ namespace GlitchyEngine
Runtime.FatalError("Failed to compile Pixel Shader"); 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(); psCode.Release();
@@ -217,7 +216,7 @@ namespace GlitchyEngine
Window.Context.SetVertexBuffer(0, _vertexBuffer); Window.Context.SetVertexBuffer(0, _vertexBuffer);
Window.Context.SetIndexBuffer(_indexBuffer); Window.Context.SetIndexBuffer(_indexBuffer);
var _immediateContext = Dx11Cheater.ImmediateContext; var _immediateContext = Window.Context.[Friend]nativeContext;
_immediateContext.InputAssembler.SetInputLayout(_inputLayout); _immediateContext.InputAssembler.SetInputLayout(_inputLayout);
_immediateContext.InputAssembler.SetPrimitiveTopology(.TriangleList); _immediateContext.InputAssembler.SetPrimitiveTopology(.TriangleList);
@@ -226,7 +225,7 @@ namespace GlitchyEngine
Window.Context.SetRasterizerState(_rasterizerState); Window.Context.SetRasterizerState(_rasterizerState);
_immediateContext.Rasterizer.SetViewports(1, &Dx11Cheater.BackbufferViewport); Window.Context.SetViewport(Window.Context.SwapChain.BackbufferViewport);
_immediateContext.PixelShader.SetShader(_pixelShader, null, 0); _immediateContext.PixelShader.SetShader(_pixelShader, null, 0);
-4
View File
@@ -2,10 +2,6 @@ using System;
using ImGui; using ImGui;
using GlitchyEngine.Events; using GlitchyEngine.Events;
// Temporary
using GlitchyEngine.Platform.DX11;
//using GlitchyEngine.Platform.DX11.Renderer;
namespace GlitchyEngine.ImGui namespace GlitchyEngine.ImGui
{ {
public class ImGuiLayer : Layer public class ImGuiLayer : Layer
@@ -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;
}
}
@@ -7,19 +7,13 @@ using DirectX.DXGI.DXGI1_2;
using GlitchyEngine.Renderer; using GlitchyEngine.Renderer;
using GlitchyEngine.Math; using GlitchyEngine.Math;
using GlitchyEngine.Platform.DX11;
using internal GlitchyEngine.Renderer; using internal GlitchyEngine.Renderer;
//using internal GlitchyEngine.Platform.DX11.Renderer;
namespace GlitchyEngine.Renderer namespace GlitchyEngine.Renderer
//namespace GlitchyEngine.Platform.DX11.Renderer
{ {
/// DirectX 11 specific implementation of the GraphicsContext /// DirectX 11 specific implementation of the GraphicsContext
extension GraphicsContext extension GraphicsContext
//public class Dx11Context : GraphicsContext
{ {
//private Dx11SwapChain _swapChain;
private SwapChain _swapChain; private SwapChain _swapChain;
internal Windows.HWnd nativeWindowHandle; internal Windows.HWnd nativeWindowHandle;
@@ -40,7 +34,6 @@ namespace GlitchyEngine.Renderer
nativeWindowHandle = windowHandle; nativeWindowHandle = windowHandle;
_swapChain = new SwapChain(this); _swapChain = new SwapChain(this);
//_swapChain = new Dx11SwapChain(this);
} }
public ~this() public ~this()
@@ -95,9 +88,6 @@ namespace GlitchyEngine.Renderer
} }
#endif #endif
Dx11Cheater.Device = nativeDevice;
Dx11Cheater.ImmediateContext = nativeContext;
Log.EngineLogger.Trace("D3D11 Device and Context created (Feature level: {})", deviceLevel); Log.EngineLogger.Trace("D3D11 Device and Context created (Feature level: {})", deviceLevel);
} }
@@ -110,7 +100,6 @@ namespace GlitchyEngine.Renderer
if(renderTarget == null) if(renderTarget == null)
{ {
_renderTargets[slot] = _swapChain.nativeBackBufferTarget; _renderTargets[slot] = _swapChain.nativeBackBufferTarget;
//_immediateContext.OutputMerger.SetRenderTargets(1, &_swapChain._backBufferTarget, null);
} }
else else
{ {
@@ -161,5 +150,10 @@ namespace GlitchyEngine.Renderer
{ {
nativeContext.Rasterizer.SetState(_currentRasterizerState.nativeRasterizerState); nativeContext.Rasterizer.SetState(_currentRasterizerState.nativeRasterizerState);
} }
public override void SetViewports(uint32 viewportsCount, GlitchyEngine.Renderer.Viewport* viewports)
{
nativeContext.Rasterizer.SetViewports(viewportsCount, (.)viewports);
}
} }
} }
@@ -1,6 +1,5 @@
using DirectX.D3D11; using DirectX.D3D11;
using DirectX.DXGI.DXGI1_2; using DirectX.DXGI.DXGI1_2;
using GlitchyEngine.Platform.DX11;
using System.Diagnostics; using System.Diagnostics;
using internal GlitchyEngine.Renderer; using internal GlitchyEngine.Renderer;
@@ -19,7 +18,6 @@ namespace GlitchyEngine.Renderer
internal IDXGISwapChain1* nativeSwapChain; internal IDXGISwapChain1* nativeSwapChain;
internal ID3D11RenderTargetView* nativeBackBufferTarget; internal ID3D11RenderTargetView* nativeBackBufferTarget;
private DirectX.D3D11.Viewport _backBufferViewport;
public override uint32 Width public override uint32 Width
{ {
@@ -51,7 +49,6 @@ namespace GlitchyEngine.Renderer
public override GraphicsContext Context => _context; public override GraphicsContext Context => _context;
//public this(Dx11Context context)
public this(GraphicsContext context) public this(GraphicsContext context)
{ {
_context = context; _context = context;
@@ -129,8 +126,6 @@ namespace GlitchyEngine.Renderer
Debug.Assert(createResult.Succeeded, scope $"Failed to create swap chain. Message({(int32)createResult}):{createResult}"); Debug.Assert(createResult.Succeeded, scope $"Failed to create swap chain. Message({(int32)createResult}):{createResult}");
factory.Release(); factory.Release();
Dx11Cheater.SwapChain = nativeSwapChain;
} }
nativeSwapChain.GetBuffer<ID3D11Texture2D>(0, let backBuffer); nativeSwapChain.GetBuffer<ID3D11Texture2D>(0, let backBuffer);
@@ -138,11 +133,7 @@ namespace GlitchyEngine.Renderer
RenderTargetViewDescription rtvDesc = .(backBuffer, .Texture2D, backBufferViewFormat); RenderTargetViewDescription rtvDesc = .(backBuffer, .Texture2D, backBufferViewFormat);
_context.nativeDevice.CreateRenderTargetView(backBuffer, &rtvDesc, &nativeBackBufferTarget); _context.nativeDevice.CreateRenderTargetView(backBuffer, &rtvDesc, &nativeBackBufferTarget);
Dx11Cheater.BackbufferTarget = nativeBackBufferTarget; _backBufferViewport = GlitchyEngine.Renderer.Viewport(0, 0, _width, _height, 0.0f, 1.0f);
_backBufferViewport = DirectX.D3D11.Viewport(0, 0, _width, _height, 0.0f, 1.0f);
Dx11Cheater.BackbufferViewport = _backBufferViewport;
backBuffer.Release(); backBuffer.Release();
} }
@@ -7,9 +7,7 @@ using DirectX.Windows.Kernel32;
using DirectX.Windows.WindowMessages; using DirectX.Windows.WindowMessages;
using GlitchyEngine.Events; using GlitchyEngine.Events;
using System.Diagnostics; using System.Diagnostics;
using GlitchyEngine.Platform.DX11;
using GlitchyEngine.Math; using GlitchyEngine.Math;
//using GlitchyEngine.Platform.DX11.Renderer;
using GlitchyEngine.Renderer; using GlitchyEngine.Renderer;
using static System.Windows; using static System.Windows;
@@ -198,7 +196,6 @@ namespace GlitchyEngine
_windowHandle = CreateWindowExW(.None, _windowClass.ClassName, desc.Title.ToScopedNativeWChar!(), .WS_OVERLAPPEDWINDOW | .WS_VISIBLE, _windowHandle = CreateWindowExW(.None, _windowClass.ClassName, desc.Title.ToScopedNativeWChar!(), .WS_OVERLAPPEDWINDOW | .WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, desc.Width, desc.Height, 0, 0, (.)_instanceHandle, null); CW_USEDEFAULT, CW_USEDEFAULT, desc.Width, desc.Height, 0, 0, (.)_instanceHandle, null);
//_graphicsContext = new Dx11Context(_windowHandle);
_graphicsContext = new GraphicsContext(_windowHandle); _graphicsContext = new GraphicsContext(_windowHandle);
_graphicsContext.Init(); _graphicsContext.Init();
@@ -208,8 +205,6 @@ namespace GlitchyEngine
LoadWindowRectangle(); LoadWindowRectangle();
Log.EngineLogger.Trace("Created window \"{}\" ({}, {})", Title, Width, Height); Log.EngineLogger.Trace("Created window \"{}\" ({}, {})", Title, Width, Height);
//DirectX.Init(_windowHandle, (.)Width, (.)Height);
} }
private bool _isResizingOrMoving; private bool _isResizingOrMoving;
+23 -6
View File
@@ -1,15 +1,14 @@
using GlitchyEngine.Math; using GlitchyEngine.Math;
using System;
namespace GlitchyEngine.Renderer namespace GlitchyEngine.Renderer
{ {
public class RenderTarget; public class RenderTarget;
//public abstract class GraphicsContext
public class GraphicsContext public class GraphicsContext
{ {
private RasterizerState _currentRasterizerState; private RasterizerState _currentRasterizerState;
//public abstract SwapChain SwapChain {get;}
public extern SwapChain SwapChain {get;} public extern SwapChain SwapChain {get;}
/** /**
@@ -17,7 +16,6 @@ namespace GlitchyEngine.Renderer
*/ */
//public static extern uint32 MaxRenderTargetCount(); //public static extern uint32 MaxRenderTargetCount();
//public abstract void Init();
public extern void Init(); public extern void Init();
/** /**
@@ -27,7 +25,6 @@ namespace GlitchyEngine.Renderer
* @remarks When @RenderTarget is null the backbuffer will be bound. * @remarks When @RenderTarget is null the backbuffer will be bound.
* @BindRenderTargets has to be called in order to bind the rendertargets. * @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); 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. * @param slot The slot to which the rendertarget will be bound.
* @remarks When @RenderTarget is null the backbuffer 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 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. * @param color The color to clear the render target with.
* @remarks When @renderTarget is null the backbuffer will be cleared. * @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 extern void ClearRenderTarget(RenderTarget renderTarget, ColorRGBA color);
//public abstract void SetViewport(Viewport viewport); //public abstract void SetViewport(Viewport viewport);
@@ -91,5 +86,27 @@ namespace GlitchyEngine.Renderer
{ {
return _currentRasterizerState; 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<CSize>(Viewport[CSize] viewports) where CSize : const int
{
var viewports;
SetViewports(CSize, &viewports);
}
public extern void SetViewports(uint32 viewportsLength, Viewport* viewports);
} }
} }
+4
View File
@@ -2,6 +2,8 @@ namespace GlitchyEngine.Renderer
{ {
public class SwapChain public class SwapChain
{ {
private Viewport _backBufferViewport;
public extern GraphicsContext Context {get;} public extern GraphicsContext Context {get;}
/** /**
@@ -15,6 +17,8 @@ namespace GlitchyEngine.Renderer
*/ */
public extern uint32 Height {get; set;} public extern uint32 Height {get; set;}
public Viewport BackbufferViewport => _backBufferViewport;
public extern void Init(); public extern void Init();
/** /**