diff options
| author | Graham Linden <graham@lindenlab.com> | 2018-10-02 00:57:32 +0100 | 
|---|---|---|
| committer | Graham Linden <graham@lindenlab.com> | 2018-10-02 00:57:32 +0100 | 
| commit | b4d6611ea7e5f3dfe01e7c7f7dae9c5b2c2347b8 (patch) | |
| tree | f2304ff568bf7f8c9a574530a477bf864cb877c6 | |
| parent | c98522a40ec6855a11a781301fca7a3943ba5a25 (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.
| -rw-r--r-- | indra/newview/lldrawpoolwlsky.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.h | 4 | ||||
| -rw-r--r-- | indra/newview/llvosky.cpp | 16 | 
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);              | 
