From 0148fe0915c2c6f0357609c9b3e1c99d713fcd2b Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Sun, 21 Nov 2021 21:26:31 +0500 Subject: Added PostProcess class --- src/RenderConfigs.hpp | 60 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 13 deletions(-) (limited to 'src/RenderConfigs.hpp') diff --git a/src/RenderConfigs.hpp b/src/RenderConfigs.hpp index 9b535ca..793dbb2 100644 --- a/src/RenderConfigs.hpp +++ b/src/RenderConfigs.hpp @@ -2,11 +2,49 @@ #include "Gal.hpp" +std::shared_ptr LoadVertexShader(std::string_view assetPath); + +std::shared_ptr LoadPixelShader(std::string_view assetPath); + +class PostProcess { + std::shared_ptr framebuffer; + std::shared_ptr fbBuffer; + std::shared_ptr pipeline; + std::shared_ptr pipelineInstance; + std::shared_ptr result; +public: + + PostProcess( + std::shared_ptr pixelShader, + std::vector>> inputTextures, + std::vector> inputParameters, + size_t width, + size_t height, + Gal::Format format, + Gal::Filtering filtering); + + void Clear() { + framebuffer->Clear(); + } + + void Render() { + pipeline->Activate(); + pipelineInstance->Activate(); + pipelineInstance->Render(0, 6); + } + + template + void SetShaderParameter(std::string_view name, T value) { + pipeline->SetShaderParameter(name, value); + } + + std::shared_ptr GetResultTexture() { + return result; + } +}; + class Gbuffer { - std::shared_ptr lightFramebuffer; - std::shared_ptr lightBuffer; - std::shared_ptr lightPipeline; - std::shared_ptr lightPipelineInstance; + std::unique_ptr lightingPass; std::shared_ptr color; //RGB - color std::shared_ptr normal; //RGB - normal std::shared_ptr addColor; //RGB - addColor @@ -14,8 +52,6 @@ class Gbuffer { std::shared_ptr depthStencil; std::shared_ptr geomFramebuffer; - std::shared_ptr finalColor; - public: Gbuffer(size_t geomW, size_t geomH, size_t lightW, size_t lightH); @@ -24,22 +60,20 @@ public: } std::shared_ptr GetFinalTexture() { - return finalColor; + return lightingPass->GetResultTexture(); } void Render() { - lightPipeline->Activate(); - lightPipelineInstance->Activate(); - lightPipelineInstance->Render(0, 6); + lightingPass->Render(); } void Clear() { geomFramebuffer->Clear(); - lightFramebuffer->Clear(); + lightingPass->Clear(); } void SetDayTime(float dayTime) { - lightPipeline->SetShaderParameter("dayTime", dayTime); + lightingPass->SetShaderParameter("dayTime", dayTime); } int GetMaxRenderBuffers() { @@ -47,6 +81,6 @@ public: } void SetRenderBuff(int renderBuff) { - lightPipeline->SetShaderParameter("renderBuff", renderBuff); + lightingPass->SetShaderParameter("renderBuff", renderBuff); } }; -- cgit v1.2.3