From dffd43a36f315d11bf81894041e54da33c4d1ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sun, 27 Nov 2022 17:18:16 +0100 Subject: [PATCH] RenderAPI changes and removed Context parameter from Effect and Material --- GlitchyEditor/src/TextureViewer.bf | 2 +- GlitchyEngine/src/Application.bf | 2 +- GlitchyEngine/src/Input.bf | 2 - .../DX11/Renderer/Dx11GraphicsContext.bf | 4 +- .../Platform/DX11/Renderer/Dx11RendererAPI.bf | 12 +++++- GlitchyEngine/src/Renderer/Effect.bf | 42 +++++++++++-------- GlitchyEngine/src/Renderer/GraphicsContext.bf | 4 +- GlitchyEngine/src/Renderer/Material.bf | 5 ++- GlitchyEngine/src/Renderer/RenderCommand.bf | 10 +++++ GlitchyEngine/src/Renderer/Renderer.bf | 40 ++++++++++-------- GlitchyEngine/src/Renderer/Renderer2D.bf | 6 ++- GlitchyEngine/src/Renderer/RendererAPI.bf | 4 ++ GlitchyEngine/src/World/Scene.bf | 6 ++- Sandbox/src/TextureViewer.bf | 2 +- 14 files changed, 89 insertions(+), 52 deletions(-) diff --git a/GlitchyEditor/src/TextureViewer.bf b/GlitchyEditor/src/TextureViewer.bf index b0566e5..a1adc3b 100644 --- a/GlitchyEditor/src/TextureViewer.bf +++ b/GlitchyEditor/src/TextureViewer.bf @@ -40,7 +40,7 @@ namespace GlitchyEditor public this() { - _context = Renderer.[Friend]_context..AddRef(); + _context = Application.Get().Window.Context..AddRef(); InitEffect(); InitState(); diff --git a/GlitchyEngine/src/Application.bf b/GlitchyEngine/src/Application.bf index d1c7bf8..b35eeba 100644 --- a/GlitchyEngine/src/Application.bf +++ b/GlitchyEngine/src/Application.bf @@ -68,7 +68,7 @@ namespace GlitchyEngine _effectLibrary = new EffectLibrary(); - Renderer.Init(_window.Context, _effectLibrary); + Renderer.Init(_effectLibrary); #if IMGUI _imGuiLayer = new ImGuiLayer(); diff --git a/GlitchyEngine/src/Input.bf b/GlitchyEngine/src/Input.bf index a1d9173..4043878 100644 --- a/GlitchyEngine/src/Input.bf +++ b/GlitchyEngine/src/Input.bf @@ -160,8 +160,6 @@ namespace GlitchyEngine public static void NewFrame() { - Log.EngineLogger.Info($"{Input.GetMousePosition()}"); - if (_lockPositions.Count > 0) { var position = _lockPositions.Back.Position; diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf index 3cd6605..6985b6c 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11GraphicsContext.bf @@ -348,12 +348,12 @@ namespace GlitchyEngine.Renderer NativeContext.VertexShader.SetShaderResources(0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT, (.)voidArray); } - public override void SetVertexShader(VertexShader vertexShader) + public override void BindVertexShader(VertexShader vertexShader) { BindShaderToStage(vertexShader); } - public override void SetPixelShader(PixelShader pixelShader) + public override void BindPixelShader(PixelShader pixelShader) { BindShaderToStage(pixelShader); } diff --git a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RendererAPI.bf b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RendererAPI.bf index 7042772..da51142 100644 --- a/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RendererAPI.bf +++ b/GlitchyEngine/src/Platform/DX11/Renderer/Dx11RendererAPI.bf @@ -85,7 +85,7 @@ namespace GlitchyEngine.Renderer SetBlendState(_nonblendingState); _clearUintFx.Variables["ClearValue"].SetData(value); - _clearUintFx.Bind(_context); + _clearUintFx.Bind(); FullscreenQuad.Draw(); @@ -254,6 +254,16 @@ namespace GlitchyEngine.Renderer { _context.BindConstantBuffer(buffer, slot, stage); } + + public override void BindVertexShader(VertexShader vertexShader) + { + _context.BindVertexShader(vertexShader); + } + + public override void BindPixelShader(PixelShader pixelShader) + { + _context.BindPixelShader(pixelShader); + } } } diff --git a/GlitchyEngine/src/Renderer/Effect.bf b/GlitchyEngine/src/Renderer/Effect.bf index c72cb9e..35daaad 100644 --- a/GlitchyEngine/src/Renderer/Effect.bf +++ b/GlitchyEngine/src/Renderer/Effect.bf @@ -197,10 +197,7 @@ namespace GlitchyEngine.Renderer { Debug.Profiler.ProfileRendererFunction!(); - ref TextureEntry entry = ref _textures[name]; - - entry.BoundTexture.Release(); - entry.BoundTexture = texture.GetViewBinding(); + [Inline]InternalSetTexture(name, texture.GetViewBinding()); } public void SetTexture(String name, RenderTargetGroup renderTargetGroup, int32 firstTarget, uint32 targetCount = 1) @@ -210,24 +207,31 @@ namespace GlitchyEngine.Renderer if (targetCount != 1) Runtime.NotImplemented("Binding multiple rendertargets to a slot is not yet implemented."); - ref TextureEntry entry = ref _textures[name]; - - entry.BoundTexture.Release(); - //entry.BoundTexture = .RenderTargetGroup(renderTargetGroup..AddRef(), firstTarget, targetCount); - entry.BoundTexture = renderTargetGroup.GetViewBinding(firstTarget); + // We have to release the viewBinding because GetViewBinding internally increases the counter + [Inline]InternalSetTexture(name, renderTargetGroup.GetViewBinding(firstTarget)); } public void SetTexture(String name, TextureViewBinding textureViewBinding) { Debug.Profiler.ProfileRendererFunction!(); + [Inline]InternalSetTexture(name, textureViewBinding..AddRef()); + } + + private void InternalSetTexture(String name, TextureViewBinding textureViewBinding) + { + Debug.Profiler.ProfileRendererFunction!(); + ref TextureEntry entry = ref _textures[name]; entry.BoundTexture.Release(); - entry.BoundTexture = textureViewBinding..AddRef(); + entry.BoundTexture = textureViewBinding; + + entry.VsSlot?.BoundTexture..Release() = entry.BoundTexture..AddRef(); + entry.PsSlot?.BoundTexture..Release() = entry.BoundTexture..AddRef(); } - private void ApplyTextures() + /*private void ApplyTextures() { Debug.Profiler.ProfileRendererFunction!(); @@ -241,11 +245,13 @@ namespace GlitchyEngine.Renderer entry.PsSlot?.BoundTexture = entry.BoundTexture; entry.PsSlot?.BoundTexture.AddRef(); } - } + }*/ - private void ApplyChanges() + public void ApplyChanges() { Debug.Profiler.ProfileRendererFunction!(); + + //ApplyTextures(); for(let buffer in _bufferCollection) { @@ -256,15 +262,15 @@ namespace GlitchyEngine.Renderer } } - public void Bind(GraphicsContext context) + public void Bind() { Debug.Profiler.ProfileRendererFunction!(); - ApplyTextures(); - ApplyChanges(); + //ApplyTextures(); + //ApplyChanges(); - context.SetVertexShader(_vs); - context.SetPixelShader(_ps); + RenderCommand.BindVertexShader(_vs); + RenderCommand.BindPixelShader(_ps); } private void CompileFromFile(String filename, String vsEntry, String psEntry) diff --git a/GlitchyEngine/src/Renderer/GraphicsContext.bf b/GlitchyEngine/src/Renderer/GraphicsContext.bf index 4819ec7..3ba694f 100644 --- a/GlitchyEngine/src/Renderer/GraphicsContext.bf +++ b/GlitchyEngine/src/Renderer/GraphicsContext.bf @@ -109,9 +109,9 @@ namespace GlitchyEngine.Renderer public extern void SetPrimitiveTopology(PrimitiveTopology primitiveTopology); - public extern void SetVertexShader(VertexShader vertexShader); + public extern void BindVertexShader(VertexShader vertexShader); - public extern void SetPixelShader(PixelShader pixelShader); + public extern void BindPixelShader(PixelShader pixelShader); public extern void UnbindTextures(); diff --git a/GlitchyEngine/src/Renderer/Material.bf b/GlitchyEngine/src/Renderer/Material.bf index 28af7bb..270a9ae 100644 --- a/GlitchyEngine/src/Renderer/Material.bf +++ b/GlitchyEngine/src/Renderer/Material.bf @@ -65,7 +65,7 @@ namespace GlitchyEngine.Renderer /** * Binds the materials Shaders and Parameters to the given context. */ - public void Bind(GraphicsContext context) + public void Bind() { Debug.Profiler.ProfileRendererFunction!(); @@ -79,7 +79,8 @@ namespace GlitchyEngine.Renderer variable.Variable.SetRawData(RawPointer!(variable.Offset)); } - _effect.Bind(context); + _effect.ApplyChanges(); + _effect.Bind(); } /** @brief Sets a texture of the material. diff --git a/GlitchyEngine/src/Renderer/RenderCommand.bf b/GlitchyEngine/src/Renderer/RenderCommand.bf index d17d1cc..197ec3a 100644 --- a/GlitchyEngine/src/Renderer/RenderCommand.bf +++ b/GlitchyEngine/src/Renderer/RenderCommand.bf @@ -128,5 +128,15 @@ namespace GlitchyEngine.Renderer { _rendererAPI.BindConstantBuffer(buffer, slot, stage); } + + public static void BindVertexShader(VertexShader vertexShader) + { + _rendererAPI.BindVertexShader(vertexShader); + } + + public static void BindPixelShader(PixelShader pixelShader) + { + _rendererAPI.BindPixelShader(pixelShader); + } } } diff --git a/GlitchyEngine/src/Renderer/Renderer.bf b/GlitchyEngine/src/Renderer/Renderer.bf index 4088cbb..f0441dc 100644 --- a/GlitchyEngine/src/Renderer/Renderer.bf +++ b/GlitchyEngine/src/Renderer/Renderer.bf @@ -77,8 +77,6 @@ namespace GlitchyEngine.Renderer } } - static internal GraphicsContext _context; - static SceneConstants _sceneConstants; static Effect LineEffect; @@ -106,12 +104,10 @@ namespace GlitchyEngine.Renderer private Vector3 _padding; } - public static void Init(GraphicsContext context, EffectLibrary effectLibrary) + public static void Init(EffectLibrary effectLibrary) { Debug.Profiler.ProfileFunction!(); - _context = context..AddRef(); - RenderCommand.Init(); Renderer2D.Init(); FullscreenQuad.Init(); @@ -130,8 +126,6 @@ namespace GlitchyEngine.Renderer FullscreenQuad.Deinit(); Renderer2D.Deinit(); - - _context.ReleaseRef(); } static void InitLineRenderer(EffectLibrary effectLibrary) @@ -321,7 +315,7 @@ namespace GlitchyEngine.Renderer _objectBuffer.SetData(objectData, 0, .WriteDiscard); } - entry.Material.Bind(_context); + entry.Material.Bind(); RenderCommand.BindConstantBuffer(_sceneBuffer, 0, .All); RenderCommand.BindConstantBuffer(_objectBuffer, 1, .All); @@ -366,8 +360,11 @@ namespace GlitchyEngine.Renderer TestFullscreenEffect.Variables["Scaling"].SetData(scaling); - TestFullscreenEffect.Bind(_context); - + TestFullscreenEffect.ApplyChanges(); + TestFullscreenEffect.Bind(); + + //RenderCommand.BindEffect(TestFullscreenEffect); + FullscreenQuad.Draw(); } @@ -379,12 +376,16 @@ namespace GlitchyEngine.Renderer RenderCommand.SetBlendState(_gBufferBlend); RenderCommand.UnbindRenderTargets(); - RenderCommand.SetRenderTargetGroup(_sceneConstants.CompositionTarget, true); RenderCommand.BindRenderTargets(); - + RenderCommand.SetRenderTargetGroup(_sceneConstants.CompositionTarget, true); + // TODO: Postprocessing effects s_tonemappingEffect.SetTexture("CameraTarget", _sceneConstants.CameraTarget, 0); - s_tonemappingEffect.Bind(_context); + s_tonemappingEffect.ApplyChanges(); + s_tonemappingEffect.Bind(); + + RenderCommand.BindRenderTargets(); + //RenderCommand.BindEffect(s_tonemappingEffect); FullscreenQuad.Draw(); @@ -413,8 +414,9 @@ namespace GlitchyEngine.Renderer effect.Variables["ViewProjection"].SetData(_sceneConstants.ViewProjection); effect.Variables["Transform"].SetData(transform); - - effect.Bind(_context); + + effect.ApplyChanges(); + effect.Bind(); geometry.Bind(); RenderCommand.DrawIndexed(geometry); @@ -534,7 +536,8 @@ namespace GlitchyEngine.Renderer LineEffect.Variables["ViewProjection"].SetData(_sceneConstants.ViewProjection * transform); LineEffect.Variables["Color"].SetData(color); - LineEffect.Bind(_context); + LineEffect.ApplyChanges(); + LineEffect.Bind(); LineGeometry.Bind(); RenderCommand.DrawIndexed(LineGeometry); @@ -554,8 +557,9 @@ namespace GlitchyEngine.Renderer LineVertices.SetData(Vector4[2](start, end), 0, .WriteDiscard); LineEffect.Variables["ViewProjection"].SetData(viewProjection * transform); LineEffect.Variables["Color"].SetData(color); - - LineEffect.Bind(_context); + + LineEffect.ApplyChanges(); + LineEffect.Bind(); LineGeometry.Bind(); RenderCommand.DrawIndexed(LineGeometry); diff --git a/GlitchyEngine/src/Renderer/Renderer2D.bf b/GlitchyEngine/src/Renderer/Renderer2D.bf index d5ac7e4..abcec07 100644 --- a/GlitchyEngine/src/Renderer/Renderer2D.bf +++ b/GlitchyEngine/src/Renderer/Renderer2D.bf @@ -568,7 +568,8 @@ namespace GlitchyEngine.Renderer s_quadInstanceBuffer.SetData(s_rawQuadInstances.Ptr, s_setInstances, 0, .WriteDiscard); - s_currentEffect.Bind(Renderer._context); + s_currentEffect.ApplyChanges(); + s_currentEffect.Bind(); s_quadBatchBinding.InstanceCount = s_setInstances; s_quadBatchBinding.Bind(); RenderCommand.DrawIndexedInstanced(s_quadBatchBinding); @@ -587,7 +588,8 @@ namespace GlitchyEngine.Renderer s_circleInstanceBuffer.SetData(s_rawCircleInstances.Ptr, s_setInstances, 0, .WriteDiscard); - s_currentCircleEffect.Bind(Renderer._context); + s_currentCircleEffect.ApplyChanges(); + s_currentCircleEffect.Bind(); s_circleBatchBinding.InstanceCount = s_setInstances; s_circleBatchBinding.Bind(); RenderCommand.DrawIndexedInstanced(s_circleBatchBinding); diff --git a/GlitchyEngine/src/Renderer/RendererAPI.bf b/GlitchyEngine/src/Renderer/RendererAPI.bf index fa815aa..5d60b74 100644 --- a/GlitchyEngine/src/Renderer/RendererAPI.bf +++ b/GlitchyEngine/src/Renderer/RendererAPI.bf @@ -64,5 +64,9 @@ namespace GlitchyEngine.Renderer public extern void UnbindTextures(); public extern void BindConstantBuffer(Buffer buffer, int slot, ShaderStage stage); + + public extern void BindVertexShader(VertexShader vertexShader); + + public extern void BindPixelShader(PixelShader pixelShader); } } diff --git a/GlitchyEngine/src/World/Scene.bf b/GlitchyEngine/src/World/Scene.bf index fc78dd4..3f50dae 100644 --- a/GlitchyEngine/src/World/Scene.bf +++ b/GlitchyEngine/src/World/Scene.bf @@ -270,7 +270,8 @@ namespace GlitchyEngine.World _gammaCorrectEffect.SetTexture("Texture", _compositeTarget, 0); // TODO: iiihhh - _gammaCorrectEffect.Bind(Application.Get().Window.Context); + _gammaCorrectEffect.ApplyChanges(); + _gammaCorrectEffect.Bind(); FullscreenQuad.Draw(); } @@ -483,7 +484,8 @@ namespace GlitchyEngine.World _gammaCorrectEffect.SetTexture("Texture", _compositeTarget, 0); // TODO: iiihhh - _gammaCorrectEffect.Bind(Application.Get().Window.Context); + _gammaCorrectEffect.ApplyChanges(); + _gammaCorrectEffect.Bind(); FullscreenQuad.Draw(); } diff --git a/Sandbox/src/TextureViewer.bf b/Sandbox/src/TextureViewer.bf index 4641bff..751107f 100644 --- a/Sandbox/src/TextureViewer.bf +++ b/Sandbox/src/TextureViewer.bf @@ -39,7 +39,7 @@ namespace Sandbox public this() { - _context = Renderer.[Friend]_context..AddRef(); + _context = Application.Get().Window.Context..AddRef(); InitEffect(); InitState();