Make sun/moon textures render on Low/Low-Mid again.

Fix solar additive being present when moon was only heavenly body in sky.
master
Graham Linden 2019-08-12 13:44:59 -07:00
parent 71af0a2a9e
commit 41c7523e08
5 changed files with 49 additions and 33 deletions

View File

@ -111,37 +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);
F32 interp_val = gSky.mVOSkyp ? gSky.mVOSkyp->getInterpVal() : 0.0f;
gGL.getTexUnit(0)->setTextureColorSpace(LLTexUnit::TCS_SRGB);
if (index < 6) // sky tex...interp
{
llassert(mSkyTex);
mSkyTex[index].bindTexture(true); // bind the current tex
face.renderIndexed();
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();
}
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 )

View File

@ -61,7 +61,7 @@ public:
/*virtual*/ void endRenderPass(S32 pass);
void setSkyTex(LLSkyTex* const st) { mSkyTex = st; }
void renderSkyCubeFace(U8 side);
void renderSkyFace(U8 index);
void renderHeavenlyBody(U8 hb, LLFace* face);
void renderSunHalo(LLFace* face);

View File

@ -442,7 +442,7 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)
vars.density_multiplier = psky->getDensityMultiplier();
vars.distance_multiplier = psky->getDistanceMultiplier();
vars.max_y = psky->getMaxY();
vars.sun_norm = LLEnvironment::instance().getLightDirectionCFR();
vars.sun_norm = LLEnvironment::instance().getSunDirectionCFR();
vars.sunlight = psky->getSunlightColor();
vars.ambient = psky->getAmbientColor();
vars.glow = psky->getGlow();

View File

@ -90,7 +90,6 @@ namespace
S32 LLSkyTex::sComponents = 4;
S32 LLSkyTex::sResolution = 64;
F32 LLSkyTex::sInterpVal = 0.f;
S32 LLSkyTex::sCurrent = 0;
@ -479,7 +478,7 @@ void LLVOSky::init()
m_atmosphericsVars.haze_horizon = psky->getHazeHorizon();
m_atmosphericsVars.density_multiplier = psky->getDensityMultiplier();
m_atmosphericsVars.max_y = psky->getMaxY();
m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedLightNorm();
m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedSunNorm();
m_atmosphericsVars.sunlight = psky->getSunlightColor();
m_atmosphericsVars.ambient = psky->getAmbientColor();
m_atmosphericsVars.glow = psky->getGlow();
@ -531,7 +530,7 @@ void LLVOSky::calc()
m_atmosphericsVars.density_multiplier = psky->getDensityMultiplier();
m_atmosphericsVars.distance_multiplier = psky->getDistanceMultiplier();
m_atmosphericsVars.max_y = psky->getMaxY();
m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedLightNorm();
m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedSunNorm();
m_atmosphericsVars.sunlight = psky->getSunlightColor();
m_atmosphericsVars.ambient = psky->getAmbientColor();
m_atmosphericsVars.glow = psky->getGlow();
@ -725,8 +724,6 @@ bool LLVOSky::updateSky()
next_frame = next_frame % cycle_frame_no;
mInterpVal = (!mInitialized) ? 1 : (F32)next_frame / cycle_frame_no;
// sInterpVal = (F32)next_frame / cycle_frame_no;
LLSkyTex::setInterpVal( mInterpVal );
LLHeavenBody::setInterpVal( mInterpVal );
updateDirections();
@ -912,6 +909,8 @@ void LLVOSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_textur
mSunTexturep[0] = sun_texture.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(sun_texture, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
mSunTexturep[1] = sun_texture_next.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(sun_texture_next, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
bool can_use_wl = gPipeline.canUseWindLightShaders();
if (mFace[FACE_SUN])
{
if (mSunTexturep[0])
@ -934,11 +933,14 @@ void LLVOSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_textur
mFace[FACE_SUN]->setTexture(LLRender::DIFFUSE_MAP, mSunTexturep[0]);
if (mSunTexturep[1])
if (can_use_wl)
{
mSunTexturep[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
if (mSunTexturep[1])
{
mSunTexturep[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
}
mFace[FACE_SUN]->setTexture(LLRender::ALTERNATE_DIFFUSE_MAP, mSunTexturep[1]);
}
mFace[FACE_SUN]->setTexture(LLRender::ALTERNATE_DIFFUSE_MAP, mSunTexturep[1]);
}
}
@ -946,6 +948,8 @@ void LLVOSky::setMoonTextures(const LLUUID& moon_texture, const LLUUID& moon_tex
{
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
bool can_use_wl = gPipeline.canUseWindLightShaders();
mMoonTexturep[0] = moon_texture.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(moon_texture, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
mMoonTexturep[1] = moon_texture_next.isNull() ? nullptr : LLViewerTextureManager::getFetchedTexture(moon_texture_next, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
@ -957,7 +961,7 @@ void LLVOSky::setMoonTextures(const LLUUID& moon_texture, const LLUUID& moon_tex
}
mFace[FACE_MOON]->setTexture(LLRender::DIFFUSE_MAP, mMoonTexturep[0]);
if (mMoonTexturep[1])
if (mMoonTexturep[1] && can_use_wl)
{
mMoonTexturep[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
mFace[FACE_MOON]->setTexture(LLRender::ALTERNATE_DIFFUSE_MAP, mMoonTexturep[1]);

View File

@ -57,13 +57,8 @@ private:
LLColor4 *mSkyData;
LLVector3 *mSkyDirs; // Cache of sky direction vectors
static S32 sCurrent;
static F32 sInterpVal;
public:
static F32 getInterpVal() { return sInterpVal; }
static void setInterpVal(const F32 v) { sInterpVal = v; }
static BOOL doInterpolate() { return sInterpVal > 0.001f; }
void bindTexture(BOOL curr = TRUE);
protected:
@ -299,6 +294,8 @@ public:
LLFace *mFace[FACE_COUNT];
LLVector3 mBumpSunDir;
F32 getInterpVal() const { return mInterpVal; }
protected:
~LLVOSky();