1
0
forked from 0ad/0ad

Cleanups ShadowMap, fixes possibly wrong depth format name for GLES.

This was SVN commit r25117.
This commit is contained in:
Vladislav Belov 2021-03-25 12:09:56 +00:00
parent ebc2ec5498
commit 39c8e7f1a2
2 changed files with 15 additions and 52 deletions

View File

@ -15,17 +15,13 @@
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/ */
/*
* Shadow mapping related texture and matrix management
*/
#include "precompiled.h" #include "precompiled.h"
#include "ShadowMap.h" #include "ShadowMap.h"
#include "graphics/LightEnv.h"
#include "graphics/Camera.h" #include "graphics/Camera.h"
#include "graphics/Frustum.h" #include "graphics/Frustum.h"
#include "graphics/LightEnv.h"
#include "graphics/ShaderManager.h" #include "graphics/ShaderManager.h"
#include "gui/GUIMatrix.h" #include "gui/GUIMatrix.h"
#include "lib/bits.h" #include "lib/bits.h"
@ -40,9 +36,6 @@
#include "renderer/Renderer.h" #include "renderer/Renderer.h"
#include "renderer/RenderingOptions.h" #include "renderer/RenderingOptions.h"
///////////////////////////////////////////////////////////////////////////////////////////////////
// ShadowMap implementation
/** /**
* Struct ShadowMapInternals: Internal data for the ShadowMap implementation * Struct ShadowMapInternals: Internal data for the ShadowMap implementation
*/ */
@ -142,8 +135,6 @@ void CalculateBoundsForFixedShadows(
bbaa->Expand(insets); bbaa->Expand(insets);
} }
///////////////////////////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
ShadowMap::ShadowMap() ShadowMap::ShadowMap()
{ {
m = new ShadowMapInternals; m = new ShadowMapInternals;
@ -171,7 +162,6 @@ ShadowMap::ShadowMap()
CFG_GET_VAL("shadowsfixeddistance", m->FixedShadowsDistance); CFG_GET_VAL("shadowsfixeddistance", m->FixedShadowsDistance);
} }
ShadowMap::~ShadowMap() ShadowMap::~ShadowMap()
{ {
if (m->Texture) if (m->Texture)
@ -184,7 +174,6 @@ ShadowMap::~ShadowMap()
delete m; delete m;
} }
///////////////////////////////////////////////////////////////////////////////////////////////////
// Force the texture/buffer/etc to be recreated, particularly when the renderer's // Force the texture/buffer/etc to be recreated, particularly when the renderer's
// size has changed // size has changed
void ShadowMap::RecreateTexture() void ShadowMap::RecreateTexture()
@ -203,7 +192,6 @@ void ShadowMap::RecreateTexture()
// (Texture will be constructed in next SetupFrame) // (Texture will be constructed in next SetupFrame)
} }
//////////////////////////////////////////////////////////////////////////////
// SetupFrame: camera and light direction for this frame // SetupFrame: camera and light direction for this frame
void ShadowMap::SetupFrame(const CCamera& camera, const CVector3D& lightdir) void ShadowMap::SetupFrame(const CCamera& camera, const CVector3D& lightdir)
{ {
@ -270,8 +258,6 @@ void ShadowMap::SetupFrame(const CCamera& camera, const CVector3D& lightdir)
CalculateBoundsForFixedShadows(camera, m->LightTransform, camera.GetNearPlane(), m->FixedShadowsDistance, &m->FixedFrustumBounds); CalculateBoundsForFixedShadows(camera, m->LightTransform, camera.GetNearPlane(), m->FixedShadowsDistance, &m->FixedFrustumBounds);
} }
//////////////////////////////////////////////////////////////////////////////
// AddShadowedBound: add a world-space bounding box to the bounds of shadowed // AddShadowedBound: add a world-space bounding box to the bounds of shadowed
// objects // objects
void ShadowMap::AddShadowCasterBound(const CBoundingBoxAligned& bounds) void ShadowMap::AddShadowCasterBound(const CBoundingBoxAligned& bounds)
@ -318,7 +304,6 @@ CFrustum ShadowMap::GetShadowCasterCullFrustum()
return frustum; return frustum;
} }
///////////////////////////////////////////////////////////////////////////////////////////////////
// CalcShadowMatrices: calculate required matrices for shadow map generation - the light's // CalcShadowMatrices: calculate required matrices for shadow map generation - the light's
// projection and transformation matrices // projection and transformation matrices
void ShadowMapInternals::CalcShadowMatrices() void ShadowMapInternals::CalcShadowMatrices()
@ -423,9 +408,6 @@ void ShadowMapInternals::CalcShadowMatrices()
TextureMatrix = lightToTex * LightTransform; TextureMatrix = lightToTex * LightTransform;
} }
//////////////////////////////////////////////////////////////////////////
// Create the shadow map // Create the shadow map
void ShadowMapInternals::CreateTexture() void ShadowMapInternals::CreateTexture()
{ {
@ -494,19 +476,24 @@ void ShadowMapInternals::CreateTexture()
EffectiveWidth = Width; EffectiveWidth = Width;
EffectiveHeight = Height; EffectiveHeight = Height;
const char* formatname; GLenum format;
const char* formatName;
switch(DepthTextureBits) #if CONFIG2_GLES
format = GL_DEPTH_COMPONENT;
formatName = "DEPTH_COMPONENT";
#else
switch ( DepthTextureBits )
{ {
case 16: formatname = "DEPTH_COMPONENT16"; break; case 16: format = GL_DEPTH_COMPONENT16; formatName = "DEPTH_COMPONENT16"; break;
case 24: formatname = "DEPTH_COMPONENT24"; break; case 24: format = GL_DEPTH_COMPONENT24; formatName = "DEPTH_COMPONENT24"; break;
case 32: formatname = "DEPTH_COMPONENT32"; break; case 32: format = GL_DEPTH_COMPONENT32; formatName = "DEPTH_COMPONENT32"; break;
default: formatname = "DEPTH_COMPONENT"; break; default: format = GL_DEPTH_COMPONENT; formatName = "DEPTH_COMPONENT"; break;
} }
#endif
ENSURE(formatName);
LOGMESSAGE("Creating shadow texture (size %dx%d) (format = %s)", LOGMESSAGE("Creating shadow texture (size %dx%d) (format = %s)",
Width, Height, formatname); Width, Height, formatName);
if (g_RenderingOptions.GetShadowAlphaFix()) if (g_RenderingOptions.GetShadowAlphaFix())
{ {
@ -522,20 +509,6 @@ void ShadowMapInternals::CreateTexture()
glGenTextures(1, &Texture); glGenTextures(1, &Texture);
g_Renderer.BindTexture(0, Texture); g_Renderer.BindTexture(0, Texture);
GLenum format;
#if CONFIG2_GLES
format = GL_DEPTH_COMPONENT;
#else
switch (DepthTextureBits)
{
case 16: format = GL_DEPTH_COMPONENT16; break;
case 24: format = GL_DEPTH_COMPONENT24; break;
case 32: format = GL_DEPTH_COMPONENT32; break;
default: format = GL_DEPTH_COMPONENT; break;
}
#endif
glTexImage2D(GL_TEXTURE_2D, 0, format, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL); glTexImage2D(GL_TEXTURE_2D, 0, format, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
// GLES requires type == UNSIGNED_SHORT or UNSIGNED_INT // GLES requires type == UNSIGNED_SHORT or UNSIGNED_INT
@ -599,7 +572,6 @@ void ShadowMapInternals::CreateTexture()
} }
} }
///////////////////////////////////////////////////////////////////////////////////////////////////
// Set up to render into shadow map texture // Set up to render into shadow map texture
void ShadowMap::BeginRender() void ShadowMap::BeginRender()
{ {
@ -644,8 +616,6 @@ void ShadowMap::BeginRender()
glScissor(1,1, m->EffectiveWidth-2, m->EffectiveHeight-2); glScissor(1,1, m->EffectiveWidth-2, m->EffectiveHeight-2);
} }
///////////////////////////////////////////////////////////////////////////////////////////////////
// Finish rendering into shadow map texture // Finish rendering into shadow map texture
void ShadowMap::EndRender() void ShadowMap::EndRender()
{ {
@ -674,7 +644,6 @@ void ShadowMap::BindTo(const CShaderProgramPtr& shader) const
shader->Uniform(str_shadowScale, m->Width, m->Height, 1.0f / m->Width, 1.0f / m->Height); shader->Uniform(str_shadowScale, m->Width, m->Height, 1.0f / m->Width, 1.0f / m->Height);
} }
///////////////////////////////////////////////////////////////////////////////////////////////////
// Depth texture bits // Depth texture bits
int ShadowMap::GetDepthTextureBits() const int ShadowMap::GetDepthTextureBits() const
{ {
@ -696,8 +665,6 @@ void ShadowMap::SetDepthTextureBits(int bits)
} }
} }
//////////////////////////////////////////////////////////////////////////////
void ShadowMap::RenderDebugBounds() void ShadowMap::RenderDebugBounds()
{ {
CShaderTechniquePtr shaderTech = g_Renderer.GetShaderManager().LoadEffect(str_gui_solid); CShaderTechniquePtr shaderTech = g_Renderer.GetShaderManager().LoadEffect(str_gui_solid);

View File

@ -15,10 +15,6 @@
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
*/ */
/*
* Shadow mapping related texture and matrix management
*/
#ifndef INCLUDED_SHADOWMAP #ifndef INCLUDED_SHADOWMAP
#define INCLUDED_SHADOWMAP #define INCLUDED_SHADOWMAP