Huge renderer update (WIP). Still plenty to do, especially pertaining to UI.
-Nametag bubble visbility is oddly inconsistent. May vanish with future planned UI merges... -VBOs are PAINFULLY slow on ATI hardware. This repos self-compiled davep/shining-fixes branch, so I'll leave the ball in LL's court for now regarding that.
This commit is contained in:
@@ -113,6 +113,10 @@ U32 LLDrawPoolTerrain::getVertexDataMask()
|
||||
{
|
||||
return LLVertexBuffer::MAP_VERTEX;
|
||||
}
|
||||
else if (LLGLSLShader::sCurBoundShaderPtr)
|
||||
{
|
||||
return VERTEX_DATA_MASK & ~(LLVertexBuffer::MAP_TEXCOORD2 | LLVertexBuffer::MAP_TEXCOORD3);
|
||||
}
|
||||
else
|
||||
{
|
||||
return VERTEX_DATA_MASK;
|
||||
@@ -122,14 +126,7 @@ U32 LLDrawPoolTerrain::getVertexDataMask()
|
||||
void LLDrawPoolTerrain::prerender()
|
||||
{
|
||||
mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_ENVIRONMENT);
|
||||
if (mVertexShaderLevel > 0)
|
||||
{
|
||||
sDetailMode = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
|
||||
}
|
||||
sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
|
||||
}
|
||||
|
||||
void LLDrawPoolTerrain::beginRenderPass( S32 pass )
|
||||
@@ -181,6 +178,8 @@ void LLDrawPoolTerrain::render(S32 pass)
|
||||
compp->mDetailTextures[i]->addTextureStats(1024.f*1024.f); // assume large pixel area
|
||||
}
|
||||
|
||||
LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f);
|
||||
|
||||
if (!gGLManager.mHasMultitexture)
|
||||
{
|
||||
// No multitexture, render simple land.
|
||||
@@ -195,22 +194,27 @@ void LLDrawPoolTerrain::render(S32 pass)
|
||||
}
|
||||
|
||||
LLGLSPipeline gls;
|
||||
LLOverrideFaceColor override(this, 1.f, 1.f, 1.f, 1.f);
|
||||
|
||||
|
||||
if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0)
|
||||
{
|
||||
gPipeline.enableLightsDynamic();
|
||||
|
||||
renderFullShader();
|
||||
}
|
||||
else
|
||||
{
|
||||
gPipeline.enableLightsStatic();
|
||||
|
||||
if (sDetailMode == 0){
|
||||
if (sDetailMode == 0)
|
||||
{
|
||||
renderSimple();
|
||||
} else if (gGLManager.mNumTextureUnits < 4){
|
||||
}
|
||||
else if (gGLManager.mNumTextureUnits < 4)
|
||||
{
|
||||
renderFull2TU();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
renderFull4TU();
|
||||
}
|
||||
}
|
||||
@@ -223,8 +227,9 @@ void LLDrawPoolTerrain::render(S32 pass)
|
||||
{ //use fullbright shader for highlighting
|
||||
LLGLSLShader* old_shader = sShader;
|
||||
sShader->unbind();
|
||||
sShader = &gObjectFullbrightNonIndexedProgram;
|
||||
sShader = &gHighlightProgram;
|
||||
sShader->bind();
|
||||
gGL.diffuseColor4f(1,1,1,1);
|
||||
LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
|
||||
glPolygonOffset(-1.0f, -1.0f);
|
||||
renderOwnership();
|
||||
@@ -320,13 +325,12 @@ void LLDrawPoolTerrain::renderFullShader()
|
||||
gGL.getTexUnit(detail0)->bind(detail_texture0p);
|
||||
gGL.getTexUnit(0)->activate();
|
||||
|
||||
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);
|
||||
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
|
||||
llassert(shader);
|
||||
|
||||
shader->uniform4fv("object_plane_s", 1, tp0.mV);
|
||||
shader->uniform4fv("object_plane_t", 1, tp1.mV);
|
||||
|
||||
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
|
||||
glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
@@ -388,17 +392,11 @@ void LLDrawPoolTerrain::renderFullShader()
|
||||
gGL.getTexUnit(alpha_ramp)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(4)->disable();
|
||||
gGL.getTexUnit(4)->activate();
|
||||
glDisable(GL_TEXTURE_GEN_S);
|
||||
glDisable(GL_TEXTURE_GEN_T);
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
|
||||
|
||||
gGL.getTexUnit(detail3)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(3)->disable();
|
||||
gGL.getTexUnit(3)->activate();
|
||||
glDisable(GL_TEXTURE_GEN_S);
|
||||
glDisable(GL_TEXTURE_GEN_T);
|
||||
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
@@ -406,8 +404,7 @@ void LLDrawPoolTerrain::renderFullShader()
|
||||
gGL.getTexUnit(detail2)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(2)->disable();
|
||||
gGL.getTexUnit(2)->activate();
|
||||
glDisable(GL_TEXTURE_GEN_S);
|
||||
glDisable(GL_TEXTURE_GEN_T);
|
||||
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
@@ -415,8 +412,7 @@ void LLDrawPoolTerrain::renderFullShader()
|
||||
gGL.getTexUnit(detail1)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(1)->disable();
|
||||
gGL.getTexUnit(1)->activate();
|
||||
glDisable(GL_TEXTURE_GEN_S);
|
||||
glDisable(GL_TEXTURE_GEN_T);
|
||||
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
@@ -427,8 +423,6 @@ void LLDrawPoolTerrain::renderFullShader()
|
||||
gGL.getTexUnit(detail0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(0)->activate();
|
||||
glDisable(GL_TEXTURE_GEN_S);
|
||||
glDisable(GL_TEXTURE_GEN_T);
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
@@ -839,13 +833,21 @@ void LLDrawPoolTerrain::renderSimple()
|
||||
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));
|
||||
|
||||
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);
|
||||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
sShader->uniform4fv("object_plane_s", 1, tp0.mV);
|
||||
sShader->uniform4fv("object_plane_t", 1, 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);
|
||||
|
||||
drawLoop();
|
||||
@@ -855,8 +857,11 @@ void LLDrawPoolTerrain::renderSimple()
|
||||
|
||||
gGL.getTexUnit(0)->activate();
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
glDisable(GL_TEXTURE_GEN_S);
|
||||
glDisable(GL_TEXTURE_GEN_T);
|
||||
if (!LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
glDisable(GL_TEXTURE_GEN_S);
|
||||
glDisable(GL_TEXTURE_GEN_T);
|
||||
}
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
|
||||
Reference in New Issue
Block a user