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();
|
ogl_WarnIfError();
|
||||||
|
|
||||||
|
// Check that we're not accidentally using shaders when they're not supported
|
||||||
|
debug_assert(pglCreateProgramObjectARB != NULL);
|
||||||
|
|
||||||
p->id = pglCreateProgramObjectARB();
|
p->id = pglCreateProgramObjectARB();
|
||||||
if (!p->id)
|
if (!p->id)
|
||||||
{
|
{
|
||||||
|
@ -432,6 +432,7 @@ void CRenderer::EnumCaps()
|
|||||||
m_Caps.m_TextureBorderClamp=false;
|
m_Caps.m_TextureBorderClamp=false;
|
||||||
m_Caps.m_GenerateMipmaps=false;
|
m_Caps.m_GenerateMipmaps=false;
|
||||||
m_Caps.m_VertexShader=false;
|
m_Caps.m_VertexShader=false;
|
||||||
|
m_Caps.m_FragmentShader=false;
|
||||||
m_Caps.m_DepthTextureShadows = false;
|
m_Caps.m_DepthTextureShadows = false;
|
||||||
m_Caps.m_FramebufferObject = false;
|
m_Caps.m_FramebufferObject = false;
|
||||||
|
|
||||||
@ -451,6 +452,8 @@ void CRenderer::EnumCaps()
|
|||||||
{
|
{
|
||||||
if (ogl_HaveExtension("GL_ARB_vertex_shader"))
|
if (ogl_HaveExtension("GL_ARB_vertex_shader"))
|
||||||
m_Caps.m_VertexShader=true;
|
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)) {
|
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
|
// RenderReflections: render the water reflections to the reflection texture
|
||||||
void CRenderer::RenderReflections()
|
void CRenderer::RenderReflections()
|
||||||
{
|
{
|
||||||
MICROLOG(L"render reflections");
|
PROFILE("render reflections");
|
||||||
|
|
||||||
WaterManager& wm = m->waterManager;
|
WaterManager& wm = m->waterManager;
|
||||||
|
|
||||||
@ -1130,7 +1133,7 @@ void CRenderer::RenderReflections()
|
|||||||
// RenderRefractions: render the water refractions to the refraction texture
|
// RenderRefractions: render the water refractions to the refraction texture
|
||||||
void CRenderer::RenderRefractions()
|
void CRenderer::RenderRefractions()
|
||||||
{
|
{
|
||||||
MICROLOG(L"render refractions");
|
PROFILE("render refractions");
|
||||||
|
|
||||||
WaterManager& wm = m->waterManager;
|
WaterManager& wm = m->waterManager;
|
||||||
|
|
||||||
@ -1231,7 +1234,7 @@ void CRenderer::RenderSubmissions()
|
|||||||
|
|
||||||
ogl_WarnIfError();
|
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
|
// render reflected and refracted scenes, then re-clear the screen
|
||||||
RenderReflections();
|
RenderReflections();
|
||||||
|
@ -151,6 +151,7 @@ public:
|
|||||||
bool m_TextureBorderClamp;
|
bool m_TextureBorderClamp;
|
||||||
bool m_GenerateMipmaps;
|
bool m_GenerateMipmaps;
|
||||||
bool m_VertexShader;
|
bool m_VertexShader;
|
||||||
|
bool m_FragmentShader;
|
||||||
bool m_DepthTextureShadows;
|
bool m_DepthTextureShadows;
|
||||||
bool m_FramebufferObject;
|
bool m_FramebufferObject;
|
||||||
};
|
};
|
||||||
|
@ -413,7 +413,9 @@ void TerrainRenderer::RenderWater()
|
|||||||
{
|
{
|
||||||
PROFILE( "render water" );
|
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 we're using fancy water, make sure its shader is loaded
|
||||||
if(fancy && !m->fancyWaterShader)
|
if(fancy && !m->fancyWaterShader)
|
||||||
@ -442,7 +444,6 @@ void TerrainRenderer::RenderWater()
|
|||||||
CTerrain* terrain = g_Game->GetWorld()->GetTerrain();
|
CTerrain* terrain = g_Game->GetWorld()->GetTerrain();
|
||||||
int mapSize = terrain->GetVerticesPerSide();
|
int mapSize = terrain->GetVerticesPerSide();
|
||||||
CLOSManager* losMgr = g_Game->GetWorld()->GetLOSManager();
|
CLOSManager* losMgr = g_Game->GetWorld()->GetLOSManager();
|
||||||
WaterManager* WaterMgr = g_Renderer.GetWaterManager();
|
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
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_water_tex = 0; // so they will be reloaded if LoadWaterTextures is called again
|
||||||
cur_loading_normal_map = 0;
|
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();
|
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:
|
private:
|
||||||
/// State of progressive loading (in # of loaded textures)
|
/// State of progressive loading (in # of loaded textures)
|
||||||
size_t cur_loading_water_tex;
|
size_t cur_loading_water_tex;
|
||||||
|
Loading…
Reference in New Issue
Block a user