From 456bec3e838b8dd3cd6f9d93b58978b6abced311 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Wed, 16 Feb 2011 18:19:22 -0600 Subject: [PATCH] Fixed snapshot floater failing to render overlay texture when full-screen preview is enabled Enabled bulk glReadPixels for snapshots if target-resolution matches render-resolution Snapshot thumbnail generated from downscaled render image, instead of requring an extra pass. --- indra/llrender/llpostprocess.cpp | 3 ++- indra/newview/llfloatersnapshot.cpp | 15 +++++++++++++-- indra/newview/llviewerwindow.cpp | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp index c1c7f2132..ae367cee5 100644 --- a/indra/llrender/llpostprocess.cpp +++ b/indra/llrender/llpostprocess.cpp @@ -428,7 +428,8 @@ void LLPostProcess::doEffects(void) /// Clear the frame buffer. glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); - + LLGLDisable(GL_DEPTH_TEST); + /// Change to an orthogonal view viewOrthogonal(screenW, screenH); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 99ab752f2..c7b37c1e0 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -243,6 +243,7 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) : mKeepAspectRatio = gSavedSettings.getBOOL("KeepAspectForSnapshot") ; mThumbnailUpdateLock = FALSE ; mThumbnailUpToDate = FALSE ; + updateSnapshot(TRUE,TRUE); //To initialize mImageRect to correct values } LLSnapshotLivePreview::~LLSnapshotLivePreview() @@ -880,7 +881,17 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP); previewp->mSnapshotUpToDate = TRUE; - previewp->generateThumbnailImage(TRUE) ; + //Resize to thumbnail. + { + previewp->mThumbnailUpToDate = TRUE ; + previewp->mThumbnailUpdateLock = TRUE ; + S32 w = get_lower_power_two(scaled->getWidth(), 512) * 2 ; + S32 h = get_lower_power_two(scaled->getHeight(), 512) * 2 ; + scaled->scale(w,h); + previewp->mThumbnailImage = new LLImageGL(scaled, FALSE); + previewp->mThumbnailUpdateLock = FALSE ; + previewp->setThumbnailImageSize(); + } previewp->mPosTakenGlobal = gAgent.getCameraPositionGlobal(); previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame @@ -1236,7 +1247,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) { std::string fee = gHippoGridManager->getConnectedGrid()->getUploadFee(); floater->childSetLabelArg("upload_btn", "[UPLOADFEE]", fee); - + LLRadioGroup* snapshot_type_radio = floater->getChild("snapshot_type_radio"); snapshot_type_radio->setSelectedIndex(gSavedSettings.getS32("LastSnapshotType")); LLSnapshotLivePreview::ESnapshotType shot_type = getTypeIndex(floater); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 21eff8a44..5383a0917 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4422,8 +4422,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei render_ui(scale_factor, subfield); } -#if SHY_MOD // screenshot improvement - if(scale_factor <= 1.f) //faster. bulk copy opposed to line per line +#if 1//SHY_MOD // screenshot improvement + if(scale_factor <= 1.f && image_width == image_buffer_x && image_height == image_buffer_y) //faster. bulk copy opposed to line per line { if (type == SNAPSHOT_TYPE_OBJECT_ID || type == SNAPSHOT_TYPE_COLOR) {