diff options
| -rwxr-xr-x | indra/newview/llfloatersnapshot.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llsnapshotlivepreview.cpp | 76 | ||||
| -rw-r--r-- | indra/newview/llsnapshotlivepreview.h | 2 | 
3 files changed, 51 insertions, 35 deletions
| diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 16fa4684ab..afec981d56 100755 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -663,14 +663,20 @@ void LLFloaterSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* data)  {  	LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl;  	LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; +	LLSnapshotLivePreview* previewp = getPreviewView(view); -	if (!view || !check_box) +	if (!view || !check_box || !previewp)  	{  		return;  	}  	gSavedSettings.setBOOL("UseFreezeFrame", check_box->get()); +	if (check_box->get()) +	{ +		previewp->prepareFreezeFrame(); +	} +  	updateLayout(view);  } diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index abab3174cd..6af9d61a54 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -750,40 +750,9 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )              // Full size preview is set: get the decoded image result and save it for animation              if (gSavedSettings.getBOOL("UseFreezeFrame") && previewp->mAllowFullScreenPreview)              { -                // Get the decoded version of the formatted image -                previewp->getEncodedImage(); -             -                // We need to scale that a bit for display... -                LLPointer<LLImageRaw> scaled = new LLImageRaw( -                    previewp->mPreviewImageEncoded->getData(), -                    previewp->mPreviewImageEncoded->getWidth(), -                    previewp->mPreviewImageEncoded->getHeight(), -                    previewp->mPreviewImageEncoded->getComponents()); - -                if (!scaled->isBufferInvalid()) -                { -                    // leave original image dimensions, just scale up texture buffer -                    if (previewp->mPreviewImageEncoded->getWidth() > 1024 || previewp->mPreviewImageEncoded->getHeight() > 1024) -                    { -                        // go ahead and shrink image to appropriate power of 2 for display -                        scaled->biasedScaleToPowerOfTwo(1024); -                        previewp->setImageScaled(TRUE); -                    } -                    else -                    { -                        // expand image but keep original image data intact -                        scaled->expandToPowerOfTwo(1024, FALSE); -                    } - -                    previewp->mViewerImage[previewp->mCurImageIndex] = LLViewerTextureManager::getLocalTexture(scaled.get(), FALSE); -                    LLPointer<LLViewerTexture> curr_preview_image = previewp->mViewerImage[previewp->mCurImageIndex]; -                    gGL.getTexUnit(0)->bind(curr_preview_image); -                    curr_preview_image->setFilteringOption(previewp->getSnapshotType() == SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT); -                    curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP); - -                    previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame -                } +                previewp->prepareFreezeFrame();              } +              // The snapshot is updated now...              previewp->mSnapshotUpToDate = TRUE; @@ -811,6 +780,47 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )  	return TRUE;  } +void LLSnapshotLivePreview::prepareFreezeFrame() +{ +    // Get the decoded version of the formatted image +    getEncodedImage(); + +    // We need to scale that a bit for display... +    LLPointer<LLImageRaw> scaled = new LLImageRaw( +        mPreviewImageEncoded->getData(), +        mPreviewImageEncoded->getWidth(), +        mPreviewImageEncoded->getHeight(), +        mPreviewImageEncoded->getComponents()); + +    if (!scaled->isBufferInvalid()) +    { +        // leave original image dimensions, just scale up texture buffer +        if (mPreviewImageEncoded->getWidth() > 1024 || mPreviewImageEncoded->getHeight() > 1024) +        { +            // go ahead and shrink image to appropriate power of 2 for display +            scaled->biasedScaleToPowerOfTwo(1024); +            setImageScaled(TRUE); +        } +        else +        { +            // expand image but keep original image data intact +            scaled->expandToPowerOfTwo(1024, FALSE); +        } + +        mViewerImage[mCurImageIndex] = LLViewerTextureManager::getLocalTexture(scaled.get(), FALSE); +        LLPointer<LLViewerTexture> curr_preview_image = mViewerImage[mCurImageIndex]; +        gGL.getTexUnit(0)->bind(curr_preview_image); +        curr_preview_image->setFilteringOption(getSnapshotType() == SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT); +        curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP); + + +        if (gSavedSettings.getBOOL("UseFreezeFrame") && mAllowFullScreenPreview) +        { +            mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame +        } +    } +} +  S32 LLSnapshotLivePreview::getEncodedImageWidth() const  {      S32 width = getWidth(); diff --git a/indra/newview/llsnapshotlivepreview.h b/indra/newview/llsnapshotlivepreview.h index fed33bf37c..57e5d83f8e 100644 --- a/indra/newview/llsnapshotlivepreview.h +++ b/indra/newview/llsnapshotlivepreview.h @@ -119,7 +119,7 @@ public:  	void generateThumbnailImage(BOOL force_update = FALSE) ;  	void resetThumbnailImage() { mThumbnailImage = NULL ; }  	void drawPreviewRect(S32 offset_x, S32 offset_y) ; - +	void prepareFreezeFrame();  	LLViewerTexture* getBigThumbnailImage();  	S32  getBigThumbnailWidth() const { return mBigThumbnailWidth ; } | 
