forked from 0ad/0ad
Don't bother initialising shadow map textures with data that will never be used.
Add some profiling in the shadow rendering code. This was SVN commit r8934.
This commit is contained in:
parent
04dcbd294c
commit
c7f647ae73
@ -820,21 +820,30 @@ void CRenderer::RenderShadowMap()
|
||||
glCullFace(GL_FRONT);
|
||||
|
||||
if (m->shadow->GetUseDepthTexture())
|
||||
{
|
||||
PROFILE("render patches");
|
||||
m->terrainRenderer->RenderPatches();
|
||||
}
|
||||
|
||||
glCullFace(GL_BACK);
|
||||
|
||||
// Render models that aren't closed
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
m->Model.Normal->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
if (m->Model.Normal != m->Model.NormalInstancing)
|
||||
m->Model.NormalInstancing->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
m->Model.Player->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
if (m->Model.Player != m->Model.PlayerInstancing)
|
||||
m->Model.PlayerInstancing->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
{
|
||||
PROFILE("render models");
|
||||
m->Model.Normal->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
if (m->Model.Normal != m->Model.NormalInstancing)
|
||||
m->Model.NormalInstancing->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
m->Model.Player->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
if (m->Model.Player != m->Model.PlayerInstancing)
|
||||
m->Model.PlayerInstancing->Render(m->Model.ModSolidColor, MODELFLAG_CASTSHADOWS);
|
||||
}
|
||||
|
||||
m->Model.Transp->Render(transparentShadows, MODELFLAG_CASTSHADOWS);
|
||||
{
|
||||
PROFILE("render transparent models");
|
||||
m->Model.Transp->Render(transparentShadows, MODELFLAG_CASTSHADOWS);
|
||||
}
|
||||
|
||||
glEnable(GL_CULL_FACE);
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "lib/bits.h"
|
||||
#include "lib/ogl.h"
|
||||
#include "ps/CLogger.h"
|
||||
#include "ps/Profile.h"
|
||||
|
||||
#include "graphics/LightEnv.h"
|
||||
|
||||
@ -337,8 +338,6 @@ void ShadowMapInternals::CreateTexture()
|
||||
glGenTextures(1, &Texture);
|
||||
g_Renderer.BindTexture(0, Texture);
|
||||
|
||||
int size = Width*Height;
|
||||
|
||||
if (UseDepthTexture)
|
||||
{
|
||||
GLenum format;
|
||||
@ -351,11 +350,7 @@ void ShadowMapInternals::CreateTexture()
|
||||
default: format = GL_DEPTH_COMPONENT; break;
|
||||
}
|
||||
|
||||
float* buf = new float[size];
|
||||
for (int i = 0; i < size; i++)
|
||||
buf[i] = 1.0;
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, format, Width, Height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, buf);
|
||||
delete[] buf;
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, format, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
|
||||
@ -363,11 +358,7 @@ void ShadowMapInternals::CreateTexture()
|
||||
}
|
||||
else
|
||||
{
|
||||
u32* buf = new u32[size];
|
||||
for (int i = 0; i < size; i++)
|
||||
buf[i] = 0x00ffffff;
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE8, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
delete[] buf;
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE8, Width, Height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
|
||||
}
|
||||
|
||||
// set texture parameters
|
||||
@ -418,6 +409,7 @@ void ShadowMap::BeginRender()
|
||||
|
||||
if (m->Framebuffer)
|
||||
{
|
||||
PROFILE("bind framebuffer");
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m->Framebuffer);
|
||||
}
|
||||
@ -425,11 +417,13 @@ void ShadowMap::BeginRender()
|
||||
// clear buffers
|
||||
if (m->UseDepthTexture)
|
||||
{
|
||||
PROFILE("clear depth texture");
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
glColorMask(0,0,0,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
PROFILE("clear shadow texture");
|
||||
glClearColor(1,1,1,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
}
|
||||
@ -459,12 +453,14 @@ void ShadowMap::EndRender()
|
||||
// copy result into shadow map texture
|
||||
if (m->Framebuffer)
|
||||
{
|
||||
PROFILE("unbind framebuffer");
|
||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!g_Renderer.GetDisableCopyShadow())
|
||||
{
|
||||
PROFILE("copy shadow texture");
|
||||
g_Renderer.BindTexture(0, m->Texture);
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, m->EffectiveWidth, m->EffectiveHeight);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user