Force fancywater off if fragment shader extensions are not supported. See #270
This was SVN commit r7385.
This commit is contained in:
parent
148ff026ca
commit
58e79bfdbe
@ -330,6 +330,9 @@ static LibError Ogl_Program_reload(Ogl_Program* p, const VfsPath& pathname, Hand
|
||||
|
||||
ogl_WarnIfError();
|
||||
|
||||
// Check that we're not accidentally using shaders when they're not supported
|
||||
debug_assert(pglCreateProgramObjectARB != NULL);
|
||||
|
||||
p->id = pglCreateProgramObjectARB();
|
||||
if (!p->id)
|
||||
{
|
||||
|
@ -432,6 +432,7 @@ void CRenderer::EnumCaps()
|
||||
m_Caps.m_TextureBorderClamp=false;
|
||||
m_Caps.m_GenerateMipmaps=false;
|
||||
m_Caps.m_VertexShader=false;
|
||||
m_Caps.m_FragmentShader=false;
|
||||
m_Caps.m_DepthTextureShadows = false;
|
||||
m_Caps.m_FramebufferObject = false;
|
||||
|
||||
@ -451,6 +452,8 @@ void CRenderer::EnumCaps()
|
||||
{
|
||||
if (ogl_HaveExtension("GL_ARB_vertex_shader"))
|
||||
m_Caps.m_VertexShader=true;
|
||||
if (ogl_HaveExtension("GL_ARB_fragment_shader"))
|
||||
m_Caps.m_FragmentShader=true;
|
||||
}
|
||||
|
||||
if (0 == ogl_HaveExtensions(0, "GL_ARB_shadow", "GL_ARB_depth_texture", NULL)) {
|
||||
@ -1054,7 +1057,7 @@ void CRenderer::SetObliqueFrustumClipping(const CVector4D& cp, int sign)
|
||||
// RenderReflections: render the water reflections to the reflection texture
|
||||
void CRenderer::RenderReflections()
|
||||
{
|
||||
MICROLOG(L"render reflections");
|
||||
PROFILE("render reflections");
|
||||
|
||||
WaterManager& wm = m->waterManager;
|
||||
|
||||
@ -1130,7 +1133,7 @@ void CRenderer::RenderReflections()
|
||||
// RenderRefractions: render the water refractions to the refraction texture
|
||||
void CRenderer::RenderRefractions()
|
||||
{
|
||||
MICROLOG(L"render refractions");
|
||||
PROFILE("render refractions");
|
||||
|
||||
WaterManager& wm = m->waterManager;
|
||||
|
||||
@ -1231,7 +1234,7 @@ void CRenderer::RenderSubmissions()
|
||||
|
||||
ogl_WarnIfError();
|
||||
|
||||
if (m_WaterManager->m_RenderWater && m_Options.m_FancyWater)
|
||||
if (m_WaterManager->m_RenderWater && m_WaterManager->WillRenderFancyWater())
|
||||
{
|
||||
// render reflected and refracted scenes, then re-clear the screen
|
||||
RenderReflections();
|
||||
|
@ -151,6 +151,7 @@ public:
|
||||
bool m_TextureBorderClamp;
|
||||
bool m_GenerateMipmaps;
|
||||
bool m_VertexShader;
|
||||
bool m_FragmentShader;
|
||||
bool m_DepthTextureShadows;
|
||||
bool m_FramebufferObject;
|
||||
};
|
||||
|
@ -413,7 +413,9 @@ void TerrainRenderer::RenderWater()
|
||||
{
|
||||
PROFILE( "render water" );
|
||||
|
||||
bool fancy = g_Renderer.m_Options.m_FancyWater;
|
||||
WaterManager* WaterMgr = g_Renderer.GetWaterManager();
|
||||
|
||||
bool fancy = WaterMgr->WillRenderFancyWater();
|
||||
|
||||
// If we're using fancy water, make sure its shader is loaded
|
||||
if(fancy && !m->fancyWaterShader)
|
||||
@ -442,7 +444,6 @@ void TerrainRenderer::RenderWater()
|
||||
CTerrain* terrain = g_Game->GetWorld()->GetTerrain();
|
||||
int mapSize = terrain->GetVerticesPerSide();
|
||||
CLOSManager* losMgr = g_Game->GetWorld()->GetLOSManager();
|
||||
WaterManager* WaterMgr = g_Renderer.GetWaterManager();
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
@ -197,3 +197,9 @@ void WaterManager::UnloadWaterTextures()
|
||||
cur_loading_water_tex = 0; // so they will be reloaded if LoadWaterTextures is called again
|
||||
cur_loading_normal_map = 0;
|
||||
}
|
||||
|
||||
|
||||
bool WaterManager::WillRenderFancyWater()
|
||||
{
|
||||
return (g_Renderer.GetCapabilities().m_FragmentShader && g_Renderer.GetOptionBool(CRenderer::OPT_FANCYWATER));
|
||||
}
|
||||
|
@ -95,6 +95,12 @@ public:
|
||||
*/
|
||||
void UnloadWaterTextures();
|
||||
|
||||
/**
|
||||
* Returns true if fancy water shaders will be used (i.e. the hardware is capable
|
||||
* and it hasn't been configured off)
|
||||
*/
|
||||
bool WillRenderFancyWater();
|
||||
|
||||
private:
|
||||
/// State of progressive loading (in # of loaded textures)
|
||||
size_t cur_loading_water_tex;
|
||||
|
Loading…
Reference in New Issue
Block a user