summaryrefslogtreecommitdiff
path: root/indra/newview/lldrawpoolsky.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lldrawpoolsky.cpp')
-rw-r--r--indra/newview/lldrawpoolsky.cpp69
1 files changed, 39 insertions, 30 deletions
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index bdb16abc78..dbe8724088 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -55,7 +55,7 @@ LLDrawPool *LLDrawPoolSky::instancePool()
void LLDrawPoolSky::prerender()
{
- mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_ENVIRONMENT);
+ mShaderLevel = LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_ENVIRONMENT);
gSky.mVOSkyp->updateGeometry(gSky.mVOSkyp->mDrawable);
}
@@ -75,7 +75,7 @@ void LLDrawPoolSky::render(S32 pass)
}
// don't render sky under water (background just gets cleared to fog color)
- if(mVertexShaderLevel > 0 && LLPipeline::sUnderWaterRender)
+ if(mShaderLevel > 0 && LLPipeline::sUnderWaterRender)
{
return;
}
@@ -98,18 +98,10 @@ void LLDrawPoolSky::render(S32 pass)
}
- LLGLSPipelineSkyBox gls_skybox;
+ LLGLSPipelineDepthTestSkyBox gls_skybox(true, false);
- LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
-
- LLGLSquashToFarClip far_clip(glh_get_current_projection());
-
- LLGLEnable fog_enable( (mVertexShaderLevel < 1 && LLViewerCamera::getInstance()->cameraUnderWater()) ? GL_FOG : 0);
-
- gPipeline.disableLights();
+ LLGLEnable fog_enable( (mShaderLevel < 1 && LLViewerCamera::getInstance()->cameraUnderWater()) ? GL_FOG : 0);
- LLGLDisable clip(GL_CLIP_PLANE0);
-
gGL.pushMatrix();
LLVector3 origin = LLViewerCamera::getInstance()->getOrigin();
gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]);
@@ -119,35 +111,52 @@ void LLDrawPoolSky::render(S32 pass)
LLVertexBuffer::unbind();
gGL.diffuseColor4f(1,1,1,1);
- for (S32 i = 0; i < llmin(6, face_count); ++i)
+ for (S32 i = 0; i < face_count; ++i)
{
- renderSkyCubeFace(i);
+ renderSkyFace(i);
}
gGL.popMatrix();
}
-void LLDrawPoolSky::renderSkyCubeFace(U8 side)
+void LLDrawPoolSky::renderSkyFace(U8 index)
{
- LLFace &face = *mDrawFace[LLVOSky::FACE_SIDE0 + side];
- if (!face.getGeomCount())
+ LLFace* face = mDrawFace[index];
+
+ if (!face || !face->getGeomCount())
{
return;
}
- llassert(mSkyTex);
- mSkyTex[side].bindTexture(TRUE);
-
- face.renderIndexed();
-
- if (LLSkyTex::doInterpolate())
- {
-
- LLGLEnable blend(GL_BLEND);
- mSkyTex[side].bindTexture(FALSE);
- gGL.diffuseColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled
- face.renderIndexed();
- }
+ F32 interp_val = gSky.mVOSkyp ? gSky.mVOSkyp->getInterpVal() : 0.0f;
+
+ if (index < 6) // sky tex...interp
+ {
+ llassert(mSkyTex);
+ mSkyTex[index].bindTexture(true); // bind the current tex
+
+ face->renderIndexed();
+
+ if (interp_val > 0.01f) // iff, we've got enough info to lerp (a to and a from)
+ {
+ LLGLEnable blend(GL_BLEND);
+ llassert(mSkyTex);
+ mSkyTex[index].bindTexture(false); // bind the "other" texture
+ gGL.diffuseColor4f(1, 1, 1, interp_val); // lighting is disabled
+ face->renderIndexed();
+ }
+ }
+ else // heavenly body faces, no interp...
+ {
+ LLGLEnable blend(GL_BLEND);
+
+ LLViewerTexture* tex = face->getTexture(LLRender::DIFFUSE_MAP);
+ if (tex)
+ {
+ gGL.getTexUnit(0)->bind(tex, true);
+ face->renderIndexed();
+ }
+ }
}
void LLDrawPoolSky::endRenderPass( S32 pass )