Renderer simplification: Remove non-FBO shadow mode.
This was SVN commit r9189.
This commit is contained in:
parent
a1eb830f2c
commit
1866c2d3b7
@ -32,7 +32,6 @@ CStrW g_CursorName = L"test";
|
||||
bool g_NoGLS3TC = false;
|
||||
bool g_NoGLAutoMipmap = false;
|
||||
bool g_NoGLVBO = false;
|
||||
bool g_NoGLFramebufferObject = false;
|
||||
|
||||
bool g_Shadows = false;
|
||||
bool g_FancyWater = false;
|
||||
@ -72,7 +71,6 @@ static void LoadGlobals()
|
||||
CFG_GET_USER_VAL("nos3tc", Bool, g_NoGLS3TC);
|
||||
CFG_GET_USER_VAL("noautomipmap", Bool, g_NoGLAutoMipmap);
|
||||
CFG_GET_USER_VAL("novbo", Bool, g_NoGLVBO);
|
||||
CFG_GET_USER_VAL("noframebufferobject", Bool, g_NoGLFramebufferObject);
|
||||
CFG_GET_USER_VAL("shadows", Bool, g_Shadows);
|
||||
CFG_GET_USER_VAL("fancywater", Bool, g_FancyWater);
|
||||
CFG_GET_USER_VAL("renderpath", String, g_RenderPath);
|
||||
|
@ -39,9 +39,6 @@ extern bool g_NoGLAutoMipmap;
|
||||
// don't use VBOs. (RC: that was necessary on laptop Radeon cards)
|
||||
extern bool g_NoGLVBO;
|
||||
|
||||
// disable FBO extension in case the driver is flaky
|
||||
extern bool g_NoGLFramebufferObject;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// flag to switch on shadows
|
||||
|
@ -569,7 +569,6 @@ static void InitRenderer()
|
||||
|
||||
// set renderer options from command line options - NOVBO must be set before opening the renderer
|
||||
g_Renderer.SetOptionBool(CRenderer::OPT_NOVBO,g_NoGLVBO);
|
||||
g_Renderer.SetOptionBool(CRenderer::OPT_NOFRAMEBUFFEROBJECT,g_NoGLFramebufferObject);
|
||||
g_Renderer.SetOptionBool(CRenderer::OPT_SHADOWS,g_Shadows);
|
||||
g_Renderer.SetOptionBool(CRenderer::OPT_FANCYWATER,g_FancyWater);
|
||||
g_Renderer.SetRenderPath(CRenderer::GetRenderPathByName(g_RenderPath));
|
||||
|
@ -406,7 +406,6 @@ CRenderer::CRenderer()
|
||||
m_SkipSubmit = false;
|
||||
|
||||
m_Options.m_NoVBO = false;
|
||||
m_Options.m_NoFramebufferObject = false;
|
||||
m_Options.m_RenderPath = RP_DEFAULT;
|
||||
m_Options.m_FancyWater = false;
|
||||
m_Options.m_Shadows = false;
|
||||
@ -470,8 +469,6 @@ void CRenderer::EnumCaps()
|
||||
m_Caps.m_VertexShader = false;
|
||||
m_Caps.m_FragmentShader = false;
|
||||
m_Caps.m_Shadows = false;
|
||||
m_Caps.m_DepthTextureShadows = false;
|
||||
m_Caps.m_FramebufferObject = false;
|
||||
|
||||
// now start querying extensions
|
||||
if (!m_Options.m_NoVBO) {
|
||||
@ -495,28 +492,10 @@ void CRenderer::EnumCaps()
|
||||
m_Caps.m_FragmentShader = true;
|
||||
}
|
||||
|
||||
if (ogl_max_tex_units >= 3)
|
||||
if (0 == ogl_HaveExtensions(0, "GL_ARB_shadow", "GL_ARB_depth_texture", "GL_EXT_framebuffer_object", NULL))
|
||||
{
|
||||
// To render shadows plus fog-of-war in a single lighting pass (see
|
||||
// TerrainRenderer.cpp) we need >= 3 TMUs. Only really ancient hardware
|
||||
// doesn't support that, so instead of implementing a compatible fallback
|
||||
// we'll just disable shadows entirely unless there's enough TMUs.
|
||||
m_Caps.m_Shadows = true;
|
||||
}
|
||||
|
||||
if (0 == ogl_HaveExtensions(0, "GL_ARB_shadow", "GL_ARB_depth_texture", NULL)) {
|
||||
// According to Delphi3d.net, all relevant graphics chips that support depth textures
|
||||
// (i.e. Geforce3+, Radeon9500+, even i915) also have >= 4 TMUs, so this restriction
|
||||
// isn't actually a restriction, and it helps with integrating depth texture
|
||||
// shadows into rendering paths.
|
||||
if (ogl_max_tex_units >= 4)
|
||||
m_Caps.m_DepthTextureShadows = true;
|
||||
}
|
||||
|
||||
if (!m_Options.m_NoFramebufferObject)
|
||||
{
|
||||
if (ogl_HaveExtension("GL_EXT_framebuffer_object"))
|
||||
m_Caps.m_FramebufferObject = true;
|
||||
m_Caps.m_Shadows = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -670,9 +649,6 @@ void CRenderer::SetOptionBool(enum Option opt,bool value)
|
||||
case OPT_NOVBO:
|
||||
m_Options.m_NoVBO=value;
|
||||
break;
|
||||
case OPT_NOFRAMEBUFFEROBJECT:
|
||||
m_Options.m_NoFramebufferObject=value;
|
||||
break;
|
||||
case OPT_SHADOWS:
|
||||
m_Options.m_Shadows=value;
|
||||
ReloadShaders();
|
||||
@ -693,8 +669,6 @@ bool CRenderer::GetOptionBool(enum Option opt) const
|
||||
switch (opt) {
|
||||
case OPT_NOVBO:
|
||||
return m_Options.m_NoVBO;
|
||||
case OPT_NOFRAMEBUFFEROBJECT:
|
||||
return m_Options.m_NoFramebufferObject;
|
||||
case OPT_SHADOWS:
|
||||
return m_Options.m_Shadows;
|
||||
case OPT_FANCYWATER:
|
||||
|
@ -80,7 +80,6 @@ public:
|
||||
enum { NumAlphaMaps=14 };
|
||||
enum Option {
|
||||
OPT_NOVBO,
|
||||
OPT_NOFRAMEBUFFEROBJECT,
|
||||
OPT_SHADOWS,
|
||||
OPT_FANCYWATER,
|
||||
OPT_LODBIAS
|
||||
@ -126,7 +125,6 @@ public:
|
||||
// renderer options
|
||||
struct Options {
|
||||
bool m_NoVBO;
|
||||
bool m_NoFramebufferObject;
|
||||
bool m_Shadows;
|
||||
bool m_FancyWater;
|
||||
float m_LodBias;
|
||||
@ -142,8 +140,6 @@ public:
|
||||
bool m_VertexShader;
|
||||
bool m_FragmentShader;
|
||||
bool m_Shadows;
|
||||
bool m_DepthTextureShadows;
|
||||
bool m_FramebufferObject;
|
||||
};
|
||||
|
||||
public:
|
||||
|
@ -46,8 +46,7 @@ struct ShadowMapInternals
|
||||
{
|
||||
// bit depth for the depth texture
|
||||
int DepthTextureBits;
|
||||
// if non-zero, we're using EXT_framebuffer_object for shadow rendering,
|
||||
// and this is the framebuffer
|
||||
// the EXT_framebuffer_object framebuffer
|
||||
GLuint Framebuffer;
|
||||
// handle of shadow map
|
||||
GLuint Texture;
|
||||
@ -299,13 +298,7 @@ void ShadowMapInternals::CreateTexture()
|
||||
Framebuffer = 0;
|
||||
}
|
||||
|
||||
// Prepare FBO if available
|
||||
// Note: luminance is not an RGB format, so a luminance texture cannot be used
|
||||
// as a color buffer
|
||||
if (g_Renderer.GetCapabilities().m_FramebufferObject)
|
||||
{
|
||||
pglGenFramebuffersEXT(1, &Framebuffer);
|
||||
}
|
||||
|
||||
if (g_Renderer.m_ShadowMapSize != 0)
|
||||
{
|
||||
@ -322,18 +315,9 @@ void ShadowMapInternals::CreateTexture()
|
||||
Width = std::min(Width, (int)ogl_max_tex_size);
|
||||
Height = std::min(Height, (int)ogl_max_tex_size);
|
||||
|
||||
// If we're using a framebuffer object, the whole texture is available; otherwise
|
||||
// we're limited to the part of the screen buffer that is actually visible
|
||||
if (Framebuffer)
|
||||
{
|
||||
// Since we're using a framebuffer object, the whole texture is available
|
||||
EffectiveWidth = Width;
|
||||
EffectiveHeight = Height;
|
||||
}
|
||||
else
|
||||
{
|
||||
EffectiveWidth = std::min(Width, g_Renderer.GetWidth());
|
||||
EffectiveHeight = std::min(Height, g_Renderer.GetHeight());
|
||||
}
|
||||
|
||||
const char* formatname;
|
||||
|
||||
@ -345,8 +329,8 @@ void ShadowMapInternals::CreateTexture()
|
||||
default: formatname = "DEPTH_COMPONENT"; break;
|
||||
}
|
||||
|
||||
LOGMESSAGE(L"Creating shadow texture (size %dx%d) (format = %hs)%ls",
|
||||
Width, Height, formatname, Framebuffer ? L" (using EXT_framebuffer_object)" : L"");
|
||||
LOGMESSAGE(L"Creating shadow texture (size %dx%d) (format = %hs)",
|
||||
Width, Height, formatname);
|
||||
|
||||
|
||||
if (g_Renderer.m_Options.m_ShadowAlphaFix)
|
||||
@ -386,8 +370,6 @@ void ShadowMapInternals::CreateTexture()
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
// bind to framebuffer object
|
||||
if (Framebuffer)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, Framebuffer);
|
||||
|
||||
@ -412,11 +394,8 @@ void ShadowMapInternals::CreateTexture()
|
||||
{
|
||||
LOGWARNING(L"Framebuffer object incomplete: %04d", status);
|
||||
|
||||
pglDeleteFramebuffersEXT(1, &Framebuffer);
|
||||
Framebuffer = 0;
|
||||
EffectiveWidth = std::min(Width, g_Renderer.GetWidth());
|
||||
EffectiveHeight = std::min(Height, g_Renderer.GetHeight());
|
||||
}
|
||||
// Disable shadow rendering (but let the user try again if they want)
|
||||
g_Renderer.m_Options.m_Shadows = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -430,7 +409,6 @@ void ShadowMap::BeginRender()
|
||||
// Calc remaining shadow matrices
|
||||
m->CalcShadowMatrices();
|
||||
|
||||
if (m->Framebuffer)
|
||||
{
|
||||
PROFILE("bind framebuffer");
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
@ -466,21 +444,10 @@ void ShadowMap::EndRender()
|
||||
{
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
glViewport(0, 0, g_Renderer.GetWidth(), g_Renderer.GetHeight());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user