summaryrefslogtreecommitdiff
path: root/indra/newview/llvosky.cpp
diff options
context:
space:
mode:
authorGraham Madarasz <graham@lindenlab.com>2019-07-16 21:15:41 +0000
committerGraham Madarasz <graham@lindenlab.com>2019-07-16 21:15:41 +0000
commitced2ca2acd166a28dfca5c28f1c7dff46843a5a0 (patch)
treeee2a0170c8814672c455261cd95ae9f73502256b /indra/newview/llvosky.cpp
parentbba3cc598785539c477e817ada18d9e7a4692286 (diff)
parentdc7aa170b80bb7d3f7725b5bddce08ff2da5a7a7 (diff)
Merged in graham_linden/viewer-eep-g (pull request #465)
SL-11605, SL-11610
Diffstat (limited to 'indra/newview/llvosky.cpp')
-rw-r--r--indra/newview/llvosky.cpp92
1 files changed, 53 insertions, 39 deletions
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index cf3132447d..ad452659c6 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -424,6 +424,7 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
mInitialized = FALSE;
mbCanSelect = FALSE;
+ mUpdateTimer.reset();
mForceUpdateThrottle.setTimerExpirySec(UPDATE_EXPRY);
mForceUpdateThrottle.reset();
@@ -706,6 +707,7 @@ bool LLVOSky::updateSky()
// It's dead. Don't update it.
return TRUE;
}
+
if (gGLManager.mIsDisabled)
{
return TRUE;
@@ -746,11 +748,12 @@ bool LLVOSky::updateSky()
mForceUpdate = mForceUpdate || moon_direction_changed;
mForceUpdate = mForceUpdate || color_changed;
mForceUpdate = mForceUpdate || !mInitialized;
- mForceUpdate = mForceUpdate || mForceUpdateThrottle.hasExpired();
+
+ bool is_alm_wl_sky = gPipeline.canUseWindLightShaders();
calc();
- if (mForceUpdate)
+ if (mForceUpdate && mForceUpdateThrottle.hasExpired())
{
LL_RECORD_BLOCK_TIME(FTM_VOSKY_UPDATEFORCED);
@@ -759,62 +762,73 @@ bool LLVOSky::updateSky()
LLSkyTex::stepCurrent();
if (!direction.isExactlyZero())
- {
- mInitialized = TRUE;
-
- updateFog(LLViewerCamera::getInstance()->getFar());
+ {
mLastTotalAmbient = total_ambient;
+ mInitialized = TRUE;
if (mCubeMap)
{
- for (int side = 0; side < 6; side++)
- {
- for (int tile = 0; tile < NUM_TILES; tile++)
- {
- createSkyTexture(m_atmosphericsVars, side, tile, mShinyTex, true);
- }
- }
-
- int tex = mShinyTex[0].getWhich(TRUE);
-
- for (int side = 0; side < 6; side++)
- {
- LLImageRaw* raw1 = nullptr;
- LLImageRaw* raw2 = nullptr;
- raw1 = mShinyTex[side].getImageRaw(TRUE);
- raw2 = mShinyTex[side].getImageRaw(FALSE);
- raw2->copy(raw1);
- mShinyTex[side].createGLImage(tex);
- mShinyTex[side].create(1.0f);
- }
- initCubeMap();
- }
+ updateFog(LLViewerCamera::getInstance()->getFar());
- // if we're using a generated sky cubemap instead of rendered sky...
- if (!gPipeline.canUseWindLightShaders())
- {
for (int side = 0; side < 6; side++)
{
for (int tile = 0; tile < NUM_TILES; tile++)
{
createSkyTexture(m_atmosphericsVars, side, tile, mSkyTex);
+ createSkyTexture(m_atmosphericsVars, side, tile, mShinyTex, true);
}
}
+ }
- int tex = mSkyTex[0].getWhich(TRUE);
+ int tex = mSkyTex[0].getWhich(TRUE);
- for (int side = 0; side < 6; side++)
- {
- LLImageRaw* raw1 = nullptr;
- LLImageRaw* raw2 = nullptr;
+ for (int side = 0; side < 6; side++)
+ {
+ LLImageRaw* raw1 = nullptr;
+ LLImageRaw* raw2 = nullptr;
+
+ if (!is_alm_wl_sky)
+ {
raw1 = mSkyTex[side].getImageRaw(TRUE);
raw2 = mSkyTex[side].getImageRaw(FALSE);
raw2->copy(raw1);
mSkyTex[side].createGLImage(tex);
- mSkyTex[side].create(1.0f);
- }
+ }
+
+ raw1 = mShinyTex[side].getImageRaw(TRUE);
+ raw2 = mShinyTex[side].getImageRaw(FALSE);
+ raw2->copy(raw1);
+ mShinyTex[side].createGLImage(tex);
}
- }
+ next_frame = 0;
+
+ // update the sky texture
+ if (!is_alm_wl_sky)
+ {
+ for (S32 i = 0; i < 6; ++i)
+ {
+ mSkyTex[i].create(1.0f);
+ }
+ }
+
+ for (S32 i = 0; i < 6; ++i)
+ {
+ mShinyTex[i].create(1.0f);
+ }
+
+ // update the environment map
+ if (mCubeMap)
+ {
+ std::vector<LLPointer<LLImageRaw> > images;
+ images.reserve(6);
+ for (S32 side = 0; side < 6; side++)
+ {
+ images.push_back(mShinyTex[side].getImageRaw(TRUE));
+ }
+ mCubeMap->init(images);
+ gGL.getTexUnit(0)->disable();
+ }
+ }
gPipeline.markRebuild(gSky.mVOGroundp->mDrawable, LLDrawable::REBUILD_ALL, TRUE);
mForceUpdate = FALSE;