From 34bc68611a3d3879b5645929c24eacb6778db2f3 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Thu, 13 May 2010 19:21:19 -0700 Subject: Stops an avatar's texture from flickering on OS but leaves behind the corrupt texture until they rebake. A half-fix at best. Maybe. Revert if it causes problems --- linden/indra/newview/llviewerimage.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp index 3a14bf0..62539a6 100644 --- a/linden/indra/newview/llviewerimage.cpp +++ b/linden/indra/newview/llviewerimage.cpp @@ -776,6 +776,10 @@ void LLViewerImage::switchToCachedImage() // We've changed the number of components, so we need to move any // objects using this pool to a different pool. mComponents = mRawImage->getComponents(); + if ((U32)mComponents > 4) + { + LL_DEBUGS("Openjpeg") << "Bad number of components for mRawImage: " << (U32)mComponents << "!" << llendl; + } gImageList.dirtyImage(this); } @@ -1054,10 +1058,27 @@ bool LLViewerImage::updateFetch() { if (getComponents() != mRawImage->getComponents()) { - // We've changed the number of components, so we need to move any - // objects using this pool to a different pool. - mComponents = mRawImage->getComponents(); - gImageList.dirtyImage(this); + // Do a quick sanity check to make sure we can actually + // use the right number of components here -- MC + if ((U32)mRawImage->getComponents() > 4) + { + LL_DEBUGS("Openjpeg") << "Bad number of components for mRawImage->getComponents(): " << (U32)mRawImage->getComponents() << "! Stopping fetching of the texture" << llendl; + + destroyRawImage(); + setIsMissingAsset(); + mRawDiscardLevel = INVALID_DISCARD_LEVEL ; + mIsFetching = FALSE ; + gImageList.deleteImage(this); + + return FALSE; + } + else + { + // We've changed the number of components, so we need to move any + // objects using this pool to a different pool. + mComponents = mRawImage->getComponents(); + gImageList.dirtyImage(this); + } } mFullWidth = mRawImage->getWidth() << mRawDiscardLevel; -- cgit v1.1