Add renderer.disableCopyShadow for debugging purposes.
Add renderer.depthTextureBits configuration value. This was SVN commit r3518.
This commit is contained in:
parent
7396587f6e
commit
f903b83674
@ -237,6 +237,7 @@ CRenderer::CRenderer()
|
||||
m_SortAllTransparent = false;
|
||||
m_FastNormals = true;
|
||||
m_DisplayFrustum = false;
|
||||
m_DisableCopyShadow = false;
|
||||
|
||||
m_VertexShader = 0;
|
||||
|
||||
@ -1291,6 +1292,21 @@ void CRenderer::JSI_SetUseDepthTexture(JSContext* ctx, jsval newval)
|
||||
m->shadow->SetUseDepthTexture(depthTexture);
|
||||
}
|
||||
|
||||
jsval CRenderer::JSI_GetDepthTextureBits(JSContext*)
|
||||
{
|
||||
return ToJSVal(m->shadow->GetDepthTextureBits());
|
||||
}
|
||||
|
||||
void CRenderer::JSI_SetDepthTextureBits(JSContext* ctx, jsval newval)
|
||||
{
|
||||
int depthTextureBits;
|
||||
|
||||
if (!ToPrimitive(ctx, newval, depthTextureBits))
|
||||
return;
|
||||
|
||||
m->shadow->SetDepthTextureBits(depthTextureBits);
|
||||
}
|
||||
|
||||
void CRenderer::ScriptingInit()
|
||||
{
|
||||
AddProperty(L"fastPlayerColor", &CRenderer::JSI_GetFastPlayerColor, &CRenderer::JSI_SetFastPlayerColor);
|
||||
@ -1300,6 +1316,8 @@ void CRenderer::ScriptingInit()
|
||||
AddProperty(L"fastNormals", &CRenderer::m_FastNormals);
|
||||
AddProperty(L"displayFrustum", &CRenderer::m_DisplayFrustum);
|
||||
AddProperty(L"shadowZBias", &CRenderer::m_ShadowZBias);
|
||||
AddProperty(L"disableCopyShadow", &CRenderer::m_DisableCopyShadow);
|
||||
AddProperty(L"depthTextureBits", &CRenderer::JSI_GetDepthTextureBits, &CRenderer::JSI_SetDepthTextureBits);
|
||||
|
||||
CJSObject<CRenderer>::ScriptingInit("Renderer");
|
||||
}
|
||||
|
@ -294,6 +294,8 @@ public:
|
||||
*/
|
||||
const Caps& GetCapabilities() const { return m_Caps; }
|
||||
|
||||
bool GetDisableCopyShadow() const { return m_DisableCopyShadow; }
|
||||
|
||||
protected:
|
||||
friend struct CRendererInternals;
|
||||
friend class CVertexBuffer;
|
||||
@ -314,6 +316,8 @@ protected:
|
||||
void JSI_SetRenderPath(JSContext* ctx, jsval newval);
|
||||
jsval JSI_GetUseDepthTexture(JSContext*);
|
||||
void JSI_SetUseDepthTexture(JSContext* ctx, jsval newval);
|
||||
jsval JSI_GetDepthTextureBits(JSContext*);
|
||||
void JSI_SetDepthTextureBits(JSContext* ctx, jsval newval);
|
||||
static void ScriptingInit();
|
||||
|
||||
// patch rendering stuff
|
||||
@ -419,6 +423,12 @@ protected:
|
||||
*/
|
||||
bool m_DisplayFrustum;
|
||||
|
||||
/**
|
||||
* m_DisableCopyShadow: For debugging purpose:
|
||||
* Disable copying of shadow data into the shadow texture (when EXT_fbo is not available)
|
||||
*/
|
||||
bool m_DisableCopyShadow;
|
||||
|
||||
// Various model renderers
|
||||
struct Models {
|
||||
ModelRenderer* NormalFF;
|
||||
|
@ -35,6 +35,8 @@ struct ShadowMapInternals
|
||||
{
|
||||
// whether we're using depth texture or luminance map
|
||||
bool UseDepthTexture;
|
||||
// bit depth for the depth texture, if used
|
||||
int DepthTextureBits;
|
||||
// handle of shadow map
|
||||
GLuint Texture;
|
||||
// width, height of shadow map
|
||||
@ -69,6 +71,7 @@ ShadowMap::ShadowMap()
|
||||
m->Width = 0;
|
||||
m->Height = 0;
|
||||
m->UseDepthTexture = false;
|
||||
m->DepthTextureBits = 16;
|
||||
}
|
||||
|
||||
|
||||
@ -216,8 +219,20 @@ void ShadowMapInternals::CreateTexture()
|
||||
Height = g_Renderer.GetHeight();
|
||||
Height = RoundUpToPowerOf2(Height);
|
||||
|
||||
const char* formatname = "LUMINANCE";
|
||||
|
||||
if (UseDepthTexture)
|
||||
{
|
||||
switch(DepthTextureBits) {
|
||||
case 16: formatname = "DEPTH_COMPONENT16"; break;
|
||||
case 24: formatname = "DEPTH_COMPONENT24"; break;
|
||||
case 32: formatname = "DEPTH_COMPONENT32"; break;
|
||||
default: formatname = "DEPTH_COMPONENT"; break;
|
||||
}
|
||||
}
|
||||
|
||||
LOG(NORMAL, LOG_CATEGORY, "Creating shadow texture (size %ix%i) (format = %s)",
|
||||
Width, Height, UseDepthTexture ? "DEPTH_COMPONENT" : "LUMINANCE");
|
||||
Width, Height, formatname);
|
||||
|
||||
// create texture object
|
||||
glGenTextures(1, &Texture);
|
||||
@ -227,9 +242,18 @@ void ShadowMapInternals::CreateTexture()
|
||||
|
||||
if (UseDepthTexture)
|
||||
{
|
||||
GLenum format;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
float* buf = new float[size];
|
||||
for(uint i = 0; i < size; i++) buf[i] = 1.0;
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, Width, Height, 0,
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, format, Width, Height, 0,
|
||||
GL_DEPTH_COMPONENT, GL_FLOAT, buf);
|
||||
delete[] buf;
|
||||
|
||||
@ -301,8 +325,11 @@ void ShadowMap::EndRender()
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
|
||||
// copy result into shadow map texture
|
||||
g_Renderer.BindTexture(0, m->Texture);
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, g_Renderer.GetWidth(), g_Renderer.GetHeight());
|
||||
if (!g_Renderer.GetDisableCopyShadow())
|
||||
{
|
||||
g_Renderer.BindTexture(0, m->Texture);
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, g_Renderer.GetWidth(), g_Renderer.GetHeight());
|
||||
}
|
||||
|
||||
if (m->UseDepthTexture)
|
||||
{
|
||||
@ -362,6 +389,29 @@ void ShadowMap::SetUseDepthTexture(bool depthTexture)
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Depth texture bits
|
||||
int ShadowMap::GetDepthTextureBits() const
|
||||
{
|
||||
return m->DepthTextureBits;
|
||||
}
|
||||
|
||||
void ShadowMap::SetDepthTextureBits(int bits)
|
||||
{
|
||||
if (bits != m->DepthTextureBits)
|
||||
{
|
||||
if (m->Texture)
|
||||
{
|
||||
glDeleteTextures(1, &m->Texture);
|
||||
m->Texture = 0;
|
||||
}
|
||||
m->Width = m->Height = 0;
|
||||
|
||||
m->DepthTextureBits = bits;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// RenderDebugDisplay: debug visualizations
|
||||
// - blue: objects in shadow
|
||||
|
@ -57,6 +57,22 @@ public:
|
||||
*/
|
||||
void SetUseDepthTexture(bool depthTexture);
|
||||
|
||||
/**
|
||||
* GetDepthTextureBits: Return the number of bits to use for depth textures when
|
||||
* enabled.
|
||||
*
|
||||
* @return depth texture bit depth
|
||||
*/
|
||||
int GetDepthTextureBits() const;
|
||||
|
||||
/**
|
||||
* SetDepthTextureBits: Sets the number of bits to use for depth textures when enabled.
|
||||
* Possible values are 16, 24, 32 and 0 (= use default)
|
||||
*
|
||||
* @param bits number of bits
|
||||
*/
|
||||
void SetDepthTextureBits(int bits);
|
||||
|
||||
/**
|
||||
* SetupFrame: Configure light space for the given camera and light direction,
|
||||
* create the shadow texture if necessary, etc.
|
||||
|
Loading…
Reference in New Issue
Block a user