Skip to content
Snippets Groups Projects
Commit 5c7b2992 authored by AndreyL ProductEngine's avatar AndreyL ProductEngine
Browse files

MAINT-5096 FIXED Camming is broken in freeze frame mode once snapshot is refreshed...

Fix for freezing by ticking the "Freeze frame" checkbox
parent 394952e4
No related branches found
No related tags found
No related merge requests found
...@@ -663,14 +663,20 @@ void LLFloaterSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* data) ...@@ -663,14 +663,20 @@ void LLFloaterSnapshot::Impl::onCommitFreezeFrame(LLUICtrl* ctrl, void* data)
{ {
LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl; LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl;
LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
LLSnapshotLivePreview* previewp = getPreviewView(view);
if (!view || !check_box) if (!view || !check_box || !previewp)
{ {
return; return;
} }
gSavedSettings.setBOOL("UseFreezeFrame", check_box->get()); gSavedSettings.setBOOL("UseFreezeFrame", check_box->get());
if (check_box->get())
{
previewp->prepareFreezeFrame();
}
updateLayout(view); updateLayout(view);
} }
......
...@@ -750,40 +750,9 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) ...@@ -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 // Full size preview is set: get the decoded image result and save it for animation
if (gSavedSettings.getBOOL("UseFreezeFrame") && previewp->mAllowFullScreenPreview) if (gSavedSettings.getBOOL("UseFreezeFrame") && previewp->mAllowFullScreenPreview)
{ {
// Get the decoded version of the formatted image previewp->prepareFreezeFrame();
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
}
} }
// The snapshot is updated now... // The snapshot is updated now...
previewp->mSnapshotUpToDate = TRUE; previewp->mSnapshotUpToDate = TRUE;
...@@ -811,6 +780,47 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) ...@@ -811,6 +780,47 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
return TRUE; 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 LLSnapshotLivePreview::getEncodedImageWidth() const
{ {
S32 width = getWidth(); S32 width = getWidth();
......
...@@ -119,7 +119,7 @@ class LLSnapshotLivePreview : public LLView ...@@ -119,7 +119,7 @@ class LLSnapshotLivePreview : public LLView
void generateThumbnailImage(BOOL force_update = FALSE) ; void generateThumbnailImage(BOOL force_update = FALSE) ;
void resetThumbnailImage() { mThumbnailImage = NULL ; } void resetThumbnailImage() { mThumbnailImage = NULL ; }
void drawPreviewRect(S32 offset_x, S32 offset_y) ; void drawPreviewRect(S32 offset_x, S32 offset_y) ;
void prepareFreezeFrame();
LLViewerTexture* getBigThumbnailImage(); LLViewerTexture* getBigThumbnailImage();
S32 getBigThumbnailWidth() const { return mBigThumbnailWidth ; } S32 getBigThumbnailWidth() const { return mBigThumbnailWidth ; }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment