merge DRTVWR-398 build cleanup fixes
commit
5822fb00b6
|
|
@ -0,0 +1,11 @@
|
|||
Second Life Viewer
|
||||
====================
|
||||
|
||||
This project manages the source code for the
|
||||
[Second Life](https://www.secondlife.com) Viewer.
|
||||
|
||||
This source is available as open source; for details on licensing, see
|
||||
[the licensing page on the Second Life wiki](https://wiki.secondlife.com/wiki/Linden_Lab_Official:Second_Life_Viewer_Licensing_Program)
|
||||
|
||||
For information on how to use and contribute to this, see
|
||||
[the open source portal on the wiki](https://wiki.secondlife.com/wiki/Open_Source_Portal).
|
||||
|
|
@ -185,8 +185,11 @@ Ansariel Hiller
|
|||
BUG-3764
|
||||
STORM-1984
|
||||
STORM-1979
|
||||
STORM-2083
|
||||
MAINT-5533
|
||||
STORM-2094
|
||||
MAINT-5756
|
||||
MAINT-4677
|
||||
Aralara Rajal
|
||||
Arare Chantilly
|
||||
CHUIBUG-191
|
||||
|
|
@ -332,6 +335,7 @@ Cinder Roxley
|
|||
STORM-2037
|
||||
STORM-2053
|
||||
STORM-2113
|
||||
STORM-2098
|
||||
Clara Young
|
||||
Coaldust Numbers
|
||||
VWR-1095
|
||||
|
|
@ -726,6 +730,12 @@ Jonathan Yap
|
|||
STORM-2030
|
||||
STORM-2034
|
||||
STORM-2018
|
||||
STORM-2082
|
||||
STORM-2086
|
||||
STORM-2085
|
||||
STORM-2088
|
||||
STORM-2094
|
||||
STORM-2099
|
||||
Kadah Coba
|
||||
STORM-1060
|
||||
STORM-1843
|
||||
|
|
@ -1000,6 +1010,7 @@ Nicky Dasmijn
|
|||
STORM-1937
|
||||
OPEN-187
|
||||
STORM-2010
|
||||
STORM-2082
|
||||
Nicky Perian
|
||||
OPEN-1
|
||||
STORM-1087
|
||||
|
|
@ -1241,6 +1252,7 @@ Sovereign Engineer
|
|||
OPEN-195
|
||||
OPEN-217
|
||||
OPEN-295
|
||||
STORM-2107
|
||||
SpacedOut Frye
|
||||
VWR-34
|
||||
VWR-45
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ int main(int argc, char **argv)
|
|||
|
||||
if (!(options.has("pid") && options.has("dumpdir")))
|
||||
{
|
||||
llwarns << "Insufficient parameters to crash report." << llendl;
|
||||
LL_WARNS() << "Insufficient parameters to crash report." << LL_ENDL;
|
||||
}
|
||||
|
||||
if (! app.init())
|
||||
|
|
|
|||
|
|
@ -67,3 +67,5 @@ const LLUUID TERRAIN_MOUNTAIN_DETAIL ("303cd381-8560-7579-23f1-f0a880799740"); /
|
|||
const LLUUID TERRAIN_ROCK_DETAIL ("53a2f406-4895-1d13-d541-d2e3b86bc19c"); // VIEWER
|
||||
|
||||
const LLUUID DEFAULT_WATER_NORMAL ("822ded49-9a6c-f61c-cb89-6df54f42cdf4"); // VIEWER
|
||||
|
||||
const LLUUID IMG_BLACK_SQUARE_MALEVICH ("3b39cc01-c2d1-e194-1181-e4404978b20c"); // On dataserver
|
||||
|
|
|
|||
|
|
@ -205,6 +205,8 @@ LL_COMMON_API extern const LLUUID TERRAIN_ROCK_DETAIL;
|
|||
|
||||
LL_COMMON_API extern const LLUUID DEFAULT_WATER_NORMAL;
|
||||
|
||||
LL_COMMON_API extern const LLUUID IMG_BLACK_SQUARE_MALEVICH;
|
||||
|
||||
|
||||
// radius within which a chat message is fully audible
|
||||
const F32 CHAT_NORMAL_RADIUS = 20.f;
|
||||
|
|
|
|||
|
|
@ -362,13 +362,4 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
|
|||
#define LL_INFOS_ONCE(...) lllog(LLError::LEVEL_INFO, true, ##__VA_ARGS__)
|
||||
#define LL_WARNS_ONCE(...) lllog(LLError::LEVEL_WARN, true, ##__VA_ARGS__)
|
||||
|
||||
// DEPRECATED: Use the new macros that allow tags and *look* like macros.
|
||||
#define lldebugs LL_COMPILE_TIME_MESSAGE("Warning: lldebugs deprecated, use LL_DEBUGS() instead") LL_DEBUGS()
|
||||
#define llinfos LL_COMPILE_TIME_MESSAGE("Warning: llinfos deprecated, use LL_INFOS() instead") LL_INFOS()
|
||||
#define llwarns LL_COMPILE_TIME_MESSAGE("Warning: llwarns deprecated, use LL_WARNS() instead") LL_WARNS()
|
||||
#define llerrs LL_COMPILE_TIME_MESSAGE("Warning: llerrs deprecated, use LL_ERRS() instead") LL_ERRS()
|
||||
#define llcont LL_COMPILE_TIME_MESSAGE("Warning: llcont deprecated, use LL_CONT instead") LL_CONT
|
||||
#define llendl LL_COMPILE_TIME_MESSAGE("Warning: llendl deprecated, use LL_ENDL instead") LL_ENDL
|
||||
|
||||
|
||||
#endif // LL_LLERROR_H
|
||||
|
|
|
|||
|
|
@ -167,9 +167,9 @@ private:
|
|||
F32 _sin(const F32& a) const { return sin(DEG_TO_RAD * a); }
|
||||
F32 _cos(const F32& a) const { return cos(DEG_TO_RAD * a); }
|
||||
F32 _tan(const F32& a) const { return tan(DEG_TO_RAD * a); }
|
||||
F32 _asin(const F32& a) const { return asin(a * RAD_TO_DEG); }
|
||||
F32 _acos(const F32& a) const { return acos(a * RAD_TO_DEG); }
|
||||
F32 _atan(const F32& a) const { return atan(a * RAD_TO_DEG); }
|
||||
F32 _asin(const F32& a) const { return asin(a) * RAD_TO_DEG; }
|
||||
F32 _acos(const F32& a) const { return acos(a) * RAD_TO_DEG; }
|
||||
F32 _atan(const F32& a) const { return atan(a) * RAD_TO_DEG; }
|
||||
F32 _sqrt(const F32& a) const { return sqrt(a); }
|
||||
F32 _log(const F32& a) const { return log(a); }
|
||||
F32 _exp(const F32& a) const { return exp(a); }
|
||||
|
|
|
|||
|
|
@ -2202,7 +2202,7 @@ BOOL LLVolume::generate()
|
|||
{
|
||||
rot_mat.rotate(*profile++, tmp);
|
||||
dst->setAdd(tmp,offset);
|
||||
llassert(dst->isFinite3());
|
||||
llassert(dst->isFinite3()); // MAINT-5660; don't know why this happens, does not affect Release builds
|
||||
++dst;
|
||||
}
|
||||
}
|
||||
|
|
@ -5663,7 +5663,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
|
|||
tc->mV[0] = (*p)[0]+0.5f;
|
||||
tc->mV[1] = (*p)[1]+0.5f;
|
||||
|
||||
llassert(src->isFinite3());
|
||||
llassert(src->isFinite3()); // MAINT-5660; don't know why this happens, does not affect Release builds
|
||||
update_min_max(min,max,*src);
|
||||
update_min_max(min_uv, max_uv, *tc);
|
||||
|
||||
|
|
|
|||
|
|
@ -355,7 +355,7 @@ void LLAvatarNameCache::requestNamesViaCapability()
|
|||
|
||||
if (!url.empty())
|
||||
{
|
||||
LL_INFOS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability getting " << ids << " ids" << LL_ENDL;
|
||||
LL_DEBUGS("AvNameCache") << " getting " << ids << " ids" << LL_ENDL;
|
||||
LLHTTPClient::get(url, new LLAvatarNameResponder(agent_ids));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1360,7 +1360,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
|
|||
|
||||
|
||||
mPacketsOut++;
|
||||
mBytesOut += buffer_length;
|
||||
mTotalBytesOut += buffer_length;
|
||||
|
||||
mSendReliable = FALSE;
|
||||
mReliablePacketParams.clear();
|
||||
|
|
|
|||
|
|
@ -680,7 +680,7 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW
|
|||
S32 seg_start = cur - base;
|
||||
S32 seg_end = seg_start + seg_len;
|
||||
|
||||
// llinfos << "Seg: [" << word.c_str() << "]" << llendl;
|
||||
// LL_INFOS("SyntaxLSL") << "Seg: [" << word.c_str() << "]" << LL_ENDL;
|
||||
|
||||
insertSegments(wtext, *seg_list,cur_token, text_len, seg_start, seg_end, defaultColor, editor);
|
||||
}
|
||||
|
|
@ -747,10 +747,10 @@ void LLKeywords::insertSegment(std::vector<LLTextSegmentPtr>& seg_list, LLTextSe
|
|||
#ifdef _DEBUG
|
||||
void LLKeywords::dump()
|
||||
{
|
||||
llinfos << "LLKeywords" << llendl;
|
||||
LL_INFOS() << "LLKeywords" << LL_ENDL;
|
||||
|
||||
|
||||
llinfos << "LLKeywords::sWordTokenMap" << llendl;
|
||||
LL_INFOS() << "LLKeywords::sWordTokenMap" << LL_ENDL;
|
||||
word_token_map_t::iterator word_token_iter = mWordTokenMap.begin();
|
||||
while( word_token_iter != mWordTokenMap.end() )
|
||||
{
|
||||
|
|
@ -759,7 +759,7 @@ void LLKeywords::dump()
|
|||
++word_token_iter;
|
||||
}
|
||||
|
||||
llinfos << "LLKeywords::sLineTokenList" << llendl;
|
||||
LL_INFOS() << "LLKeywords::sLineTokenList" << LL_ENDL;
|
||||
for (token_list_t::iterator iter = mLineTokenList.begin();
|
||||
iter != mLineTokenList.end(); ++iter)
|
||||
{
|
||||
|
|
@ -768,7 +768,7 @@ void LLKeywords::dump()
|
|||
}
|
||||
|
||||
|
||||
llinfos << "LLKeywords::sDelimiterTokenList" << llendl;
|
||||
LL_INFOS() << "LLKeywords::sDelimiterTokenList" << LL_ENDL;
|
||||
for (token_list_t::iterator iter = mDelimiterTokenList.begin();
|
||||
iter != mDelimiterTokenList.end(); ++iter)
|
||||
{
|
||||
|
|
@ -779,12 +779,12 @@ void LLKeywords::dump()
|
|||
|
||||
void LLKeywordToken::dump()
|
||||
{
|
||||
llinfos << "[" <<
|
||||
LL_INFOS() << "[" <<
|
||||
mColor.mV[VX] << ", " <<
|
||||
mColor.mV[VY] << ", " <<
|
||||
mColor.mV[VZ] << "] [" <<
|
||||
wstring_to_utf8str(mToken) << "]" <<
|
||||
llendl;
|
||||
LL_ENDL;
|
||||
}
|
||||
|
||||
#endif // DEBUG
|
||||
|
|
|
|||
|
|
@ -1317,6 +1317,7 @@ void LLTextBase::replaceWithSuggestion(U32 index)
|
|||
|
||||
|
||||
setCursorPos(it->first + (S32)suggestion.length());
|
||||
onSpellCheckPerformed();
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -368,6 +368,7 @@ public:
|
|||
std::string getMisspelledWord(U32 pos) const;
|
||||
bool isMisspelledWord(U32 pos) const;
|
||||
void onSpellCheckSettingsChange();
|
||||
virtual void onSpellCheckPerformed(){}
|
||||
|
||||
// used by LLTextSegment layout code
|
||||
bool getWordWrap() { return mWordWrap; }
|
||||
|
|
|
|||
|
|
@ -2380,6 +2380,14 @@ void LLTextEditor::removeTextFromEnd(S32 num_chars)
|
|||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
void LLTextEditor::onSpellCheckPerformed()
|
||||
{
|
||||
if (isPristine())
|
||||
{
|
||||
mBaseDocIsPristine = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void LLTextEditor::makePristine()
|
||||
{
|
||||
mPristineCmd = mLastCmd;
|
||||
|
|
|
|||
|
|
@ -160,6 +160,8 @@ public:
|
|||
autoreplace_callback_t mAutoreplaceCallback;
|
||||
void setAutoreplaceCallback(autoreplace_callback_t cb) { mAutoreplaceCallback = cb; }
|
||||
|
||||
/*virtual*/ void onSpellCheckPerformed();
|
||||
|
||||
//
|
||||
// Text manipulation
|
||||
//
|
||||
|
|
|
|||
|
|
@ -227,6 +227,6 @@ void LLUrlAction::blockObject(std::string url)
|
|||
std::string object_name = getObjectName(url);
|
||||
if (LLUUID::validate(object_id))
|
||||
{
|
||||
executeSLURL("secondlife:///app/agent/" + object_id + "/block/" + object_name);
|
||||
executeSLURL("secondlife:///app/agent/" + object_id + "/block/" + LLURI::escape(object_name));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ int main(int argc, char **argv)
|
|||
|
||||
if (!(options.has("pid") && options.has("dumpdir")))
|
||||
{
|
||||
llwarns << "Insufficient parameters to crash report." << llendl;
|
||||
LL_WARNS() << "Insufficient parameters to crash report." << LL_ENDL;
|
||||
}
|
||||
|
||||
if (! app.init())
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ set(viewer_SOURCE_FILES
|
|||
llavatarlist.cpp
|
||||
llavatarlistitem.cpp
|
||||
llavatarrenderinfoaccountant.cpp
|
||||
llavatarrendernotifier.cpp
|
||||
llavatarpropertiesprocessor.cpp
|
||||
llblockedlistitem.cpp
|
||||
llblocklist.cpp
|
||||
|
|
@ -225,6 +226,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterconversationlog.cpp
|
||||
llfloaterconversationpreview.cpp
|
||||
llfloaterdeleteenvpreset.cpp
|
||||
llfloaterdeleteprefpreset.cpp
|
||||
llfloaterdestinations.cpp
|
||||
llfloaterdisplayname.cpp
|
||||
llfloatereditdaycycle.cpp
|
||||
|
|
@ -245,7 +247,6 @@ set(viewer_SOURCE_FILES
|
|||
llfloatergroupinvite.cpp
|
||||
llfloatergroups.cpp
|
||||
llfloaterhandler.cpp
|
||||
llfloaterhardwaresettings.cpp
|
||||
llfloaterhelpbrowser.cpp
|
||||
llfloaterhoverheight.cpp
|
||||
llfloaterhud.cpp
|
||||
|
|
@ -259,6 +260,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterlagmeter.cpp
|
||||
llfloaterland.cpp
|
||||
llfloaterlandholdings.cpp
|
||||
llfloaterloadprefpreset.cpp
|
||||
llfloatermarketplacelistings.cpp
|
||||
llfloatermap.cpp
|
||||
llfloatermediasettings.cpp
|
||||
|
|
@ -284,6 +286,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterregioninfo.cpp
|
||||
llfloaterreporter.cpp
|
||||
llfloaterregionrestarting.cpp
|
||||
llfloatersaveprefpreset.cpp
|
||||
llfloatersceneloadstats.cpp
|
||||
llfloaterscriptdebug.cpp
|
||||
llfloaterscriptedprefs.cpp
|
||||
|
|
@ -464,6 +467,7 @@ set(viewer_SOURCE_FILES
|
|||
llpanelplaceprofile.cpp
|
||||
llpanelplaces.cpp
|
||||
llpanelplacestab.cpp
|
||||
llpanelpresetspulldown.cpp
|
||||
llpanelprimmediacontrols.cpp
|
||||
llpanelprofile.cpp
|
||||
llpanelsnapshot.cpp
|
||||
|
|
@ -503,6 +507,7 @@ set(viewer_SOURCE_FILES
|
|||
llplacesfolderview.cpp
|
||||
llpopupview.cpp
|
||||
llpostcard.cpp
|
||||
llpresetsmanager.cpp
|
||||
llpreview.cpp
|
||||
llpreviewanim.cpp
|
||||
llpreviewgesture.cpp
|
||||
|
|
@ -746,6 +751,7 @@ set(viewer_HEADER_FILES
|
|||
llavatarlistitem.h
|
||||
llavatarpropertiesprocessor.h
|
||||
llavatarrenderinfoaccountant.h
|
||||
llavatarrendernotifier.h
|
||||
llblockedlistitem.h
|
||||
llblocklist.h
|
||||
llbox.h
|
||||
|
|
@ -843,6 +849,7 @@ set(viewer_HEADER_FILES
|
|||
llfloatercolorpicker.h
|
||||
llfloaterconversationlog.h
|
||||
llfloaterconversationpreview.h
|
||||
llfloaterdeleteprefpreset.h
|
||||
llfloaterdeleteenvpreset.h
|
||||
llfloaterdestinations.h
|
||||
llfloaterdisplayname.h
|
||||
|
|
@ -864,7 +871,6 @@ set(viewer_HEADER_FILES
|
|||
llfloatergroupinvite.h
|
||||
llfloatergroups.h
|
||||
llfloaterhandler.h
|
||||
llfloaterhardwaresettings.h
|
||||
llfloaterhelpbrowser.h
|
||||
llfloaterhoverheight.h
|
||||
llfloaterhud.h
|
||||
|
|
@ -881,6 +887,7 @@ set(viewer_HEADER_FILES
|
|||
llfloaterlagmeter.h
|
||||
llfloaterland.h
|
||||
llfloaterlandholdings.h
|
||||
llfloaterloadprefpreset.h
|
||||
llfloatermap.h
|
||||
llfloatermarketplacelistings.h
|
||||
llfloatermediasettings.h
|
||||
|
|
@ -906,6 +913,7 @@ set(viewer_HEADER_FILES
|
|||
llfloaterregioninfo.h
|
||||
llfloaterreporter.h
|
||||
llfloaterregionrestarting.h
|
||||
llfloatersaveprefpreset.h
|
||||
llfloatersceneloadstats.h
|
||||
llfloaterscriptdebug.h
|
||||
llfloaterscriptedprefs.h
|
||||
|
|
@ -1077,6 +1085,7 @@ set(viewer_HEADER_FILES
|
|||
llpanelplaceprofile.h
|
||||
llpanelplaces.h
|
||||
llpanelplacestab.h
|
||||
llpanelpresetspulldown.h
|
||||
llpanelprimmediacontrols.h
|
||||
llpanelprofile.h
|
||||
llpanelsnapshot.h
|
||||
|
|
@ -1111,6 +1120,7 @@ set(viewer_HEADER_FILES
|
|||
llplacesfolderview.h
|
||||
llpopupview.h
|
||||
llpostcard.h
|
||||
llpresetsmanager.h
|
||||
llpreview.h
|
||||
llpreviewanim.h
|
||||
llpreviewgesture.h
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@
|
|||
<RenderTerrainLODFactor value="2"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Avater Impostors and Visual Muting Limits-->
|
||||
<RenderAvatarMaxNonImpostors value="20"/>
|
||||
<RenderAvatarMaxComplexity value="350000"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="1250.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
|
|
|
|||
|
|
@ -5,7 +5,23 @@
|
|||
<key>print-location</key> <boolean>false</boolean>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<!-- sample entry for changing settings on specific items -->
|
||||
<!-- Suppress anything but ERROR for some very verbose components -->
|
||||
<map>
|
||||
<key>level</key><string>ERROR</string>
|
||||
<key>functions</key>
|
||||
<array>
|
||||
</array>
|
||||
<key>classes</key>
|
||||
<array>
|
||||
</array>
|
||||
<key>files</key>
|
||||
<array>
|
||||
</array>
|
||||
<key>tags</key>
|
||||
<array>
|
||||
<string>ShaderLoading</string>
|
||||
</array>
|
||||
</map>
|
||||
<map>
|
||||
<key>level</key><string>INFO</string>
|
||||
<key>functions</key>
|
||||
|
|
@ -19,14 +35,6 @@
|
|||
</array>
|
||||
<key>tags</key>
|
||||
<array>
|
||||
<string>AppInit</string>
|
||||
<string>Capabilities</string>
|
||||
<string>SystemInfo</string>
|
||||
<string>TextureCache</string>
|
||||
<string>AppCache</string>
|
||||
<string>Window</string>
|
||||
<string>RenderInit</string>
|
||||
<string>MediaAuth</string>
|
||||
</array>
|
||||
</map>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@
|
|||
<RenderAvatarLODFactor value="0.5"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="0.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarMaxVisible value="3"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="FALSE"/>
|
||||
<!--Short Range-->
|
||||
|
|
@ -28,8 +26,10 @@
|
|||
<RenderTerrainLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Avater Impostors and Visual Muting Limits-->
|
||||
<RenderAvatarMaxNonImpostors value="12"/>
|
||||
<RenderAvatarMaxComplexity value="75000"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="750.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@
|
|||
<RenderTerrainLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Avater Impostors and Visual Muting Limits-->
|
||||
<RenderAvatarMaxNonImpostors value="18"/>
|
||||
<RenderAvatarMaxComplexity value="100000"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="1000.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
|
|
|
|||
|
|
@ -8306,21 +8306,10 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderAvatarComplexityLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Max visual complexity of avatars in a scene</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>-1</integer>
|
||||
</map>
|
||||
<key>RenderComplexityColorMin</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Max visual complexity of avatars in a scene</string>
|
||||
<string>Unused obsolete setting</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -8336,7 +8325,7 @@
|
|||
<key>RenderComplexityColorMid</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Max visual complexity of avatars in a scene</string>
|
||||
<string>Unused obsolete setting</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -8352,7 +8341,7 @@
|
|||
<key>RenderComplexityColorMax</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Max visual complexity of avatars in a scene</string>
|
||||
<string>Unused obsolete setting</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -8368,7 +8357,7 @@
|
|||
<key>RenderComplexityThreshold</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Only color objects higher than render threshold</string>
|
||||
<string>Unused obsolete setting</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -8379,8 +8368,7 @@
|
|||
<key>RenderComplexityStaticMax</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Sets a static max value for scaling of RenderComplexity
|
||||
display (-1 for dynamic scaling)</string>
|
||||
<string>Unused obsolete setting</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -8402,13 +8390,13 @@
|
|||
<key>RenderAvatarMaxVisible</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum number of avatars to display at any one time</string>
|
||||
<string>OBSOLETE and UNUSED. See RenderAvatarMaxNonImpostors</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>12</integer>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RenderAvatarPhysicsLODFactor</key>
|
||||
<map>
|
||||
|
|
@ -9841,13 +9829,13 @@
|
|||
<key>RenderTerrainDetail</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
|
||||
<string>Detail applied to terrain texturing (0 = none, 1 = full)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>2</integer>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderTerrainLODFactor</key>
|
||||
<map>
|
||||
|
|
@ -9959,44 +9947,79 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RenderUseFarClip</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If false, frustum culling will ignore far clip plane.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderUseImpostors</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Whether we want to use impostors for far away avatars.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
|
||||
<key>RenderUseFarClip</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If false, frustum culling will ignore far clip plane.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderUseImpostors</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>OBSOLETE and UNUSED. See RenderAvatarMaxNonImpostors and RenderAvatarMaxComplexity.</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RenderAutoMuteByteLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum bytes of attachments before an avatar is rendered as a simple impostor (0 for no limit).</string>
|
||||
<string>OBSOLETE and UNUSED.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RenderAvatarMaxNonImpostors</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum number of avatars to fully render at one time;
|
||||
over this limit uses impostor rendering (simplified rendering
|
||||
with less frequent updates), reducing client lag.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>12</integer>
|
||||
</map>
|
||||
<key>RenderAutoMuteRenderWeightLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum render weight before an avatar is rendered as a simple impostor (0 to not use this limit).</string>
|
||||
<string>OBSOLETE. This setting has been renamed RenderAvatarMaxNonImpostors.</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ShowMyComplexityChanges</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>How long to show notices about avatar complexity (set to zero to disable those notices)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>20</integer>
|
||||
</map>
|
||||
<key>RenderAvatarMaxComplexity</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum Avatar Complexity; above this value, the avatar is
|
||||
rendered as a solid color outline (0 to disable this limit).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -10007,24 +10030,15 @@
|
|||
<key>RenderAutoMuteSurfaceAreaLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum surface area of attachments before an avatar is rendered as a simple impostor (0 to not use this limit).</string>
|
||||
<string>Maximum surface area of attachments before an avatar is
|
||||
rendered as a simple impostor (to not use this limit, set to zero
|
||||
or set RenderAvatarMaxComplexity to zero).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RenderAutoMuteFunctions</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Developing feature to render some avatars using simple impostors or colored silhouettes. (Set to 7 for all functionality)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
<real>1000.0</real>
|
||||
</map>
|
||||
<key>RenderAutoMuteLogging</key>
|
||||
<map>
|
||||
|
|
@ -10046,7 +10060,7 @@
|
|||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
<real>10.0E6</real>
|
||||
</map>
|
||||
|
||||
<key>RenderVBOEnable</key>
|
||||
|
|
@ -10633,17 +10647,6 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ShowAdvancedGraphicsSettings</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show advanced graphics settings</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ShowAllObjectHoverTip</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -15699,6 +15702,41 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>PresetGraphicActive</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Name of currently selected preference</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string />
|
||||
</map>
|
||||
<key>IndirectMaxComplexity</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Controls RenderAvatarMaxComplexity in a non-linear fashion (do
|
||||
not set this value)</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>IndirectMaxNonImpostors</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Controls RenderAvatarMaxNonImpostors in a non-linear fashion (do
|
||||
not set this value)</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
||||
|
|
|
|||
|
|
@ -26,8 +26,11 @@
|
|||
<RenderTerrainLODFactor value="2.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="1.0"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Avater Impostors and Visual Muting Limits (real defaults set
|
||||
based on default graphics setting -->
|
||||
<RenderAvatarMaxNonImpostors value="0"/>
|
||||
<RenderAvatarMaxComplexity value="0"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="1500.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="2.0"/>
|
||||
<!--NO SHADERS-->
|
||||
|
|
|
|||
|
|
@ -10366,8 +10366,8 @@ render_pass="bump">
|
|||
edit_group="hair_style"
|
||||
edit_group_order="16"
|
||||
name="Hair Tilt"
|
||||
label_min="Left"
|
||||
label_max="Right"
|
||||
label_min="Hair Tilted Left"
|
||||
label_max="Hair Tilted Right"
|
||||
value_min="0"
|
||||
value_max="1"
|
||||
value_default=".5"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
version 33
|
||||
// The version number above should be implemented IF AND ONLY IF some
|
||||
// The version number above should be incremented IF AND ONLY IF some
|
||||
// change has been made that is sufficiently important to justify
|
||||
// resetting the graphics preferences of all users to the recommended
|
||||
// defaults. This should be as rare an event as we can manage.
|
||||
|
|
@ -31,8 +31,10 @@ RenderAnisotropic 1 1
|
|||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarPhysicsLODFactor 1 1.0
|
||||
RenderAvatarMaxVisible 1 12
|
||||
RenderAvatarMaxNonImpostors 1 16
|
||||
RenderAvatarMaxComplexity 1 80000
|
||||
RenderAvatarVP 1 1
|
||||
RenderAutoMuteSurfaceAreaLimit 1 1000.0
|
||||
RenderCubeMap 1 1
|
||||
RenderDelayVBUpdate 1 0
|
||||
RenderFarClip 1 256
|
||||
|
|
@ -49,7 +51,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVBOMappingDisable 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
|
|
@ -66,12 +67,10 @@ RenderShaderLightingMaxLevel 1 3
|
|||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderShadowDetail 1 2
|
||||
WatchdogDisabled 1 1
|
||||
RenderUseStreamVBO 1 1
|
||||
RenderFSAASamples 1 16
|
||||
RenderMaxTextureIndex 1 16
|
||||
|
||||
|
||||
//
|
||||
// Low Graphics Settings (fixed function)
|
||||
//
|
||||
|
|
@ -80,20 +79,20 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarMaxComplexity 1 35000
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
RenderGlowResolutionPow 1 8
|
||||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 0
|
||||
RenderObjectBump 1 0
|
||||
RenderLocalLights 1 0
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -103,7 +102,6 @@ RenderShadowDetail 1 0
|
|||
WLSkyDetail 1 48
|
||||
RenderFSAASamples 1 0
|
||||
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
//
|
||||
|
|
@ -112,20 +110,20 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarMaxComplexity 1 35000
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
RenderGlowResolutionPow 1 8
|
||||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 0
|
||||
RenderObjectBump 1 0
|
||||
RenderLocalLights 1 0
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -155,7 +153,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -185,7 +182,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -215,7 +211,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -245,7 +240,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -275,7 +269,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -293,19 +286,19 @@ list Ultra
|
|||
RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarPhysicsLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 256
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderLocalLights 1 1
|
||||
RenderMaxPartCount 1 8192
|
||||
RenderObjectBump 1 1
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 4
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -315,7 +308,6 @@ RenderDeferredSSAO 1 1
|
|||
RenderShadowDetail 1 2
|
||||
RenderFSAASamples 1 2
|
||||
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
//
|
||||
|
|
@ -407,18 +399,18 @@ list safe
|
|||
RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderAvatarVP 0 0
|
||||
RenderAvatarMaxNonImpostors 1 16
|
||||
RenderAvatarMaxComplexity 1 60000
|
||||
RenderObjectBump 0 0
|
||||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 1024
|
||||
RenderTerrainDetail 1 0
|
||||
RenderUseImpostors 0 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderReflectionDetail 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
RenderDeferred 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
RenderShadowDetail 0 0
|
||||
|
||||
|
||||
//
|
||||
// CPU based feature masks
|
||||
|
|
@ -462,37 +454,30 @@ UseOcclusion 0 0
|
|||
list Intel_830M
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_845G
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_855GM
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_865G
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_900
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_915GM
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_915G
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_945GM
|
||||
RenderTerrainDetail 1 0
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ RenderAnisotropic 1 1
|
|||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarPhysicsLODFactor 1 1.0
|
||||
RenderAvatarMaxVisible 1 12
|
||||
RenderAvatarMaxNonImpostors 1 12
|
||||
RenderAvatarVP 1 1
|
||||
RenderCubeMap 1 1
|
||||
RenderDelayVBUpdate 1 0
|
||||
|
|
@ -49,7 +49,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVBOMappingDisable 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
|
|
@ -77,7 +76,7 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
|
|
@ -90,7 +89,6 @@ RenderTerrainDetail 1 0
|
|||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 0.5
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -108,7 +106,7 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
|
|
@ -121,7 +119,6 @@ RenderTerrainDetail 1 0
|
|||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 0.5
|
||||
VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -151,7 +148,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -181,7 +177,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -211,7 +206,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -241,7 +235,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -271,7 +264,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -301,7 +293,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -405,7 +396,6 @@ RenderAvatarVP 0 0
|
|||
RenderObjectBump 0 0
|
||||
RenderMaxPartCount 1 1024
|
||||
RenderTerrainDetail 1 0
|
||||
RenderUseImpostors 0 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderReflectionDetail 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ version 37
|
|||
// resetting the graphics preferences of all users to the recommended
|
||||
// defaults. This should be as rare an event as we can manage.
|
||||
|
||||
// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
|
||||
// NOTE: This is mostly identical to featuretable.txt with a few differences
|
||||
// Should be combined into one table
|
||||
|
||||
//
|
||||
|
|
@ -31,8 +31,10 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarPhysicsLODFactor 1 1.0
|
||||
RenderAvatarMaxVisible 1 12
|
||||
RenderAvatarMaxNonImpostors 1 12
|
||||
RenderAvatarMaxComplexity 1 60000
|
||||
RenderAvatarVP 1 1
|
||||
RenderAutoMuteSurfaceAreaLimit 1 1000.0
|
||||
RenderCubeMap 1 1
|
||||
RenderDelayVBUpdate 1 0
|
||||
RenderFarClip 1 256
|
||||
|
|
@ -49,7 +51,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVBOMappingDisable 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
|
|
@ -66,7 +67,6 @@ RenderShaderLightingMaxLevel 1 3
|
|||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderShadowDetail 1 2
|
||||
WatchdogDisabled 1 1
|
||||
RenderUseStreamVBO 1 1
|
||||
RenderFSAASamples 1 16
|
||||
RenderMaxTextureIndex 1 16
|
||||
|
|
@ -79,7 +79,8 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarMaxComplexity 1 30000
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
|
|
@ -92,7 +93,6 @@ RenderTerrainDetail 1 0
|
|||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 0.5
|
||||
VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -110,7 +110,8 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarMaxComplexity 1 30000
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
|
|
@ -123,7 +124,6 @@ RenderTerrainDetail 1 0
|
|||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 0.5
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -153,7 +153,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -183,7 +182,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -213,7 +211,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -243,7 +240,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -273,7 +269,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -304,7 +299,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -319,6 +313,9 @@ RenderFSAASamples 1 2
|
|||
//
|
||||
list Unknown
|
||||
RenderVBOEnable 1 0
|
||||
RenderShadowDetail 1 0
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
||||
//
|
||||
// Class 0 Hardware (just old)
|
||||
|
|
@ -343,6 +340,7 @@ RenderVBOEnable 1 1
|
|||
//
|
||||
list Class3
|
||||
RenderVBOEnable 1 1
|
||||
|
||||
//
|
||||
// Class 4 Hardware
|
||||
//
|
||||
|
|
@ -394,11 +392,12 @@ list safe
|
|||
RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderAvatarVP 0 0
|
||||
RenderLocalLights 1 0
|
||||
RenderAvatarMaxNonImpostors 1 16
|
||||
RenderAvatarMaxComplexity 1 60000
|
||||
RenderObjectBump 0 0
|
||||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 1024
|
||||
RenderTerrainDetail 1 0
|
||||
RenderUseImpostors 0 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderReflectionDetail 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
|
|
@ -523,7 +522,6 @@ Disregard96DefaultDrawDistance 1 0
|
|||
|
||||
list NVIDIA_GeForce_8600
|
||||
RenderTextureMemoryMultiple 1 1
|
||||
RenderUseImpostors 0 0
|
||||
UseOcclusion 0 0
|
||||
|
||||
/// tweaked ATI to 96 Draw distance
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ RenderUseFBO 1 0
|
|||
list low
|
||||
RenderVBO 1 0
|
||||
RenderAniso 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderLighting 1 0
|
||||
|
||||
list medium
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ RenderAnisotropic 1 1
|
|||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarPhysicsLODFactor 1 1.0
|
||||
RenderAvatarMaxVisible 1 12
|
||||
RenderAvatarMaxNonImpostors 1 12
|
||||
RenderAvatarVP 1 1
|
||||
RenderCubeMap 1 1
|
||||
RenderDelayVBUpdate 1 0
|
||||
|
|
@ -49,7 +49,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVBOMappingDisable 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
|
|
@ -79,7 +78,7 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
|
|
@ -92,7 +91,6 @@ RenderTerrainDetail 1 0
|
|||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 0.5
|
||||
VertexShaderEnable 1 0
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -110,7 +108,7 @@ RenderAnisotropic 1 0
|
|||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0
|
||||
RenderAvatarPhysicsLODFactor 1 0
|
||||
RenderAvatarMaxVisible 1 3
|
||||
RenderAvatarMaxNonImpostors 1 3
|
||||
RenderAvatarVP 1 0
|
||||
RenderFarClip 1 64
|
||||
RenderFlexTimeFactor 1 0
|
||||
|
|
@ -123,7 +121,6 @@ RenderTerrainDetail 1 0
|
|||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 0.5
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -153,7 +150,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 0
|
||||
|
|
@ -183,7 +179,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -213,7 +208,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -243,7 +237,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -273,7 +266,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -303,7 +295,6 @@ RenderTerrainDetail 1 1
|
|||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
|
@ -404,7 +395,6 @@ RenderAvatarVP 0 0
|
|||
RenderObjectBump 0 0
|
||||
RenderMaxPartCount 1 1024
|
||||
RenderTerrainDetail 1 0
|
||||
RenderUseImpostors 0 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderReflectionDetail 0 0
|
||||
WindLightUseAtmosShaders 0 0
|
||||
|
|
@ -454,37 +444,30 @@ UseOcclusion 0 0
|
|||
list Intel_830M
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_845G
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_855GM
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_865G
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_900
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_915GM
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_915G
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 0 0
|
||||
|
||||
list Intel_945GM
|
||||
RenderTerrainDetail 1 0
|
||||
|
|
@ -501,7 +484,6 @@ RenderVBOEnable 1 0
|
|||
list Intel_965
|
||||
RenderTerrainDetail 1 0
|
||||
RenderVBOEnable 1 0
|
||||
RenderUseImpostors 1 0
|
||||
UseOcclusion 0 0
|
||||
|
||||
list Intel_G33
|
||||
|
|
|
|||
|
|
@ -594,7 +594,7 @@ static void settings_to_globals()
|
|||
LLVOTree::sTreeFactor = gSavedSettings.getF32("RenderTreeLODFactor");
|
||||
LLVOAvatar::sLODFactor = gSavedSettings.getF32("RenderAvatarLODFactor");
|
||||
LLVOAvatar::sPhysicsLODFactor = gSavedSettings.getF32("RenderAvatarPhysicsLODFactor");
|
||||
LLVOAvatar::sMaxVisible = (U32)gSavedSettings.getS32("RenderAvatarMaxVisible");
|
||||
LLVOAvatar::updateImpostorRendering(gSavedSettings.getU32("RenderAvatarMaxNonImpostors"));
|
||||
LLVOAvatar::sVisibleInFirstPerson = gSavedSettings.getBOOL("FirstPersonAvatarVisible");
|
||||
// clamp auto-open time to some minimum usable value
|
||||
LLFolderView::sAutoOpenTime = llmax(0.25f, gSavedSettings.getF32("FolderAutoOpenDelay"));
|
||||
|
|
@ -616,7 +616,6 @@ static void settings_modify()
|
|||
LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderDeferred");
|
||||
LLPipeline::sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
|
||||
LLPipeline::sRenderDeferred = LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");
|
||||
LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors");
|
||||
LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
|
||||
LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
|
||||
gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession;
|
||||
|
|
@ -5146,7 +5145,7 @@ void LLAppViewer::idle()
|
|||
}
|
||||
|
||||
// Update AV render info
|
||||
LLAvatarRenderInfoAccountant::idle();
|
||||
LLAvatarRenderInfoAccountant::getInstance()->idle();
|
||||
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_AUDIO_UPDATE);
|
||||
|
|
|
|||
|
|
@ -421,6 +421,15 @@ void LLAttachmentsMgr::onDetachCompleted(const LLUUID& inv_item_id)
|
|||
mQuestionableCOFLinks.addTime(inv_item_id);
|
||||
}
|
||||
|
||||
bool LLAttachmentsMgr::isAttachmentStateComplete() const
|
||||
{
|
||||
return mPendingAttachments.empty()
|
||||
&& mAttachmentRequests.empty()
|
||||
&& mDetachRequests.empty()
|
||||
&& mRecentlyArrivedAttachments.empty()
|
||||
&& mQuestionableCOFLinks.empty();
|
||||
}
|
||||
|
||||
// Check for attachments that are (a) linked in COF and (b) not
|
||||
// attached to the avatar. This is a rotten function to have to
|
||||
// include, because it runs the risk of either repeatedly spamming out
|
||||
|
|
|
|||
|
|
@ -87,6 +87,8 @@ public:
|
|||
void onDetachRequested(const LLUUID& inv_item_id);
|
||||
void onDetachCompleted(const LLUUID& inv_item_id);
|
||||
|
||||
bool isAttachmentStateComplete() const;
|
||||
|
||||
private:
|
||||
|
||||
class LLItemRequestTimes: public std::map<LLUUID,LLTimer>
|
||||
|
|
|
|||
|
|
@ -28,14 +28,17 @@
|
|||
|
||||
// Precompiled header
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
// associated header
|
||||
#include "llavatarrenderinfoaccountant.h"
|
||||
// STL headers
|
||||
// std headers
|
||||
// external library headers
|
||||
// other Linden headers
|
||||
#include "llcharacter.h"
|
||||
#include "llhttpclient.h"
|
||||
#include "httprequest.h"
|
||||
#include "httphandler.h"
|
||||
#include "httpresponse.h"
|
||||
#include "llcorehttputil.h"
|
||||
#include "llappcorehttp.h"
|
||||
#include "llavatarrendernotifier.h"
|
||||
#include "lltimer.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewermenu.h"
|
||||
|
|
@ -43,233 +46,290 @@
|
|||
#include "llviewerregion.h"
|
||||
#include "llvoavatar.h"
|
||||
#include "llworld.h"
|
||||
// associated header
|
||||
#include "llavatarrenderinfoaccountant.h"
|
||||
|
||||
|
||||
static const std::string KEY_AGENTS = "agents"; // map
|
||||
static const std::string KEY_WEIGHT = "weight"; // integer
|
||||
static const std::string KEY_TOO_COMPLEX = "tooComplex"; // bool
|
||||
static const std::string KEY_OVER_COMPLEXITY_LIMIT = "overlimit"; // integer
|
||||
static const std::string KEY_REPORTING_COMPLEXITY_LIMIT = "reportinglimit"; // integer
|
||||
|
||||
static const std::string KEY_IDENTIFIER = "identifier";
|
||||
static const std::string KEY_MESSAGE = "message";
|
||||
static const std::string KEY_ERROR = "error";
|
||||
|
||||
|
||||
// Send data updates about once per minute, only need per-frame resolution
|
||||
LLFrameTimer LLAvatarRenderInfoAccountant::sRenderInfoReportTimer;
|
||||
static const F32 SECS_BETWEEN_REGION_SCANS = 5.f; // Scan the region list every 5 seconds
|
||||
static const F32 SECS_BETWEEN_REGION_REQUEST = 15.0; // Look for new avs every 15 seconds
|
||||
static const F32 SECS_BETWEEN_REGION_REPORTS = 60.0; // Update each region every 60 seconds
|
||||
|
||||
|
||||
// The policy class for HTTP traffic; this is the right value for all capability requests.
|
||||
static LLCore::HttpRequest::policy_t http_policy(LLAppCoreHttp::AP_REPORTING);
|
||||
|
||||
// Priority for HTTP requests. Use 0U.
|
||||
static LLCore::HttpRequest::priority_t http_priority(0U);
|
||||
|
||||
LLAvatarRenderInfoAccountant::LLAvatarRenderInfoAccountant()
|
||||
: mHttpRequest(new LLCore::HttpRequest)
|
||||
, mHttpHeaders(new LLCore::HttpHeaders)
|
||||
, mHttpOptions(new LLCore::HttpOptions)
|
||||
{
|
||||
mHttpOptions->setTransferTimeout(SECS_BETWEEN_REGION_SCANS);
|
||||
|
||||
mHttpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML);
|
||||
mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_LLSD_XML);
|
||||
}
|
||||
|
||||
LLAvatarRenderInfoAccountant::~LLAvatarRenderInfoAccountant()
|
||||
{
|
||||
mHttpOptions->release();
|
||||
mHttpHeaders->release();
|
||||
// delete mHttpRequest; ???
|
||||
}
|
||||
|
||||
// HTTP responder class for GET request for avatar render weight information
|
||||
class LLAvatarRenderInfoGetResponder : public LLHTTPClient::Responder
|
||||
class LLAvatarRenderInfoGetHandler : public LLCore::HttpHandler
|
||||
{
|
||||
private:
|
||||
LOG_CLASS(LLAvatarRenderInfoGetHandler);
|
||||
|
||||
public:
|
||||
LLAvatarRenderInfoGetResponder(U64 region_handle) : mRegionHandle(region_handle)
|
||||
LLAvatarRenderInfoGetHandler() : LLCore::HttpHandler()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void error(U32 statusNum, const std::string& reason)
|
||||
void onCompleted(LLCore::HttpHandle handle,
|
||||
LLCore::HttpResponse* response)
|
||||
{
|
||||
LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
|
||||
if (regionp)
|
||||
{
|
||||
LL_WARNS() << "HTTP error result for avatar weight GET: " << statusNum
|
||||
<< ", " << reason
|
||||
<< " returned by region " << regionp->getName()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Avatar render weight GET error recieved but region not found for "
|
||||
<< mRegionHandle
|
||||
<< ", error " << statusNum
|
||||
<< ", " << reason
|
||||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
virtual void result(const LLSD& content)
|
||||
{
|
||||
LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
|
||||
if (regionp)
|
||||
{
|
||||
if (LLAvatarRenderInfoAccountant::logRenderInfo())
|
||||
{
|
||||
LL_INFOS() << "LRI: Result for avatar weights request for region " << regionp->getName() << ":" << LL_ENDL;
|
||||
}
|
||||
|
||||
if (content.isMap())
|
||||
{
|
||||
if (content.has(KEY_AGENTS))
|
||||
LLCore::HttpStatus status = response->getStatus();
|
||||
if (status)
|
||||
{
|
||||
LL_DEBUGS("AvatarRenderInfo") << "response"<<LL_ENDL;
|
||||
LLSD avatar_render_info;
|
||||
if (LLCoreHttpUtil::responseToLLSD(response, false /* quiet logging */,
|
||||
avatar_render_info))
|
||||
{
|
||||
const LLSD & agents = content[KEY_AGENTS];
|
||||
if (agents.isMap())
|
||||
if (avatar_render_info.isMap())
|
||||
{
|
||||
LLSD::map_const_iterator report_iter = agents.beginMap();
|
||||
while (report_iter != agents.endMap())
|
||||
if ( avatar_render_info.has(KEY_REPORTING_COMPLEXITY_LIMIT)
|
||||
&& avatar_render_info.has(KEY_OVER_COMPLEXITY_LIMIT))
|
||||
{
|
||||
LLUUID target_agent_id = LLUUID(report_iter->first);
|
||||
const LLSD & agent_info_map = report_iter->second;
|
||||
LLViewerObject* avatarp = gObjectList.findObject(target_agent_id);
|
||||
if (avatarp &&
|
||||
avatarp->isAvatar() &&
|
||||
agent_info_map.isMap())
|
||||
{ // Extract the data for this avatar
|
||||
U32 reporting = avatar_render_info[KEY_REPORTING_COMPLEXITY_LIMIT].asInteger();
|
||||
U32 overlimit = avatar_render_info[KEY_OVER_COMPLEXITY_LIMIT].asInteger();
|
||||
|
||||
if (LLAvatarRenderInfoAccountant::logRenderInfo())
|
||||
{
|
||||
LL_INFOS() << "LRI: Agent " << target_agent_id
|
||||
<< ": " << agent_info_map << LL_ENDL;
|
||||
}
|
||||
LL_DEBUGS("AvatarRenderInfo") << "complexity limit: "<<reporting<<" reporting, "<<overlimit<<" over limit"<<LL_ENDL;
|
||||
|
||||
if (agent_info_map.has(KEY_WEIGHT))
|
||||
LLAvatarRenderNotifier::getInstance()->updateNotificationRegion(reporting, overlimit);
|
||||
}
|
||||
|
||||
if (avatar_render_info.has(KEY_AGENTS))
|
||||
{
|
||||
const LLSD & agents = avatar_render_info[KEY_AGENTS];
|
||||
if (agents.isMap())
|
||||
{
|
||||
for (LLSD::map_const_iterator agent_iter = agents.beginMap();
|
||||
agent_iter != agents.endMap();
|
||||
agent_iter++
|
||||
)
|
||||
{
|
||||
((LLVOAvatar *) avatarp)->setReportedVisualComplexity(agent_info_map[KEY_WEIGHT].asInteger());
|
||||
}
|
||||
LLUUID target_agent_id = LLUUID(agent_iter->first);
|
||||
LLViewerObject* avatarp = gObjectList.findObject(target_agent_id);
|
||||
if (avatarp && avatarp->isAvatar())
|
||||
{
|
||||
const LLSD & agent_info_map = agent_iter->second;
|
||||
if (agent_info_map.isMap())
|
||||
{
|
||||
LL_DEBUGS("AvatarRenderInfo") << " Agent " << target_agent_id
|
||||
<< ": " << agent_info_map << LL_ENDL;
|
||||
|
||||
if (agent_info_map.has(KEY_WEIGHT))
|
||||
{
|
||||
((LLVOAvatar *) avatarp)->setReportedVisualComplexity(agent_info_map[KEY_WEIGHT].asInteger());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "agent entry invalid"
|
||||
<< " agent " << target_agent_id
|
||||
<< " map " << agent_info_map
|
||||
<< LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AvatarRenderInfo") << "Unknown agent " << target_agent_id << LL_ENDL;
|
||||
}
|
||||
} // for agent_iter
|
||||
}
|
||||
report_iter++;
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "malformed get response agents avatar_render_info is not map" << LL_ENDL;
|
||||
}
|
||||
} // has "agents"
|
||||
else if (avatar_render_info.has(KEY_ERROR))
|
||||
{
|
||||
const LLSD & error = avatar_render_info[KEY_ERROR];
|
||||
LL_WARNS("AvatarRenderInfo") << "Avatar render info GET error: "
|
||||
<< error[KEY_IDENTIFIER]
|
||||
<< ": " << error[KEY_MESSAGE]
|
||||
<< LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "no agent key in get response" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
} // has "agents"
|
||||
else if (content.has(KEY_ERROR))
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "malformed get response is not map" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const LLSD & error = content[KEY_ERROR];
|
||||
LL_WARNS() << "Avatar render info GET error: "
|
||||
<< error[KEY_IDENTIFIER]
|
||||
<< ": " << error[KEY_MESSAGE]
|
||||
<< " from region " << regionp->getName()
|
||||
<< LL_ENDL;
|
||||
LL_WARNS("AvatarRenderInfo") << "malformed get response parse failure" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Avatar render weight info recieved but region not found for "
|
||||
<< mRegionHandle << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Something went wrong. Translate the status to
|
||||
// a meaningful message.
|
||||
LL_WARNS("AvatarRenderInfo") << "GET failed Status: "
|
||||
<< status.toTerseString()
|
||||
<< ", Reason: " << status.toString()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
private:
|
||||
U64 mRegionHandle;
|
||||
delete this; // release the handler object
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// HTTP responder class for POST request for avatar render weight information
|
||||
class LLAvatarRenderInfoPostResponder : public LLHTTPClient::Responder
|
||||
class LLAvatarRenderInfoPostHandler : public LLCore::HttpHandler
|
||||
{
|
||||
public:
|
||||
LLAvatarRenderInfoPostResponder(U64 region_handle) : mRegionHandle(region_handle)
|
||||
private:
|
||||
LOG_CLASS(LLAvatarRenderInfoPostHandler);
|
||||
|
||||
public:
|
||||
LLAvatarRenderInfoPostHandler() : LLCore::HttpHandler()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void error(U32 statusNum, const std::string& reason)
|
||||
{
|
||||
LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
|
||||
if (regionp)
|
||||
void onCompleted(LLCore::HttpHandle handle,
|
||||
LLCore::HttpResponse* response)
|
||||
{
|
||||
LL_WARNS() << "HTTP error result for avatar weight POST: " << statusNum
|
||||
<< ", " << reason
|
||||
<< " returned by region " << regionp->getName()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Avatar render weight POST error recieved but region not found for "
|
||||
<< mRegionHandle
|
||||
<< ", error " << statusNum
|
||||
<< ", " << reason
|
||||
<< LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void result(const LLSD& content)
|
||||
{
|
||||
LLViewerRegion * regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
|
||||
if (regionp)
|
||||
{
|
||||
if (LLAvatarRenderInfoAccountant::logRenderInfo())
|
||||
LLCore::HttpStatus status = response->getStatus();
|
||||
if (status)
|
||||
{
|
||||
LL_INFOS() << "LRI: Result for avatar weights POST for region " << regionp->getName()
|
||||
<< ": " << content << LL_ENDL;
|
||||
LL_DEBUGS("AvatarRenderInfo") << "post succeeded" << LL_ENDL;
|
||||
}
|
||||
|
||||
if (content.isMap())
|
||||
else
|
||||
{
|
||||
if (content.has(KEY_ERROR))
|
||||
{
|
||||
const LLSD & error = content[KEY_ERROR];
|
||||
LL_WARNS() << "Avatar render info POST error: "
|
||||
<< error[KEY_IDENTIFIER]
|
||||
<< ": " << error[KEY_MESSAGE]
|
||||
<< " from region " << regionp->getName()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Avatar render weight POST result recieved but region not found for "
|
||||
<< mRegionHandle << LL_ENDL;
|
||||
}
|
||||
}
|
||||
// Something went wrong. Translate the status to
|
||||
// a meaningful message.
|
||||
LL_WARNS("AvatarRenderInfo") << "POST failed Status: "
|
||||
<< status.toTerseString()
|
||||
<< ", Reason: " << status.toString()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
private:
|
||||
U64 mRegionHandle;
|
||||
delete this; // release the handler object
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// static
|
||||
// Send request for one region, no timer checks
|
||||
// Send request for avatar weights in one region
|
||||
// called when the mRenderInfoScanTimer expires (forced when entering a new region)
|
||||
void LLAvatarRenderInfoAccountant::sendRenderInfoToRegion(LLViewerRegion * regionp)
|
||||
{
|
||||
std::string url = regionp->getCapability("AvatarRenderInfo");
|
||||
if (!url.empty())
|
||||
if ( regionp->getRenderInfoReportTimer().hasExpired() ) // Time to make request
|
||||
{
|
||||
if (logRenderInfo())
|
||||
U32 num_avs = 0;
|
||||
|
||||
std::string url = regionp->getCapability("AvatarRenderInfo");
|
||||
if (!url.empty())
|
||||
{
|
||||
LL_INFOS() << "LRI: Sending avatar render info to region "
|
||||
<< regionp->getName()
|
||||
<< " from " << url
|
||||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
// Build the render info to POST to the region
|
||||
LLSD report = LLSD::emptyMap();
|
||||
LLSD agents = LLSD::emptyMap();
|
||||
// Build the render info to POST to the region
|
||||
LLSD agents = LLSD::emptyMap();
|
||||
|
||||
std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
while( iter != LLCharacter::sInstances.end() )
|
||||
{
|
||||
LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(*iter);
|
||||
if (avatar &&
|
||||
avatar->getRezzedStatus() >= 2 && // Mostly rezzed (maybe without baked textures downloaded)
|
||||
!avatar->isDead() && // Not dead yet
|
||||
avatar->getObjectHost() == regionp->getHost()) // Ensure it's on the same region
|
||||
std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
while( iter != LLCharacter::sInstances.end() )
|
||||
{
|
||||
avatar->calculateUpdateRenderCost(); // Make sure the numbers are up-to-date
|
||||
|
||||
LLSD info = LLSD::emptyMap();
|
||||
if (avatar->getVisualComplexity() > 0)
|
||||
LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(*iter);
|
||||
if (avatar &&
|
||||
avatar->getRezzedStatus() >= 2 && // Mostly rezzed (maybe without baked textures downloaded)
|
||||
!avatar->isDead() && // Not dead yet
|
||||
avatar->getObjectHost() == regionp->getHost()) // Ensure it's on the same region
|
||||
{
|
||||
info[KEY_WEIGHT] = avatar->getVisualComplexity();
|
||||
agents[avatar->getID().asString()] = info;
|
||||
avatar->calculateUpdateRenderComplexity(); // Make sure the numbers are up-to-date
|
||||
|
||||
if (logRenderInfo())
|
||||
LLSD info = LLSD::emptyMap();
|
||||
U32 avatar_complexity = avatar->getVisualComplexity();
|
||||
if (avatar_complexity > 0)
|
||||
{
|
||||
LL_INFOS() << "LRI: Sending avatar render info for " << avatar->getID()
|
||||
<< ": " << info << LL_ENDL;
|
||||
LL_INFOS() << "LRI: other info geometry " << avatar->getAttachmentGeometryBytes()
|
||||
<< ", area " << avatar->getAttachmentSurfaceArea()
|
||||
<< LL_ENDL;
|
||||
// the weight/complexity is unsigned, but LLSD only stores signed integers,
|
||||
// so if it's over that (which would be ridiculously high), just store the maximum signed int value
|
||||
info[KEY_WEIGHT] = (S32)(avatar_complexity < S32_MAX ? avatar_complexity : S32_MAX);
|
||||
info[KEY_TOO_COMPLEX] = LLSD::Boolean(avatar->isTooComplex());
|
||||
agents[avatar->getID().asString()] = info;
|
||||
|
||||
LL_DEBUGS("AvatarRenderInfo") << "Sending avatar render info for " << avatar->getID()
|
||||
<< ": " << info << LL_ENDL;
|
||||
num_avs++;
|
||||
}
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
iter++;
|
||||
|
||||
if (num_avs > 0)
|
||||
{
|
||||
LLSD report = LLSD::emptyMap();
|
||||
report[KEY_AGENTS] = agents;
|
||||
|
||||
LLCore::HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID);
|
||||
LLAvatarRenderInfoPostHandler* handler = new LLAvatarRenderInfoPostHandler;
|
||||
|
||||
handle = LLCoreHttpUtil::requestPostWithLLSD(mHttpRequest,
|
||||
http_policy,
|
||||
http_priority,
|
||||
url,
|
||||
report,
|
||||
mHttpOptions,
|
||||
mHttpHeaders,
|
||||
handler);
|
||||
if (LLCORE_HTTP_HANDLE_INVALID == handle)
|
||||
{
|
||||
LLCore::HttpStatus status(mHttpRequest->getStatus());
|
||||
LL_WARNS("AvatarRenderInfo") << "HTTP POST request failed"
|
||||
<< " Status: " << status.toTerseString()
|
||||
<< " Reason: '" << status.toString() << "'"
|
||||
<< LL_ENDL;
|
||||
delete handler;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AvatarRenderInfo") << "Sent render costs for " << num_avs
|
||||
<< " avatars to region " << regionp->getName()
|
||||
<< LL_ENDL;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AvatarRenderInfo") << "no agent info to send" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "AvatarRenderInfo cap is empty" << LL_ENDL;
|
||||
}
|
||||
|
||||
report[KEY_AGENTS] = agents;
|
||||
if (agents.size() > 0)
|
||||
{
|
||||
LLHTTPClient::post(url, report, new LLAvatarRenderInfoPostResponder(regionp->getHandle()));
|
||||
}
|
||||
// Reset this regions timer, moving to longer intervals if there are lots of avatars around
|
||||
regionp->getRenderInfoReportTimer().resetWithExpiry(SECS_BETWEEN_REGION_REPORTS + (2.f * num_avs));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -280,19 +340,39 @@ void LLAvatarRenderInfoAccountant::sendRenderInfoToRegion(LLViewerRegion * regio
|
|||
// Send request for one region, no timer checks
|
||||
void LLAvatarRenderInfoAccountant::getRenderInfoFromRegion(LLViewerRegion * regionp)
|
||||
{
|
||||
std::string url = regionp->getCapability("AvatarRenderInfo");
|
||||
if (!url.empty())
|
||||
if (regionp->getRenderInfoRequestTimer().hasExpired())
|
||||
{
|
||||
if (logRenderInfo())
|
||||
std::string url = regionp->getCapability("AvatarRenderInfo");
|
||||
if (!url.empty())
|
||||
{
|
||||
LL_INFOS() << "LRI: Requesting avatar render info for region "
|
||||
<< regionp->getName()
|
||||
<< " from " << url
|
||||
<< LL_ENDL;
|
||||
|
||||
LLAvatarRenderInfoGetHandler* handler = new LLAvatarRenderInfoGetHandler;
|
||||
// First send a request to get the latest data
|
||||
LLCore::HttpHandle handle = mHttpRequest->requestGet(http_policy,
|
||||
http_priority,
|
||||
url,
|
||||
NULL,
|
||||
NULL,
|
||||
handler);
|
||||
if (LLCORE_HTTP_HANDLE_INVALID != handle)
|
||||
{
|
||||
LL_DEBUGS("AvatarRenderInfo") << "Requested avatar render info for region "
|
||||
<< regionp->getName()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "Failed to launch HTTP GET request. Try again."
|
||||
<< LL_ENDL;
|
||||
delete handler;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "no AvatarRenderInfo cap for " << regionp->getName() << LL_ENDL;
|
||||
}
|
||||
|
||||
// First send a request to get the latest data
|
||||
LLHTTPClient::get(url, new LLAvatarRenderInfoGetResponder(regionp->getHandle()));
|
||||
regionp->getRenderInfoRequestTimer().resetWithExpiry(SECS_BETWEEN_REGION_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -301,98 +381,60 @@ void LLAvatarRenderInfoAccountant::getRenderInfoFromRegion(LLViewerRegion * regi
|
|||
// Called every frame - send render weight requests to every region
|
||||
void LLAvatarRenderInfoAccountant::idle()
|
||||
{
|
||||
if (sRenderInfoReportTimer.hasExpired())
|
||||
{
|
||||
const F32 SECS_BETWEEN_REGION_SCANS = 5.f; // Scan the region list every 5 seconds
|
||||
const F32 SECS_BETWEEN_REGION_REQUEST = 60.0; // Update each region every 60 seconds
|
||||
mHttpRequest->update(0); // give any pending http operations a chance to call completion methods
|
||||
|
||||
S32 num_avs = LLCharacter::sInstances.size();
|
||||
if (mRenderInfoScanTimer.hasExpired())
|
||||
{
|
||||
LL_DEBUGS("AvatarRenderInfo") << "Scanning regions for render info updates"
|
||||
<< LL_ENDL;
|
||||
|
||||
if (logRenderInfo())
|
||||
{
|
||||
LL_INFOS() << "LRI: Scanning all regions and checking for render info updates"
|
||||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
// Check all regions and see if it's time to fetch/send data
|
||||
// Check all regions
|
||||
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
|
||||
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
|
||||
iter != LLWorld::getInstance()->getRegionList().end();
|
||||
++iter)
|
||||
{
|
||||
LLViewerRegion* regionp = *iter;
|
||||
if (regionp &&
|
||||
regionp->isAlive() &&
|
||||
regionp->capabilitiesReceived() && // Region has capability URLs available
|
||||
regionp->getRenderInfoRequestTimer().hasExpired()) // Time to make request
|
||||
if ( regionp
|
||||
&& regionp->isAlive()
|
||||
&& regionp->capabilitiesReceived())
|
||||
{
|
||||
// each of these is further governed by and resets its own timer
|
||||
sendRenderInfoToRegion(regionp);
|
||||
getRenderInfoFromRegion(regionp);
|
||||
|
||||
// Reset this regions timer, moving to longer intervals if there are lots of avatars around
|
||||
regionp->getRenderInfoRequestTimer().resetWithExpiry(SECS_BETWEEN_REGION_REQUEST + (2.f * num_avs));
|
||||
}
|
||||
}
|
||||
|
||||
// We scanned all the regions, reset the request timer.
|
||||
sRenderInfoReportTimer.resetWithExpiry(SECS_BETWEEN_REGION_SCANS);
|
||||
}
|
||||
|
||||
static LLCachedControl<U32> render_auto_mute_functions(gSavedSettings, "RenderAutoMuteFunctions", 0);
|
||||
static U32 prev_render_auto_mute_functions = (U32) -1;
|
||||
if (prev_render_auto_mute_functions != render_auto_mute_functions)
|
||||
{
|
||||
prev_render_auto_mute_functions = render_auto_mute_functions;
|
||||
|
||||
// Adjust menus
|
||||
BOOL show_items = (BOOL)(render_auto_mute_functions & 0x04);
|
||||
gMenuAvatarOther->setItemVisible( std::string("Normal"), show_items);
|
||||
gMenuAvatarOther->setItemVisible( std::string("Always use impostor"), show_items);
|
||||
gMenuAvatarOther->setItemVisible( std::string("Never use impostor"), show_items);
|
||||
gMenuAvatarOther->setItemVisible( std::string("Impostor seperator"), show_items);
|
||||
|
||||
gMenuAttachmentOther->setItemVisible( std::string("Normal"), show_items);
|
||||
gMenuAttachmentOther->setItemVisible( std::string("Always use impostor"), show_items);
|
||||
gMenuAttachmentOther->setItemVisible( std::string("Never use impostor"), show_items);
|
||||
gMenuAttachmentOther->setItemVisible( std::string("Impostor seperator"), show_items);
|
||||
|
||||
if (!show_items)
|
||||
{ // Turning off visual muting
|
||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{ // Make sure all AVs have the setting cleared
|
||||
LLVOAvatar* inst = (LLVOAvatar*) *iter;
|
||||
inst->setCachedVisualMute(false);
|
||||
}
|
||||
}
|
||||
mRenderInfoScanTimer.resetWithExpiry(SECS_BETWEEN_REGION_SCANS);
|
||||
}
|
||||
}
|
||||
|
||||
void LLAvatarRenderInfoAccountant::resetRenderInfoScanTimer()
|
||||
{
|
||||
// this will force the next frame to rescan
|
||||
mRenderInfoScanTimer.reset();
|
||||
}
|
||||
|
||||
// static
|
||||
// Make sRenderInfoReportTimer expire so the next call to idle() will scan and query a new region
|
||||
// called via LLViewerRegion::setCapabilitiesReceived() boost signals when the capabilities
|
||||
// Called via LLViewerRegion::setCapabilitiesReceived() boost signals when the capabilities
|
||||
// are returned for a new LLViewerRegion, and is the earliest time to get render info
|
||||
void LLAvatarRenderInfoAccountant::expireRenderInfoReportTimer(const LLUUID& region_id)
|
||||
void LLAvatarRenderInfoAccountant::scanNewRegion(const LLUUID& region_id)
|
||||
{
|
||||
if (logRenderInfo())
|
||||
{
|
||||
LL_INFOS() << "LRI: Viewer has new region capabilities, clearing global render info timer"
|
||||
<< " and timer for region " << region_id
|
||||
<< LL_ENDL;
|
||||
}
|
||||
LL_INFOS("AvatarRenderInfo") << region_id << LL_ENDL;
|
||||
|
||||
// Reset the global timer so it will scan regions immediately
|
||||
sRenderInfoReportTimer.reset();
|
||||
// Reset the global timer so it will scan regions on the next call to ::idle
|
||||
LLAvatarRenderInfoAccountant::getInstance()->resetRenderInfoScanTimer();
|
||||
|
||||
LLViewerRegion* regionp = LLWorld::instance().getRegionFromID(region_id);
|
||||
if (regionp)
|
||||
{ // Reset the region's timer so it will request data immediately
|
||||
{ // Reset the region's timers so we will:
|
||||
// * request render info from it immediately
|
||||
// * report on the following scan
|
||||
regionp->getRenderInfoRequestTimer().reset();
|
||||
regionp->getRenderInfoReportTimer().resetWithExpiry(SECS_BETWEEN_REGION_SCANS);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "unable to resolve region "<<region_id<<LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLAvatarRenderInfoAccountant::logRenderInfo()
|
||||
{
|
||||
static LLCachedControl<bool> render_mute_logging_enabled(gSavedSettings, "RenderAutoMuteLogging", false);
|
||||
return render_mute_logging_enabled;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,24 +33,33 @@ class LLViewerRegion;
|
|||
|
||||
// Class to gather avatar rendering information
|
||||
// that is sent to or fetched from regions.
|
||||
class LLAvatarRenderInfoAccountant
|
||||
class LLAvatarRenderInfoAccountant : public LLSingleton<LLAvatarRenderInfoAccountant>
|
||||
{
|
||||
public:
|
||||
LLAvatarRenderInfoAccountant() {};
|
||||
~LLAvatarRenderInfoAccountant() {};
|
||||
private:
|
||||
LOG_CLASS(LLAvatarRenderInfoAccountant);
|
||||
|
||||
static void sendRenderInfoToRegion(LLViewerRegion * regionp);
|
||||
static void getRenderInfoFromRegion(LLViewerRegion * regionp);
|
||||
public:
|
||||
LLAvatarRenderInfoAccountant();
|
||||
~LLAvatarRenderInfoAccountant();
|
||||
|
||||
static void expireRenderInfoReportTimer(const LLUUID& region_id);
|
||||
void sendRenderInfoToRegion(LLViewerRegion * regionp);
|
||||
void getRenderInfoFromRegion(LLViewerRegion * regionp);
|
||||
|
||||
static void idle();
|
||||
void idle(); // called once per frame
|
||||
|
||||
static bool logRenderInfo();
|
||||
void resetRenderInfoScanTimer();
|
||||
|
||||
static void scanNewRegion(const LLUUID& region_id);
|
||||
|
||||
private:
|
||||
// Send data updates about once per minute, only need per-frame resolution
|
||||
static LLFrameTimer sRenderInfoReportTimer;
|
||||
private:
|
||||
// frequency of region scans,
|
||||
// further limited by per region Request and Report timers
|
||||
LLFrameTimer mRenderInfoScanTimer;
|
||||
|
||||
//
|
||||
LLCore::HttpRequest* mHttpRequest;
|
||||
LLCore::HttpHeaders* mHttpHeaders;
|
||||
LLCore::HttpOptions* mHttpOptions;
|
||||
};
|
||||
|
||||
#endif /* ! defined(LL_llavatarrenderinfoaccountant_H) */
|
||||
|
|
|
|||
|
|
@ -0,0 +1,265 @@
|
|||
/**
|
||||
* @file llavatarrendernotifier.cpp
|
||||
* @author andreykproductengine
|
||||
* @date 2015-08-05
|
||||
* @brief
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2013, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
// Pre-compiled headers
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
// STL headers
|
||||
// std headers
|
||||
// external library headers
|
||||
// other Linden headers
|
||||
#include "llagentwearables.h"
|
||||
#include "llappearancemgr.h"
|
||||
#include "llattachmentsmgr.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llnotificationtemplate.h"
|
||||
#include "lltimer.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "lltrans.h"
|
||||
#include "llagentcamera.h"
|
||||
// associated header
|
||||
#include "llavatarrendernotifier.h"
|
||||
|
||||
// when change exceeds this ration, notification is shown
|
||||
static const F32 RENDER_ALLOWED_CHANGE_PCT = 0.1;
|
||||
// wait seconds before processing over limit updates after last complexity change
|
||||
static const U32 OVER_LIMIT_UPDATE_DELAY = 70;
|
||||
|
||||
|
||||
LLAvatarRenderNotifier::LLAvatarRenderNotifier() :
|
||||
mAgentsCount(0),
|
||||
mOverLimitAgents(0),
|
||||
mAgentComplexity(0),
|
||||
mOverLimitPct(0.0f),
|
||||
mLatestAgentsCount(0),
|
||||
mLatestOverLimitAgents(0),
|
||||
mLatestAgentComplexity(0),
|
||||
mLatestOverLimitPct(0.0f),
|
||||
mShowOverLimitAgents(false),
|
||||
mNotifyOutfitLoading(false),
|
||||
mLastCofVersion(-1),
|
||||
mLastOutfitRezStatus(-1),
|
||||
mLastSkeletonSerialNum(-1)
|
||||
{
|
||||
mPopUpDelayTimer.resetWithExpiry(OVER_LIMIT_UPDATE_DELAY);
|
||||
}
|
||||
|
||||
std::string LLAvatarRenderNotifier::overLimitMessage()
|
||||
{
|
||||
static const char* everyone_now = "av_render_everyone_now";
|
||||
static const char* not_everyone = "av_render_not_everyone";
|
||||
static const char* over_half = "av_render_over_half";
|
||||
static const char* most = "av_render_most_of";
|
||||
static const char* anyone = "av_render_anyone";
|
||||
|
||||
std::string message;
|
||||
if ( mLatestOverLimitPct >= 99.0 )
|
||||
{
|
||||
message = anyone;
|
||||
}
|
||||
else if ( mLatestOverLimitPct >= 75.0 )
|
||||
{
|
||||
message = most;
|
||||
}
|
||||
else if ( mLatestOverLimitPct >= 50.0 )
|
||||
{
|
||||
message = over_half;
|
||||
}
|
||||
else if ( mLatestOverLimitPct > 10.0 )
|
||||
{
|
||||
message = not_everyone;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Will be shown only after overlimit was > 0
|
||||
message = everyone_now;
|
||||
}
|
||||
return LLTrans::getString(message);
|
||||
}
|
||||
|
||||
void LLAvatarRenderNotifier::displayNotification(bool show_over_limit)
|
||||
{
|
||||
if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_MOUSELOOK)
|
||||
{
|
||||
LL_WARNS("AvatarRenderInfo") << "Suppressing a notification while in mouselook" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
mAgentComplexity = mLatestAgentComplexity;
|
||||
mShowOverLimitAgents = show_over_limit;
|
||||
static LLCachedControl<U32> expire_delay(gSavedSettings, "ShowMyComplexityChanges", 20);
|
||||
|
||||
LLDate expire_date(LLDate::now().secondsSinceEpoch() + expire_delay);
|
||||
LLSD args;
|
||||
args["AGENT_COMPLEXITY"] = LLSD::Integer(mLatestAgentComplexity);
|
||||
std::string notification_name;
|
||||
if (mShowOverLimitAgents)
|
||||
{
|
||||
mAgentsCount = mLatestAgentsCount;
|
||||
mOverLimitAgents = mLatestOverLimitAgents;
|
||||
mOverLimitPct = mLatestOverLimitPct;
|
||||
|
||||
std::string notification_message = overLimitMessage();
|
||||
notification_name = "RegionAndAgentComplexity";
|
||||
args["OVERLIMIT_MSG"] = notification_message;
|
||||
}
|
||||
else
|
||||
{
|
||||
notification_name = "AgentComplexity";
|
||||
}
|
||||
|
||||
if (mNotificationPtr != NULL && mNotificationPtr->getName() != notification_name)
|
||||
{
|
||||
// since unique tag works only for same notification,
|
||||
// old notification needs to be canceled manually
|
||||
LLNotifications::instance().cancel(mNotificationPtr);
|
||||
}
|
||||
|
||||
LL_INFOS("AvatarRenderInfo") << notification_name << " " << args << LL_ENDL;
|
||||
|
||||
mNotificationPtr = LLNotifications::instance().add(LLNotification::Params()
|
||||
.name(notification_name)
|
||||
.expiry(expire_date)
|
||||
.substitutions(args));
|
||||
}
|
||||
|
||||
bool LLAvatarRenderNotifier::isNotificationVisible()
|
||||
{
|
||||
return mNotificationPtr != NULL && mNotificationPtr->isActive();
|
||||
}
|
||||
|
||||
void LLAvatarRenderNotifier::updateNotificationRegion(U32 agentcount, U32 overLimit)
|
||||
{
|
||||
if (agentcount == 0)
|
||||
{
|
||||
// Data not ready
|
||||
return;
|
||||
}
|
||||
|
||||
// save current values for later use
|
||||
mLatestAgentsCount = agentcount > overLimit ? agentcount - 1 : agentcount; // subtract self
|
||||
mLatestOverLimitAgents = overLimit;
|
||||
mLatestOverLimitPct = mLatestAgentsCount != 0 ? ((F32)overLimit / (F32)mLatestAgentsCount) * 100.0 : 0;
|
||||
|
||||
if (mAgentsCount == mLatestAgentsCount
|
||||
&& mOverLimitAgents == mLatestOverLimitAgents)
|
||||
{
|
||||
// no changes since last notification
|
||||
return;
|
||||
}
|
||||
|
||||
if ((mPopUpDelayTimer.hasExpired() || (isNotificationVisible() && mShowOverLimitAgents))
|
||||
&& (mOverLimitPct > 0 || mLatestOverLimitPct > 0)
|
||||
&& std::abs(mOverLimitPct - mLatestOverLimitPct) > mLatestOverLimitPct * RENDER_ALLOWED_CHANGE_PCT
|
||||
)
|
||||
{
|
||||
// display in case of drop to/from zero and in case of significant (RENDER_ALLOWED_CHANGE_PCT) changes
|
||||
displayNotification(true);
|
||||
|
||||
// default timeout before next notification
|
||||
static LLCachedControl<U32> pop_up_delay(gSavedSettings, "ComplexityChangesPopUpDelay", 300);
|
||||
mPopUpDelayTimer.resetWithExpiry(pop_up_delay);
|
||||
}
|
||||
}
|
||||
|
||||
void LLAvatarRenderNotifier::updateNotificationState()
|
||||
{
|
||||
if (!isAgentAvatarValid())
|
||||
{
|
||||
// data not ready, nothing to show.
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't use first provided COF and Sceleton versions - let them load anf 'form' first
|
||||
if (mLastCofVersion < 0
|
||||
&& gAgentWearables.areWearablesLoaded()
|
||||
&& LLAttachmentsMgr::getInstance()->isAttachmentStateComplete())
|
||||
{
|
||||
// cof formed
|
||||
mLastCofVersion = LLAppearanceMgr::instance().getCOFVersion();
|
||||
mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum;
|
||||
}
|
||||
else if (mLastCofVersion >= 0
|
||||
&& (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion
|
||||
|| mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
|
||||
{
|
||||
// version mismatch in comparison to previous outfit - outfit changed
|
||||
mNotifyOutfitLoading = true;
|
||||
mLastCofVersion = LLAppearanceMgr::instance().getCOFVersion();
|
||||
mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum;
|
||||
}
|
||||
|
||||
if (gAgentAvatarp->mLastRezzedStatus < mLastOutfitRezStatus)
|
||||
{
|
||||
// rez status decreased - outfit related action was initiated
|
||||
mNotifyOutfitLoading = true;
|
||||
}
|
||||
|
||||
mLastOutfitRezStatus = gAgentAvatarp->mLastRezzedStatus;
|
||||
}
|
||||
void LLAvatarRenderNotifier::updateNotificationAgent(U32 agentComplexity)
|
||||
{
|
||||
// save the value for use in following messages
|
||||
mLatestAgentComplexity = agentComplexity;
|
||||
|
||||
if (!isAgentAvatarValid() || !gAgentWearables.areWearablesLoaded())
|
||||
{
|
||||
// data not ready, nothing to show.
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mNotifyOutfitLoading)
|
||||
{
|
||||
// We should not notify about initial outfit and it's load process without reason
|
||||
updateNotificationState();
|
||||
|
||||
if (mLatestOverLimitAgents > 0)
|
||||
{
|
||||
// Some users can't see agent already, notify user about complexity growth
|
||||
mNotifyOutfitLoading = true;
|
||||
}
|
||||
|
||||
if (!mNotifyOutfitLoading)
|
||||
{
|
||||
// avatar or outfit not ready
|
||||
mAgentComplexity = mLatestAgentComplexity;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (mAgentComplexity != mLatestAgentComplexity)
|
||||
{
|
||||
// if we have an agent complexity change, we always display it and hide 'over limit'
|
||||
displayNotification(false);
|
||||
|
||||
// next 'over limit' update should be displayed after delay to make sure information got updated at server side
|
||||
mPopUpDelayTimer.resetWithExpiry(OVER_LIMIT_UPDATE_DELAY);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
/**
|
||||
* @file llavatarrendernotifier.h
|
||||
* @author andreykproductengine
|
||||
* @date 2015-08-05
|
||||
* @brief
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2013, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if ! defined(LL_llavatarrendernotifier_H)
|
||||
#define LL_llavatarrendernotifier_H
|
||||
|
||||
#include "llnotificationptr.h"
|
||||
|
||||
class LLViewerRegion;
|
||||
|
||||
// Class to notify user about drastic changes in agent's render weights or if other agents
|
||||
// reported that user's agent is too 'heavy' for their settings
|
||||
class LLAvatarRenderNotifier : public LLSingleton<LLAvatarRenderNotifier>
|
||||
{
|
||||
public:
|
||||
LLAvatarRenderNotifier();
|
||||
|
||||
void displayNotification(bool show_over_limit);
|
||||
bool isNotificationVisible();
|
||||
|
||||
void updateNotificationRegion(U32 agentcount, U32 overLimit);
|
||||
void updateNotificationState();
|
||||
void updateNotificationAgent(U32 agentComplexity);
|
||||
|
||||
private:
|
||||
|
||||
LLNotificationPtr mNotificationPtr;
|
||||
|
||||
// to prevent notification from popping up too often, show it only
|
||||
// if certain amount of time passed since previous notification
|
||||
LLFrameTimer mPopUpDelayTimer;
|
||||
|
||||
// values since last notification for comparison purposes
|
||||
U32 mAgentsCount;
|
||||
U32 mOverLimitAgents;
|
||||
U32 mAgentComplexity;
|
||||
F32 mOverLimitPct;
|
||||
|
||||
// last reported values
|
||||
U32 mLatestAgentsCount;
|
||||
U32 mLatestOverLimitAgents;
|
||||
U32 mLatestAgentComplexity;
|
||||
F32 mLatestOverLimitPct;
|
||||
|
||||
bool mShowOverLimitAgents;
|
||||
std::string overLimitMessage();
|
||||
|
||||
// initial outfit related variables (state control)
|
||||
bool mNotifyOutfitLoading;
|
||||
|
||||
// COF (inventory folder) and Skeleton (voavatar) are used to spot changes in outfit.
|
||||
S32 mLastCofVersion;
|
||||
S32 mLastSkeletonSerialNum;
|
||||
// Used to detect changes in voavatar's rezzed status.
|
||||
// If value decreases - there were changes in outfit.
|
||||
S32 mLastOutfitRezStatus;
|
||||
};
|
||||
|
||||
#endif /* ! defined(LL_llavatarrendernotifier_H) */
|
||||
|
|
@ -472,7 +472,9 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)
|
|||
}
|
||||
|
||||
BOOL impostor = avatarp->isImpostor();
|
||||
if (impostor)
|
||||
if (impostor
|
||||
&& LLVOAvatar::AV_DO_NOT_RENDER != avatarp->getVisualMuteSettings()
|
||||
&& LLVOAvatar::AV_ALWAYS_RENDER != avatarp->getVisualMuteSettings())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -1246,7 +1248,9 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
|
||||
BOOL impostor = avatarp->isImpostor() && !single_avatar;
|
||||
|
||||
if (impostor && pass != 0)
|
||||
if (( avatarp->isInMuteList()
|
||||
|| impostor
|
||||
|| (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()) ) && pass != 0)
|
||||
{ //don't draw anything but the impostor for impostored avatars
|
||||
return;
|
||||
}
|
||||
|
|
@ -1263,7 +1267,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
LLVOAvatar::sNumVisibleAvatars++;
|
||||
}
|
||||
|
||||
if (impostor)
|
||||
if (impostor || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()))
|
||||
{
|
||||
if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete())
|
||||
{
|
||||
|
|
@ -1281,13 +1285,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
return;
|
||||
}
|
||||
|
||||
llassert(LLPipeline::sImpostorRender || !avatarp->isVisuallyMuted());
|
||||
|
||||
/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview, 3=morph view
|
||||
{
|
||||
gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f));
|
||||
}*/
|
||||
|
||||
if (pass == 1)
|
||||
{
|
||||
// render rigid meshes (eyeballs) first
|
||||
|
|
@ -1811,7 +1808,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
|
|||
{
|
||||
//order is important here LLRender::DIFFUSE_MAP should be last, becouse it change
|
||||
//(gGL).mCurrTextureUnitIndex
|
||||
gGL.getTexUnit(specular_channel)->bind(face->getTexture(LLRender::SPECULAR_MAP));
|
||||
gGL.getTexUnit(specular_channel)->bind(LLPipeline::sImpostorRender ? LLViewerTextureManager::findTexture(IMG_BLACK_SQUARE_MALEVICH) : face->getTexture(LLRender::SPECULAR_MAP));
|
||||
gGL.getTexUnit(normal_channel)->bind(face->getTexture(LLRender::NORMAL_MAP));
|
||||
gGL.getTexUnit(sDiffuseChannel)->bind(face->getTexture(LLRender::DIFFUSE_MAP), false, true);
|
||||
|
||||
|
|
|
|||
|
|
@ -98,6 +98,10 @@ void LLFeatureList::addFeature(const std::string& name, const BOOL available, co
|
|||
}
|
||||
|
||||
LLFeatureInfo fi(name, available, level);
|
||||
LL_DEBUGS_ONCE("RenderInit") << "Feature '" << name << "' "
|
||||
<< (available ? "" : "not " ) << "available"
|
||||
<< " at " << level
|
||||
<< LL_ENDL;
|
||||
mFeatures[name] = fi;
|
||||
}
|
||||
|
||||
|
|
@ -119,6 +123,7 @@ F32 LLFeatureList::getRecommendedValue(const std::string& name)
|
|||
{
|
||||
if (mFeatures.count(name) && isFeatureAvailable(name))
|
||||
{
|
||||
LL_DEBUGS_ONCE("RenderInit") << "Setting '" << name << "' to recommended value " << mFeatures[name].mRecommendedLevel << LL_ENDL;
|
||||
return mFeatures[name].mRecommendedLevel;
|
||||
}
|
||||
|
||||
|
|
@ -128,7 +133,7 @@ F32 LLFeatureList::getRecommendedValue(const std::string& name)
|
|||
|
||||
BOOL LLFeatureList::maskList(LLFeatureList &mask)
|
||||
{
|
||||
//LL_INFOS() << "Masking with " << mask.mName << LL_ENDL;
|
||||
LL_DEBUGS_ONCE() << "Masking with " << mask.mName << LL_ENDL;
|
||||
//
|
||||
// Lookup the specified feature mask, and overlay it on top of the
|
||||
// current feature mask.
|
||||
|
|
@ -294,7 +299,7 @@ bool LLFeatureManager::loadFeatureTables()
|
|||
app_path += filename;
|
||||
|
||||
|
||||
// second table is downloaded with HTTP
|
||||
// second table is downloaded with HTTP - note that this will only be used on the run _after_ it is downloaded
|
||||
std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename);
|
||||
|
||||
// use HTTP table if it exists
|
||||
|
|
@ -378,11 +383,11 @@ bool LLFeatureManager::parseFeatureTable(std::string filename)
|
|||
file >> name;
|
||||
if (!mMaskList.count(name))
|
||||
{
|
||||
flp = new LLFeatureList(name);
|
||||
mMaskList[name] = flp;
|
||||
}
|
||||
else
|
||||
{
|
||||
flp = new LLFeatureList(name);
|
||||
mMaskList[name] = flp;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL;
|
||||
parse_ok = false;
|
||||
}
|
||||
|
|
@ -391,11 +396,11 @@ bool LLFeatureManager::parseFeatureTable(std::string filename)
|
|||
{
|
||||
if (flp)
|
||||
{
|
||||
S32 available;
|
||||
F32 recommended;
|
||||
file >> available >> recommended;
|
||||
flp->addFeature(name, available, recommended);
|
||||
}
|
||||
S32 available;
|
||||
F32 recommended;
|
||||
file >> available >> recommended;
|
||||
flp->addFeature(name, available, recommended);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL;
|
||||
|
|
@ -604,7 +609,7 @@ void LLFeatureManager::applyRecommendedSettings()
|
|||
// cap the level at 2 (high)
|
||||
U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
|
||||
|
||||
LL_INFOS() << "Applying Recommended Features" << LL_ENDL;
|
||||
LL_INFOS("RenderInit") << "Applying Recommended Features for level " << level << LL_ENDL;
|
||||
|
||||
setGraphicsLevel(level, false);
|
||||
gSavedSettings.setU32("RenderQualityPerformance", level);
|
||||
|
|
@ -811,7 +816,7 @@ void LLFeatureManager::applyBaseMasks()
|
|||
if (osInfo.mMajorVer == 10 && osInfo.mMinorVer < 7)
|
||||
{
|
||||
maskFeatures("OSX_10_6_8");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// now mask by gpu string
|
||||
|
|
|
|||
|
|
@ -0,0 +1,101 @@
|
|||
/**
|
||||
* @file llfloaterdeleteprefpreset.cpp
|
||||
* @brief Floater to delete a graphics / camera preset
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloaterdeleteprefpreset.h"
|
||||
|
||||
#include "llbutton.h"
|
||||
#include "llcombobox.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llfloaterreg.h"
|
||||
|
||||
LLFloaterDeletePrefPreset::LLFloaterDeletePrefPreset(const LLSD &key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterDeletePrefPreset::postBuild()
|
||||
{
|
||||
LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (preferences)
|
||||
{
|
||||
preferences->addDependentFloater(this);
|
||||
}
|
||||
getChild<LLButton>("delete")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnDelete, this));
|
||||
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this));
|
||||
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterDeletePrefPreset::onOpen(const LLSD& key)
|
||||
{
|
||||
mSubdirectory = key.asString();
|
||||
std::string floater_title = getString(std::string("title_") + mSubdirectory);
|
||||
|
||||
setTitle(floater_title);
|
||||
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
EDefaultOptions option = DEFAULT_HIDE;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
}
|
||||
|
||||
void LLFloaterDeletePrefPreset::onBtnDelete()
|
||||
{
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
std::string name = combo->getSimple();
|
||||
|
||||
if (!LLPresetsManager::getInstance()->deletePreset(mSubdirectory, name))
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = name;
|
||||
LLNotificationsUtil::add("PresetNotDeleted", args);
|
||||
}
|
||||
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterDeletePrefPreset::onPresetsListChange()
|
||||
{
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
LLButton* delete_btn = getChild<LLButton>("delete");
|
||||
|
||||
EDefaultOptions option = DEFAULT_HIDE;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
|
||||
delete_btn->setEnabled(0 != combo->getItemCount());
|
||||
}
|
||||
|
||||
void LLFloaterDeletePrefPreset::onBtnCancel()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/**
|
||||
* @file llfloaterdeleteprefpreset.h
|
||||
* @brief Floater to delete a graphics / camera preset
|
||||
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATERDELETEPREFPRESET_H
|
||||
#define LL_LLFLOATERDELETEPREFPRESET_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLComboBox;
|
||||
|
||||
class LLFloaterDeletePrefPreset : public LLFloater
|
||||
{
|
||||
|
||||
public:
|
||||
LLFloaterDeletePrefPreset(const LLSD &key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
void onBtnDelete();
|
||||
void onBtnCancel();
|
||||
|
||||
private:
|
||||
void onPresetsListChange();
|
||||
|
||||
std::string mSubdirectory;
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERDELETEPREFPRESET_H
|
||||
|
|
@ -1,212 +0,0 @@
|
|||
/**
|
||||
* @file llfloaterhardwaresettings.cpp
|
||||
* @brief Menu of all the different graphics hardware settings
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloaterhardwaresettings.h"
|
||||
|
||||
// Viewer includes
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewertexturelist.h"
|
||||
#include "llfeaturemanager.h"
|
||||
#include "llspinctrl.h"
|
||||
#include "llstartup.h"
|
||||
#include "lltextbox.h"
|
||||
#include "llcombobox.h"
|
||||
#include "pipeline.h"
|
||||
|
||||
// Linden library includes
|
||||
#include "llradiogroup.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llwindow.h"
|
||||
#include "llsliderctrl.h"
|
||||
|
||||
LLFloaterHardwareSettings::LLFloaterHardwareSettings(const LLSD& key)
|
||||
: LLFloater(key),
|
||||
|
||||
// these should be set on imminent refresh() call,
|
||||
// but init them anyway
|
||||
mUseVBO(0),
|
||||
mUseAniso(0),
|
||||
mFSAASamples(0),
|
||||
mGamma(0.0),
|
||||
mVideoCardMem(0),
|
||||
mFogRatio(0.0),
|
||||
mProbeHardwareOnStartup(FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
LLFloaterHardwareSettings::~LLFloaterHardwareSettings()
|
||||
{
|
||||
}
|
||||
|
||||
void LLFloaterHardwareSettings::initCallbacks(void)
|
||||
{
|
||||
}
|
||||
|
||||
// menu maintenance functions
|
||||
|
||||
void LLFloaterHardwareSettings::refresh()
|
||||
{
|
||||
LLPanel::refresh();
|
||||
|
||||
mUseVBO = gSavedSettings.getBOOL("RenderVBOEnable");
|
||||
mUseAniso = gSavedSettings.getBOOL("RenderAnisotropic");
|
||||
mFSAASamples = gSavedSettings.getU32("RenderFSAASamples");
|
||||
mGamma = gSavedSettings.getF32("RenderGamma");
|
||||
mVideoCardMem = gSavedSettings.getS32("TextureMemory");
|
||||
mFogRatio = gSavedSettings.getF32("RenderFogRatio");
|
||||
mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup");
|
||||
mCompressTextures = gSavedSettings.getBOOL("RenderCompressTextures");
|
||||
|
||||
getChild<LLUICtrl>("fsaa")->setValue((LLSD::Integer) mFSAASamples);
|
||||
refreshEnabledState();
|
||||
}
|
||||
|
||||
void LLFloaterHardwareSettings::refreshEnabledState()
|
||||
{
|
||||
F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");
|
||||
S32Megabytes min_tex_mem = LLViewerTextureList::getMinVideoRamSetting();
|
||||
S32Megabytes max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(false, mem_multiplier);
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem.value());
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem.value());
|
||||
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
|
||||
!gGLManager.mHasVertexBufferObject)
|
||||
{
|
||||
getChildView("vbo")->setEnabled(FALSE);
|
||||
}
|
||||
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderCompressTextures") ||
|
||||
!gGLManager.mHasVertexBufferObject)
|
||||
{
|
||||
getChildView("texture compression")->setEnabled(FALSE);
|
||||
}
|
||||
|
||||
// if no windlight shaders, turn off nighttime brightness, gamma, and fog distance
|
||||
LLSpinCtrl* gamma_ctrl = getChild<LLSpinCtrl>("gamma");
|
||||
gamma_ctrl->setEnabled(!gPipeline.canUseWindLightShaders());
|
||||
getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders());
|
||||
getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders());
|
||||
|
||||
// anti-aliasing
|
||||
{
|
||||
LLUICtrl* fsaa_ctrl = getChild<LLUICtrl>("fsaa");
|
||||
LLTextBox* fsaa_text = getChild<LLTextBox>("antialiasing label");
|
||||
LLView* fsaa_restart = getChildView("antialiasing restart");
|
||||
|
||||
// Enable or disable the control, the "Antialiasing:" label and the restart warning
|
||||
// based on code support for the feature on the current hardware.
|
||||
|
||||
if (gPipeline.canUseAntiAliasing())
|
||||
{
|
||||
fsaa_ctrl->setEnabled(TRUE);
|
||||
|
||||
// borrow the text color from the gamma control for consistency
|
||||
fsaa_text->setColor(gamma_ctrl->getEnabledTextColor());
|
||||
|
||||
fsaa_restart->setVisible(!gSavedSettings.getBOOL("RenderDeferred"));
|
||||
}
|
||||
else
|
||||
{
|
||||
fsaa_ctrl->setEnabled(FALSE);
|
||||
fsaa_ctrl->setValue((LLSD::Integer) 0);
|
||||
|
||||
// borrow the text color from the gamma control for consistency
|
||||
fsaa_text->setColor(gamma_ctrl->getDisabledTextColor());
|
||||
|
||||
fsaa_restart->setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
BOOL LLFloaterHardwareSettings::postBuild()
|
||||
{
|
||||
childSetAction("OK", onBtnOK, this);
|
||||
childSetAction("Cancel", onBtnCancel, this);
|
||||
|
||||
// Don't do this on Mac as their braindead GL versioning
|
||||
// sets this when 8x and 16x are indeed available
|
||||
//
|
||||
#if !LL_DARWIN
|
||||
if (gGLManager.mIsIntel || gGLManager.mGLVersion < 3.f)
|
||||
{ //remove FSAA settings above "4x"
|
||||
LLComboBox* combo = getChild<LLComboBox>("fsaa");
|
||||
combo->remove("8x");
|
||||
combo->remove("16x");
|
||||
}
|
||||
#endif
|
||||
|
||||
refresh();
|
||||
center();
|
||||
|
||||
// load it up
|
||||
initCallbacks();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterHardwareSettings::apply()
|
||||
{
|
||||
refresh();
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterHardwareSettings::cancel()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterHardwareSettings::onBtnCancel( void* userdata )
|
||||
{
|
||||
LLFloaterHardwareSettings *fp =(LLFloaterHardwareSettings *)userdata;
|
||||
fp->cancel();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterHardwareSettings::onBtnOK( void* userdata )
|
||||
{
|
||||
LLFloaterHardwareSettings *fp =(LLFloaterHardwareSettings *)userdata;
|
||||
fp->apply();
|
||||
fp->closeFloater(false);
|
||||
}
|
||||
|
||||
void LLFloaterHardwareSettings::onClose(bool app_quitting)
|
||||
{
|
||||
gSavedSettings.setBOOL("RenderVBOEnable", mUseVBO);
|
||||
gSavedSettings.setBOOL("RenderAnisotropic", mUseAniso);
|
||||
gSavedSettings.setU32("RenderFSAASamples", mFSAASamples);
|
||||
gSavedSettings.setF32("RenderGamma", mGamma);
|
||||
gSavedSettings.setS32("TextureMemory", mVideoCardMem);
|
||||
gSavedSettings.setF32("RenderFogRatio", mFogRatio);
|
||||
gSavedSettings.setBOOL("ProbeHardwareOnStartup", mProbeHardwareOnStartup );
|
||||
gSavedSettings.setBOOL("RenderCompressTextures", mCompressTextures );
|
||||
}
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
/**
|
||||
* @file llfloaterhardwaresettings.h
|
||||
* @brief Menu of all the different graphics hardware settings
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATER_HARDWARE_SETTINGS_H
|
||||
#define LL_LLFLOATER_HARDWARE_SETTINGS_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
/// Menuing system for all of windlight's functionality
|
||||
class LLFloaterHardwareSettings : public LLFloater
|
||||
{
|
||||
friend class LLFloaterPreference;
|
||||
|
||||
public:
|
||||
|
||||
LLFloaterHardwareSettings(const LLSD& key);
|
||||
/*virtual*/ ~LLFloaterHardwareSettings();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onClose(bool app_quitting);
|
||||
|
||||
/// initialize all the callbacks for the menu
|
||||
void initCallbacks(void);
|
||||
|
||||
/// OK button
|
||||
static void onBtnOK( void* userdata );
|
||||
|
||||
/// Cancel button
|
||||
static void onBtnCancel( void* userdata );
|
||||
|
||||
//// menu management
|
||||
|
||||
/// show off our menu
|
||||
static void show();
|
||||
|
||||
/// return if the menu exists or not
|
||||
static bool isOpen();
|
||||
|
||||
/// sync up menu with parameters
|
||||
void refresh();
|
||||
|
||||
/// Apply the changed values.
|
||||
void apply();
|
||||
|
||||
/// don't apply the changed values
|
||||
void cancel();
|
||||
|
||||
/// refresh the enabled values
|
||||
void refreshEnabledState();
|
||||
|
||||
protected:
|
||||
BOOL mUseVBO;
|
||||
BOOL mUseAniso;
|
||||
BOOL mUseFBO;
|
||||
U32 mFSAASamples;
|
||||
F32 mGamma;
|
||||
S32 mVideoCardMem;
|
||||
F32 mFogRatio;
|
||||
BOOL mProbeHardwareOnStartup;
|
||||
BOOL mCompressTextures;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
/**
|
||||
* @file llfloateloadprefpreset.cpp
|
||||
* @brief Floater to load a graphics / camera preset
|
||||
*
|
||||
* $LicenseInfo:firstyear=2015&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2015, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloaterloadprefpreset.h"
|
||||
|
||||
#include "llbutton.h"
|
||||
#include "llcombobox.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
LLFloaterLoadPrefPreset::LLFloaterLoadPrefPreset(const LLSD &key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterLoadPrefPreset::postBuild()
|
||||
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (preferences)
|
||||
{
|
||||
preferences->addDependentFloater(this);
|
||||
}
|
||||
getChild<LLButton>("ok")->setCommitCallback(boost::bind(&LLFloaterLoadPrefPreset::onBtnOk, this));
|
||||
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterLoadPrefPreset::onBtnCancel, this));
|
||||
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterLoadPrefPreset::onPresetsListChange, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterLoadPrefPreset::onOpen(const LLSD& key)
|
||||
{
|
||||
mSubdirectory = key.asString();
|
||||
std::string floater_title = getString(std::string("title_") + mSubdirectory);
|
||||
|
||||
setTitle(floater_title);
|
||||
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
EDefaultOptions option = DEFAULT_TOP;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
}
|
||||
|
||||
void LLFloaterLoadPrefPreset::onPresetsListChange()
|
||||
{
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
EDefaultOptions option = DEFAULT_TOP;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option);
|
||||
}
|
||||
|
||||
void LLFloaterLoadPrefPreset::onBtnCancel()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterLoadPrefPreset::onBtnOk()
|
||||
{
|
||||
LLComboBox* combo = getChild<LLComboBox>("preset_combo");
|
||||
std::string name = combo->getSimple();
|
||||
|
||||
LLPresetsManager::getInstance()->loadPreset(mSubdirectory, name);
|
||||
|
||||
closeFloater();
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/**
|
||||
* @file llfloaterloadprefpreset.h
|
||||
* @brief Floater to load a graphics / camera preset
|
||||
|
||||
*
|
||||
* $LicenseInfo:firstyear=2015&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2015, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATERLOADPREFPRESET_H
|
||||
#define LL_LLFLOATERLOADPREFPRESET_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLComboBox;
|
||||
|
||||
class LLFloaterLoadPrefPreset : public LLFloater
|
||||
{
|
||||
|
||||
public:
|
||||
LLFloaterLoadPrefPreset(const LLSD &key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
void onBtnOk();
|
||||
void onBtnCancel();
|
||||
|
||||
private:
|
||||
void onPresetsListChange();
|
||||
|
||||
std::string mSubdirectory;
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERLOADPREFPRESET_H
|
||||
|
|
@ -3798,10 +3798,6 @@ BOOL LLModelPreview::render()
|
|||
if (regen)
|
||||
{
|
||||
genBuffers(mPreviewLOD, skin_weight);
|
||||
{
|
||||
LL_INFOS() << "Vertex Buffer[" << mPreviewLOD << "]" << " is EMPTY!!!" << LL_ENDL;
|
||||
regen = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (!skin_weight)
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -58,7 +58,6 @@ typedef enum
|
|||
|
||||
} EGraphicsSettings;
|
||||
|
||||
|
||||
// Floater to control preferences (display, audio, bandwidth, general.
|
||||
class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver, public LLConversationLogObserver
|
||||
{
|
||||
|
|
@ -93,11 +92,11 @@ public:
|
|||
void saveAvatarProperties( void );
|
||||
void selectPrivacyPanel();
|
||||
void selectChatPanel();
|
||||
void getControlNames(std::vector<std::string>& names);
|
||||
|
||||
protected:
|
||||
void onBtnOK();
|
||||
void onBtnCancel();
|
||||
void onBtnApply();
|
||||
void onBtnOK(const LLSD& userdata);
|
||||
void onBtnCancel(const LLSD& userdata);
|
||||
|
||||
void onClickClearCache(); // Clear viewer texture cache, vfs, and VO cache on next startup
|
||||
void onClickBrowserClearCache(); // Clear web history and caches as well as viewer caches above
|
||||
|
|
@ -111,11 +110,13 @@ protected:
|
|||
// if the custom settings box is clicked
|
||||
void onChangeCustom();
|
||||
void updateMeterText(LLUICtrl* ctrl);
|
||||
void onOpenHardwareSettings();
|
||||
// callback for defaults
|
||||
void setHardwareDefaults();
|
||||
void setRecommended();
|
||||
// callback for when client turns on shaders
|
||||
void onVertexShaderEnable();
|
||||
// callback for when client turns on impostors
|
||||
void onAvatarImpostorsEnable();
|
||||
|
||||
// callback for commit in the "Single click on land" and "Double click on land" comboboxes.
|
||||
void onClickActionChange();
|
||||
|
|
@ -123,7 +124,7 @@ protected:
|
|||
void updateClickActionSettings();
|
||||
// updates click/double-click action controls depending on values from settings.xml
|
||||
void updateClickActionControls();
|
||||
|
||||
|
||||
// This function squirrels away the current values of the controls so that
|
||||
// cancel() can restore them.
|
||||
void saveSettings();
|
||||
|
|
@ -150,13 +151,11 @@ public:
|
|||
void enableHistory();
|
||||
void setPersonalInfo(const std::string& visibility, bool im_via_email);
|
||||
void refreshEnabledState();
|
||||
void disableUnavailableSettings();
|
||||
void onCommitWindowedMode();
|
||||
void refresh(); // Refresh enable/disable
|
||||
// if the quality radio buttons are changed
|
||||
void onChangeQuality(const LLSD& data);
|
||||
|
||||
void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box);
|
||||
void refreshUI();
|
||||
|
||||
void onCommitParcelMediaAutoPlayEnable();
|
||||
|
|
@ -170,12 +169,14 @@ public:
|
|||
void onClickPermsDefault();
|
||||
void onClickAutoReplace();
|
||||
void onClickSpellChecker();
|
||||
void onClickAdvanced();
|
||||
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
|
||||
void getUIColor(LLUICtrl* ctrl, const LLSD& param);
|
||||
void onLogChatHistorySaved();
|
||||
void buildPopupLists();
|
||||
static void refreshSkin(void* data);
|
||||
void selectPanel(const LLSD& name);
|
||||
void saveGraphicsPreset(std::string& preset);
|
||||
|
||||
private:
|
||||
|
||||
|
|
@ -196,6 +197,8 @@ private:
|
|||
std::string mDirectoryVisibility;
|
||||
|
||||
LLAvatarData mAvatarProperties;
|
||||
std::string mSavedGraphicsPreset;
|
||||
LOG_CLASS(LLFloaterPreference);
|
||||
};
|
||||
|
||||
class LLPanelPreference : public LLPanel
|
||||
|
|
@ -209,7 +212,7 @@ public:
|
|||
virtual void apply();
|
||||
virtual void cancel();
|
||||
void setControlFalse(const LLSD& user_data);
|
||||
virtual void setHardwareDefaults(){};
|
||||
virtual void setHardwareDefaults();
|
||||
|
||||
// Disables "Allow Media to auto play" check box only when both
|
||||
// "Streaming Music" and "Media" are unchecked. Otherwise enables it.
|
||||
|
|
@ -218,7 +221,11 @@ public:
|
|||
// This function squirrels away the current values of the controls so that
|
||||
// cancel() can restore them.
|
||||
virtual void saveSettings();
|
||||
|
||||
|
||||
void deletePreset(const LLSD& user_data);
|
||||
void savePreset(const LLSD& user_data);
|
||||
void loadPreset(const LLSD& user_data);
|
||||
|
||||
class Updater;
|
||||
|
||||
protected:
|
||||
|
|
@ -235,6 +242,7 @@ private:
|
|||
string_color_map_t mSavedColors;
|
||||
|
||||
Updater* mBandWidthUpdater;
|
||||
LOG_CLASS(LLPanelPreference);
|
||||
};
|
||||
|
||||
class LLPanelPreferenceGraphics : public LLPanelPreference
|
||||
|
|
@ -242,14 +250,45 @@ class LLPanelPreferenceGraphics : public LLPanelPreference
|
|||
public:
|
||||
BOOL postBuild();
|
||||
void draw();
|
||||
void apply();
|
||||
void cancel();
|
||||
void saveSettings();
|
||||
void resetDirtyChilds();
|
||||
void setHardwareDefaults();
|
||||
void setPresetText();
|
||||
|
||||
static const std::string getPresetsPath();
|
||||
|
||||
protected:
|
||||
bool hasDirtyChilds();
|
||||
void resetDirtyChilds();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
void onPresetsListChange();
|
||||
LOG_CLASS(LLPanelPreferenceGraphics);
|
||||
};
|
||||
|
||||
class LLFloaterPreferenceGraphicsAdvanced : public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterPreferenceGraphicsAdvanced(const LLSD& key);
|
||||
~LLFloaterPreferenceGraphicsAdvanced();
|
||||
void onOpen(const LLSD& key);
|
||||
void onClickCloseBtn(bool app_quitting);
|
||||
void disableUnavailableSettings();
|
||||
void refreshEnabledGraphics();
|
||||
void refreshEnabledState();
|
||||
void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box);
|
||||
void updateMaxNonImpostors();
|
||||
void setMaxNonImpostorsText(U32 value, LLTextBox* text_box);
|
||||
void updateMaxComplexity();
|
||||
void setMaxComplexityText(U32 value, LLTextBox* text_box);
|
||||
static void setIndirectControls();
|
||||
static void setIndirectMaxNonImpostors();
|
||||
static void setIndirectMaxArc();
|
||||
void refresh();
|
||||
// callback for when client turns on shaders
|
||||
void onVertexShaderEnable();
|
||||
LOG_CLASS(LLFloaterPreferenceGraphicsAdvanced);
|
||||
};
|
||||
|
||||
class LLFloaterPreferenceProxy : public LLFloater
|
||||
|
|
@ -278,7 +317,7 @@ private:
|
|||
bool mSocksSettingsDirty;
|
||||
typedef std::map<LLControlVariable*, LLSD> control_values_map_t;
|
||||
control_values_map_t mSavedValues;
|
||||
|
||||
LOG_CLASS(LLFloaterPreferenceProxy);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,108 @@
|
|||
/**
|
||||
* @file llfloatersaveprefpreset.cpp
|
||||
* @brief Floater to save a graphics / camera preset
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloatersaveprefpreset.h"
|
||||
|
||||
#include "llbutton.h"
|
||||
#include "llcombobox.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpresetsmanager.h"
|
||||
|
||||
LLFloaterSavePrefPreset::LLFloaterSavePrefPreset(const LLSD &key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterSavePrefPreset::postBuild()
|
||||
{ LLFloaterPreference* preferences = LLFloaterReg::getTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (preferences)
|
||||
{
|
||||
preferences->addDependentFloater(this);
|
||||
}
|
||||
getChild<LLComboBox>("preset_combo")->setTextEntryCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this));
|
||||
getChild<LLComboBox>("preset_combo")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this));
|
||||
getChild<LLButton>("save")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this));
|
||||
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnCancel, this));
|
||||
|
||||
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetsListChange, this));
|
||||
|
||||
mSaveButton = getChild<LLButton>("save");
|
||||
mPresetCombo = getChild<LLComboBox>("preset_combo");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterSavePrefPreset::onPresetNameEdited()
|
||||
{
|
||||
// Disable saving a preset having empty name.
|
||||
std::string name = mPresetCombo->getSimple();
|
||||
|
||||
mSaveButton->setEnabled(!name.empty());
|
||||
}
|
||||
|
||||
void LLFloaterSavePrefPreset::onOpen(const LLSD& key)
|
||||
{
|
||||
mSubdirectory = key.asString();
|
||||
|
||||
std::string floater_title = getString(std::string("title_") + mSubdirectory);
|
||||
|
||||
setTitle(floater_title);
|
||||
|
||||
EDefaultOptions option = DEFAULT_TOP;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option);
|
||||
|
||||
onPresetNameEdited();
|
||||
}
|
||||
|
||||
void LLFloaterSavePrefPreset::onBtnSave()
|
||||
{
|
||||
std::string name = mPresetCombo->getSimple();
|
||||
|
||||
if (!LLPresetsManager::getInstance()->savePreset(mSubdirectory, name))
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = name;
|
||||
LLNotificationsUtil::add("PresetNotSaved", args);
|
||||
}
|
||||
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void LLFloaterSavePrefPreset::onPresetsListChange()
|
||||
{
|
||||
EDefaultOptions option = DEFAULT_TOP;
|
||||
LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option);
|
||||
}
|
||||
|
||||
void LLFloaterSavePrefPreset::onBtnCancel()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
/**
|
||||
* @file llfloatersaveprefpreset.h
|
||||
* @brief Floater to save a graphics / camera preset
|
||||
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATERSAVEPREFPRESET_H
|
||||
#define LL_LLFLOATERSAVEPREFPRESET_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLComboBox;
|
||||
|
||||
class LLFloaterSavePrefPreset : public LLFloater
|
||||
{
|
||||
|
||||
public:
|
||||
LLFloaterSavePrefPreset(const LLSD &key);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
void onBtnSave();
|
||||
void onBtnCancel();
|
||||
|
||||
private:
|
||||
LLComboBox* mPresetCombo;
|
||||
LLButton* mSaveButton;
|
||||
|
||||
void onPresetsListChange();
|
||||
void onPresetNameEdited();
|
||||
|
||||
std::string mSubdirectory;
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERSAVEPREFPRESET_H
|
||||
|
|
@ -1605,7 +1605,7 @@ bool sort_alpha(const LLViewerInventoryCategory* cat1, const LLViewerInventoryCa
|
|||
|
||||
void dump_trace(std::string& message, S32 depth, LLError::ELevel log_level)
|
||||
{
|
||||
LL_INFOS() << "validate_marketplacelistings : error = "<< log_level << ", depth = " << depth << ", message = " << message << LL_ENDL;
|
||||
LL_INFOS("SLM") << "validate_marketplacelistings : error = "<< log_level << ", depth = " << depth << ", message = " << message << LL_ENDL;
|
||||
}
|
||||
|
||||
// Make all relevant business logic checks on the marketplace listings starting with the folder as argument.
|
||||
|
|
|
|||
|
|
@ -3127,7 +3127,10 @@ void LLMeshLODHandler::processData(LLCore::BufferArray * /* body */, S32 /* body
|
|||
|
||||
LLMeshSkinInfoHandler::~LLMeshSkinInfoHandler()
|
||||
{
|
||||
llassert(mProcessed);
|
||||
if (!mProcessed)
|
||||
{
|
||||
LL_WARNS(LOG_MESH) << "deleting unprocessed request handler (may be ok on exit)" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLMeshSkinInfoHandler::processFailure(LLCore::HttpStatus status)
|
||||
|
|
@ -3171,7 +3174,10 @@ void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * /* body */, S32 /*
|
|||
|
||||
LLMeshDecompositionHandler::~LLMeshDecompositionHandler()
|
||||
{
|
||||
llassert(mProcessed);
|
||||
if (!mProcessed)
|
||||
{
|
||||
LL_WARNS(LOG_MESH) << "deleting unprocessed request handler (may be ok on exit)" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLMeshDecompositionHandler::processFailure(LLCore::HttpStatus status)
|
||||
|
|
@ -3214,7 +3220,10 @@ void LLMeshDecompositionHandler::processData(LLCore::BufferArray * /* body */, S
|
|||
|
||||
LLMeshPhysicsShapeHandler::~LLMeshPhysicsShapeHandler()
|
||||
{
|
||||
llassert(mProcessed);
|
||||
if (!mProcessed)
|
||||
{
|
||||
LL_WARNS(LOG_MESH) << "deleting unprocessed request handler (may be ok on exit)" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLMeshPhysicsShapeHandler::processFailure(LLCore::HttpStatus status)
|
||||
|
|
|
|||
|
|
@ -218,6 +218,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
|
|||
if ((mute.mType == LLMute::AGENT)
|
||||
&& isLinden(mute.mName) && (flags & LLMute::flagTextChat || flags == 0))
|
||||
{
|
||||
LL_WARNS() << "Trying to mute a Linden; ignored" << LL_ENDL;
|
||||
LLNotifications::instance().add("MuteLinden", LLSD(), LLSD());
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -226,6 +227,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
|
|||
if (mute.mType == LLMute::AGENT
|
||||
&& mute.mID == gAgent.getID())
|
||||
{
|
||||
LL_WARNS() << "Trying to self; ignored" << LL_ENDL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -256,6 +258,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "duplicate mute ignored" << LL_ENDL;
|
||||
// was duplicate
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,13 +96,13 @@ LLNetMap::LLNetMap (const Params & p)
|
|||
mToolTipMsg(),
|
||||
mPopupMenu(NULL)
|
||||
{
|
||||
mScale = gSavedSettings.getF32("MiniMapScale");
|
||||
mPixelsPerMeter = mScale / REGION_WIDTH_METERS;
|
||||
mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
|
||||
setScale(gSavedSettings.getF32("MiniMapScale"));
|
||||
}
|
||||
|
||||
LLNetMap::~LLNetMap()
|
||||
{
|
||||
gSavedSettings.setF32("MiniMapScale", mScale);
|
||||
}
|
||||
|
||||
BOOL LLNetMap::postBuild()
|
||||
|
|
@ -137,6 +137,8 @@ void LLNetMap::setScale( F32 scale )
|
|||
mPixelsPerMeter = mScale / REGION_WIDTH_METERS;
|
||||
mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
|
||||
|
||||
gSavedSettings.setF32("MiniMapScale", mScale);
|
||||
|
||||
mUpdateNow = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -113,11 +113,23 @@ bool LLTipHandler::processNotification(const LLNotificationPtr& notification)
|
|||
LLToast::Params p;
|
||||
p.notif_id = notification->getID();
|
||||
p.notification = notification;
|
||||
p.lifetime_secs = gSavedSettings.getS32("NotificationTipToastLifeTime");
|
||||
p.panel = notify_box;
|
||||
p.is_tip = true;
|
||||
p.can_be_stored = false;
|
||||
|
||||
|
||||
LLDate cur_time = LLDate::now();
|
||||
LLDate exp_time = notification->getExpiration();
|
||||
if (exp_time > cur_time)
|
||||
{
|
||||
// we have non-default expiration time - keep visible until expires
|
||||
p.lifetime_secs = exp_time.secondsSinceEpoch() - cur_time.secondsSinceEpoch();
|
||||
}
|
||||
else
|
||||
{
|
||||
// use default time
|
||||
p.lifetime_secs = gSavedSettings.getS32("NotificationTipToastLifeTime");
|
||||
}
|
||||
|
||||
LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel.get());
|
||||
if(channel)
|
||||
channel->addToast(p);
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@ extern LLControlGroup gSavedSettings;
|
|||
static const LLUUID PARCEL_MEDIA_LIST_ITEM_UUID = LLUUID("CAB5920F-E484-4233-8621-384CF373A321");
|
||||
static const LLUUID PARCEL_AUDIO_LIST_ITEM_UUID = LLUUID("DF4B020D-8A24-4B95-AB5D-CA970D694822");
|
||||
|
||||
const F32 AUTO_CLOSE_FADE_TIME_START= 2.0f;
|
||||
const F32 AUTO_CLOSE_FADE_TIME_END = 3.0f;
|
||||
|
||||
//
|
||||
// LLPanelNearByMedia
|
||||
//
|
||||
|
|
@ -227,9 +230,6 @@ void LLPanelNearByMedia::reshape(S32 width, S32 height, BOOL called_from_parent)
|
|||
|
||||
}
|
||||
|
||||
const F32 AUTO_CLOSE_FADE_TIME_START= 4.0f;
|
||||
const F32 AUTO_CLOSE_FADE_TIME_END = 5.0f;
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelNearByMedia::draw()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,224 @@
|
|||
/**
|
||||
* @file llpanelpresetspulldown.cpp
|
||||
* @brief A panel showing a quick way to pick presets
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llpanelpresetspulldown.h"
|
||||
|
||||
#include "llviewercontrol.h"
|
||||
#include "llstatusbar.h"
|
||||
|
||||
#include "llbutton.h"
|
||||
#include "lltabcontainer.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llsliderctrl.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
|
||||
/* static */ const F32 LLPanelPresetsPulldown::sAutoCloseFadeStartTimeSec = 2.0f;
|
||||
/* static */ const F32 LLPanelPresetsPulldown::sAutoCloseTotalTimeSec = 3.0f;
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLPanelPresetsPulldown
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
// Default constructor
|
||||
LLPanelPresetsPulldown::LLPanelPresetsPulldown()
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
|
||||
mCommitCallbackRegistrar.add("Presets.GoGraphicsPrefs", boost::bind(&LLPanelPresetsPulldown::onGraphicsButtonClick, this, _2));
|
||||
mCommitCallbackRegistrar.add("Presets.RowClick", boost::bind(&LLPanelPresetsPulldown::onRowClick, this, _2));
|
||||
|
||||
buildFromFile( "panel_presets_pulldown.xml");
|
||||
}
|
||||
|
||||
BOOL LLPanelPresetsPulldown::postBuild()
|
||||
{
|
||||
LLPresetsManager* presetsMgr = LLPresetsManager::getInstance();
|
||||
presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPresetsPulldown::populatePanel, this));
|
||||
// Make sure there is a default preference file
|
||||
presetsMgr->createMissingDefault();
|
||||
|
||||
populatePanel();
|
||||
|
||||
return LLPanel::postBuild();
|
||||
}
|
||||
|
||||
void LLPanelPresetsPulldown::populatePanel()
|
||||
{
|
||||
std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_GRAPHIC);
|
||||
LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, mPresetNames, DEFAULT_TOP);
|
||||
|
||||
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_list");
|
||||
|
||||
if (scroll && mPresetNames.begin() != mPresetNames.end())
|
||||
{
|
||||
scroll->clearRows();
|
||||
|
||||
for (std::list<std::string>::const_iterator it = mPresetNames.begin(); it != mPresetNames.end(); ++it)
|
||||
{
|
||||
const std::string& name = *it;
|
||||
LL_DEBUGS() << "adding '" << name << "'" << LL_ENDL;
|
||||
|
||||
LLSD row;
|
||||
row["columns"][0]["column"] = "preset_name";
|
||||
row["columns"][0]["value"] = name;
|
||||
|
||||
bool is_selected_preset = false;
|
||||
if (name == gSavedSettings.getString("PresetGraphicActive"))
|
||||
{
|
||||
row["columns"][1]["column"] = "icon";
|
||||
row["columns"][1]["type"] = "icon";
|
||||
row["columns"][1]["value"] = "Check_Mark";
|
||||
|
||||
is_selected_preset = true;
|
||||
}
|
||||
|
||||
LLScrollListItem* new_item = scroll->addElement(row);
|
||||
new_item->setSelected(is_selected_preset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
LLPanel::onMouseEnter(x,y,mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onTopLost()
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPresetsPulldown::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleMouseDown(x,y,mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPresetsPulldown::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleRightMouseDown(x, y, mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
BOOL LLPanelPresetsPulldown::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLPanel::handleDoubleClick(x, y, mask);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mHoverTimer.start();
|
||||
LLPanel::onMouseLeave(x,y,mask);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLPanelPresetsPulldown::onVisibilityChange ( BOOL new_visibility )
|
||||
{
|
||||
if (new_visibility)
|
||||
{
|
||||
mHoverTimer.start(); // timer will be stopped when mouse hovers over panel
|
||||
}
|
||||
else
|
||||
{
|
||||
mHoverTimer.stop();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPresetsPulldown::onRowClick(const LLSD& user_data)
|
||||
{
|
||||
LLScrollListCtrl* scroll = getChild<LLScrollListCtrl>("preset_list");
|
||||
|
||||
if (scroll)
|
||||
{
|
||||
LLScrollListItem* item = scroll->getFirstSelected();
|
||||
if (item)
|
||||
{
|
||||
std::string name = item->getColumn(1)->getValue().asString();
|
||||
|
||||
LL_DEBUGS() << "selected '" << name << "'" << LL_ENDL;
|
||||
LLPresetsManager::getInstance()->loadPreset(PRESETS_GRAPHIC, name);
|
||||
|
||||
setVisible(FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "none selected" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "no scroll" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPresetsPulldown::onGraphicsButtonClick(const LLSD& user_data)
|
||||
{
|
||||
// close the minicontrol, we're bringing up the big one
|
||||
setVisible(FALSE);
|
||||
|
||||
// bring up the prefs floater
|
||||
LLFloater* prefsfloater = LLFloaterReg::showInstance("preferences");
|
||||
if (prefsfloater)
|
||||
{
|
||||
// grab the 'graphics' panel from the preferences floater and
|
||||
// bring it the front!
|
||||
LLTabContainer* tabcontainer = prefsfloater->getChild<LLTabContainer>("pref core");
|
||||
LLPanel* graphicspanel = prefsfloater->getChild<LLPanel>("display");
|
||||
if (tabcontainer && graphicspanel)
|
||||
{
|
||||
tabcontainer->selectTabPanel(graphicspanel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLPanelPresetsPulldown::draw()
|
||||
{
|
||||
F32 alpha = mHoverTimer.getStarted()
|
||||
? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f)
|
||||
: 1.0f;
|
||||
LLViewDrawContext context(alpha);
|
||||
|
||||
LLPanel::draw();
|
||||
|
||||
if (alpha == 0.f)
|
||||
{
|
||||
setVisible(FALSE);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/**
|
||||
* @file llpanelpresetspulldown.h
|
||||
* @brief A panel showing a quick way to pick presets
|
||||
*
|
||||
* $LicenseInfo:firstyear=2014&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2014, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELPRESETSPULLDOWN_H
|
||||
#define LL_LLPANELPRESETSPULLDOWN_H
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llpanel.h"
|
||||
|
||||
class LLFrameTimer;
|
||||
|
||||
class LLPanelPresetsPulldown : public LLPanel
|
||||
{
|
||||
public:
|
||||
LLPanelPresetsPulldown();
|
||||
/*virtual*/ void draw();
|
||||
/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void onTopLost();
|
||||
/*virtual*/ void onVisibilityChange ( BOOL new_visibility );
|
||||
/*virtual*/ BOOL postBuild();
|
||||
void populatePanel();
|
||||
|
||||
private:
|
||||
void onGraphicsButtonClick(const LLSD& user_data);
|
||||
void onRowClick(const LLSD& user_data);
|
||||
|
||||
std::list<std::string> mPresetNames;
|
||||
LLFrameTimer mHoverTimer;
|
||||
static const F32 sAutoCloseFadeStartTimeSec;
|
||||
static const F32 sAutoCloseTotalTimeSec;
|
||||
LOG_CLASS(LLPanelPresetsPulldown);
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELPRESETSPULLDOWN_H
|
||||
|
|
@ -168,7 +168,7 @@ public:
|
|||
{
|
||||
if (params.size() > 2)
|
||||
{
|
||||
const std::string object_name = params[2].asString();
|
||||
const std::string object_name = LLURI::unescape(params[2].asString());
|
||||
LLMute mute(avatar_id, object_name, LLMute::OBJECT);
|
||||
LLMuteList::getInstance()->add(mute);
|
||||
LLPanelBlockedList::showPanelAndSelect(mute.mID);
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@
|
|||
#include "llfloaterpreference.h"
|
||||
#include "llsliderctrl.h"
|
||||
|
||||
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseFadeStartTimeSec = 4.0f;
|
||||
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseTotalTimeSec = 5.0f;
|
||||
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseFadeStartTimeSec = 2.0f;
|
||||
/* static */ const F32 LLPanelVolumePulldown::sAutoCloseTotalTimeSec = 3.0f;
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLPanelVolumePulldown
|
||||
|
|
|
|||
|
|
@ -0,0 +1,320 @@
|
|||
/**
|
||||
* @file llpresetsmanager.cpp
|
||||
* @brief Implementation for the LLPresetsManager class.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include <boost/assign/list_of.hpp>
|
||||
|
||||
#include "llpresetsmanager.h"
|
||||
|
||||
#include "lldiriterator.h"
|
||||
#include "llfloater.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "lltrans.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterreg.h"
|
||||
|
||||
LLPresetsManager::LLPresetsManager()
|
||||
{
|
||||
}
|
||||
|
||||
LLPresetsManager::~LLPresetsManager()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPresetsManager::triggerChangeSignal()
|
||||
{
|
||||
mPresetListChangeSignal();
|
||||
}
|
||||
|
||||
void LLPresetsManager::createMissingDefault()
|
||||
{
|
||||
std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml");
|
||||
if (!gDirUtilp->fileExists(default_file))
|
||||
{
|
||||
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
|
||||
|
||||
// Write current graphic settings as the default
|
||||
savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory)
|
||||
{
|
||||
std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR);
|
||||
std::string full_path;
|
||||
|
||||
if (!gDirUtilp->fileExists(presets_path))
|
||||
{
|
||||
LLFile::mkdir(presets_path);
|
||||
}
|
||||
|
||||
full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory);
|
||||
if (!gDirUtilp->fileExists(full_path))
|
||||
{
|
||||
LLFile::mkdir(full_path);
|
||||
}
|
||||
|
||||
return full_path;
|
||||
}
|
||||
|
||||
void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option)
|
||||
{
|
||||
LL_INFOS("AppInit") << "Loading list of preset names from " << dir << LL_ENDL;
|
||||
|
||||
mPresetNames.clear();
|
||||
|
||||
LLDirIterator dir_iter(dir, "*.xml");
|
||||
bool found = true;
|
||||
while (found)
|
||||
{
|
||||
std::string file;
|
||||
found = dir_iter.next(file);
|
||||
|
||||
if (found)
|
||||
{
|
||||
std::string path = gDirUtilp->add(dir, file);
|
||||
std::string name = gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true);
|
||||
|
||||
LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL;
|
||||
|
||||
if (PRESETS_DEFAULT != name)
|
||||
{
|
||||
mPresetNames.push_back(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (default_option)
|
||||
{
|
||||
case DEFAULT_SHOW:
|
||||
mPresetNames.push_back(LLTrans::getString(PRESETS_DEFAULT));
|
||||
break;
|
||||
|
||||
case DEFAULT_TOP:
|
||||
mPresetNames.push_front(LLTrans::getString(PRESETS_DEFAULT));
|
||||
break;
|
||||
|
||||
case DEFAULT_HIDE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
presets = mPresetNames;
|
||||
}
|
||||
|
||||
bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name)
|
||||
{
|
||||
if (LLTrans::getString(PRESETS_DEFAULT) == name)
|
||||
{
|
||||
name = PRESETS_DEFAULT;
|
||||
}
|
||||
|
||||
bool saved = false;
|
||||
std::vector<std::string> name_list;
|
||||
|
||||
if(PRESETS_GRAPHIC == subdirectory)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
|
||||
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (instance)
|
||||
{
|
||||
instance->getControlNames(name_list);
|
||||
LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
|
||||
name_list.push_back("PresetGraphicActive");
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "preferences floater instance not found" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else if(PRESETS_CAMERA == subdirectory)
|
||||
{
|
||||
name_list = boost::assign::list_of
|
||||
("Placeholder");
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
|
||||
}
|
||||
|
||||
if (name_list.size() > 1) // if the active preset name is the only thing in the list, don't save the list
|
||||
{
|
||||
// make an empty llsd
|
||||
LLSD paramsData(LLSD::emptyMap());
|
||||
|
||||
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
|
||||
std::string comment = ctrl->getComment();
|
||||
std::string type = gSavedSettings.typeEnumToString(ctrl->type());
|
||||
LLSD value = ctrl->getValue();
|
||||
|
||||
paramsData[ctrl_name]["Comment"] = comment;
|
||||
paramsData[ctrl_name]["Persist"] = 1;
|
||||
paramsData[ctrl_name]["Type"] = type;
|
||||
paramsData[ctrl_name]["Value"] = value;
|
||||
}
|
||||
|
||||
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
|
||||
|
||||
// write to file
|
||||
llofstream presetsXML(pathName.c_str());
|
||||
if (presetsXML.is_open())
|
||||
{
|
||||
|
||||
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
|
||||
formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
|
||||
presetsXML.close();
|
||||
saved = true;
|
||||
|
||||
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
|
||||
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "No settings found; preferences floater has not yet been created" << LL_ENDL;
|
||||
}
|
||||
|
||||
return saved;
|
||||
}
|
||||
|
||||
void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option)
|
||||
{
|
||||
combo->clearRows();
|
||||
|
||||
std::string presets_dir = getPresetsDir(subdirectory);
|
||||
|
||||
if (!presets_dir.empty())
|
||||
{
|
||||
std::list<std::string> preset_names;
|
||||
loadPresetNamesFromDir(presets_dir, preset_names, default_option);
|
||||
|
||||
std::string preset_graphic_active = gSavedSettings.getString("PresetGraphicActive");
|
||||
|
||||
if (preset_names.begin() != preset_names.end())
|
||||
{
|
||||
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
|
||||
{
|
||||
const std::string& name = *it;
|
||||
combo->add(name, LLSD().with(0, name));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
combo->setLabel(LLTrans::getString("preset_combo_label"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string name)
|
||||
{
|
||||
if (LLTrans::getString(PRESETS_DEFAULT) == name)
|
||||
{
|
||||
name = PRESETS_DEFAULT;
|
||||
}
|
||||
|
||||
std::string full_path(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
|
||||
|
||||
LL_DEBUGS() << "attempting to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
|
||||
|
||||
if(gSavedSettings.loadFromFile(full_path, false, true) > 0)
|
||||
{
|
||||
if(PRESETS_GRAPHIC == subdirectory)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
}
|
||||
|
||||
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (instance)
|
||||
{
|
||||
instance->refreshEnabledGraphics();
|
||||
}
|
||||
triggerChangeSignal();
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "failed to load preset '"<<name<<"' from '"<<full_path<<"'" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
bool LLPresetsManager::deletePreset(const std::string& subdirectory, std::string name)
|
||||
{
|
||||
if (LLTrans::getString(PRESETS_DEFAULT) == name)
|
||||
{
|
||||
name = PRESETS_DEFAULT;
|
||||
}
|
||||
|
||||
bool sts = true;
|
||||
|
||||
if (PRESETS_DEFAULT == name)
|
||||
{
|
||||
// This code should never execute
|
||||
LL_WARNS("Presets") << "You are not allowed to delete the default preset." << LL_ENDL;
|
||||
sts = false;
|
||||
}
|
||||
|
||||
if (gDirUtilp->deleteFilesInDir(getPresetsDir(subdirectory), LLURI::escape(name) + ".xml") < 1)
|
||||
{
|
||||
LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL;
|
||||
sts = false;
|
||||
}
|
||||
|
||||
// If you delete the preset that is currently marked as loaded then also indicate that no preset is loaded.
|
||||
if (gSavedSettings.getString("PresetGraphicActive") == name)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", "");
|
||||
}
|
||||
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
|
||||
return sts;
|
||||
}
|
||||
|
||||
boost::signals2::connection LLPresetsManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
|
||||
{
|
||||
return mPresetListChangeSignal.connect(cb);
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
/**
|
||||
* @file llpresetsmanager.h
|
||||
* @brief Implementation for the LLPresetsManager class.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_PRESETSMANAGER_H
|
||||
#define LL_PRESETSMANAGER_H
|
||||
|
||||
#include "llcombobox.h"
|
||||
|
||||
#include <list>
|
||||
#include <map>
|
||||
|
||||
static const std::string PRESETS_DEFAULT = "Default";
|
||||
static const std::string PRESETS_DIR = "presets";
|
||||
static const std::string PRESETS_GRAPHIC = "graphic";
|
||||
static const std::string PRESETS_CAMERA = "camera";
|
||||
|
||||
enum EDefaultOptions
|
||||
{
|
||||
DEFAULT_SHOW,
|
||||
DEFAULT_TOP,
|
||||
DEFAULT_HIDE // Do not display "Default" in a list
|
||||
};
|
||||
|
||||
class LLPresetsManager : public LLSingleton<LLPresetsManager>
|
||||
{
|
||||
public:
|
||||
|
||||
typedef std::list<std::string> preset_name_list_t;
|
||||
typedef boost::signals2::signal<void()> preset_list_signal_t;
|
||||
|
||||
void createMissingDefault();
|
||||
void triggerChangeSignal();
|
||||
static std::string getPresetsDir(const std::string& subdirectory);
|
||||
void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
|
||||
void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option);
|
||||
bool savePreset(const std::string& subdirectory, std::string name);
|
||||
void loadPreset(const std::string& subdirectory, std::string name);
|
||||
bool deletePreset(const std::string& subdirectory, std::string name);
|
||||
|
||||
// Emitted when a preset gets loaded, deleted, or saved.
|
||||
boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
|
||||
|
||||
// Emitted when a preset gets loaded or saved.
|
||||
|
||||
preset_name_list_t mPresetNames;
|
||||
|
||||
LLPresetsManager();
|
||||
~LLPresetsManager();
|
||||
|
||||
preset_list_signal_t mPresetListChangeSignal;
|
||||
|
||||
private:
|
||||
LOG_CLASS(LLPresetsManager);
|
||||
};
|
||||
|
||||
#endif // LL_PRESETSMANAGER_H
|
||||
|
|
@ -862,10 +862,7 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node)
|
|||
{
|
||||
if (bridge->mAvatar.notNull())
|
||||
{
|
||||
bridge->mAvatar->mAttachmentGeometryBytes -= mGeometryBytes;
|
||||
bridge->mAvatar->mAttachmentGeometryBytes = llmax(bridge->mAvatar->mAttachmentGeometryBytes, 0);
|
||||
bridge->mAvatar->mAttachmentSurfaceArea -= mSurfaceArea;
|
||||
bridge->mAvatar->mAttachmentSurfaceArea = llmax(bridge->mAvatar->mAttachmentSurfaceArea, 0.f);
|
||||
bridge->mAvatar->subtractAttachmentArea(mSurfaceArea );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include "llfloaterbuycurrency.h"
|
||||
#include "llbuycurrencyhtml.h"
|
||||
#include "llpanelnearbymedia.h"
|
||||
#include "llpanelpresetspulldown.h"
|
||||
#include "llpanelvolumepulldown.h"
|
||||
#include "llfloaterregioninfo.h"
|
||||
#include "llfloaterscriptdebug.h"
|
||||
|
|
@ -170,6 +171,9 @@ BOOL LLStatusBar::postBuild()
|
|||
|
||||
mBtnStats = getChildView("stat_btn");
|
||||
|
||||
mIconPresets = getChild<LLIconCtrl>( "presets_icon" );
|
||||
mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this));
|
||||
|
||||
mBtnVolume = getChild<LLButton>( "volume_btn" );
|
||||
mBtnVolume->setClickedCallback( onClickVolume, this );
|
||||
mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this));
|
||||
|
|
@ -223,6 +227,11 @@ BOOL LLStatusBar::postBuild()
|
|||
mSGPacketLoss = LLUICtrlFactory::create<LLStatGraph>(pgp);
|
||||
addChild(mSGPacketLoss);
|
||||
|
||||
mPanelPresetsPulldown = new LLPanelPresetsPulldown();
|
||||
addChild(mPanelPresetsPulldown);
|
||||
mPanelPresetsPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
|
||||
mPanelPresetsPulldown->setVisible(FALSE);
|
||||
|
||||
mPanelVolumePulldown = new LLPanelVolumePulldown();
|
||||
addChild(mPanelVolumePulldown);
|
||||
mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
|
||||
|
|
@ -316,6 +325,7 @@ void LLStatusBar::setVisibleForMouselook(bool visible)
|
|||
mSGBandwidth->setVisible(visible);
|
||||
mSGPacketLoss->setVisible(visible);
|
||||
setBackgroundVisible(visible);
|
||||
mIconPresets->setVisible(visible);
|
||||
}
|
||||
|
||||
void LLStatusBar::debitBalance(S32 debit)
|
||||
|
|
@ -460,8 +470,32 @@ void LLStatusBar::onClickBuyCurrency()
|
|||
LLFirstUse::receiveLindens(false);
|
||||
}
|
||||
|
||||
void LLStatusBar::onMouseEnterPresets()
|
||||
{
|
||||
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
|
||||
LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon" );
|
||||
LLRect icon_rect = icon->getRect();
|
||||
LLRect pulldown_rect = mPanelPresetsPulldown->getRect();
|
||||
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
|
||||
(pulldown_rect.getWidth() - icon_rect.getWidth()),
|
||||
icon_rect.mBottom,
|
||||
pulldown_rect.getWidth(),
|
||||
pulldown_rect.getHeight());
|
||||
|
||||
pulldown_rect.translate(popup_holder->getRect().getWidth() - pulldown_rect.mRight, 0);
|
||||
mPanelPresetsPulldown->setShape(pulldown_rect);
|
||||
|
||||
// show the master presets pull-down
|
||||
LLUI::clearPopups();
|
||||
LLUI::addPopup(mPanelPresetsPulldown);
|
||||
mPanelNearByMedia->setVisible(FALSE);
|
||||
mPanelVolumePulldown->setVisible(FALSE);
|
||||
mPanelPresetsPulldown->setVisible(TRUE);
|
||||
}
|
||||
|
||||
void LLStatusBar::onMouseEnterVolume()
|
||||
{
|
||||
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
|
||||
LLButton* volbtn = getChild<LLButton>( "volume_btn" );
|
||||
LLRect vol_btn_rect = volbtn->getRect();
|
||||
LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect();
|
||||
|
|
@ -471,12 +505,14 @@ void LLStatusBar::onMouseEnterVolume()
|
|||
volume_pulldown_rect.getWidth(),
|
||||
volume_pulldown_rect.getHeight());
|
||||
|
||||
volume_pulldown_rect.translate(popup_holder->getRect().getWidth() - volume_pulldown_rect.mRight, 0);
|
||||
mPanelVolumePulldown->setShape(volume_pulldown_rect);
|
||||
|
||||
|
||||
// show the master volume pull-down
|
||||
LLUI::clearPopups();
|
||||
LLUI::addPopup(mPanelVolumePulldown);
|
||||
mPanelPresetsPulldown->setVisible(FALSE);
|
||||
mPanelNearByMedia->setVisible(FALSE);
|
||||
mPanelVolumePulldown->setVisible(TRUE);
|
||||
}
|
||||
|
|
@ -500,6 +536,7 @@ void LLStatusBar::onMouseEnterNearbyMedia()
|
|||
LLUI::clearPopups();
|
||||
LLUI::addPopup(mPanelNearByMedia);
|
||||
|
||||
mPanelPresetsPulldown->setVisible(FALSE);
|
||||
mPanelVolumePulldown->setVisible(FALSE);
|
||||
mPanelNearByMedia->setVisible(TRUE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,8 +41,10 @@ class LLUICtrl;
|
|||
class LLUUID;
|
||||
class LLFrameTimer;
|
||||
class LLStatGraph;
|
||||
class LLPanelPresetsPulldown;
|
||||
class LLPanelVolumePulldown;
|
||||
class LLPanelNearByMedia;
|
||||
class LLIconCtrl;
|
||||
|
||||
class LLStatusBar
|
||||
: public LLPanel
|
||||
|
|
@ -89,6 +91,7 @@ private:
|
|||
void onClickBuyCurrency();
|
||||
void onVolumeChanged(const LLSD& newvalue);
|
||||
|
||||
void onMouseEnterPresets();
|
||||
void onMouseEnterVolume();
|
||||
void onMouseEnterNearbyMedia();
|
||||
void onClickScreen(S32 x, S32 y);
|
||||
|
|
@ -103,6 +106,7 @@ private:
|
|||
LLStatGraph *mSGPacketLoss;
|
||||
|
||||
LLView *mBtnStats;
|
||||
LLIconCtrl *mIconPresets;
|
||||
LLButton *mBtnVolume;
|
||||
LLTextBox *mBoxBalance;
|
||||
LLButton *mMediaToggle;
|
||||
|
|
@ -115,6 +119,7 @@ private:
|
|||
S32 mSquareMetersCommitted;
|
||||
LLFrameTimer* mBalanceTimer;
|
||||
LLFrameTimer* mHealthTimer;
|
||||
LLPanelPresetsPulldown* mPanelPresetsPulldown;
|
||||
LLPanelVolumePulldown* mPanelVolumePulldown;
|
||||
LLPanelNearByMedia* mPanelNearByMedia;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -167,11 +167,6 @@ static bool handleRenderPerfTestChanged(const LLSD& newvalue)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool handleRenderAvatarComplexityLimitChanged(const LLSD& newvalue)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool handleRenderTransparentWaterChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLWorld::getInstance()->updateWaterObjects();
|
||||
|
|
@ -224,12 +219,6 @@ static bool handleAvatarPhysicsLODChanged(const LLSD& newvalue)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool handleAvatarMaxVisibleChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLVOAvatar::sMaxVisible = (U32) newvalue.asInteger();
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool handleTerrainLODChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal();
|
||||
|
|
@ -423,12 +412,6 @@ static bool handleRenderBumpChanged(const LLSD& newval)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
|
||||
{
|
||||
LLVOAvatar::sUseImpostors = newvalue.asBoolean();
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool handleRenderDebugGLChanged(const LLSD& newvalue)
|
||||
{
|
||||
gDebugGL = newvalue.asBoolean() || gDebugSession;
|
||||
|
|
@ -635,8 +618,6 @@ void settings_setup_listeners()
|
|||
gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarMaxVisible")->getSignal()->connect(boost::bind(&handleAvatarMaxVisibleChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarComplexityLimit")->getSignal()->connect(boost::bind(&handleRenderAvatarComplexityLimitChanged, _2));
|
||||
gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2));
|
||||
|
|
@ -654,7 +635,6 @@ void settings_setup_listeners()
|
|||
gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));
|
||||
gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _2));
|
||||
gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));
|
||||
gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));
|
||||
gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@
|
|||
#include "llfloaterconversationlog.h"
|
||||
#include "llfloaterconversationpreview.h"
|
||||
#include "llfloaterdeleteenvpreset.h"
|
||||
#include "llfloaterdeleteprefpreset.h"
|
||||
#include "llfloaterdestinations.h"
|
||||
#include "llfloaterdisplayname.h"
|
||||
#include "llfloatereditdaycycle.h"
|
||||
|
|
@ -71,7 +72,6 @@
|
|||
#include "llfloatergesture.h"
|
||||
#include "llfloatergodtools.h"
|
||||
#include "llfloatergroups.h"
|
||||
#include "llfloaterhardwaresettings.h"
|
||||
#include "llfloaterhelpbrowser.h"
|
||||
#include "llfloaterhoverheight.h"
|
||||
#include "llfloaterhud.h"
|
||||
|
|
@ -83,6 +83,7 @@
|
|||
#include "llfloaterlagmeter.h"
|
||||
#include "llfloaterland.h"
|
||||
#include "llfloaterlandholdings.h"
|
||||
#include "llfloaterloadprefpreset.h"
|
||||
#include "llfloatermap.h"
|
||||
#include "llfloatermarketplacelistings.h"
|
||||
#include "llfloatermediasettings.h"
|
||||
|
|
@ -106,6 +107,7 @@
|
|||
#include "llfloaterregioninfo.h"
|
||||
#include "llfloaterregionrestarting.h"
|
||||
#include "llfloaterreporter.h"
|
||||
#include "llfloatersaveprefpreset.h"
|
||||
#include "llfloatersceneloadstats.h"
|
||||
#include "llfloaterscriptdebug.h"
|
||||
#include "llfloaterscriptedprefs.h"
|
||||
|
|
@ -211,6 +213,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("compile_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCompileQueue>);
|
||||
LLFloaterReg::add("conversation", "floater_conversation_log.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterConversationLog>);
|
||||
|
||||
LLFloaterReg::add("delete_pref_preset", "floater_delete_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDeletePrefPreset>);
|
||||
LLFloaterReg::add("destinations", "floater_destinations.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDestinations>);
|
||||
|
||||
LLFloaterReg::add("env_post_process", "floater_post_process.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostProcess>);
|
||||
|
|
@ -252,6 +255,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
|
||||
LLFloaterReg::add("lagmeter", "floater_lagmeter.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLagMeter>);
|
||||
LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLandHoldings>);
|
||||
LLFloaterReg::add("load_pref_preset", "floater_load_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLoadPrefPreset>);
|
||||
|
||||
LLFloaterReg::add("mem_leaking", "floater_mem_leaking.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMemLeak>);
|
||||
|
||||
|
|
@ -285,8 +289,8 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("perms_default", "floater_perms_default.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPermsDefault>);
|
||||
LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
|
||||
LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
|
||||
LLFloaterReg::add("prefs_graphics_advanced", "floater_preferences_graphics_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceGraphicsAdvanced>);
|
||||
LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);
|
||||
LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);
|
||||
LLFloaterReg::add("prefs_spellchecker_import", "floater_spellcheck_import.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSpellCheckerImport>);
|
||||
LLFloaterReg::add("prefs_translation", "floater_translation_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTranslationSettings>);
|
||||
LLFloaterReg::add("prefs_spellchecker", "floater_spellcheck.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSpellCheckerSettings>);
|
||||
|
|
@ -303,6 +307,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("preview_texture", "floater_preview_texture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewTexture>, "preview");
|
||||
LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProperties>);
|
||||
LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
|
||||
LLFloaterReg::add("save_pref_preset", "floater_save_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSavePrefPreset>);
|
||||
LLFloaterReg::add("script_colors", "floater_script_ed_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptEdPrefs>);
|
||||
|
||||
LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build<LLFloaterTelehub>);
|
||||
|
|
|
|||
|
|
@ -1041,10 +1041,6 @@ U32 info_display_from_string(std::string info_display)
|
|||
{
|
||||
return LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY;
|
||||
}
|
||||
else if ("shame" == info_display)
|
||||
{
|
||||
return LLPipeline::RENDER_DEBUG_SHAME;
|
||||
}
|
||||
else if ("texture area" == info_display)
|
||||
{
|
||||
return LLPipeline::RENDER_DEBUG_TEXTURE_AREA;
|
||||
|
|
@ -1073,9 +1069,9 @@ U32 info_display_from_string(std::string info_display)
|
|||
{
|
||||
return LLPipeline::RENDER_DEBUG_COMPOSITION;
|
||||
}
|
||||
else if ("attachment bytes" == info_display)
|
||||
else if ("avatardrawinfo" == info_display)
|
||||
{
|
||||
return LLPipeline::RENDER_DEBUG_ATTACHMENT_BYTES;
|
||||
return (LLPipeline::RENDER_DEBUG_AVATAR_DRAW_INFO);
|
||||
}
|
||||
else if ("glow" == info_display)
|
||||
{
|
||||
|
|
@ -1111,6 +1107,7 @@ U32 info_display_from_string(std::string info_display)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "unrecognized feature name '" << info_display << "'" << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
|
@ -2929,6 +2926,8 @@ BOOL enable_object_build(void*)
|
|||
|
||||
bool enable_object_edit()
|
||||
{
|
||||
if (!isAgentAvatarValid()) return false;
|
||||
|
||||
// *HACK: The new "prelude" Help Islands have a build sandbox area,
|
||||
// so users need the Edit and Create pie menu options when they are
|
||||
// there. Eventually this needs to be replaced with code that only
|
||||
|
|
@ -3089,11 +3088,11 @@ class LLAvatarCheckImpostorMode : public view_listener_t
|
|||
switch (mode)
|
||||
{
|
||||
case 0:
|
||||
return (avatar->getVisualMuteSettings() == LLVOAvatar::VISUAL_MUTE_NOT_SET);
|
||||
return (avatar->getVisualMuteSettings() == LLVOAvatar::AV_RENDER_NORMALLY);
|
||||
case 1:
|
||||
return (avatar->getVisualMuteSettings() == LLVOAvatar::ALWAYS_VISUAL_MUTE);
|
||||
return (avatar->getVisualMuteSettings() == LLVOAvatar::AV_DO_NOT_RENDER);
|
||||
case 2:
|
||||
return (avatar->getVisualMuteSettings() == LLVOAvatar::NEVER_VISUAL_MUTE);
|
||||
return (avatar->getVisualMuteSettings() == LLVOAvatar::AV_ALWAYS_RENDER);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
@ -3115,19 +3114,18 @@ class LLAvatarSetImpostorMode : public view_listener_t
|
|||
switch (mode)
|
||||
{
|
||||
case 0:
|
||||
avatar->setVisualMuteSettings(LLVOAvatar::VISUAL_MUTE_NOT_SET);
|
||||
avatar->setVisualMuteSettings(LLVOAvatar::AV_RENDER_NORMALLY);
|
||||
break;
|
||||
case 1:
|
||||
avatar->setVisualMuteSettings(LLVOAvatar::ALWAYS_VISUAL_MUTE);
|
||||
avatar->setVisualMuteSettings(LLVOAvatar::AV_DO_NOT_RENDER);
|
||||
break;
|
||||
case 2:
|
||||
avatar->setVisualMuteSettings(LLVOAvatar::NEVER_VISUAL_MUTE);
|
||||
avatar->setVisualMuteSettings(LLVOAvatar::AV_ALWAYS_RENDER);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
avatar->forceUpdateVisualMuteSettings();
|
||||
LLVOAvatar::cullAvatarsByPixelArea();
|
||||
return true;
|
||||
} // handleEvent()
|
||||
|
|
@ -3147,6 +3145,8 @@ class LLObjectMute : public view_listener_t
|
|||
LLVOAvatar* avatar = find_avatar_from_object(object);
|
||||
if (avatar)
|
||||
{
|
||||
avatar->mNeedsImpostorUpdate = TRUE;
|
||||
|
||||
id = avatar->getID();
|
||||
|
||||
LLNameValue *firstname = avatar->getNVPair("FirstName");
|
||||
|
|
|
|||
|
|
@ -2428,7 +2428,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
buffer = message;
|
||||
|
||||
LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
|
||||
// add to IM panel, but do not bother the user
|
||||
gIMMgr->addMessage(
|
||||
|
|
@ -2477,7 +2477,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
}
|
||||
buffer = saved + message;
|
||||
|
||||
LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
|
||||
bool mute_im = is_muted;
|
||||
if(accept_im_from_only_friend && !is_friend && !is_linden)
|
||||
|
|
@ -2942,7 +2942,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
buffer = message;
|
||||
|
||||
LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
LL_DEBUGS("Messaging") << "message in dnd; session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
|
||||
// add to IM panel, but do not bother the user
|
||||
gIMMgr->addMessage(
|
||||
|
|
@ -2969,7 +2969,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
buffer = saved + message;
|
||||
|
||||
LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
LL_DEBUGS("Messaging") << "standard message session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
|
||||
gIMMgr->addMessage(
|
||||
session_id,
|
||||
|
|
|
|||
|
|
@ -5048,7 +5048,7 @@ void LLViewerObject::updateText()
|
|||
{
|
||||
mText->setHidden(avatar->isInMuteList());
|
||||
}
|
||||
|
||||
|
||||
LLVector3 up_offset(0,0,0);
|
||||
up_offset.mV[2] = getScale().mV[VZ]*0.6f;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "llworld.h"
|
||||
#include "pipeline.h"
|
||||
#include "llspatialpartition.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llvovolume.h"
|
||||
|
||||
const F32 PART_SIM_BOX_SIDE = 16.f;
|
||||
|
|
@ -703,16 +704,24 @@ void LLViewerPartSim::updateSimulation()
|
|||
if (!mViewerPartSources[i]->isDead())
|
||||
{
|
||||
BOOL upd = TRUE;
|
||||
if (!LLPipeline::sRenderAttachedParticles)
|
||||
LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp;
|
||||
|
||||
if (vobj && vobj->isAvatar() && ((LLVOAvatar*)vobj)->isInMuteList())
|
||||
{
|
||||
LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp;
|
||||
if (vobj && (vobj->getPCode() == LL_PCODE_VOLUME))
|
||||
upd = FALSE;
|
||||
}
|
||||
|
||||
if (upd && vobj && (vobj->getPCode() == LL_PCODE_VOLUME))
|
||||
{
|
||||
if(vobj->getAvatar() && vobj->getAvatar()->isTooComplex())
|
||||
{
|
||||
LLVOVolume* vvo = (LLVOVolume *)vobj;
|
||||
if (vvo && vvo->isAttachment())
|
||||
{
|
||||
upd = FALSE;
|
||||
}
|
||||
upd = FALSE;
|
||||
}
|
||||
|
||||
LLVOVolume* vvo = (LLVOVolume *)vobj;
|
||||
if (!LLPipeline::sRenderAttachedParticles && vvo && vvo->isAttachment())
|
||||
{
|
||||
upd = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -475,8 +475,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
|
|||
mImpl->mObjectPartition.push_back(NULL); //PARTITION_NONE
|
||||
mImpl->mVOCachePartition = getVOCachePartition();
|
||||
|
||||
mRenderInfoRequestTimer.resetWithExpiry(0.f); // Set timer to be expired
|
||||
setCapabilitiesReceivedCallback(boost::bind(&LLAvatarRenderInfoAccountant::expireRenderInfoReportTimer, _1));
|
||||
setCapabilitiesReceivedCallback(boost::bind(&LLAvatarRenderInfoAccountant::scanNewRegion, _1));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -438,7 +438,8 @@ public:
|
|||
static BOOL sVOCacheCullingEnabled; //vo cache culling enabled or not.
|
||||
static S32 sLastCameraUpdated;
|
||||
|
||||
LLFrameTimer & getRenderInfoRequestTimer() { return mRenderInfoRequestTimer; };
|
||||
LLFrameTimer & getRenderInfoRequestTimer() { return mRenderInfoRequestTimer; };
|
||||
LLFrameTimer & getRenderInfoReportTimer() { return mRenderInfoReportTimer; };
|
||||
|
||||
struct CompareRegionByLastUpdate
|
||||
{
|
||||
|
|
@ -547,6 +548,7 @@ private:
|
|||
// the materials capability throttle
|
||||
LLFrameTimer mMaterialsCapThrottleTimer;
|
||||
LLFrameTimer mRenderInfoRequestTimer;
|
||||
LLFrameTimer mRenderInfoReportTimer;
|
||||
};
|
||||
|
||||
inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const
|
||||
|
|
|
|||
|
|
@ -677,14 +677,13 @@ public:
|
|||
{
|
||||
LLVOAvatar* avatar = av_iter->second;
|
||||
|
||||
avatar->calculateUpdateRenderCost(); // Make sure the numbers are up-to-date
|
||||
avatar->calculateUpdateRenderComplexity(); // Make sure the numbers are up-to-date
|
||||
|
||||
trunc_name = utf8str_truncate(avatar->getFullname(), 16);
|
||||
addText(xpos, ypos, llformat("%s : rez %d, weight %d, bytes %d area %.2f",
|
||||
addText(xpos, ypos, llformat("%s : %s, complexity %d, area %.2f",
|
||||
trunc_name.c_str(),
|
||||
avatar->getRezzedStatus(),
|
||||
LLVOAvatar::rezStatusToString(avatar->getRezzedStatus()).c_str(),
|
||||
avatar->getVisualComplexity(),
|
||||
avatar->getAttachmentGeometryBytes(),
|
||||
avatar->getAttachmentSurfaceArea()));
|
||||
ypos += y_inc;
|
||||
av_iter++;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/**
|
||||
/**
|
||||
* @File llvoavatar.cpp
|
||||
* @brief Implementation of LLVOAvatar class which is a derivation of LLViewerObject
|
||||
*
|
||||
|
|
@ -43,6 +43,7 @@
|
|||
#include "llanimationstates.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
#include "llavatarrendernotifier.h"
|
||||
#include "llexperiencecache.h"
|
||||
#include "llphysicsmotion.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
|
@ -115,8 +116,6 @@ extern U32 JOINT_COUNT_REQUIRED_FOR_FULLRIG;
|
|||
const F32 MAX_HOVER_Z = 2.0;
|
||||
const F32 MIN_HOVER_Z = -2.0;
|
||||
|
||||
// #define OUTPUT_BREAST_DATA
|
||||
|
||||
using namespace LLAvatarAppearanceDefines;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -186,6 +185,8 @@ const F32 NAMETAG_UPDATE_THRESHOLD = 0.3f;
|
|||
const F32 NAMETAG_VERTICAL_SCREEN_OFFSET = 25.f;
|
||||
const F32 NAMETAG_VERT_OFFSET_WEIGHT = 0.17f;
|
||||
|
||||
const U32 LLVOAvatar::VISUAL_COMPLEXITY_UNKNOWN = 0;
|
||||
|
||||
enum ERenderName
|
||||
{
|
||||
RENDER_NAME_NEVER,
|
||||
|
|
@ -622,7 +623,7 @@ private:
|
|||
//-----------------------------------------------------------------------------
|
||||
LLAvatarAppearanceDictionary *LLVOAvatar::sAvatarDictionary = NULL;
|
||||
S32 LLVOAvatar::sFreezeCounter = 0;
|
||||
U32 LLVOAvatar::sMaxVisible = 12;
|
||||
U32 LLVOAvatar::sMaxNonImpostors = 12; // overridden based on graphics setting
|
||||
F32 LLVOAvatar::sRenderDistance = 256.f;
|
||||
S32 LLVOAvatar::sNumVisibleAvatars = 0;
|
||||
S32 LLVOAvatar::sNumLODChangesThisFrame = 0;
|
||||
|
|
@ -649,7 +650,7 @@ BOOL LLVOAvatar::sShowFootPlane = FALSE;
|
|||
BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE;
|
||||
F32 LLVOAvatar::sLODFactor = 1.f;
|
||||
F32 LLVOAvatar::sPhysicsLODFactor = 1.f;
|
||||
BOOL LLVOAvatar::sUseImpostors = FALSE;
|
||||
bool LLVOAvatar::sUseImpostors = false; // overwridden by RenderAvatarMaxNonImpostors
|
||||
BOOL LLVOAvatar::sJointDebug = FALSE;
|
||||
F32 LLVOAvatar::sUnbakedTime = 0.f;
|
||||
F32 LLVOAvatar::sUnbakedUpdateTime = 0.f;
|
||||
|
|
@ -670,9 +671,8 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||
LLAvatarAppearance(&gAgentWearables),
|
||||
LLViewerObject(id, pcode, regionp),
|
||||
mSpecialRenderMode(0),
|
||||
mAttachmentGeometryBytes(-1),
|
||||
mAttachmentSurfaceArea(-1.f),
|
||||
mReportedVisualComplexity(-1),
|
||||
mAttachmentSurfaceArea(0.f),
|
||||
mReportedVisualComplexity(VISUAL_COMPLEXITY_UNKNOWN),
|
||||
mTurning(FALSE),
|
||||
mLastSkeletonSerialNum( 0 ),
|
||||
mIsSitting(FALSE),
|
||||
|
|
@ -702,12 +702,14 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||
mNeedsSkin(FALSE),
|
||||
mLastSkinTime(0.f),
|
||||
mUpdatePeriod(1),
|
||||
mVisualComplexityStale(true),
|
||||
mVisuallyMuteSetting(AV_RENDER_NORMALLY),
|
||||
mMutedAVColor(LLColor4::white /* used for "uninitialize" */),
|
||||
mFirstFullyVisible(TRUE),
|
||||
mFullyLoaded(FALSE),
|
||||
mPreviousFullyLoaded(FALSE),
|
||||
mFullyLoadedInitialized(FALSE),
|
||||
mVisualComplexity(0),
|
||||
mVisualComplexityStale(TRUE),
|
||||
mVisualComplexity(VISUAL_COMPLEXITY_UNKNOWN),
|
||||
mLoadedCallbacksPaused(FALSE),
|
||||
mRenderUnloadedAvatar(LLCachedControl<bool>(gSavedSettings, "RenderUnloadedAvatar", false)),
|
||||
mLastRezzedStatus(-1),
|
||||
|
|
@ -718,6 +720,8 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||
mCachedMuteListUpdateTime(0),
|
||||
mCachedInMuteList(false)
|
||||
{
|
||||
LL_DEBUGS("AvatarRender") << "LLVOAvatar Constructor (0x" << this << ") id:" << mID << LL_ENDL;
|
||||
|
||||
//VTResume(); // VTune
|
||||
setHoverOffset(LLVector3(0.0, 0.0, 0.0));
|
||||
|
||||
|
|
@ -726,7 +730,6 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||
mVoiceVisualizer = ( LLVoiceVisualizer *)LLHUDManager::getInstance()->createViewerEffect( LLHUDObject::LL_HUD_EFFECT_VOICE_VISUALIZER, needsSendToSim );
|
||||
|
||||
LL_DEBUGS("Avatar","Message") << "LLVOAvatar Constructor (0x" << this << ") id:" << mID << LL_ENDL;
|
||||
|
||||
mPelvisp = NULL;
|
||||
|
||||
mDirtyMesh = 2; // Dirty geometry, need to regenerate.
|
||||
|
|
@ -775,17 +778,10 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||
mDebugExistenceTimer.reset();
|
||||
mLastAppearanceMessageTimer.reset();
|
||||
|
||||
if(LLSceneMonitor::getInstance()->isEnabled())
|
||||
if(LLSceneMonitor::getInstance()->isEnabled())
|
||||
{
|
||||
LLSceneMonitor::getInstance()->freezeAvatar((LLCharacter*)this);
|
||||
LLSceneMonitor::getInstance()->freezeAvatar((LLCharacter*)this);
|
||||
}
|
||||
|
||||
mCachedVisualMute = !isSelf();
|
||||
mCachedVisualMuteUpdateTime = LLFrameTimer::getTotalSeconds() + 5.0;
|
||||
mVisuallyMuteSetting = VISUAL_MUTE_NOT_SET;
|
||||
|
||||
F32 color_value = (F32) (getID().mData[0]);
|
||||
mMutedAVColor = calcMutedAVColor(color_value, 0, 256);
|
||||
}
|
||||
|
||||
std::string LLVOAvatar::avString() const
|
||||
|
|
@ -993,8 +989,8 @@ std::string LLVOAvatar::rezStatusToString(S32 rez_status)
|
|||
{
|
||||
if (rez_status==0) return "cloud";
|
||||
if (rez_status==1) return "gray";
|
||||
if (rez_status==2) return "textured";
|
||||
if (rez_status==3) return "textured_and_downloaded";
|
||||
if (rez_status==2) return "downloading";
|
||||
if (rez_status==3) return "full";
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
|
|
@ -1106,6 +1102,7 @@ void LLVOAvatar::resetImpostors()
|
|||
{
|
||||
LLVOAvatar* avatar = (LLVOAvatar*) *iter;
|
||||
avatar->mImpostor.release();
|
||||
avatar->mNeedsImpostorUpdate = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2156,7 +2153,7 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)
|
|||
}
|
||||
|
||||
idleUpdateNameTag( mLastRootPos );
|
||||
idleUpdateRenderCost();
|
||||
idleUpdateRenderComplexity();
|
||||
}
|
||||
|
||||
void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled)
|
||||
|
|
@ -2496,19 +2493,22 @@ void LLVOAvatar::idleUpdateLoadingEffect()
|
|||
// update visibility when avatar is partially loaded
|
||||
if (updateIsFullyLoaded()) // changed?
|
||||
{
|
||||
if (isFullyLoaded() && mFirstFullyVisible && isSelf())
|
||||
{
|
||||
LL_INFOS("Avatar") << avString() << "self isFullyLoaded, mFirstFullyVisible" << LL_ENDL;
|
||||
mFirstFullyVisible = FALSE;
|
||||
LLAppearanceMgr::instance().onFirstFullyVisible();
|
||||
}
|
||||
if (isFullyLoaded() && mFirstFullyVisible && !isSelf())
|
||||
{
|
||||
LL_INFOS("Avatar") << avString() << "other isFullyLoaded, mFirstFullyVisible" << LL_ENDL;
|
||||
mFirstFullyVisible = FALSE;
|
||||
}
|
||||
if (isFullyLoaded())
|
||||
{
|
||||
if (mFirstFullyVisible)
|
||||
{
|
||||
mFirstFullyVisible = FALSE;
|
||||
if (isSelf())
|
||||
{
|
||||
LL_INFOS("Avatar") << avString() << "self isFullyLoaded, mFirstFullyVisible" << LL_ENDL;
|
||||
LLAppearanceMgr::instance().onFirstFullyVisible();
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS("Avatar") << avString() << "other isFullyLoaded, mFirstFullyVisible" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
deleteParticleSource();
|
||||
updateLOD();
|
||||
}
|
||||
|
|
@ -2733,7 +2733,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
|
|||
}
|
||||
else
|
||||
{
|
||||
is_muted = LLMuteList::getInstance()->isMuted(getID());
|
||||
is_muted = isInMuteList();
|
||||
}
|
||||
bool is_friend = LLAvatarTracker::instance().isBuddy(getID());
|
||||
bool is_cloud = getIsCloud();
|
||||
|
|
@ -3091,86 +3091,32 @@ bool LLVOAvatar::isVisuallyMuted()
|
|||
{
|
||||
bool muted = false;
|
||||
|
||||
// Priority order (highest priority first)
|
||||
// * own avatar is never visually muted
|
||||
// * if on the "always draw normally" list, draw them normally
|
||||
// * if on the "always visually mute" list, mute them
|
||||
// * check against the render cost and attachment limits
|
||||
if (!isSelf())
|
||||
{
|
||||
static LLCachedControl<U32> render_auto_mute_functions(gSavedSettings, "RenderAutoMuteFunctions", 0);
|
||||
if (render_auto_mute_functions) // Hacky debug switch for developing feature
|
||||
if (mVisuallyMuteSetting == AV_ALWAYS_RENDER)
|
||||
{
|
||||
// Priority order (highest priority first)
|
||||
// * own avatar is never visually muted
|
||||
// * if on the "always draw normally" list, draw them normally
|
||||
// * if on the "always visually mute" list, mute them
|
||||
// * draw them normally if they meet the following criteria:
|
||||
// - within the closest N avatars OR on friends list OR in an IM chat
|
||||
// - AND aren't over the thresholds
|
||||
// * otherwise visually mute all other avatars
|
||||
|
||||
static LLCachedControl<U32> max_attachment_bytes(gSavedSettings, "RenderAutoMuteByteLimit", 0);
|
||||
static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 0.0);
|
||||
static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit", 0);
|
||||
|
||||
if (mVisuallyMuteSetting == ALWAYS_VISUAL_MUTE)
|
||||
{ // Always want to see this AV as an impostor
|
||||
muted = true;
|
||||
}
|
||||
else if (mVisuallyMuteSetting == NEVER_VISUAL_MUTE)
|
||||
{ // Never show as impostor
|
||||
muted = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
F64 now = LLFrameTimer::getTotalSeconds();
|
||||
|
||||
if (now < mCachedVisualMuteUpdateTime)
|
||||
{ // Use cached mute value
|
||||
muted = mCachedVisualMute;
|
||||
}
|
||||
else
|
||||
{ // Determine if visually muted or not
|
||||
|
||||
U32 max_cost = (U32) (max_render_cost*(LLVOAvatar::sLODFactor+0.5));
|
||||
|
||||
muted = (mAttachmentGeometryBytes > max_attachment_bytes && max_attachment_bytes > 0) ||
|
||||
(mAttachmentSurfaceArea > max_attachment_area && max_attachment_area > 0.f) ||
|
||||
(mVisualComplexity > max_cost && max_render_cost > 0);
|
||||
|
||||
// Could be part of the grand || collection above, but yanked out to make the logic visible
|
||||
if (!muted)
|
||||
{
|
||||
if (sMaxVisible > 0)
|
||||
{ // They are above the visibilty rank - mute them
|
||||
muted = (mVisibilityRank > sMaxVisible);
|
||||
}
|
||||
|
||||
// Always draw friends or those in IMs. Needs UI?
|
||||
if ((render_auto_mute_functions & 0x02) &&
|
||||
(muted || sMaxVisible == 0)) // Don't mute friends or IMs
|
||||
{
|
||||
muted = !(LLAvatarTracker::instance().isBuddy(getID()));
|
||||
if (muted)
|
||||
{ // Not a friend, so they are muted ... are they in an IM?
|
||||
LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL,getID());
|
||||
muted = !gIMMgr->hasSession(session_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Save visual mute state and set interval for updating
|
||||
const F64 SECONDS_BETWEEN_RENDER_AUTO_MUTE_UPDATES = 1.5;
|
||||
mCachedVisualMuteUpdateTime = now + SECONDS_BETWEEN_RENDER_AUTO_MUTE_UPDATES;
|
||||
mCachedVisualMute = muted;
|
||||
}
|
||||
}
|
||||
muted = false;
|
||||
}
|
||||
else if (mVisuallyMuteSetting == AV_DO_NOT_RENDER)
|
||||
{ // Always want to see this AV as an impostor
|
||||
muted = true;
|
||||
}
|
||||
else if (isInMuteList())
|
||||
{
|
||||
muted = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
muted = isTooComplex();
|
||||
}
|
||||
}
|
||||
|
||||
return muted || isInMuteList();
|
||||
}
|
||||
|
||||
void LLVOAvatar::forceUpdateVisualMuteSettings()
|
||||
{
|
||||
// Set the cache time so it's updated ASAP
|
||||
mCachedVisualMuteUpdateTime = LLFrameTimer::getTotalSeconds() - 1.0;
|
||||
return muted;
|
||||
}
|
||||
|
||||
bool LLVOAvatar::isInMuteList()
|
||||
|
|
@ -3335,18 +3281,18 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
|
|||
{ // visually muted avatars update at 16 hz
|
||||
mUpdatePeriod = 16;
|
||||
}
|
||||
else if (mVisibilityRank <= LLVOAvatar::sMaxVisible ||
|
||||
mDrawable->mDistanceWRTCamera < 1.f + mag)
|
||||
{ //first 25% of max visible avatars are not impostored
|
||||
//also, don't impostor avatars whose bounding box may be penetrating the
|
||||
//impostor camera near clip plane
|
||||
else if ( ! shouldImpostor()
|
||||
|| mDrawable->mDistanceWRTCamera < 1.f + mag)
|
||||
{ // first 25% of max visible avatars are not impostored
|
||||
// also, don't impostor avatars whose bounding box may be penetrating the
|
||||
// impostor camera near clip plane
|
||||
mUpdatePeriod = 1;
|
||||
}
|
||||
else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 4)
|
||||
else if ( shouldImpostor(4) )
|
||||
{ //background avatars are REALLY slow updating impostors
|
||||
mUpdatePeriod = 16;
|
||||
}
|
||||
else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 3)
|
||||
else if ( shouldImpostor(3) )
|
||||
{ //back 25% of max visible avatars are slow updating impostors
|
||||
mUpdatePeriod = 8;
|
||||
}
|
||||
|
|
@ -3930,6 +3876,10 @@ void LLVOAvatar::updateVisibility()
|
|||
}
|
||||
}
|
||||
|
||||
if ( visible != mVisible )
|
||||
{
|
||||
LL_DEBUGS("AvatarRender") << "visible was " << mVisible << " now " << visible << LL_ENDL;
|
||||
}
|
||||
mVisible = visible;
|
||||
}
|
||||
|
||||
|
|
@ -4202,8 +4152,8 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)
|
|||
}
|
||||
// Can't test for baked hair being defined, since that won't always be the case (not all viewers send baked hair)
|
||||
// TODO: 1.25 will be able to switch this logic back to calling isTextureVisible();
|
||||
if ( ( getImage(TEX_HAIR_BAKED, 0) &&
|
||||
getImage(TEX_HAIR_BAKED, 0)->getID() != IMG_INVISIBLE ) || LLDrawPoolAlpha::sShowDebugAlpha)
|
||||
if ( (getImage(TEX_HAIR_BAKED, 0) && getImage(TEX_HAIR_BAKED, 0)->getID() != IMG_INVISIBLE)
|
||||
|| LLDrawPoolAlpha::sShowDebugAlpha)
|
||||
{
|
||||
LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR);
|
||||
if (hair_mesh)
|
||||
|
|
@ -5840,7 +5790,7 @@ const LLViewerJointAttachment *LLVOAvatar::attachObject(LLViewerObject *viewer_o
|
|||
return 0;
|
||||
}
|
||||
|
||||
mVisualComplexityStale = TRUE;
|
||||
updateVisualComplexity();
|
||||
|
||||
if (viewer_object->isSelected())
|
||||
{
|
||||
|
|
@ -5996,7 +5946,7 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)
|
|||
|
||||
if (attachment->isObjectAttached(viewer_object))
|
||||
{
|
||||
mVisualComplexityStale = TRUE;
|
||||
updateVisualComplexity();
|
||||
cleanupAttachedMesh( viewer_object );
|
||||
|
||||
attachment->removeObject(viewer_object);
|
||||
|
|
@ -6298,32 +6248,20 @@ BOOL LLVOAvatar::isVisible() const
|
|||
}
|
||||
|
||||
// Determine if we have enough avatar data to render
|
||||
BOOL LLVOAvatar::getIsCloud() const
|
||||
bool LLVOAvatar::getIsCloud() const
|
||||
{
|
||||
// Do we have a shape?
|
||||
if ((const_cast<LLVOAvatar*>(this))->visualParamWeightsAreDefault())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (!isTextureDefined(TEX_LOWER_BAKED) ||
|
||||
!isTextureDefined(TEX_UPPER_BAKED) ||
|
||||
!isTextureDefined(TEX_HEAD_BAKED))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (isTooComplex())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
return ( ((const_cast<LLVOAvatar*>(this))->visualParamWeightsAreDefault())// Do we have a shape?
|
||||
|| ( !isTextureDefined(TEX_LOWER_BAKED)
|
||||
|| !isTextureDefined(TEX_UPPER_BAKED)
|
||||
|| !isTextureDefined(TEX_HEAD_BAKED)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
void LLVOAvatar::updateRezzedStatusTimers()
|
||||
{
|
||||
// State machine for rezzed status. Statuses are -1 on startup, 0
|
||||
// = cloud, 1 = gray, 2 = textured, 3 = textured_and_downloaded.
|
||||
// = cloud, 1 = gray, 2 = downloading, 3 = full.
|
||||
// Purpose is to collect time data for each it takes avatar to reach
|
||||
// various loading landmarks: gray, textured (partial), textured fully.
|
||||
|
||||
|
|
@ -6363,6 +6301,8 @@ void LLVOAvatar::updateRezzedStatusTimers()
|
|||
selfStopPhase("update_appearance_from_cof");
|
||||
selfStopPhase("wear_inventory_category", false);
|
||||
selfStopPhase("process_initial_wearables_update", false);
|
||||
|
||||
updateVisualComplexity();
|
||||
}
|
||||
}
|
||||
mLastRezzedStatus = rez_status;
|
||||
|
|
@ -6495,7 +6435,7 @@ void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapse
|
|||
// returns true if the value has changed.
|
||||
BOOL LLVOAvatar::updateIsFullyLoaded()
|
||||
{
|
||||
const BOOL loading = getIsCloud();
|
||||
const bool loading = getIsCloud();
|
||||
updateRezzedStatusTimers();
|
||||
updateRuthTimer(loading);
|
||||
return processFullyLoadedChange(loading);
|
||||
|
|
@ -6556,6 +6496,12 @@ BOOL LLVOAvatar::processFullyLoadedChange(bool loading)
|
|||
mPreviousFullyLoaded = mFullyLoaded;
|
||||
mFullyLoadedInitialized = TRUE;
|
||||
mFullyLoadedFrameCounter++;
|
||||
|
||||
if (changed && isSelf())
|
||||
{
|
||||
// to know about outfit switching
|
||||
LLAvatarRenderNotifier::getInstance()->updateNotificationState();
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
|
@ -6567,15 +6513,28 @@ BOOL LLVOAvatar::isFullyLoaded() const
|
|||
|
||||
bool LLVOAvatar::isTooComplex() const
|
||||
{
|
||||
if (gSavedSettings.getS32("RenderAvatarComplexityLimit") > 0 && mVisualComplexity >= gSavedSettings.getS32("RenderAvatarComplexityLimit"))
|
||||
bool too_complex;
|
||||
if (isSelf() || mVisuallyMuteSetting == AV_ALWAYS_RENDER)
|
||||
{
|
||||
return true;
|
||||
too_complex = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Determine if visually muted or not
|
||||
static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0U);
|
||||
static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 1000.0f);
|
||||
// If the user has chosen unlimited max complexity, we also disregard max attachment area
|
||||
// so that unlimited will completely disable the overly complex impostor rendering
|
||||
// yes, this leaves them vulnerable to griefing objects... their choice
|
||||
too_complex = ( max_render_cost > 0
|
||||
&& ( mVisualComplexity > max_render_cost
|
||||
|| (max_attachment_area > 0.0f && mAttachmentSurfaceArea > max_attachment_area)
|
||||
));
|
||||
}
|
||||
|
||||
return false;
|
||||
return too_complex;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// findMotion()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -7439,7 +7398,10 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
|
|||
// appearance messages.
|
||||
mLastUpdateReceivedCOFVersion = this_update_cof_version;
|
||||
|
||||
applyParsedTEMessage(contents.mTEContents);
|
||||
if (applyParsedTEMessage(contents.mTEContents) > 0 && isChanged(TEXTURE))
|
||||
{
|
||||
updateVisualComplexity();
|
||||
}
|
||||
|
||||
// prevent the overwriting of valid baked textures with invalid baked textures
|
||||
for (U8 baked_index = 0; baked_index < mBakedTextureDatas.size(); baked_index++)
|
||||
|
|
@ -7557,7 +7519,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
|
|||
// Got an update for some other avatar
|
||||
// Ignore updates for self, because we have a more authoritative value in the preferences.
|
||||
setHoverOffset(contents.mHoverOffset);
|
||||
LL_INFOS("Avatar") << avString() << "setting hover from message" << contents.mHoverOffset[2] << LL_ENDL;
|
||||
LL_INFOS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;
|
||||
}
|
||||
|
||||
if (!contents.mHoverOffsetWasSet && !isSelf())
|
||||
|
|
@ -8134,7 +8096,7 @@ void LLVOAvatar::updateFreezeCounter(S32 counter)
|
|||
|
||||
BOOL LLVOAvatar::updateLOD()
|
||||
{
|
||||
if (isImpostor())
|
||||
if (isImpostor() && 0 != mDrawable->getNumFaces() && mDrawable->getFace(0)->hasGeometry())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -8171,28 +8133,35 @@ U32 LLVOAvatar::getPartitionType() const
|
|||
}
|
||||
|
||||
//static
|
||||
void LLVOAvatar::updateImpostors()
|
||||
void LLVOAvatar::updateImpostors()
|
||||
{
|
||||
LLCharacter::sAllowInstancesChange = FALSE ;
|
||||
LLCharacter::sAllowInstancesChange = FALSE;
|
||||
|
||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{
|
||||
LLVOAvatar* avatar = (LLVOAvatar*) *iter;
|
||||
if (!avatar->isDead() && avatar->needsImpostorUpdate() && avatar->isVisible() && avatar->isImpostor())
|
||||
if (!avatar->isDead() && avatar->isVisible()
|
||||
&& ((avatar->isImpostor() || LLVOAvatar::AV_DO_NOT_RENDER == avatar->getVisualMuteSettings()) && avatar->needsImpostorUpdate())
|
||||
)
|
||||
{
|
||||
avatar->calcMutedAVColor();
|
||||
gPipeline.generateImpostor(avatar);
|
||||
}
|
||||
}
|
||||
|
||||
LLCharacter::sAllowInstancesChange = TRUE ;
|
||||
LLCharacter::sAllowInstancesChange = TRUE;
|
||||
}
|
||||
|
||||
BOOL LLVOAvatar::isImpostor()
|
||||
{
|
||||
return (sUseImpostors && (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD))) || isInMuteList() ? TRUE : FALSE;
|
||||
return sUseImpostors && (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD)) ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
BOOL LLVOAvatar::shouldImpostor(const U32 rank_factor) const
|
||||
{
|
||||
return (!isSelf() && sUseImpostors && mVisibilityRank > (sMaxNonImpostors * rank_factor));
|
||||
}
|
||||
|
||||
BOOL LLVOAvatar::needsImpostorUpdate() const
|
||||
{
|
||||
|
|
@ -8233,68 +8202,170 @@ void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& d
|
|||
angle.mV[2] = da;
|
||||
}
|
||||
|
||||
// static
|
||||
const U32 LLVOAvatar::IMPOSTORS_OFF = 66; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors
|
||||
* slider in panel_preferences_graphics1.xml */
|
||||
|
||||
void LLVOAvatar::idleUpdateRenderCost()
|
||||
// static
|
||||
void LLVOAvatar::updateImpostorRendering(U32 newMaxNonImpostorsValue)
|
||||
{
|
||||
static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit", 0);
|
||||
static const U32 ARC_LIMIT = 20000;
|
||||
|
||||
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_ATTACHMENT_BYTES))
|
||||
{ //set debug text to attachment geometry bytes here so render cost will override
|
||||
setDebugText(llformat("%.1f KB, %.2f m^2", mAttachmentGeometryBytes/1024.f, mAttachmentSurfaceArea));
|
||||
}
|
||||
|
||||
if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHAME) && max_render_cost == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
calculateUpdateRenderCost(); // Update mVisualComplexity if needed
|
||||
U32 oldmax = sMaxNonImpostors;
|
||||
bool oldflg = sUseImpostors;
|
||||
|
||||
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHAME))
|
||||
if (IMPOSTORS_OFF <= newMaxNonImpostorsValue)
|
||||
{
|
||||
std::string viz_string = LLVOAvatar::rezStatusToString(getRezzedStatus());
|
||||
setDebugText(llformat("%s %d", viz_string.c_str(), mVisualComplexity));
|
||||
F32 green = 1.f-llclamp(((F32) mVisualComplexity-(F32)ARC_LIMIT)/(F32)ARC_LIMIT, 0.f, 1.f);
|
||||
F32 red = llmin((F32) mVisualComplexity/(F32)ARC_LIMIT, 1.f);
|
||||
mText->setColor(LLColor4(red,green,0,1));
|
||||
sMaxNonImpostors = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sMaxNonImpostors = newMaxNonImpostorsValue;
|
||||
}
|
||||
// the sUseImpostors flag depends on whether or not sMaxNonImpostors is set to the no-limit value (0)
|
||||
sUseImpostors = (0 != sMaxNonImpostors);
|
||||
if ( oldflg != sUseImpostors )
|
||||
{
|
||||
LL_DEBUGS("AvatarRender")
|
||||
<< "was " << (oldflg ? "use" : "don't use" ) << " impostors (max " << oldmax << "); "
|
||||
<< "now " << (sUseImpostors ? "use" : "don't use" ) << " impostors (max " << sMaxNonImpostors << "); "
|
||||
<< LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Calculations for mVisualComplexity value
|
||||
void LLVOAvatar::calculateUpdateRenderCost()
|
||||
void LLVOAvatar::idleUpdateRenderComplexity()
|
||||
{
|
||||
static const U32 ARC_BODY_PART_COST = 200;
|
||||
// Render Complexity
|
||||
calculateUpdateRenderComplexity(); // Update mVisualComplexity if needed
|
||||
|
||||
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_AVATAR_DRAW_INFO))
|
||||
{
|
||||
std::string info_line;
|
||||
F32 red_level;
|
||||
F32 green_level;
|
||||
LLColor4 info_color;
|
||||
LLFontGL::StyleFlags info_style;
|
||||
|
||||
if ( !mText )
|
||||
{
|
||||
initHudText();
|
||||
mText->setFadeDistance(20.0, 5.0); // limit clutter in large crowds
|
||||
}
|
||||
else
|
||||
{
|
||||
mText->clearString(); // clear debug text
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: the logic for whether or not each of the values below
|
||||
* controls muting MUST match that in the isVisuallyMuted and isTooComplex methods.
|
||||
*/
|
||||
|
||||
static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);
|
||||
info_line = llformat("%d Complexity", mVisualComplexity);
|
||||
|
||||
if (max_render_cost != 0) // zero means don't care, so don't bother coloring based on this
|
||||
{
|
||||
green_level = 1.f-llclamp(((F32) mVisualComplexity-(F32)max_render_cost)/(F32)max_render_cost, 0.f, 1.f);
|
||||
red_level = llmin((F32) mVisualComplexity/(F32)max_render_cost, 1.f);
|
||||
info_color.set(red_level, green_level, 0.0, 1.0);
|
||||
info_style = ( mVisualComplexity > max_render_cost
|
||||
? LLFontGL::BOLD : LLFontGL::NORMAL );
|
||||
}
|
||||
else
|
||||
{
|
||||
info_color.set(LLColor4::grey);
|
||||
info_style = LLFontGL::NORMAL;
|
||||
}
|
||||
mText->addLine(info_line, info_color, info_style);
|
||||
|
||||
// Visual rank
|
||||
info_line = llformat("%d rank", mVisibilityRank);
|
||||
// Use grey for imposters, white for normal rendering or no impostors
|
||||
info_color.set(isImpostor() ? LLColor4::grey : LLColor4::white);
|
||||
info_style = LLFontGL::NORMAL;
|
||||
mText->addLine(info_line, info_color, info_style);
|
||||
|
||||
// Attachment Surface Area
|
||||
static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 1000.0f);
|
||||
info_line = llformat("%.2f m^2", mAttachmentSurfaceArea);
|
||||
|
||||
if (max_render_cost != 0 && max_attachment_area != 0) // zero means don't care, so don't bother coloring based on this
|
||||
{
|
||||
green_level = 1.f-llclamp((mAttachmentSurfaceArea-max_attachment_area)/max_attachment_area, 0.f, 1.f);
|
||||
red_level = llmin(mAttachmentSurfaceArea/max_attachment_area, 1.f);
|
||||
info_color.set(red_level, green_level, 0.0, 1.0);
|
||||
info_style = ( mAttachmentSurfaceArea > max_attachment_area
|
||||
? LLFontGL::BOLD : LLFontGL::NORMAL );
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
info_color.set(LLColor4::grey);
|
||||
info_style = LLFontGL::NORMAL;
|
||||
}
|
||||
mText->addLine(info_line, info_color, info_style);
|
||||
|
||||
updateText(); // corrects position
|
||||
}
|
||||
}
|
||||
|
||||
void LLVOAvatar::addAttachmentArea(F32 delta_area)
|
||||
{
|
||||
mAttachmentSurfaceArea += delta_area;
|
||||
}
|
||||
|
||||
void LLVOAvatar::subtractAttachmentArea(F32 delta_area)
|
||||
{
|
||||
mAttachmentSurfaceArea = delta_area > mAttachmentSurfaceArea ? 0.0 : mAttachmentSurfaceArea - delta_area;
|
||||
}
|
||||
|
||||
void LLVOAvatar::updateVisualComplexity()
|
||||
{
|
||||
LL_DEBUGS("AvatarRender") << "avatar " << getID() << " appearance changed" << LL_ENDL;
|
||||
// Set the cache time to in the past so it's updated ASAP
|
||||
mVisualComplexityStale = true;
|
||||
}
|
||||
|
||||
// Calculations for mVisualComplexity value
|
||||
void LLVOAvatar::calculateUpdateRenderComplexity()
|
||||
{
|
||||
/*****************************************************************
|
||||
* This calculation should not be modified by third party viewers,
|
||||
* since it is used to limit rendering and should be uniform for
|
||||
* everyone. If you have suggested improvements, submit them to
|
||||
* the official viewer for consideration.
|
||||
*****************************************************************/
|
||||
static const U32 COMPLEXITY_BODY_PART_COST = 200;
|
||||
|
||||
// Diagnostic list of all textures on our avatar
|
||||
static std::set<LLUUID> all_textures;
|
||||
|
||||
if (mVisualComplexityStale)
|
||||
{
|
||||
mVisualComplexityStale = FALSE;
|
||||
U32 cost = 0;
|
||||
U32 cost = VISUAL_COMPLEXITY_UNKNOWN;
|
||||
LLVOVolume::texture_cost_t textures;
|
||||
|
||||
for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++)
|
||||
{
|
||||
const LLAvatarAppearanceDictionary::BakedEntry *baked_dict = LLAvatarAppearanceDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)baked_index);
|
||||
const LLAvatarAppearanceDictionary::BakedEntry *baked_dict
|
||||
= LLAvatarAppearanceDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)baked_index);
|
||||
ETextureIndex tex_index = baked_dict->mTextureIndex;
|
||||
if ((tex_index != TEX_SKIRT_BAKED) || (isWearingWearableType(LLWearableType::WT_SKIRT)))
|
||||
{
|
||||
if (isTextureVisible(tex_index))
|
||||
{
|
||||
cost +=ARC_BODY_PART_COST;
|
||||
cost +=COMPLEXITY_BODY_PART_COST;
|
||||
}
|
||||
}
|
||||
}
|
||||
LL_DEBUGS("ARCdetail") << "Avatar body parts complexity: " << cost << LL_ENDL;
|
||||
|
||||
|
||||
for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();
|
||||
iter != mAttachmentPoints.end();
|
||||
++iter)
|
||||
for (attachment_map_t::const_iterator attachment_point = mAttachmentPoints.begin();
|
||||
attachment_point != mAttachmentPoints.end();
|
||||
++attachment_point)
|
||||
{
|
||||
LLViewerJointAttachment* attachment = iter->second;
|
||||
LLViewerJointAttachment* attachment = attachment_point->second;
|
||||
for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
|
||||
attachment_iter != attachment->mAttachedObjects.end();
|
||||
++attachment_iter)
|
||||
|
|
@ -8309,7 +8380,12 @@ void LLVOAvatar::calculateUpdateRenderCost()
|
|||
const LLVOVolume* volume = drawable->getVOVolume();
|
||||
if (volume)
|
||||
{
|
||||
cost += volume->getRenderCost(textures);
|
||||
U32 attachment_total_cost = 0;
|
||||
U32 attachment_volume_cost = 0;
|
||||
U32 attachment_texture_cost = 0;
|
||||
U32 attachment_children_cost = 0;
|
||||
|
||||
attachment_volume_cost += volume->getRenderCost(textures);
|
||||
|
||||
const_child_list_t children = volume->getChildren();
|
||||
for (const_child_list_t::const_iterator child_iter = children.begin();
|
||||
|
|
@ -8320,15 +8396,27 @@ void LLVOAvatar::calculateUpdateRenderCost()
|
|||
LLVOVolume *child = dynamic_cast<LLVOVolume*>( child_obj );
|
||||
if (child)
|
||||
{
|
||||
cost += child->getRenderCost(textures);
|
||||
attachment_children_cost += child->getRenderCost(textures);
|
||||
}
|
||||
}
|
||||
|
||||
for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter)
|
||||
for (LLVOVolume::texture_cost_t::iterator volume_texture = textures.begin();
|
||||
volume_texture != textures.end();
|
||||
++volume_texture)
|
||||
{
|
||||
// add the cost of each individual texture in the linkset
|
||||
cost += iter->second;
|
||||
attachment_texture_cost += volume_texture->second;
|
||||
}
|
||||
|
||||
attachment_total_cost = attachment_volume_cost + attachment_texture_cost + attachment_children_cost;
|
||||
LL_DEBUGS("ARCdetail") << "Attachment costs " << attached_object->getAttachmentItemID()
|
||||
<< " total: " << attachment_total_cost
|
||||
<< ", volume: " << attachment_volume_cost
|
||||
<< ", textures: " << attachment_texture_cost
|
||||
<< ", " << volume->numChildren()
|
||||
<< " children: " << attachment_children_cost
|
||||
<< LL_ENDL;
|
||||
cost += attachment_total_cost;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -8374,38 +8462,85 @@ void LLVOAvatar::calculateUpdateRenderCost()
|
|||
}
|
||||
}
|
||||
|
||||
if ( cost != mVisualComplexity )
|
||||
{
|
||||
LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
|
||||
<< " complexity updated was " << mVisualComplexity << " now " << cost
|
||||
<< " reported " << mReportedVisualComplexity
|
||||
<< LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
|
||||
<< " complexity updated no change " << mVisualComplexity
|
||||
<< " reported " << mReportedVisualComplexity
|
||||
<< LL_ENDL;
|
||||
}
|
||||
mVisualComplexity = cost;
|
||||
mVisualComplexityStale = false;
|
||||
|
||||
static LLCachedControl<U32> show_my_complexity_changes(gSavedSettings, "ShowMyComplexityChanges", 20);
|
||||
|
||||
if (isSelf() && show_my_complexity_changes)
|
||||
{
|
||||
LLAvatarRenderNotifier::getInstance()->updateNotificationAgent(mVisualComplexity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
LLColor4 LLVOAvatar::calcMutedAVColor(F32 value, S32 range_low, S32 range_high)
|
||||
void LLVOAvatar::setVisualMuteSettings(VisualMuteSettings set)
|
||||
{
|
||||
F32 clamped_value = llmin(value, (F32) range_high);
|
||||
clamped_value = llmax(value, (F32) range_low);
|
||||
F32 spectrum = (clamped_value / range_high); // spectrum is between 0 and 1.f
|
||||
mVisuallyMuteSetting = set;
|
||||
mNeedsImpostorUpdate = TRUE;
|
||||
}
|
||||
|
||||
// Array of colors. These are arranged so only one RGB color changes between each step,
|
||||
// and it loops back to red so there is an even distribution. It is not a heat map
|
||||
const S32 NUM_SPECTRUM_COLORS = 7;
|
||||
static LLColor4 * spectrum_color[NUM_SPECTRUM_COLORS] = { &LLColor4::red, &LLColor4::magenta, &LLColor4::blue, &LLColor4::cyan, &LLColor4::green, &LLColor4::yellow, &LLColor4::red };
|
||||
|
||||
void LLVOAvatar::calcMutedAVColor()
|
||||
{
|
||||
LLColor4 new_color(mMutedAVColor);
|
||||
std::string change_msg;
|
||||
LLUUID av_id(getID());
|
||||
|
||||
if (getVisualMuteSettings() == AV_DO_NOT_RENDER)
|
||||
{
|
||||
// explicitly not-rendered avatars are light grey
|
||||
new_color = LLColor4::grey3;
|
||||
change_msg = " not rendered: color is grey3";
|
||||
}
|
||||
else if (LLMuteList::getInstance()->isMuted(av_id)) // the user blocked them
|
||||
{
|
||||
// blocked avatars are dark grey
|
||||
new_color = LLColor4::grey4;
|
||||
change_msg = " blocked: color is grey4";
|
||||
}
|
||||
else if ( mMutedAVColor == LLColor4::white || mMutedAVColor == LLColor4::grey3 || mMutedAVColor == LLColor4::grey4 )
|
||||
{
|
||||
// select a color based on the first byte of the agents uuid so any muted agent is always the same color
|
||||
F32 color_value = (F32) (av_id.mData[0]);
|
||||
F32 spectrum = (color_value / 256.0); // spectrum is between 0 and 1.f
|
||||
|
||||
// Array of colors. These are arranged so only one RGB color changes between each step,
|
||||
// and it loops back to red so there is an even distribution. It is not a heat map
|
||||
const S32 NUM_SPECTRUM_COLORS = 7;
|
||||
static LLColor4 * spectrum_color[NUM_SPECTRUM_COLORS] = { &LLColor4::red, &LLColor4::magenta, &LLColor4::blue, &LLColor4::cyan, &LLColor4::green, &LLColor4::yellow, &LLColor4::red };
|
||||
|
||||
spectrum = spectrum * (NUM_SPECTRUM_COLORS - 1); // Scale to range of number of colors
|
||||
S32 spectrum_index_1 = floor(spectrum); // Desired color will be after this index
|
||||
S32 spectrum_index_2 = spectrum_index_1 + 1; // and before this index (inclusive)
|
||||
F32 fractBetween = spectrum - (F32)(spectrum_index_1); // distance between the two indexes (0-1)
|
||||
spectrum = spectrum * (NUM_SPECTRUM_COLORS - 1); // Scale to range of number of colors
|
||||
S32 spectrum_index_1 = floor(spectrum); // Desired color will be after this index
|
||||
S32 spectrum_index_2 = spectrum_index_1 + 1; // and before this index (inclusive)
|
||||
F32 fractBetween = spectrum - (F32)(spectrum_index_1); // distance between the two indexes (0-1)
|
||||
|
||||
LLColor4 new_color = lerp(*spectrum_color[spectrum_index_1], *spectrum_color[spectrum_index_2], fractBetween);
|
||||
new_color.normalize();
|
||||
new_color *= 0.7f; // Tone it down a bit
|
||||
new_color = lerp(*spectrum_color[spectrum_index_1], *spectrum_color[spectrum_index_2], fractBetween);
|
||||
new_color.normalize();
|
||||
new_color *= 0.28f; // Tone it down
|
||||
|
||||
//LL_INFOS() << "From value " << std::setprecision(3) << value << " returning color " << new_color
|
||||
// << " using indexes " << spectrum_index_1 << ", " << spectrum_index_2
|
||||
// << " and fractBetween " << fractBetween
|
||||
// << LL_ENDL;
|
||||
change_msg = " over limit color ";
|
||||
}
|
||||
|
||||
return new_color;
|
||||
if (mMutedAVColor != new_color)
|
||||
{
|
||||
LL_DEBUGS("AvatarRender") << "avatar "<< av_id << change_msg << std::setprecision(3) << new_color << LL_ENDL;
|
||||
mMutedAVColor = new_color;
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -253,20 +253,22 @@ public:
|
|||
// force all name tags to rebuild, useful when display names turned on/off
|
||||
static void invalidateNameTags();
|
||||
void addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font);
|
||||
void idleUpdateRenderCost();
|
||||
void calculateUpdateRenderCost();
|
||||
void updateVisualComplexity() { mVisualComplexityStale = TRUE; }
|
||||
void idleUpdateRenderComplexity();
|
||||
void calculateUpdateRenderComplexity();
|
||||
static const U32 VISUAL_COMPLEXITY_UNKNOWN;
|
||||
void updateVisualComplexity();
|
||||
|
||||
S32 getVisualComplexity() { return mVisualComplexity; }; // Numbers calculated here by rendering AV
|
||||
S32 getAttachmentGeometryBytes() { return mAttachmentGeometryBytes; }; // number of bytes in attached geometry
|
||||
U32 getVisualComplexity() { return mVisualComplexity; }; // Numbers calculated here by rendering AV
|
||||
F32 getAttachmentSurfaceArea() { return mAttachmentSurfaceArea; }; // estimated surface area of attachments
|
||||
void addAttachmentArea(F32 delta_area);
|
||||
void subtractAttachmentArea(F32 delta_area);
|
||||
|
||||
S32 getReportedVisualComplexity() { return mReportedVisualComplexity; }; // Numbers as reported by the SL server
|
||||
void setReportedVisualComplexity(S32 value) { mReportedVisualComplexity = value; };
|
||||
U32 getReportedVisualComplexity() { return mReportedVisualComplexity; }; // Numbers as reported by the SL server
|
||||
void setReportedVisualComplexity(U32 value) { mReportedVisualComplexity = value; };
|
||||
|
||||
S32 getUpdatePeriod() { return mUpdatePeriod; };
|
||||
const LLColor4 & getMutedAVColor() { return mMutedAVColor; };
|
||||
|
||||
static void updateImpostorRendering(U32 newMaxNonImpostorsValue);
|
||||
|
||||
void idleUpdateBelowWater();
|
||||
|
||||
|
|
@ -276,10 +278,12 @@ public:
|
|||
public:
|
||||
static S32 sRenderName;
|
||||
static BOOL sRenderGroupTitles;
|
||||
static U32 sMaxVisible; //(affected by control "RenderAvatarMaxVisible")
|
||||
static const U32 IMPOSTORS_OFF; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors
|
||||
* slider in panel_preferences_graphics1.xml */
|
||||
static U32 sMaxNonImpostors; //(affected by control "RenderAvatarMaxNonImpostors")
|
||||
static F32 sRenderDistance; //distance at which avatars will render.
|
||||
static BOOL sShowAnimationDebug; // show animation debug info
|
||||
static BOOL sUseImpostors; //use impostors for far away avatars
|
||||
static bool sUseImpostors; //use impostors for far away avatars
|
||||
static BOOL sShowFootPlane; // show foot collision plane reported by server
|
||||
static BOOL sShowCollisionVolumes; // show skeletal collision volumes
|
||||
static BOOL sVisibleInFirstPerson;
|
||||
|
|
@ -303,9 +307,9 @@ public:
|
|||
//--------------------------------------------------------------------
|
||||
public:
|
||||
BOOL isFullyLoaded() const;
|
||||
bool isTooComplex() const;
|
||||
bool isTooComplex() const;
|
||||
bool visualParamWeightsAreDefault();
|
||||
virtual BOOL getIsCloud() const;
|
||||
virtual bool getIsCloud() const;
|
||||
BOOL isFullyTextured() const;
|
||||
BOOL hasGray() const;
|
||||
S32 getRezzedStatus() const; // 0 = cloud, 1 = gray, 2 = textured, 3 = textured and fully downloaded.
|
||||
|
|
@ -321,7 +325,7 @@ public:
|
|||
static void logPendingPhasesAllAvatars();
|
||||
void logMetricsTimerRecord(const std::string& phase_name, F32 elapsed, bool completed);
|
||||
|
||||
static LLColor4 calcMutedAVColor(F32 value, S32 range_low, S32 range_high);
|
||||
void calcMutedAVColor();
|
||||
|
||||
protected:
|
||||
LLViewerStats::PhaseMap& getPhases() { return mPhases; }
|
||||
|
|
@ -336,8 +340,6 @@ private:
|
|||
BOOL mPreviousFullyLoaded;
|
||||
BOOL mFullyLoadedInitialized;
|
||||
S32 mFullyLoadedFrameCounter;
|
||||
S32 mVisualComplexity;
|
||||
BOOL mVisualComplexityStale;
|
||||
LLColor4 mMutedAVColor;
|
||||
LLFrameTimer mFullyLoadedTimer;
|
||||
LLFrameTimer mRuthTimer;
|
||||
|
|
@ -386,16 +388,15 @@ public:
|
|||
U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
|
||||
bool isVisuallyMuted();
|
||||
bool isInMuteList();
|
||||
void setCachedVisualMute(bool muted) { mCachedVisualMute = muted; };
|
||||
void forceUpdateVisualMuteSettings();
|
||||
|
||||
enum VisualMuteSettings
|
||||
{
|
||||
VISUAL_MUTE_NOT_SET = 0,
|
||||
ALWAYS_VISUAL_MUTE = 1,
|
||||
NEVER_VISUAL_MUTE = 2
|
||||
AV_RENDER_NORMALLY = 0,
|
||||
AV_DO_NOT_RENDER = 1,
|
||||
AV_ALWAYS_RENDER = 2
|
||||
};
|
||||
void setVisualMuteSettings(VisualMuteSettings set) { mVisuallyMuteSetting = set; };
|
||||
void setVisualMuteSettings(VisualMuteSettings set);
|
||||
VisualMuteSettings getVisualMuteSettings() { return mVisuallyMuteSetting; };
|
||||
|
||||
U32 renderRigid();
|
||||
|
|
@ -408,12 +409,9 @@ public:
|
|||
static void destroyGL();
|
||||
static void restoreGL();
|
||||
S32 mSpecialRenderMode; // special lighting
|
||||
S32 mAttachmentGeometryBytes; //number of bytes in attached geometry
|
||||
|
||||
private:
|
||||
F32 mAttachmentSurfaceArea; //estimated surface area of attachments
|
||||
|
||||
S32 mReportedVisualComplexity; // Numbers as reported by the SL server
|
||||
|
||||
private:
|
||||
bool shouldAlphaMask();
|
||||
|
||||
BOOL mNeedsSkin; // avatar has been animated and verts have not been updated
|
||||
|
|
@ -422,8 +420,10 @@ private:
|
|||
S32 mUpdatePeriod;
|
||||
S32 mNumInitFaces; //number of faces generated when creating the avatar drawable, does not inculde splitted faces due to long vertex buffer.
|
||||
|
||||
bool mCachedVisualMute; // cached return value for isVisuallyMuted()
|
||||
F64 mCachedVisualMuteUpdateTime; // Time to update mCachedVisualMute
|
||||
// the isTooComplex method uses these mutable values to avoid recalculating too frequently
|
||||
mutable U32 mVisualComplexity;
|
||||
mutable bool mVisualComplexityStale;
|
||||
U32 mReportedVisualComplexity; // from other viewers through the simulator
|
||||
|
||||
bool mCachedInMuteList;
|
||||
F64 mCachedMuteListUpdateTime;
|
||||
|
|
@ -469,6 +469,7 @@ private:
|
|||
//--------------------------------------------------------------------
|
||||
public:
|
||||
BOOL isImpostor();
|
||||
BOOL shouldImpostor(const U32 rank_factor = 1) const;
|
||||
BOOL needsImpostorUpdate() const;
|
||||
const LLVector3& getImpostorOffset() const;
|
||||
const LLVector2& getImpostorDim() const;
|
||||
|
|
@ -703,7 +704,6 @@ private:
|
|||
public:
|
||||
BOOL isVisible() const;
|
||||
void setVisibilityRank(U32 rank);
|
||||
U32 getVisibilityRank() const { return mVisibilityRank; } // unused
|
||||
static S32 sNumVisibleAvatars; // Number of instances of this class
|
||||
/** Appearance
|
||||
** **
|
||||
|
|
|
|||
|
|
@ -435,7 +435,7 @@ BOOL LLVOAvatarSelf::buildMenus()
|
|||
++iter)
|
||||
{
|
||||
LLViewerJointAttachment* attachment = iter->second;
|
||||
if (attachment->getGroup() == i)
|
||||
if (attachment && attachment->getGroup() == i)
|
||||
{
|
||||
LLMenuItemCallGL::Params item_params;
|
||||
|
||||
|
|
@ -474,7 +474,7 @@ BOOL LLVOAvatarSelf::buildMenus()
|
|||
++iter)
|
||||
{
|
||||
LLViewerJointAttachment* attachment = iter->second;
|
||||
if (attachment->getGroup() == i)
|
||||
if (attachment && attachment->getGroup() == i)
|
||||
{
|
||||
LLMenuItemCallGL::Params item_params;
|
||||
std::string sub_piemenu_name = attachment->getName();
|
||||
|
|
@ -507,7 +507,7 @@ BOOL LLVOAvatarSelf::buildMenus()
|
|||
++iter)
|
||||
{
|
||||
LLViewerJointAttachment* attachment = iter->second;
|
||||
if (attachment->getGroup() == 8)
|
||||
if (attachment && attachment->getGroup() == 8)
|
||||
{
|
||||
LLMenuItemCallGL::Params item_params;
|
||||
std::string sub_piemenu_name = attachment->getName();
|
||||
|
|
@ -609,7 +609,7 @@ BOOL LLVOAvatarSelf::buildMenus()
|
|||
++iter)
|
||||
{
|
||||
LLViewerJointAttachment* attachment = iter->second;
|
||||
if(attachment->getGroup() == group)
|
||||
if(attachment && attachment->getGroup() == group)
|
||||
{
|
||||
// use multimap to provide a partial order off of the pie slice key
|
||||
S32 pie_index = attachment->getPieSlice();
|
||||
|
|
@ -1885,7 +1885,7 @@ void LLVOAvatarSelf::dumpTotalLocalTextureByteCount()
|
|||
LL_INFOS() << "Total Avatar LocTex GL:" << (gl_bytes/1024) << "KB" << LL_ENDL;
|
||||
}
|
||||
|
||||
BOOL LLVOAvatarSelf::getIsCloud() const
|
||||
bool LLVOAvatarSelf::getIsCloud() const
|
||||
{
|
||||
// Let people know why they're clouded without spamming them into oblivion.
|
||||
bool do_warn = false;
|
||||
|
|
@ -1913,7 +1913,7 @@ BOOL LLVOAvatarSelf::getIsCloud() const
|
|||
<< (skin_count ? "" : "SKIN ")
|
||||
<< LL_ENDL;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!isTextureDefined(TEX_HAIR, 0))
|
||||
|
|
@ -1922,7 +1922,7 @@ BOOL LLVOAvatarSelf::getIsCloud() const
|
|||
{
|
||||
LL_INFOS() << "Self is clouded because of no hair texture" << LL_ENDL;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!mPreviousFullyLoaded)
|
||||
|
|
@ -1934,7 +1934,7 @@ BOOL LLVOAvatarSelf::getIsCloud() const
|
|||
{
|
||||
LL_INFOS() << "Self is clouded because lower textures not baked" << LL_ENDL;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!isLocalTextureDataAvailable(getLayerSet(BAKED_UPPER)) &&
|
||||
|
|
@ -1944,7 +1944,7 @@ BOOL LLVOAvatarSelf::getIsCloud() const
|
|||
{
|
||||
LL_INFOS() << "Self is clouded because upper textures not baked" << LL_ENDL;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
|
||||
|
|
@ -1965,13 +1965,13 @@ BOOL LLVOAvatarSelf::getIsCloud() const
|
|||
LL_INFOS() << "Self is clouded because texture at index " << i
|
||||
<< " (texture index is " << texture_data.mTextureIndex << ") is not loaded" << LL_ENDL;
|
||||
}
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
LL_DEBUGS() << "Avatar de-clouded" << LL_ENDL;
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
/*static*/
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ public:
|
|||
// Loading state
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
/*virtual*/ BOOL getIsCloud() const;
|
||||
/*virtual*/ bool getIsCloud() const;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Region state
|
||||
|
|
|
|||
|
|
@ -3355,6 +3355,13 @@ const LLMatrix4 LLVOVolume::getRenderMatrix() const
|
|||
// children, and cost should only be increased for unique textures -Nyx
|
||||
U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
|
||||
{
|
||||
/*****************************************************************
|
||||
* This calculation should not be modified by third party viewers,
|
||||
* since it is used to limit rendering and should be uniform for
|
||||
* everyone. If you have suggested improvements, submit them to
|
||||
* the official viewer for consideration.
|
||||
*****************************************************************/
|
||||
|
||||
// Get access to params we'll need at various points.
|
||||
// Skip if this is object doesn't have a volume (e.g. is an avatar).
|
||||
BOOL has_volume = (getVolume() != NULL);
|
||||
|
|
@ -3428,7 +3435,7 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const
|
|||
{
|
||||
// base cost is dependent on mesh complexity
|
||||
// note that 3 is the highest LOD as of the time of this coding.
|
||||
S32 size = gMeshRepo.getMeshSize(volume_params.getSculptID(),3);
|
||||
S32 size = gMeshRepo.getMeshSize(volume_params.getSculptID(), getLOD());
|
||||
if ( size > 0)
|
||||
{
|
||||
if (gMeshRepo.getSkinInfo(volume_params.getSculptID(), this))
|
||||
|
|
@ -4720,10 +4727,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
|
||||
if (pAvatarVO)
|
||||
{
|
||||
pAvatarVO->mAttachmentGeometryBytes -= group->mGeometryBytes;
|
||||
pAvatarVO->mAttachmentGeometryBytes = llmax(pAvatarVO->mAttachmentGeometryBytes, 0);
|
||||
pAvatarVO->mAttachmentSurfaceArea -= group->mSurfaceArea;
|
||||
pAvatarVO->mAttachmentSurfaceArea = llmax(pAvatarVO->mAttachmentSurfaceArea, 0.f);
|
||||
pAvatarVO->subtractAttachmentArea( group->mSurfaceArea );
|
||||
}
|
||||
|
||||
group->mGeometryBytes = 0;
|
||||
|
|
@ -5277,24 +5281,9 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
|
||||
if (pAvatarVO)
|
||||
{
|
||||
if (pAvatarVO->mAttachmentGeometryBytes < 0)
|
||||
{ // First time through value is -1
|
||||
pAvatarVO->mAttachmentGeometryBytes = group->mGeometryBytes;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAvatarVO->mAttachmentGeometryBytes += group->mGeometryBytes;
|
||||
}
|
||||
if (pAvatarVO->mAttachmentSurfaceArea < 0.f)
|
||||
{ // First time through value is -1
|
||||
pAvatarVO->mAttachmentSurfaceArea = group->mSurfaceArea;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAvatarVO->mAttachmentSurfaceArea += group->mSurfaceArea;
|
||||
pAvatarVO->addAttachmentArea( group->mSurfaceArea );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static LLTrace::BlockTimerStatHandle FTM_REBUILD_MESH_FLUSH("Flush Mesh");
|
||||
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ void LLWaterParamManager::loadAllPresets()
|
|||
|
||||
void LLWaterParamManager::loadPresetsFromDir(const std::string& dir)
|
||||
{
|
||||
LL_INFOS("AppInit", "Shaders") << "Loading water presets from " << dir << LL_ENDL;
|
||||
LL_DEBUGS("AppInit", "Shaders") << "Loading water presets from " << dir << LL_ENDL;
|
||||
|
||||
LLDirIterator dir_iter(dir, "*.xml");
|
||||
while (1)
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ void LLWLDayCycle::loadDayCycleFromFile(const std::string & fileName)
|
|||
// static
|
||||
LLSD LLWLDayCycle::loadDayCycleFromPath(const std::string& file_path)
|
||||
{
|
||||
LL_INFOS("Windlight") << "Loading DayCycle settings from " << file_path << LL_ENDL;
|
||||
LL_DEBUGS("Windlight") << "Loading DayCycle settings from " << file_path << LL_ENDL;
|
||||
|
||||
llifstream day_cycle_xml(file_path.c_str());
|
||||
if (day_cycle_xml.is_open())
|
||||
|
|
|
|||
|
|
@ -569,7 +569,7 @@ void LLPipeline::init()
|
|||
connectRefreshCachedSettingsSafe("RenderAutoMaskAlphaDeferred");
|
||||
connectRefreshCachedSettingsSafe("RenderAutoMaskAlphaNonDeferred");
|
||||
connectRefreshCachedSettingsSafe("RenderUseFarClip");
|
||||
connectRefreshCachedSettingsSafe("RenderAvatarMaxVisible");
|
||||
connectRefreshCachedSettingsSafe("RenderAvatarMaxNonImpostors");
|
||||
connectRefreshCachedSettingsSafe("RenderDelayVBUpdate");
|
||||
connectRefreshCachedSettingsSafe("UseOcclusion");
|
||||
connectRefreshCachedSettingsSafe("VertexShaderEnable");
|
||||
|
|
@ -1081,7 +1081,8 @@ void LLPipeline::refreshCachedSettings()
|
|||
LLPipeline::sAutoMaskAlphaDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaDeferred");
|
||||
LLPipeline::sAutoMaskAlphaNonDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaNonDeferred");
|
||||
LLPipeline::sUseFarClip = gSavedSettings.getBOOL("RenderUseFarClip");
|
||||
LLVOAvatar::sMaxVisible = (U32)gSavedSettings.getS32("RenderAvatarMaxVisible");
|
||||
LLVOAvatar::sMaxNonImpostors = gSavedSettings.getU32("RenderAvatarMaxNonImpostors");
|
||||
LLVOAvatar::updateImpostorRendering(LLVOAvatar::sMaxNonImpostors);
|
||||
LLPipeline::sDelayVBUpdate = gSavedSettings.getBOOL("RenderDelayVBUpdate");
|
||||
|
||||
LLPipeline::sUseOcclusion =
|
||||
|
|
@ -3113,7 +3114,9 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
|
|||
if (vobj) // this test may not be needed, see above
|
||||
{
|
||||
LLVOAvatar* av = vobj->asAvatar();
|
||||
if (av && av->isImpostor())
|
||||
if (av && (av->isImpostor()
|
||||
|| av->isInMuteList()
|
||||
|| (LLVOAvatar::AV_DO_NOT_RENDER == av->getVisualMuteSettings() && !av->needsImpostorUpdate()) ))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -6111,6 +6114,13 @@ void LLPipeline::calcNearbyLights(LLCamera& camera)
|
|||
{
|
||||
const Light* light = &(*iter);
|
||||
LLDrawable* drawable = light->drawable;
|
||||
const LLViewerObject *vobj = light->drawable->getVObj();
|
||||
if(vobj && vobj->getAvatar() && vobj->getAvatar()->isTooComplex())
|
||||
{
|
||||
drawable->clearState(LLDrawable::NEARBY_LIGHT);
|
||||
continue;
|
||||
}
|
||||
|
||||
LLVOVolume* volight = drawable->getVOVolume();
|
||||
if (!volight || !drawable->isState(LLDrawable::LIGHT))
|
||||
{
|
||||
|
|
@ -11304,16 +11314,25 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
|
||||
if (!avatar || !avatar->mDrawable)
|
||||
{
|
||||
LL_WARNS_ONCE("AvatarRenderPipeline") << "Avatar is " << (avatar ? "not drawable" : "null") << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
LL_DEBUGS_ONCE("AvatarRenderPipeline") << "Avatar " << avatar->getID() << " is drawable" << LL_ENDL;
|
||||
|
||||
assertInitialized();
|
||||
|
||||
bool visually_muted = avatar->isVisuallyMuted();
|
||||
LL_DEBUGS_ONCE("AvatarRenderPipeline") << "Avatar " << avatar->getID()
|
||||
<< " is " << ( visually_muted ? "" : "not ") << "visually muted"
|
||||
<< LL_ENDL;
|
||||
bool too_complex = avatar->isTooComplex();
|
||||
LL_DEBUGS_ONCE("AvatarRenderPipeline") << "Avatar " << avatar->getID()
|
||||
<< " is " << ( too_complex ? "" : "not ") << "too complex"
|
||||
<< LL_ENDL;
|
||||
|
||||
pushRenderTypeMask();
|
||||
|
||||
if (visually_muted)
|
||||
if (visually_muted || too_complex)
|
||||
{
|
||||
andRenderTypeMask(LLPipeline::RENDER_TYPE_AVATAR, END_RENDER_TYPES);
|
||||
}
|
||||
|
|
@ -11358,7 +11377,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_MARK_VISIBLE);
|
||||
markVisible(avatar->mDrawable, *viewer_camera);
|
||||
LLVOAvatar::sUseImpostors = FALSE;
|
||||
LLVOAvatar::sUseImpostors = false; // @TODO ???
|
||||
|
||||
LLVOAvatar::attachment_map_t::iterator iter;
|
||||
for (iter = avatar->mAttachmentPoints.begin();
|
||||
|
|
@ -11471,7 +11490,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
|
||||
F32 old_alpha = LLDrawPoolAvatar::sMinimumAlpha;
|
||||
|
||||
if (visually_muted)
|
||||
if (visually_muted || too_complex)
|
||||
{ //disable alpha masking for muted avatars (get whole skin silhouette)
|
||||
LLDrawPoolAvatar::sMinimumAlpha = 0.f;
|
||||
}
|
||||
|
|
@ -11533,7 +11552,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
|
||||
LLGLDisable blend(GL_BLEND);
|
||||
|
||||
if (visually_muted)
|
||||
if (visually_muted || too_complex)
|
||||
{
|
||||
gGL.setColorMask(true, true);
|
||||
}
|
||||
|
|
@ -11562,13 +11581,16 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
}
|
||||
|
||||
|
||||
if (LLMuteList::getInstance()->isMuted(avatar->getID()))
|
||||
{ //grey muted avatar
|
||||
gGL.diffuseColor4ub(64,64,64,255);
|
||||
if (visually_muted)
|
||||
{ // Visually muted avatar
|
||||
LLColor4 muted_color(avatar->getMutedAVColor());
|
||||
LL_DEBUGS_ONCE("AvatarRenderPipeline") << "Avatar " << avatar->getID() << " MUTED set solid color " << muted_color << LL_ENDL;
|
||||
gGL.diffuseColor4fv( muted_color.mV );
|
||||
}
|
||||
else
|
||||
{ // Visually muted avatar
|
||||
gGL.diffuseColor4fv( avatar->getMutedAVColor().mV );
|
||||
{ //grey muted avatar
|
||||
LL_DEBUGS_ONCE("AvatarRenderPipeline") << "Avatar " << avatar->getID() << " MUTED set grey" << LL_ENDL;
|
||||
gGL.diffuseColor4fv(LLColor4::pink.mV );
|
||||
}
|
||||
|
||||
{
|
||||
|
|
@ -11595,7 +11617,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
|
|||
|
||||
avatar->setImpostorDim(tdim);
|
||||
|
||||
LLVOAvatar::sUseImpostors = TRUE;
|
||||
LLVOAvatar::sUseImpostors = true; // @TODO ???
|
||||
sUseOcclusion = occlusion;
|
||||
sReflectionRender = FALSE;
|
||||
sImpostorRender = FALSE;
|
||||
|
|
|
|||
|
|
@ -519,7 +519,7 @@ public:
|
|||
RENDER_DEBUG_BATCH_SIZE = 0x00004000,
|
||||
RENDER_DEBUG_ALPHA_BINS = 0x00008000,
|
||||
RENDER_DEBUG_RAYCAST = 0x00010000,
|
||||
RENDER_DEBUG_SHAME = 0x00020000,
|
||||
RENDER_DEBUG_AVATAR_DRAW_INFO = 0x00020000,
|
||||
RENDER_DEBUG_SHADOW_FRUSTA = 0x00040000,
|
||||
RENDER_DEBUG_SCULPTED = 0x00080000,
|
||||
RENDER_DEBUG_AVATAR_VOLUME = 0x00100000,
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 366 B |
|
|
@ -205,6 +205,8 @@ with the same filename but different name
|
|||
|
||||
<texture name="Facebook_Icon" file_name="icons/Facebook.png" preload="false" />
|
||||
|
||||
<texture name="Presets_Icon" file_name="icons/Presets_Icon.png" preload="true" />
|
||||
|
||||
<texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />
|
||||
<texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
|
||||
<texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" />
|
||||
|
|
|
|||
|
|
@ -184,6 +184,7 @@
|
|||
mouse_opaque="false"
|
||||
name="divisor3"/>
|
||||
<text
|
||||
name="autoreplace_keyword_txt"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
|
|
@ -204,6 +205,7 @@
|
|||
width="150"
|
||||
/>
|
||||
<text
|
||||
name="autoreplace_replacement_txt"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
height="130"
|
||||
help_topic="floater_delete_preset"
|
||||
layout="topleft"
|
||||
name="Delete Pref Preset"
|
||||
save_rect="true"
|
||||
title="DELETE PREF PRESET"
|
||||
width="300">
|
||||
|
||||
<string name="title_graphic">Delete Graphic Preset</string>
|
||||
<string name="title_camera">Delete Camera Preset</string>
|
||||
|
||||
<text
|
||||
follows="top|left|right"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="Preset"
|
||||
top="30"
|
||||
width="200">
|
||||
Select a preset
|
||||
</text>
|
||||
<combo_box
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="preset_combo"
|
||||
top_delta="20"
|
||||
width="200"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Delete"
|
||||
layout="topleft"
|
||||
top_delta="40"
|
||||
left="20"
|
||||
name="delete"
|
||||
width="70"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Cancel"
|
||||
layout="topleft"
|
||||
left_pad="20"
|
||||
name="cancel"
|
||||
width="70"/>
|
||||
</floater>
|
||||
|
|
@ -22,10 +22,10 @@
|
|||
top="5"
|
||||
width="150"
|
||||
height="20">
|
||||
<item label="2x Average"/>
|
||||
<item label="Max"/>
|
||||
<item label="Recent Max"/>
|
||||
<item label="100ms"/>
|
||||
<item name="2x Average" label="2x Average"/>
|
||||
<item name="Max" label="Max"/>
|
||||
<item name="Recent Max" label="Recent Max"/>
|
||||
<item name="100ms" label="100ms"/>
|
||||
</combo_box>
|
||||
<combo_box name="metric_combo"
|
||||
follows="left|top"
|
||||
|
|
@ -33,9 +33,9 @@
|
|||
top="5"
|
||||
width="150"
|
||||
height="20">
|
||||
<item label="Time"/>
|
||||
<item label="Number of Calls"/>
|
||||
<item label="Hz"/>
|
||||
<item name="Time" label="Time"/>
|
||||
<item name="Number of Calls" label="Number of Calls"/>
|
||||
<item name="Hz" label="Hz"/>
|
||||
</combo_box>
|
||||
<button follows="top|right"
|
||||
name="pause_btn"
|
||||
|
|
|
|||
|
|
@ -1,208 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
height="224"
|
||||
layout="topleft"
|
||||
name="Hardware Settings Floater"
|
||||
help_topic="hardware_settings_floater"
|
||||
title="HARDWARE SETTINGS"
|
||||
width="615">
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="Filtering:"
|
||||
top="20"
|
||||
width="188">
|
||||
Filtering:
|
||||
</text>
|
||||
<check_box
|
||||
control_name="RenderAnisotropic"
|
||||
height="16"
|
||||
label="Anisotropic Filtering (slower when enabled)"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="ani"
|
||||
top_delta="0"
|
||||
width="256" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="antialiasing label"
|
||||
top_pad="7"
|
||||
width="188">
|
||||
Antialiasing:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderFSAASamples"
|
||||
height="22"
|
||||
initial_value="false"
|
||||
label="Antialiasing"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="fsaa"
|
||||
top_delta="0"
|
||||
width="130">
|
||||
<combo_box.item
|
||||
label="Disabled"
|
||||
name="FSAADisabled"
|
||||
value="0" />
|
||||
<combo_box.item
|
||||
label="2x"
|
||||
name="2x"
|
||||
value="2" />
|
||||
<combo_box.item
|
||||
label="4x"
|
||||
name="4x"
|
||||
value="4" />
|
||||
<combo_box.item
|
||||
label="8x"
|
||||
name="8x"
|
||||
value="8" />
|
||||
<combo_box.item
|
||||
label="16x"
|
||||
name="16x"
|
||||
value="16" />
|
||||
</combo_box>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="antialiasing restart"
|
||||
top_delta="0"
|
||||
width="230">
|
||||
(requires viewer restart)
|
||||
</text>
|
||||
<spinner
|
||||
control_name="RenderGamma"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.01"
|
||||
initial_value="1"
|
||||
label="Gamma:"
|
||||
label_width="198"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
max_val="2"
|
||||
name="gamma"
|
||||
top_pad="11"
|
||||
width="262" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="(brightness, lower is brighter)"
|
||||
top_delta="2"
|
||||
width="385">
|
||||
(0 = default brightness, lower = brighter)
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="Enable VBO:"
|
||||
top_pad="10"
|
||||
width="188">
|
||||
Enable VBO:
|
||||
</text>
|
||||
<check_box
|
||||
control_name="RenderVBOEnable"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Enable OpenGL Vertex Buffer Objects"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="vbo"
|
||||
tool_tip="Enabling this on modern hardware gives a performance gain. However, older hardware often has poor implementations of VBOs and you may get crashes when this is enabled."
|
||||
width="315" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="tc label"
|
||||
top_pad="10"
|
||||
width="188">
|
||||
Enable S3TC:
|
||||
</text>
|
||||
<check_box
|
||||
control_name="RenderCompressTextures"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Enable Texture Compression (requires restart)"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="texture compression"
|
||||
tool_tip="Compresses textures in video memory, allowing for higher resolution textures to be loaded at the cost of some color quality."
|
||||
width="315" />
|
||||
<slider
|
||||
control_name="TextureMemory"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
increment="16"
|
||||
initial_value="32"
|
||||
label="Texture Memory (MB):"
|
||||
label_width="195"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
max_val="4096"
|
||||
name="GraphicsCardTextureMemory"
|
||||
tool_tip="Amount of memory to allocate for textures. Defaults to video card memory. Reducing this may improve performance but may also make textures blurry."
|
||||
top_pad="10"
|
||||
width="360" />
|
||||
<spinner
|
||||
control_name="RenderFogRatio"
|
||||
decimal_digits="1"
|
||||
follows="left|top"
|
||||
height="22"
|
||||
initial_value="4"
|
||||
label="Fog Distance Ratio:"
|
||||
label_width="198"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
max_val="10"
|
||||
min_val="0.5"
|
||||
name="fog"
|
||||
top_pad="7"
|
||||
width="262" />
|
||||
<button
|
||||
follows="right|bottom"
|
||||
height="22"
|
||||
label="OK"
|
||||
label_selected="OK"
|
||||
layout="topleft"
|
||||
right="-105"
|
||||
name="OK"
|
||||
top="192"
|
||||
width="90" />
|
||||
<button
|
||||
follows="right|bottom"
|
||||
height="22"
|
||||
label="Cancel"
|
||||
label_selected="Cancel"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="Cancel"
|
||||
right="-10"
|
||||
width="90" />
|
||||
</floater>
|
||||
|
|
@ -301,6 +301,7 @@
|
|||
top_pad="4"
|
||||
width="64" />
|
||||
<text
|
||||
name="label_hours"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -323,6 +324,7 @@
|
|||
left="8"
|
||||
width="64" />
|
||||
<text
|
||||
name="label_days"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
height="130"
|
||||
help_topic="floater_load_preset"
|
||||
layout="topleft"
|
||||
name="Load Pref Preset"
|
||||
save_rect="true"
|
||||
title="LOAD PREF PRESET"
|
||||
width="300">
|
||||
|
||||
<string name="title_graphic">Load Graphic Preset</string>
|
||||
<string name="title_camera">Load Camera Preset</string>
|
||||
|
||||
<text
|
||||
follows="top|left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="Preset"
|
||||
top="30"
|
||||
width="200">
|
||||
Select a preset
|
||||
</text>
|
||||
<combo_box
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="preset_combo"
|
||||
top_delta="20"
|
||||
width="200"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="OK"
|
||||
layout="topleft"
|
||||
top_delta="40"
|
||||
left="20"
|
||||
name="ok"
|
||||
width="70"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Cancel"
|
||||
layout="topleft"
|
||||
left_pad="20"
|
||||
name="cancel"
|
||||
width="70"/>
|
||||
</floater>
|
||||
|
|
@ -19,6 +19,7 @@
|
|||
<string name="OutboxImporting">Sending folders...</string>
|
||||
<string name="OutboxInitializing">Initializing...</string>
|
||||
<panel
|
||||
name="panel_1"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
|
|
@ -27,6 +28,7 @@
|
|||
height="440"
|
||||
width="333">
|
||||
<panel
|
||||
name="panel_2"
|
||||
follows="all"
|
||||
left="10"
|
||||
bottom="370"
|
||||
|
|
@ -70,6 +72,7 @@
|
|||
</panel>
|
||||
</panel>
|
||||
<panel
|
||||
name="panel_3"
|
||||
follows="bottom|left|right"
|
||||
left="10"
|
||||
bottom="435"
|
||||
|
|
@ -89,6 +92,7 @@
|
|||
bevel_style="in"
|
||||
visible="true">
|
||||
<text
|
||||
name="text_1"
|
||||
type="string"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -185,9 +185,11 @@
|
|||
width="135">
|
||||
<item
|
||||
name="Load from file"
|
||||
label="Load from file"
|
||||
value="Load from file" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate"
|
||||
value="Generate" />
|
||||
</combo_box>
|
||||
<line_editor
|
||||
|
|
@ -220,9 +222,11 @@
|
|||
width="130">
|
||||
<item
|
||||
name="Triangle Limit"
|
||||
label="Triangle Limit"
|
||||
value="Triangle Limit" />
|
||||
<item
|
||||
name="Error Threshold"
|
||||
label="Error Threshold"
|
||||
value="Error Threshold" />
|
||||
</combo_box>
|
||||
<spinner
|
||||
|
|
@ -310,12 +314,15 @@
|
|||
width="135">
|
||||
<item
|
||||
name="Load from file"
|
||||
label="Load from file"
|
||||
value="Load from file" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate"
|
||||
value="Generate" />
|
||||
<item
|
||||
name="Use LoD above"
|
||||
label="Use LoD above"
|
||||
value="Use LoD above" />
|
||||
</combo_box>
|
||||
<line_editor
|
||||
|
|
@ -349,9 +356,11 @@
|
|||
width="130">
|
||||
<item
|
||||
name="Triangle Limit"
|
||||
label="Triangle Limit"
|
||||
value="Triangle Limit" />
|
||||
<item
|
||||
name="Error Threshold"
|
||||
label="Error Threshold"
|
||||
value="Error Threshold" />
|
||||
</combo_box>
|
||||
<spinner
|
||||
|
|
@ -438,12 +447,15 @@
|
|||
width="135">
|
||||
<item
|
||||
name="Load from file"
|
||||
label="Load from file"
|
||||
value="Load from file" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate"
|
||||
value="Generate" />
|
||||
<item
|
||||
name="Use LoD above"
|
||||
label="Use LoD above"
|
||||
value="Use LoD above" />
|
||||
</combo_box>
|
||||
<line_editor
|
||||
|
|
@ -477,9 +489,11 @@
|
|||
width="130">
|
||||
<item
|
||||
name="Triangle Limit"
|
||||
label="Triangle Limit"
|
||||
value="Triangle Limit" />
|
||||
<item
|
||||
name="Error Threshold"
|
||||
label="Error Threshold"
|
||||
value="Error Threshold" />
|
||||
</combo_box>
|
||||
<spinner
|
||||
|
|
@ -566,12 +580,15 @@
|
|||
width="135">
|
||||
<item
|
||||
name="Load from file"
|
||||
label="Load from file"
|
||||
value="Load from file" />
|
||||
<item
|
||||
name="Generate"
|
||||
label="Generate"
|
||||
value="Generate" />
|
||||
<item
|
||||
name="Use LoD above"
|
||||
label="Use LoD above"
|
||||
value="Use LoD above" />
|
||||
</combo_box>
|
||||
<line_editor
|
||||
|
|
@ -605,9 +622,11 @@
|
|||
width="130">
|
||||
<item
|
||||
name="Triangle Limit"
|
||||
label="Triangle Limit"
|
||||
value="Triangle Limit" />
|
||||
<item
|
||||
name="Error Threshold"
|
||||
label="Error Threshold"
|
||||
value="Error Threshold" />
|
||||
</combo_box>
|
||||
<spinner
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
<floater.string name="character_owner_unknown">[Unknown]</floater.string>
|
||||
<floater.string name="character_owner_group">[group]</floater.string>
|
||||
<panel
|
||||
name="pathfinding_chars_main"
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
follows="left|top|right|bottom"
|
||||
|
|
@ -118,6 +119,7 @@
|
|||
left="18"
|
||||
width="600"/>
|
||||
<panel
|
||||
name="pathfinding_chars_actions"
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
follows="left|right|bottom"
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
<floater.string name="pathing_path_invalid">A path between the chosen points cannot be found.</floater.string>
|
||||
<floater.string name="pathing_error">An error occurred during path generation.</floater.string>
|
||||
<panel
|
||||
name="pathfinding_console_main"
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
follows="left|top"
|
||||
|
|
@ -46,6 +47,7 @@
|
|||
height="61"
|
||||
width="214">
|
||||
<text
|
||||
name="viewer_status_label"
|
||||
height="13"
|
||||
word_wrap="true"
|
||||
use_ellipses="false"
|
||||
|
|
@ -74,6 +76,7 @@
|
|||
</text>
|
||||
</panel>
|
||||
<panel
|
||||
name="pathfinding_console_simulator"
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
follows="left|top"
|
||||
|
|
@ -82,6 +85,7 @@
|
|||
height="66"
|
||||
width="214">
|
||||
<text
|
||||
name="simulator_status_label"
|
||||
height="13"
|
||||
word_wrap="true"
|
||||
use_ellipses="false"
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@
|
|||
<floater.string name="linkset_is_restricted_non_volume_state">[restricted,concave]</floater.string>
|
||||
<floater.string name="linkset_choose_use">Choose linkset use...</floater.string>
|
||||
<panel
|
||||
name="pathfinding_linksets_main"
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
follows="left|top|right|bottom"
|
||||
|
|
@ -53,6 +54,7 @@
|
|||
height="226"
|
||||
width="1059">
|
||||
<text
|
||||
name="linksets_filter_label"
|
||||
height="13"
|
||||
word_wrap="false"
|
||||
use_ellipses="false"
|
||||
|
|
@ -67,6 +69,7 @@
|
|||
Filter by:
|
||||
</text>
|
||||
<text
|
||||
name="linksets_name_label"
|
||||
height="13"
|
||||
word_wrap="false"
|
||||
use_ellipses="false"
|
||||
|
|
@ -91,6 +94,7 @@
|
|||
name="filter_by_name"
|
||||
width="161" />
|
||||
<text
|
||||
name="linksets_desc_label"
|
||||
height="13"
|
||||
word_wrap="false"
|
||||
use_ellipses="false"
|
||||
|
|
@ -279,6 +283,7 @@
|
|||
left="18"
|
||||
width="1039"/>
|
||||
<panel
|
||||
name="pathfinding_linksets_actions"
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
follows="left|right|bottom"
|
||||
|
|
@ -287,6 +292,7 @@
|
|||
height="67"
|
||||
width="1010">
|
||||
<text
|
||||
name="linksets_actions_label"
|
||||
height="13"
|
||||
word_wrap="false"
|
||||
use_ellipses="false"
|
||||
|
|
@ -366,6 +372,7 @@
|
|||
left="18"
|
||||
width="1039"/>
|
||||
<panel
|
||||
name="pathfinding_linksets_attributes"
|
||||
border="false"
|
||||
bevel_style="none"
|
||||
follows="left|right|bottom"
|
||||
|
|
@ -374,6 +381,7 @@
|
|||
height="75"
|
||||
width="1010">
|
||||
<text
|
||||
name="linksets_attributes_label"
|
||||
height="13"
|
||||
word_wrap="false"
|
||||
use_ellipses="false"
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
left="0"
|
||||
width="430" />
|
||||
<text
|
||||
name="label_1"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -36,6 +37,7 @@
|
|||
Next owner:
|
||||
</text>
|
||||
<text
|
||||
name="label_2"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -48,6 +50,7 @@
|
|||
Copy
|
||||
</text>
|
||||
<text
|
||||
name="label_3"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -60,6 +63,7 @@
|
|||
Modify
|
||||
</text>
|
||||
<text
|
||||
name="label_4"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -72,6 +76,7 @@
|
|||
Transfer
|
||||
</text>
|
||||
<text
|
||||
name="label_5"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -85,6 +90,7 @@
|
|||
Share with group
|
||||
</text>
|
||||
<text
|
||||
name="label_6"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -98,6 +104,7 @@
|
|||
Allow anyone to copy
|
||||
</text>
|
||||
<text
|
||||
name="label_7"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -162,6 +169,7 @@
|
|||
top_delta="0"
|
||||
width="100" />
|
||||
<text
|
||||
name="label_8"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -225,6 +233,7 @@
|
|||
top_delta="0"
|
||||
width="100" />
|
||||
<text
|
||||
name="label_9"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -288,6 +297,7 @@
|
|||
top_delta="0"
|
||||
width="100" />
|
||||
<text
|
||||
name="label_10"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -351,6 +361,7 @@
|
|||
top_delta="0"
|
||||
width="100" />
|
||||
<text
|
||||
name="label_11"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
@ -414,6 +425,7 @@
|
|||
top_delta="0"
|
||||
width="100" />
|
||||
<text
|
||||
name="label_12"
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
single_instance="true"
|
||||
title="PREFERENCES"
|
||||
width="658">
|
||||
<button
|
||||
<button
|
||||
follows="right|bottom"
|
||||
height="23"
|
||||
label="OK"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,935 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
height="400"
|
||||
layout="topleft"
|
||||
name="prefs_graphics_advanced"
|
||||
help_topic="Preferences_Graphics_Advanced"
|
||||
single_instance="true"
|
||||
save_rect="true"
|
||||
title="ADVANCED GRAPHICS PREFERENCES"
|
||||
width="800">
|
||||
|
||||
<!-- This block shows Advanced Settings -->
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="GeneralText"
|
||||
top="5"
|
||||
left="10"
|
||||
width="128">
|
||||
General
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="RenderFarClip"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="8"
|
||||
initial_value="160"
|
||||
label="Draw distance:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
min_val="64"
|
||||
max_val="512"
|
||||
name="DrawDistance"
|
||||
top_delta="16"
|
||||
width="330" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="DrawDistanceMeterText2"
|
||||
top_delta="0"
|
||||
left_delta="330"
|
||||
width="20">
|
||||
m
|
||||
</text>
|
||||
<slider
|
||||
control_name="RenderMaxPartCount"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="256"
|
||||
initial_value="4096"
|
||||
label="Max. particle count:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
max_val="8192"
|
||||
name="MaxParticleCount"
|
||||
top_delta="16"
|
||||
width="336" />
|
||||
|
||||
<slider
|
||||
control_name="RenderGlowResolutionPow"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="1"
|
||||
initial_value="8"
|
||||
label="Post process quality:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
min_val="8"
|
||||
max_val="9"
|
||||
name="RenderPostProcess"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="PostProcessText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="PostProcessText"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="AvatarText"
|
||||
top_delta="20"
|
||||
left="10"
|
||||
width="128">
|
||||
Avatar
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="IndirectMaxComplexity"
|
||||
tool_tip="Controls at what point a visually complex avatar is drawn as a jellybaby"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
initial_value="101"
|
||||
increment="1"
|
||||
label="Maximum complexity:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
min_val="1"
|
||||
max_val="101"
|
||||
name="IndirectMaxComplexity"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateIndirectMaxComplexity"
|
||||
parameter="IndirectMaxComlexityText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
name="IndirectMaxComplexityText"
|
||||
width="65">
|
||||
0
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="IndirectMaxNonImpostors"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="1"
|
||||
initial_value="12"
|
||||
label="Max. # of non-impostors:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
min_val="1"
|
||||
max_val="66"
|
||||
name="IndirectMaxNonImpostors"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateIndirectMaxNonImpostors"
|
||||
parameter="IndirectNonImpostorsText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
name="IndirectMaxNonImpostorsText"
|
||||
width="65">
|
||||
0
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="RenderAvatarLODFactor"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.125"
|
||||
initial_value="160"
|
||||
label="Detail:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="AvatarMeshDetail"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="AvatarMeshDetailText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="AvatarMeshDetailText"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="RenderAvatarPhysicsLODFactor"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
initial_value="100"
|
||||
increment=".05"
|
||||
label="Physics:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="AvatarPhysicsDetail"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="AvatarPhysicsDetailText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
name="AvatarPhysicsDetailText"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="ShadersText"
|
||||
top_delta="20"
|
||||
left="10"
|
||||
width="128">
|
||||
Hardware
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="TextureMemory"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="16"
|
||||
initial_value="32"
|
||||
label="Texture Memory (MB):"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
max_val="4096"
|
||||
name="GraphicsCardTextureMemory"
|
||||
tool_tip="Amount of memory to allocate for textures. Defaults to video card memory. Reducing this may improve performance but may also make textures blurry."
|
||||
top_delta="16"
|
||||
width="335" />
|
||||
|
||||
<slider
|
||||
control_name="RenderFogRatio"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
initial_value="4"
|
||||
decimal_digits="1"
|
||||
label="Fog Distance Ratio:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="fog"
|
||||
min_val="0.5"
|
||||
max_val="10"
|
||||
increment="0.1"
|
||||
top_delta="16"
|
||||
width="332" />
|
||||
|
||||
<slider
|
||||
control_name="RenderGamma"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
initial_value="1"
|
||||
decimal_digits="2"
|
||||
label="Gamma:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="gamma"
|
||||
min_val="0"
|
||||
max_val="2"
|
||||
increment="0.01"
|
||||
top_delta="16"
|
||||
width="332" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="(brightness, lower is brighter)"
|
||||
top_delta="16"
|
||||
width="260">
|
||||
(0 = default brightness, lower = brighter)
|
||||
</text>
|
||||
|
||||
<check_box
|
||||
control_name="RenderAnisotropic"
|
||||
height="16"
|
||||
label="Anisotropic Filtering (slower when enabled)"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="ani"
|
||||
top_delta="16"
|
||||
width="256" />
|
||||
|
||||
<check_box
|
||||
control_name="RenderVBOEnable"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Enable OpenGL Vertex Buffer Objects"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
top_delta="16"
|
||||
name="vbo"
|
||||
tool_tip="Enabling this on modern hardware gives a performance gain. However, older hardware often has poor implementations of VBOs and you may get crashes when this is enabled."
|
||||
width="315" />
|
||||
|
||||
<check_box
|
||||
control_name="RenderCompressTextures"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Enable Texture Compression (requires restart)"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
top_delta="16"
|
||||
name="texture compression"
|
||||
tool_tip="Compresses textures in video memory, allowing for higher resolution textures to be loaded at the cost of some color quality."
|
||||
width="315" />
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
name="antialiasing label"
|
||||
top_delta="20"
|
||||
width="100">
|
||||
Antialiasing:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderFSAASamples"
|
||||
height="20"
|
||||
initial_value="false"
|
||||
label="Antialiasing"
|
||||
layout="topleft"
|
||||
left_pad="40"
|
||||
name="fsaa"
|
||||
top_delta="0"
|
||||
width="90">
|
||||
<combo_box.item
|
||||
label="Disabled"
|
||||
name="FSAADisabled"
|
||||
value="0" />
|
||||
<combo_box.item
|
||||
label="2x"
|
||||
name="2x"
|
||||
value="2" />
|
||||
<combo_box.item
|
||||
label="4x"
|
||||
name="4x"
|
||||
value="4" />
|
||||
<combo_box.item
|
||||
label="8x"
|
||||
name="8x"
|
||||
value="8" />
|
||||
<combo_box.item
|
||||
label="16x"
|
||||
name="16x"
|
||||
value="16" />
|
||||
</combo_box>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
name="antialiasing restart"
|
||||
top_delta="0"
|
||||
width="130">
|
||||
(requires restart)
|
||||
</text>
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
height="322"
|
||||
layout="topleft"
|
||||
left="385"
|
||||
name="vert_border"
|
||||
top="16"
|
||||
width="0"/>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="AvatarText"
|
||||
top_delta="20"
|
||||
left="400"
|
||||
top="21"
|
||||
width="128">
|
||||
Mesh
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="RenderTerrainLODFactor"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.125"
|
||||
initial_value="160"
|
||||
label="Terrain Mesh Detail:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
min_val="1"
|
||||
max_val="2"
|
||||
name="TerrainMeshDetail"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="TerrainMeshDetailText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="TerrainMeshDetailText"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="RenderTreeLODFactor"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.125"
|
||||
initial_value="160"
|
||||
label="Trees:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
name="TreeMeshDetail"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="TreeMeshDetailText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="TreeMeshDetailText"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="RenderVolumeLODFactor"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.125"
|
||||
initial_value="160"
|
||||
label="Objects:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
max_val="2"
|
||||
name="ObjectMeshDetail"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="ObjectMeshDetailText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="ObjectMeshDetailText"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<slider
|
||||
control_name="RenderFlexTimeFactor"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
initial_value="160"
|
||||
label="Flexiprims:"
|
||||
label_width="185"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
name="FlexibleMeshDetail"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="FlexibleMeshDetailText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="FlexibleMeshDetailText"
|
||||
top_delta="0"
|
||||
left_delta="304"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="ShadersText"
|
||||
top_delta="20"
|
||||
left="400"
|
||||
width="128">
|
||||
Shaders
|
||||
</text>
|
||||
|
||||
<check_box
|
||||
control_name="RenderTransparentWater"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Transparent Water"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
name="TransparentWater"
|
||||
top_delta="16"
|
||||
width="300" />
|
||||
|
||||
<check_box
|
||||
control_name="RenderObjectBump"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Bump mapping and shiny"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
name="BumpShiny"
|
||||
top_delta="16"
|
||||
width="300">
|
||||
<check_box.commit_callback
|
||||
function="Pref.VertexShaderEnable" />
|
||||
</check_box>
|
||||
|
||||
<check_box
|
||||
control_name="RenderLocalLights"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Local Lights"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
name="LocalLights"
|
||||
top_delta="16"
|
||||
width="300" />
|
||||
|
||||
<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"
|
||||
height="16"
|
||||
label="Terrain Detail:"
|
||||
label_width="165"
|
||||
layout="topleft"
|
||||
left="440"
|
||||
show_text="false"
|
||||
initial_value="0"
|
||||
increment="1"
|
||||
min_val="0"
|
||||
max_val="1"
|
||||
name="TerrainDetail"
|
||||
top_delta="16"
|
||||
width="280" >
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="TerrainDetail" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
top_delta="0"
|
||||
left_delta="284"
|
||||
name="TerrainDetailText"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<check_box
|
||||
control_name="RenderAvatarVP"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Avatar Hardware skinning"
|
||||
layout="topleft"
|
||||
left="440"
|
||||
name="AvatarVertexProgram"
|
||||
top_delta="16"
|
||||
width="280">
|
||||
<check_box.commit_callback
|
||||
function="Pref.VertexShaderEnable" />
|
||||
</check_box>
|
||||
|
||||
<check_box
|
||||
control_name="RenderAvatarCloth"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Avatar cloth"
|
||||
layout="topleft"
|
||||
left="440"
|
||||
name="AvatarCloth"
|
||||
top_delta="16"
|
||||
width="280" />
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="ReflectionsText"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
top_delta="16"
|
||||
left="440"
|
||||
width="128">
|
||||
Water Reflections:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderReflectionDetail"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="170"
|
||||
top_delta="0"
|
||||
name="Reflections"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
label="Minimal"
|
||||
name="0"
|
||||
value="0"/>
|
||||
<combo_box.item
|
||||
label="Terrain and trees"
|
||||
name="1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="All static objects"
|
||||
name="2"
|
||||
value="2"/>
|
||||
<combo_box.item
|
||||
label="All avatars and objects"
|
||||
name="3"
|
||||
value="3"/>
|
||||
<combo_box.item
|
||||
label="Everything"
|
||||
name="4"
|
||||
value="4"/>
|
||||
</combo_box>
|
||||
|
||||
<check_box
|
||||
control_name="WindLightUseAtmosShaders"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Atmospheric shaders"
|
||||
layout="topleft"
|
||||
left="440"
|
||||
name="WindLightUseAtmosShaders"
|
||||
top_delta="16"
|
||||
width="280">
|
||||
<check_box.commit_callback
|
||||
function="Pref.VertexShaderEnable" />
|
||||
</check_box>
|
||||
|
||||
<slider
|
||||
control_name="WLSkyDetail"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="8"
|
||||
initial_value="160"
|
||||
label="Sky:"
|
||||
label_width="145"
|
||||
layout="topleft"
|
||||
left="460"
|
||||
min_val="16"
|
||||
max_val="128"
|
||||
name="SkyMeshDetail"
|
||||
show_text="false"
|
||||
top_delta="16"
|
||||
width="260">
|
||||
<slider.commit_callback
|
||||
function="Pref.UpdateSliderText"
|
||||
parameter="SkyMeshDetailText" />
|
||||
</slider>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_delta="264"
|
||||
name="SkyMeshDetailText"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
top_delta="0"
|
||||
width="65">
|
||||
Low
|
||||
</text>
|
||||
|
||||
<check_box
|
||||
control_name="RenderDeferred"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Advanced Lighting Model"
|
||||
layout="topleft"
|
||||
left="460"
|
||||
name="UseLightShaders"
|
||||
top_delta="16"
|
||||
width="260">
|
||||
<check_box.commit_callback
|
||||
function="Pref.VertexShaderEnable" />
|
||||
</check_box>
|
||||
|
||||
<check_box
|
||||
control_name="RenderDeferredSSAO"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Ambient Occlusion"
|
||||
layout="topleft"
|
||||
left="480"
|
||||
name="UseSSAO"
|
||||
top_delta="16"
|
||||
width="240">
|
||||
<check_box.commit_callback
|
||||
function="Pref.VertexShaderEnable" />
|
||||
</check_box>
|
||||
|
||||
<check_box
|
||||
control_name="RenderDepthOfField"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
label="Depth of Field"
|
||||
layout="topleft"
|
||||
left="480"
|
||||
name="UseDoF"
|
||||
top_delta="16"
|
||||
width="240">
|
||||
<check_box.commit_callback
|
||||
function="Pref.VertexShaderEnable" />
|
||||
</check_box>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="480"
|
||||
name="RenderShadowDetailText"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
top_delta="16"
|
||||
width="128">
|
||||
Shadows:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderShadowDetail"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="130"
|
||||
top_delta="0"
|
||||
name="ShadowDetail"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
label="None"
|
||||
name="0"
|
||||
value="0"/>
|
||||
<combo_box.item
|
||||
label="Sun/Moon"
|
||||
name="1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="Sun/Moon + Projectors"
|
||||
name="2"
|
||||
value="2"/>
|
||||
</combo_box>
|
||||
|
||||
<!-- End of Advanced Settings block -->
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="13"
|
||||
name="horiz_border"
|
||||
top_pad="5"
|
||||
top_delta="5"
|
||||
width="774"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Reset to recommended settings"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="Defaults"
|
||||
top_delta="10"
|
||||
width="210">
|
||||
<button.commit_callback
|
||||
function="Pref.HardwareDefaults" />
|
||||
</button>
|
||||
|
||||
<button
|
||||
follows="right|bottom"
|
||||
height="23"
|
||||
label="OK"
|
||||
label_selected="OK"
|
||||
layout="topleft"
|
||||
right="-115"
|
||||
name="OK"
|
||||
top_delta="0"
|
||||
width="80">
|
||||
<button.commit_callback
|
||||
function="Pref.OK"
|
||||
parameter="closeadvanced" />
|
||||
</button>
|
||||
|
||||
<button
|
||||
follows="right|bottom"
|
||||
height="23"
|
||||
label="Cancel"
|
||||
label_selected="Cancel"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
right="-20"
|
||||
name="Cancel"
|
||||
top_delta="0"
|
||||
width="80" >
|
||||
<button.commit_callback
|
||||
function="Pref.Cancel"
|
||||
parameter="closeadvanced" />
|
||||
</button>
|
||||
|
||||
<!-- These two check boxes are dummies and will never be displayed. They are here so the control variables
|
||||
are saved in a preset file. -->
|
||||
<check_box
|
||||
control_name="RenderAvatarMaxComplexity"
|
||||
visible="false"
|
||||
height="0"
|
||||
label="RenderAvatarMaxComplexity"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="RenderAvatarMaxNonImpostors"
|
||||
top_delta="0"
|
||||
width="0">
|
||||
</check_box>
|
||||
|
||||
<check_box
|
||||
control_name="RenderAvatarMaxNonImpostors"
|
||||
visible="false"
|
||||
height="0"
|
||||
label="RenderAvatarMaxNonImpostors"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="RenderAvatarMaxNonImpostors"
|
||||
top_delta="0"
|
||||
width="0">
|
||||
</check_box>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
height="145"
|
||||
help_topic="floater_save_preset"
|
||||
layout="topleft"
|
||||
name="Save Pref Preset"
|
||||
save_rect="true"
|
||||
title="SAVE PREF PRESET"
|
||||
width="300">
|
||||
|
||||
<string name="title_graphic">Save Graphic Preset</string>
|
||||
<string name="title_camera">Save Camera Preset</string>
|
||||
|
||||
<text
|
||||
follows="top|left|right"
|
||||
height="32"
|
||||
layout="topleft"
|
||||
word_wrap="true"
|
||||
left="20"
|
||||
name="Preset"
|
||||
top="30"
|
||||
width="200">
|
||||
Type a name for the preset or choose an existing preset.
|
||||
</text>
|
||||
<combo_box
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="preset_combo"
|
||||
top_delta="35"
|
||||
allow_text_entry="true"
|
||||
width="200"/>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Save"
|
||||
layout="topleft"
|
||||
top_delta="40"
|
||||
left="20"
|
||||
name="save"
|
||||
width="70"/>
|
||||
<button
|
||||
follows="bottom|right"
|
||||
height="23"
|
||||
label="Cancel"
|
||||
layout="topleft"
|
||||
left_pad="20"
|
||||
name="cancel"
|
||||
width="70"/>
|
||||
</floater>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue