Changeset View
Changeset View
Standalone View
Standalone View
source/renderer/TerrainRenderer.cpp
Show First 20 Lines • Show All 403 Lines • ▼ Show 20 Lines | bool TerrainRenderer::RenderFancyWater(const CShaderDefines& context, int cullGroup, ShadowMap* shadow) | ||||
// Render normals and foam to a framebuffer if we're in fancy effects | // Render normals and foam to a framebuffer if we're in fancy effects | ||||
if (WaterMgr->m_WaterFancyEffects) | if (WaterMgr->m_WaterFancyEffects) | ||||
{ | { | ||||
// Save the post-processing framebuffer. | // Save the post-processing framebuffer. | ||||
GLint fbo; | GLint fbo; | ||||
glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fbo); | glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fbo); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, WaterMgr->m_FancyEffectsFBO); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, WaterMgr->m_FancyEffectsFBO); | ||||
glDisable(GL_BLEND); | glDisable(GL_BLEND); | ||||
glEnable(GL_DEPTH_TEST); | glEnable(GL_DEPTH_TEST); | ||||
glDepthFunc(GL_LEQUAL); | glDepthFunc(GL_LEQUAL); | ||||
glDisable(GL_CULL_FACE); | glDisable(GL_CULL_FACE); | ||||
// Overwrite waves that would be behind the ground. | // Overwrite waves that would be behind the ground. | ||||
CShaderTechniquePtr dummyTech = g_Renderer.GetShaderManager().LoadEffect(str_solid); | CShaderTechniquePtr dummyTech = g_Renderer.GetShaderManager().LoadEffect(str_solid); | ||||
dummyTech->BeginPass(); | dummyTech->BeginPass(); | ||||
CShaderProgramPtr dummyShader = dummyTech->GetShader(); | CShaderProgramPtr dummyShader = dummyTech->GetShader(); | ||||
dummyShader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); | dummyShader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); | ||||
dummyShader->Uniform(str_color, 0.0f, 0.0f, 0.0f, 0.0f); | dummyShader->Uniform(str_color, 0.0f, 0.0f, 0.0f, 0.0f); | ||||
std::vector<CPatchRData*>& visiblePatches = m->visiblePatches[cullGroup]; | std::vector<CPatchRData*>& visiblePatches = m->visiblePatches[cullGroup]; | ||||
for (size_t i = 0; i < visiblePatches.size(); ++i) | for (size_t i = 0; i < visiblePatches.size(); ++i) | ||||
{ | { | ||||
CPatchRData* data = visiblePatches[i]; | CPatchRData* data = visiblePatches[i]; | ||||
data->RenderWater(dummyShader, true, true); | data->RenderWater(dummyShader, true, true); | ||||
} | } | ||||
dummyTech->EndPass(); | dummyTech->EndPass(); | ||||
glEnable(GL_CULL_FACE); | glEnable(GL_CULL_FACE); | ||||
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); | ||||
} | } | ||||
glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||
glEnable(GL_DEPTH_TEST); | glEnable(GL_DEPTH_TEST); | ||||
glDepthFunc(GL_LEQUAL); | glDepthFunc(GL_LEQUAL); | ||||
m->fancyWaterTech->BeginPass(); | m->fancyWaterTech->BeginPass(); | ||||
CShaderProgramPtr fancyWaterShader = m->fancyWaterTech->GetShader(); | CShaderProgramPtr fancyWaterShader = m->fancyWaterTech->GetShader(); | ||||
▲ Show 20 Lines • Show All 123 Lines • ▼ Show 20 Lines | #else | ||||
{ | { | ||||
CPatchRData* data = visiblePatches[i]; | CPatchRData* data = visiblePatches[i]; | ||||
data->RenderWater(waterSimpleShader, false, true); | data->RenderWater(waterSimpleShader, false, true); | ||||
} | } | ||||
waterSimpleShader->Unbind(); | waterSimpleShader->Unbind(); | ||||
g_Renderer.BindTexture(1, 0); | g_Renderer.BindTexture(1, 0); | ||||
pglActiveTextureARB(GL_TEXTURE0_ARB); | glActiveTextureARB(GL_TEXTURE0_ARB); | ||||
waterSimpleTech->EndPass(); | waterSimpleTech->EndPass(); | ||||
#endif | #endif | ||||
} | } | ||||
/////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////// | ||||
// Render water that is part of the terrain | // Render water that is part of the terrain | ||||
void TerrainRenderer::RenderWater(const CShaderDefines& context, int cullGroup, ShadowMap* shadow) | void TerrainRenderer::RenderWater(const CShaderDefines& context, int cullGroup, ShadowMap* shadow) | ||||
Show All 28 Lines |
Wildfire Games · Phabricator