Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/renderer/TerrainRenderer.cpp
Show First 20 Lines • Show All 398 Lines • ▼ Show 20 Lines | bool TerrainRenderer::RenderFancyWater(const CShaderDefines& context, int cullGroup, ShadowMap* shadow) | ||||
const double time = waterManager.m_WaterTexTimer; | const double time = waterManager.m_WaterTexTimer; | ||||
const float repeatPeriod = waterManager.m_RepeatPeriod; | const float repeatPeriod = waterManager.m_RepeatPeriod; | ||||
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); | ||||
#if !CONFIG2_GLES | |||||
if (g_Renderer.GetSceneRenderer().GetWaterRenderMode() == WIREFRAME) | |||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | |||||
#endif | |||||
m->fancyWaterTech->BeginPass(); | m->fancyWaterTech->BeginPass(); | ||||
CShaderProgramPtr fancyWaterShader = m->fancyWaterTech->GetShader(); | CShaderProgramPtr fancyWaterShader = m->fancyWaterTech->GetShader(); | ||||
const CCamera& camera = g_Renderer.GetSceneRenderer().GetViewCamera(); | const CCamera& camera = g_Renderer.GetSceneRenderer().GetViewCamera(); | ||||
const double period = 8.0; | const double period = 8.0; | ||||
fancyWaterShader->BindTexture(str_normalMap, waterManager.m_NormalMap[waterManager.GetCurrentTextureIndex(period)]); | fancyWaterShader->BindTexture(str_normalMap, waterManager.m_NormalMap[waterManager.GetCurrentTextureIndex(period)]); | ||||
fancyWaterShader->BindTexture(str_normalMap2, waterManager.m_NormalMap[waterManager.GetNextTextureIndex(period)]); | fancyWaterShader->BindTexture(str_normalMap2, waterManager.m_NormalMap[waterManager.GetNextTextureIndex(period)]); | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | #endif | ||||
if (shadow) | if (shadow) | ||||
shadow->BindTo(fancyWaterShader); | shadow->BindTo(fancyWaterShader); | ||||
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(fancyWaterShader); | data->RenderWaterSurface(fancyWaterShader); | ||||
data->RenderWaterShore(fancyWaterShader); | |||||
} | } | ||||
m->fancyWaterTech->EndPass(); | m->fancyWaterTech->EndPass(); | ||||
#if !CONFIG2_GLES | |||||
if (g_Renderer.GetSceneRenderer().GetWaterRenderMode() == WIREFRAME) | |||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | |||||
#endif | |||||
glDepthFunc(GL_LEQUAL); | glDepthFunc(GL_LEQUAL); | ||||
glDisable(GL_BLEND); | glDisable(GL_BLEND); | ||||
return true; | return true; | ||||
} | } | ||||
void TerrainRenderer::RenderSimpleWater(int cullGroup) | void TerrainRenderer::RenderSimpleWater(int cullGroup) | ||||
{ | { | ||||
#if CONFIG2_GLES | #if CONFIG2_GLES | ||||
UNUSED2(cullGroup); | UNUSED2(cullGroup); | ||||
#else | #else | ||||
PROFILE3_GPU("simple water"); | PROFILE3_GPU("simple water"); | ||||
OGL_SCOPED_DEBUG_GROUP("Render Simple Water"); | OGL_SCOPED_DEBUG_GROUP("Render Simple Water"); | ||||
const WaterManager& waterManager = g_Renderer.GetSceneRenderer().GetWaterManager(); | const WaterManager& waterManager = g_Renderer.GetSceneRenderer().GetWaterManager(); | ||||
CLOSTexture& losTexture = g_Game->GetView()->GetLOSTexture(); | CLOSTexture& losTexture = g_Game->GetView()->GetLOSTexture(); | ||||
glEnable(GL_DEPTH_TEST); | glEnable(GL_DEPTH_TEST); | ||||
glDepthFunc(GL_LEQUAL); | glDepthFunc(GL_LEQUAL); | ||||
if (g_Renderer.GetSceneRenderer().GetWaterRenderMode() == WIREFRAME) | |||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | |||||
const double time = waterManager.m_WaterTexTimer; | const double time = waterManager.m_WaterTexTimer; | ||||
CShaderTechniquePtr waterSimpleTech = | CShaderTechniquePtr waterSimpleTech = | ||||
g_Renderer.GetShaderManager().LoadEffect(str_water_simple); | g_Renderer.GetShaderManager().LoadEffect(str_water_simple); | ||||
waterSimpleTech->BeginPass(); | waterSimpleTech->BeginPass(); | ||||
CShaderProgramPtr waterSimpleShader = waterSimpleTech->GetShader(); | CShaderProgramPtr waterSimpleShader = waterSimpleTech->GetShader(); | ||||
waterSimpleShader->BindTexture(str_baseTex, waterManager.m_WaterTexture[waterManager.GetCurrentTextureIndex(1.6)]); | waterSimpleShader->BindTexture(str_baseTex, waterManager.m_WaterTexture[waterManager.GetCurrentTextureIndex(1.6)]); | ||||
waterSimpleShader->BindTexture(str_losTex, losTexture.GetTextureSmooth()); | waterSimpleShader->BindTexture(str_losTex, losTexture.GetTextureSmooth()); | ||||
waterSimpleShader->Uniform(str_transform, g_Renderer.GetSceneRenderer().GetViewCamera().GetViewProjection()); | waterSimpleShader->Uniform(str_transform, g_Renderer.GetSceneRenderer().GetViewCamera().GetViewProjection()); | ||||
waterSimpleShader->Uniform(str_losTransform, losTexture.GetTextureMatrix()[0], losTexture.GetTextureMatrix()[12], 0.f, 0.f); | waterSimpleShader->Uniform(str_losTransform, losTexture.GetTextureMatrix()[0], losTexture.GetTextureMatrix()[12], 0.f, 0.f); | ||||
waterSimpleShader->Uniform(str_time, static_cast<float>(time)); | waterSimpleShader->Uniform(str_time, static_cast<float>(time)); | ||||
waterSimpleShader->Uniform(str_color, waterManager.m_WaterColor); | waterSimpleShader->Uniform(str_color, waterManager.m_WaterColor); | ||||
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(waterSimpleShader, false, true); | data->RenderWaterSurface(waterSimpleShader); | ||||
} | } | ||||
g_Renderer.BindTexture(1, 0); | g_Renderer.BindTexture(1, 0); | ||||
glActiveTextureARB(GL_TEXTURE0_ARB); | glActiveTextureARB(GL_TEXTURE0_ARB); | ||||
waterSimpleTech->EndPass(); | waterSimpleTech->EndPass(); | ||||
if (g_Renderer.GetSceneRenderer().GetWaterRenderMode() == WIREFRAME) | |||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | |||||
#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) | ||||
{ | { | ||||
const WaterManager& waterManager = g_Renderer.GetSceneRenderer().GetWaterManager(); | const WaterManager& waterManager = g_Renderer.GetSceneRenderer().GetWaterManager(); | ||||
Show All 22 Lines | void TerrainRenderer::RenderWaterFoamOccluders(int cullGroup) | ||||
// 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, sceneRenderer.GetViewCamera().GetViewProjection()); | dummyShader->Uniform(str_transform, sceneRenderer.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); | ||||
for (CPatchRData* data : m->visiblePatches[cullGroup]) | for (CPatchRData* data : m->visiblePatches[cullGroup]) | ||||
data->RenderWater(dummyShader, true, true); | data->RenderWaterShore(dummyShader); | ||||
dummyTech->EndPass(); | dummyTech->EndPass(); | ||||
glEnable(GL_CULL_FACE); | glEnable(GL_CULL_FACE); | ||||
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); | ||||
} | } | ||||
void TerrainRenderer::RenderPriorities(int cullGroup) | void TerrainRenderer::RenderPriorities(int cullGroup) | ||||
{ | { | ||||
Show All 15 Lines |
Wildfire Games · Phabricator