mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-09-21 20:06:40 +00:00
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:
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user