Skip to content
Snippets Groups Projects
Commit 250ab43e authored by David Parks's avatar David Parks
Browse files

SH-2571 Add shader driven render for low detail terrain.

parent f19f43c7
No related branches found
No related tags found
No related merge requests found
...@@ -773,10 +773,7 @@ bool LLAppViewer::init() ...@@ -773,10 +773,7 @@ bool LLAppViewer::init()
LLViewerAssetStatsFF::init(); LLViewerAssetStatsFF::init();
} }
// init main thread's local data pool before initializing the threads - Nyx initThreads();
LLThreadLocalData::init();
initThreads();
LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ; LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ;
// Initialize settings early so that the defaults for ignorable dialogs are // Initialize settings early so that the defaults for ignorable dialogs are
......
...@@ -122,14 +122,7 @@ U32 LLDrawPoolTerrain::getVertexDataMask() ...@@ -122,14 +122,7 @@ U32 LLDrawPoolTerrain::getVertexDataMask()
void LLDrawPoolTerrain::prerender() void LLDrawPoolTerrain::prerender()
{ {
mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_ENVIRONMENT); mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_ENVIRONMENT);
if (mVertexShaderLevel > 0) sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
{
sDetailMode = 1;
}
else
{
sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
}
} }
void LLDrawPoolTerrain::beginRenderPass( S32 pass ) void LLDrawPoolTerrain::beginRenderPass( S32 pass )
...@@ -137,9 +130,24 @@ void LLDrawPoolTerrain::beginRenderPass( S32 pass ) ...@@ -137,9 +130,24 @@ void LLDrawPoolTerrain::beginRenderPass( S32 pass )
LLFastTimer t(FTM_RENDER_TERRAIN); LLFastTimer t(FTM_RENDER_TERRAIN);
LLFacePool::beginRenderPass(pass); LLFacePool::beginRenderPass(pass);
sShader = LLPipeline::sUnderWaterRender ? if (sDetailMode > 0)
&gTerrainWaterProgram : {
&gTerrainProgram; sShader = LLPipeline::sUnderWaterRender ?
&gTerrainWaterProgram :
&gTerrainProgram;
}
else
{
if (LLPipeline::sUnderWaterRender)
{
sShader = &gObjectSimpleNonIndexedTexGenWaterProgram;
}
else
{
sShader = &gObjectSimpleNonIndexedTexGenProgram;
}
}
if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0) if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0)
{ {
...@@ -200,7 +208,15 @@ void LLDrawPoolTerrain::render(S32 pass) ...@@ -200,7 +208,15 @@ void LLDrawPoolTerrain::render(S32 pass)
if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0) if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0)
{ {
gPipeline.enableLightsDynamic(); gPipeline.enableLightsDynamic();
renderFullShader();
if (sDetailMode > 0)
{
renderFullShader();
}
else
{
renderSimple();
}
} }
else else
{ {
...@@ -827,13 +843,21 @@ void LLDrawPoolTerrain::renderSimple() ...@@ -827,13 +843,21 @@ void LLDrawPoolTerrain::renderSimple()
tp0.setVec(tscale, 0.f, 0.0f, -1.f*(origin_agent.mV[0]/256.f)); tp0.setVec(tscale, 0.f, 0.0f, -1.f*(origin_agent.mV[0]/256.f));
tp1.setVec(0.f, tscale, 0.0f, -1.f*(origin_agent.mV[1]/256.f)); tp1.setVec(0.f, tscale, 0.0f, -1.f*(origin_agent.mV[1]/256.f));
glEnable(GL_TEXTURE_GEN_S); if (LLGLSLShader::sNoFixedFunction)
glEnable(GL_TEXTURE_GEN_T); {
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); sShader->uniform4fv("object_plane_s", 1, tp0.mV);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); sShader->uniform4fv("object_plane_t", 1, tp1.mV);
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); }
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); else
{
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
}
gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR); gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
drawLoop(); drawLoop();
...@@ -843,8 +867,11 @@ void LLDrawPoolTerrain::renderSimple() ...@@ -843,8 +867,11 @@ void LLDrawPoolTerrain::renderSimple()
gGL.getTexUnit(0)->activate(); gGL.getTexUnit(0)->activate();
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glDisable(GL_TEXTURE_GEN_S); if (!LLGLSLShader::sNoFixedFunction)
glDisable(GL_TEXTURE_GEN_T); {
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
}
gGL.matrixMode(LLRender::MM_TEXTURE); gGL.matrixMode(LLRender::MM_TEXTURE);
gGL.loadIdentity(); gGL.loadIdentity();
gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.matrixMode(LLRender::MM_MODELVIEW);
......
...@@ -1039,16 +1039,8 @@ void LLFloaterPreference::refreshEnabledState() ...@@ -1039,16 +1039,8 @@ void LLFloaterPreference::refreshEnabledState()
BOOL shaders = gGLManager.mGLVersion >= 2.f; BOOL shaders = gGLManager.mGLVersion >= 2.f;
if (shaders) mRadioTerrainDetail->setEnabled(TRUE);
{
mRadioTerrainDetail->setValue(1);
mRadioTerrainDetail->setEnabled(FALSE);
}
else
{
mRadioTerrainDetail->setEnabled(TRUE);
}
// WindLight // WindLight
LLCheckBoxCtrl* ctrl_wind_light = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders"); LLCheckBoxCtrl* ctrl_wind_light = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment