From 9733d90aefd0a6255eb60249bd9010c1298e2803 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Thu, 7 Sep 2023 20:51:18 -0400 Subject: [PATCH] Added toggle for SSR --- Editor/src/Windows/EditorInterface.cpp | 19 ++++++++++-- Nuake/src/Rendering/SceneRenderer.cpp | 42 ++++++++++++++++++-------- Nuake/src/Scene/Lighting/Environment.h | 2 ++ 3 files changed, 48 insertions(+), 15 deletions(-) diff --git a/Editor/src/Windows/EditorInterface.cpp b/Editor/src/Windows/EditorInterface.cpp index 481e5004..0196ef75 100644 --- a/Editor/src/Windows/EditorInterface.cpp +++ b/Editor/src/Windows/EditorInterface.cpp @@ -867,10 +867,25 @@ namespace Nuake { ImGui::TableSetupColumn("set", 0, 0.6); ImGui::TableSetupColumn("reset", 0, 0.1); - ImGui::TableNextColumn(); - SSR* ssr = scene->m_SceneRenderer->mSSR.get(); { + ImGui::TableNextColumn(); + // Title + ImGui::Text("SSR"); + ImGui::TableNextColumn(); + + ImGui::Checkbox("##SSREnabled", &env->SSREnabled); + ImGui::TableNextColumn(); + + // Reset button + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1, 1, 1, 0)); + std::string resetSSR = ICON_FA_UNDO + std::string("##resetSSR"); + if (ImGui::Button(resetSSR.c_str())) env->SSREnabled = false; + ImGui::PopStyleColor(); + } + + { + ImGui::TableNextColumn(); // Title ImGui::Text("SSR RayStep"); ImGui::TableNextColumn(); diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 01b75a21..56bf2269 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -76,7 +76,7 @@ namespace Nuake sceneEnv->mBloom->Resize(framebuffer.GetSize()); sceneEnv->mBloom->Draw(); - finalOutput = scene.GetEnvironment()->mBloom->GetOutput(); + finalOutput = sceneEnv->mBloom->GetOutput(); } const auto view = scene.m_Registry.view(); @@ -88,7 +88,7 @@ namespace Nuake lightList.push_back(lc); } - if (scene.GetEnvironment()->VolumetricEnabled) + if (sceneEnv->VolumetricEnabled) { sceneEnv->mVolumetric->Resize(framebuffer.GetSize()); sceneEnv->mVolumetric->SetDepth(mGBuffer->GetTexture(GL_DEPTH_ATTACHMENT).get()); @@ -139,20 +139,36 @@ namespace Nuake } mToneMapBuffer->Unbind(); - mSSR->Resize(framebuffer.GetSize()); - mSSR->Draw(mGBuffer.get(), framebuffer.GetTexture(), mView, mProjection, scene.GetCurrentCamera()); - - framebuffer.Bind(); + if (sceneEnv->SSREnabled) { - RenderCommand::Clear(); - Shader* shader = ShaderManager::GetShader("resources/Shaders/combine.shader"); - shader->Bind(); + mSSR->Resize(framebuffer.GetSize()); + mSSR->Draw(mGBuffer.get(), framebuffer.GetTexture(), mView, mProjection, scene.GetCurrentCamera()); - shader->SetUniformTex("u_Source", mToneMapBuffer->GetTexture().get(), 0); - shader->SetUniformTex("u_Source2", mSSR->OutputFramebuffer->GetTexture().get(), 1); - Renderer::DrawQuad(); + framebuffer.Bind(); + { + RenderCommand::Clear(); + Shader* shader = ShaderManager::GetShader("resources/Shaders/combine.shader"); + shader->Bind(); + + shader->SetUniformTex("u_Source", mToneMapBuffer->GetTexture().get(), 0); + shader->SetUniformTex("u_Source2", mSSR->OutputFramebuffer->GetTexture().get(), 1); + Renderer::DrawQuad(); + } + framebuffer.Unbind(); + } + else + { + framebuffer.Bind(); + { + RenderCommand::Clear(); + Shader* shader = ShaderManager::GetShader("resources/Shaders/copy.shader"); + shader->Bind(); + + shader->SetUniformTex("u_Source", mToneMapBuffer->GetTexture().get(), 0); + Renderer::DrawQuad(); + } + framebuffer.Unbind(); } - framebuffer.Unbind(); RenderCommand::Enable(RendererEnum::DEPTH_TEST); Renderer::EndDraw(); diff --git a/Nuake/src/Scene/Lighting/Environment.h b/Nuake/src/Scene/Lighting/Environment.h index 33918997..55e41f07 100644 --- a/Nuake/src/Scene/Lighting/Environment.h +++ b/Nuake/src/Scene/Lighting/Environment.h @@ -42,6 +42,8 @@ namespace Nuake bool SSAOEnabled = true; Scope mSSAO; + bool SSREnabled = false; + Vector3 ClearColor; glm::vec4 m_AmbientColor;