Merge branch 'DRTVWR-516-maint' of https://bitbucket.org/lindenlab/viewer
commit
14fb8f66f8
|
|
@ -280,7 +280,7 @@ std::string LLURI::escapePathAndData(const std::string &str)
|
|||
std::string fragment;
|
||||
|
||||
size_t fragment_pos = str.find('#');
|
||||
if (fragment_pos != std::string::npos)
|
||||
if ((fragment_pos != std::string::npos) && (fragment_pos > delim_pos))
|
||||
{
|
||||
query = str.substr(path_size, fragment_pos - path_size);
|
||||
fragment = str.substr(fragment_pos);
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
namespace LLCore
|
||||
{
|
||||
|
||||
bool HttpOptions::sDefaultVerifyPeer = false;
|
||||
|
||||
HttpOptions::HttpOptions() :
|
||||
mWantHeaders(false),
|
||||
|
|
@ -43,7 +44,7 @@ HttpOptions::HttpOptions() :
|
|||
mMaxRetryBackoff(HTTP_RETRY_BACKOFF_MAX_DEFAULT),
|
||||
mUseRetryAfter(HTTP_USE_RETRY_AFTER_DEFAULT),
|
||||
mFollowRedirects(true),
|
||||
mVerifyPeer(false),
|
||||
mVerifyPeer(sDefaultVerifyPeer),
|
||||
mVerifyHost(false),
|
||||
mDNSCacheTimeout(-1L),
|
||||
mNoBody(false),
|
||||
|
|
@ -123,7 +124,15 @@ void HttpOptions::setHeadersOnly(bool nobody)
|
|||
{
|
||||
mNoBody = nobody;
|
||||
if (mNoBody)
|
||||
{
|
||||
setWantHeaders(true);
|
||||
setSSLVerifyPeer(false);
|
||||
}
|
||||
}
|
||||
|
||||
void HttpOptions::setDefaultSSLVerifyPeer(bool verify)
|
||||
{
|
||||
sDefaultVerifyPeer = verify;
|
||||
}
|
||||
|
||||
// <FS:Ansariel> GetIfModified request
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ public:
|
|||
|
||||
/// Instructs the LLCore::HTTPRequest to verify that the exchanged security
|
||||
/// certificate is authentic.
|
||||
/// Default: false
|
||||
/// Default: sDefaultVerifyPeer
|
||||
void setSSLVerifyPeer(bool verify);
|
||||
bool getSSLVerifyPeer() const
|
||||
{
|
||||
|
|
@ -178,6 +178,13 @@ public:
|
|||
return mNoBody;
|
||||
}
|
||||
|
||||
/// Sets default behavior for verifying that the name in the
|
||||
/// security certificate matches the name of the host contacted.
|
||||
/// Defaults false if not set, but should be set according to
|
||||
/// viewer's initialization options and command argunments, see
|
||||
/// NoVerifySSLCert
|
||||
static void setDefaultSSLVerifyPeer(bool verify);
|
||||
|
||||
// <FS:Ansariel> GetIfModified request
|
||||
void setLastModified(long last_modified);
|
||||
long getLastModified() const
|
||||
|
|
@ -200,6 +207,9 @@ protected:
|
|||
bool mVerifyHost;
|
||||
int mDNSCacheTimeout;
|
||||
bool mNoBody;
|
||||
|
||||
static bool sDefaultVerifyPeer;
|
||||
|
||||
long mLastModified; // <FS:Ansariel> GetIfModified request
|
||||
}; // end class HttpOptions
|
||||
|
||||
|
|
|
|||
|
|
@ -520,6 +520,7 @@ bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg
|
|||
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
|
||||
|
||||
httpOpts->setTimeout(timeout);
|
||||
httpOpts->setSSLVerifyPeer(false);
|
||||
|
||||
for(int i = 0; i < retries; ++i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -103,60 +103,100 @@ LLVector3 LLLandmark::getRegionPos() const
|
|||
|
||||
|
||||
// static
|
||||
LLLandmark* LLLandmark::constructFromString(const char *buffer)
|
||||
LLLandmark* LLLandmark::constructFromString(const char *buffer, const S32 buffer_size)
|
||||
{
|
||||
const char* cur = buffer;
|
||||
S32 chars_read = 0;
|
||||
S32 chars_read_total = 0;
|
||||
S32 count = 0;
|
||||
U32 version = 0;
|
||||
|
||||
bool bad_block = false;
|
||||
LLLandmark* result = NULL;
|
||||
|
||||
// read version
|
||||
count = sscanf( cur, "Landmark version %u\n%n", &version, &chars_read );
|
||||
if(count != 1)
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
count = sscanf( buffer, "Landmark version %u\n%n", &version, &chars_read );
|
||||
|
||||
if(version == 1)
|
||||
{
|
||||
LLVector3d pos;
|
||||
cur += chars_read;
|
||||
// read position
|
||||
count = sscanf( cur, "position %lf %lf %lf\n%n", pos.mdV+VX, pos.mdV+VY, pos.mdV+VZ, &chars_read );
|
||||
if( count != 3 )
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
cur += chars_read;
|
||||
// LL_INFOS() << "Landmark read: " << pos << LL_ENDL;
|
||||
|
||||
return new LLLandmark(pos);
|
||||
}
|
||||
else if(version == 2)
|
||||
{
|
||||
// *NOTE: Changing the buffer size will require changing the
|
||||
// scanf call below.
|
||||
char region_id_str[MAX_STRING]; /* Flawfinder: ignore */
|
||||
LLVector3 pos;
|
||||
cur += chars_read;
|
||||
count = sscanf( /* Flawfinder: ignore */
|
||||
cur,
|
||||
"region_id %254s\n%n",
|
||||
region_id_str, &chars_read);
|
||||
if(count != 1) goto error;
|
||||
cur += chars_read;
|
||||
count = sscanf(cur, "local_pos %f %f %f\n%n", pos.mV+VX, pos.mV+VY, pos.mV+VZ, &chars_read);
|
||||
if(count != 3) goto error;
|
||||
cur += chars_read;
|
||||
LLLandmark* lm = new LLLandmark;
|
||||
lm->mRegionID.set(region_id_str);
|
||||
lm->mRegionPos = pos;
|
||||
return lm;
|
||||
}
|
||||
if (count != 1)
|
||||
{
|
||||
bad_block = true;
|
||||
}
|
||||
|
||||
error:
|
||||
LL_INFOS() << "Bad Landmark Asset: bad _DATA_ block." << LL_ENDL;
|
||||
return NULL;
|
||||
chars_read_total += chars_read;
|
||||
|
||||
if (chars_read_total >= buffer_size)
|
||||
{
|
||||
// either file was truncated or data in file was damaged
|
||||
bad_block = true;
|
||||
}
|
||||
|
||||
if (!bad_block)
|
||||
{
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
LLVector3d pos;
|
||||
// read position
|
||||
count = sscanf(buffer + chars_read_total, "position %lf %lf %lf\n%n", pos.mdV + VX, pos.mdV + VY, pos.mdV + VZ, &chars_read);
|
||||
if (count != 3)
|
||||
{
|
||||
bad_block = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("Landmark") << "Landmark read: " << pos << LL_ENDL;
|
||||
result = new LLLandmark(pos);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
// *NOTE: Changing the buffer size will require changing the
|
||||
// scanf call below.
|
||||
char region_id_str[MAX_STRING];
|
||||
LLVector3 pos;
|
||||
count = sscanf( buffer + chars_read_total,
|
||||
"region_id %254s\n%n",
|
||||
region_id_str,
|
||||
&chars_read);
|
||||
if (count != 1)
|
||||
{
|
||||
bad_block = true;
|
||||
}
|
||||
chars_read_total += chars_read;
|
||||
if (chars_read_total >= buffer_size)
|
||||
{
|
||||
bad_block = true;
|
||||
}
|
||||
if (!bad_block)
|
||||
{
|
||||
count = sscanf(buffer + chars_read_total, "local_pos %f %f %f\n%n", pos.mV + VX, pos.mV + VY, pos.mV + VZ, &chars_read);
|
||||
if (count != 3)
|
||||
{
|
||||
bad_block = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new LLLandmark;
|
||||
result->mRegionID.set(region_id_str);
|
||||
result->mRegionPos = pos;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
LL_INFOS("Landmark") << "Encountered Unknown landmark version " << version << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bad_block)
|
||||
{
|
||||
LL_INFOS("Landmark") << "Bad Landmark Asset: bad _DATA_ block." << LL_ENDL;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -176,7 +216,7 @@ void LLLandmark::requestRegionHandle(
|
|||
if(region_id.isNull())
|
||||
{
|
||||
// don't bother with checking - it's 0.
|
||||
LL_DEBUGS() << "requestRegionHandle: null" << LL_ENDL;
|
||||
LL_DEBUGS("Landmark") << "requestRegionHandle: null" << LL_ENDL;
|
||||
if(callback)
|
||||
{
|
||||
const U64 U64_ZERO = 0;
|
||||
|
|
@ -187,7 +227,7 @@ void LLLandmark::requestRegionHandle(
|
|||
{
|
||||
if(region_id == mLocalRegion.first)
|
||||
{
|
||||
LL_DEBUGS() << "requestRegionHandle: local" << LL_ENDL;
|
||||
LL_DEBUGS("Landmark") << "requestRegionHandle: local" << LL_ENDL;
|
||||
if(callback)
|
||||
{
|
||||
callback(region_id, mLocalRegion.second);
|
||||
|
|
@ -198,13 +238,13 @@ void LLLandmark::requestRegionHandle(
|
|||
region_map_t::iterator it = mRegions.find(region_id);
|
||||
if(it == mRegions.end())
|
||||
{
|
||||
LL_DEBUGS() << "requestRegionHandle: upstream" << LL_ENDL;
|
||||
LL_DEBUGS("Landmark") << "requestRegionHandle: upstream" << LL_ENDL;
|
||||
if(callback)
|
||||
{
|
||||
region_callback_map_t::value_type vt(region_id, callback);
|
||||
sRegionCallbackMap.insert(vt);
|
||||
}
|
||||
LL_DEBUGS() << "Landmark requesting information about: "
|
||||
LL_DEBUGS("Landmark") << "Landmark requesting information about: "
|
||||
<< region_id << LL_ENDL;
|
||||
msg->newMessage("RegionHandleRequest");
|
||||
msg->nextBlock("RequestBlock");
|
||||
|
|
@ -214,7 +254,7 @@ void LLLandmark::requestRegionHandle(
|
|||
else if(callback)
|
||||
{
|
||||
// we have the answer locally - just call the callack.
|
||||
LL_DEBUGS() << "requestRegionHandle: ready" << LL_ENDL;
|
||||
LL_DEBUGS("Landmark") << "requestRegionHandle: ready" << LL_ENDL;
|
||||
callback(region_id, (*it).second.mRegionHandle);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public:
|
|||
|
||||
// constructs a new LLLandmark from a string
|
||||
// return NULL if there's an error
|
||||
static LLLandmark* constructFromString(const char *buffer);
|
||||
static LLLandmark* constructFromString(const char *buffer, const S32 buffer_size);
|
||||
|
||||
// register callbacks that this class handles
|
||||
static void registerCallbacks(LLMessageSystem* msg);
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ U32 LLRender::sUIVerts = 0;
|
|||
U32 LLTexUnit::sWhiteTexture = 0;
|
||||
bool LLRender::sGLCoreProfile = false;
|
||||
bool LLRender::sNsightDebugSupport = false;
|
||||
LLVector2 LLRender::sUIGLScaleFactor = LLVector2(1.f, 1.f);
|
||||
|
||||
static const U32 LL_NUM_TEXTURE_LAYERS = 32;
|
||||
static const U32 LL_NUM_LIGHT_UNITS = 8;
|
||||
|
|
|
|||
|
|
@ -478,6 +478,7 @@ public:
|
|||
static U32 sUIVerts;
|
||||
static bool sGLCoreProfile;
|
||||
static bool sNsightDebugSupport;
|
||||
static LLVector2 sUIGLScaleFactor;
|
||||
|
||||
private:
|
||||
friend class LLLightState;
|
||||
|
|
|
|||
|
|
@ -106,11 +106,10 @@ void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, S32 pixe
|
|||
top += LLFontGL::sCurOrigin.mY;
|
||||
|
||||
gGL.loadUIIdentity();
|
||||
LLRender2D *r2d_inst = LLRender2D::getInstance();
|
||||
gl_rect_2d(llfloor((F32)left * r2d_inst->mGLScaleFactor.mV[VX]) - pixel_offset,
|
||||
llfloor((F32)top * r2d_inst->mGLScaleFactor.mV[VY]) + pixel_offset,
|
||||
llfloor((F32)right * r2d_inst->mGLScaleFactor.mV[VX]) + pixel_offset,
|
||||
llfloor((F32)bottom * r2d_inst->mGLScaleFactor.mV[VY]) - pixel_offset,
|
||||
gl_rect_2d(llfloor((F32)left * LLRender::sUIGLScaleFactor.mV[VX]) - pixel_offset,
|
||||
llfloor((F32)top * LLRender::sUIGLScaleFactor.mV[VY]) + pixel_offset,
|
||||
llfloor((F32)right * LLRender::sUIGLScaleFactor.mV[VX]) + pixel_offset,
|
||||
llfloor((F32)bottom * LLRender::sUIGLScaleFactor.mV[VY]) - pixel_offset,
|
||||
filled);
|
||||
gGL.popUIMatrix();
|
||||
}
|
||||
|
|
@ -2017,7 +2016,6 @@ void gl_segmented_rect_3d_tex(const LLRectf& clip_rect, const LLRectf& center_uv
|
|||
|
||||
LLRender2D::LLRender2D(LLImageProviderInterface* image_provider)
|
||||
{
|
||||
mGLScaleFactor = LLVector2(1.f, 1.f);
|
||||
mImageProvider = image_provider;
|
||||
if(mImageProvider)
|
||||
{
|
||||
|
|
@ -2034,7 +2032,7 @@ LLRender2D::~LLRender2D()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLRender2D::translate(F32 x, F32 y, F32 z)
|
||||
{
|
||||
gGL.translateUI(x,y,z);
|
||||
|
|
@ -2043,12 +2041,14 @@ void LLRender2D::translate(F32 x, F32 y, F32 z)
|
|||
LLFontGL::sCurDepth += z;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRender2D::pushMatrix()
|
||||
{
|
||||
gGL.pushUIMatrix();
|
||||
LLFontGL::sOriginStack.push_back(std::make_pair(LLFontGL::sCurOrigin, LLFontGL::sCurDepth));
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRender2D::popMatrix()
|
||||
{
|
||||
gGL.popUIMatrix();
|
||||
|
|
@ -2057,6 +2057,7 @@ void LLRender2D::popMatrix()
|
|||
LLFontGL::sOriginStack.pop_back();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRender2D::loadIdentity()
|
||||
{
|
||||
gGL.loadUIIdentity();
|
||||
|
|
@ -2065,15 +2066,11 @@ void LLRender2D::loadIdentity()
|
|||
LLFontGL::sCurDepth = 0.f;
|
||||
}
|
||||
|
||||
void LLRender2D::setScaleFactor(const LLVector2 &scale_factor)
|
||||
{
|
||||
mGLScaleFactor = scale_factor;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLRender2D::setLineWidth(F32 width)
|
||||
{
|
||||
gGL.flush();
|
||||
glLineWidth(width * lerp(mGLScaleFactor.mV[VX], mGLScaleFactor.mV[VY], 0.5f));
|
||||
glLineWidth(width * lerp(LLRender::sUIGLScaleFactor.mV[VX], LLRender::sUIGLScaleFactor.mV[VY], 0.5f));
|
||||
}
|
||||
|
||||
LLPointer<LLUIImage> LLRender2D::getUIImageByID(const LLUUID& image_id, S32 priority)
|
||||
|
|
|
|||
|
|
@ -127,19 +127,16 @@ class LLRender2D : public LLParamSingleton<LLRender2D>
|
|||
LOG_CLASS(LLRender2D);
|
||||
~LLRender2D();
|
||||
public:
|
||||
void pushMatrix();
|
||||
void popMatrix();
|
||||
void loadIdentity();
|
||||
void translate(F32 x, F32 y, F32 z = 0.0f);
|
||||
static void pushMatrix();
|
||||
static void popMatrix();
|
||||
static void loadIdentity();
|
||||
static void translate(F32 x, F32 y, F32 z = 0.0f);
|
||||
|
||||
void setLineWidth(F32 width);
|
||||
void setScaleFactor(const LLVector2& scale_factor);
|
||||
static void setLineWidth(F32 width);
|
||||
|
||||
LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0);
|
||||
LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0);
|
||||
|
||||
LLVector2 mGLScaleFactor;
|
||||
|
||||
protected:
|
||||
// since LLRender2D has no control of image provider's lifecycle
|
||||
// we need a way to tell LLRender2D that provider died and
|
||||
|
|
|
|||
|
|
@ -1006,7 +1006,7 @@ void LLAccordionCtrlTab::drawChild(const LLRect& root_rect,LLView* child)
|
|||
LLRect screen_rect;
|
||||
localRectToScreen(child->getRect(),&screen_rect);
|
||||
|
||||
if ( root_rect.overlaps(screen_rect) && LLUI::getInstance()->mDirtyRect.overlaps(screen_rect))
|
||||
if ( root_rect.overlaps(screen_rect) && sDirtyRect.overlaps(screen_rect))
|
||||
{
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
LLUI::pushMatrix();
|
||||
|
|
|
|||
|
|
@ -219,7 +219,9 @@ void LLConsole::draw()
|
|||
// <FS> Different draw options
|
||||
//LLUIImagePtr imagep = LLUI::getUIImage("transparent");
|
||||
|
||||
//F32 console_opacity = llclamp(LLUI::getInstance()->mSettingGroups["config"]->getF32("ConsoleBackgroundOpacity"), 0.f, 1.f);
|
||||
//static LLCachedControl<F32> console_bg_opacity(*LLUI::getInstance()->mSettingGroups["config"], "ConsoleBackgroundOpacity", 0.7f);
|
||||
//F32 console_opacity = llclamp(console_bg_opacity(), 0.f, 1.f);
|
||||
|
||||
//LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground");
|
||||
//color.mV[VALPHA] *= console_opacity;
|
||||
|
||||
|
|
|
|||
|
|
@ -412,13 +412,15 @@ void LLFloater::layoutDragHandle()
|
|||
// static
|
||||
void LLFloater::updateActiveFloaterTransparency()
|
||||
{
|
||||
sActiveControlTransparency = LLUI::getInstance()->mSettingGroups["config"]->getF32("ActiveFloaterTransparency");
|
||||
static LLCachedControl<F32> active_transparency(*LLUI::getInstance()->mSettingGroups["config"], "ActiveFloaterTransparency", 1.f);
|
||||
sActiveControlTransparency = active_transparency;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloater::updateInactiveFloaterTransparency()
|
||||
{
|
||||
sInactiveControlTransparency = LLUI::getInstance()->mSettingGroups["config"]->getF32("InactiveFloaterTransparency");
|
||||
static LLCachedControl<F32> inactive_transparency(*LLUI::getInstance()->mSettingGroups["config"], "InactiveFloaterTransparency", 0.95f);
|
||||
sInactiveControlTransparency = inactive_transparency;
|
||||
}
|
||||
|
||||
void LLFloater::addResizeCtrls()
|
||||
|
|
|
|||
|
|
@ -346,12 +346,9 @@ static LLTrace::BlockTimerStatHandle FTM_FILTER("Filter Folder View");
|
|||
void LLFolderView::filter( LLFolderViewFilter& filter )
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_FILTER);
|
||||
// <FS:Ansariel> Replace frequently called gSavedSettings
|
||||
//filter.resetTime(llclamp(LLUI::getInstance()->mSettingGroups["config"]->getS32(mParentPanel.get()->getVisible() ? "FilterItemsMaxTimePerFrameVisible" : "FilterItemsMaxTimePerFrameUnvisible"), 1, 100));
|
||||
static LLCachedControl<S32> sFilterItemsMaxTimePerFrameVisible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible");
|
||||
static LLCachedControl<S32> sFilterItemsMaxTimePerFrameUnvisible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameUnvisible");
|
||||
filter.resetTime(llclamp((mParentPanel.get()->getVisible() ? sFilterItemsMaxTimePerFrameVisible() : sFilterItemsMaxTimePerFrameUnvisible()), 1, 100));
|
||||
// </FS:Ansariel>
|
||||
static LLCachedControl<S32> time_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10);
|
||||
static LLCachedControl<S32> time_invisible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameUnvisible", 1);
|
||||
filter.resetTime(llclamp((mParentPanel.get()->getVisible() ? time_visible() : time_invisible()), 1, 100));
|
||||
|
||||
// Note: we filter the model, not the view
|
||||
getViewModelItem()->filter(filter);
|
||||
|
|
@ -688,11 +685,8 @@ void LLFolderView::draw()
|
|||
closeAutoOpenedFolders();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//if (mSearchTimer.getElapsedTimeF32() > LLUI::getInstance()->mSettingGroups["config"]->getF32("TypeAheadTimeout") || !mSearchString.size())
|
||||
static LLCachedControl<F32> typeAheadTimeout(*LLUI::getInstance()->mSettingGroups["config"], "TypeAheadTimeout");
|
||||
if (mSearchTimer.getElapsedTimeF32() > typeAheadTimeout || !mSearchString.size())
|
||||
// </FS:Ansariel>
|
||||
static LLCachedControl<F32> type_ahead_timeout(*LLUI::getInstance()->mSettingGroups["config"], "TypeAheadTimeout", 1.5f);
|
||||
if (mSearchTimer.getElapsedTimeF32() > type_ahead_timeout || !mSearchString.size())
|
||||
{
|
||||
mSearchString.clear();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,12 +48,9 @@ std::string LLFolderViewModelCommon::getStatusText()
|
|||
|
||||
void LLFolderViewModelCommon::filter()
|
||||
{
|
||||
// <FS:Ansariel> Replace frequently called gSavedSettings
|
||||
//getFilter().resetTime(llclamp(LLUI::getInstance()->mSettingGroups["config"]->getS32("FilterItemsMaxTimePerFrameVisible"), 1, 100));
|
||||
static LLCachedControl<S32> sFilterItemsMaxTimePerFrameVisible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible");
|
||||
getFilter().resetTime(llclamp(sFilterItemsMaxTimePerFrameVisible(), 1, 100));
|
||||
// </FS:Ansariel>
|
||||
mFolderView->getViewModelItem()->filter(getFilter());
|
||||
static LLCachedControl<S32> max_time(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10);
|
||||
getFilter().resetTime(llclamp(max_time(), 1, 100));
|
||||
mFolderView->getViewModelItem()->filter(getFilter());
|
||||
}
|
||||
|
||||
bool LLFolderViewModelItemCommon::hasFilterStringMatch()
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)
|
|||
}
|
||||
}
|
||||
|
||||
mRoundedSquareImgp = LLUI::getUIImage("Rounded_Square");
|
||||
if (p.thumb_image.isProvided())
|
||||
{
|
||||
mThumbImagep = LLUI::getUIImage(p.thumb_image());
|
||||
|
|
@ -666,8 +667,6 @@ void LLMultiSlider::draw()
|
|||
F32 opacity = getEnabled() ? 1.f : 0.3f;
|
||||
|
||||
// Track
|
||||
LLUIImagePtr thumb_imagep = LLUI::getUIImage("Rounded_Square");
|
||||
|
||||
static LLUICachedControl<S32> multi_track_height_width ("UIMultiTrackHeight", 0);
|
||||
S32 height_offset = 0;
|
||||
S32 width_offset = 0;
|
||||
|
|
@ -685,7 +684,7 @@ void LLMultiSlider::draw()
|
|||
if(mDrawTrack)
|
||||
{
|
||||
track_rect.stretch(-1);
|
||||
thumb_imagep->draw(track_rect, mTrackColor.get() % opacity);
|
||||
mRoundedSquareImgp->draw(track_rect, mTrackColor.get() % opacity);
|
||||
}
|
||||
|
||||
// if we're supposed to use a drawn triangle
|
||||
|
|
@ -704,7 +703,7 @@ void LLMultiSlider::draw()
|
|||
mTriangleColor.get() % opacity, TRUE);
|
||||
}
|
||||
}
|
||||
else if (!thumb_imagep && !mThumbImagep)
|
||||
else if (!mRoundedSquareImgp && !mThumbImagep)
|
||||
{
|
||||
// draw all the thumbs
|
||||
curSldrIt = mThumbRects.end();
|
||||
|
|
@ -757,7 +756,7 @@ void LLMultiSlider::draw()
|
|||
}
|
||||
else
|
||||
{
|
||||
thumb_imagep->drawSolid(mDragStartThumbRect, mThumbCenterColor.get() % 0.3f);
|
||||
mRoundedSquareImgp->drawSolid(mDragStartThumbRect, mThumbCenterColor.get() % 0.3f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -772,7 +771,7 @@ void LLMultiSlider::draw()
|
|||
}
|
||||
else
|
||||
{
|
||||
thumb_imagep->drawBorder(mThumbRects[mCurSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
|
||||
mRoundedSquareImgp->drawBorder(mThumbRects[mCurSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -784,7 +783,7 @@ void LLMultiSlider::draw()
|
|||
}
|
||||
else
|
||||
{
|
||||
thumb_imagep->drawBorder(mThumbRects[mHoverSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
|
||||
mRoundedSquareImgp->drawBorder(mThumbRects[mHoverSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -822,11 +821,11 @@ void LLMultiSlider::draw()
|
|||
}
|
||||
else if (capture == this)
|
||||
{
|
||||
thumb_imagep->drawSolid(mIt->second, curThumbColor);
|
||||
mRoundedSquareImgp->drawSolid(mIt->second, curThumbColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
thumb_imagep->drawSolid(mIt->second, curThumbColor % opacity);
|
||||
mRoundedSquareImgp->drawSolid(mIt->second, curThumbColor % opacity);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -846,11 +845,11 @@ void LLMultiSlider::draw()
|
|||
}
|
||||
else if (capture == this)
|
||||
{
|
||||
thumb_imagep->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get());
|
||||
mRoundedSquareImgp->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
thumb_imagep->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get() % opacity);
|
||||
mRoundedSquareImgp->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get() % opacity);
|
||||
}
|
||||
}
|
||||
if(hoverSldrIt != mThumbRects.end())
|
||||
|
|
@ -861,7 +860,7 @@ void LLMultiSlider::draw()
|
|||
}
|
||||
else
|
||||
{
|
||||
thumb_imagep->drawSolid(hoverSldrIt->second, mThumbCenterSelectedColor.get());
|
||||
mRoundedSquareImgp->drawSolid(hoverSldrIt->second, mThumbCenterSelectedColor.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -150,6 +150,7 @@ protected:
|
|||
LLUIColor mDisabledThumbColor;
|
||||
LLUIColor mTriangleColor;
|
||||
LLUIImagePtr mThumbImagep; //blimps on the slider, for now no 'disabled' support
|
||||
LLUIImagePtr mRoundedSquareImgp; //blimps on the slider, for now no 'disabled' support
|
||||
|
||||
const EOrientation mOrientation;
|
||||
|
||||
|
|
|
|||
|
|
@ -1333,7 +1333,7 @@ BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask)
|
|||
BOOL handled = FALSE;
|
||||
|
||||
S32 mouse_distance_squared = (x - mMouseDownX) * (x - mMouseDownX) + (y - mMouseDownY) * (y - mMouseDownY);
|
||||
S32 drag_threshold = LLUI::getInstance()->mSettingGroups["config"]->getS32("DragAndDropDistanceThreshold");
|
||||
static LLCachedControl<S32> drag_threshold(*LLUI::getInstance()->mSettingGroups["config"], "DragAndDropDistanceThreshold", 3);
|
||||
if (mouse_distance_squared > drag_threshold * drag_threshold
|
||||
&& hasMouseCapture() &&
|
||||
mStartDragItemCallback && mHandleDragItemCallback)
|
||||
|
|
|
|||
|
|
@ -358,8 +358,8 @@ void LLToolTip::draw()
|
|||
|
||||
if (mFadeTimer.getStarted())
|
||||
{
|
||||
F32 tool_tip_fade_time = LLUI::getInstance()->mSettingGroups["config"]->getF32("ToolTipFadeTime");
|
||||
alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, tool_tip_fade_time, 1.f, 0.f);
|
||||
static LLCachedControl<F32> tool_tip_fade_time(*LLUI::getInstance()->mSettingGroups["config"], "ToolTipFadeTime", 0.2f);
|
||||
alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, tool_tip_fade_time(), 1.f, 0.f);
|
||||
if (alpha == 0.f)
|
||||
{
|
||||
// finished fading out, so hide ourselves
|
||||
|
|
|
|||
|
|
@ -178,7 +178,6 @@ mAudioCallback(audio_callback),
|
|||
mDeferredAudioCallback(deferred_audio_callback),
|
||||
mWindow(NULL), // set later in startup
|
||||
mRootView(NULL),
|
||||
mDirty(FALSE),
|
||||
mHelpImpl(NULL)
|
||||
{
|
||||
LLRender2D::initParamSingleton(image_provider);
|
||||
|
|
@ -230,19 +229,6 @@ void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& rem
|
|||
mClearPopupsFunc = clear_popups;
|
||||
}
|
||||
|
||||
void LLUI::dirtyRect(LLRect rect)
|
||||
{
|
||||
if (!mDirty)
|
||||
{
|
||||
mDirtyRect = rect;
|
||||
mDirty = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
mDirtyRect.unionWith(rect);
|
||||
}
|
||||
}
|
||||
|
||||
void LLUI::setMousePositionScreen(S32 x, S32 y)
|
||||
{
|
||||
#if defined(LL_DARWIN)
|
||||
|
|
@ -564,6 +550,18 @@ const LLView* LLUI::resolvePath(const LLView* context, const std::string& path)
|
|||
return context;
|
||||
}
|
||||
|
||||
//static
|
||||
LLVector2& LLUI::getScaleFactor()
|
||||
{
|
||||
return LLRender::sUIGLScaleFactor;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLUI::setScaleFactor(const LLVector2& scale_factor)
|
||||
{
|
||||
LLRender::sUIGLScaleFactor = scale_factor;
|
||||
}
|
||||
|
||||
|
||||
// LLLocalClipRect and LLScreenClipRect moved to lllocalcliprect.h/cpp
|
||||
|
||||
|
|
|
|||
|
|
@ -250,10 +250,6 @@ public:
|
|||
|
||||
void setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t&, const clear_popups_t& );
|
||||
|
||||
LLRect mDirtyRect;
|
||||
BOOL mDirty;
|
||||
void dirtyRect(LLRect rect);
|
||||
|
||||
// Return the ISO639 language name ("en", "ko", etc.) for the viewer UI.
|
||||
// http://www.loc.gov/standards/iso639-2/php/code_list.php
|
||||
// <FS:Ansariel> FIRE-16709: Bypass FSEnabledLanguages for llGetAgentLanguage
|
||||
|
|
@ -321,14 +317,14 @@ public:
|
|||
void positionViewNearMouse(LLView* view, S32 spawn_x = S32_MAX, S32 spawn_y = S32_MAX);
|
||||
|
||||
// LLRender2D wrappers
|
||||
static void pushMatrix() { LLRender2D::getInstance()->pushMatrix(); }
|
||||
static void popMatrix() { LLRender2D::getInstance()->popMatrix(); }
|
||||
static void loadIdentity() { LLRender2D::getInstance()->loadIdentity(); }
|
||||
static void translate(F32 x, F32 y, F32 z = 0.0f) { LLRender2D::getInstance()->translate(x, y, z); }
|
||||
static void pushMatrix() { LLRender2D::pushMatrix(); }
|
||||
static void popMatrix() { LLRender2D::popMatrix(); }
|
||||
static void loadIdentity() { LLRender2D::loadIdentity(); }
|
||||
static void translate(F32 x, F32 y, F32 z = 0.0f) { LLRender2D::translate(x, y, z); }
|
||||
|
||||
static LLVector2& getScaleFactor() { return LLRender2D::getInstance()->mGLScaleFactor; }
|
||||
static void setScaleFactor(const LLVector2& scale_factor) { LLRender2D::getInstance()->setScaleFactor(scale_factor); }
|
||||
static void setLineWidth(F32 width) { LLRender2D::getInstance()->setLineWidth(width); }
|
||||
static LLVector2& getScaleFactor();
|
||||
static void setScaleFactor(const LLVector2& scale_factor);
|
||||
static void setLineWidth(F32 width) { LLRender2D::setLineWidth(width); }
|
||||
static LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0)
|
||||
{ return LLRender2D::getInstance()->getUIImageByID(image_id, priority); }
|
||||
static LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0)
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ void LLUrlEntryBase::callObservers(const std::string &id,
|
|||
bool LLUrlEntryBase::isLinkDisabled() const
|
||||
{
|
||||
// this allows us to have a global setting to turn off text hyperlink highlighting/action
|
||||
bool globally_disabled = LLUI::getInstance()->mSettingGroups["config"]->getBOOL("DisableTextHyperlinkActions");
|
||||
static LLCachedControl<bool> globally_disabled(*LLUI::getInstance()->mSettingGroups["config"], "DisableTextHyperlinkActions", false);
|
||||
|
||||
return globally_disabled;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,8 @@ static const S32 LINE_HEIGHT = 15;
|
|||
|
||||
S32 LLView::sDepth = 0;
|
||||
bool LLView::sDebugRects = false;
|
||||
bool LLView::sIsRectDirty = false;
|
||||
LLRect LLView::sDirtyRect;
|
||||
bool LLView::sDebugRectsShowNames = true;
|
||||
bool LLView::sDebugKeys = false;
|
||||
bool LLView::sDebugMouseHandling = false;
|
||||
|
|
@ -936,14 +938,16 @@ BOOL LLView::handleToolTip(S32 x, S32 y, MASK mask)
|
|||
std::string tooltip = getToolTip();
|
||||
if (!tooltip.empty())
|
||||
{
|
||||
static LLCachedControl<F32> tooltip_fast_delay(*LLUI::getInstance()->mSettingGroups["config"], "ToolTipFastDelay", 0.1f);
|
||||
static LLCachedControl<F32> tooltip_delay(*LLUI::getInstance()->mSettingGroups["config"], "ToolTipDelay", 0.7f);
|
||||
static LLCachedControl<bool> allow_ui_tooltips(*LLUI::getInstance()->mSettingGroups["config"], "BasicUITooltips", true);
|
||||
// allow "scrubbing" over ui by showing next tooltip immediately
|
||||
// if previous one was still visible
|
||||
F32 timeout = LLToolTipMgr::instance().toolTipVisible()
|
||||
? LLUI::getInstance()->mSettingGroups["config"]->getF32( "ToolTipFastDelay" )
|
||||
: LLUI::getInstance()->mSettingGroups["config"]->getF32( "ToolTipDelay" );
|
||||
? tooltip_fast_delay
|
||||
: tooltip_delay;
|
||||
|
||||
// Even if we don't show tooltips, consume the event, nothing below should show tooltip
|
||||
bool allow_ui_tooltips = LLUI::getInstance()->mSettingGroups["config"]->getBOOL("BasicUITooltips");
|
||||
if (allow_ui_tooltips)
|
||||
{
|
||||
LLToolTipMgr::instance().show(LLToolTip::Params()
|
||||
|
|
@ -1240,7 +1244,7 @@ void LLView::drawChildren()
|
|||
if (viewp->getVisible() && viewp->getRect().isValid())
|
||||
{
|
||||
LLRect screen_rect = viewp->calcScreenRect();
|
||||
if ( rootp->getLocalRect().overlaps(screen_rect) && LLUI::getInstance()->mDirtyRect.overlaps(screen_rect))
|
||||
if ( rootp->getLocalRect().overlaps(screen_rect) && sDirtyRect.overlaps(screen_rect))
|
||||
{
|
||||
LLUI::pushMatrix();
|
||||
{
|
||||
|
|
@ -1282,7 +1286,15 @@ void LLView::dirtyRect()
|
|||
parent = parent->getParent();
|
||||
}
|
||||
|
||||
LLUI::getInstance()->dirtyRect(cur->calcScreenRect());
|
||||
if (!sIsRectDirty)
|
||||
{
|
||||
sDirtyRect = cur->calcScreenRect();
|
||||
sIsRectDirty = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
sDirtyRect.unionWith(cur->calcScreenRect());
|
||||
}
|
||||
}
|
||||
|
||||
//Draw a box for debugging.
|
||||
|
|
|
|||
|
|
@ -671,6 +671,9 @@ public:
|
|||
// Draw debug rectangles around widgets to help with alignment and spacing
|
||||
static bool sDebugRects;
|
||||
|
||||
static bool sIsRectDirty;
|
||||
static LLRect sDirtyRect;
|
||||
|
||||
// Draw widget names and sizes when drawing debug rectangles, turning this
|
||||
// off is useful to make the rectangles themselves easier to see.
|
||||
static bool sDebugRectsShowNames;
|
||||
|
|
|
|||
|
|
@ -17861,19 +17861,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<!-- SL-12594 removes fixed function rendering
|
||||
<key>VertexShaderEnable</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enable/disable all GLSL shaders (debug)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
-->
|
||||
<key>VivoxAutoPostCrashDumps</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ RenderVBOMappingDisable 1 1
|
|||
RenderVolumeLODFactor 1 4.0
|
||||
UseStartScreen 1 1
|
||||
UseOcclusion 1 1
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
Disregard128DefaultDrawDistance 1 1
|
||||
|
|
@ -95,7 +94,6 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
//VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -127,7 +125,6 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -158,7 +155,6 @@ RenderTerrainLODFactor 1 1.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -189,7 +185,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -220,7 +215,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -251,7 +245,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -282,7 +275,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -312,7 +304,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderVolumeLODFactor 1 3.0
|
||||
//VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
RenderDeferred 1 1
|
||||
|
|
@ -380,7 +371,6 @@ list NoPixelShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
//VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
@ -394,7 +384,6 @@ list NoVertexShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
//VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ RenderVBOMappingDisable 1 1
|
|||
RenderVolumeLODFactor 1 4.0
|
||||
UseStartScreen 1 1
|
||||
UseOcclusion 1 1
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
Disregard128DefaultDrawDistance 1 1
|
||||
|
|
@ -94,7 +93,6 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -126,7 +124,6 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -157,7 +154,6 @@ RenderTerrainLODFactor 1 1.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -188,7 +184,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -219,7 +214,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
|
|
@ -250,7 +244,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -281,7 +274,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -311,7 +303,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderVolumeLODFactor 1 3.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
RenderDeferred 1 1
|
||||
|
|
@ -379,7 +370,6 @@ list NoPixelShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
@ -393,7 +383,6 @@ list NoVertexShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ RenderVBOMappingDisable 1 1
|
|||
RenderVolumeLODFactor 1 4.0
|
||||
UseStartScreen 1 1
|
||||
UseOcclusion 1 1
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
Disregard128DefaultDrawDistance 1 1
|
||||
|
|
@ -95,7 +94,6 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -127,7 +125,6 @@ RenderTerrainLODFactor 1 1
|
|||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -158,7 +155,6 @@ RenderTerrainLODFactor 1 1.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -189,7 +185,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -220,7 +215,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -251,7 +245,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -282,7 +275,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -312,7 +304,6 @@ RenderTerrainLODFactor 1 2.0
|
|||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderVolumeLODFactor 1 3.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
RenderDeferred 1 1
|
||||
|
|
@ -374,7 +365,6 @@ list NoPixelShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
@ -388,7 +378,6 @@ list NoVertexShaders
|
|||
RenderAvatarVP 0 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderReflectionDetail 0 0
|
||||
VertexShaderEnable 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
|
|||
|
|
@ -125,7 +125,8 @@ const U8 AGENT_STATE_EDITING = 0x10;
|
|||
// Autopilot constants
|
||||
const F32 AUTOPILOT_HEIGHT_ADJUST_DISTANCE = 8.f; // meters
|
||||
const F32 AUTOPILOT_MIN_TARGET_HEIGHT_OFF_GROUND = 1.f; // meters
|
||||
const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS = 1.5f; // seconds
|
||||
const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS_WALK = 1.5f; // seconds
|
||||
const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS_FLY = 2.5f; // seconds. Flying is less presize, needs a bit more time
|
||||
|
||||
const F32 MAX_VELOCITY_AUTO_LAND_SQUARED = 4.f * 4.f;
|
||||
const F64 CHAT_AGE_FAST_RATE = 3.0;
|
||||
|
|
@ -1934,6 +1935,12 @@ void LLAgent::startAutoPilotGlobal(
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (target_global.isExactlyZero())
|
||||
{
|
||||
LL_WARNS() << "Canceling attempt to start autopilot towards invalid position" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// Are there any pending callbacks from previous auto pilot requests?
|
||||
if (mAutoPilotFinishedCallback)
|
||||
|
|
@ -2149,7 +2156,16 @@ void LLAgent::autoPilot(F32 *delta_yaw)
|
|||
if (target_dist >= mAutoPilotTargetDist)
|
||||
{
|
||||
mAutoPilotNoProgressFrameCount++;
|
||||
if (mAutoPilotNoProgressFrameCount > AUTOPILOT_MAX_TIME_NO_PROGRESS * gFPSClamped)
|
||||
bool out_of_time = false;
|
||||
if (getFlying())
|
||||
{
|
||||
out_of_time = mAutoPilotNoProgressFrameCount > AUTOPILOT_MAX_TIME_NO_PROGRESS_FLY * gFPSClamped;
|
||||
}
|
||||
else
|
||||
{
|
||||
out_of_time = mAutoPilotNoProgressFrameCount > AUTOPILOT_MAX_TIME_NO_PROGRESS_WALK * gFPSClamped;
|
||||
}
|
||||
if (out_of_time)
|
||||
{
|
||||
stopAutoPilot();
|
||||
return;
|
||||
|
|
@ -2198,7 +2214,7 @@ void LLAgent::autoPilot(F32 *delta_yaw)
|
|||
F32 slow_distance;
|
||||
if (getFlying())
|
||||
{
|
||||
slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f);
|
||||
slow_distance = llmax(8.f, mAutoPilotStopDistance + 5.f);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2242,14 +2258,41 @@ void LLAgent::autoPilot(F32 *delta_yaw)
|
|||
}
|
||||
else if (mAutoPilotTargetDist > mAutoPilotStopDistance)
|
||||
{
|
||||
// walking/flying slow
|
||||
// walking/flying slow
|
||||
U32 movement_flag = 0;
|
||||
|
||||
if (at * direction > 0.9f)
|
||||
{
|
||||
setControlFlags(AGENT_CONTROL_AT_POS);
|
||||
}
|
||||
else if (at * direction < -0.9f)
|
||||
{
|
||||
setControlFlags(AGENT_CONTROL_AT_NEG);
|
||||
movement_flag = AGENT_CONTROL_AT_POS;
|
||||
}
|
||||
else if (at * direction < -0.9f)
|
||||
{
|
||||
movement_flag = AGENT_CONTROL_AT_NEG;
|
||||
}
|
||||
|
||||
if (getFlying())
|
||||
{
|
||||
// flying is too fast and has high inertia, artificially slow it down
|
||||
// Don't update flags too often, server might not react
|
||||
static U64 last_time_microsec = 0;
|
||||
U64 time_microsec = LLTimer::getTotalTime();
|
||||
U64 delta = time_microsec - last_time_microsec;
|
||||
// fly during ~0-40 ms, stop during ~40-250 ms
|
||||
if (delta > 250000) // 250ms
|
||||
{
|
||||
// reset even if !movement_flag
|
||||
last_time_microsec = time_microsec;
|
||||
}
|
||||
else if (delta > 40000) // 40 ms
|
||||
{
|
||||
clearControlFlags(AGENT_CONTROL_AT_POS | AGENT_CONTROL_AT_POS);
|
||||
movement_flag = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (movement_flag)
|
||||
{
|
||||
setControlFlags(movement_flag);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ static const struct
|
|||
};
|
||||
|
||||
static void setting_changed();
|
||||
static void ssl_verification_changed();
|
||||
|
||||
|
||||
LLAppCoreHttp::HttpClass::HttpClass()
|
||||
|
|
@ -206,6 +207,23 @@ void LLAppCoreHttp::init()
|
|||
LL_WARNS("Init") << "Failed to set SSL Verification. Reason: " << status.toString() << LL_ENDL;
|
||||
}
|
||||
|
||||
// Set up Default SSL Verification option.
|
||||
const std::string no_verify_ssl("NoVerifySSLCert");
|
||||
if (gSavedSettings.controlExists(no_verify_ssl))
|
||||
{
|
||||
LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(no_verify_ssl);
|
||||
if (cntrl_ptr.isNull())
|
||||
{
|
||||
LL_WARNS("Init") << "Unable to set signal on global setting '" << no_verify_ssl
|
||||
<< "'" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
mSSLNoVerifySignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&ssl_verification_changed));
|
||||
LLCore::HttpOptions::setDefaultSSLVerifyPeer(!cntrl_ptr->getValue().asBoolean());
|
||||
}
|
||||
}
|
||||
|
||||
// Tracing levels for library & libcurl (note that 2 & 3 are beyond spammy):
|
||||
// 0 - None
|
||||
// 1 - Basic start, stop simple transitions
|
||||
|
|
@ -307,6 +325,11 @@ void setting_changed()
|
|||
LLAppViewer::instance()->getAppCoreHttp().refreshSettings(false);
|
||||
}
|
||||
|
||||
void ssl_verification_changed()
|
||||
{
|
||||
LLCore::HttpOptions::setDefaultSSLVerifyPeer(!gSavedSettings.getBOOL("NoVerifySSLCert"));
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
// The NoOpDeletor is used when wrapping LLAppCoreHttp in a smart pointer below for
|
||||
|
|
@ -366,6 +389,7 @@ void LLAppCoreHttp::cleanup()
|
|||
{
|
||||
mHttpClasses[i].mSettingsSignal.disconnect();
|
||||
}
|
||||
mSSLNoVerifySignal.disconnect();
|
||||
mPipelinedSignal.disconnect();
|
||||
|
||||
delete mRequest;
|
||||
|
|
|
|||
|
|
@ -272,6 +272,7 @@ private:
|
|||
HttpClass mHttpClasses[AP_COUNT];
|
||||
bool mPipelined; // Global setting
|
||||
boost::signals2::connection mPipelinedSignal; // Signal for 'HttpPipelining' setting
|
||||
boost::signals2::connection mSSLNoVerifySignal; // Signal for 'NoVerifySSLCert' setting
|
||||
|
||||
static LLCore::HttpStatus sslVerify(const std::string &uri, const LLCore::HttpHandler::ptr_t &handler, void *appdata);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1218,8 +1218,38 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, LLEnvironm
|
|||
}
|
||||
else if (!environment->getSky())
|
||||
{
|
||||
environment->setSky(mCurrentEnvironment->getSky());
|
||||
environment->setFlags(DayInstance::NO_ANIMATE_SKY);
|
||||
if (mCurrentEnvironment->getEnvironmentSelection() != ENV_NONE)
|
||||
{
|
||||
// Note: This looks suspicious. Shouldn't we assign whole day if mCurrentEnvironment has whole day?
|
||||
// and then add water/sky on top
|
||||
// This looks like it will result in sky using single keyframe instead of whole day if day is present
|
||||
// when setting static water without static sky
|
||||
environment->setSky(mCurrentEnvironment->getSky());
|
||||
environment->setFlags(DayInstance::NO_ANIMATE_SKY);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Environment is not properly initialized yet, but we should have environment by this point
|
||||
DayInstance::ptr_t substitute = getEnvironmentInstance(ENV_PARCEL, true);
|
||||
if (!substitute || !substitute->getSky())
|
||||
{
|
||||
substitute = getEnvironmentInstance(ENV_REGION, true);
|
||||
}
|
||||
if (!substitute || !substitute->getSky())
|
||||
{
|
||||
substitute = getEnvironmentInstance(ENV_DEFAULT, true);
|
||||
}
|
||||
|
||||
if (substitute && substitute->getSky())
|
||||
{
|
||||
environment->setSky(substitute->getSky());
|
||||
environment->setFlags(DayInstance::NO_ANIMATE_SKY);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("ENVIRONMENT") << "Failed to assign substitute water/sky, environment is not properly initialized" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fixed.second)
|
||||
|
|
@ -1229,8 +1259,38 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, LLEnvironm
|
|||
}
|
||||
else if (!environment->getWater())
|
||||
{
|
||||
environment->setWater(mCurrentEnvironment->getWater());
|
||||
environment->setFlags(DayInstance::NO_ANIMATE_WATER);
|
||||
if (mCurrentEnvironment->getEnvironmentSelection() != ENV_NONE)
|
||||
{
|
||||
// Note: This looks suspicious. Shouldn't we assign whole day if mCurrentEnvironment has whole day?
|
||||
// and then add water/sky on top
|
||||
// This looks like it will result in water using single keyframe instead of whole day if day is present
|
||||
// when setting static sky without static water
|
||||
environment->setWater(mCurrentEnvironment->getWater());
|
||||
environment->setFlags(DayInstance::NO_ANIMATE_WATER);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Environment is not properly initialized yet, but we should have environment by this point
|
||||
DayInstance::ptr_t substitute = getEnvironmentInstance(ENV_PARCEL, true);
|
||||
if (!substitute || !substitute->getWater())
|
||||
{
|
||||
substitute = getEnvironmentInstance(ENV_REGION, true);
|
||||
}
|
||||
if (!substitute || !substitute->getWater())
|
||||
{
|
||||
substitute = getEnvironmentInstance(ENV_DEFAULT, true);
|
||||
}
|
||||
|
||||
if (substitute && substitute->getWater())
|
||||
{
|
||||
environment->setWater(substitute->getWater());
|
||||
environment->setFlags(DayInstance::NO_ANIMATE_WATER);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("ENVIRONMENT") << "Failed to assign substitute water/sky, environment is not properly initialized" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!mSignalEnvChanged.empty())
|
||||
|
|
|
|||
|
|
@ -239,6 +239,7 @@ void LLFloaterAbout::fetchServerReleaseNotesCoro(std::string cap_url)
|
|||
|
||||
httpOpts->setWantHeaders(true);
|
||||
httpOpts->setFollowRedirects(false);
|
||||
httpOpts->setSSLVerifyPeer(false); // We want this data even if SSL verification fails
|
||||
|
||||
LLSD result = httpAdapter->getAndSuspend(httpRequest, cap_url, httpOpts);
|
||||
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ void LLFloaterGridStatus::getGridStatusRSSCoro()
|
|||
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
|
||||
LLCore::HttpHeaders::ptr_t httpHeaders(new LLCore::HttpHeaders);
|
||||
|
||||
httpOpts->setSSLVerifyPeer(false); // We want this data even if SSL fails
|
||||
httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_TEXT_XML);
|
||||
std::string url = gSavedSettings.getString("GridStatusRSS");
|
||||
|
||||
|
|
|
|||
|
|
@ -122,8 +122,7 @@ void LLFloaterURLEntry::headerFetchComplete(S32 status, const std::string& mime_
|
|||
}
|
||||
|
||||
}
|
||||
// Decrement the cursor
|
||||
getWindow()->decBusyCount();
|
||||
|
||||
getChildView("loading_label")->setVisible( false);
|
||||
closeFloater();
|
||||
}
|
||||
|
|
@ -302,3 +301,9 @@ bool LLFloaterURLEntry::callback_clear_url_list(const LLSD& notification, const
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLFloaterURLEntry::onClose( bool app_quitting )
|
||||
{
|
||||
// Decrement the cursor
|
||||
getWindow()->decBusyCount();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ public:
|
|||
// that panel via the handle.
|
||||
static LLHandle<LLFloater> show(LLHandle<LLPanel> panel_land_media_handle, const std::string media_url);
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onClose( bool app_quitting );
|
||||
void headerFetchComplete(S32 status, const std::string& mime_type);
|
||||
|
||||
bool addURLToCombobox(const std::string& media_url);
|
||||
|
|
|
|||
|
|
@ -106,10 +106,8 @@ LLHUDNameTag::LLHUDNameTag(const U8 type)
|
|||
LLPointer<LLHUDNameTag> ptr(this);
|
||||
sTextObjects.insert(ptr);
|
||||
|
||||
// <FS:Ansariel> Performance improvement
|
||||
mRoundedRectImg = LLUI::getUIImage("Rounded_Rect");
|
||||
mRoundedRectTopImg = LLUI::getUIImage("Rounded_Rect_Top");
|
||||
// </FS:Ansariel>
|
||||
mRoundedRectImgp = LLUI::getUIImage("Rounded_Rect");
|
||||
mRoundedRectTopImgp = LLUI::getUIImage("Rounded_Rect_Top");
|
||||
}
|
||||
|
||||
LLHUDNameTag::~LLHUDNameTag()
|
||||
|
|
@ -279,10 +277,6 @@ void LLHUDNameTag::renderText(BOOL for_select)
|
|||
|
||||
mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
|
||||
|
||||
// *TODO: cache this image
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Rect");
|
||||
|
||||
// *TODO: make this a per-text setting
|
||||
//LLColor4 bg_color = LLUIColorTable::instance().getColor("NameTagBackground");
|
||||
//bg_color.setAlpha(gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor);
|
||||
|
|
@ -319,14 +313,9 @@ void LLHUDNameTag::renderText(BOOL for_select)
|
|||
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
|
||||
LLRect screen_rect;
|
||||
screen_rect.setCenterAndSize(0, static_cast<S32>(lltrunc(-mHeight / 2 + mOffsetY)), static_cast<S32>(lltrunc(mWidth)), static_cast<S32>(lltrunc(mHeight)));
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//imagep->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color);
|
||||
mRoundedRectImg->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color);
|
||||
// </FS:Ansariel>
|
||||
mRoundedRectImgp->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color);
|
||||
if (mLabelSegments.size())
|
||||
{
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//LLUIImagePtr rect_top_image = LLUI::getUIImage("Rounded_Rect_Top");
|
||||
LLRect label_top_rect = screen_rect;
|
||||
const S32 label_height = ll_round((mFontp->getLineHeight() * (F32)mLabelSegments.size() + (VERTICAL_PADDING / 3.f)));
|
||||
label_top_rect.mBottom = label_top_rect.mTop - label_height;
|
||||
|
|
@ -336,10 +325,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
|
|||
label_top_color.mV[VALPHA] = color_alpha;
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//rect_top_image->draw3D(render_position, x_pixel_vec, y_pixel_vec, label_top_rect, label_top_color);
|
||||
mRoundedRectTopImg->draw3D(render_position, x_pixel_vec, y_pixel_vec, label_top_rect, label_top_color);
|
||||
// </FS:Ansariel>
|
||||
mRoundedRectTopImgp->draw3D(render_position, x_pixel_vec, y_pixel_vec, label_top_rect, label_top_color);
|
||||
}
|
||||
|
||||
F32 y_offset = (F32)mOffsetY;
|
||||
|
|
|
|||
|
|
@ -40,10 +40,8 @@
|
|||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
#include "lluiimage.h"
|
||||
|
||||
class LLDrawable;
|
||||
class LLHUDNameTag;
|
||||
class LLUIImage;
|
||||
|
||||
struct llhudnametag_further_away
|
||||
{
|
||||
|
|
@ -173,6 +171,8 @@ private:
|
|||
EVertAlignment mVertAlignment;
|
||||
S32 mLOD;
|
||||
BOOL mHidden;
|
||||
LLPointer<LLUIImage> mRoundedRectImgp;
|
||||
LLPointer<LLUIImage> mRoundedRectTopImgp;
|
||||
|
||||
static BOOL sDisplayText ;
|
||||
static std::set<LLPointer<LLHUDNameTag> > sTextObjects;
|
||||
|
|
@ -180,11 +180,6 @@ private:
|
|||
// static std::vector<LLPointer<LLHUDNameTag> > sVisibleHUDTextObjects;
|
||||
typedef std::set<LLPointer<LLHUDNameTag> >::iterator TextObjectIterator;
|
||||
typedef std::vector<LLPointer<LLHUDNameTag> >::iterator VisibleTextObjectIterator;
|
||||
|
||||
// <FS:Ansariel> Performance improvement
|
||||
LLUIImagePtr mRoundedRectImg;
|
||||
LLUIImagePtr mRoundedRectTopImg;
|
||||
// </FS:Ansariel>
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -148,10 +148,6 @@ void LLHUDText::renderText()
|
|||
|
||||
mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
|
||||
|
||||
// *TODO: cache this image
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
|
||||
|
||||
// *TODO: make this a per-text setting
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//LLColor4 bg_color = LLUIColorTable::instance().getColor("ObjectBubbleColor");
|
||||
|
|
|
|||
|
|
@ -126,36 +126,39 @@ void LLLandmarkList::processGetAssetReply(
|
|||
LLVFile file(vfs, uuid, type);
|
||||
S32 file_length = file.getSize();
|
||||
|
||||
std::vector<char> buffer(file_length + 1);
|
||||
file.read( (U8*)&buffer[0], file_length);
|
||||
buffer[ file_length ] = 0;
|
||||
if (file_length > 0)
|
||||
{
|
||||
std::vector<char> buffer(file_length + 1);
|
||||
file.read((U8*)&buffer[0], file_length);
|
||||
buffer[file_length] = 0;
|
||||
|
||||
LLLandmark* landmark = LLLandmark::constructFromString(&buffer[0]);
|
||||
if (landmark)
|
||||
{
|
||||
gLandmarkList.mList[ uuid ] = landmark;
|
||||
gLandmarkList.mRequestedList.erase(uuid);
|
||||
|
||||
LLVector3d pos;
|
||||
if(!landmark->getGlobalPos(pos))
|
||||
{
|
||||
LLUUID region_id;
|
||||
if(landmark->getRegionID(region_id))
|
||||
{
|
||||
LLLandmark::requestRegionHandle(
|
||||
gMessageSystem,
|
||||
gAgent.getRegionHost(),
|
||||
region_id,
|
||||
boost::bind(&LLLandmarkList::onRegionHandle, &gLandmarkList, uuid));
|
||||
}
|
||||
LLLandmark* landmark = LLLandmark::constructFromString(&buffer[0], buffer.size());
|
||||
if (landmark)
|
||||
{
|
||||
gLandmarkList.mList[uuid] = landmark;
|
||||
gLandmarkList.mRequestedList.erase(uuid);
|
||||
|
||||
// the callback will be called when we get the region handle.
|
||||
}
|
||||
else
|
||||
{
|
||||
gLandmarkList.makeCallbacks(uuid);
|
||||
}
|
||||
}
|
||||
LLVector3d pos;
|
||||
if (!landmark->getGlobalPos(pos))
|
||||
{
|
||||
LLUUID region_id;
|
||||
if (landmark->getRegionID(region_id))
|
||||
{
|
||||
LLLandmark::requestRegionHandle(
|
||||
gMessageSystem,
|
||||
gAgent.getRegionHost(),
|
||||
region_id,
|
||||
boost::bind(&LLLandmarkList::onRegionHandle, &gLandmarkList, uuid));
|
||||
}
|
||||
|
||||
// the callback will be called when we get the region handle.
|
||||
}
|
||||
else
|
||||
{
|
||||
gLandmarkList.makeCallbacks(uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -169,9 +169,7 @@ bool compareGalleryItem(LLOutfitGalleryItem* item1, LLOutfitGalleryItem* item2)
|
|||
std::string name1 = item1->getItemName();
|
||||
std::string name2 = item2->getItemName();
|
||||
|
||||
LLStringUtil::toUpper(name1);
|
||||
LLStringUtil::toUpper(name2);
|
||||
return name1 < name2;
|
||||
return (LLStringUtil::compareDict(name1, name2) < 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -67,10 +67,7 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL
|
|||
std::string name1 = tab1->getTitle();
|
||||
std::string name2 = tab2->getTitle();
|
||||
|
||||
LLStringUtil::toUpper(name1);
|
||||
LLStringUtil::toUpper(name2);
|
||||
|
||||
return name1 < name2;
|
||||
return (LLStringUtil::compareDict(name1, name2) < 0);
|
||||
}
|
||||
|
||||
struct outfit_accordion_tab_params : public LLInitParam::Block<outfit_accordion_tab_params, LLAccordionCtrlTab::Params>
|
||||
|
|
|
|||
|
|
@ -490,19 +490,7 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)
|
|||
mNoClassifieds = !mClassifiedsList->size();
|
||||
}
|
||||
|
||||
bool no_data = mNoPicks && mNoClassifieds;
|
||||
mNoItemsLabel->setVisible(no_data);
|
||||
if (no_data)
|
||||
{
|
||||
if(getAvatarId() == gAgentID)
|
||||
{
|
||||
mNoItemsLabel->setValue(LLTrans::getString("NoPicksClassifiedsText"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mNoItemsLabel->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText"));
|
||||
}
|
||||
}
|
||||
updateNoItemsLabel();
|
||||
}
|
||||
|
||||
LLPickItem* LLPanelPicks::getSelectedPickItem()
|
||||
|
|
@ -736,6 +724,13 @@ bool LLPanelPicks::callbackDeletePick(const LLSD& notification, const LLSD& resp
|
|||
{
|
||||
LLAvatarPropertiesProcessor::instance().sendPickDelete(pick_value[PICK_ID]);
|
||||
mPicksList->removeItemByValue(pick_value);
|
||||
|
||||
mNoPicks = !mPicksList->size();
|
||||
if (mNoPicks)
|
||||
{
|
||||
showAccordion("tab_picks", false);
|
||||
}
|
||||
updateNoItemsLabel();
|
||||
}
|
||||
updateButtons();
|
||||
return false;
|
||||
|
|
@ -750,6 +745,13 @@ bool LLPanelPicks::callbackDeleteClassified(const LLSD& notification, const LLSD
|
|||
{
|
||||
LLAvatarPropertiesProcessor::instance().sendClassifiedDelete(value[CLASSIFIED_ID]);
|
||||
mClassifiedsList->removeItemByValue(value);
|
||||
|
||||
mNoClassifieds = !mClassifiedsList->size();
|
||||
if (mNoClassifieds)
|
||||
{
|
||||
showAccordion("tab_classifieds", false);
|
||||
}
|
||||
updateNoItemsLabel();
|
||||
}
|
||||
updateButtons();
|
||||
return false;
|
||||
|
|
@ -863,6 +865,23 @@ void LLPanelPicks::updateButtons()
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelPicks::updateNoItemsLabel()
|
||||
{
|
||||
bool no_data = mNoPicks && mNoClassifieds;
|
||||
mNoItemsLabel->setVisible(no_data);
|
||||
if (no_data)
|
||||
{
|
||||
if (getAvatarId() == gAgentID)
|
||||
{
|
||||
mNoItemsLabel->setValue(LLTrans::getString("NoPicksClassifiedsText"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mNoItemsLabel->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPicks::setProfilePanel(LLPanelProfile* profile_panel)
|
||||
{
|
||||
mProfilePanel = profile_panel;
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ public:
|
|||
|
||||
protected:
|
||||
/*virtual*/void updateButtons();
|
||||
void updateNoItemsLabel();
|
||||
|
||||
private:
|
||||
void onClickDelete();
|
||||
|
|
|
|||
|
|
@ -218,6 +218,12 @@ void LLTeleportHistoryStorage::load()
|
|||
std::string line;
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
if (line.empty())
|
||||
{
|
||||
LL_WARNS() << "Teleport history contains empty line."<< LL_ENDL;
|
||||
continue;
|
||||
}
|
||||
|
||||
LLSD s_item;
|
||||
std::istringstream iss(line);
|
||||
if (parser->parse(iss, s_item, line.length()) == LLSDParser::PARSE_FAILURE)
|
||||
|
|
|
|||
|
|
@ -1591,7 +1591,8 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
|
|||
|
||||
BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
|
||||
{
|
||||
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("ShowHoverTips")) return TRUE;
|
||||
static LLCachedControl<bool> show_hover_tips(*LLUI::getInstance()->mSettingGroups["config"], "ShowHoverTips", true);
|
||||
if (!show_hover_tips) return TRUE;
|
||||
if (!mHoverPick.isValid()) return TRUE;
|
||||
// [RLVa:KB] - Checked: 2010-05-03 (RLVa-1.2.0g) | Modified: RLVa-1.2.0g
|
||||
#ifdef RLV_EXTENSION_CMD_INTERACT
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ void LLTranslationAPIHandler::verifyKeyCoro(LLTranslate::EService service, std::
|
|||
httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent);
|
||||
|
||||
httpOpts->setFollowRedirects(true);
|
||||
httpOpts->setSSLVerifyPeer(false);
|
||||
|
||||
std::string url = this->getKeyVerificationURL(key);
|
||||
if (url.empty())
|
||||
|
|
@ -185,6 +186,7 @@ void LLTranslationAPIHandler::translateMessageCoro(LanguagePair_t fromTo, std::s
|
|||
|
||||
httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_TEXT_PLAIN);
|
||||
httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent);
|
||||
httpOpts->setSSLVerifyPeer(false);
|
||||
|
||||
std::string url = this->getTranslateURL(fromTo.first, fromTo.second, msg);
|
||||
if (url.empty())
|
||||
|
|
|
|||
|
|
@ -1668,10 +1668,9 @@ void render_ui_2d()
|
|||
if (renderUIBuffer)
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
LLUI* ui_inst = LLUI::getInstance();
|
||||
if (ui_inst->mDirty)
|
||||
if (LLView::sIsRectDirty)
|
||||
{
|
||||
ui_inst->mDirty = FALSE;
|
||||
LLView::sIsRectDirty = false;
|
||||
LLRect t_rect;
|
||||
|
||||
gPipeline.mUIScreen.bindTarget();
|
||||
|
|
@ -1679,25 +1678,25 @@ void render_ui_2d()
|
|||
{
|
||||
static const S32 pad = 8;
|
||||
|
||||
ui_inst->mDirtyRect.mLeft -= pad;
|
||||
ui_inst->mDirtyRect.mRight += pad;
|
||||
ui_inst->mDirtyRect.mBottom -= pad;
|
||||
ui_inst->mDirtyRect.mTop += pad;
|
||||
LLView::sDirtyRect.mLeft -= pad;
|
||||
LLView::sDirtyRect.mRight += pad;
|
||||
LLView::sDirtyRect.mBottom -= pad;
|
||||
LLView::sDirtyRect.mTop += pad;
|
||||
|
||||
LLGLEnable scissor(GL_SCISSOR_TEST);
|
||||
static LLRect last_rect = ui_inst->mDirtyRect;
|
||||
static LLRect last_rect = LLView::sDirtyRect;
|
||||
|
||||
//union with last rect to avoid mouse poop
|
||||
last_rect.unionWith(ui_inst->mDirtyRect);
|
||||
last_rect.unionWith(LLView::sDirtyRect);
|
||||
|
||||
t_rect = ui_inst->mDirtyRect;
|
||||
ui_inst->mDirtyRect = last_rect;
|
||||
t_rect = LLView::sDirtyRect;
|
||||
LLView::sDirtyRect = last_rect;
|
||||
last_rect = t_rect;
|
||||
|
||||
last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / ui_inst->getScaleFactor().mV[0]);
|
||||
last_rect.mRight = LLRect::tCoordType(last_rect.mRight / ui_inst->getScaleFactor().mV[0]);
|
||||
last_rect.mTop = LLRect::tCoordType(last_rect.mTop / ui_inst->getScaleFactor().mV[1]);
|
||||
last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / ui_inst->getScaleFactor().mV[1]);
|
||||
|
||||
last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / LLUI::getScaleFactor().mV[0]);
|
||||
last_rect.mRight = LLRect::tCoordType(last_rect.mRight / LLUI::getScaleFactor().mV[0]);
|
||||
last_rect.mTop = LLRect::tCoordType(last_rect.mTop / LLUI::getScaleFactor().mV[1]);
|
||||
last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / LLUI::getScaleFactor().mV[1]);
|
||||
|
||||
LLRect clip_rect(last_rect);
|
||||
|
||||
|
|
@ -1709,7 +1708,7 @@ void render_ui_2d()
|
|||
gPipeline.mUIScreen.flush();
|
||||
gGL.setColorMask(true, false);
|
||||
|
||||
ui_inst->mDirtyRect = t_rect;
|
||||
LLView::sDirtyRect = t_rect;
|
||||
}
|
||||
|
||||
LLGLDisable cull(GL_CULL_FACE);
|
||||
|
|
|
|||
|
|
@ -5176,30 +5176,36 @@ void near_sit_down_point(BOOL success, void *)
|
|||
|
||||
class LLLandSit : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
// [RLVa:KB] - Checked: 2010-09-28 (RLVa-1.2.1f) | Modified: RLVa-1.2.1f
|
||||
if ( (rlv_handler_t::isEnabled()) && ((!RlvActions::canStand()) || (gRlvHandler.hasBehaviour(RLV_BHVR_SIT))) )
|
||||
return true;
|
||||
if ( (rlv_handler_t::isEnabled()) && ((!RlvActions::canStand()) || (gRlvHandler.hasBehaviour(RLV_BHVR_SIT))) )
|
||||
return true;
|
||||
// [/RLVa:KB]
|
||||
|
||||
gAgent.standUp();
|
||||
LLViewerParcelMgr::getInstance()->deselectLand();
|
||||
LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal;
|
||||
|
||||
LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal;
|
||||
|
||||
LLQuaternion target_rot;
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
target_rot = gAgentAvatarp->getRotation();
|
||||
}
|
||||
else
|
||||
{
|
||||
target_rot = gAgent.getFrameAgent().getQuaternion();
|
||||
}
|
||||
gAgent.startAutoPilotGlobal(posGlobal, "Sit", &target_rot, near_sit_down_point, NULL, 0.7f);
|
||||
return true;
|
||||
}
|
||||
LLQuaternion target_rot;
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
target_rot = gAgentAvatarp->getRotation();
|
||||
}
|
||||
else
|
||||
{
|
||||
target_rot = gAgent.getFrameAgent().getQuaternion();
|
||||
}
|
||||
gAgent.startAutoPilotGlobal(posGlobal, "Sit", &target_rot, near_sit_down_point, NULL, 0.7f);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class LLLandCanSit : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal;
|
||||
return !posGlobal.isExactlyZero(); // valid position, not beyond draw distance
|
||||
}
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
|
|
@ -11836,6 +11842,7 @@ void initialize_menus()
|
|||
// Land pie menu
|
||||
view_listener_t::addMenu(new LLLandBuild(), "Land.Build");
|
||||
view_listener_t::addMenu(new LLLandSit(), "Land.Sit");
|
||||
view_listener_t::addMenu(new LLLandCanSit(), "Land.CanSit");
|
||||
view_listener_t::addMenu(new LLLandBuyPass(), "Land.BuyPass");
|
||||
view_listener_t::addMenu(new LLLandEdit(), "Land.Edit");
|
||||
|
||||
|
|
|
|||
|
|
@ -2875,7 +2875,7 @@ void LLViewerWindow::draw()
|
|||
static LLCachedControl<bool> renderUIBuffer(gSavedSettings, "RenderUIBuffer");
|
||||
if (!renderUIBuffer)
|
||||
{
|
||||
LLUI::getInstance()->mDirtyRect = getWindowRectScaled();
|
||||
LLView::sDirtyRect = getWindowRectScaled();
|
||||
}
|
||||
|
||||
// HACK for timecode debugging
|
||||
|
|
|
|||
|
|
@ -11419,7 +11419,8 @@ void LLVOAvatar::accountRenderComplexityForObject(
|
|||
LL_DEBUGS("ARCdetail") << "Attachment costs " << attached_object->getAttachmentItemID()
|
||||
<< " total: " << attachment_total_cost
|
||||
<< ", volume: " << attachment_volume_cost
|
||||
<< ", textures: " << attachment_texture_cost
|
||||
<< ", " << textures.size()
|
||||
<< " textures: " << attachment_texture_cost
|
||||
<< ", " << volume->numChildren()
|
||||
<< " children: " << attachment_children_cost
|
||||
<< LL_ENDL;
|
||||
|
|
@ -11543,10 +11544,23 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
|
|||
ETextureIndex tex_index = baked_dict->mTextureIndex;
|
||||
if ((tex_index != TEX_SKIRT_BAKED) || (isWearingWearableType(LLWearableType::WT_SKIRT)))
|
||||
{
|
||||
if (isTextureVisible(tex_index))
|
||||
{
|
||||
cost +=COMPLEXITY_BODY_PART_COST;
|
||||
}
|
||||
// Same as isTextureVisible(), but doesn't account for isSelf to ensure identical numbers for all avatars
|
||||
if (isIndexLocalTexture(tex_index))
|
||||
{
|
||||
if (isTextureDefined(tex_index, 0))
|
||||
{
|
||||
cost += COMPLEXITY_BODY_PART_COST;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// baked textures can use TE images directly
|
||||
if (isTextureDefined(tex_index)
|
||||
&& (getTEImage(tex_index)->getID() != IMG_INVISIBLE || LLDrawPoolAlpha::sShowDebugAlpha))
|
||||
{
|
||||
cost += COMPLEXITY_BODY_PART_COST;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
LL_DEBUGS("ARCdetail") << "Avatar body parts complexity: " << cost << LL_ENDL;
|
||||
|
|
@ -11602,9 +11616,8 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
|
|||
|
||||
// Diagnostic output to identify all avatar-related textures.
|
||||
// Does not affect rendering cost calculation.
|
||||
// Could be wrapped in a debug option if output becomes problematic.
|
||||
// <FS:Ansariel> Disable useless diagnostics
|
||||
//if (isSelf())
|
||||
//if (isSelf() && debugLoggingEnabled("ARCdetail"))
|
||||
//{
|
||||
// // print any attachment textures we didn't already know about.
|
||||
// for (LLVOVolume::texture_cost_t::iterator it = textures.begin(); it != textures.end(); ++it)
|
||||
|
|
|
|||
|
|
@ -44,6 +44,9 @@ F32 LLVOCacheEntry::sFrontPixelThreshold = 1.0f;
|
|||
F32 LLVOCacheEntry::sRearPixelThreshold = 1.0f;
|
||||
BOOL LLVOCachePartition::sNeedsOcclusionCheck = FALSE;
|
||||
|
||||
const S32 ENTRY_HEADER_SIZE = 6 * sizeof(S32);
|
||||
const S32 MAX_ENTRY_BODY_SIZE = 10000;
|
||||
|
||||
BOOL check_read(LLAPRFile* apr_file, void* src, S32 n_bytes)
|
||||
{
|
||||
return apr_file->read(src, n_bytes) == n_bytes ;
|
||||
|
|
@ -111,32 +114,22 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file)
|
|||
{
|
||||
S32 size = -1;
|
||||
BOOL success;
|
||||
static U8 data_buffer[ENTRY_HEADER_SIZE];
|
||||
|
||||
mDP.assignBuffer(mBuffer, 0);
|
||||
|
||||
success = check_read(apr_file, &mLocalID, sizeof(U32));
|
||||
if(success)
|
||||
{
|
||||
success = check_read(apr_file, &mCRC, sizeof(U32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
success = check_read(apr_file, &mHitCount, sizeof(S32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
success = check_read(apr_file, &mDupeCount, sizeof(S32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
success = check_read(apr_file, &mCRCChangeCount, sizeof(S32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
success = check_read(apr_file, &size, sizeof(S32));
|
||||
|
||||
success = check_read(apr_file, (void *)data_buffer, ENTRY_HEADER_SIZE);
|
||||
if (success)
|
||||
{
|
||||
memcpy(&mLocalID, data_buffer, sizeof(U32));
|
||||
memcpy(&mCRC, data_buffer + sizeof(U32), sizeof(U32));
|
||||
memcpy(&mHitCount, data_buffer + (2 * sizeof(U32)), sizeof(S32));
|
||||
memcpy(&mDupeCount, data_buffer + (3 * sizeof(U32)), sizeof(S32));
|
||||
memcpy(&mCRCChangeCount, data_buffer + (4 * sizeof(U32)), sizeof(S32));
|
||||
memcpy(&size, data_buffer + (5 * sizeof(U32)), sizeof(S32));
|
||||
|
||||
// Corruption in the cache entries
|
||||
if ((size > 10000) || (size < 1))
|
||||
if ((size > MAX_ENTRY_BODY_SIZE) || (size < 1))
|
||||
{
|
||||
// We've got a bogus size, skip reading it.
|
||||
// We won't bother seeking, because the rest of this file
|
||||
|
|
@ -345,38 +338,25 @@ void LLVOCacheEntry::dump() const
|
|||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const
|
||||
S32 LLVOCacheEntry::writeToBuffer(U8 *data_buffer) const
|
||||
{
|
||||
BOOL success;
|
||||
success = check_write(apr_file, (void*)&mLocalID, sizeof(U32));
|
||||
if(success)
|
||||
{
|
||||
success = check_write(apr_file, (void*)&mCRC, sizeof(U32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
success = check_write(apr_file, (void*)&mHitCount, sizeof(S32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
success = check_write(apr_file, (void*)&mDupeCount, sizeof(S32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
success = check_write(apr_file, (void*)&mCRCChangeCount, sizeof(S32));
|
||||
}
|
||||
if(success)
|
||||
{
|
||||
S32 size = mDP.getBufferSize();
|
||||
success = check_write(apr_file, (void*)&size, sizeof(S32));
|
||||
|
||||
if(success)
|
||||
{
|
||||
success = check_write(apr_file, (void*)mBuffer, size);
|
||||
}
|
||||
}
|
||||
S32 size = mDP.getBufferSize();
|
||||
|
||||
return success ;
|
||||
if (size > MAX_ENTRY_BODY_SIZE)
|
||||
{
|
||||
LL_WARNS() << "Failed to write entry with size above allowed limit: " << size << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy(data_buffer, &mLocalID, sizeof(U32));
|
||||
memcpy(data_buffer + sizeof(U32), &mCRC, sizeof(U32));
|
||||
memcpy(data_buffer + (2 * sizeof(U32)), &mHitCount, sizeof(S32));
|
||||
memcpy(data_buffer + (3 * sizeof(U32)), &mDupeCount, sizeof(S32));
|
||||
memcpy(data_buffer + (4 * sizeof(U32)), &mCRCChangeCount, sizeof(S32));
|
||||
memcpy(data_buffer + (5 * sizeof(U32)), &size, sizeof(S32));
|
||||
memcpy(data_buffer + ENTRY_HEADER_SIZE, (void*)mBuffer, size);
|
||||
|
||||
return ENTRY_HEADER_SIZE + size;
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
@ -1414,11 +1394,11 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
|
|||
bool success = true ;
|
||||
{
|
||||
std::string filename;
|
||||
LLUUID cache_id;
|
||||
getObjectCacheFilename(handle, filename);
|
||||
LLAPRFile apr_file(filename, APR_READ|APR_BINARY, mLocalAPRFilePoolp);
|
||||
|
||||
LLUUID cache_id ;
|
||||
success = check_read(&apr_file, cache_id.mData, UUID_BYTES) ;
|
||||
success = check_read(&apr_file, cache_id.mData, UUID_BYTES);
|
||||
|
||||
if(success)
|
||||
{
|
||||
|
|
@ -1430,7 +1410,7 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
|
|||
|
||||
if(success)
|
||||
{
|
||||
S32 num_entries;
|
||||
S32 num_entries; // if removal was enabled during write num_entries might be wrong
|
||||
success = check_read(&apr_file, &num_entries, sizeof(S32)) ;
|
||||
|
||||
if(success)
|
||||
|
|
@ -1537,29 +1517,57 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry:
|
|||
{
|
||||
std::string filename;
|
||||
getObjectCacheFilename(handle, filename);
|
||||
// <FS> Fix bogus cache entry size warning
|
||||
//LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp);
|
||||
LLAPRFile apr_file(filename, APR_FOPEN_CREATE|APR_FOPEN_WRITE|APR_FOPEN_BINARY|APR_FOPEN_TRUNCATE, mLocalAPRFilePoolp);
|
||||
|
||||
success = check_write(&apr_file, (void*)id.mData, UUID_BYTES) ;
|
||||
|
||||
LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY|APR_TRUNCATE, mLocalAPRFilePoolp);
|
||||
|
||||
success = check_write(&apr_file, (void*)id.mData, UUID_BYTES);
|
||||
|
||||
if(success)
|
||||
{
|
||||
S32 num_entries = cache_entry_map.size() ;
|
||||
S32 num_entries = cache_entry_map.size(); // if removal is enabled num_entries might be wrong
|
||||
success = check_write(&apr_file, &num_entries, sizeof(S32));
|
||||
|
||||
for (LLVOCacheEntry::vocache_entry_map_t::const_iterator iter = cache_entry_map.begin(); success && iter != cache_entry_map.end(); ++iter)
|
||||
{
|
||||
if(!removal_enabled || iter->second->isValid())
|
||||
{
|
||||
success = iter->second->writeToFile(&apr_file) ;
|
||||
if(!success)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (success)
|
||||
{
|
||||
const S32 buffer_size = 32768; //should be large enough for couple MAX_ENTRY_BODY_SIZE
|
||||
U8 data_buffer[buffer_size]; // generaly entries are fairly small, so collect them and drop onto disk in one go
|
||||
S32 size_in_buffer = 0;
|
||||
|
||||
// This can have a lot of entries, so might be better to dump them into buffer first and write in one go.
|
||||
for (LLVOCacheEntry::vocache_entry_map_t::const_iterator iter = cache_entry_map.begin(); success && iter != cache_entry_map.end(); ++iter)
|
||||
{
|
||||
if (!removal_enabled || iter->second->isValid())
|
||||
{
|
||||
S32 size = iter->second->writeToBuffer(data_buffer + size_in_buffer);
|
||||
|
||||
if (size > ENTRY_HEADER_SIZE) // body is minimum of 1
|
||||
{
|
||||
size_in_buffer += size;
|
||||
}
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// Make sure we have space in buffer for next element
|
||||
if (buffer_size - size_in_buffer < MAX_ENTRY_BODY_SIZE + ENTRY_HEADER_SIZE)
|
||||
{
|
||||
success = check_write(&apr_file, (void*)data_buffer, size_in_buffer);
|
||||
size_in_buffer = 0;
|
||||
if (!success)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (success && size_in_buffer > 0)
|
||||
{
|
||||
// final write
|
||||
success = check_write(&apr_file, (void*)data_buffer, size_in_buffer);
|
||||
size_in_buffer = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public:
|
|||
F32 getSceneContribution() const { return mSceneContrib;}
|
||||
|
||||
void dump() const;
|
||||
BOOL writeToFile(LLAPRFile* apr_file) const;
|
||||
S32 writeToBuffer(U8 *data_buffer) const;
|
||||
LLDataPackerBinaryBuffer *getDP();
|
||||
void recordHit();
|
||||
void recordDupe() { mDupeCount++; }
|
||||
|
|
|
|||
|
|
@ -4164,7 +4164,25 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
|
|||
{
|
||||
if (textures.find(img->getID()) == textures.end())
|
||||
{
|
||||
S32 texture_cost = 256 + (S32)(ARC_TEXTURE_COST * (img->getFullHeight() / 128.f + img->getFullWidth() / 128.f));
|
||||
S32 texture_cost = 0;
|
||||
S8 type = img->getType();
|
||||
if (type == LLViewerTexture::FETCHED_TEXTURE || type == LLViewerTexture::LOD_TEXTURE)
|
||||
{
|
||||
const LLViewerFetchedTexture* fetched_texturep = static_cast<const LLViewerFetchedTexture*>(img);
|
||||
if (fetched_texturep
|
||||
&& fetched_texturep->getFTType() == FTT_LOCAL_FILE
|
||||
&& (img->getID() == IMG_ALPHA_GRAD_2D || img->getID() == IMG_ALPHA_GRAD)
|
||||
)
|
||||
{
|
||||
// These two textures appear to switch between each other, but are of different sizes (4x256 and 256x256).
|
||||
// Hardcode cost from larger one to not cause random complexity changes
|
||||
texture_cost = 320;
|
||||
}
|
||||
}
|
||||
if (texture_cost == 0)
|
||||
{
|
||||
texture_cost = 256 + (S32)(ARC_TEXTURE_COST * (img->getFullHeight() / 128.f + img->getFullWidth() / 128.f));
|
||||
}
|
||||
textures.insert(texture_cost_t::value_type(img->getID(), texture_cost));
|
||||
}
|
||||
}
|
||||
|
|
@ -5682,8 +5700,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
|
||||
U32 useage = group->getSpatialPartition()->mBufferUsage;
|
||||
|
||||
LLCachedControl<S32> max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512);
|
||||
LLCachedControl<S32> max_node_size(gSavedSettings, "RenderMaxNodeSize", 65536);
|
||||
static LLCachedControl<S32> max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512);
|
||||
static LLCachedControl<S32> max_node_size(gSavedSettings, "RenderMaxNodeSize", 65536);
|
||||
U32 max_vertices = (max_vbo_size * 1024)/LLVertexBuffer::calcVertexSize(group->getSpatialPartition()->mVertexDataMask);
|
||||
U32 max_total = (max_node_size * 1024) / LLVertexBuffer::calcVertexSize(group->getSpatialPartition()->mVertexDataMask);
|
||||
max_vertices = llmin(max_vertices, (U32) 65535);
|
||||
|
|
@ -6498,7 +6516,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
|
|||
#endif
|
||||
|
||||
|
||||
LLCachedControl<S32> max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512);
|
||||
static LLCachedControl<S32> max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512);
|
||||
U32 max_vertices = (max_vbo_size * 1024)/LLVertexBuffer::calcVertexSize(group->getSpatialPartition()->mVertexDataMask);
|
||||
max_vertices = llmin(max_vertices, (U32) 65535);
|
||||
|
||||
|
|
|
|||
|
|
@ -623,23 +623,6 @@
|
|||
top_delta="16"
|
||||
width="300" />
|
||||
|
||||
<!-- SL-12594, basic shaders always enabled, no fixed-function GL
|
||||
<check_box
|
||||
control_name="VertexShaderEnable"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Basic shaders"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
name="BasicShaders"
|
||||
tool_tip="Disabling this option may prevent some graphics card drivers from crashing"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<check_box.commit_callback
|
||||
function="Pref.VertexShaderEnable" />
|
||||
</check_box>
|
||||
-->
|
||||
|
||||
<slider
|
||||
control_name="RenderTerrainDetail"
|
||||
follows="left|top"
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
layout="topleft"
|
||||
left="152"
|
||||
name="loading_label"
|
||||
visible="true">
|
||||
visible="false">
|
||||
Loading...
|
||||
</text>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<menu_item_call
|
||||
label="Sit Here"
|
||||
name="Sit Here">
|
||||
<menu_item_call.on_enable
|
||||
function="Land.CanSit" />
|
||||
<menu_item_call.on_click
|
||||
function="Land.Sit" />
|
||||
</menu_item_call>
|
||||
|
|
|
|||
Loading…
Reference in New Issue