Fixes water rendering and crashes on GPUs without FBO support, fixes #2667
This was SVN commit r15814.
This commit is contained in:
parent
2f8ed7980d
commit
ea2db5386b
@ -494,13 +494,11 @@ void CRenderer::EnumCaps()
|
||||
m_Caps.m_VertexShader = false;
|
||||
m_Caps.m_FragmentShader = false;
|
||||
m_Caps.m_Shadows = false;
|
||||
m_Caps.m_PrettyWater = false;
|
||||
|
||||
// now start querying extensions
|
||||
if (!m_Options.m_NoVBO) {
|
||||
if (ogl_HaveExtension("GL_ARB_vertex_buffer_object")) {
|
||||
m_Caps.m_VBO=true;
|
||||
}
|
||||
}
|
||||
if (!m_Options.m_NoVBO && ogl_HaveExtension("GL_ARB_vertex_buffer_object"))
|
||||
m_Caps.m_VBO = true;
|
||||
|
||||
if (0 == ogl_HaveExtensions(0, "GL_ARB_vertex_program", "GL_ARB_fragment_program", NULL))
|
||||
{
|
||||
@ -526,6 +524,13 @@ void CRenderer::EnumCaps()
|
||||
m_Caps.m_Shadows = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG2_GLES
|
||||
m_Caps.m_PrettyWater = true;
|
||||
#else
|
||||
if (0 == ogl_HaveExtensions(0, "GL_ARB_vertex_shader", "GL_ARB_fragment_shader", "GL_EXT_framebuffer_object", NULL))
|
||||
m_Caps.m_PrettyWater = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CRenderer::RecomputeSystemShaderDefines()
|
||||
|
@ -174,6 +174,7 @@ public:
|
||||
bool m_VertexShader;
|
||||
bool m_FragmentShader;
|
||||
bool m_Shadows;
|
||||
bool m_PrettyWater;
|
||||
};
|
||||
|
||||
public:
|
||||
|
@ -153,10 +153,13 @@ WaterManager::~WaterManager()
|
||||
if (m_ShoreWaves_VBIndices)
|
||||
g_VBMan.Release(m_ShoreWaves_VBIndices);
|
||||
|
||||
SAFE_ARRAY_DELETE(m_DistanceHeightmap);
|
||||
SAFE_ARRAY_DELETE(m_BlurredNormalMap);
|
||||
SAFE_ARRAY_DELETE(m_WindStrength);
|
||||
delete[] m_DistanceHeightmap;
|
||||
delete[] m_BlurredNormalMap;
|
||||
delete[] m_WindStrength;
|
||||
|
||||
if (!g_Renderer.GetCapabilities().m_PrettyWater)
|
||||
return;
|
||||
|
||||
glDeleteTextures(1, &m_depthTT);
|
||||
glDeleteTextures(1, &m_FancyTextureNormal);
|
||||
glDeleteTextures(1, &m_FancyTextureOther);
|
||||
@ -191,6 +194,13 @@ int WaterManager::LoadWaterTextures()
|
||||
m_WaterTexture[i] = texture;
|
||||
}
|
||||
|
||||
if (!g_Renderer.GetCapabilities().m_PrettyWater)
|
||||
{
|
||||
// Enable rendering, now that we've succeeded this far
|
||||
m_RenderWater = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Load normalmaps (for fancy water)
|
||||
for (size_t i = 0; i < ARRAY_SIZE(m_NormalMap); ++i)
|
||||
{
|
||||
@ -361,14 +371,14 @@ int WaterManager::LoadWaterTextures()
|
||||
void WaterManager::UnloadWaterTextures()
|
||||
{
|
||||
for(size_t i = 0; i < ARRAY_SIZE(m_WaterTexture); i++)
|
||||
{
|
||||
m_WaterTexture[i].reset();
|
||||
}
|
||||
|
||||
if (!g_Renderer.GetCapabilities().m_PrettyWater)
|
||||
return;
|
||||
|
||||
for(size_t i = 0; i < ARRAY_SIZE(m_NormalMap); i++)
|
||||
{
|
||||
m_NormalMap[i].reset();
|
||||
}
|
||||
|
||||
glDeleteTextures(1, &m_ReflectionTexture);
|
||||
glDeleteTextures(1, &m_RefractionTexture);
|
||||
pglDeleteFramebuffersEXT(1, &m_RefractionFbo);
|
||||
@ -1089,7 +1099,7 @@ void WaterManager::UpdateQuality()
|
||||
|
||||
bool WaterManager::WillRenderFancyWater()
|
||||
{
|
||||
if (!g_Renderer.GetCapabilities().m_FragmentShader)
|
||||
if (!g_Renderer.GetCapabilities().m_PrettyWater)
|
||||
return false;
|
||||
if (!m_RenderWater || m_WaterUgly)
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user