summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorGraham Linden <graham@lindenlab.com>2018-10-02 00:57:32 +0100
committerGraham Linden <graham@lindenlab.com>2018-10-02 00:57:32 +0100
commitb4d6611ea7e5f3dfe01e7c7f7dae9c5b2c2347b8 (patch)
treef2304ff568bf7f8c9a574530a477bf864cb877c6 /indra/newview
parentc98522a40ec6855a11a781301fca7a3943ba5a25 (diff)
SL-9775
Add LLPointer<> on stack to avoid textures being deleted out from under the sky code. Make textures used by sky settings remove their faces from media textures. Add ability to detect when a given texture is viewer media with vfunc.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp4
-rw-r--r--indra/newview/llviewertexture.h4
-rw-r--r--indra/newview/llvosky.cpp16
3 files changed, 21 insertions, 3 deletions
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index a796052635..5104dc18fd 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -392,8 +392,8 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
if (gSky.mVOSkyp->getSun().getDraw() && face && face->getGeomCount())
{
- LLViewerTexture* tex_a = face->getTexture(LLRender::DIFFUSE_MAP);
- LLViewerTexture* tex_b = face->getTexture(LLRender::ALTERNATE_DIFFUSE_MAP);
+ LLPointer<LLViewerTexture> tex_a = face->getTexture(LLRender::DIFFUSE_MAP);
+ LLPointer<LLViewerTexture> tex_b = face->getTexture(LLRender::ALTERNATE_DIFFUSE_MAP);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 7b58c97bc4..022f937619 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -125,6 +125,8 @@ public:
virtual BOOL isMissingAsset() const ;
virtual void dump(); // debug info to LL_INFOS()
+ virtual BOOL isViewerMediaTexture() const { return false; }
+
/*virtual*/ bool bindDefaultImage(const S32 stage = 0) ;
/*virtual*/ bool bindDebugImage(const S32 stage = 0) ;
/*virtual*/ void forceImmediateUpdate() ;
@@ -576,6 +578,8 @@ public:
BOOL isPlaying() const {return mIsPlaying;}
void setMediaImpl() ;
+ virtual BOOL isViewerMediaTexture() const { return true; }
+
void initVirtualSize() ;
void invalidateMediaImpl() ;
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index c6267d50ff..a42239ec87 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -874,8 +874,22 @@ void LLVOSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_textur
{
mSunTexturep[0]->setAddressMode(LLTexUnit::TAM_CLAMP);
}
+
+ LLViewerTexture* current_tex0 = mFace[FACE_SUN]->getTexture(LLRender::DIFFUSE_MAP);
+ LLViewerTexture* current_tex1 = mFace[FACE_SUN]->getTexture(LLRender::ALTERNATE_DIFFUSE_MAP);
+
+ if (current_tex0 && (mSunTexturep[0] != current_tex0) && current_tex0->isViewerMediaTexture())
+ {
+ static_cast<LLViewerMediaTexture*>(current_tex0)->removeMediaFromFace(mFace[FACE_SUN]);
+ }
+
+ if (current_tex1 && (mSunTexturep[1] != current_tex1) && current_tex1->isViewerMediaTexture())
+ {
+ static_cast<LLViewerMediaTexture*>(current_tex1)->removeMediaFromFace(mFace[FACE_SUN]);
+ }
+
mFace[FACE_SUN]->setTexture(LLRender::DIFFUSE_MAP, mSunTexturep[0]);
-
+
if (mSunTexturep[1])
{
mSunTexturep[1]->setAddressMode(LLTexUnit::TAM_CLAMP);