Large snapshot update (part 2)
This commit is contained in:
@@ -50,7 +50,7 @@ BOOL LLCharacter::sAllowInstancesChange = TRUE ;
|
|||||||
// LLCharacter()
|
// LLCharacter()
|
||||||
// Class Constructor
|
// Class Constructor
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
LLCharacter::LLCharacter()
|
LLCharacter::LLCharacter(bool freeze_time)
|
||||||
:
|
:
|
||||||
mPreferredPelvisHeight( 0.f ),
|
mPreferredPelvisHeight( 0.f ),
|
||||||
mSex( SEX_FEMALE ),
|
mSex( SEX_FEMALE ),
|
||||||
@@ -62,6 +62,7 @@ LLCharacter::LLCharacter()
|
|||||||
|
|
||||||
mMotionController.setCharacter( this );
|
mMotionController.setCharacter( this );
|
||||||
mPauseRequest = new LLPauseRequestHandle();
|
mPauseRequest = new LLPauseRequestHandle();
|
||||||
|
mFreezeTimeHidden = freeze_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class LLCharacter
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
LLCharacter();
|
LLCharacter(bool freeze_time);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
virtual ~LLCharacter();
|
virtual ~LLCharacter();
|
||||||
@@ -277,6 +277,8 @@ public:
|
|||||||
static std::vector< LLCharacter* > sInstances;
|
static std::vector< LLCharacter* > sInstances;
|
||||||
static BOOL sAllowInstancesChange ; //debug use
|
static BOOL sAllowInstancesChange ; //debug use
|
||||||
|
|
||||||
|
void resetFreezeTimeHidden() { mFreezeTimeHidden = false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LLMotionController mMotionController;
|
LLMotionController mMotionController;
|
||||||
|
|
||||||
@@ -288,6 +290,7 @@ protected:
|
|||||||
U32 mAppearanceSerialNum;
|
U32 mAppearanceSerialNum;
|
||||||
U32 mSkeletonSerialNum;
|
U32 mSkeletonSerialNum;
|
||||||
LLAnimPauseRequest mPauseRequest;
|
LLAnimPauseRequest mPauseRequest;
|
||||||
|
bool mFreezeTimeHidden; // True when this object was created during snapshot FreezeTime mode, and that mode is STILL active.
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// visual parameter stuff
|
// visual parameter stuff
|
||||||
|
|||||||
@@ -313,6 +313,32 @@ LLImageRaw::LLImageRaw(U8 *data, U16 width, U16 height, S8 components)
|
|||||||
++sRawImageCount;
|
++sRawImageCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLImageRaw::LLImageRaw(LLImageRaw const* src, U16 width, U16 height, U16 crop_offset, bool crop_vertically) : mCacheEntries(0)
|
||||||
|
{
|
||||||
|
mMemType = LLMemType::MTYPE_IMAGERAW;
|
||||||
|
llassert_always(src);
|
||||||
|
S8 const components = src->getComponents();
|
||||||
|
U8 const* const data = src->getData();
|
||||||
|
if (allocateDataSize(width, height, components))
|
||||||
|
{
|
||||||
|
if (crop_vertically)
|
||||||
|
{
|
||||||
|
llassert_always(width == src->getWidth());
|
||||||
|
memcpy(getData(), data + width * crop_offset * components, width * height * components);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
llassert_always(height == src->getHeight());
|
||||||
|
U16 const src_width = src->getWidth();
|
||||||
|
for (U16 row = 0; row < height; ++row)
|
||||||
|
{
|
||||||
|
memcpy(getData() + width * row * components, data + (src_width * row + crop_offset) * components, width * components);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
++sRawImageCount;
|
||||||
|
}
|
||||||
|
|
||||||
/*LLImageRaw::LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only)
|
/*LLImageRaw::LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only)
|
||||||
: LLImageBase(), mCacheEntries(0)
|
: LLImageBase(), mCacheEntries(0)
|
||||||
{
|
{
|
||||||
@@ -529,7 +555,7 @@ void LLImageRaw::contractToPowerOfTwo(S32 max_dim, BOOL scale_image)
|
|||||||
scale( new_width, new_height, scale_image );
|
scale( new_width, new_height, scale_image );
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLImageRaw::biasedScaleToPowerOfTwo(S32 max_dim)
|
void LLImageRaw::biasedScaleToPowerOfTwo(S32 target_width, S32 target_height, S32 max_dim)
|
||||||
{
|
{
|
||||||
// Strong bias towards rounding down (to save bandwidth)
|
// Strong bias towards rounding down (to save bandwidth)
|
||||||
// No bias would mean THRESHOLD == 1.5f;
|
// No bias would mean THRESHOLD == 1.5f;
|
||||||
@@ -538,22 +564,22 @@ void LLImageRaw::biasedScaleToPowerOfTwo(S32 max_dim)
|
|||||||
// Find new sizes
|
// Find new sizes
|
||||||
S32 larger_w = max_dim; // 2^n >= mWidth
|
S32 larger_w = max_dim; // 2^n >= mWidth
|
||||||
S32 smaller_w = max_dim; // 2^(n-1) <= mWidth
|
S32 smaller_w = max_dim; // 2^(n-1) <= mWidth
|
||||||
while( (smaller_w > getWidth()) && (smaller_w > MIN_IMAGE_SIZE) )
|
while( (smaller_w > target_width) && (smaller_w > MIN_IMAGE_SIZE) )
|
||||||
{
|
{
|
||||||
larger_w = smaller_w;
|
larger_w = smaller_w;
|
||||||
smaller_w >>= 1;
|
smaller_w >>= 1;
|
||||||
}
|
}
|
||||||
S32 new_width = ( (F32)getWidth() / smaller_w > THRESHOLD ) ? larger_w : smaller_w;
|
S32 new_width = ( (F32)target_width / smaller_w > THRESHOLD ) ? larger_w : smaller_w;
|
||||||
|
|
||||||
|
|
||||||
S32 larger_h = max_dim; // 2^m >= mHeight
|
S32 larger_h = max_dim; // 2^m >= mHeight
|
||||||
S32 smaller_h = max_dim; // 2^(m-1) <= mHeight
|
S32 smaller_h = max_dim; // 2^(m-1) <= mHeight
|
||||||
while( (smaller_h > getHeight()) && (smaller_h > MIN_IMAGE_SIZE) )
|
while( (smaller_h > target_height) && (smaller_h > MIN_IMAGE_SIZE) )
|
||||||
{
|
{
|
||||||
larger_h = smaller_h;
|
larger_h = smaller_h;
|
||||||
smaller_h >>= 1;
|
smaller_h >>= 1;
|
||||||
}
|
}
|
||||||
S32 new_height = ( (F32)getHeight() / smaller_h > THRESHOLD ) ? larger_h : smaller_h;
|
S32 new_height = ( (F32)target_height / smaller_h > THRESHOLD ) ? larger_h : smaller_h;
|
||||||
|
|
||||||
|
|
||||||
scale( new_width, new_height );
|
scale( new_width, new_height );
|
||||||
|
|||||||
@@ -177,6 +177,7 @@ public:
|
|||||||
LLImageRaw();
|
LLImageRaw();
|
||||||
LLImageRaw(U16 width, U16 height, S8 components);
|
LLImageRaw(U16 width, U16 height, S8 components);
|
||||||
LLImageRaw(U8 *data, U16 width, U16 height, S8 components);
|
LLImageRaw(U8 *data, U16 width, U16 height, S8 components);
|
||||||
|
LLImageRaw(LLImageRaw const* src, U16 width, U16 height, U16 crop_offset, bool crop_vertically);
|
||||||
// Construct using createFromFile (used by tools)
|
// Construct using createFromFile (used by tools)
|
||||||
//LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only = false);
|
//LLImageRaw(const std::string& filename, bool j2c_lowest_mip_only = false);
|
||||||
|
|
||||||
@@ -196,7 +197,8 @@ public:
|
|||||||
|
|
||||||
void expandToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE);
|
void expandToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE);
|
||||||
void contractToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE);
|
void contractToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE);
|
||||||
void biasedScaleToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE);
|
void biasedScaleToPowerOfTwo(S32 target_width, S32 target_height, S32 max_dim = MAX_IMAGE_SIZE);
|
||||||
|
void biasedScaleToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE) { biasedScaleToPowerOfTwo(getWidth(), getHeight(), max_dim); }
|
||||||
BOOL scale( S32 new_width, S32 new_height, BOOL scale_image = TRUE );
|
BOOL scale( S32 new_width, S32 new_height, BOOL scale_image = TRUE );
|
||||||
//BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ;
|
//BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ;
|
||||||
|
|
||||||
|
|||||||
@@ -13563,6 +13563,17 @@ Found in Advanced->Rendering->Info Displays</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
|
<key>SnapshotOpenFreezeTime</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>When opening the snapshot floater, immediately freeze time.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
<key>SpeakingColor</key>
|
<key>SpeakingColor</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -14275,12 +14286,12 @@ Found in Advanced->Rendering->Info Displays</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>UseFreezeFrame</key>
|
<key>UseFreezeTime</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
<string>Freeze time when taking snapshots.</string>
|
<string>Freeze time when taking snapshots.</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>0</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>Boolean</string>
|
<string>Boolean</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
|
|||||||
@@ -235,7 +235,10 @@ void LLDrawPoolWater::render(S32 pass)
|
|||||||
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
|
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
|
||||||
|
|
||||||
// Slowly move over time.
|
// Slowly move over time.
|
||||||
F32 offset = fmod(gFrameTimeSeconds*2.f, 100.f);
|
static const LLCachedControl<bool> freeze_time("FreezeTime",false);
|
||||||
|
static F32 frame_time;
|
||||||
|
if (!freeze_time) frame_time = gFrameTimeSeconds;
|
||||||
|
F32 offset = fmod(frame_time*2.f, 100.f);
|
||||||
F32 tp0[4] = {16.f/256.f, 0.0f, 0.0f, offset*0.01f};
|
F32 tp0[4] = {16.f/256.f, 0.0f, 0.0f, offset*0.01f};
|
||||||
F32 tp1[4] = {0.0f, 16.f/256.f, 0.0f, offset*0.01f};
|
F32 tp1[4] = {0.0f, 16.f/256.f, 0.0f, offset*0.01f};
|
||||||
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
|
glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
|
||||||
@@ -387,11 +390,14 @@ void LLDrawPoolWater::renderOpaqueLegacyWater()
|
|||||||
// Use the fact that we know all water faces are the same size
|
// Use the fact that we know all water faces are the same size
|
||||||
// to save some computation
|
// to save some computation
|
||||||
|
|
||||||
// Slowly move texture coordinates over time so the watter appears
|
// Slowly move texture coordinates over time so the water appears
|
||||||
// to be moving.
|
// to be moving.
|
||||||
F32 movement_period_secs = 50.f;
|
F32 movement_period_secs = 50.f;
|
||||||
|
|
||||||
F32 offset = fmod(gFrameTimeSeconds, movement_period_secs);
|
static const LLCachedControl<bool> freeze_time("FreezeTime",false);
|
||||||
|
static F32 frame_time;
|
||||||
|
if (!freeze_time) frame_time = gFrameTimeSeconds;
|
||||||
|
F32 offset = fmod(frame_time, movement_period_secs);
|
||||||
|
|
||||||
if (movement_period_secs != 0)
|
if (movement_period_secs != 0)
|
||||||
{
|
{
|
||||||
@@ -549,7 +555,11 @@ void LLDrawPoolWater::shade()
|
|||||||
shader->bind();
|
shader->bind();
|
||||||
}
|
}
|
||||||
|
|
||||||
sTime = (F32)LLFrameTimer::getElapsedSeconds()*0.5f;
|
static const LLCachedControl<bool> freeze_time("FreezeTime",false);
|
||||||
|
if (!freeze_time)
|
||||||
|
{
|
||||||
|
sTime = (F32)LLFrameTimer::getElapsedSeconds()*0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
S32 reftex = shader->enableTexture(LLViewerShaderMgr::WATER_REFTEX);
|
S32 reftex = shader->enableTexture(LLViewerShaderMgr::WATER_REFTEX);
|
||||||
|
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ void LLFloaterAuction::onClickSnapshot(void* data)
|
|||||||
gViewerWindow->getWindowWidth(),
|
gViewerWindow->getWindowWidth(),
|
||||||
gViewerWindow->getWindowHeight(),
|
gViewerWindow->getWindowHeight(),
|
||||||
(F32)gViewerWindow->getWindowWidth() / gViewerWindow->getWindowHeight(),
|
(F32)gViewerWindow->getWindowWidth() / gViewerWindow->getWindowHeight(),
|
||||||
FALSE, FALSE, FALSE);
|
FALSE, FALSE);
|
||||||
gForceRenderLandFence = FALSE;
|
gForceRenderLandFence = FALSE;
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
|
|||||||
@@ -902,7 +902,7 @@ void LLFloaterReporter::takeScreenshot()
|
|||||||
|
|
||||||
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
||||||
// Warning: This crops left and right in case of wide-screen monitor:
|
// Warning: This crops left and right in case of wide-screen monitor:
|
||||||
if( !gViewerWindow->rawSnapshot(raw, IMAGE_WIDTH, IMAGE_HEIGHT, (F32)IMAGE_WIDTH / IMAGE_HEIGHT, FALSE, TRUE, FALSE))
|
if( !gViewerWindow->rawSnapshot(raw, IMAGE_WIDTH, IMAGE_HEIGHT, (F32)IMAGE_WIDTH / IMAGE_HEIGHT, TRUE, FALSE))
|
||||||
{
|
{
|
||||||
llwarns << "Unable to take screenshot" << llendl;
|
llwarns << "Unable to take screenshot" << llendl;
|
||||||
return;
|
return;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -47,7 +47,8 @@ public:
|
|||||||
{
|
{
|
||||||
SNAPSHOT_FORMAT_PNG,
|
SNAPSHOT_FORMAT_PNG,
|
||||||
SNAPSHOT_FORMAT_JPEG,
|
SNAPSHOT_FORMAT_JPEG,
|
||||||
SNAPSHOT_FORMAT_BMP
|
SNAPSHOT_FORMAT_BMP,
|
||||||
|
SNAPSHOT_FORMAT_J2C
|
||||||
} ESnapshotFormat;
|
} ESnapshotFormat;
|
||||||
|
|
||||||
LLFloaterSnapshot();
|
LLFloaterSnapshot();
|
||||||
@@ -68,6 +69,7 @@ public:
|
|||||||
static S32 getUIWinWidth() {return sUIWinWidth ;}
|
static S32 getUIWinWidth() {return sUIWinWidth ;}
|
||||||
|
|
||||||
static void saveLocalDone(bool success);
|
static void saveLocalDone(bool success);
|
||||||
|
static void saveFeedDone(bool success);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class Impl;
|
class Impl;
|
||||||
|
|||||||
@@ -185,7 +185,8 @@ void display_update_camera(bool tiling=false)
|
|||||||
// Cut draw distance in half when customizing avatar,
|
// Cut draw distance in half when customizing avatar,
|
||||||
// but on the viewer only.
|
// but on the viewer only.
|
||||||
F32 final_far = gAgentCamera.mDrawDistance;
|
F32 final_far = gAgentCamera.mDrawDistance;
|
||||||
if(tiling) //Don't animate clouds and water if tiling!
|
static const LLCachedControl<bool> freeze_time("FreezeTime",false);
|
||||||
|
if(freeze_time || tiling) //Don't animate clouds and water if tiling!
|
||||||
{
|
{
|
||||||
LLViewerCamera::getInstance()->setFar(final_far);
|
LLViewerCamera::getInstance()->setFar(final_far);
|
||||||
gViewerWindow->setup3DRender();
|
gViewerWindow->setup3DRender();
|
||||||
|
|||||||
@@ -548,7 +548,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
|
|||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
ratio,
|
ratio,
|
||||||
FALSE,
|
|
||||||
gSavedSettings.getBOOL("RenderUIInSnapshot"),
|
gSavedSettings.getBOOL("RenderUIInSnapshot"),
|
||||||
FALSE,
|
FALSE,
|
||||||
LLViewerWindow::SNAPSHOT_TYPE_COLOR,
|
LLViewerWindow::SNAPSHOT_TYPE_COLOR,
|
||||||
|
|||||||
@@ -4120,7 +4120,7 @@ BOOL LLViewerWindow::saveSnapshot( const std::string& filepath, S32 image_width,
|
|||||||
llinfos << "Saving snapshot to: " << filepath << llendl;
|
llinfos << "Saving snapshot to: " << filepath << llendl;
|
||||||
|
|
||||||
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
||||||
BOOL success = rawSnapshot(raw, image_width, image_height, (F32)image_width / image_height, FALSE, show_ui, do_rebuild);
|
BOOL success = rawSnapshot(raw, image_width, image_height, (F32)image_width / image_height, show_ui, do_rebuild);
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
@@ -4156,7 +4156,7 @@ void LLViewerWindow::playSnapshotAnimAndSound()
|
|||||||
|
|
||||||
BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type)
|
BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type)
|
||||||
{
|
{
|
||||||
return rawSnapshot(raw, preview_width, preview_height, (F32)gViewerWindow->getWindowWidthRaw() / gViewerWindow->getWindowHeightRaw(), TRUE, show_ui, do_rebuild, type);
|
return rawSnapshot(raw, preview_width, preview_height, (F32)gViewerWindow->getWindowWidthRaw() / gViewerWindow->getWindowHeightRaw(), show_ui, do_rebuild, type);
|
||||||
|
|
||||||
// *TODO below code was broken in deferred pipeline
|
// *TODO below code was broken in deferred pipeline
|
||||||
/*
|
/*
|
||||||
@@ -4296,24 +4296,28 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Saves the image from the screen to the image pointed to by raw.
|
// Saves the image from the screen to the image pointed to by raw.
|
||||||
S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height,
|
// This function does NOT yet scale the snapshot down to the requested size
|
||||||
F32 snapshot_aspect, BOOL /*is_texture*/, BOOL show_ui, BOOL do_rebuild, ESnapshotType type, S32 max_size, F32 supersample)
|
// if that is smaller than the current window (scale_factor < 1) or if
|
||||||
|
// the aspect of the snapshot is unequal to the aspect of requested image.
|
||||||
|
bool LLViewerWindow::rawRawSnapshot(LLImageRaw *raw,
|
||||||
|
S32 image_width, S32 image_height, F32 snapshot_aspect, BOOL show_ui,
|
||||||
|
BOOL do_rebuild, ESnapshotType type, S32 max_size, F32 supersample)
|
||||||
{
|
{
|
||||||
if (!raw)
|
if (!raw)
|
||||||
{
|
{
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
//check if there is enough memory for the snapshot image
|
//check if there is enough memory for the snapshot image
|
||||||
if(LLPipeline::sMemAllocationThrottled)
|
if(LLPipeline::sMemAllocationThrottled)
|
||||||
{
|
{
|
||||||
return 0; //snapshot taking is disabled due to memory restriction.
|
return false; //snapshot taking is disabled due to memory restriction.
|
||||||
}
|
}
|
||||||
if(image_width * image_height > (1 << 22)) //if snapshot image is larger than 2K by 2K
|
if(image_width * image_height > (1 << 22)) //if snapshot image is larger than 2K by 2K
|
||||||
{
|
{
|
||||||
if(!LLMemory::tryToAlloc(NULL, image_width * image_height * 3))
|
if(!LLMemory::tryToAlloc(NULL, image_width * image_height * 3))
|
||||||
{
|
{
|
||||||
llwarns << "No enough memory to take the snapshot with size (w : h): " << image_width << " : " << image_height << llendl ;
|
llwarns << "No enough memory to take the snapshot with size (w : h): " << image_width << " : " << image_height << llendl ;
|
||||||
return 0; //there is no enough memory for taking this snapshot.
|
return false; //there is no enough memory for taking this snapshot.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4337,7 +4341,6 @@ S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_heig
|
|||||||
LLPipeline::sShowHUDAttachments = FALSE;
|
LLPipeline::sShowHUDAttachments = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Copy screen to a buffer
|
// Copy screen to a buffer
|
||||||
|
|
||||||
LLRect const window_rect = show_ui ? getWindowRectRaw() : getWorldViewRectRaw();
|
LLRect const window_rect = show_ui ? getWindowRectRaw() : getWorldViewRectRaw();
|
||||||
@@ -4373,7 +4376,6 @@ S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_heig
|
|||||||
F32 scale_factor;
|
F32 scale_factor;
|
||||||
S32 image_buffer_x;
|
S32 image_buffer_x;
|
||||||
S32 image_buffer_y;
|
S32 image_buffer_y;
|
||||||
S32 max_image_buffer;
|
|
||||||
|
|
||||||
F32 const window_aspect = (F32)window_width / window_height;
|
F32 const window_aspect = (F32)window_width / window_height;
|
||||||
// snapshot fits precisely inside window, it is the portion of the window with the correct aspect.
|
// snapshot fits precisely inside window, it is the portion of the window with the correct aspect.
|
||||||
@@ -4398,9 +4400,8 @@ S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_heig
|
|||||||
{
|
{
|
||||||
image_buffer_x = llround(snapshot_width * scale_factor);
|
image_buffer_x = llround(snapshot_width * scale_factor);
|
||||||
image_buffer_y = llround(snapshot_height * scale_factor);
|
image_buffer_y = llround(snapshot_height * scale_factor);
|
||||||
max_image_buffer = llmax(image_buffer_x, image_buffer_y);
|
if (llmax(image_buffer_x, image_buffer_y) > max_size && // Boundary check to avoid memory overflow.
|
||||||
if (max_image_buffer > max_size && // Boundary check to avoid memory overflow.
|
internal_scale <= 1.f) // SHY_MOD: If supersampling... Don't care about max_size.
|
||||||
internal_scale <= 1.f) // SHY_MOD: If supersampling... Don't care about max_size.
|
|
||||||
{
|
{
|
||||||
// Too big, clamp.
|
// Too big, clamp.
|
||||||
continue;
|
continue;
|
||||||
@@ -4413,17 +4414,24 @@ S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_heig
|
|||||||
buffer_y_offset = llfloor(((window_height - snapshot_height) * scale_factor) / 2.f);
|
buffer_y_offset = llfloor(((window_height - snapshot_height) * scale_factor) / 2.f);
|
||||||
Dout(dc::notice, "rawSnapshot(" << image_width << ", " << image_height << ", " << snapshot_aspect << "): image_buffer_x = " << image_buffer_x << "; image_buffer_y = " << image_buffer_y);
|
Dout(dc::notice, "rawSnapshot(" << image_width << ", " << image_height << ", " << snapshot_aspect << "): image_buffer_x = " << image_buffer_x << "; image_buffer_y = " << image_buffer_y);
|
||||||
|
|
||||||
if (image_buffer_x > 0 && image_buffer_y > 0)
|
bool error = !(image_buffer_x > 0 && image_buffer_y > 0);
|
||||||
|
if (!error)
|
||||||
{
|
{
|
||||||
raw->resize(image_buffer_x, image_buffer_y, 3);
|
raw->resize(image_buffer_x, image_buffer_y, 3);
|
||||||
|
error = raw->isBufferInvalid();
|
||||||
}
|
}
|
||||||
else
|
if (error)
|
||||||
{
|
{
|
||||||
return 0;
|
if (prev_draw_ui != gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
|
||||||
}
|
{
|
||||||
if(raw->isBufferInvalid())
|
LLPipeline::toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI);
|
||||||
{
|
}
|
||||||
return 0;
|
if (hide_hud)
|
||||||
|
{
|
||||||
|
LLPipeline::sShowHUDAttachments = TRUE;
|
||||||
|
}
|
||||||
|
setCursor(UI_CURSOR_ARROW);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL is_tiling = scale_factor > 1.f;
|
BOOL is_tiling = scale_factor > 1.f;
|
||||||
@@ -4490,7 +4498,7 @@ S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_heig
|
|||||||
// Ping the watchdog thread every 100 lines to keep us alive (arbitrary number, feel free to change)
|
// Ping the watchdog thread every 100 lines to keep us alive (arbitrary number, feel free to change)
|
||||||
if (out_y % 100 == 0)
|
if (out_y % 100 == 0)
|
||||||
{
|
{
|
||||||
LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot");
|
LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawRawSnapshot");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == SNAPSHOT_TYPE_COLOR)
|
if (type == SNAPSHOT_TYPE_COLOR)
|
||||||
@@ -4553,31 +4561,6 @@ S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_heig
|
|||||||
LLHUDObject::reshapeAll();
|
LLHUDObject::reshapeAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pad image width such that the line length is a multiple of 4 bytes (for BMP encoding).
|
|
||||||
int n = 4;
|
|
||||||
for (int c = raw->getComponents(); c % 2 == 0 && n > 1; c /= 2) { n /= 2; } // n /= gcd(n, components)
|
|
||||||
image_width += (image_width * (n - 1)) % n; // Now n divides image_width, and thus four divides image_width * components, the line length.
|
|
||||||
|
|
||||||
BOOL ret = TRUE ;
|
|
||||||
// Resize image
|
|
||||||
if(llabs(image_width - image_buffer_x) > 4 || llabs(image_height - image_buffer_y) > 4)
|
|
||||||
{
|
|
||||||
ret = raw->scale( image_width, image_height );
|
|
||||||
}
|
|
||||||
else if(image_width != image_buffer_x || image_height != image_buffer_y)
|
|
||||||
{
|
|
||||||
ret = raw->scale( image_width, image_height, FALSE );
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 1//SHY_MOD // screenshot improvement
|
|
||||||
if(raw->isBufferInvalid()) //Just checking!
|
|
||||||
return 0;
|
|
||||||
if(internal_scale != 1.f) //Scale down our render to the desired dimensions.
|
|
||||||
raw->scale( image_width/internal_scale, image_height/internal_scale );
|
|
||||||
if(raw->isBufferInvalid()) //Just checking!
|
|
||||||
return 0;
|
|
||||||
#endif //shy_mod
|
|
||||||
|
|
||||||
setCursor(UI_CURSOR_ARROW);
|
setCursor(UI_CURSOR_ARROW);
|
||||||
|
|
||||||
if (do_rebuild)
|
if (do_rebuild)
|
||||||
@@ -4595,7 +4578,46 @@ S32 LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_heig
|
|||||||
send_agent_resume();
|
send_agent_resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret ? max_image_buffer : 0;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Same as the above, but does the resizing.
|
||||||
|
bool LLViewerWindow::rawSnapshot(LLImageRaw *raw,
|
||||||
|
S32 image_width, S32 image_height, F32 snapshot_aspect, BOOL show_ui,
|
||||||
|
BOOL do_rebuild, ESnapshotType type, S32 max_size, F32 supersample)
|
||||||
|
{
|
||||||
|
bool ret = rawRawSnapshot(raw, image_width, image_height, snapshot_aspect, show_ui, do_rebuild, type, max_size, supersample);
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
|
||||||
|
if (ret && !raw->scale(image_width, image_height))
|
||||||
|
{
|
||||||
|
ret = false; // Failure.
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // This was the old behavior.. but I don't think this is needed here.
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
// Pad image width such that the line length is a multiple of 4 bytes (for BMP encoding).
|
||||||
|
int n = 4;
|
||||||
|
for (int c = raw->getComponents(); c % 2 == 0 && n > 1; c /= 2) { n /= 2; } // n /= gcd(n, components)
|
||||||
|
image_width += (image_width * (n - 1)) % n; // Now n divides image_width, and thus four divides image_width * components, the line length.
|
||||||
|
|
||||||
|
// Resize image
|
||||||
|
if (llabs(image_width - image_buffer_x) > 4 || llabs(image_height - image_buffer_y) > 4)
|
||||||
|
{
|
||||||
|
ret = raw->scale( image_width, image_height );
|
||||||
|
}
|
||||||
|
else if (image_width != image_buffer_x || image_height != image_buffer_y)
|
||||||
|
{
|
||||||
|
ret = raw->scale( image_width, image_height, FALSE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLViewerWindow::destroyWindow()
|
void LLViewerWindow::destroyWindow()
|
||||||
|
|||||||
@@ -311,9 +311,12 @@ public:
|
|||||||
SNAPSHOT_TYPE_DEPTH
|
SNAPSHOT_TYPE_DEPTH
|
||||||
};
|
};
|
||||||
BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
|
BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
|
||||||
// Returns the largest dimension (x or y) of the buffer (which is never larger than max_size), or 0 on failure.
|
bool rawRawSnapshot(LLImageRaw* raw, S32 image_width, S32 image_height, F32 aspect,
|
||||||
S32 rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, F32 aspect, BOOL is_texture = FALSE,
|
BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR,
|
||||||
BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE, F32 supersample = 1.f );
|
S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE, F32 supersample = 1.f);
|
||||||
|
bool rawSnapshot(LLImageRaw* raw, S32 image_width, S32 image_height, F32 aspect,
|
||||||
|
BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR,
|
||||||
|
S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE, F32 supersample = 1.f);
|
||||||
BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) ;
|
BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, ESnapshotType type) ;
|
||||||
BOOL isSnapshotLocSet() const { return ! sSnapshotDir.empty(); }
|
BOOL isSnapshotLocSet() const { return ! sSnapshotDir.empty(); }
|
||||||
void resetSnapshotLoc() const { sSnapshotDir.clear(); }
|
void resetSnapshotLoc() const { sSnapshotDir.clear(); }
|
||||||
|
|||||||
@@ -993,6 +993,12 @@ EmeraldGlobalBoobConfig LLVOAvatar::sBoobConfig;
|
|||||||
static F32 calc_bouncy_animation(F32 x);
|
static F32 calc_bouncy_animation(F32 x);
|
||||||
static U32 calc_shame(LLVOVolume* volume, std::set<LLUUID> &textures);
|
static U32 calc_shame(LLVOVolume* volume, std::set<LLUUID> &textures);
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Debug setting caches.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
static LLCachedControl<bool> const freeze_time("FreezeTime", false);
|
||||||
|
static LLCachedControl<bool> const render_unloaded_avatar("RenderUnloadedAvatar", false);
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// LLVOAvatar()
|
// LLVOAvatar()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -1000,6 +1006,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||||||
const LLPCode pcode,
|
const LLPCode pcode,
|
||||||
LLViewerRegion* regionp) :
|
LLViewerRegion* regionp) :
|
||||||
LLViewerObject(id, pcode, regionp),
|
LLViewerObject(id, pcode, regionp),
|
||||||
|
LLCharacter(freeze_time),
|
||||||
mIsDummy(FALSE),
|
mIsDummy(FALSE),
|
||||||
mSpecialRenderMode(0),
|
mSpecialRenderMode(0),
|
||||||
mAttachmentGeometryBytes(0),
|
mAttachmentGeometryBytes(0),
|
||||||
@@ -1045,7 +1052,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||||||
mSupportsAlphaLayers(FALSE),
|
mSupportsAlphaLayers(FALSE),
|
||||||
mLoadedCallbacksPaused(FALSE),
|
mLoadedCallbacksPaused(FALSE),
|
||||||
mHasPelvisOffset( FALSE ),
|
mHasPelvisOffset( FALSE ),
|
||||||
mRenderUnloadedAvatar(LLCachedControl<bool>(gSavedSettings, "RenderUnloadedAvatar")),
|
mRenderUnloadedAvatar(render_unloaded_avatar),
|
||||||
mLastRezzedStatus(-1),
|
mLastRezzedStatus(-1),
|
||||||
mFirstSetActualBoobGravRan( false ),
|
mFirstSetActualBoobGravRan( false ),
|
||||||
mSupportsPhysics( false ),
|
mSupportsPhysics( false ),
|
||||||
@@ -2871,6 +2878,11 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mFreezeTimeHidden)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
checkTextureLoading() ;
|
checkTextureLoading() ;
|
||||||
|
|
||||||
// force immediate pixel area update on avatars using last frames data (before drawable or camera updates)
|
// force immediate pixel area update on avatars using last frames data (before drawable or camera updates)
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return webProfileResponders_timeout; }
|
/*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return webProfileResponders_timeout; }
|
||||||
|
/*virtual*/ bool followRedir(void) const { return true; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LLPointer<LLImageFormatted> mImagep;
|
LLPointer<LLImageFormatted> mImagep;
|
||||||
@@ -160,6 +161,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return webProfileResponders_timeout; }
|
/*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return webProfileResponders_timeout; }
|
||||||
|
/*virtual*/ bool followRedir(void) const { return true; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LLPointer<LLImageFormatted> mImagep;
|
LLPointer<LLImageFormatted> mImagep;
|
||||||
@@ -207,6 +209,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return webProfileResponders_timeout; }
|
/*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return webProfileResponders_timeout; }
|
||||||
|
/*virtual*/ bool followRedir(void) const { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -682,6 +682,12 @@ void LLWorld::updateRegions(F32 max_update_time)
|
|||||||
|
|
||||||
void LLWorld::updateParticles()
|
void LLWorld::updateParticles()
|
||||||
{
|
{
|
||||||
|
static const LLCachedControl<bool> freeze_time("FreezeTime",false);
|
||||||
|
if (freeze_time)
|
||||||
|
{
|
||||||
|
// don't move particles in snapshot mode
|
||||||
|
return;
|
||||||
|
}
|
||||||
LLViewerPartSim::getInstance()->updateSimulation();
|
LLViewerPartSim::getInstance()->updateSimulation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,38 +23,47 @@
|
|||||||
Save to my hard drive
|
Save to my hard drive
|
||||||
</radio_item>
|
</radio_item>
|
||||||
</radio_group>
|
</radio_group>
|
||||||
<button bottom_delta="-28" follows="left|top" height="20" label="Refresh Snapshot" left="10"
|
<button bottom_delta="-28" follows="left|top" height="20" label="Take snapshot" left="10"
|
||||||
name="new_snapshot_btn" width="195" />
|
name="new_snapshot_btn" width="105" tool_tip="Make a snapshot of the current view. Use the save and/or upload button to actually save it. The latest snapshot is shown in the thumbnail. In Freeze Time mode a preview of the new snapshot is also shown full screen (note that this has NOT the same quality as the real thing that will be saved: it is downscaled from the actual formatted image to a power of two with a max. resolution of 1024x1024, in order to be displayed in openGL and then probably stretched again to fill your screen). Press ESC to go back to Freeze Time." />
|
||||||
|
<button bottom_delta="0" follows="left|top" height="20" label="Freeze time" left="119"
|
||||||
|
name="freeze_time_btn" width="90" tool_tip="Show a fullscreen preview. Allows to cam around as if time is frozen and make multiple snapshots of the same scene. Press ESC to undo!" />
|
||||||
<button bottom_delta="-22" follows="left|top" height="20" label="Upload" left="10"
|
<button bottom_delta="-22" follows="left|top" height="20" label="Upload" left="10"
|
||||||
name="feed_btn" width="105" />
|
name="feed_btn" width="105" />
|
||||||
<button bottom_delta="0" follows="left|top" height="20" label="Send" left="10"
|
<button bottom_delta="0" follows="left|top" height="20" label="Send" left="10"
|
||||||
name="send_btn" width="105" />
|
name="send_btn" width="105" />
|
||||||
<button bottom_delta="0" follows="left|top" height="20" label="Upload ([UPLOADFEE])" left="10"
|
<button bottom_delta="0" follows="left|top" height="20" label="Upload ([UPLOADFEE])" left="10"
|
||||||
name="upload_btn" width="105" />
|
name="upload_btn" width="105" />
|
||||||
<flyout_button bottom_delta="0" follows="left|top" height="20" label="Save" left="10"
|
<flyout_button bottom_delta="-2" follows="left|top" height="20" label="Save" left="10"
|
||||||
list_position="below" mouse_opaque="true" name="save_btn" tool_tip="Save image to a file"
|
list_position="below" mouse_opaque="true" name="save_btn" tool_tip="Save image to a file" width="105">
|
||||||
width="105">
|
|
||||||
<flyout_button_item value="save" name="save_item">Save</flyout_button_item>
|
<flyout_button_item value="save" name="save_item">Save</flyout_button_item>
|
||||||
<flyout_button_item value="saveas" name="saveas_item">Save As...</flyout_button_item>
|
<flyout_button_item value="saveas" name="saveas_item">Save As...</flyout_button_item>
|
||||||
</flyout_button>
|
</flyout_button>
|
||||||
<button bottom_delta="0" follows="left|top" height="20" label="Cancel" left="120"
|
<combo_box bottom_delta="-4" follows="left|top" height="20" label="Format" left="139"
|
||||||
name="discard_btn" width="85" />
|
name="local_format_combo" width="70">
|
||||||
<button bottom_delta="-26" follows="left|top" font="SansSerifSmall" halign="center"
|
<combo_item name="PNG">
|
||||||
height="20" label="Advanced >>" left="10"
|
PNG
|
||||||
|
</combo_item>
|
||||||
|
<combo_item name="JPEG">
|
||||||
|
JPEG
|
||||||
|
</combo_item>
|
||||||
|
<combo_item name="BMP">
|
||||||
|
BMP
|
||||||
|
</combo_item>
|
||||||
|
</combo_box>
|
||||||
|
<button bottom_delta="-22" follows="left|top" font="SansSerifSmall" halign="center"
|
||||||
|
height="20" label="Advanced>>" left="10"
|
||||||
mouse_opaque="true" name="more_btn" scale_image="TRUE"
|
mouse_opaque="true" name="more_btn" scale_image="TRUE"
|
||||||
tool_tip="Advanced Options. Default uses current window size." width="80" />
|
tool_tip="Advanced Options. Default uses current window size." width="72" />
|
||||||
<button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
|
<button bottom_delta="0" follows="left|top" font="SansSerifSmall" halign="center"
|
||||||
height="20" label="<< Default" left_delta="0"
|
height="20" label="<<Default" left_delta="0"
|
||||||
mouse_opaque="true" name="less_btn" scale_image="TRUE"
|
mouse_opaque="true" name="less_btn" scale_image="TRUE"
|
||||||
tool_tip="Advanced Options. Default uses current window size." width="80" />
|
tool_tip="Advanced Options. Default uses current window size." width="72" />
|
||||||
<text bottom_delta="-20" follows="top|left" height="15" left="10" name="type_label2"
|
<slider bottom_delta="0" decimal_digits="0" follows="left|top" height="15"
|
||||||
width="115">
|
increment="1" initial_val="75" left="80"
|
||||||
|
max_val="100" min_val="0" name="image_quality_slider" width="150" />
|
||||||
|
<text bottom_delta="-20" follows="top|left" height="15" left="10" name="type_label2" width="115">
|
||||||
Target size
|
Target size
|
||||||
</text>
|
</text>
|
||||||
<text bottom_delta="0" follows="top|left" height="15" left="130" name="format_label"
|
|
||||||
width="70">
|
|
||||||
Format
|
|
||||||
</text>
|
|
||||||
<combo_box bottom_delta="-22" follows="left|top" height="20" label="Resolution" left="10"
|
<combo_box bottom_delta="-22" follows="left|top" height="20" label="Resolution" left="10"
|
||||||
name="feed_size_combo" width="125">
|
name="feed_size_combo" width="125">
|
||||||
<combo_item name="CurrentWindow" value="[i0,i0]">
|
<combo_item name="CurrentWindow" value="[i0,i0]">
|
||||||
@@ -166,19 +175,6 @@
|
|||||||
Custom
|
Custom
|
||||||
</combo_item>
|
</combo_item>
|
||||||
</combo_box>
|
</combo_box>
|
||||||
<combo_box bottom_delta="0" follows="left|top" height="20" label="Format" left="130"
|
|
||||||
name="local_format_combo" width="70">
|
|
||||||
<combo_item name="PNG">
|
|
||||||
PNG
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="JPEG">
|
|
||||||
JPEG
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="BMP">
|
|
||||||
BMP
|
|
||||||
</combo_item>
|
|
||||||
</combo_box>
|
|
||||||
|
|
||||||
<spinner bottom_delta="-25" decimal_digits="0" follows="left|top" height="20"
|
<spinner bottom_delta="-25" decimal_digits="0" follows="left|top" height="20"
|
||||||
increment="32" label="Width" label_width="30" left="10" max_val="6016"
|
increment="32" label="Width" label_width="30" left="10" max_val="6016"
|
||||||
min_val="32" name="snapshot_width" width="95" allow_text_entry="false"/>
|
min_val="32" name="snapshot_width" width="95" allow_text_entry="false"/>
|
||||||
@@ -200,7 +196,7 @@
|
|||||||
</combo_box>
|
</combo_box>
|
||||||
<combo_box bottom_delta="0" follows="left|top" height="20" label="Aspect" left="10"
|
<combo_box bottom_delta="0" follows="left|top" height="20" label="Aspect" left="10"
|
||||||
name="postcard_aspect_combo" width="115">
|
name="postcard_aspect_combo" width="115">
|
||||||
<combo_item name="4:3" value="0">
|
<combo_item name="Default" value="-2">
|
||||||
Default
|
Default
|
||||||
</combo_item>
|
</combo_item>
|
||||||
<combo_item name="Custom" value="-1">
|
<combo_item name="Custom" value="-1">
|
||||||
@@ -239,7 +235,10 @@
|
|||||||
</combo_box>
|
</combo_box>
|
||||||
<combo_box bottom_delta="0" follows="left|top" height="20" label="Aspect" left="10"
|
<combo_box bottom_delta="0" follows="left|top" height="20" label="Aspect" left="10"
|
||||||
name="local_aspect_combo" width="115">
|
name="local_aspect_combo" width="115">
|
||||||
<combo_item name="CurrentWindow" value="[i0,i0]">
|
<combo_item name="Default" value="-2">
|
||||||
|
Default
|
||||||
|
</combo_item>
|
||||||
|
<combo_item name="CurrentWindow" value="0">
|
||||||
Current Window
|
Current Window
|
||||||
</combo_item>
|
</combo_item>
|
||||||
<combo_item name="1:1" value="1">
|
<combo_item name="1:1" value="1">
|
||||||
@@ -270,15 +269,12 @@
|
|||||||
<spinner bottom_delta="0" decimal_digits="5" follows="left|top" height="20"
|
<spinner bottom_delta="0" decimal_digits="5" follows="left|top" height="20"
|
||||||
increment="0.01" label="" left="130" max_val="32"
|
increment="0.01" label="" left="130" max_val="32"
|
||||||
min_val="0.03125" name="aspect_ratio" width="64" allow_text_entry="false"/>
|
min_val="0.03125" name="aspect_ratio" width="64" allow_text_entry="false"/>
|
||||||
<text bottom_delta="10" left="196">:1</text>
|
<text bottom_delta="-10" left="196">:1</text>
|
||||||
<slider bottom_delta="-30" decimal_digits="0" follows="left|top" height="15"
|
<text bottom_delta="-20" follows="left|top" height="20" left="15"
|
||||||
increment="1" initial_val="75" label="Image Quality" left="10"
|
|
||||||
max_val="100" min_val="0" name="image_quality_slider" width="210" />
|
|
||||||
<text bottom_delta="-28" follows="left|top" height="20" left="10"
|
|
||||||
name="layer_type_label" width="50">
|
name="layer_type_label" width="50">
|
||||||
Capture:
|
Capture:
|
||||||
</text>
|
</text>
|
||||||
<combo_box bottom_delta="3" follows="left|top" height="20" label="Image Layers" left="60"
|
<combo_box bottom_delta="3" follows="left|top" height="20" label="Image Layers" left="61"
|
||||||
name="layer_types" width="145">
|
name="layer_types" width="145">
|
||||||
<combo_item name="Colors" value="colors">
|
<combo_item name="Colors" value="colors">
|
||||||
Colors
|
Colors
|
||||||
@@ -287,14 +283,14 @@
|
|||||||
Depth
|
Depth
|
||||||
</combo_item>
|
</combo_item>
|
||||||
</combo_box>
|
</combo_box>
|
||||||
<check_box bottom_delta="-20" follows="left|top" label="Show interface in snapshot"
|
<check_box bottom_delta="-18" follows="left|top" label="Show interface in snapshot"
|
||||||
left="10" name="ui_check" tool_tip="Show the UI in the snapshot. This enforces the resolution of the snapshot to that of your current window." />
|
left="10" name="ui_check" tool_tip="Show the UI in the snapshot. This enforces the resolution of the snapshot to that of your current window." />
|
||||||
<check_box bottom_delta="-20" follows="left|top" label="Show HUD objects in snapshot"
|
<check_box bottom_delta="-20" follows="left|top" label="Show HUD objects in snapshot"
|
||||||
left="10" name="hud_check" tool_tip="Show your HUD objects in the snapshot. This enforces the resolution of the snapshot to that of your current window." />
|
left="10" name="hud_check" tool_tip="Show your HUD objects in the snapshot. This enforces the resolution of the snapshot to that of your current window." />
|
||||||
<check_box bottom_delta="-20" follows="left|top" label="Keep open after saving" left="10"
|
<check_box bottom_delta="-20" follows="left|top" label="Keep open after saving" left="10"
|
||||||
name="keep_open_check" tool_tip="Do not close the snapshot floater after saving or uploading. This allows you to save, upload or send the SAME snapshot again with different formats and/or to a different destination." />
|
name="keep_open_check" tool_tip="Do not close the snapshot floater after saving or uploading. This allows you to save, upload or send the SAME snapshot again with different formats and/or to a different destination." />
|
||||||
<check_box bottom_delta="-20" follows="left|top" label="Freeze time (CAM 3D preview)"
|
<check_box bottom_delta="-20" follows="left|top" label="Open floater in Freeze Time mode"
|
||||||
left="10" name="freeze_frame_check" tool_tip="Show a fullscreen preview. Allows to cam around as if time is frozen and make multiple snapshots of the same scene." />
|
left="10" name="freeze_time_check" tool_tip="This allows one to quickly press cntrl-shift-S and then take your time to choose the camera position and even make multiple shots of the frozen scene." />
|
||||||
<check_box bottom_delta="-20" follows="left|top" label="Auto-refresh" left="10"
|
<check_box bottom_delta="-20" follows="left|top" label="Auto-refresh" left="10"
|
||||||
name="auto_snapshot_check" tool_tip="Handy in conjunction with Freeze Time: creates a new fullscreen preview whenever you stop camming." />
|
name="auto_snapshot_check" tool_tip="Handy in conjunction with Freeze Time: creates a new fullscreen preview whenever you stop camming." />
|
||||||
<check_box bottom_delta="-20" follows="left|top" control_name="TemporaryUpload" enabled="true"
|
<check_box bottom_delta="-20" follows="left|top" control_name="TemporaryUpload" enabled="true"
|
||||||
|
|||||||
@@ -405,6 +405,13 @@ There was a problem writing animation data. Please try again later.
|
|||||||
There was a problem uploading the auction snapshot due to the following reason: [REASON]
|
There was a problem uploading the auction snapshot due to the following reason: [REASON]
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="UploadSnapshotFail"
|
||||||
|
type="alertmodal">
|
||||||
|
There was a problem uploading the snapshot due to the following reason: [REASON]
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="UnableToViewContentsMoreThanOne"
|
name="UnableToViewContentsMoreThanOne"
|
||||||
|
|||||||
Reference in New Issue
Block a user