Clears the color attachment of the main framebuffer only if needed.

Differential Revision: https://code.wildfiregames.com/D4539
This was SVN commit r26623.
This commit is contained in:
vladislavbelov
2022-03-11 22:26:49 +00:00
parent 61ef7fc1d1
commit 518a1421ab
4 changed files with 23 additions and 36 deletions
+12 -18
View File
@@ -580,23 +580,15 @@ void CSceneRenderer::RenderReflections(
deviceCommandContext->SetFramebuffer(wm.m_ReflectionFramebuffer.get());
deviceCommandContext->ClearFramebuffer();
if (!g_RenderingOptions.GetWaterReflection())
{
m->skyManager.RenderSky(deviceCommandContext);
ogl_WarnIfError();
}
else
{
CShaderDefines reflectionsContext = context;
reflectionsContext.Add(str_PASS_REFLECTIONS, str_1);
// Render terrain and models
RenderPatches(deviceCommandContext, reflectionsContext, CULL_REFLECTIONS);
ogl_WarnIfError();
RenderModels(deviceCommandContext, reflectionsContext, CULL_REFLECTIONS);
ogl_WarnIfError();
RenderTransparentModels(deviceCommandContext, reflectionsContext, CULL_REFLECTIONS, TRANSPARENT);
ogl_WarnIfError();
}
CShaderDefines reflectionsContext = context;
reflectionsContext.Add(str_PASS_REFLECTIONS, str_1);
// Render terrain and models
RenderPatches(deviceCommandContext, reflectionsContext, CULL_REFLECTIONS);
ogl_WarnIfError();
RenderModels(deviceCommandContext, reflectionsContext, CULL_REFLECTIONS);
ogl_WarnIfError();
RenderTransparentModels(deviceCommandContext, reflectionsContext, CULL_REFLECTIONS, TRANSPARENT);
ogl_WarnIfError();
// Particles are always oriented to face the camera in the vertex shader,
// so they don't need the inverted cull face.
@@ -837,7 +829,9 @@ void CSceneRenderer::RenderSubmissions(
{
PROFILE3_GPU("clear buffers");
deviceCommandContext->ClearFramebuffer();
// We don't need to clear the color attachment of the framebuffer if the sky
// is going to be rendered. Because it covers the whole view.
deviceCommandContext->ClearFramebuffer(!m->skyManager.IsSkyVisible(), true, true);
}
m->skyManager.RenderSky(deviceCommandContext);
+3 -10
View File
@@ -25,7 +25,6 @@
#include "graphics/TextureManager.h"
#include "lib/bits.h"
#include "lib/tex/tex.h"
#include "lib/timer.h"
#include "maths/MathUtil.h"
#include "ps/CLogger.h"
#include "ps/ConfigDB.h"
@@ -33,9 +32,7 @@
#include "ps/CStrInternStatic.h"
#include "ps/Filesystem.h"
#include "ps/Game.h"
#include "ps/Loader.h"
#include "ps/VideoMode.h"
#include "ps/World.h"
#include "renderer/backend/gl/Device.h"
#include "renderer/Renderer.h"
#include "renderer/SceneRenderer.h"
@@ -46,7 +43,7 @@
SkyManager::SkyManager()
: m_VertexArray(Renderer::Backend::GL::CBuffer::Type::VERTEX, false)
{
CFG_GET_VAL("showsky", m_RenderSky);
CFG_GET_VAL("showsky", m_SkyVisible);
}
void SkyManager::LoadAndUploadSkyTexturesIfNeeded(
@@ -195,11 +192,8 @@ void SkyManager::RenderSky(
Renderer::Backend::GL::CDeviceCommandContext* deviceCommandContext)
{
GPU_SCOPED_LABEL(deviceCommandContext, "Render sky");
#if CONFIG2_GLES
UNUSED2(deviceCommandContext);
#warning TODO: implement SkyManager::RenderSky for GLES
#else
if (!m_RenderSky)
if (!m_SkyVisible)
return;
// Do nothing unless SetSkySet was called
@@ -251,7 +245,6 @@ void SkyManager::RenderSky(
deviceCommandContext->Draw(0, m_VertexArray.GetNumberOfVertices());
skytech->EndPass();
#endif
}
void SkyManager::CreateSkyCube()
+5 -5
View File
@@ -68,14 +68,14 @@ public:
*/
std::vector<CStrW> GetSkySets() const;
bool GetRenderSky() const
bool IsSkyVisible() const
{
return m_RenderSky;
return m_SkyVisible;
}
void SetRenderSky(bool value)
void SetSkyVisible(bool value)
{
m_RenderSky = value;
m_SkyVisible = value;
}
/**
@@ -87,7 +87,7 @@ public:
private:
void CreateSkyCube();
bool m_RenderSky = true;
bool m_SkyVisible = true;
/// Name of current skyset (a directory within art/textures/skies)
CStrW m_SkySet;
@@ -447,8 +447,8 @@ void ActorViewer::SetEnabled(bool enabled)
m.OldShadows = g_RenderingOptions.GetShadows();
SetShadowsEnabled(m.ShadowsEnabled);
m.OldSky = g_Renderer.GetSceneRenderer().GetSkyManager().GetRenderSky();
g_Renderer.GetSceneRenderer().GetSkyManager().SetRenderSky(false);
m.OldSky = g_Renderer.GetSceneRenderer().GetSkyManager().IsSkyVisible();
g_Renderer.GetSceneRenderer().GetSkyManager().SetSkyVisible(false);
m.OldWater = g_Renderer.GetSceneRenderer().GetWaterManager().m_RenderWater;
g_Renderer.GetSceneRenderer().GetWaterManager().m_RenderWater = m.WaterEnabled;
@@ -457,7 +457,7 @@ void ActorViewer::SetEnabled(bool enabled)
{
// Restore the old renderer state
SetShadowsEnabled(m.OldShadows);
g_Renderer.GetSceneRenderer().GetSkyManager().SetRenderSky(m.OldSky);
g_Renderer.GetSceneRenderer().GetSkyManager().SetSkyVisible(m.OldSky);
g_Renderer.GetSceneRenderer().GetWaterManager().m_RenderWater = m.OldWater;
}
}