Merge Firestorm LGPL
commit
3df143dd41
1
.hgtags
1
.hgtags
|
|
@ -581,3 +581,4 @@ ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release
|
|||
23ea0fe36fadf009a60c080392ce80e4bf8af8d9 5.1.8-release
|
||||
52422540bfe54b71155aa455360bee6e3ef1fd96 5.1.9-release
|
||||
821edfcd14919c0e95c590866171c61fb57e8623 6.0.0-release
|
||||
21b7604680ef6b6ea67f8bebaaa588d6e263bdc1 6.0.1-release
|
||||
|
|
|
|||
|
|
@ -1988,9 +1988,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>814bec3fa5045a18dce2bc4ce78b585d</string>
|
||||
<string>1b87073540bf081136e60777d99f09f2</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2</string>
|
||||
<string>file:///opt/firestorm/kdu-7.A.5-darwin-182950050.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2820,9 +2820,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>bb8bed08fd5973a040c509ef8b545ec8</string>
|
||||
<string>2c17cfd900c88914e06947fe0f1fdae4</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/490/1046/ogg_vorbis-1.2.2-1.3.2.500397-darwin64-500397.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25395/199641/ogg_vorbis-1.3.3-1.3.6.520171-darwin64-520171.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2856,9 +2856,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f7edf86dcf2d9be7bee98c91256fa569</string>
|
||||
<string>1818627d4d1f05b49709717e240bdcf4</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/512/1108/ogg_vorbis-1.2.2-1.3.2.500397-windows-500397.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25396/199634/ogg_vorbis-1.3.3-1.3.6.520171-windows-520171.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -2868,16 +2868,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>497ec6ac26c2e136ee65acbed86cb2ef</string>
|
||||
<string>d124788c798684c890c1803fca541a10</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/511/1105/ogg_vorbis-1.2.2-1.3.2.500397-windows64-500397.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25397/199631/ogg_vorbis-1.3.3-1.3.6.520171-windows64-520171.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.2.2-1.3.2.500397</string>
|
||||
<string>1.3.3-1.3.6.520171</string>
|
||||
</map>
|
||||
<key>open-libndofdev</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -344,6 +344,8 @@ Celierra Darling
|
|||
Chantal Harvey
|
||||
Charles Courtois
|
||||
Charlie Sazaland
|
||||
Chaser Zaks
|
||||
BUG-225599
|
||||
Cherry Cheevers
|
||||
ChickyBabes Zuzu
|
||||
Christopher Organiser
|
||||
|
|
@ -369,6 +371,7 @@ Cinder Roxley
|
|||
STORM-2053
|
||||
STORM-2098
|
||||
STORM-2113
|
||||
STORM-2116
|
||||
STORM-2124
|
||||
STORM-2127
|
||||
STORM-2136
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2180,3 +2180,19 @@ LLAvatarAppearance::LLMaskedMorph::LLMaskedMorph(LLVisualParam *morph_target, BO
|
|||
target->addPendingMorphMask();
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Get attachment point name from ID
|
||||
//static
|
||||
std::string LLAvatarAppearance::getAttachmentPointName(S32 attachmentPointId)
|
||||
{
|
||||
for (auto attachmentPoint : sAvatarXmlInfo->mAttachmentInfoList)
|
||||
{
|
||||
if (attachmentPoint->mAttachmentID == attachmentPointId)
|
||||
{
|
||||
return attachmentPoint->mName;
|
||||
}
|
||||
}
|
||||
|
||||
return std::string();
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
|
|
|||
|
|
@ -228,6 +228,10 @@ protected:
|
|||
static LLAvatarSkeletonInfo* sAvatarSkeletonInfo;
|
||||
static LLAvatarXmlInfo* sAvatarXmlInfo;
|
||||
|
||||
// <FS:Ansariel> Get attachment point name from ID
|
||||
public:
|
||||
static std::string getAttachmentPointName(S32 attachmentPointId);
|
||||
// </FS:Ansariel>
|
||||
|
||||
/** Skeleton
|
||||
** **
|
||||
|
|
|
|||
|
|
@ -181,7 +181,11 @@ BOOL LLAvatarJoint::updateLOD(F32 pixel_area, BOOL activate)
|
|||
for (child_list_t::iterator iter = mChildren.begin();
|
||||
iter != mChildren.end(); ++iter)
|
||||
{
|
||||
LLAvatarJoint* joint = dynamic_cast<LLAvatarJoint*>(*iter);
|
||||
//<FS:Beq> Make this s static cast. The dynamic cast must be working or it would have been crashing on the nullptr in the next line.
|
||||
// LLAvatarJoint* joint = dynamic_cast<LLAvatarJoint*>(*iter);
|
||||
LLAvatarJoint* joint = static_cast<LLAvatarJoint*>(*iter);
|
||||
//</FS:Beq>
|
||||
|
||||
F32 jointLOD = joint->getLOD();
|
||||
|
||||
if (found_lod || jointLOD == DEFAULT_AVATAR_JOINT_LOD)
|
||||
|
|
|
|||
|
|
@ -390,15 +390,22 @@ namespace
|
|||
|
||||
{
|
||||
llifstream file(filename().c_str());
|
||||
if (file.is_open())
|
||||
if (!file.is_open())
|
||||
{
|
||||
LLSDSerialize::fromXML(configuration, file);
|
||||
LL_WARNS() << filename() << " failed to open file; not changing configuration" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (configuration.isUndefined())
|
||||
if (LLSDSerialize::fromXML(configuration, file) == LLSDParser::PARSE_FAILURE)
|
||||
{
|
||||
LL_WARNS() << filename() << " missing, ill-formed,"
|
||||
" or simply undefined; not changing configuration"
|
||||
LL_WARNS() << filename() << " parcing error; not changing configuration" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (configuration.isUndefined() || !configuration.isMap() || configuration.emptyMap())
|
||||
{
|
||||
LL_WARNS() << filename() << " missing, ill-formed, or simply undefined"
|
||||
" content; not changing configuration"
|
||||
<< LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -895,19 +902,24 @@ namespace LLError
|
|||
setEnabledLogTypesMask(config["enabled-log-types-mask"].asInteger());
|
||||
}
|
||||
|
||||
LLSD sets = config["settings"];
|
||||
LLSD::array_const_iterator a, end;
|
||||
for (a = sets.beginArray(), end = sets.endArray(); a != end; ++a)
|
||||
{
|
||||
const LLSD& entry = *a;
|
||||
|
||||
ELevel level = decodeLevel(entry["level"]);
|
||||
|
||||
setLevels(s->mFunctionLevelMap, entry["functions"], level);
|
||||
setLevels(s->mClassLevelMap, entry["classes"], level);
|
||||
setLevels(s->mFileLevelMap, entry["files"], level);
|
||||
setLevels(s->mTagLevelMap, entry["tags"], level);
|
||||
}
|
||||
if (config.has("settings") && config["settings"].isArray())
|
||||
{
|
||||
LLSD sets = config["settings"];
|
||||
LLSD::array_const_iterator a, end;
|
||||
for (a = sets.beginArray(), end = sets.endArray(); a != end; ++a)
|
||||
{
|
||||
const LLSD& entry = *a;
|
||||
if (entry.isMap() && !entry.emptyMap())
|
||||
{
|
||||
ELevel level = decodeLevel(entry["level"]);
|
||||
|
||||
setLevels(s->mFunctionLevelMap, entry["functions"], level);
|
||||
setLevels(s->mClassLevelMap, entry["classes"], level);
|
||||
setLevels(s->mFileLevelMap, entry["files"], level);
|
||||
setLevels(s->mTagLevelMap, entry["tags"], level);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1068,7 +1080,7 @@ namespace
|
|||
}
|
||||
} </FS:LO> */
|
||||
|
||||
void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message, bool show_location = true, bool show_time = true, bool show_tags = true, bool show_level = true, bool show_function = true)
|
||||
void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message)
|
||||
{
|
||||
LLError::ELevel level = site.mLevel;
|
||||
LLError::SettingsConfigPtr s = LLError::Settings::getInstance()->getSettingsConfig();
|
||||
|
|
@ -1092,7 +1104,7 @@ namespace
|
|||
}
|
||||
message_stream << " ";
|
||||
|
||||
if (show_level && r->wantsLevel())
|
||||
if (r->wantsLevel())
|
||||
{
|
||||
message_stream << site.mLevelString;
|
||||
}
|
||||
|
|
@ -1110,7 +1122,7 @@ namespace
|
|||
}
|
||||
message_stream << " ";
|
||||
|
||||
if (show_function && r->wantsFunctionName())
|
||||
if (r->wantsFunctionName())
|
||||
{
|
||||
message_stream << site.mFunctionString;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,8 @@ template class LLTextBox* LLView::getChild<class LLTextBox>(
|
|||
|
||||
LLTextBox::LLTextBox(const LLTextBox::Params& p)
|
||||
: LLTextBase(p),
|
||||
mClickedCallback(NULL)
|
||||
mClickedCallback(NULL),
|
||||
mShowCursorHand(true)
|
||||
{}
|
||||
|
||||
LLTextBox::~LLTextBox()
|
||||
|
|
@ -107,7 +108,7 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
|
|||
BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = LLTextBase::handleHover(x, y, mask);
|
||||
if (!handled && mClickedCallback)
|
||||
if (!handled && mClickedCallback && mShowCursorHand)
|
||||
{
|
||||
// Clickable text boxes change the cursor to a hand
|
||||
LLUI::getWindow()->setCursor(UI_CURSOR_HAND);
|
||||
|
|
|
|||
|
|
@ -68,6 +68,8 @@ public:
|
|||
/*virtual*/ LLSD getValue() const;
|
||||
/*virtual*/ BOOL setTextArg( const std::string& key, const LLStringExplicit& text );
|
||||
|
||||
void setShowCursorHand(bool show_cursor) { mShowCursorHand = show_cursor; }
|
||||
|
||||
// <COLOSI opensim multi-currency support>
|
||||
// Set all LLUIStrings to dirty after currency symbol change to force them to be updated.
|
||||
void updateCurrencySymbols() { mText.updateCurrencySymbols(); LLTextBase::setText(mText.getString()); mLabel.updateCurrencySymbols(); }
|
||||
|
|
@ -78,6 +80,7 @@ protected:
|
|||
|
||||
LLUIString mText;
|
||||
callback_t mClickedCallback;
|
||||
bool mShowCursorHand;
|
||||
// <FS:ND> Searchable text for UI filter
|
||||
protected:
|
||||
virtual std::string _getSearchText() const
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
6.0.1
|
||||
6.0.2
|
||||
|
|
|
|||
|
|
@ -286,6 +286,13 @@
|
|||
is_running_parameters="FSRenderFriendsOnly"
|
||||
checkbox_control="FSRenderFriendsOnlyPersistsTP"
|
||||
/>
|
||||
<command name="derender_animated_objects"
|
||||
available_in_toybox="false"
|
||||
icon="derender_animated_objects"
|
||||
label_ref="Command_DAO_Label"
|
||||
tooltip_ref="Command_DAO_Tooltip"
|
||||
execute_function="Tools.DerenderAnimatedObjects"
|
||||
/>
|
||||
<command name="view"
|
||||
available_in_toybox="true"
|
||||
icon="Command_View_Icon"
|
||||
|
|
|
|||
|
|
@ -3869,6 +3869,28 @@
|
|||
<key>Value</key>
|
||||
<integer>3</integer>
|
||||
</map>
|
||||
<key>AvatarExtentRefreshPeriodBatch</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>how many frames do we spread over by default when refreshing extents (default is 4)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>4</integer>
|
||||
</map>
|
||||
<key>AvatarExtentRefreshMaxPerBatch</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>how many avatars do we want to handle in total per batch (default is 5)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
<key>DebugAvatarAppearanceMessage</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -6526,6 +6548,28 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSEnableAggressiveComplexityUpdates</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enable active complexity calculations. This may have a significant detrimental performance impact if enabled.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSDisableRiggedMeshMatrixCaching</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Disable the caching of Rigged mesh matrix pallettes.Non-persistant.</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FullScreenAspectRatio</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -8950,8 +8994,201 @@
|
|||
<key>Backup</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>MeshPreviewCanvasColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Canvas colour for the Mesh uploader</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.169</real>
|
||||
<real>0.169</real>
|
||||
<real>0.169</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewEdgeColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Edge colour for the Mesh uploader preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.4</real>
|
||||
<real>0.4</real>
|
||||
<real>0.4</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewBaseColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Canvas colour for the Mesh uploader</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>1.0</real>
|
||||
<real>1.0</real>
|
||||
<real>1.0</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewBrightnessColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Brightness modifier</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.9</real>
|
||||
<real>0.9</real>
|
||||
<real>0.9</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewEdgeWidth</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>line thickness used when display edges is selected in mesh preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>MeshPreviewPhysicsEdgeColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Edge colour for the Mesh uploader physics preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.0</real>
|
||||
<real>0.25</real>
|
||||
<real>0.5</real>
|
||||
<real>0.25</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewPhysicsFillColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Fill colour for the Mesh uploader physics preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.0</real>
|
||||
<real>0.5</real>
|
||||
<real>1.0</real>
|
||||
<real>0.5</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewPhysicsEdgeWidth</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>line thickness used when display physics is selected in mesh preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>MeshPreviewDegenerateEdgeColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Edge colour for the Mesh uploader Degenerate preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>1.0</real>
|
||||
<real>0.0</real>
|
||||
<real>0.0</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewDegenerateFillColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Fill colour for the Mesh uploader Degenerate preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>1.0</real>
|
||||
<real>0.0</real>
|
||||
<real>0.0</real>
|
||||
<real>0.5</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>MeshPreviewDegenerateEdgeWidth</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>line thickness used when display Degenerate is selected in mesh preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>3.0</real>
|
||||
</map>
|
||||
<key>MeshPreviewDegeneratePointSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Large point size used to highlight degenerate triangle vertices in Mesh preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>8.0</real>
|
||||
</map>
|
||||
<key>MeshPreviewZoomLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum Zoom level in preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>10.0</real>
|
||||
</map>
|
||||
<key>FSMeshPreviewUVGuideFile</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>filename of the texture to use as a UV guide for mesh preview.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>salt_and_pepper.jpg</string>
|
||||
</map>
|
||||
<key>MigrateCacheDirectory</key>
|
||||
<map>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Check for old version of disk cache to migrate to current location</string>
|
||||
<key>Persist</key>
|
||||
|
|
@ -10284,7 +10521,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>13</integer>
|
||||
</map>
|
||||
|
||||
<key>PreviewRenderSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Resolution of the image rendered for the mesh upload preview</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>1024</integer>
|
||||
</map>
|
||||
<key>PreviewAmbientColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -10301,8 +10548,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
|
||||
|
||||
<key>PreviewDiffuse0</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -11520,7 +11765,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>RenderAnimateRes</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Animate rezing prims.</string>
|
||||
<string>(Obsolete) Does nothing Animate rezing prims.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -24870,6 +25115,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSScriptInfoExtended</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If enabled, extend basic script info feature with various details useful for builders.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
||||
|
|
|
|||
|
|
@ -91,8 +91,9 @@ void main()
|
|||
|
||||
// Collect normal lights (need to be divided by two, as we later multiply by 2)
|
||||
col.rgb += light_diffuse[1].rgb * calcDirectionalLight(norm, light_position[1].xyz);
|
||||
col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].z);
|
||||
col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].z);
|
||||
|
||||
// col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].z);
|
||||
col.rgb += light_diffuse[2].rgb * calcDirectionalLight(norm, light_position[2].xyz);
|
||||
// col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].z);
|
||||
col /= 2.0;
|
||||
vertex_color = col*color;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1684,6 +1684,7 @@ LLUUID cmdline_partial_name2key(std::string partial_name)
|
|||
{
|
||||
std::string av_name;
|
||||
LLStringUtil::toLower(partial_name);
|
||||
LLStringUtil::replaceString(partial_name, ".", " ");
|
||||
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
if (radar)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
//
|
||||
|
||||
// Bridge platform
|
||||
string BRIDGE_VERSION = "2.23"; // This should match fslslbridge.cpp
|
||||
string BRIDGE_VERSION = "2.24"; // This should match fslslbridge.cpp
|
||||
string gLatestURL;
|
||||
integer gViewerIsFirestorm;
|
||||
integer gTryHandshakeOnce = TRUE;
|
||||
|
|
@ -491,15 +491,40 @@ default
|
|||
|
||||
else if (cmd == "getScriptInfo")
|
||||
{
|
||||
list details = llGetObjectDetails(llList2Key(commandList, 1), ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME]));
|
||||
if (llGetListLength(details) == 6)
|
||||
|
||||
key targetkey = llList2Key(commandList, 1);
|
||||
integer extended = llList2Integer(commandList, 2);
|
||||
integer elements;
|
||||
list details;
|
||||
vector currentPosition;
|
||||
|
||||
if (extended)
|
||||
{
|
||||
llOwnerSay("<bridgeGetScriptInfo>" + llList2CSV([llStringToBase64(llStringTrim(llList2String(details, 0), STRING_TRIM)), llList2String(details, 1), llList2String(details, 2), llList2Integer(details, 3) / 1024, llList2Float(details, 4) * 1000.0, llList2Float(details, 5) * 1000.0]) + "</bridgeGetScriptInfo>");
|
||||
currentPosition = llGetPos();
|
||||
details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME, OBJECT_DESC, OBJECT_ROOT, OBJECT_PRIM_COUNT, OBJECT_PRIM_EQUIVALENCE, OBJECT_TOTAL_INVENTORY_COUNT, OBJECT_VELOCITY, OBJECT_POS, OBJECT_ROT, OBJECT_OMEGA, OBJECT_CREATOR, OBJECT_OWNER, OBJECT_LAST_OWNER_ID, OBJECT_REZZER_KEY, OBJECT_GROUP, OBJECT_CREATION_TIME, OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT, OBJECT_TEMP_ATTACHED]));
|
||||
details = details + [currentPosition, targetkey];
|
||||
elements = 26;
|
||||
}
|
||||
else
|
||||
{
|
||||
details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME]));
|
||||
elements = 6;
|
||||
}
|
||||
|
||||
if (llGetListLength(details) == elements)
|
||||
{
|
||||
list returnedList = [llStringToBase64(llStringTrim(llList2String(details, 0), STRING_TRIM)), llList2String(details, 1), llList2String(details, 2), llList2Integer(details, 3) / 1024, llList2Float(details, 4) * 1000.0, llList2Float(details, 5) * 1000.0];
|
||||
if (extended)
|
||||
{
|
||||
returnedList = returnedList + [llStringToBase64(llStringTrim(llList2String(details, 6), STRING_TRIM)), llList2String(details, 7), llList2Integer(details, 8), llList2Integer(details, 9), llList2Integer(details, 10), llStringToBase64(llList2String(details, 11)), llStringToBase64(llList2String(details, 12) + " (" + (string)llVecDist(llList2Vector(details, 12), currentPosition) + " m)"), llStringToBase64(llList2String(details, 13) + " (" + (string)(RAD_TO_DEG * llRot2Euler(llList2Rot(details, 13))) + ")"), llStringToBase64(llList2String(details, 14)), llList2Key(details, 15), llList2Key(details, 16), llList2Key(details, 17), llList2Key(details, 18), llList2Key(details, 19), llList2String(details, 20), llList2Integer(details, 21), llList2Integer(details, 22), llList2Integer(details, 23), llStringToBase64(llList2String(details, 24)), llList2Key(details, 25)];
|
||||
}
|
||||
llOwnerSay("<bridgeGetScriptInfo>" + llList2CSV(returnedList) + "</bridgeGetScriptInfo>");
|
||||
}
|
||||
else
|
||||
{
|
||||
llOwnerSay("<bridgeError error=scriptinfonotfound>");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else if (cmd == "UseLSLFlightAssist")
|
||||
|
|
|
|||
|
|
@ -1650,7 +1650,7 @@ bool FSPanelAreaSearchList::onContextMenuItemClick(const LLSD& userdata)
|
|||
}
|
||||
break;
|
||||
case 's': // script
|
||||
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + (*item_it)->getUUID().asString());
|
||||
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + (*item_it)->getUUID().asString() + "|" + (gSavedSettings.getBOOL("FSScriptInfoExtended") ? "1" : "0"));
|
||||
break;
|
||||
case 'l': // blacklist
|
||||
{
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
/* boost: will not compile unless equivalent is undef'd, beware. */
|
||||
#include "fix_macros.h"
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/foreach.hpp>
|
||||
|
||||
#include "llappviewer.h"
|
||||
#include "llagent.h"
|
||||
|
|
@ -64,15 +63,6 @@
|
|||
|
||||
const std::string LEGACY_CLIENT_LIST_URL = "http://phoenixviewer.com/app/client_tags/client_list_v2.xml";
|
||||
const LLUUID MAGIC_ID("3c115e51-04f4-523c-9fa6-98aff1034730");
|
||||
const F32 HTTP_TIMEOUT = 30.f;
|
||||
|
||||
#if LL_DARWIN
|
||||
size_t strnlen(const char *s, size_t n)
|
||||
{
|
||||
const char *p = (const char *)memchr(s, 0, n);
|
||||
return(p ? p-s : n);
|
||||
}
|
||||
#endif
|
||||
|
||||
FSData::FSData() :
|
||||
mLegacySearch(true),
|
||||
|
|
@ -306,7 +296,7 @@ void downloadError(LLSD const &aData, std::string const &aURL)
|
|||
void FSData::startDownload()
|
||||
{
|
||||
mFSdataFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "fsdata.xml");
|
||||
mFSdataDefaultsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "fsdata_defaults.xml");
|
||||
mFSdataDefaultsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, llformat("fsdata_defaults.%s.xml", LLVersionInfo::getShortVersion().c_str()));
|
||||
mClientTagsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "client_list_v2.xml");
|
||||
|
||||
{
|
||||
|
|
@ -341,8 +331,8 @@ void FSData::startDownload()
|
|||
}
|
||||
|
||||
#if OPENSIM
|
||||
std::string filenames[] = {"scriptlibrary_ossl.xml", "scriptlibrary_aa.xml"};
|
||||
BOOST_FOREACH(std::string script_name, filenames)
|
||||
std::string filenames[] = { "scriptlibrary_ossl.xml", "scriptlibrary_aa.xml" };
|
||||
for (auto const& script_name : filenames)
|
||||
{
|
||||
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, script_name);
|
||||
time_t last_modified = 0;
|
||||
|
|
|
|||
|
|
@ -33,17 +33,19 @@
|
|||
|
||||
#include "apr_base64.h" // For getScriptInfo()
|
||||
#include "llagent.h"
|
||||
#include "llattachmentsmgr.h"
|
||||
#include "llappearancemgr.h"
|
||||
#include "llattachmentsmgr.h"
|
||||
#include "llavatarappearance.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
#include "llmaniptranslate.h"
|
||||
#include "llpreviewscript.h"
|
||||
#include "llselectmgr.h"
|
||||
#include "llsdutil.h"
|
||||
#include "llslurl.h"
|
||||
#include "lltrans.h"
|
||||
#include "llviewerassetupload.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewerassetupload.h"
|
||||
#include "llsdutil.h"
|
||||
|
||||
#if OPENSIM
|
||||
#include "llviewernetwork.h"
|
||||
|
|
@ -52,7 +54,7 @@
|
|||
static const std::string FS_BRIDGE_FOLDER = "#LSL Bridge";
|
||||
static const std::string FS_BRIDGE_CONTAINER_FOLDER = "Landscaping";
|
||||
static const U32 FS_BRIDGE_MAJOR_VERSION = 2;
|
||||
static const U32 FS_BRIDGE_MINOR_VERSION = 23;
|
||||
static const U32 FS_BRIDGE_MINOR_VERSION = 24;
|
||||
static const U32 FS_MAX_MINOR_VERSION = 99;
|
||||
static const std::string UPLOAD_SCRIPT_CURRENT = "EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt";
|
||||
static const std::string FS_STATE_ATTRIBUTE = "state=";
|
||||
|
|
@ -79,18 +81,13 @@ private:
|
|||
std::string sName;
|
||||
};
|
||||
|
||||
void uploadDone(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response)
|
||||
{
|
||||
FSLSLBridge::getInstance()->setTimerResult(FSLSLBridge::SCRIPT_UPLOAD_FINISHED);
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
// Bridge functionality
|
||||
//
|
||||
FSLSLBridge::FSLSLBridge():
|
||||
mBridgeCreating(false),
|
||||
mpBridge(NULL),
|
||||
mpBridge(nullptr),
|
||||
mIsFirstCallDone(false),
|
||||
mAllowDetach(false),
|
||||
mFinishCreation(false),
|
||||
|
|
@ -352,7 +349,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
|||
while (std::getline(strStreamGetScriptInfo, scriptInfoToken, ','))
|
||||
{
|
||||
LLStringUtil::trim(scriptInfoToken);
|
||||
if (scriptInfoArrayCount == 0)
|
||||
if (scriptInfoArrayCount == 0 || scriptInfoArrayCount == 6 || scriptInfoArrayCount == 11 || scriptInfoArrayCount == 12 || scriptInfoArrayCount == 13 || scriptInfoArrayCount == 14 || scriptInfoArrayCount == 24)
|
||||
{
|
||||
// First value, OBJECT_NAME, should be passed from Bridge as encoded in base64
|
||||
// Encoding eliminates problems with special characters and commas for CSV
|
||||
|
|
@ -368,14 +365,14 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("FSLSLBridge") << "ScriptInfo - OBJECT_NAME cannot be decoded" << LL_ENDL;
|
||||
LL_WARNS("FSLSLBridge") << "ScriptInfo - value with index " << scriptInfoArrayCount << " cannot be decoded" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
scriptInfoArray.append(scriptInfoToken);
|
||||
++scriptInfoArrayCount;
|
||||
}
|
||||
|
||||
if (scriptInfoArrayCount == 6)
|
||||
if (scriptInfoArrayCount == 6 || scriptInfoArrayCount == 26)
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
args["OBJECT_NAME"] = scriptInfoArray[0].asString();
|
||||
|
|
@ -394,6 +391,31 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
|
|||
args["PATHFINDING_TEXT"] = "";
|
||||
}
|
||||
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info"), args));
|
||||
if (scriptInfoArrayCount == 26)
|
||||
{
|
||||
LLStringUtil::format_map_t args3;
|
||||
args3["OBJECT_DESC"] = scriptInfoArray[6].asString();
|
||||
args3["OBJECT_ROOT"] = scriptInfoArray[7].asString();
|
||||
args3["OBJECT_PRIM_COUNT"] = scriptInfoArray[8].asString();
|
||||
args3["OBJECT_PRIM_EQUIVALENCE"] = scriptInfoArray[9].asString();
|
||||
args3["OBJECT_TOTAL_INVENTORY_COUNT"] = scriptInfoArray[10].asString();
|
||||
args3["OBJECT_VELOCITY"] = scriptInfoArray[11].asString();
|
||||
args3["OBJECT_POS"] = scriptInfoArray[12].asString();
|
||||
args3["OBJECT_ROT"] = scriptInfoArray[13].asString();
|
||||
args3["OBJECT_OMEGA"] = scriptInfoArray[14].asString();
|
||||
args3["OBJECT_CREATOR"] = LLSLURL("agent", scriptInfoArray[15].asUUID(), "inspect").getSLURLString();
|
||||
args3["OBJECT_OWNER"] = scriptInfoArray[16].asUUID().isNull() ? LLTrans::getString("GroupOwned") : LLSLURL("agent", scriptInfoArray[16].asUUID(), "inspect").getSLURLString();
|
||||
args3["OBJECT_LAST_OWNER_ID"] = scriptInfoArray[17].asUUID().notNull() ? LLSLURL("agent", scriptInfoArray[17].asUUID(), "inspect").getSLURLString() : "---";
|
||||
args3["OBJECT_REZZER_KEY"] = scriptInfoArray[18].asString();
|
||||
args3["OBJECT_GROUP"] = scriptInfoArray[19].asUUID().notNull() ? LLSLURL("group", scriptInfoArray[19].asUUID(), "inspect").getSLURLString() : "---";
|
||||
args3["OBJECT_CREATION_TIME"] = scriptInfoArray[20].asString();
|
||||
args3["OBJECT_PATHFINDING_TYPE"] = scriptInfoArray[21].asString();
|
||||
args3["OBJECT_ATTACHED_POINT"] = (scriptInfoArray[22].asInteger() < 1 || scriptInfoArray[22].asInteger() > 255) ? "---" : LLTrans::getString(LLAvatarAppearance::getAttachmentPointName(scriptInfoArray[22].asInteger()));
|
||||
args3["OBJECT_TEMP_ATTACHED"] = scriptInfoArray[23].asInteger() == 1 ? LLTrans::getString("Yes") : LLTrans::getString("No");
|
||||
args3["AVATAR_POS"] = scriptInfoArray[24].asString();
|
||||
args3["INSPECTING_KEY"] = scriptInfoArray[25].asString();
|
||||
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info_ext"), args3));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -472,7 +494,7 @@ bool FSLSLBridge::canUseBridge()
|
|||
return (isBridgeValid() && sUseLSLBridge && !mCurrentURL.empty());
|
||||
}
|
||||
|
||||
bool FSLSLBridge::viewerToLSL(const std::string& message, tCallback aCallback )
|
||||
bool FSLSLBridge::viewerToLSL(const std::string& message, Callback_t aCallback)
|
||||
{
|
||||
LL_DEBUGS("FSLSLBridge") << message << LL_ENDL;
|
||||
|
||||
|
|
@ -481,11 +503,13 @@ bool FSLSLBridge::viewerToLSL(const std::string& message, tCallback aCallback )
|
|||
return false;
|
||||
}
|
||||
|
||||
tCallback pCallback = aCallback;
|
||||
if( !pCallback )
|
||||
Callback_t pCallback = aCallback;
|
||||
if (!pCallback)
|
||||
{
|
||||
pCallback = FSLSLBridgeRequest_Success;
|
||||
}
|
||||
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(mCurrentURL, LLSD(message), pCallback, FSLSLBridgeRequest_Failure );
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(mCurrentURL, LLSD(message), pCallback, FSLSLBridgeRequest_Failure);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -629,12 +653,12 @@ void FSLSLBridge::finishCleanUpPreCreation()
|
|||
for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
||||
{
|
||||
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << (*it)->getName() << " (" << (*it)->getUUID() << ")" << LL_ENDL;
|
||||
remove_inventory_item((*it)->getUUID(), NULL, true); // Don't wait for callback from server to update inventory model
|
||||
remove_inventory_item((*it)->getUUID(), nullptr, true); // Don't wait for callback from server to update inventory model
|
||||
}
|
||||
gInventory.notifyObservers();
|
||||
|
||||
// clear the stored bridge ID - we are starting over.
|
||||
mpBridge = NULL; //the object itself will get cleaned up when new one is created.
|
||||
mpBridge = nullptr; //the object itself will get cleaned up when new one is created.
|
||||
mCurrentURL.clear();
|
||||
|
||||
setBridgeCreating(true);
|
||||
|
|
@ -767,7 +791,7 @@ void FSLSLBridge::createNewBridge()
|
|||
const LLUUID libID = gInventory.getLibraryRootFolderID();
|
||||
LLViewerInventoryItem* libRock = findInvObject(LIB_ROCK_NAME, libID);
|
||||
//shouldn't happen but just in case
|
||||
if (libRock != NULL)
|
||||
if (libRock)
|
||||
{
|
||||
LL_INFOS("FSLSLBridge") << "Cloning a new Bridge container from the Library..." << LL_ENDL;
|
||||
|
||||
|
|
@ -868,7 +892,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac
|
|||
// AH: We need to request objects inventory first before we can
|
||||
// do anything with it!
|
||||
LL_INFOS("FSLSLBridge") << "Requesting bridge inventory contents..." << LL_ENDL;
|
||||
object->registerInventoryListener(this, NULL);
|
||||
object->registerInventoryListener(this, nullptr);
|
||||
object->requestInventory();
|
||||
}
|
||||
else
|
||||
|
|
@ -1009,14 +1033,14 @@ void FSLSLBridge::processDetach(LLViewerObject* object, const LLViewerJointAttac
|
|||
}
|
||||
mAllowDetach = false;
|
||||
|
||||
if (gAgentAvatarp.isNull() || (!gAgentAvatarp->isSelf()) || (attachment == NULL) || (attachment->getName() != FS_BRIDGE_ATTACHMENT_POINT_NAME))
|
||||
if (gAgentAvatarp.isNull() || (!gAgentAvatarp->isSelf()) || (!attachment) || (attachment->getName() != FS_BRIDGE_ATTACHMENT_POINT_NAME))
|
||||
{
|
||||
LL_WARNS("FSLSLBridge") << "Couldn't detach bridge, object has wrong name or avatar wasn't self." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLViewerInventoryItem* fsObject = gInventory.getItem(object->getAttachmentItemID());
|
||||
if (fsObject == NULL) //just in case
|
||||
if (!fsObject) //just in case
|
||||
{
|
||||
LL_WARNS("FSLSLBridge") << "Couldn't detach bridge. inventory object was NULL." << LL_ENDL;
|
||||
return;
|
||||
|
|
@ -1040,7 +1064,7 @@ void FSLSLBridge::processDetach(LLViewerObject* object, const LLViewerJointAttac
|
|||
}
|
||||
if (mpBridge && mpBridge->getUUID() == fsObject->getUUID())
|
||||
{
|
||||
mpBridge = NULL;
|
||||
mpBridge = nullptr;
|
||||
report_to_nearby_chat(LLTrans::getString("fsbridge_detached"));
|
||||
mIsFirstCallDone = false;
|
||||
if (mBridgeCreating)
|
||||
|
|
@ -1118,8 +1142,8 @@ void FSLSLBridge::create_script_inner()
|
|||
const LLUUID catID = findFSCategory();
|
||||
|
||||
LLPointer<LLInventoryCallback> cb = new FSLSLBridgeScriptCallback();
|
||||
create_inventory_item(gAgent.getID(),
|
||||
gAgent.getSessionID(),
|
||||
create_inventory_item(gAgentID,
|
||||
gAgentSessionID,
|
||||
catID,
|
||||
LLTransactionID::tnull,
|
||||
mCurrentFullName,
|
||||
|
|
@ -1129,19 +1153,11 @@ void FSLSLBridge::create_script_inner()
|
|||
NOT_WEARABLE,
|
||||
PERM_ALL,
|
||||
cb);
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// Bridge rez callback
|
||||
//
|
||||
FSLSLBridgeRezCallback::FSLSLBridgeRezCallback()
|
||||
{
|
||||
}
|
||||
FSLSLBridgeRezCallback::~FSLSLBridgeRezCallback()
|
||||
{
|
||||
}
|
||||
|
||||
void FSLSLBridgeRezCallback::fire(const LLUUID& inv_item)
|
||||
{
|
||||
// this is the first attach - librock got copied and worn on hand - but the ID is now real.
|
||||
|
|
@ -1191,29 +1207,6 @@ void FSLSLBridgeRezCallback::fire(const LLUUID& inv_item)
|
|||
//
|
||||
// Bridge script creation callback
|
||||
//
|
||||
FSLSLBridgeScriptCallback::FSLSLBridgeScriptCallback()
|
||||
{
|
||||
}
|
||||
FSLSLBridgeScriptCallback::~FSLSLBridgeScriptCallback()
|
||||
{
|
||||
}
|
||||
|
||||
class FSMonoScriptAssetUpload: public LLScriptAssetUpload
|
||||
{
|
||||
public:
|
||||
FSMonoScriptAssetUpload(LLUUID itemId, std::string buffer, invnUploadFinish_f finish)
|
||||
: LLScriptAssetUpload( itemId, buffer, finish)
|
||||
{
|
||||
}
|
||||
|
||||
virtual LLSD generatePostBody()
|
||||
{
|
||||
LLSD body = LLScriptAssetUpload::generatePostBody();
|
||||
body["target"] = "mono";
|
||||
return body;
|
||||
}
|
||||
};
|
||||
|
||||
void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
|
||||
{
|
||||
if (inv_item.isNull() || !FSLSLBridge::instance().getBridgeCreating())
|
||||
|
|
@ -1238,7 +1231,7 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
|
|||
gInventory.updateItem(item);
|
||||
gInventory.notifyObservers();
|
||||
|
||||
LLViewerObject* obj(NULL);
|
||||
LLViewerObject* obj(nullptr);
|
||||
|
||||
if (FSLSLBridge::instance().isBridgeValid())
|
||||
{
|
||||
|
|
@ -1259,11 +1252,14 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
|
|||
const std::string fName = prepUploadFile(buffer);
|
||||
if (!fName.empty())
|
||||
{
|
||||
LLResourceUploadInfo::ptr_t uploadInfo(new FSMonoScriptAssetUpload( inv_item, buffer, uploadDone ));
|
||||
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
|
||||
|
||||
LL_INFOS("FSLSLBridge") << "updating script ID for bridge" << LL_ENDL;
|
||||
LL_INFOS("FSLSLBridge") << "Updating script ID for bridge and enqueing upload. Inventory ID: " << inv_item.asString() << LL_ENDL;
|
||||
FSLSLBridge::instance().mScriptItemID = inv_item;
|
||||
|
||||
LLResourceUploadInfo::ptr_t uploadInfo(boost::make_shared<LLScriptAssetUpload>(obj->getID(), inv_item, LLScriptAssetUpload::MONO, true, LLUUID::null, buffer,
|
||||
[](LLUUID, LLUUID, LLUUID, LLSD) {
|
||||
FSLSLBridge::getInstance()->setTimerResult(FSLSLBridge::SCRIPT_UPLOAD_FINISHED);
|
||||
}));
|
||||
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1288,14 +1284,14 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
|
|||
|
||||
FSLSLBridge::instance().cleanUpBridge();
|
||||
//also clean up script remains
|
||||
remove_inventory_item(item->getUUID(), NULL, true);
|
||||
remove_inventory_item(item->getUUID(), nullptr, true);
|
||||
gInventory.notifyObservers();
|
||||
LL_WARNS("FSLSLBridge") << "Can't update bridge script. Purging bridge." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
std::string FSLSLBridgeScriptCallback::prepUploadFile( std::string &aBuffer )
|
||||
std::string FSLSLBridgeScriptCallback::prepUploadFile(std::string &aBuffer)
|
||||
{
|
||||
const std::string fName = gDirUtilp->getExpandedFilename(LL_PATH_FS_RESOURCES, UPLOAD_SCRIPT_CURRENT);
|
||||
const std::string fNew = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,UPLOAD_SCRIPT_CURRENT);
|
||||
|
|
@ -1304,7 +1300,7 @@ std::string FSLSLBridgeScriptCallback::prepUploadFile( std::string &aBuffer )
|
|||
if (!fpIn)
|
||||
{
|
||||
LL_WARNS("FSLSLBridge") << "Cannot open script resource file" << LL_ENDL;
|
||||
return "";
|
||||
return std::string();
|
||||
}
|
||||
fseek(fpIn, 0, SEEK_END);
|
||||
long lSize = ftell(fpIn);
|
||||
|
|
@ -1322,13 +1318,19 @@ std::string FSLSLBridgeScriptCallback::prepUploadFile( std::string &aBuffer )
|
|||
aBuffer = ( (char const*)&vctData[0] );
|
||||
|
||||
const std::string bridgekey = "BRIDGEKEY";
|
||||
aBuffer.replace(aBuffer.find(bridgekey), bridgekey.length(), FSLSLBridge::getInstance()->findFSCategory().asString());
|
||||
size_t pos = aBuffer.find(bridgekey);
|
||||
if (pos == std::string::npos)
|
||||
{
|
||||
LL_WARNS("FSLSLBridge") << "Invalid bridge script" << LL_ENDL;
|
||||
return std::string();
|
||||
}
|
||||
aBuffer.replace(pos, bridgekey.length(), FSLSLBridge::getInstance()->findFSCategory().asString());
|
||||
|
||||
LLFILE *fpOut = LLFile::fopen(fNew, "wt");
|
||||
if (!fpOut)
|
||||
{
|
||||
LL_WARNS("FSLSLBridge") << "Cannot open script upload file" << LL_ENDL;
|
||||
return "";
|
||||
return std::string();
|
||||
}
|
||||
|
||||
if (aBuffer.size() != fwrite(aBuffer.c_str(), 1, aBuffer.size(), fpOut))
|
||||
|
|
@ -1371,7 +1373,9 @@ void FSLSLBridge::checkBridgeScriptName()
|
|||
cleanUpBridge();
|
||||
return;
|
||||
}
|
||||
obj->saveScript(gInventory.getItem(mScriptItemID), TRUE, false);
|
||||
|
||||
LL_INFOS("FSLSLBridge") << "Saving script " << mScriptItemID.asString() << " in object" << LL_ENDL;
|
||||
obj->saveScript(gInventory.getItem(mScriptItemID), TRUE, true);
|
||||
new FSLSLBridgeCleanupTimer();
|
||||
}
|
||||
|
||||
|
|
@ -1383,11 +1387,11 @@ void FSLSLBridge::cleanUpBridge()
|
|||
|
||||
if (isBridgeValid())
|
||||
{
|
||||
remove_inventory_item(mpBridge->getUUID(), NULL, true);
|
||||
remove_inventory_item(mpBridge->getUUID(), nullptr, true);
|
||||
}
|
||||
|
||||
gInventory.notifyObservers();
|
||||
mpBridge = NULL;
|
||||
mpBridge = nullptr;
|
||||
mAllowedDetachables.clear();
|
||||
setBridgeCreating(false);
|
||||
}
|
||||
|
|
@ -1543,7 +1547,7 @@ LLViewerInventoryItem* FSLSLBridge::findInvObject(const std::string& obj_name, c
|
|||
LLViewerInventoryItem* item = gInventory.getItem(itemID);
|
||||
return item;
|
||||
}
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void FSLSLBridge::cleanUpBridgeFolder(const std::string& nameToCleanUp)
|
||||
|
|
@ -1571,7 +1575,7 @@ void FSLSLBridge::cleanUpBridgeFolder(const std::string& nameToCleanUp)
|
|||
if (!itemp->getIsLinkType() && (itemp->getUUID() != mpBridge->getUUID()))
|
||||
{
|
||||
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << itemp->getName() << " (" << itemp->getUUID() << ")" << LL_ENDL;
|
||||
remove_inventory_item(itemp->getUUID(), NULL, true);
|
||||
remove_inventory_item(itemp->getUUID(), nullptr, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1616,13 +1620,13 @@ void FSLSLBridge::detachOtherBridges()
|
|||
LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, catID);
|
||||
|
||||
//detach everything except current valid bridge - if any
|
||||
gInventory.collectDescendents(catID,cats,items,FALSE);
|
||||
gInventory.collectDescendents(catID, cats, items, FALSE);
|
||||
|
||||
for (LLViewerInventoryItem::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
||||
{
|
||||
const LLViewerInventoryItem* itemp = *it;
|
||||
if (get_is_item_worn(itemp->getUUID()) &&
|
||||
((fsBridge == NULL) || (itemp->getUUID() != fsBridge->getUUID())))
|
||||
((!fsBridge) || (itemp->getUUID() != fsBridge->getUUID())))
|
||||
{
|
||||
LLVOAvatarSelf::detachAttachmentIntoInventory(itemp->getUUID());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,10 +63,10 @@ public:
|
|||
NO_TIMER
|
||||
};
|
||||
|
||||
typedef boost::function<void(const LLSD &)> tCallback;
|
||||
typedef std::function<void(const LLSD &)> Callback_t;
|
||||
|
||||
bool lslToViewer(const std::string& message, const LLUUID& fromID, const LLUUID& ownerID);
|
||||
bool viewerToLSL(const std::string& message, tCallback = NULL );
|
||||
bool viewerToLSL(const std::string& message, Callback_t = nullptr);
|
||||
|
||||
bool updateBoolSettingValue(const std::string& msgVal);
|
||||
bool updateBoolSettingValue(const std::string& msgVal, bool contentVal);
|
||||
|
|
@ -83,7 +83,7 @@ public:
|
|||
void setBridge(LLViewerInventoryItem* item) { mpBridge = item; };
|
||||
LLViewerInventoryItem* getBridge() { return mpBridge; };
|
||||
bool canUseBridge();
|
||||
bool isBridgeValid() const { return NULL != mpBridge; }
|
||||
bool isBridgeValid() const { return nullptr != mpBridge; }
|
||||
|
||||
void checkBridgeScriptName();
|
||||
std::string currentFullName() { return mCurrentFullName; }
|
||||
|
|
@ -147,22 +147,22 @@ protected:
|
|||
class FSLSLBridgeRezCallback : public LLInventoryCallback
|
||||
{
|
||||
public:
|
||||
FSLSLBridgeRezCallback();
|
||||
FSLSLBridgeRezCallback() {}
|
||||
void fire(const LLUUID& inv_item);
|
||||
|
||||
protected:
|
||||
~FSLSLBridgeRezCallback();
|
||||
~FSLSLBridgeRezCallback() {}
|
||||
};
|
||||
|
||||
class FSLSLBridgeScriptCallback : public LLInventoryCallback
|
||||
{
|
||||
public:
|
||||
FSLSLBridgeScriptCallback();
|
||||
FSLSLBridgeScriptCallback() {}
|
||||
void fire(const LLUUID& inv_item);
|
||||
std::string prepUploadFile( std::string& );
|
||||
std::string prepUploadFile(std::string& aBuffer);
|
||||
|
||||
protected:
|
||||
~FSLSLBridgeScriptCallback();
|
||||
~FSLSLBridgeScriptCallback() {}
|
||||
};
|
||||
|
||||
class FSLSLBridgeInventoryObserver : public LLInventoryFetchDescendentsObserver
|
||||
|
|
@ -174,7 +174,6 @@ public:
|
|||
|
||||
protected:
|
||||
~FSLSLBridgeInventoryObserver() {}
|
||||
|
||||
};
|
||||
|
||||
class FSLSLBridgeInventoryPreCreationCleanupObserver : public LLInventoryFetchDescendentsObserver
|
||||
|
|
@ -185,14 +184,12 @@ public:
|
|||
|
||||
protected:
|
||||
~FSLSLBridgeInventoryPreCreationCleanupObserver() {}
|
||||
|
||||
};
|
||||
|
||||
|
||||
class FSLSLBridgeCleanupTimer : public LLEventTimer
|
||||
{
|
||||
public:
|
||||
FSLSLBridgeCleanupTimer() : LLEventTimer(1.f) {}
|
||||
FSLSLBridgeCleanupTimer() : LLEventTimer(12.f) {}
|
||||
BOOL tick();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -36,28 +36,28 @@
|
|||
|
||||
|
||||
//If we get back a normal response, handle it here
|
||||
void FSLSLBridgeRequest_Success( LLSD const &aData )
|
||||
void FSLSLBridgeRequest_Success(LLSD const &aData)
|
||||
{
|
||||
LL_DEBUGS() << ll_pretty_print_sd( aData ) << LL_ENDL;
|
||||
LL_DEBUGS("FSLSLBridge") << ll_pretty_print_sd(aData) << LL_ENDL;
|
||||
//do not use - infinite loop, only here for testing.
|
||||
//FSLSLBridge::instance().viewerToLSL("Response_to_response|" + strContent);
|
||||
}
|
||||
|
||||
//If we get back an error (not found, etc...), handle it here
|
||||
void FSLSLBridgeRequest_Failure( LLSD const &aData )
|
||||
void FSLSLBridgeRequest_Failure(LLSD const &aData)
|
||||
{
|
||||
LL_WARNS() << "FSLSLBridgeRequest::error(" << ll_pretty_print_sd( aData ) << ")" << LL_ENDL;
|
||||
LL_WARNS("FSLSLBridge") << "FSLSLBridgeRequest::error(" << ll_pretty_print_sd(aData) << ")" << LL_ENDL;
|
||||
}
|
||||
|
||||
void FSLSLBridgeRequestRadarPos_Success( LLSD const &aData )
|
||||
void FSLSLBridgeRequestRadarPos_Success(LLSD const &aData)
|
||||
{
|
||||
FSRadar* radar = FSRadar::getInstance();
|
||||
LL_DEBUGS() << ll_pretty_print_sd( aData ) << LL_ENDL;
|
||||
if (radar && aData.has( LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT ) )
|
||||
LL_DEBUGS("FSLSLBridge") << ll_pretty_print_sd(aData) << LL_ENDL;
|
||||
if (radar && aData.has(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT))
|
||||
{
|
||||
std::string strContent = aData[ LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT ].asString();
|
||||
//LL_INFOS() << "Got info: " << strContent << LL_ENDL;
|
||||
// AO: parse content into pairs of [agent UUID,agent zHeight] , update our peoplepanel radar for each one
|
||||
std::string strContent = aData[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT].asString();
|
||||
//LL_INFOS("FSLSLBridge") << "Got info: " << strContent << LL_ENDL;
|
||||
// AO: parse content into pairs of [agent UUID,agent zHeight] , update our radar for each one
|
||||
|
||||
LLUUID targetAv;
|
||||
F32 targetZ;
|
||||
|
|
@ -74,9 +74,8 @@ void FSLSLBridgeRequestRadarPos_Success( LLSD const &aData )
|
|||
if (entry)
|
||||
{
|
||||
entry->setZOffset(targetZ);
|
||||
//LL_INFOS() << targetAv << " ::: " << targetZ << LL_ENDL;
|
||||
//LL_INFOS("FSLSLBridge") << targetAv << " ::: " << targetZ << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@
|
|||
#ifndef FS_LSLBRIDGEREQUEST_H
|
||||
#define FS_LSLBRIDGEREQUEST_H
|
||||
|
||||
void FSLSLBridgeRequest_Success( LLSD const &aData );
|
||||
void FSLSLBridgeRequest_Failure( LLSD const &aData );
|
||||
void FSLSLBridgeRequestRadarPos_Success( LLSD const &aData );
|
||||
void FSLSLBridgeRequest_Success(LLSD const &aData);
|
||||
void FSLSLBridgeRequest_Failure(LLSD const &aData);
|
||||
void FSLSLBridgeRequestRadarPos_Success(LLSD const &aData);
|
||||
|
||||
#endif // FS_LSLBRIDGEREQUEST_H
|
||||
|
|
|
|||
|
|
@ -162,15 +162,6 @@ void FSPanelProfileTab::setApplyProgress(bool started)
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool enable_god()
|
||||
{
|
||||
return gAgent.isGodlike();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
FSPanelProfileSecondLife::FSPanelProfileSecondLife()
|
||||
: FSPanelProfileTab()
|
||||
, mStatusText(NULL)
|
||||
|
|
@ -217,16 +208,17 @@ BOOL FSPanelProfileSecondLife::postBuild()
|
|||
mStatusText->setVisible(FALSE);
|
||||
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
registrar.add("Profile.Call", boost::bind(&FSPanelProfileSecondLife::onCallButtonClick, this));
|
||||
registrar.add("Profile.Share", boost::bind(&FSPanelProfileSecondLife::share, this));
|
||||
registrar.add("Profile.Kick", boost::bind(&FSPanelProfileSecondLife::kick, this));
|
||||
registrar.add("Profile.Freeze", boost::bind(&FSPanelProfileSecondLife::freeze, this));
|
||||
registrar.add("Profile.Unfreeze", boost::bind(&FSPanelProfileSecondLife::unfreeze, this));
|
||||
registrar.add("Profile.CSR", boost::bind(&FSPanelProfileSecondLife::csr, this));
|
||||
registrar.add("Profile.CopyNameToClipboard", boost::bind(&FSPanelProfileSecondLife::onCopyToClipboard, this));
|
||||
registrar.add("Profile.CopyURI", boost::bind(&FSPanelProfileSecondLife::onCopyURI, this));
|
||||
registrar.add("Profile.CopyKey", boost::bind(&FSPanelProfileSecondLife::onCopyKey, this));
|
||||
registrar.add("Profile.Report", boost::bind(&FSPanelProfileSecondLife::onReport, this));
|
||||
registrar.add("Profile.Call", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::startCall(getAvatarId()); });
|
||||
registrar.add("Profile.AddToContactSet", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::addToContactSet(getAvatarId()); });
|
||||
registrar.add("Profile.Share", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::share(getAvatarId()); });
|
||||
registrar.add("Profile.Kick", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::kick(getAvatarId()); });
|
||||
registrar.add("Profile.Freeze", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::freeze(getAvatarId()); });
|
||||
registrar.add("Profile.Unfreeze", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::unfreeze(getAvatarId()); });
|
||||
registrar.add("Profile.CSR", [this](LLUICtrl*, const LLSD&) { LLAvatarName av_name; LLAvatarNameCache::get(getAvatarId(), &av_name); std::string name = av_name.getUserName(); LLAvatarActions::csr(getAvatarId(), name); });
|
||||
registrar.add("Profile.CopyNameToClipboard", [this](LLUICtrl*, const LLSD&) { onCopyToClipboard(); });
|
||||
registrar.add("Profile.CopyURI", [this](LLUICtrl*, const LLSD&) { onCopyURI(); });
|
||||
registrar.add("Profile.CopyKey", [this](LLUICtrl*, const LLSD&) { LLClipboard::instance().copyToClipboard(utf8str_to_wstring(getAvatarId().asString()), 0, getAvatarId().asString().size() ); });
|
||||
registrar.add("Profile.Report", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::report(getAvatarId()); });
|
||||
|
||||
mAddFriendButton->setCommitCallback(boost::bind(&FSPanelProfileSecondLife::onAddFriendButtonClick, this));
|
||||
mIMButton->setCommitCallback(boost::bind(&FSPanelProfileSecondLife::onIMButtonClick, this));
|
||||
|
|
@ -239,8 +231,8 @@ BOOL FSPanelProfileSecondLife::postBuild()
|
|||
mDisplayNameButton->setCommitCallback(boost::bind(&FSPanelProfileSecondLife::onClickSetName, this));
|
||||
|
||||
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable;
|
||||
enable.add("Profile.EnableCall", boost::bind(&FSPanelProfileSecondLife::enableCall, this));
|
||||
enable.add("Profile.EnableGod", boost::bind(&enable_god));
|
||||
enable.add("Profile.EnableCall", [this](LLUICtrl*, const LLSD&) { return mVoiceStatus; });
|
||||
enable.add("Profile.EnableGod", [](LLUICtrl*, const LLSD&) { return gAgent.isGodlike(); });
|
||||
|
||||
mGroupList->setDoubleClickCallback(boost::bind(&FSPanelProfileSecondLife::openGroupProfile, this));
|
||||
mGroupList->setReturnCallback(boost::bind(&FSPanelProfileSecondLife::openGroupProfile, this));
|
||||
|
|
@ -582,11 +574,6 @@ void FSPanelProfileSecondLife::pay()
|
|||
LLAvatarActions::pay(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::share()
|
||||
{
|
||||
LLAvatarActions::share(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::toggleBlock()
|
||||
{
|
||||
LLAvatarActions::toggleBlock(getAvatarId());
|
||||
|
|
@ -594,34 +581,6 @@ void FSPanelProfileSecondLife::toggleBlock()
|
|||
updateButtons();
|
||||
}
|
||||
|
||||
bool FSPanelProfileSecondLife::enableCall()
|
||||
{
|
||||
return mVoiceStatus;
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::kick()
|
||||
{
|
||||
LLAvatarActions::kick(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::freeze()
|
||||
{
|
||||
LLAvatarActions::freeze(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::unfreeze()
|
||||
{
|
||||
LLAvatarActions::unfreeze(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::csr()
|
||||
{
|
||||
LLAvatarName av_name;
|
||||
LLAvatarNameCache::get(getAvatarId(), &av_name);
|
||||
std::string name = av_name.getUserName();
|
||||
LLAvatarActions::csr(getAvatarId(), name);
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::onAddFriendButtonClick()
|
||||
{
|
||||
LLAvatarActions::requestFriendshipDialog(getAvatarId());
|
||||
|
|
@ -637,11 +596,6 @@ void FSPanelProfileSecondLife::onTeleportButtonClick()
|
|||
LLAvatarActions::offerTeleport(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::onCallButtonClick()
|
||||
{
|
||||
LLAvatarActions::startCall(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::onCopyToClipboard()
|
||||
{
|
||||
std::string name = getChild<LLUICtrl>("complete_name")->getValue().asString();
|
||||
|
|
@ -654,21 +608,11 @@ void FSPanelProfileSecondLife::onCopyURI()
|
|||
LLClipboard::instance().copyToClipboard(utf8str_to_wstring(name), 0, name.size() );
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::onCopyKey()
|
||||
{
|
||||
LLClipboard::instance().copyToClipboard(utf8str_to_wstring(getAvatarId().asString()), 0, getAvatarId().asString().size() );
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::onGroupInvite()
|
||||
{
|
||||
LLAvatarActions::inviteToGroup(getAvatarId());
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::onReport()
|
||||
{
|
||||
LLAvatarActions::report(getAvatarId());
|
||||
}
|
||||
|
||||
// virtual, called by LLAvatarTracker
|
||||
void FSPanelProfileSecondLife::changed(U32 mask)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -194,11 +194,6 @@ protected:
|
|||
*/
|
||||
void pay();
|
||||
|
||||
/**
|
||||
* opens inventory and IM for sharing items
|
||||
*/
|
||||
void share();
|
||||
|
||||
/**
|
||||
* Add/remove resident to/from your block list.
|
||||
*/
|
||||
|
|
@ -206,23 +201,13 @@ protected:
|
|||
|
||||
void updateButtons();
|
||||
|
||||
void kick();
|
||||
void freeze();
|
||||
void unfreeze();
|
||||
void csr();
|
||||
|
||||
bool enableCall();
|
||||
|
||||
void onAddFriendButtonClick();
|
||||
void onIMButtonClick();
|
||||
void onCallButtonClick();
|
||||
void onTeleportButtonClick();
|
||||
|
||||
void onCopyToClipboard();
|
||||
void onCopyURI();
|
||||
void onCopyKey();
|
||||
void onGroupInvite();
|
||||
void onReport();
|
||||
|
||||
bool isGrantedToSeeOnlineStatus();
|
||||
|
||||
|
|
|
|||
|
|
@ -2836,7 +2836,7 @@ bool LLAppViewer::initConfiguration()
|
|||
|
||||
//<FS:Techwolf Lupindo>
|
||||
// load defaults overide here. Can not use settings_files.xml as path is different then above loading of defaults.
|
||||
std::string fsdata_defaults = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "fsdata_defaults.xml");
|
||||
std::string fsdata_defaults = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, llformat("fsdata_defaults.%s.xml", LLVersionInfo::getShortVersion().c_str()));
|
||||
std::string fsdata_global = "Global";
|
||||
LLControlGroup* settings_group = LLControlGroup::getInstance(fsdata_global);
|
||||
if(settings_group && settings_group->loadFromFile(fsdata_defaults, set_defaults))
|
||||
|
|
|
|||
|
|
@ -1776,7 +1776,7 @@ void LLAvatarActions::zoomIn(const LLUUID& idAgent)
|
|||
void LLAvatarActions::getScriptInfo(const LLUUID& idAgent)
|
||||
{
|
||||
LL_INFOS() << "Reporting Script Info for avatar: " << idAgent.asString() << LL_ENDL;
|
||||
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + idAgent.asString());
|
||||
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + idAgent.asString() + "|" + (gSavedSettings.getBOOL("FSScriptInfoExtended") ? "1" : "0"));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@
|
|||
#include "llvocache.h"
|
||||
#include "llcontrolavatar.h"
|
||||
#include "lldrawpoolavatar.h"
|
||||
#include "llskinningutil.h"
|
||||
|
||||
const F32 MIN_INTERPOLATE_DISTANCE_SQUARED = 0.001f * 0.001f;
|
||||
const F32 MAX_INTERPOLATE_DISTANCE_SQUARED = 10.f * 10.f;
|
||||
|
|
@ -94,7 +95,10 @@ void LLDrawable::incrementVisible()
|
|||
LLDrawable::LLDrawable(LLViewerObject *vobj, bool new_entry)
|
||||
: LLViewerOctreeEntryData(LLViewerOctreeEntry::LLDRAWABLE),
|
||||
LLTrace::MemTrackable<LLDrawable, 16>("LLDrawable"),
|
||||
mVObjp(vobj)
|
||||
mVObjp(vobj),
|
||||
mSkinningMatCache(nullptr),
|
||||
mLastSkinningMatCacheFrame(0),
|
||||
mCacheSize(0)
|
||||
{
|
||||
init(new_entry);
|
||||
}
|
||||
|
|
@ -140,7 +144,7 @@ void LLDrawable::init(bool new_entry)
|
|||
|
||||
llassert(!vo_entry->getGroup()); //not in the object cache octree.
|
||||
}
|
||||
|
||||
|
||||
llassert(!vo_entry || vo_entry->getEntry() == mEntry);
|
||||
|
||||
initVisible(sCurVisible - 2);//invisible for the current frame and the last frame.
|
||||
|
|
@ -164,7 +168,6 @@ void LLDrawable::unload()
|
|||
}
|
||||
facep->clearState(LLFace::RIGGED);
|
||||
}
|
||||
|
||||
pVVol->markForUpdate(TRUE);
|
||||
}
|
||||
|
||||
|
|
@ -199,8 +202,14 @@ void LLDrawable::destroy()
|
|||
|
||||
std::for_each(mFaces.begin(), mFaces.end(), DeletePointer());
|
||||
mFaces.clear();
|
||||
|
||||
|
||||
|
||||
// <FS:Beq> close up potential memory leak
|
||||
if (mSkinningMatCache)
|
||||
{
|
||||
ll_aligned_free_16(mSkinningMatCache);
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
/*if (!(sNumZombieDrawables % 10))
|
||||
{
|
||||
LL_INFOS() << "- Zombie drawables: " << sNumZombieDrawables << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -66,7 +66,9 @@ class LLDrawable
|
|||
public:
|
||||
LLDrawable(const LLDrawable& rhs)
|
||||
: LLTrace::MemTrackable<LLDrawable, 16>("LLDrawable"),
|
||||
LLViewerOctreeEntryData(rhs)
|
||||
LLViewerOctreeEntryData(rhs),
|
||||
mLastSkinningMatCacheFrame(0),
|
||||
mCacheSize(0)
|
||||
{
|
||||
*this = rhs;
|
||||
}
|
||||
|
|
@ -79,6 +81,12 @@ public:
|
|||
|
||||
static void initClass();
|
||||
|
||||
//<FS:Beq> per frame matrix cache
|
||||
LL_ALIGN_16(LLMatrix4a* mSkinningMatCache);
|
||||
U32 mLastSkinningMatCacheFrame;
|
||||
U32 mCacheSize;
|
||||
//</FS:Beq>
|
||||
|
||||
LLDrawable(LLViewerObject *vobj, bool new_entry = false);
|
||||
|
||||
void markDead(); // Mark this drawable as dead
|
||||
|
|
|
|||
|
|
@ -1954,9 +1954,13 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(
|
|||
LLVector4a* norm = has_normal ? (LLVector4a*) normal.get() : NULL;
|
||||
|
||||
//build matrix palette
|
||||
LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
|
||||
U32 count = LLSkinningUtil::getMeshJointCount(skin);
|
||||
LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4*)mat, count, skin, avatar);
|
||||
//<FS:Beq> per frame cache of skinning matrices
|
||||
//LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
|
||||
//U32 count = LLSkinningUtil::getMeshJointCount(skin);
|
||||
//LLSkinningUtil::initSkinningMatrixPalette(mat, count, skin, avatar);
|
||||
U32 count = LLSkinningUtil::getMeshJointCount(skin);
|
||||
auto mat = getCacheSkinningMats(drawable, skin, count, avatar);
|
||||
//</FS:Beq>
|
||||
LLSkinningUtil::checkSkinWeights(weights, buffer->getNumVerts(), skin);
|
||||
|
||||
LLMatrix4a bind_shape_matrix;
|
||||
|
|
@ -1992,6 +1996,40 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(
|
|||
}
|
||||
}
|
||||
|
||||
//<FS:Beq> cache per frame Skinning mats
|
||||
LLMatrix4a* LLDrawPoolAvatar::getCacheSkinningMats(LLDrawable* drawable, const LLMeshSkinInfo* skin,
|
||||
U32 count, LLVOAvatar* avatar)
|
||||
{
|
||||
if (drawable->mCacheSize < count || !drawable->mSkinningMatCache)
|
||||
{
|
||||
// delete[](drawable->mSkinningMatCache);
|
||||
if (drawable->mSkinningMatCache)
|
||||
{
|
||||
ll_aligned_free_16(drawable->mSkinningMatCache);
|
||||
}
|
||||
drawable->mCacheSize = count;
|
||||
// drawable->mSkinningMatCache = new LLMatrix4a[count];
|
||||
drawable->mSkinningMatCache = (LLMatrix4a*)ll_aligned_malloc_16(sizeof(LLMatrix4a)*count);
|
||||
}
|
||||
|
||||
static LLCachedControl<bool> disableMatCache(gSavedSettings, "FSDisableRiggedMeshMatrixCaching"); // <FS:Beq> FIRE-23331 - disable matrix caching during appearance update due to weird side effects
|
||||
if (disableMatCache ||
|
||||
(avatar->isSelf() && avatar->isEditingAppearance()) ||
|
||||
(drawable->mSkinningMatCache && LLFrameTimer::getFrameCount() != drawable->mLastSkinningMatCacheFrame))
|
||||
{
|
||||
// LL_DEBUGS("Skinning") << "Call InitSkinningMatrixPalette for drawable @" << (U64)drawable << LL_ENDL;
|
||||
//<FS:Beq> add caching of matrix pallette as high up the stack as we can
|
||||
drawable->mLastSkinningMatCacheFrame = LLFrameTimer::getFrameCount();
|
||||
LLSkinningUtil::initSkinningMatrixPalette(drawable->mSkinningMatCache, count, skin, avatar);
|
||||
}
|
||||
else
|
||||
{
|
||||
// LL_DEBUGS("Skinning") << "Avoiding InitSkinningMatrixPalette for drawable @" << (U64)drawable << LL_ENDL;
|
||||
}
|
||||
return drawable->mSkinningMatCache;
|
||||
}
|
||||
//</FS:Beq>
|
||||
|
||||
void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
|
||||
{
|
||||
if (!avatar->shouldRenderRigged())
|
||||
|
|
@ -2134,11 +2172,16 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
|
|||
{
|
||||
if (sShaderLevel > 0)
|
||||
{
|
||||
// upload matrix palette to shader
|
||||
LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
|
||||
U32 count = LLSkinningUtil::getMeshJointCount(skin);
|
||||
LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4*)mat, count, skin, avatar);
|
||||
// upload matrix palette to shader
|
||||
|
||||
//<FS:Beq> per frame cache of skinning matrices
|
||||
//LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
|
||||
//U32 count = LLSkinningUtil::getMeshJointCount(skin);
|
||||
//LLSkinningUtil::initSkinningMatrixPalette(mat, count, skin, avatar);
|
||||
U32 count = LLSkinningUtil::getMeshJointCount(skin);
|
||||
auto mat = getCacheSkinningMats(drawable, skin, count, avatar);
|
||||
//</FS:Beq>
|
||||
|
||||
stop_glerror();
|
||||
|
||||
F32 mp[LL_MAX_JOINTS_PER_MESH_OBJECT*12];
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#define LL_LLDRAWPOOLAVATAR_H
|
||||
|
||||
#include "lldrawpool.h"
|
||||
#include "fsareasearch.h"
|
||||
|
||||
class LLVOAvatar;
|
||||
class LLGLSLShader;
|
||||
|
|
@ -57,6 +58,7 @@ public:
|
|||
|
||||
~LLDrawPoolAvatar();
|
||||
/*virtual*/ BOOL isDead();
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RIGGED_MATERIAL=0,
|
||||
|
|
@ -181,6 +183,11 @@ typedef enum
|
|||
|
||||
static LLMatrix4& getModelView();
|
||||
|
||||
//<FS:Beq> per frame cache
|
||||
static LLMatrix4a* getCacheSkinningMats(LLDrawable* drawable, const LLMeshSkinInfo* skin, U32 count,
|
||||
LLVOAvatar* avatar);
|
||||
//</FS:Beq>
|
||||
|
||||
/*virtual*/ LLDrawPool *instancePool();
|
||||
|
||||
/*virtual*/ S32 getNumPasses();
|
||||
|
|
|
|||
|
|
@ -125,11 +125,17 @@ BOOL LLViewerDynamicTexture::render()
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLViewerDynamicTexture::preRender(BOOL clear_depth)
|
||||
{
|
||||
//only images up to 512x512 are supported
|
||||
llassert(mFullHeight <= 512);
|
||||
llassert(mFullWidth <= 512);
|
||||
// <FS:Beq> changes to support higher resolution rendering in the preview
|
||||
////only images up to 512x512 are supported
|
||||
//llassert(mFullHeight <= 512);
|
||||
//llassert(mFullWidth <= 512);
|
||||
gPipeline.allocatePhysicsBuffer();
|
||||
llassert(mFullWidth <= static_cast<S32>(gPipeline.mPhysicsDisplay.getWidth()));
|
||||
llassert(mFullWidth <= static_cast<S32>(gPipeline.mPhysicsDisplay.getHeight()));
|
||||
|
||||
if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI)
|
||||
// if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI)
|
||||
if (gGLManager.mHasFramebufferObject && gPipeline.mPhysicsDisplay.isComplete() && !gGLManager.mIsATI)
|
||||
// </FS:Beq>
|
||||
{ //using offscreen render target, just use the bottom left corner
|
||||
mOrigin.set(0, 0);
|
||||
}
|
||||
|
|
@ -215,14 +221,15 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
|
|||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI;
|
||||
|
||||
// <FS:Beq> changes to support higher resolution rendering in the preview
|
||||
// bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI;
|
||||
bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mPhysicsDisplay.isComplete() && !gGLManager.mIsATI;
|
||||
if (use_fbo)
|
||||
{
|
||||
gPipeline.mWaterDis.bindTarget();
|
||||
// gPipeline.mWaterDis.bindTarget();
|
||||
gPipeline.mPhysicsDisplay.bindTarget();
|
||||
}
|
||||
|
||||
// </FS:Beq>
|
||||
LLGLSLShader::bindNoShader();
|
||||
LLVertexBuffer::unbind();
|
||||
|
||||
|
|
@ -258,7 +265,10 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
|
|||
|
||||
if (use_fbo)
|
||||
{
|
||||
gPipeline.mWaterDis.flush();
|
||||
// <FS:Beq> changes to support higher resolution rendering in the preview
|
||||
// gPipeline.mWaterDis.flush();
|
||||
gPipeline.mPhysicsDisplay.flush();
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "llvertexbuffer.h"
|
||||
#include "llviewertexture.h"
|
||||
#include "lldrawable.h"
|
||||
#include "lljoint.h"
|
||||
|
||||
class LLFacePool;
|
||||
class LLVolume;
|
||||
|
|
@ -267,7 +268,6 @@ public:
|
|||
|
||||
private:
|
||||
LLPointer<LLVertexBuffer> mVertexBuffer;
|
||||
|
||||
U32 mState;
|
||||
LLFacePool* mDrawPoolp;
|
||||
U32 mPoolType;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -152,6 +152,7 @@ protected:
|
|||
static void onAutoFillCommit(LLUICtrl*,void*);
|
||||
|
||||
void onLODParamCommit(S32 lod, bool enforce_tri_limit);
|
||||
void draw3dPreview();
|
||||
|
||||
static void onExplodeCommit(LLUICtrl*, void*);
|
||||
|
||||
|
|
@ -310,6 +311,7 @@ public:
|
|||
static bool sIgnoreLoadedCallback;
|
||||
std::vector<S32> mLodsQuery;
|
||||
std::vector<S32> mLodsWithParsingError;
|
||||
bool mHasDegenerate;
|
||||
|
||||
protected:
|
||||
|
||||
|
|
@ -337,6 +339,7 @@ private:
|
|||
|
||||
LLFloater* mFMP;
|
||||
|
||||
LLPointer<LLViewerFetchedTexture> mUVGuideTexture; // <FS:Beq> Add UV Guide texture overlay
|
||||
BOOL mNeedsUpdate;
|
||||
bool mDirty;
|
||||
bool mGenLOD;
|
||||
|
|
|
|||
|
|
@ -884,16 +884,6 @@ void LLFloaterPreference::onDoNotDisturbResponseChanged()
|
|||
|
||||
LLFloaterPreference::~LLFloaterPreference()
|
||||
{
|
||||
/* Dead code - "windowsize combo" is not in any of the skin files, except for the
|
||||
* dutch translation, which hints at a removed control. Apart from that, I don't
|
||||
* even understand what this code does O.o -Zi
|
||||
// clean up user data
|
||||
LLComboBox* ctrl_window_size = getChild<LLComboBox>("windowsize combo");
|
||||
for (S32 i = 0; i < ctrl_window_size->getItemCount(); i++)
|
||||
{
|
||||
ctrl_window_size->setCurrentByIndex(i);
|
||||
}*/
|
||||
|
||||
LLConversationLog::instance().removeObserver(this);
|
||||
|
||||
delete mSearchData;
|
||||
|
|
@ -3673,6 +3663,12 @@ BOOL LLPanelPreference::postBuild()
|
|||
{
|
||||
getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2));
|
||||
}
|
||||
// <FS:Ansariel> Disable running multiple viewers warning
|
||||
//if (hasChild("allow_multiple_viewer_check", TRUE))
|
||||
//{
|
||||
// getChild<LLCheckBoxCtrl>("allow_multiple_viewer_check")->setCommitCallback(boost::bind(&showMultipleViewersWarning, _1, _2));
|
||||
//}
|
||||
// </FS:Ansariel>
|
||||
if (hasChild("favorites_on_login_check", TRUE))
|
||||
{
|
||||
getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&handleFavoritesOnLoginChanged, _1, _2));
|
||||
|
|
@ -3682,6 +3678,11 @@ BOOL LLPanelPreference::postBuild()
|
|||
// </FS:Ansariel> [FS Login Panel]
|
||||
getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setValue(show_favorites_at_login);
|
||||
}
|
||||
if (hasChild("mute_chb_label", TRUE))
|
||||
{
|
||||
getChild<LLTextBox>("mute_chb_label")->setShowCursorHand(false);
|
||||
getChild<LLTextBox>("mute_chb_label")->setClickedCallback(boost::bind(&toggleMuteWhenMinimized));
|
||||
}
|
||||
|
||||
//////////////////////PanelAdvanced ///////////////////
|
||||
if (hasChild("modifier_combo", TRUE))
|
||||
|
|
@ -3806,6 +3807,14 @@ void LLPanelPreference::saveSettings()
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelPreference::showMultipleViewersWarning(LLUICtrl* checkbox, const LLSD& value)
|
||||
{
|
||||
if (checkbox && checkbox->getValue())
|
||||
{
|
||||
LLNotificationsUtil::add("AllowMultipleViewers");
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPreference::showFriendsOnlyWarning(LLUICtrl* checkbox, const LLSD& value)
|
||||
{
|
||||
if (checkbox && checkbox->getValue())
|
||||
|
|
@ -3832,6 +3841,12 @@ void LLPanelPreference::handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelPreference::toggleMuteWhenMinimized()
|
||||
{
|
||||
std::string mute("MuteWhenMinimized");
|
||||
gSavedSettings.setBOOL(mute, !gSavedSettings.getBOOL(mute));
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Only enable Growl checkboxes if Growl is usable
|
||||
void LLPanelPreference::onEnableGrowlChanged()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -331,12 +331,16 @@ protected:
|
|||
private:
|
||||
//for "Only friends and groups can call or IM me"
|
||||
static void showFriendsOnlyWarning(LLUICtrl*, const LLSD&);
|
||||
//for "Allow Multiple Viewers"
|
||||
static void showMultipleViewersWarning(LLUICtrl*, const LLSD&);
|
||||
|
||||
static void showCustomPortWarning(LLUICtrl*, const LLSD&); // -WoLf
|
||||
static void showCustomPortWarning(LLUICtrl*, const LLSD&); // <FS:WoLf>
|
||||
|
||||
//for "Show my Favorite Landmarks at Login"
|
||||
static void handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const LLSD& value);
|
||||
|
||||
static void toggleMuteWhenMinimized();
|
||||
|
||||
// <FS:Ansariel> Only enable Growl checkboxes if Growl is usable
|
||||
void onEnableGrowlChanged();
|
||||
// <FS:Ansariel> Flash chat toolbar button notification
|
||||
|
|
|
|||
|
|
@ -167,9 +167,12 @@ void LLFloaterScriptDebug::addScriptLine(const LLChat& chat)
|
|||
{
|
||||
if(objectp->isHUDAttachment())
|
||||
{
|
||||
((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI));
|
||||
// <FS:Ansariel> Mark script error icons
|
||||
((LLViewerObject*)gAgentAvatarp)->getIcon()->setScriptError();
|
||||
if (isAgentAvatarValid())
|
||||
{
|
||||
((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI));
|
||||
// <FS:Ansariel> Mark script error icons
|
||||
((LLViewerObject*)gAgentAvatarp)->getIcon()->setScriptError();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -353,8 +353,8 @@ BOOL LLFloaterWorldMap::postBuild()
|
|||
landmark_combo->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
|
||||
mListLandmarkCombo = dynamic_cast<LLCtrlListInterface *>(landmark_combo);
|
||||
|
||||
mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
|
||||
getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale);
|
||||
mCurZoomVal = log(LLWorldMapView::sMapScale/256.f)/log(2.f);
|
||||
getChild<LLUICtrl>("zoom slider")->setValue(mCurZoomVal);
|
||||
|
||||
setDefaultBtn(NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -2740,6 +2740,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
// <FS:Ansariel> FIRE-1392: Allow dragging all asset types into Landmarks folder
|
||||
//const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
|
||||
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
||||
const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false);
|
||||
|
||||
const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
|
||||
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
||||
|
|
@ -2747,6 +2748,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
const BOOL move_is_into_current_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_CURRENT_OUTFIT);
|
||||
// <FS:Ansariel> FIRE-1392: Allow dragging all asset types into Landmarks folder
|
||||
//const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
|
||||
const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id);
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
// Determine if folder can be moved.
|
||||
|
|
@ -2796,6 +2798,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
{
|
||||
is_movable = FALSE;
|
||||
}
|
||||
if (is_movable && move_is_into_lost_and_found)
|
||||
{
|
||||
is_movable = FALSE;
|
||||
}
|
||||
if (is_movable && (mUUID == model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE)))
|
||||
{
|
||||
is_movable = FALSE;
|
||||
|
|
@ -3954,12 +3960,14 @@ void LLFolderBridge::perform_pasteFromClipboard()
|
|||
const LLUUID &marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||
const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
|
||||
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
|
||||
const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false);
|
||||
|
||||
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
|
||||
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
|
||||
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
|
||||
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
|
||||
const BOOL move_is_into_favorites = (mUUID == favorites_id);
|
||||
const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id);
|
||||
|
||||
std::vector<LLUUID> objects;
|
||||
LLClipboard::instance().pasteFromClipboard(objects);
|
||||
|
|
@ -4035,6 +4043,13 @@ void LLFolderBridge::perform_pasteFromClipboard()
|
|||
LLInventoryObject *obj = model->getObject(item_id);
|
||||
if (obj)
|
||||
{
|
||||
if (move_is_into_lost_and_found)
|
||||
{
|
||||
if (LLAssetType::AT_CATEGORY == obj->getType())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (move_is_into_current_outfit || move_is_into_outfit)
|
||||
{
|
||||
if (item && can_move_to_outfit(item, move_is_into_current_outfit))
|
||||
|
|
|
|||
|
|
@ -1221,12 +1221,16 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it
|
|||
mCompletionObserver->reset();
|
||||
for (std::deque<LLFolderViewItem*>::const_iterator it = items.begin(); it != items.end(); ++it)
|
||||
{
|
||||
LLUUID id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID();
|
||||
LLViewerInventoryItem* inv_item = mInventory->getItem(id);
|
||||
|
||||
if (inv_item && !inv_item->isFinished())
|
||||
LLFolderViewModelItemInventory* view_model = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem());
|
||||
if (view_model)
|
||||
{
|
||||
mCompletionObserver->watchItem(id);
|
||||
LLUUID id = view_model->getUUID();
|
||||
LLViewerInventoryItem* inv_item = mInventory->getItem(id);
|
||||
|
||||
if (inv_item && !inv_item->isFinished())
|
||||
{
|
||||
mCompletionObserver->watchItem(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -841,11 +841,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
|
|||
bool identical_color = false;
|
||||
|
||||
if(mColorSwatch)
|
||||
{
|
||||
{
|
||||
LLSelectedTE::getColor(color, identical_color);
|
||||
LLColor4 prev_color = mColorSwatch->get();
|
||||
|
||||
mColorSwatch->setOriginal(color);
|
||||
mColorSwatch->set(color, TRUE);
|
||||
mColorSwatch->set(color, force_set_values || (prev_color != color) || !editable);
|
||||
|
||||
mColorSwatch->setValid(editable);
|
||||
mColorSwatch->setEnabled( editable );
|
||||
|
|
@ -1463,8 +1464,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
|
|||
//
|
||||
if (!material->getSpecularID().isNull())
|
||||
{
|
||||
getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(material->getSpecularLightColor());
|
||||
getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE);
|
||||
LLColorSwatchCtrl* shiny_swatch = getChild<LLColorSwatchCtrl>("shinycolorswatch");
|
||||
LLColor4 new_color = material->getSpecularLightColor();
|
||||
LLColor4 old_color = shiny_swatch->get();
|
||||
|
||||
shiny_swatch->setOriginal(new_color);
|
||||
shiny_swatch->set(new_color, force_set_values || old_color != new_color || !editable);
|
||||
}
|
||||
|
||||
// Bumpy (normal)
|
||||
|
|
|
|||
|
|
@ -2358,8 +2358,8 @@ class FSScriptAssetUpload: public LLScriptAssetUpload
|
|||
{
|
||||
bool m_bMono;
|
||||
public:
|
||||
FSScriptAssetUpload( LLUUID itemId, std::string buffer, invnUploadFinish_f finish, bool a_bMono )
|
||||
: LLScriptAssetUpload( itemId, buffer, finish )
|
||||
FSScriptAssetUpload(LLUUID itemId, std::string buffer, invnUploadFinish_f finish, bool a_bMono)
|
||||
: LLScriptAssetUpload(itemId, buffer, finish)
|
||||
{
|
||||
m_bMono = a_bMono;
|
||||
}
|
||||
|
|
@ -2367,7 +2367,7 @@ public:
|
|||
virtual LLSD generatePostBody()
|
||||
{
|
||||
LLSD body = LLScriptAssetUpload::generatePostBody();
|
||||
if( m_bMono )
|
||||
if (m_bMono)
|
||||
body["target"] = "mono";
|
||||
else
|
||||
body["target"] = "lsl2";
|
||||
|
|
@ -2407,36 +2407,45 @@ void LLPreviewLSL::saveIfNeeded(bool sync /*= true*/)
|
|||
|
||||
// NaCL - LSL Preprocessor
|
||||
mScriptEd->enableSave(FALSE); // Clear the enable save flag (FIRE-10173)
|
||||
BOOL domono = FSLSLPreprocessor::mono_directive(mScriptEd->getScriptText());
|
||||
if(domono == FALSE)
|
||||
bool domono = gSavedSettings.getBOOL("FSSaveInventoryScriptsAsMono");
|
||||
if (gSavedSettings.getBOOL("_NACL_LSLPreprocessor"))
|
||||
{
|
||||
LLSD row;
|
||||
if(gSavedSettings.getBOOL("_NACL_SaveInventoryScriptsAsMono"))
|
||||
bool mono_directive = FSLSLPreprocessor::mono_directive(mScriptEd->getScriptText(), domono);
|
||||
|
||||
if (mono_directive != domono)
|
||||
{
|
||||
row["columns"][0]["value"] = "Detected compile-as-LSL2 directive, but debug setting SaveInventoryScriptsAsMono overrided it.";
|
||||
domono = TRUE;
|
||||
}else row["columns"][0]["value"] = "Detected compile-as-LSL2 directive";
|
||||
//domono = FALSE;
|
||||
row["columns"][0]["font"] = "SANSSERIF_SMALL";
|
||||
mScriptEd->mErrorList->addElement(row);
|
||||
std::string message;
|
||||
if (mono_directive)
|
||||
{
|
||||
message = LLTrans::getString("fs_preprocessor_mono_directive_override");
|
||||
}
|
||||
else
|
||||
{
|
||||
message = LLTrans::getString("fs_preprocessor_lsl2_directive_override");
|
||||
}
|
||||
domono = mono_directive;
|
||||
mScriptEd->mErrorList->addCommentText(message);
|
||||
}
|
||||
}
|
||||
// NaCl End
|
||||
|
||||
if(inv_item)
|
||||
{
|
||||
getWindow()->incBusyCount();
|
||||
mPendingUploads++;
|
||||
if (!url.empty())
|
||||
{
|
||||
//<FS:KC> Script Preprocessor
|
||||
//<FS:KC> Script Preprocessor
|
||||
// std::string buffer(mScriptEd->mEditor->getText());
|
||||
std::string buffer(mScriptEd->getScriptText());
|
||||
//</FS:KC> Script Preprocessor
|
||||
std::string buffer(mScriptEd->getScriptText());
|
||||
//</FS:KC> Script Preprocessor
|
||||
LLBufferedAssetUploadInfo::invnUploadFinish_f proc = boost::bind(&LLPreviewLSL::finishedLSLUpload, _1, _4);
|
||||
|
||||
// <FS:ND> DoMono needs to be passed/set here.
|
||||
// LLResourceUploadInfo::ptr_t uploadInfo(new LLScriptAssetUpload(mItemUUID, buffer, proc));
|
||||
LLResourceUploadInfo::ptr_t uploadInfo(new FSScriptAssetUpload(mItemUUID, buffer, proc, domono ));
|
||||
LLResourceUploadInfo::ptr_t uploadInfo(new FSScriptAssetUpload(mItemUUID, buffer, proc, domono ));
|
||||
|
||||
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo); // <FS:ND> DoMono needs to be passed/set here.
|
||||
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,49 +128,100 @@ void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin
|
|||
skin->mInvalidJointsScrubbed = true;
|
||||
}
|
||||
|
||||
//<FS:Beq> Per frame SkinningMatrix Caching
|
||||
//void LLSkinningUtil::initSkinningMatrixPalette(
|
||||
// LLMatrix4* mat,
|
||||
// S32 count,
|
||||
// const LLMeshSkinInfo* skin,
|
||||
// LLVOAvatar *avatar)
|
||||
//{
|
||||
// initJointNums(const_cast<LLMeshSkinInfo*>(skin), avatar);
|
||||
// for (U32 j = 0; j < count; ++j)
|
||||
// {
|
||||
// LLJoint *joint = avatar->getJoint(skin->mJointNums[j]);
|
||||
// if (joint)
|
||||
// {
|
||||
//#define MAT_USE_SSE
|
||||
//#ifdef MAT_USE_SSE
|
||||
// LLMatrix4a bind, world, res;
|
||||
// bind.loadu(skin->mInvBindMatrix[j]);
|
||||
// world.loadu(joint->getWorldMatrix());
|
||||
// matMul(bind, world, res);
|
||||
// memcpy(mat[j].mMatrix, res.mMatrix, 16 * sizeof(float));
|
||||
//#else
|
||||
// mat[j] = skin->mInvBindMatrix[j];
|
||||
// mat[j] *= joint->getWorldMatrix();
|
||||
//#endif
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// mat[j] = skin->mInvBindMatrix[j];
|
||||
// // This shouldn't happen - in mesh upload, skinned
|
||||
// // rendering should be disabled unless all joints are
|
||||
// // valid. In other cases of skinned rendering, invalid
|
||||
// // joints should already have been removed during scrubInvalidJoints().
|
||||
// LL_WARNS_ONCE("Avatar") << avatar->getFullname()
|
||||
// << " rigged to invalid joint name " << skin->mJointNames[j]
|
||||
// << " num " << skin->mJointNums[j] << LL_ENDL;
|
||||
// LL_WARNS_ONCE("Avatar") << avatar->getFullname()
|
||||
// << " avatar build state: isBuilt() " << avatar->isBuilt()
|
||||
// << " mInitFlags " << avatar->mInitFlags << LL_ENDL;
|
||||
//#if 0
|
||||
// dump_avatar_and_skin_state("initSkinningMatrixPalette joint not found", avatar, skin);
|
||||
//#endif
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
static LLTrace::BlockTimerStatHandle FTM_SKINNING_INIT("Init Skinning Mats");
|
||||
#endif
|
||||
|
||||
void LLSkinningUtil::initSkinningMatrixPalette(
|
||||
LLMatrix4* mat,
|
||||
LLMatrix4a* mat,
|
||||
S32 count,
|
||||
const LLMeshSkinInfo* skin,
|
||||
LLVOAvatar *avatar)
|
||||
{
|
||||
initJointNums(const_cast<LLMeshSkinInfo*>(skin), avatar);
|
||||
for (U32 j = 0; j < count; ++j)
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
// This timer is too hot for normal use (though better now with caching)
|
||||
LL_RECORD_BLOCK_TIME(FTM_SKINNING_INIT);
|
||||
#endif
|
||||
LLMatrix4a bind[LL_MAX_JOINTS_PER_MESH_OBJECT];
|
||||
LLMatrix4a world[LL_MAX_JOINTS_PER_MESH_OBJECT];
|
||||
|
||||
initJointNums(const_cast<LLMeshSkinInfo*>(skin), avatar);
|
||||
// TODO: Refactored to encourage the compiler to optimise better but it's too old and stubborn. Need to hand tool the SIMD.
|
||||
// TODO: There are two overheads in this function casued by the unaligned loads. use Matrix4a
|
||||
// TODO: getWorldMatrix forces a reverse recursion up through the skelly. Check if this is happening efficiently.
|
||||
for (S32 j = 0; j < count; ++j)
|
||||
{
|
||||
LLJoint *joint = avatar->getJoint(skin->mJointNums[j]);
|
||||
if (joint)
|
||||
{
|
||||
#define MAT_USE_SSE
|
||||
#ifdef MAT_USE_SSE
|
||||
LLMatrix4a bind, world, res;
|
||||
bind.loadu(skin->mInvBindMatrix[j]);
|
||||
world.loadu(joint->getWorldMatrix());
|
||||
matMul(bind,world,res);
|
||||
memcpy(mat[j].mMatrix,res.mMatrix,16*sizeof(float));
|
||||
#else
|
||||
mat[j] = skin->mInvBindMatrix[j];
|
||||
mat[j] *= joint->getWorldMatrix();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
mat[j] = skin->mInvBindMatrix[j];
|
||||
// This shouldn't happen - in mesh upload, skinned
|
||||
// rendering should be disabled unless all joints are
|
||||
// valid. In other cases of skinned rendering, invalid
|
||||
// joints should already have been removed during scrubInvalidJoints().
|
||||
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
|
||||
<< " rigged to invalid joint name " << skin->mJointNames[j]
|
||||
<< " num " << skin->mJointNums[j] << LL_ENDL;
|
||||
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
|
||||
<< " avatar build state: isBuilt() " << avatar->isBuilt()
|
||||
<< " mInitFlags " << avatar->mInitFlags << LL_ENDL;
|
||||
#if 0
|
||||
dump_avatar_and_skin_state("initSkinningMatrixPalette joint not found", avatar, skin);
|
||||
#endif
|
||||
}
|
||||
if (joint != nullptr){
|
||||
bind[j].loadu(skin->mInvBindMatrix[j]);
|
||||
world[j].loadu(joint->getWorldMatrix());
|
||||
matMul(bind[j], world[j], mat[j]);
|
||||
}
|
||||
else
|
||||
{
|
||||
mat[j].loadu(skin->mInvBindMatrix[j]);
|
||||
// This shouldn't happen - in mesh upload, skinned
|
||||
// rendering should be disabled unless all joints are
|
||||
// valid. In other cases of skinned rendering, invalid
|
||||
// joints should already have been removed during scrubInvalidJoints().
|
||||
// Beq note - Oct 2018 Animesh - Many rigged meshes still fail here. ('mElbowLeeft' typo in the rigging data)
|
||||
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
|
||||
<< " rigged to invalid joint name " << skin->mJointNames[j]
|
||||
<< " num " << skin->mJointNums[j] << LL_ENDL;
|
||||
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
|
||||
<< " avatar build state: isBuilt() " << avatar->isBuilt()
|
||||
<< " mInitFlags " << avatar->mInitFlags << LL_ENDL;
|
||||
|
||||
}
|
||||
//LL_DEBUGS("Skinning") << "[" << avatar->getFullname() << "] joint(" << skin->mJointNames[j] << ") matices bind(" << bind << ") world(" << world << ")" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
//</FS:Beq>
|
||||
|
||||
void LLSkinningUtil::checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -38,8 +38,11 @@ namespace LLSkinningUtil
|
|||
U32 getMaxJointCount();
|
||||
U32 getMeshJointCount(const LLMeshSkinInfo *skin);
|
||||
void scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin);
|
||||
void initSkinningMatrixPalette(LLMatrix4* mat, S32 count, const LLMeshSkinInfo* skin, LLVOAvatar *avatar);
|
||||
void checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin);
|
||||
//<FS:Beq> Per frame SkinningMatrix Caching
|
||||
//void initSkinningMatrixPalette(LLMatrix4* mat, S32 count, const LLMeshSkinInfo* skin, LLVOAvatar* avatar);
|
||||
void initSkinningMatrixPalette(LLMatrix4a* mat, S32 count, const LLMeshSkinInfo* skin, LLVOAvatar* avatar);
|
||||
//</FS:Beq>
|
||||
void checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin);
|
||||
void scrubSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin);
|
||||
void getPerVertexSkinMatrix(F32* weights, LLMatrix4a* mat, bool handle_bad_scale, LLMatrix4a& final_mat, U32 max_joints);
|
||||
void initJointNums(LLMeshSkinInfo* skin, LLVOAvatar *avatar);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include "lltoastscripttextbox.h"
|
||||
|
||||
#include "lldbstrings.h"
|
||||
#include "lllslconstants.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llstyle.h"
|
||||
|
|
@ -35,15 +36,15 @@
|
|||
#include "llviewertexteditor.h"
|
||||
|
||||
const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT= 14;
|
||||
#include "lldbstrings.h"
|
||||
// *TODO: magic numbers - copied from lltoastnotifypanel.cpp(50) which was copied from llnotify.cpp(250)
|
||||
const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE;
|
||||
|
||||
LLToastScriptTextbox::LLToastScriptTextbox(const LLNotificationPtr& notification)
|
||||
: LLToastPanel(notification)
|
||||
{
|
||||
buildFromFile( "panel_notify_textbox.xml");
|
||||
|
||||
mInfoText = getChild<LLTextBox>("text_editor_box");
|
||||
const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE;
|
||||
mInfoText = getChild<LLTextEditor>("text_editor_box");
|
||||
mInfoText->setMaxTextLength(MAX_LENGTH);
|
||||
mInfoText->setValue(notification->getMessage());
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
LLTextBox* mInfoText;
|
||||
LLTextEditor* mInfoText;
|
||||
|
||||
void onClickSubmit();
|
||||
void onClickIgnore();
|
||||
|
|
|
|||
|
|
@ -930,7 +930,7 @@ void handleRenderFriendsOnlyChanged(const LLSD& newvalue)
|
|||
{
|
||||
LLVOAvatar* avatar = (LLVOAvatar*)*iter;
|
||||
|
||||
if (avatar->getID() != gAgentID && !LLAvatarActions::isFriend(avatar->getID()))
|
||||
if (avatar->getID() != gAgentID && !LLAvatarActions::isFriend(avatar->getID()) && !avatar->isControlAvatar())
|
||||
{
|
||||
gObjectList.killObject(avatar);
|
||||
if (LLViewerRegion::sVOCacheCullingEnabled && avatar->getRegion())
|
||||
|
|
|
|||
|
|
@ -7406,7 +7406,7 @@ void handle_script_info()
|
|||
{
|
||||
object_id = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()->mID;
|
||||
LL_INFOS() << "Reporting Script Info for object: " << object_id.asString() << LL_ENDL;
|
||||
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + object_id.asString());
|
||||
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + object_id.asString() + "|" + (gSavedSettings.getBOOL("FSScriptInfoExtended") ? "1" : "0"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -10619,6 +10619,17 @@ class LLEditEnableTakeOff : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
// <FS:Beq> Xmas present for Ansa, Animesh kill switch
|
||||
class FSDerenderAnimatedObjects : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
gObjectList.killAnimatedObjects();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// </FS:Beq>
|
||||
class LLEditTakeOff : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
|
|
@ -11400,6 +11411,7 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction");
|
||||
view_listener_t::addMenu(new FSToolsResyncAnimations(), "Tools.ResyncAnimations"); // <FS:CR> Resync Animations
|
||||
view_listener_t::addMenu(new FSToolsUndeform(), "Tools.Undeform"); // <FS:CR> FIRE-4345: Undeform
|
||||
view_listener_t::addMenu(new FSDerenderAnimatedObjects(), "Tools.DerenderAnimatedObjects"); // <FS:Beq> Animesh Kill switch
|
||||
|
||||
view_listener_t::addMenu(new LLToolsEnableToolNotPie(), "Tools.EnableToolNotPie");
|
||||
view_listener_t::addMenu(new LLToolsEnableSelectNextPart(), "Tools.EnableSelectNextPart");
|
||||
|
|
|
|||
|
|
@ -299,6 +299,12 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
|
|||
|
||||
// This will also trigger an onlinenotification if the user is online
|
||||
std::string url = gAgent.getRegionCapability("AcceptFriendship");
|
||||
// <FS:Ansariel> This only seems to work for offline FRs if FSUseReadOfflineMsgsCap has been used
|
||||
if (!gSavedSettings.getBOOL("FSUseReadOfflineMsgsCap"))
|
||||
{
|
||||
url = "";
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
LL_DEBUGS("Friendship") << "Cap string: " << url << LL_ENDL;
|
||||
if (!url.empty() && payload.has("online") && payload["online"].asBoolean() == false)
|
||||
{
|
||||
|
|
@ -338,6 +344,12 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
|
|||
// We no longer notify other viewers, but we DO still send
|
||||
// the rejection to the simulator to delete the pending userop.
|
||||
std::string url = gAgent.getRegionCapability("DeclineFriendship");
|
||||
// <FS:Ansariel> This only seems to work for offline FRs if FSUseReadOfflineMsgsCap has been used
|
||||
if (!gSavedSettings.getBOOL("FSUseReadOfflineMsgsCap"))
|
||||
{
|
||||
url = "";
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
LL_DEBUGS("Friendship") << "Cap string: " << url << LL_ENDL;
|
||||
if (!url.empty() && payload.has("online") && payload["online"].asBoolean() == false)
|
||||
{
|
||||
|
|
@ -2011,7 +2023,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
|
|||
{
|
||||
// <FS:Ansariel> This breaks object owner name parsing
|
||||
//log_message = "<nolink>" + chatHistory_string + "</nolink> " + LLTrans::getString("InvOfferGaveYou") + " " + getSanitizedDescription() + LLTrans::getString(".");
|
||||
log_message = chatHistory_string + LLTrans::getString("InvOfferGaveYou") + " " + getSanitizedDescription() + LLTrans::getString(".");
|
||||
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + getSanitizedDescription() + LLTrans::getString(".");
|
||||
// </FS:Ansariel>
|
||||
LLSD args;
|
||||
args["MESSAGE"] = log_message;
|
||||
|
|
@ -4715,6 +4727,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
|
|||
msg->getU64Fast(_PREHASH_SoundData, _PREHASH_Handle, region_handle);
|
||||
msg->getVector3Fast(_PREHASH_SoundData, _PREHASH_Position, pos_local);
|
||||
msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain);
|
||||
gain = llclampf(gain); // <FS> INT-141: Clamp gain to valid range
|
||||
|
||||
// adjust sound location to true global coords
|
||||
LLVector3d pos_global = from_region_handle(region_handle);
|
||||
|
|
@ -4861,6 +4874,7 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
msg->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
|
||||
msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags);
|
||||
gain = llclampf(gain); // <FS> INT-141: Clamp gain to valid range
|
||||
|
||||
LLViewerObject *objectp = gObjectList.findObject(object_id);
|
||||
if (objectp)
|
||||
|
|
@ -4899,6 +4913,7 @@ void process_attached_sound_gain_change(LLMessageSystem *mesgsys, void **user_da
|
|||
}
|
||||
|
||||
mesgsys->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
|
||||
gain = llclampf(gain); // <FS> INT-141: Clamp gain to valid range
|
||||
|
||||
objectp->adjustAudioGain(gain);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -996,12 +996,14 @@ void LLViewerObjectList::update(LLAgent &agent)
|
|||
const F64 frame_time = LLFrameTimer::getElapsedSeconds();
|
||||
|
||||
LLViewerObject *objectp = NULL;
|
||||
|
||||
|
||||
// Make a copy of the list in case something in idleUpdate() messes with it
|
||||
static std::vector<LLViewerObject*> idle_list;
|
||||
|
||||
U32 idle_count = 0;
|
||||
|
||||
//<FS:Beq> need avatar count for dynamic BB load balancing
|
||||
mNumAvatars = 0;
|
||||
//</FS:Beq>
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_IDLE_COPY);
|
||||
|
||||
|
|
@ -1015,11 +1017,15 @@ void LLViewerObjectList::update(LLAgent &agent)
|
|||
{
|
||||
idle_list.push_back( objectp );
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
idle_list[idle_count] = objectp;
|
||||
}
|
||||
++idle_count;
|
||||
//<FS:Beq> need avatar count for dynamic BB load balancing
|
||||
if (objectp->isAvatar())
|
||||
mNumAvatars++;
|
||||
//</FS:Beq>
|
||||
}
|
||||
else
|
||||
{ // There shouldn't be any NULL pointers in the list, but they have caused
|
||||
|
|
@ -1055,7 +1061,7 @@ void LLViewerObjectList::update(LLAgent &agent)
|
|||
objectp = *idle_iter;
|
||||
llassert(objectp->isActive());
|
||||
objectp->idleUpdate(agent, frame_time);
|
||||
}
|
||||
}
|
||||
|
||||
//update flexible objects
|
||||
LLVolumeImplFlexible::updateClass();
|
||||
|
|
@ -1497,6 +1503,29 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// <FS:Beq> Animated Objects kill switch
|
||||
void LLViewerObjectList::killAnimatedObjects()
|
||||
{
|
||||
LLViewerObject *objectp;
|
||||
|
||||
for (auto iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
objectp = *iter;
|
||||
|
||||
if (objectp->isAnimatedObject())
|
||||
{
|
||||
killObject(objectp);
|
||||
if (LLViewerRegion::sVOCacheCullingEnabled && objectp->getRegion())
|
||||
{
|
||||
objectp->getRegion()->killCacheEntry(objectp->getLocalID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cleanDeadObjects(FALSE);
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
|
||||
{
|
||||
LLViewerObject *objectp;
|
||||
|
|
@ -1661,9 +1690,9 @@ void LLViewerObjectList::updateActive(LLViewerObject *objectp)
|
|||
mActiveObjects.push_back(objectp);
|
||||
objectp->setListIndex(mActiveObjects.size()-1);
|
||||
objectp->setOnActiveList(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
llassert(idx < mActiveObjects.size());
|
||||
llassert(mActiveObjects[idx] == objectp);
|
||||
|
||||
|
|
@ -1804,6 +1833,7 @@ void LLViewerObjectList::repartitionObjects()
|
|||
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
|
||||
{
|
||||
LLViewerObject* objectp = *iter;
|
||||
|
||||
if (!objectp->isDead())
|
||||
{
|
||||
LLDrawable* drawable = objectp->mDrawable;
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ public:
|
|||
LLViewerObject *replaceObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); // TomY: hack to switch VO instances on the fly
|
||||
|
||||
BOOL killObject(LLViewerObject *objectp);
|
||||
void killAnimatedObjects();
|
||||
|
||||
void killObjects(LLViewerRegion *regionp); // Kill all objects owned by a particular region.
|
||||
void killAllObjects();
|
||||
|
|
@ -152,7 +153,6 @@ public:
|
|||
boost::signals2::connection setNewObjectCallback(new_object_callback_t cb);
|
||||
new_object_signal_t mNewObjectSignal;
|
||||
// </FS:CR>
|
||||
|
||||
////////////////////////////////////////////
|
||||
//
|
||||
// Only accessed by markDead in LLViewerObject
|
||||
|
|
@ -162,6 +162,10 @@ public:
|
|||
|
||||
S32 getOrphanParentCount() const { return (S32) mOrphanParents.size(); }
|
||||
S32 getOrphanCount() const { return mNumOrphans; }
|
||||
//<FS:Beq> need avatar count for dynamic BB load balancing
|
||||
S32 getAvatarCount() const { return mNumAvatars; }
|
||||
//</FS:Beq>
|
||||
|
||||
void orphanize(LLViewerObject *childp, U32 parent_id, U32 ip, U32 port);
|
||||
void findOrphans(LLViewerObject* objectp, U32 ip, U32 port);
|
||||
|
||||
|
|
@ -208,6 +212,9 @@ protected:
|
|||
std::vector<U64> mOrphanParents; // LocalID/ip,port of orphaned objects
|
||||
std::vector<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects
|
||||
S32 mNumOrphans;
|
||||
//<FS:Beq> need avatar count for dynamic BB load balancing
|
||||
S32 mNumAvatars;
|
||||
//</FS:Beq>
|
||||
|
||||
typedef std::vector<LLPointer<LLViewerObject> > vobj_list_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -126,9 +126,9 @@ const F32 desired_discard_bias_max = (F32)MAX_DISCARD_LEVEL; // max number of le
|
|||
const F64 log_2 = log(2.0);
|
||||
|
||||
#if ADDRESS_SIZE == 32
|
||||
/*const*/ U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; // <FS:Ansariel> Max texture resolution
|
||||
/*const*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; // <FS:Ansariel> Max texture resolution
|
||||
#else
|
||||
/*const*/ U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; // <FS:Ansariel> Max texture resolution
|
||||
/*const*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; // <FS:Ansariel> Max texture resolution
|
||||
#endif
|
||||
|
||||
LLUUID LLViewerTexture::sInvisiprimTexture1 = LLUUID::null;
|
||||
|
|
@ -1705,10 +1705,12 @@ void LLViewerFetchedTexture::processTextureStats()
|
|||
else
|
||||
{
|
||||
U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
|
||||
// <FS:Ansariel> Keep restriction on "fetched" (seems to be HUD) textures as well
|
||||
if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)
|
||||
{
|
||||
desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE;
|
||||
desired_size = DESIRED_NORMAL_TEXTURE_SIZE;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)
|
||||
{
|
||||
if (mFullWidth > desired_size || mFullHeight > desired_size)
|
||||
|
|
@ -3325,6 +3327,7 @@ void LLViewerLODTexture::processTextureStats()
|
|||
if (mKnownDrawWidth && mKnownDrawHeight)
|
||||
{
|
||||
S32 draw_texels = mKnownDrawWidth * mKnownDrawHeight;
|
||||
draw_texels = llclamp(draw_texels, MIN_IMAGE_AREA, MAX_IMAGE_AREA);
|
||||
|
||||
// Use log_4 because we're in square-pixel space, so an image
|
||||
// with twice the width and twice the height will have mTexelsPerImage
|
||||
|
|
@ -3365,7 +3368,7 @@ void LLViewerLODTexture::processTextureStats()
|
|||
U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
|
||||
if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)
|
||||
{
|
||||
desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE;
|
||||
desired_size = DESIRED_NORMAL_TEXTURE_SIZE;
|
||||
}
|
||||
if (mFullWidth > desired_size || mFullHeight > desired_size)
|
||||
min_discard = 1.f;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ extern S32Megabytes gMaxVideoRam;
|
|||
// </FS:Ansariel>
|
||||
|
||||
// <FS:Ansariel> Max texture resolution
|
||||
extern U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE;
|
||||
extern U32 DESIRED_NORMAL_TEXTURE_SIZE;
|
||||
|
||||
class LLFace;
|
||||
class LLImageGL ;
|
||||
|
|
|
|||
|
|
@ -1966,12 +1966,12 @@ LLViewerWindow::LLViewerWindow(const Params& p)
|
|||
#if ADDRESS_SIZE == 64
|
||||
if (gSavedSettings.getBOOL("FSRestrictMaxTextureSize"))
|
||||
{
|
||||
DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2;
|
||||
DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2;
|
||||
}
|
||||
#else
|
||||
gSavedSettings.setBOOL("FSRestrictMaxTextureSize", TRUE);
|
||||
#endif
|
||||
LL_INFOS() << "Maximum fetched texture size: " << DESIRED_NORMAL_FETCHED_TEXTURE_SIZE << "px" << LL_ENDL;
|
||||
LL_INFOS() << "Maximum fetched texture size: " << DESIRED_NORMAL_TEXTURE_SIZE << "px" << LL_ENDL;
|
||||
// </FS:Ansariel>
|
||||
|
||||
// Init the image list. Must happen after GL is initialized and before the images that
|
||||
|
|
|
|||
|
|
@ -211,6 +211,9 @@ const F32 NAMETAG_VERTICAL_SCREEN_OFFSET = 25.f;
|
|||
const F32 NAMETAG_VERT_OFFSET_WEIGHT = 0.17f;
|
||||
|
||||
const U32 LLVOAvatar::VISUAL_COMPLEXITY_UNKNOWN = 0;
|
||||
const F32 LLVOAvatar::VISUAL_COMPLEXITY_UPDATE_SECONDS = 10.0f;
|
||||
const F32 VISUAL_COMPLEXITY_FRAC_CHANGE_THRESH = 0.05f; // Changes to self will not be displayed unless they exceed this fraction of previous value.
|
||||
const F32 VISUAL_COMPLEXITY_ABS_CHANGE_THRESH = 1000; // ... and this absolute amount of change.
|
||||
const F64 HUD_OVERSIZED_TEXTURE_DATA_SIZE = 1024 * 1024;
|
||||
|
||||
enum ERenderName
|
||||
|
|
@ -1390,9 +1393,10 @@ static LLTrace::BlockTimerStatHandle FTM_AVATAR_EXTENT_UPDATE("Av Upd Extent");
|
|||
void LLVOAvatar::calculateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_AVATAR_EXTENT_UPDATE);
|
||||
|
||||
S32 box_detail = gSavedSettings.getS32("AvatarBoundingBoxComplexity");
|
||||
|
||||
//<FS:Beq> not called as often as it used to be but still no harm in optimising
|
||||
// S32 box_detail = gSavedSettings.getS32("AvatarBoundingBoxComplexity");
|
||||
static const LLCachedControl<S32> box_detail(gSavedSettings, "AvatarBoundingBoxComplexity");
|
||||
//<FS:Beq>
|
||||
// FIXME the update_min_max function used below assumes there is a
|
||||
// known starting point, but in general there isn't. Ideally the
|
||||
// box update logic should be modified to handle the no-point-yet
|
||||
|
|
@ -2569,7 +2573,21 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)
|
|||
}
|
||||
|
||||
// Update should be happening max once per frame.
|
||||
const S32 upd_freq = 4; // force update every upd_freq frames.
|
||||
// <FS:Beq> enable dynamic spreading of the BB calculations
|
||||
//const S32 upd_freq = 4; // force update every upd_freq frames.
|
||||
static LLCachedControl<S32> refreshPeriod(gSavedSettings, "AvatarExtentRefreshPeriodBatch");
|
||||
static LLCachedControl<S32> refreshMaxPerPeriod(gSavedSettings, "AvatarExtentRefreshMaxPerBatch");
|
||||
static S32 upd_freq = refreshPeriod; // initialise to a reasonable defauilt of 1 batch
|
||||
static S32 lastRecalibrationFrame{ 0 };
|
||||
|
||||
const S32 thisFrame = LLDrawable::getCurrentFrame();
|
||||
if (thisFrame - lastRecalibrationFrame >= upd_freq)
|
||||
{
|
||||
// Only update at the start of a cycle. .
|
||||
upd_freq = (((gObjectList.getAvatarCount() - 1) / refreshMaxPerPeriod) + 1)*refreshPeriod;
|
||||
lastRecalibrationFrame = thisFrame;
|
||||
}
|
||||
//</FS:Beq>
|
||||
if ((mLastAnimExtents[0]==LLVector3())||
|
||||
(mLastAnimExtents[1])==LLVector3())
|
||||
{
|
||||
|
|
@ -2577,7 +2595,10 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)
|
|||
}
|
||||
else
|
||||
{
|
||||
mNeedsExtentUpdate = ((LLDrawable::getCurrentFrame()+mID.mData[0])%upd_freq==0);
|
||||
//<FS:Beq> enable dynamic spreading of the BB calculations
|
||||
//mNeedsExtentUpdate = ((LLDrawable::getCurrentFrame()+mID.mData[0]) % upd_freq == 0);
|
||||
mNeedsExtentUpdate = ((thisFrame + mID.mData[0]) % upd_freq == 0);
|
||||
//</FS:Beq>
|
||||
}
|
||||
|
||||
LLScopedContextString str("avatar_idle_update " + getFullname());
|
||||
|
|
@ -10661,8 +10682,10 @@ void LLVOAvatar::updateRiggingInfo()
|
|||
|
||||
//LL_INFOS() << "done update rig count is " << countRigInfoTab(mJointRiggingInfoTab) << LL_ENDL;
|
||||
//LL_DEBUGS("RigSpammish") << getFullname() << " after update rig tab:" << LL_ENDL; // <FS:Ansariel> Performance tweak
|
||||
S32 joint_count, box_count;
|
||||
showRigInfoTabExtents(this, mJointRiggingInfoTab, joint_count, box_count);
|
||||
//<FS:Beq> remove debug only stuff on hot path
|
||||
//S32 joint_count, box_count;
|
||||
//showRigInfoTabExtents(this, mJointRiggingInfoTab, joint_count, box_count);
|
||||
//</FS:Beq>
|
||||
//LL_DEBUGS("RigSpammish") << "uses " << joint_count << " joints " << " nonzero boxes: " << box_count << LL_ENDL; // <FS:Ansariel> Performance tweak
|
||||
}
|
||||
|
||||
|
|
@ -10899,7 +10922,6 @@ void LLVOAvatar::idleUpdateRenderComplexity()
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -11068,8 +11090,15 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
|
|||
// <FS:Ansariel> Disable useless diagnostics
|
||||
//static std::set<LLUUID> all_textures;
|
||||
|
||||
if (mVisualComplexityStale)
|
||||
// <FS:Beq> remove the timer based complexity updates
|
||||
//bool needs_update = mVisualComplexityStale &&
|
||||
// (mVisualComplexity==VISUAL_COMPLEXITY_UNKNOWN ||
|
||||
// mVisualComplexityUpdateTimer.getElapsedTimeF32()>VISUAL_COMPLEXITY_UPDATE_SECONDS);
|
||||
bool needs_update = mVisualComplexityStale;
|
||||
|
||||
if (needs_update)
|
||||
{
|
||||
|
||||
// <FS:Ansariel> Show per-item complexity in COF
|
||||
std::map<LLUUID, U32> item_complexity;
|
||||
std::map<LLUUID, U32> temp_item_complexity;
|
||||
|
|
@ -11185,26 +11214,64 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
|
|||
//}
|
||||
// </FS:Ansariel>
|
||||
|
||||
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;
|
||||
bool cost_changed = false;
|
||||
if ( mVisualComplexity == VISUAL_COMPLEXITY_UNKNOWN)
|
||||
{
|
||||
LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
|
||||
<< " complexity initialized to " << cost
|
||||
<< " reported " << mReportedVisualComplexity
|
||||
<< LL_ENDL;
|
||||
cost_changed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( cost != mVisualComplexity )
|
||||
{
|
||||
// <FS:Beq> remove the threshold calcs
|
||||
// F32 top_val = (1.0f+VISUAL_COMPLEXITY_FRAC_CHANGE_THRESH)*mVisualComplexity;
|
||||
// F32 bottom_val = (1.0f/(1.0f+VISUAL_COMPLEXITY_FRAC_CHANGE_THRESH))*mVisualComplexity;
|
||||
// top_val = llmax(top_val, mVisualComplexity + VISUAL_COMPLEXITY_ABS_CHANGE_THRESH);
|
||||
// bottom_val = llmax(0.f, llmin(bottom_val, mVisualComplexity - VISUAL_COMPLEXITY_ABS_CHANGE_THRESH));
|
||||
|
||||
// if (isSelf() && cost > bottom_val && cost < top_val)
|
||||
// {
|
||||
// LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
|
||||
// << " self complexity change from " << mVisualComplexity << " to " << cost
|
||||
// << " is within range "
|
||||
// << "(" << bottom_val << "," << top_val << ")"
|
||||
// << ", not updated."
|
||||
// << " reported " << mReportedVisualComplexity
|
||||
// << LL_ENDL;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
|
||||
// << " complexity updated was " << mVisualComplexity << " now " << cost
|
||||
// << " reported " << mReportedVisualComplexity
|
||||
// << LL_ENDL;
|
||||
// cost_changed = true;
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
|
||||
// << " complexity updated no change " << mVisualComplexity
|
||||
// << " reported " << mReportedVisualComplexity
|
||||
// << LL_ENDL;
|
||||
cost_changed = true;
|
||||
}
|
||||
}
|
||||
if (cost_changed)
|
||||
{
|
||||
mVisualComplexity = cost;
|
||||
}
|
||||
mVisualComplexityStale = false;
|
||||
// </FS:Beq> Remove the timer for now.
|
||||
// mVisualComplexityUpdateTimer.reset();
|
||||
|
||||
static LLCachedControl<U32> show_my_complexity_changes(gSavedSettings, "ShowMyComplexityChanges", 20);
|
||||
|
||||
if (isSelf() && show_my_complexity_changes)
|
||||
if (isSelf() && cost_changed && show_my_complexity_changes)
|
||||
{
|
||||
// Avatar complexity
|
||||
LLAvatarRenderNotifier::getInstance()->updateNotificationAgent(mVisualComplexity);
|
||||
|
|
|
|||
|
|
@ -306,6 +306,7 @@ public:
|
|||
// </FS:Ansariel>
|
||||
void calculateUpdateRenderComplexity();
|
||||
static const U32 VISUAL_COMPLEXITY_UNKNOWN;
|
||||
static const F32 VISUAL_COMPLEXITY_UPDATE_SECONDS;
|
||||
void updateVisualComplexity();
|
||||
|
||||
U32 getVisualComplexity() { return mVisualComplexity; }; // Numbers calculated here by rendering AV
|
||||
|
|
@ -485,6 +486,7 @@ public:
|
|||
// the isTooComplex method uses these mutable values to avoid recalculating too frequently
|
||||
mutable U32 mVisualComplexity;
|
||||
mutable bool mVisualComplexityStale;
|
||||
mutable LLFrameTimer mVisualComplexityUpdateTimer;
|
||||
U32 mReportedVisualComplexity; // from other viewers through the simulator
|
||||
|
||||
bool mCachedInMuteList;
|
||||
|
|
|
|||
|
|
@ -3200,7 +3200,6 @@ void LLVOAvatarSelf::onCustomizeStart(bool disable_camera_switch)
|
|||
|
||||
gAgentAvatarp->mIsEditingAppearance = true;
|
||||
gAgentAvatarp->mUseLocalAppearance = true;
|
||||
|
||||
if (gSavedSettings.getBOOL("AppearanceCameraMovement") && !disable_camera_switch)
|
||||
{
|
||||
gAgentCamera.changeCameraToCustomizeAvatar();
|
||||
|
|
|
|||
|
|
@ -904,7 +904,7 @@ void LLVoiceClient::addObserver(LLVoiceClientStatusObserver* observer)
|
|||
|
||||
void LLVoiceClient::removeObserver(LLVoiceClientStatusObserver* observer)
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->removeObserver(observer);
|
||||
if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
|
||||
}
|
||||
|
||||
void LLVoiceClient::addObserver(LLFriendObserver* observer)
|
||||
|
|
@ -914,7 +914,7 @@ void LLVoiceClient::addObserver(LLFriendObserver* observer)
|
|||
|
||||
void LLVoiceClient::removeObserver(LLFriendObserver* observer)
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->removeObserver(observer);
|
||||
if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
|
||||
}
|
||||
|
||||
void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
|
||||
|
|
@ -924,7 +924,7 @@ void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
|
|||
|
||||
void LLVoiceClient::removeObserver(LLVoiceClientParticipantObserver* observer)
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->removeObserver(observer);
|
||||
if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
|
||||
}
|
||||
|
||||
std::string LLVoiceClient::sipURIFromID(const LLUUID &id)
|
||||
|
|
|
|||
|
|
@ -124,6 +124,8 @@ public:
|
|||
|
||||
virtual const LLVoiceVersionInfo& getVersion()=0;
|
||||
|
||||
virtual bool singletoneInstanceExists()=0;
|
||||
|
||||
/////////////////////
|
||||
/// @name Tuning
|
||||
//@{
|
||||
|
|
|
|||
|
|
@ -4884,6 +4884,11 @@ void LLVivoxVoiceClient::declineInvite(std::string &sessionHandle)
|
|||
}
|
||||
}
|
||||
|
||||
bool LLVivoxVoiceClient::singletoneInstanceExists()
|
||||
{
|
||||
return LLVivoxVoiceClient::instanceExists();
|
||||
}
|
||||
|
||||
void LLVivoxVoiceClient::leaveNonSpatialChannel()
|
||||
{
|
||||
LL_DEBUGS("Voice") << "Request to leave spacial channel." << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ public:
|
|||
|
||||
// Returns true if vivox has successfully logged in and is not in error state
|
||||
virtual bool isVoiceWorking() const;
|
||||
|
||||
virtual bool singletoneInstanceExists();
|
||||
|
||||
/////////////////////
|
||||
/// @name Tuning
|
||||
|
|
|
|||
|
|
@ -475,6 +475,11 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
{
|
||||
retval |= MEDIA_FLAGS_CHANGED;
|
||||
}
|
||||
if (result && getRootEdit()->isAttachment() && getAvatarAncestor()==gAgentAvatarp )
|
||||
{
|
||||
LL_INFOS("AvatarRender") << "Volume attached to self av has updated TE properties. ARC may change accordingly. Change flags "
|
||||
<< result << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -615,6 +620,11 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
{
|
||||
retval |= MEDIA_FLAGS_CHANGED;
|
||||
}
|
||||
if (result && getRootEdit()->isAttachment() && getAvatarAncestor()==gAgentAvatarp )
|
||||
{
|
||||
LL_INFOS("AvatarRender") << "Volume attached to self av has updated TE properties. ARC may change accordingly. Change flags "
|
||||
<< result << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1641,7 +1651,11 @@ BOOL LLVOVolume::updateLOD()
|
|||
|
||||
if (lod_changed)
|
||||
{
|
||||
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
//<FS:Beq> avoid unfortunate sleep during trylock by static check
|
||||
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
|
||||
if (debug_logging_on)
|
||||
//</FS:Beq>
|
||||
{
|
||||
if (isAnimatedObject() && isRiggedMesh())
|
||||
{
|
||||
|
|
@ -4615,8 +4629,12 @@ const LLMatrix4& LLVOVolume::getWorldMatrix(LLXformMatrix* xform) const
|
|||
|
||||
void LLVOVolume::markForUpdate(BOOL priority)
|
||||
{
|
||||
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
{
|
||||
//<FS:Beq> avoid unfortunate sleep during trylock by static check
|
||||
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
|
||||
if (debug_logging_on)
|
||||
//</FS:Beq>
|
||||
{
|
||||
if (isAnimatedObject() && isRiggedMesh())
|
||||
{
|
||||
std::string vobj_name = llformat("Vol%p", this);
|
||||
|
|
@ -4941,6 +4959,7 @@ static LLTrace::BlockTimerStatHandle FTM_RIGGED_OCTREE("Octree");
|
|||
|
||||
void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* volume)
|
||||
{
|
||||
|
||||
bool copy = false;
|
||||
if (volume->getNumVolumeFaces() != getNumVolumeFaces())
|
||||
{
|
||||
|
|
@ -4982,7 +5001,10 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
|
|||
|
||||
LLMatrix4a mat[kMaxJoints];
|
||||
U32 maxJoints = LLSkinningUtil::getMeshJointCount(skin);
|
||||
LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4*)mat, maxJoints, skin, avatar);
|
||||
//<FS:Beq> Skinning Matrix caching
|
||||
//LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4)mat, maxJoints, skin, avatar);
|
||||
LLSkinningUtil::initSkinningMatrixPalette(mat, maxJoints, skin, avatar);
|
||||
//</FS:Beq>
|
||||
|
||||
S32 rigged_vert_count = 0;
|
||||
S32 rigged_face_count = 0;
|
||||
|
|
@ -5594,7 +5616,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
vobj = bridge->mDrawable->getVObj();
|
||||
vol_obj = dynamic_cast<LLVOVolume*>(vobj);
|
||||
}
|
||||
if (vol_obj)
|
||||
// <FS:Beq> option to reduce the number of complexity updates
|
||||
// if (vol_obj)
|
||||
static LLCachedControl< bool >aggressiveComplexityUpdates(gSavedSettings, "FSEnableAggressiveComplexityUpdates", false);
|
||||
if (aggressiveComplexityUpdates && vol_obj)
|
||||
// </FS:Beq>
|
||||
{
|
||||
vol_obj->updateVisualComplexity();
|
||||
}
|
||||
|
|
@ -5672,7 +5698,10 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
continue;
|
||||
}
|
||||
|
||||
std::string vobj_name = llformat("Vol%p", vobj);
|
||||
//<FS:Beq> Stop doing stupid stuff we don;t need to.
|
||||
// Moving this inside a debug enabled check
|
||||
// std::string vobj_name = llformat("Vol%p", vobj);
|
||||
//</FS:Beq>
|
||||
|
||||
if (vobj->isMesh() &&
|
||||
((vobj->getVolume() && !vobj->getVolume()->isMeshAssetLoaded()) || !gMeshRepo.meshRezEnabled()))
|
||||
|
|
@ -5686,26 +5715,37 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
const LLVector3& scale = vobj->getScale();
|
||||
group->mSurfaceArea += volume->getSurfaceArea() * llmax(llmax(scale.mV[0], scale.mV[1]), scale.mV[2]);
|
||||
}
|
||||
|
||||
bool is_mesh = vobj->isMesh();
|
||||
F32 est_tris = vobj->getEstTrianglesMax();
|
||||
//<FS:Beq> Stop doing stupid stuff we don;t need on the critical path
|
||||
//bool is_mesh = vobj->isMesh();
|
||||
//F32 est_tris = vobj->getEstTrianglesMax();
|
||||
|
||||
vobj->updateControlAvatar();
|
||||
|
||||
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuilding, isAttachment: " << (U32) vobj->isAttachment()
|
||||
<< " is_mesh " << is_mesh
|
||||
<< " est_tris " << est_tris
|
||||
<< " is_animated " << vobj->isAnimatedObject()
|
||||
<< " can_animate " << vobj->canBeAnimatedObject()
|
||||
<< " cav " << vobj->getControlAvatar()
|
||||
<< " lod " << vobj->getLOD()
|
||||
<< " drawable rigged " << (drawablep->isState(LLDrawable::RIGGED))
|
||||
<< " drawable state " << drawablep->getState()
|
||||
<< " playing " << (U32) (vobj->getControlAvatar() ? vobj->getControlAvatar()->mPlaying : false)
|
||||
<< " frame " << LLFrameTimer::getFrameCount()
|
||||
<< LL_ENDL;
|
||||
// Also avoid unfortunate sleep during trylock by static check
|
||||
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
|
||||
if (debug_logging_on)
|
||||
//</FS:Beq>
|
||||
{
|
||||
std::string vobj_name = llformat("Vol%p", vobj);
|
||||
bool is_mesh = vobj->isMesh();
|
||||
F32 est_tris = vobj->getEstTrianglesMax();
|
||||
|
||||
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuilding, isAttachment: " << (U32) vobj->isAttachment()
|
||||
<< " is_mesh " << is_mesh
|
||||
<< " est_tris " << est_tris
|
||||
<< " is_animated " << vobj->isAnimatedObject()
|
||||
<< " can_animate " << vobj->canBeAnimatedObject()
|
||||
<< " cav " << vobj->getControlAvatar()
|
||||
<< " lod " << vobj->getLOD()
|
||||
<< " drawable rigged " << (drawablep->isState(LLDrawable::RIGGED))
|
||||
<< " drawable state " << drawablep->getState()
|
||||
<< " playing " << (U32) (vobj->getControlAvatar() ? vobj->getControlAvatar()->mPlaying : false)
|
||||
<< " frame " << LLFrameTimer::getFrameCount()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
//<FS:Beq> Pointless. We already checked this and have used it.
|
||||
//llassert_always(vobj);
|
||||
|
||||
llassert_always(vobj);
|
||||
|
||||
// <FS:AO> Z's protection auto-derender code
|
||||
if (enableVolumeSAPProtection())
|
||||
|
|
@ -6245,8 +6285,12 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
|
|||
if (drawablep && !drawablep->isDead() && drawablep->isState(LLDrawable::REBUILD_ALL) && !drawablep->isState(LLDrawable::RIGGED) )
|
||||
{
|
||||
LLVOVolume* vobj = drawablep->getVOVolume();
|
||||
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
{
|
||||
//<FS:Beq> avoid unfortunate sleep during trylock by static check
|
||||
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
|
||||
if (debug_logging_on)
|
||||
//</FS:Beq>
|
||||
{
|
||||
if (vobj->isAnimatedObject() && vobj->isRiggedMesh())
|
||||
{
|
||||
std::string vobj_name = llformat("Vol%p", vobj);
|
||||
|
|
|
|||
|
|
@ -544,7 +544,7 @@ void ParticleEditor::onInjectButtonClicked()
|
|||
if (categoryID.isNull())
|
||||
{
|
||||
std::string scriptFolderName = LLFolderType::lookup(LLFolderType::FT_LSL_TEXT);
|
||||
gInventory.findCategoryByName(scriptFolderName);
|
||||
categoryID = gInventory.findCategoryByName(scriptFolderName);
|
||||
}
|
||||
|
||||
// if still no valid folder found bail out and complain
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ bool LLPipeline::RenderDeferredSSAO;
|
|||
F32 LLPipeline::RenderShadowResolutionScale;
|
||||
bool LLPipeline::RenderLocalLights;
|
||||
bool LLPipeline::RenderDelayCreation;
|
||||
bool LLPipeline::RenderAnimateRes;
|
||||
//bool LLPipeline::RenderAnimateRes; <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
|
||||
bool LLPipeline::FreezeTime;
|
||||
S32 LLPipeline::DebugBeaconLineWidth;
|
||||
F32 LLPipeline::RenderHighlightBrightness;
|
||||
|
|
@ -627,7 +627,7 @@ void LLPipeline::init()
|
|||
connectRefreshCachedSettingsSafe("RenderShadowResolutionScale");
|
||||
connectRefreshCachedSettingsSafe("RenderLocalLights");
|
||||
connectRefreshCachedSettingsSafe("RenderDelayCreation");
|
||||
connectRefreshCachedSettingsSafe("RenderAnimateRes");
|
||||
// connectRefreshCachedSettingsSafe("RenderAnimateRes"); <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
|
||||
connectRefreshCachedSettingsSafe("FreezeTime");
|
||||
connectRefreshCachedSettingsSafe("DebugBeaconLineWidth");
|
||||
connectRefreshCachedSettingsSafe("RenderHighlightBrightness");
|
||||
|
|
@ -1209,7 +1209,7 @@ void LLPipeline::refreshCachedSettings()
|
|||
RenderShadowResolutionScale = gSavedSettings.getF32("RenderShadowResolutionScale");
|
||||
RenderLocalLights = gSavedSettings.getBOOL("RenderLocalLights");
|
||||
RenderDelayCreation = gSavedSettings.getBOOL("RenderDelayCreation");
|
||||
RenderAnimateRes = gSavedSettings.getBOOL("RenderAnimateRes");
|
||||
// RenderAnimateRes = gSavedSettings.getBOOL("RenderAnimateRes"); <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
|
||||
FreezeTime = gSavedSettings.getBOOL("FreezeTime");
|
||||
DebugBeaconLineWidth = gSavedSettings.getS32("DebugBeaconLineWidth");
|
||||
RenderHighlightBrightness = gSavedSettings.getF32("RenderHighlightBrightness");
|
||||
|
|
@ -2018,14 +2018,15 @@ void LLPipeline::createObject(LLViewerObject* vobj)
|
|||
|
||||
markRebuild(drawablep, LLDrawable::REBUILD_ALL, TRUE);
|
||||
|
||||
if (drawablep->getVOVolume() && RenderAnimateRes)
|
||||
{
|
||||
// fun animated res
|
||||
drawablep->updateXform(TRUE);
|
||||
drawablep->clearState(LLDrawable::MOVE_UNDAMPED);
|
||||
drawablep->setScale(LLVector3(0,0,0));
|
||||
drawablep->makeActive();
|
||||
}
|
||||
// <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
|
||||
//if (drawablep->getVOVolume() && RenderAnimateRes)
|
||||
//{
|
||||
// // fun animated res
|
||||
// drawablep->updateXform(TRUE);
|
||||
// drawablep->clearState(LLDrawable::MOVE_UNDAMPED);
|
||||
// drawablep->setScale(LLVector3(0,0,0));
|
||||
// drawablep->makeActive();
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -3483,8 +3484,12 @@ void LLPipeline::markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags f
|
|||
{
|
||||
if (drawablep && !drawablep->isDead() && assertInitialized())
|
||||
{
|
||||
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
{
|
||||
//<FS:Beq> avoid unfortunate sleep during trylock by static check
|
||||
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
|
||||
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
|
||||
if (debug_logging_on)
|
||||
//</FS:Beq>
|
||||
{
|
||||
LLVOVolume *vol_obj = drawablep->getVOVolume();
|
||||
if (vol_obj && vol_obj->isAnimatedObject() && vol_obj->isRiggedMesh())
|
||||
{
|
||||
|
|
@ -6721,7 +6726,7 @@ void LLPipeline::enableLightsPreview()
|
|||
light->enable();
|
||||
light->setPosition(light_pos);
|
||||
light->setDiffuse(diffuse0);
|
||||
light->setAmbient(LLColor4::black);
|
||||
light->setAmbient(ambient);
|
||||
light->setSpecular(specular0);
|
||||
light->setSpotExponent(0.f);
|
||||
light->setSpotCutoff(180.f);
|
||||
|
|
@ -6732,7 +6737,7 @@ void LLPipeline::enableLightsPreview()
|
|||
light->enable();
|
||||
light->setPosition(light_pos);
|
||||
light->setDiffuse(diffuse1);
|
||||
light->setAmbient(LLColor4::black);
|
||||
light->setAmbient(ambient);
|
||||
light->setSpecular(specular1);
|
||||
light->setSpotExponent(0.f);
|
||||
light->setSpotCutoff(180.f);
|
||||
|
|
@ -6742,7 +6747,7 @@ void LLPipeline::enableLightsPreview()
|
|||
light->enable();
|
||||
light->setPosition(light_pos);
|
||||
light->setDiffuse(diffuse2);
|
||||
light->setAmbient(LLColor4::black);
|
||||
light->setAmbient(ambient);
|
||||
light->setSpecular(specular2);
|
||||
light->setSpotExponent(0.f);
|
||||
light->setSpotCutoff(180.f);
|
||||
|
|
@ -8867,7 +8872,8 @@ void LLPipeline::renderDeferredLighting()
|
|||
}
|
||||
|
||||
const LLViewerObject *vobj = drawablep->getVObj();
|
||||
if(vobj && vobj->getAvatar() && vobj->getAvatar()->isInMuteList())
|
||||
if(vobj && vobj->getAvatar()
|
||||
&& (vobj->getAvatar()->isTooComplex() || vobj->getAvatar()->isInMuteList()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -902,7 +902,7 @@ public:
|
|||
static F32 RenderShadowResolutionScale;
|
||||
static bool RenderLocalLights;
|
||||
static bool RenderDelayCreation;
|
||||
static bool RenderAnimateRes;
|
||||
// static bool RenderAnimateRes; <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
|
||||
static bool FreezeTime;
|
||||
static S32 DebugBeaconLineWidth;
|
||||
static F32 RenderHighlightBrightness;
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
|
|
@ -23,7 +23,7 @@
|
|||
Name der Voreinstellung:
|
||||
</text>
|
||||
<text name="note">
|
||||
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
|
||||
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, erstellen Sie eine neue Voreinstellung. Die vorhandene Voreinstellung wird nicht geändert.
|
||||
</text>
|
||||
<tab_container name="WindLight Tabs">
|
||||
<panel label="ATMOSPHÄRE" name="Atmosphere">
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
0:00
|
||||
</text>
|
||||
<text name="WL6am">
|
||||
3:00
|
||||
6:00
|
||||
</text>
|
||||
<text name="WL12pmHash">
|
||||
12:00
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
Name der Voreinstellung:
|
||||
</text>
|
||||
<text name="note">
|
||||
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
|
||||
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, erstellen Sie eine neue Voreinstellung. Die vorhandene Voreinstellung wird nicht geändert.
|
||||
</text>
|
||||
<panel name="panel_water_preset">
|
||||
<text name="water_color_label">
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
Fehler: Fehler beim DAE-Parsen – Details siehe Protokoll.
|
||||
</string>
|
||||
<string name="status_bind_shape_orientation">
|
||||
Warnung: Bind-Shape-Matrix ist nicht in Standard-X-Forward-Orientierung.
|
||||
Warnung: Verbundform-Matrix befindet sich nicht in Standard-X-Vorwärtsrichtung.
|
||||
</string>
|
||||
<string name="status_material_mismatch">
|
||||
Fehler: Das Material des Modells ist keine Teilmenge des Referenzmodells.
|
||||
|
|
@ -62,7 +62,19 @@
|
|||
Detailstufenmaterial ist keine Teilmenge des Referenzmodells.
|
||||
</string>
|
||||
<string name="phys_status_vertex_limit_exceeded">
|
||||
Einige physische Hüllen überschreiten die Vertexbeschränkungen.
|
||||
Einige physische Hüllen überschreiten die Vertex-Limits (256). Probieren Sie andere Analyse-Methode.
|
||||
</string>
|
||||
<string name="phys_status_hull_limit_exceeded">
|
||||
Einige Modelle überschreiten das Hüllen-Limit (256). Probieren Sie Vereinfachen“.
|
||||
</string>
|
||||
<string name="phys_status_degenerate_triangles">
|
||||
Das Physik-Netz ist zu dicht - kleine dünne Dreiecke entfernen (siehe Vorschau)
|
||||
</string>
|
||||
<string name="phys_status_no_havok">
|
||||
Die OpenSim-Version unterstützt kein Hochladen von Physik in Second Life. Unvorhersehbare Ergebnisse möglich!
|
||||
</string>
|
||||
<string name="phys_status_unknown_error">
|
||||
Ein unbekannter Fehler ist aufgetreten.
|
||||
</string>
|
||||
<string name="layer_all">
|
||||
Alle
|
||||
|
|
@ -74,7 +86,7 @@
|
|||
Vereinfachung läuft...
|
||||
</string>
|
||||
<string name="tbd">
|
||||
noch nicht festgelegt
|
||||
folgt
|
||||
</string>
|
||||
<panel name="left_panel">
|
||||
<panel name="model_name_representation_panel">
|
||||
|
|
@ -193,7 +205,7 @@
|
|||
<panel label="Physik" name="physics_panel">
|
||||
<panel name="physics geometry">
|
||||
<text name="first_step_name">
|
||||
Schritt 1: Detailstufe
|
||||
Schritt 1: Physik-Modell wählen
|
||||
</text>
|
||||
<combo_box name="physics_lod_combo" tool_tip="Detailstufe für Physikform">
|
||||
<combo_item name="choose_one">
|
||||
|
|
@ -219,7 +231,7 @@
|
|||
</panel>
|
||||
<panel name="physics analysis">
|
||||
<text name="method_label">
|
||||
Schritt 2: Analysieren
|
||||
Schritt 2: Zu Hüllen konvertieren (optional)
|
||||
</text>
|
||||
<text name="analysis_method_label">
|
||||
Methode:
|
||||
|
|
@ -297,6 +309,14 @@
|
|||
Z-Offset (Avatar anheben oder senken):
|
||||
</text>
|
||||
<spinner name="pelvis_offset" value="0.0"/>
|
||||
<panel name="avatar_model_hint_panel">
|
||||
<text name="avatar_model_hint_text">
|
||||
Hinweis:
|
||||
Zu viele Objekte nutzen unnötigerweise den Standard-Anhängepunkt (Rechte Hand).
|
||||
|
||||
Bitte ziehen Sie einen anderen Anhängepunkt nahe der Objektposition in Betracht.
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<panel name="weights_and_warning_panel">
|
||||
|
|
@ -305,13 +325,13 @@
|
|||
<button label="Hochladen" name="ok_btn" tool_tip="Auf Simulator hochladen"/>
|
||||
<button label="Einstellungen löschen und Formular zurücksetzen" name="reset_btn" width="280"/>
|
||||
<text name="upload_fee">
|
||||
Gebühr für Hochladen: [FEE] L$
|
||||
Uploadkost.: [FEE] L$
|
||||
</text>
|
||||
<text name="prim_weight">
|
||||
Auswirkung auf Land: [EQ]
|
||||
Land-Impakt: [EQ]
|
||||
</text>
|
||||
<text name="download_weight">
|
||||
Herunterladen: [ST]
|
||||
Herunterl.: [ST]
|
||||
</text>
|
||||
<text name="physics_weight">
|
||||
Physik: [PH]
|
||||
|
|
@ -319,7 +339,72 @@
|
|||
<text name="server_weight">
|
||||
Server: [SIM]
|
||||
</text>
|
||||
<text name="warning_title">
|
||||
<panel name="price_breakdown_panel">
|
||||
<text name="price_breakdown_title">
|
||||
Kosten-Aufstellung
|
||||
</text>
|
||||
<text name="price_breakdown_labels">
|
||||
Download:
|
||||
Physik:
|
||||
Instanzen:
|
||||
Texturen:
|
||||
Model:
|
||||
</text>
|
||||
</panel>
|
||||
<!--
|
||||
<text name="streaming_breakdown_labels">
|
||||
Streaming/Download:
|
||||
Hoch:
|
||||
Mittel:
|
||||
Niedrig:
|
||||
Niedrigste:
|
||||
</text>
|
||||
-->
|
||||
<panel name="physics_breakdown_panel">
|
||||
<text name="physics_breakdown_title">
|
||||
Physik-Kosten
|
||||
</text>
|
||||
<text name="physics_breakdown_labels">
|
||||
Basis-Hülle:
|
||||
Mesh:
|
||||
Analysiert:
|
||||
</text>
|
||||
</panel>
|
||||
<panel name="preview_controls_panel">
|
||||
<panel name="preview_controls_inner_panel">
|
||||
<text name="preview_controls_title">
|
||||
Vorschau-Einstellungen:
|
||||
</text>
|
||||
<combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
|
||||
<combo_item name="high">
|
||||
Hoch
|
||||
</combo_item>
|
||||
<combo_item name="medium">
|
||||
Mittel
|
||||
</combo_item>
|
||||
<combo_item name="low">
|
||||
Niedrig
|
||||
</combo_item>
|
||||
<combo_item name="lowest">
|
||||
Niedrigste
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
</panel>
|
||||
<text name="label_display">
|
||||
Anzeige...
|
||||
</text>
|
||||
<check_box label="Kanten" name="show_edges"/>
|
||||
<check_box label="Texturen" name="show_textures"/>
|
||||
<check_box label="UV-Hilfe" name="show_uv_guide"/>
|
||||
<check_box label="Physik" name="show_physics"/>
|
||||
<check_box label="Skingew." name="show_skin_weight"/>
|
||||
<check_box label="Gelenke" name="show_joint_positions"/>
|
||||
<text name="exploder_label" width="105">
|
||||
Vorschaudehnung:
|
||||
</text>
|
||||
<slider name="physics_explode" width="80"/>
|
||||
</panel>
|
||||
<text name="warning_title" width="60">
|
||||
HINWEIS:
|
||||
</text>
|
||||
<text name="warning_message">
|
||||
|
|
@ -330,34 +415,11 @@
|
|||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="lod_label">
|
||||
Vorschau:
|
||||
</text>
|
||||
<panel name="right_panel">
|
||||
<combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
|
||||
<combo_item name="high">
|
||||
Hoch
|
||||
</combo_item>
|
||||
<combo_item name="medium">
|
||||
Mittel
|
||||
</combo_item>
|
||||
<combo_item name="low">
|
||||
Niedrig
|
||||
</combo_item>
|
||||
<combo_item name="lowest">
|
||||
Niedrigste
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<text name="label_display">
|
||||
Anzeige...
|
||||
</text>
|
||||
<check_box label="Kanten" name="show_edges"/>
|
||||
<check_box label="Physik" name="show_physics"/>
|
||||
<check_box label="Texturen" name="show_textures"/>
|
||||
<check_box label="Skingewichte" name="show_skin_weight"/>
|
||||
<check_box label="Gelenke" name="show_joint_positions"/>
|
||||
<text name="physics_explode_label">
|
||||
Vorschaudehnung:
|
||||
<text name="lod_label">
|
||||
Vorschau:
|
||||
</text>
|
||||
</panel>
|
||||
<panel name="lower_right_panel">
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@
|
|||
<text name="RenderingCost" tool_tip="Zeigt die errechneten Wiedergabekosten für dieses Objekt">
|
||||
þ: [COUNT]
|
||||
</text>
|
||||
<check_box name="checkbox uniform" label="Beide Seiten dehnen"/>
|
||||
<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/>
|
||||
<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid"/>
|
||||
<check_box initial_value="false" label="Achse an Wurzel edit." name="checkbox actual root"/>
|
||||
|
|
@ -470,7 +469,7 @@ Ndrg ↔ Nst
|
|||
<text name="edit_object">
|
||||
Objekteigenschaften bearbeiten:
|
||||
</text>
|
||||
<check_box label="Animiertes Mesh" name="Animated Mesh Checkbox Ctrl" tool_tip="Erlaubt geriggte Mesh-Objekte unabhängig zu animieren"/>
|
||||
<check_box label="Animiertes Netz" name="Animated Mesh Checkbox Ctrl" tool_tip="Ermöglicht die unabhängige Animation geriggter Netzobjekte"/>
|
||||
<check_box label="Flexibler Pfad" name="Flexible1D Checkbox Ctrl" tool_tip="Bewirkt, dass sich das Objekt um die Z-Achse biegen kann. (Nur Client-Seite)"/>
|
||||
<spinner label="Weichheit" name="FlexNumSections"/>
|
||||
<spinner label="Schwerkraft" name="FlexGravity"/>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
|
||||
<menu_item_check label="Nach Namen sortieren" name="sort_name"/>
|
||||
<menu_item_check label="Nach Nähe sortieren" name="sort_distance"/>
|
||||
<menu_item_check label="Nach letzter Ankunft sortieren" name="sort_arrival"/>
|
||||
<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
|
||||
<menu_item_check label="Karte anzeigen" name="view_map"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<menu_item_call label="Bezahlen" name="pay"/>
|
||||
<menu_item_call label="Teilen" name="share"/>
|
||||
<menu_item_call label="Anrufen" name="call"/>
|
||||
<menu_item_call label="Zu Kontakt-Set hinzufügen" name="add_to_contact_set"/>
|
||||
<menu_item_call label="Name kopieren" name="copy_name_to_clipboard"/>
|
||||
<menu_item_call label="URI kopieren" name="copy_uri_to_clipboard"/>
|
||||
<menu_item_call label="UUID kopieren" name="copy_key_to_clipboard"/>
|
||||
|
|
|
|||
|
|
@ -437,7 +437,7 @@
|
|||
<menu_item_check label="Texturbereich" name="Texture Area"/>
|
||||
<menu_item_check label="Oberflächenbereich" name="Face Area"/>
|
||||
<menu_item_check label="Detailstufeninfos" name="LOD Info"/>
|
||||
<menu_item_check label="Triangle-Zähler" name="Triangle Count"/>
|
||||
<menu_item_check label="Dreieckszähler" name="Triangle Count"/>
|
||||
<menu_item_check label="Konstruktionswarteschlange" name="Build Queue"/>
|
||||
<menu_item_check label="Lichter" name="Lights"/>
|
||||
<menu_item_check label="Partikel" name="Particles"/>
|
||||
|
|
@ -471,6 +471,7 @@
|
|||
<menu_item_check label="Automatische Alpha-Masken (nicht aufgeschoben)" name="Automatic Alpha Masks (non-deferred)"/>
|
||||
<menu_item_check label="Animationstexturen" name="Animation Textures"/>
|
||||
<menu_item_check label="Texturen deaktivieren" name="Disable Textures"/>
|
||||
<menu_item_call label="Animesh nicht anzeigen" name="Derender Animesh"/>
|
||||
<menu_item_check label="Texturen in Vollauflösung (gefährlich)" name="Full Res Textures"/>
|
||||
<menu_item_check label="Angehängte Lichter rendern" name="Render Attached Lights"/>
|
||||
<menu_item_check label="Angehängte Partikel rendern" name="Render Attached Particles"/>
|
||||
|
|
@ -564,7 +565,7 @@
|
|||
<menu_item_check label="Gelenkpunkte anzeigen" name="Show Collision Skeleton"/>
|
||||
<menu_item_check label="Knochen anzeigen" name="Show Bones"/>
|
||||
<menu_item_check label="Agent-Ziel anzeigen" name="Display Agent Target"/>
|
||||
<menu_item_check label="Impostor-Ausmaße anzeigen" name="Show Impostor Extents"/>
|
||||
<menu_item_check label="Umfang der vereinfachten Darstellung anzeigen" name="Show Impostor Extents"/>
|
||||
<menu_item_call label="Anhänge ausgeben" name="Dump Attachments"/>
|
||||
<menu_item_call label="Avatar-Texturen debuggen" name="Debug Avatar Textures"/>
|
||||
<menu_item_call label="Lokale Texturen ausgeben" name="Dump Local Textures"/>
|
||||
|
|
|
|||
|
|
@ -3430,7 +3430,7 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
|
|||
Fehler beim Speichern der Voreinstellung [NAME].
|
||||
</notification>
|
||||
<notification name="DefaultPresetNotSaved">
|
||||
Standard-Voreinstellung kann nicht überschrieben werden.
|
||||
Die Standard-Voreinstellung kann nicht überschrieben werden.
|
||||
</notification>
|
||||
<notification name="PresetNotDeleted">
|
||||
Fehler beim Löschen der Voreinstellung [NAME].
|
||||
|
|
@ -4216,7 +4216,7 @@ Sie ist voll oder startet in Kürze neu.
|
|||
Angefordertes Objekt kann nicht erstellt werden. Die Region ist voll.
|
||||
</notification>
|
||||
<notification name="CantCreateAnimatedObjectTooLarge">
|
||||
Angefordertes animiertes Objekt kann nicht erstellt werden, da es das Limit für geriggte Dreiecke übersteigt.
|
||||
Das gewünschte animierte Objekt kann nicht erstellt werden, da es das Limit für geriggte Dreiecke überschreitet.
|
||||
</notification>
|
||||
<notification name="CantAttackMultipleObjOneSpot">
|
||||
Sie können nicht mehrere Objekte an ein und derselben Stelle anhängen.
|
||||
|
|
@ -4267,19 +4267,19 @@ Sie ist voll oder startet in Kürze neu.
|
|||
Sie können diese Form nicht ändern.
|
||||
</notification>
|
||||
<notification name="NoPermsTooManyAttachedAnimatedObjects">
|
||||
Durch diese Aktion würde die Anzahl an animierten Objekten das Limit überschreiten.
|
||||
Durch den Vorgang würde die Anzahl der angehängten animierten Objekte das zulässige Limit überschreiten.
|
||||
</notification>
|
||||
<notification name="NoPermsLinkAnimatedObjectTooLarge">
|
||||
Objekte können nicht verknüpft werden, da das resultierende animierte Objekt das Limit für geriggte Dreiecke überschreiten würde.
|
||||
Diese Objekte können nicht verknüpft werden, da das hieraus resultierende animierte Objekt das Limit für geriggte Dreiecke überschreiten würde.
|
||||
</notification>
|
||||
<notification name="NoPermsSetFlagAnimatedObjectTooLarge">
|
||||
Objekt kann nicht in ein animiertes Objekt geändert werden, da es das Limit für geriggte Dreiecke überschreiten würde.
|
||||
Dieses Objekt kann nicht in ein animiertes Objekt umgewandelt werden, da es das Limit für geriggte Dreiecke überschreiten würde.
|
||||
</notification>
|
||||
<notification name="CantChangeAnimatedObjectStateInsufficientLand">
|
||||
Zustand für animiertes Objekt kann nicht geändert werden, da es das Parzellen-Limit überschreiten würde.
|
||||
Der Status der animierten Objekte für dieses Objekt kann nicht geändert werden, da hierdurch die Parzellenlimits überschritten würden.
|
||||
</notification>
|
||||
<notification name="ErrorNoMeshData">
|
||||
Server-Fehler: Aktionen kann nicht abgeschlossen werden, da die Mesh-Daten nicht gelanden sind.
|
||||
Serverfehler: Dieser Vorgang kann nicht abgeschlossen werden, da die Netzdaten nicht geladen sind.
|
||||
</notification>
|
||||
<notification name="NoAccessToClaimObjects">
|
||||
Ihr Zugangsberechtigungen gestatten nicht das Beanspruchen von Objekten an dieser Stelle.
|
||||
|
|
|
|||
|
|
@ -252,6 +252,7 @@
|
|||
<check_box label="Vom Inventar aus bearbeitete Skripte als Mono speichern" tool_tip="Speichert Skripte, die direkt vom Inventar aus bearbeitet werden, als Mono anstatt LSL." name="FSSaveInventoryScriptsAsMono_toggle"/>
|
||||
<check_box label="Texturen standardmäßig im PNG-Format anstelle von TGA speichern" tool_tip="Falls aktiviert, werden Texturen in der Vorschau standardmäßig im PNG-Format gespeichert" name="FSTextureDefaultSaveAsFormat"/>
|
||||
<check_box label="Vorschau von Animation beim Upload am eigenen Avatar" tool_tip="Falls aktiviert, werden Animationen in der Vorschau am eigenen Avatar abgespielt" name="FSUploadAnimationOnOwnAvatar"/>
|
||||
<check_box label="Erweiterte Skript-Informationen aktivieren" tool_tip="Falls aktiviert, werden die Skript-Informationen um weitergehende Details ergänzt." name="FSScriptInfoExtended"/>
|
||||
</panel>
|
||||
|
||||
<!--Uploads-->
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<panel label="Umgebung" name="panel_env_info">
|
||||
<text name="water_settings_title">
|
||||
Wählen Sie die Wasser- und Himmel-/Tageszykluseinstellungen aus, die alle Besucher Ihrer Region sehen sollen. Mehr Infos
|
||||
Wählen Sie die Wasser- und Himmel-/Tageszykluseinstellungen aus, die alle Besucher Ihrer Region sehen sollen. Mehr Infos
|
||||
</text>
|
||||
<radio_group name="region_settings_radio_group">
|
||||
<radio_item label="Second Life-Standard verwenden" name="use_sl_default_settings"/>
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
<combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
|
||||
</combo_box>
|
||||
<text name="sky_dayc_settings_title">
|
||||
Himmel / Tageszyklus
|
||||
Himmel/Tageszyklus
|
||||
</text>
|
||||
<radio_group name="sky_dayc_settings_radio_group">
|
||||
<radio_item label="Fester Himmel" name="my_sky_settings"/>
|
||||
|
|
|
|||
|
|
@ -5829,6 +5829,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="Command_RFO_Label">
|
||||
Nur Freunde anzeigen
|
||||
</string>
|
||||
<string name="Command_DAO_Label">
|
||||
Animesh nicht anzeigen
|
||||
</string>
|
||||
<string name="Command_Beacons_Label">
|
||||
Ortungssignale
|
||||
</string>
|
||||
|
|
@ -6015,6 +6018,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="Command_RFO_Tooltip">
|
||||
Nur Freunde im Viewer darstellen. Nach Deaktivierung ist ein Teleport erforderlich, um andere Avatare wieder darzustellen.
|
||||
</string>
|
||||
<string name="Command_DAO_Tooltip">
|
||||
Animesh-Objekte nicht darstellen - Stellt Animesh-Objekte temporär nicht dar. Nach Deaktivierung ist ein Teleport erforderlich, um entsprechende Objekte wieder darzustellen.
|
||||
</string>
|
||||
<string name="Command_Beacons_Tooltip">
|
||||
Ortungssignale anzeigen
|
||||
</string>
|
||||
|
|
@ -6517,6 +6523,28 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="fsbridge_script_info_pf">
|
||||
Durchschnittlich beanspruchte CPU-Zeit für Pathfinding-Navigation: [OBJECT_CHARACTER_TIME] ms.
|
||||
</string>
|
||||
<string name="fsbridge_script_info_ext">
|
||||
Objekt-ID: [INSPECTING_KEY]
|
||||
Beschreibung: [OBJECT_DESC]
|
||||
Wurzel-Prim: [OBJECT_ROOT]
|
||||
Primanzahl: [OBJECT_PRIM_COUNT]
|
||||
Auswirkung auf Land: [OBJECT_PRIM_EQUIVALENCE]
|
||||
Inventar-Objekte: [OBJECT_TOTAL_INVENTORY_COUNT]
|
||||
Geschwindigkeit: [OBJECT_VELOCITY]
|
||||
Position: [OBJECT_POS]
|
||||
Rotation: [OBJECT_ROT]
|
||||
Winkelgeschwindigkeit: [OBJECT_OMEGA] (Rad pro Sekunde)
|
||||
Ersteller: [OBJECT_CREATOR]
|
||||
Besitzer: [OBJECT_OWNER]
|
||||
Vorheriger Besitzer: [OBJECT_LAST_OWNER_ID]
|
||||
Gerezt von: [OBJECT_REZZER_KEY]
|
||||
Gruppe: [OBJECT_GROUP]
|
||||
Erstellungszeit: [OBJECT_CREATION_TIME]
|
||||
Pathfinding-Typ: [OBJECT_PATHFINDING_TYPE]
|
||||
Angehängt an: [OBJECT_ATTACHED_POINT]
|
||||
Temporär angehängt: [OBJECT_TEMP_ATTACHED]
|
||||
Ihre aktuelle Position: [AVATAR_POS]
|
||||
</string>
|
||||
<string name="fsbridge_error_scriptinfonotfound">
|
||||
Skript-Info: Zu prüfendes Objekt ungültig oder außer Reichweite.
|
||||
</string>
|
||||
|
|
@ -6666,6 +6694,12 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="fs_preprocessor_error">
|
||||
[ERR_NAME] ([LINENUMBER]): Unerwarteter Ausnahmefehler aufgetreten.
|
||||
</string>
|
||||
<string name="fs_preprocessor_lsl2_directive_override">
|
||||
Erkannte LSL2-Kompilierungsdirektive übersteuert Voreinstellung.
|
||||
</string>
|
||||
<string name="fs_preprocessor_mono_directive_override">
|
||||
Erkannte Mono-Kompilierungsdirektive übersteuert Voreinstellung.
|
||||
</string>
|
||||
<!-- LSL Optimizer -->
|
||||
<string name="fs_preprocessor_optimizer_start">
|
||||
Entfernung von nicht-referenzierten benutzerdefinierten Funktionen und globalen Variablen.
|
||||
|
|
@ -6870,4 +6904,10 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
|
||||
[ASSET_NAME]
|
||||
</string>
|
||||
<string name="Yes">
|
||||
Ja
|
||||
</string>
|
||||
<string name="No">
|
||||
Nein
|
||||
</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -2,12 +2,13 @@
|
|||
<floater
|
||||
can_close="true"
|
||||
can_drag_on_left="false"
|
||||
can_minimize="false"
|
||||
can_resize="false"
|
||||
height="480"
|
||||
min_height="480"
|
||||
width="980"
|
||||
min_width="980"
|
||||
can_minimize="true"
|
||||
can_resize="true"
|
||||
height="585"
|
||||
min_height="585"
|
||||
width="1024"
|
||||
top="0"
|
||||
min_width="1024"
|
||||
name="Model Preview"
|
||||
title="Upload Model"
|
||||
help_topic="upload_model">
|
||||
|
|
@ -33,20 +34,24 @@
|
|||
<string name="mesh_status_too_many_vertices">Level of detail has too many vertices.</string>
|
||||
<string name="mesh_status_missing_lod">Missing required level of detail.</string>
|
||||
<string name="mesh_status_invalid_material_list">LOD materials are not a subset of reference model.</string>
|
||||
<string name="phys_status_vertex_limit_exceeded">Some physical hulls exceed vertex limitations.</string>
|
||||
<string name="phys_status_vertex_limit_exceeded">Some physical hulls exceed the vertex limit (256); try an alternative 'Analyze Method'.</string>
|
||||
<string name="phys_status_hull_limit_exceeded">Some models exceed the hull limit (256); try 'simplify'.</string>
|
||||
<string name="phys_status_degenerate_triangles">Physics mesh too dense; remove the small, thin triangles (see preview).</string>
|
||||
<string name="phys_status_no_havok">The OpenSim version is not recommended for physics upload in SL. Results may be unpredictable.</string>
|
||||
<string name="phys_status_unknown_error">An unrecognized error was detected.</string>
|
||||
<string name="layer_all">All</string> <!-- Text to display in physics layer combo box for "all layers" -->
|
||||
<string name="decomposing">Analyzing...</string>
|
||||
<string name="simplifying">Simplifying...</string>
|
||||
<string name="tbd">TBD</string>
|
||||
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="455"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="left_panel"
|
||||
top_pad="10"
|
||||
width="630">
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="570"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="left_panel"
|
||||
top_pad="0"
|
||||
width="630">
|
||||
<panel
|
||||
follows="all"
|
||||
height="50"
|
||||
|
|
@ -785,8 +790,9 @@
|
|||
name="first_step_name"
|
||||
text_color="White"
|
||||
top_pad="0"
|
||||
width="210">
|
||||
Step 1: Level of Detail
|
||||
width="210"
|
||||
valign="center">
|
||||
Step 1: Pick a physics model
|
||||
</text>
|
||||
<combo_box
|
||||
follows="left|top"
|
||||
|
|
@ -828,7 +834,7 @@
|
|||
layout="topleft"
|
||||
left="18"
|
||||
name="physics_tab_border"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="589"/>
|
||||
<panel
|
||||
bg_alpha_color="0 0 0 0"
|
||||
|
|
@ -837,7 +843,7 @@
|
|||
follows="top|left"
|
||||
left="18"
|
||||
name="physics analysis"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
visible="true"
|
||||
width="589">
|
||||
<text
|
||||
|
|
@ -849,7 +855,7 @@
|
|||
name="method_label"
|
||||
text_color="White"
|
||||
top_pad="0">
|
||||
Step 2: Analyze
|
||||
Step 2: Convert to hulls (optional)
|
||||
</text>
|
||||
<text
|
||||
follows="top|left"
|
||||
|
|
@ -935,7 +941,7 @@
|
|||
layout="topleft"
|
||||
left="18"
|
||||
name="physics_tab_border"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="589"/>
|
||||
<panel
|
||||
bg_alpha_color="0 0 0 0"
|
||||
|
|
@ -944,7 +950,7 @@
|
|||
height="66"
|
||||
left="18"
|
||||
name="physics simplification"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="589">
|
||||
<text
|
||||
text_color="White"
|
||||
|
|
@ -1043,7 +1049,7 @@
|
|||
layout="topleft"
|
||||
left="18"
|
||||
name="physics_tab_border"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="589"/>
|
||||
<panel
|
||||
bg_alpha_color="0 0 0 0"
|
||||
|
|
@ -1105,10 +1111,9 @@
|
|||
follows="left|top"
|
||||
height="19"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
top_delta="0"
|
||||
top_pad="5"
|
||||
name="physics message"
|
||||
width="270">
|
||||
width="589">
|
||||
<icon
|
||||
follows="left|top"
|
||||
height="16"
|
||||
|
|
@ -1123,7 +1128,7 @@
|
|||
layout="topleft"
|
||||
left_pad="2"
|
||||
name="physics_status_message_text"
|
||||
width="252"
|
||||
width="573"
|
||||
top_delta="3"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -1184,7 +1189,6 @@
|
|||
follows="top|left"
|
||||
name="upload_textures"
|
||||
label="Include textures"
|
||||
label_text.text_color="White"
|
||||
left="20"
|
||||
top_pad="20"/>
|
||||
<view_border
|
||||
|
|
@ -1209,21 +1213,18 @@
|
|||
follows="top|left"
|
||||
height="15"
|
||||
label="Include skin weight"
|
||||
label_text.text_color="White"
|
||||
name="upload_skin"
|
||||
top_pad="15"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Include joint positions"
|
||||
label_text.text_color="White"
|
||||
name="upload_joints"
|
||||
top_pad="15"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Lock scale if joint position defined"
|
||||
label_text.text_color="White"
|
||||
name="lock_scale_if_joint_position"
|
||||
top_pad="15"/>
|
||||
<text
|
||||
|
|
@ -1246,16 +1247,41 @@
|
|||
top_pad="10"
|
||||
value="0.0"
|
||||
width="80"/>
|
||||
<panel
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
border="true"
|
||||
left="400"
|
||||
height="165"
|
||||
top="100"
|
||||
width="200"
|
||||
name="avatar_model_hint_panel"
|
||||
>
|
||||
<text
|
||||
left="5"
|
||||
width="190"
|
||||
height="165"
|
||||
name="avatar_model_hint_text"
|
||||
wrap="true"
|
||||
word_wrap="true"
|
||||
type="string">
|
||||
Tip:
|
||||
Too many items use the default (right hand) unnecessarily.
|
||||
|
||||
Please consider using an attachment point close to the item's position on the body.
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="80"
|
||||
layout="top|left"
|
||||
left="0"
|
||||
follows="top|left|bottom"
|
||||
layout="topleft"
|
||||
height="184"
|
||||
left="4"
|
||||
border="true"
|
||||
name="weights_and_warning_panel"
|
||||
top_pad="3"
|
||||
width="625">
|
||||
width="629">
|
||||
<button
|
||||
follows="top|left"
|
||||
label="Calculate weights & fee"
|
||||
|
|
@ -1295,10 +1321,10 @@
|
|||
label_color="White"
|
||||
layout="topleft"
|
||||
name="reset_btn"
|
||||
right="-2"
|
||||
right="-5"
|
||||
top="3"
|
||||
height="20"
|
||||
width="275"/>
|
||||
width="265"/>
|
||||
<!-- ========== WEIGHTS ==========-->
|
||||
<text
|
||||
follows="top|left"
|
||||
|
|
@ -1317,7 +1343,7 @@
|
|||
left_pad="0"
|
||||
name="prim_weight"
|
||||
top_delta="0"
|
||||
width="120"
|
||||
width="130"
|
||||
word_wrap="true">
|
||||
Land impact: [EQ]
|
||||
</text>
|
||||
|
|
@ -1327,7 +1353,7 @@
|
|||
left_pad="0"
|
||||
name="download_weight"
|
||||
top_delta="0"
|
||||
width="100"
|
||||
width="130"
|
||||
word_wrap="true">
|
||||
Download: [ST]
|
||||
</text>
|
||||
|
|
@ -1337,7 +1363,7 @@
|
|||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="physics_weight"
|
||||
width="90"
|
||||
width="130"
|
||||
word_wrap="true">
|
||||
Physics: [PH]
|
||||
</text>
|
||||
|
|
@ -1347,17 +1373,257 @@
|
|||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="server_weight"
|
||||
width="83"
|
||||
width="130"
|
||||
word_wrap="true">
|
||||
Server: [SIM]
|
||||
</text>
|
||||
<!-- ========== NOTE MESSAGE ========== -->
|
||||
<!-- =========== Cost breakdown ======== -->
|
||||
<panel
|
||||
border="true"
|
||||
top_pad="5"
|
||||
layout="topleft"
|
||||
left="6"
|
||||
name="price_breakdown_panel"
|
||||
width="120"
|
||||
height="100">
|
||||
<text
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="price_breakdown_title">
|
||||
Price Breakdown
|
||||
</text>
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="price_breakdown_border"
|
||||
top_pad="5"
|
||||
width="110"/>
|
||||
<text
|
||||
height="80"
|
||||
top_pad="5"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="price_breakdown_labels"
|
||||
width="70"
|
||||
word_wrap="false">
|
||||
Download:
|
||||
Physics:
|
||||
Instances:
|
||||
Textures:
|
||||
Model:
|
||||
</text>
|
||||
<text
|
||||
height="80"
|
||||
top_delta="0"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
left_pad="0"
|
||||
name="price_breakdown"
|
||||
width="40"
|
||||
word_wrap="false">
|
||||
[STREAMING]
|
||||
[PHYSICS]
|
||||
[INSTANCES]
|
||||
[TEXTURES]
|
||||
[MODEL]
|
||||
</text>
|
||||
</panel>
|
||||
<!--
|
||||
Streaming breakdown numbers are available but not fully understood
|
||||
uncommenting the following sections will display the numbers for debugging purposes
|
||||
<text
|
||||
height="80"
|
||||
top_delta="0"
|
||||
layout="topleft"
|
||||
left="130"
|
||||
name="streaming_breakdown_labels"
|
||||
width="65"
|
||||
word_wrap="true">
|
||||
Streaming/Download:
|
||||
High:
|
||||
Medium:
|
||||
Low:
|
||||
Lowest:
|
||||
</text>
|
||||
<text
|
||||
height="80"
|
||||
top_delta="0"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="streaming_breakdown"
|
||||
width="95"
|
||||
word_wrap="true">
|
||||
[STR_TOTAL]
|
||||
[STR_HIGH]
|
||||
[STR_MED]
|
||||
[STR_LOW]
|
||||
[STR_LOWEST]
|
||||
</text>-->
|
||||
<panel
|
||||
border="true"
|
||||
layout="topleft"
|
||||
left_pad="15"
|
||||
name="physics_breakdown_panel"
|
||||
width="120"
|
||||
height="100">
|
||||
<text
|
||||
layout="topleft"
|
||||
name="physics_breakdown_title"
|
||||
left="3">
|
||||
Physics Costs
|
||||
</text>
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="physics_breakdown_border"
|
||||
top_pad="5"
|
||||
width="110"/>
|
||||
<text
|
||||
height="80"
|
||||
top_pad="5"
|
||||
layout="topleft"
|
||||
left="5"
|
||||
name="physics_breakdown_labels"
|
||||
width="65">
|
||||
Base Hull:
|
||||
Mesh:
|
||||
Analysed:
|
||||
</text>
|
||||
<text
|
||||
height="80"
|
||||
top_delta="0"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="physics_breakdown"
|
||||
width="40"
|
||||
halign="right"
|
||||
word_wrap="false"
|
||||
visible="true">
|
||||
[PCH]
|
||||
[PM]
|
||||
[PHU]
|
||||
</text>-->
|
||||
</panel>
|
||||
<panel
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
left_pad="100"
|
||||
height="100"
|
||||
border="true"
|
||||
name="preview_controls_panel"
|
||||
width="260">
|
||||
<panel
|
||||
name="preview_controls_inner_panel"
|
||||
height="18" >
|
||||
<text
|
||||
height="18"
|
||||
layout="topleft"
|
||||
name="preview_controls_title"
|
||||
left="3"
|
||||
width="150">
|
||||
Preview controls
|
||||
</text>
|
||||
<combo_box
|
||||
can_resize="false"
|
||||
follows="top|left"
|
||||
left="-85"
|
||||
top_delta="-2"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
name="preview_lod_combo"
|
||||
width="80"
|
||||
tool_tip="LOD to view in preview render">
|
||||
<combo_item name="high"> High </combo_item>
|
||||
<combo_item name="medium"> Medium </combo_item>
|
||||
<combo_item name="low"> Low </combo_item>
|
||||
<combo_item name="lowest"> Lowest </combo_item>
|
||||
</combo_box>
|
||||
</panel>
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="preview_controls_border"
|
||||
top_pad="5"
|
||||
halign="center"
|
||||
width="250"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Edges"
|
||||
layout="topleft"
|
||||
name="show_edges"
|
||||
width="70"
|
||||
left="0"
|
||||
top_pad="10"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Textures"
|
||||
layout="topleft"
|
||||
name="show_textures"
|
||||
left_pad="0"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="UV guide"
|
||||
layout="topleft"
|
||||
name="show_uv_guide"
|
||||
left_pad="0"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
top_pad="10"
|
||||
left="0"
|
||||
width="70"
|
||||
label="Physics"
|
||||
name="show_physics"/>
|
||||
<text
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
left_pad="2"
|
||||
height="16"
|
||||
width="80"
|
||||
name="exploder_label">
|
||||
Explode hulls
|
||||
</text>
|
||||
<slider
|
||||
name="physics_explode"
|
||||
show_text="false"
|
||||
top_delta="1"
|
||||
follows="top|left"
|
||||
valign="center"
|
||||
left_pad="2"
|
||||
min_val="0.0"
|
||||
max_val="3.0"
|
||||
width="100"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
top_pad="15"
|
||||
label="Weights"
|
||||
layout="topleft"
|
||||
width="70"
|
||||
name="show_skin_weight"
|
||||
left="0"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Joints"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
name="show_joint_positions"
|
||||
left_pad="0"/>
|
||||
</panel>
|
||||
<!-- ========== NOTE MESSAGE ========== -->
|
||||
<text
|
||||
font="SansSerif"
|
||||
layout="topleft"
|
||||
left="6"
|
||||
name="warning_title"
|
||||
top_pad="10"
|
||||
top_pad="5"
|
||||
text_color="DrYellow"
|
||||
visible="false"
|
||||
width="40">
|
||||
|
|
@ -1370,125 +1636,46 @@
|
|||
left_pad="1"
|
||||
name="warning_message"
|
||||
parse_urls="true"
|
||||
top_delta="2"
|
||||
top_delta="0"
|
||||
wrap="true"
|
||||
width="462"
|
||||
visible="false">
|
||||
You dont have rights to upload mesh models. [[VURL] Find out how] to get certified.
|
||||
</text>
|
||||
<text text_color="Yellow" layout="topleft" top_delta="20" left="6" name="status">[STATUS]</text>
|
||||
|
||||
<text text_color="Yellow" layout="topleft" top_delta="5" left="6" name="status">
|
||||
[STATUS]
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="640"
|
||||
name="lod_label"
|
||||
text_color="White"
|
||||
top="13"
|
||||
height="15"
|
||||
width="290">
|
||||
Preview:
|
||||
</text>
|
||||
<panel
|
||||
border="true"
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
name="preview_panel"
|
||||
top_pad="4"
|
||||
width="290"
|
||||
height="290"/>
|
||||
|
||||
<panel
|
||||
follows="all"
|
||||
height="130"
|
||||
layout="topleft"
|
||||
name="right_panel"
|
||||
top_pad="5"
|
||||
width="340">
|
||||
<combo_box
|
||||
top_pad="3"
|
||||
</panel>
|
||||
<panel
|
||||
follows="top|left|bottom|right"
|
||||
can_resize="true"
|
||||
name="right_panel"
|
||||
top="0"
|
||||
left="640"
|
||||
background_visible="true"
|
||||
width="375"
|
||||
height="570">
|
||||
<!--<text
|
||||
follows="left|top"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
name="preview_lod_combo"
|
||||
width="150"
|
||||
tool_tip="LOD to view in preview render">
|
||||
<combo_item name="high"> High </combo_item>
|
||||
<combo_item name="medium"> Medium </combo_item>
|
||||
<combo_item name="low"> Low </combo_item>
|
||||
<combo_item name="lowest"> Lowest </combo_item>
|
||||
</combo_box>
|
||||
<text
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
text_color="White"
|
||||
top="5"
|
||||
left_pad="20"
|
||||
name="label_display"
|
||||
width="50">
|
||||
Display...
|
||||
</text>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Edges"
|
||||
label_text.text_color="White"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="show_edges"
|
||||
top_pad="8">
|
||||
</check_box>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Physics"
|
||||
label_text.text_color="White"
|
||||
layout="topleft"
|
||||
name="show_physics"
|
||||
top_pad="8">
|
||||
</check_box>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Textures"
|
||||
label_text.text_color="White"
|
||||
layout="topleft"
|
||||
name="show_textures"
|
||||
top_pad="8">
|
||||
</check_box>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Skin weights"
|
||||
label_text.text_color="White"
|
||||
layout="topleft"
|
||||
name="show_skin_weight"
|
||||
top_pad="8">
|
||||
</check_box>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Joints"
|
||||
label_text.text_color="White"
|
||||
layout="topleft"
|
||||
name="show_joint_positions"
|
||||
top_pad="8">
|
||||
</check_box>
|
||||
<text
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
left="2"
|
||||
name="physics_explode_label"
|
||||
top="85"
|
||||
width="150">
|
||||
Preview Spread:
|
||||
</text>
|
||||
<slider
|
||||
name="physics_explode"
|
||||
follows="top|left"
|
||||
top="100"
|
||||
left="0"
|
||||
min_val="0.0"
|
||||
max_val="3.0"
|
||||
height="20"
|
||||
width="150"/>
|
||||
</panel>
|
||||
name="lod_label"
|
||||
text_color="White"
|
||||
top="13"
|
||||
height="15"
|
||||
width="290">
|
||||
Preview:
|
||||
</text>-->
|
||||
|
||||
</panel>
|
||||
<panel
|
||||
border="true"
|
||||
bevel_style="none"
|
||||
follows="top|left|right|bottom"
|
||||
layout="topleft"
|
||||
name="preview_panel"
|
||||
top="5"
|
||||
width="375"
|
||||
/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@
|
|||
layout="topleft"
|
||||
left="484"
|
||||
name="Continue"
|
||||
top_delta="35"
|
||||
top_delta="45"
|
||||
width="100" />
|
||||
<button
|
||||
height="20"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
save_rect="true"
|
||||
single_instance="true"
|
||||
title="Toolbar Buttons"
|
||||
width="900">
|
||||
width="925">
|
||||
<text
|
||||
follows="left|top"
|
||||
font="SansSerifMedium"
|
||||
|
|
|
|||
|
|
@ -53,6 +53,13 @@
|
|||
<menu_item_call.on_visible
|
||||
function="Profile.EnableUnblock" />
|
||||
</menu_item_call>-->
|
||||
<menu_item_call
|
||||
label="Add to Contact Set"
|
||||
layout="topleft"
|
||||
name="add_to_contact_set">
|
||||
<menu_item_call.on_click
|
||||
function="Profile.AddToContactSet" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Copy Name"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -4064,7 +4064,13 @@
|
|||
function="ToggleControl"
|
||||
parameter="TextureDisable" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
<menu_item_call
|
||||
label="Derender all animesh"
|
||||
name="Derender Animesh">
|
||||
<menu_item_call.on_click
|
||||
function="Tools.DerenderAnimatedObjects" />
|
||||
</menu_item_call>
|
||||
<menu_item_check
|
||||
label="Full Res Textures (dangerous)"
|
||||
name="Full Res Textures">
|
||||
<menu_item_check.on_check
|
||||
|
|
|
|||
|
|
@ -615,6 +615,16 @@ Save all changes to clothing/body parts?
|
|||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="AllowMultipleViewers"
|
||||
type="alertmodal">
|
||||
Running multiple Second Life viewers is not supported. It can lead to texture cache collisions, corruption and degraded visuals and performance.
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="GrantModifyRights"
|
||||
|
|
|
|||
|
|
@ -13,36 +13,39 @@
|
|||
<string
|
||||
name="message_max_lines_count"
|
||||
value="30" />
|
||||
<!-- THIS PANEL CONTROLS TOAST HEIGHT? -->
|
||||
<panel
|
||||
bevel_style="none"
|
||||
follows="all"
|
||||
height="120"
|
||||
label="info_panel"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="info_panel"
|
||||
top="0"
|
||||
width="305">
|
||||
<text
|
||||
bg_readonly_color="ScriptDialog"
|
||||
border_visible="false"
|
||||
follows="all"
|
||||
font="SansSerif"
|
||||
height="110"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
mouse_opaque="false"
|
||||
name="text_editor_box"
|
||||
read_only="true"
|
||||
text_color="ScriptDialogFg"
|
||||
text_readonly_color="ScriptDialogFg"
|
||||
top="0"
|
||||
value="informational text"
|
||||
width="285"
|
||||
wrap="true"
|
||||
parse_highlights="true"
|
||||
parse_urls="true"/>
|
||||
</panel>
|
||||
bevel_style="none"
|
||||
follows="all"
|
||||
height="120"
|
||||
label="info_panel"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="info_panel"
|
||||
top="0"
|
||||
width="305">
|
||||
<text_editor
|
||||
bg_readonly_color="ScriptDialog"
|
||||
border_visible="false"
|
||||
embedded_items="false"
|
||||
enabled="true"
|
||||
follows="all"
|
||||
font="SansSerif"
|
||||
height="120"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
mouse_opaque="false"
|
||||
name="text_editor_box"
|
||||
read_only="true"
|
||||
text_color="ScriptDialogFg"
|
||||
text_readonly_color="ScriptDialogFg"
|
||||
top="0"
|
||||
visible="true"
|
||||
width="285"
|
||||
wrap="true"
|
||||
parse_highlights="true"
|
||||
parse_urls="true"/>
|
||||
</panel>
|
||||
<panel
|
||||
bevel_style="none"
|
||||
follows="left|right|bottom"
|
||||
|
|
@ -54,7 +57,7 @@
|
|||
top_pad="5"
|
||||
width="305">
|
||||
<text_editor
|
||||
border_visible="true"
|
||||
border_visible="true"
|
||||
parse_urls="true"
|
||||
enabled="true"
|
||||
follows="all"
|
||||
|
|
|
|||
|
|
@ -1693,6 +1693,15 @@
|
|||
tool_tip="If enabled, you can preview animations during the upload process on your own avatar"
|
||||
name="FSUploadAnimationOnOwnAvatar"
|
||||
control_name="FSUploadAnimationOnOwnAvatar"/>
|
||||
<check_box
|
||||
top_pad="8"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
label="Enable extend script info details"
|
||||
tool_tip="If enabled, extend basic script info feature with various details useful for builders"
|
||||
name="FSScriptInfoExtended"
|
||||
enabled_control="UseLSLBridge"
|
||||
control_name="FSScriptInfoExtended"/>
|
||||
</panel>
|
||||
|
||||
<!--Uploads-->
|
||||
|
|
|
|||
|
|
@ -2628,6 +2628,7 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="Command_Group_Titles_Label">Group Titles</string>
|
||||
<string name="Command_Wearable_Favorites_Label">Favorite Wearables</string>
|
||||
<string name="Command_RFO_Label">Show Friends Only</string>
|
||||
<string name="Command_DAO_Label">Derender Animesh</string>
|
||||
<string name="Command_Beacons_Label">Beacons</string>
|
||||
|
||||
<string name="Command_AboutLand_Tooltip">Information about the land you're visiting</string>
|
||||
|
|
@ -2691,6 +2692,7 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="Command_Group_Titles_Tooltip">Change active group tag</string>
|
||||
<string name="Command_Wearable_Favorites_Tooltip">Open the list of favorite wearables</string>
|
||||
<string name="Command_RFO_Tooltip">Show only your friends in the viewer, all other avatars will be removed. Once enabled a TP is required to restore visibility of others.</string>
|
||||
<string name="Command_DAO_Tooltip">Derender Animated Objects (aka Animesh) - Temporarily derenders all currently visible Animesh (attached and free roaming). Derendered animesh will reappear after a TP</string>
|
||||
<string name="Command_Beacons_Tooltip">Show beacons</string>
|
||||
|
||||
<string name="Toolbar_Bottom_Tooltip">currently in your bottom toolbar</string>
|
||||
|
|
@ -2914,6 +2916,28 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="fsbridge_created">Bridge created.</string>
|
||||
<string name="fsbridge_script_info">Script info: '[OBJECT_NAME]': [[OBJECT_RUNNING_SCRIPT_COUNT]/[OBJECT_TOTAL_SCRIPT_COUNT]] running scripts, [OBJECT_SCRIPT_MEMORY] KB allowed memory size limit, [OBJECT_SCRIPT_TIME] ms of CPU time consumed.[PATHFINDING_TEXT]</string>
|
||||
<string name="fsbridge_script_info_pf">Average CPU time used for pathfinding navigation: [OBJECT_CHARACTER_TIME] ms.</string>
|
||||
<string name="fsbridge_script_info_ext">
|
||||
Object ID: [INSPECTING_KEY]
|
||||
Description: [OBJECT_DESC]
|
||||
Root prim: [OBJECT_ROOT]
|
||||
Prim count: [OBJECT_PRIM_COUNT]
|
||||
Land impact: [OBJECT_PRIM_EQUIVALENCE]
|
||||
Inventory items: [OBJECT_TOTAL_INVENTORY_COUNT]
|
||||
Velocity: [OBJECT_VELOCITY]
|
||||
Position: [OBJECT_POS]
|
||||
Rotation: [OBJECT_ROT]
|
||||
Angular velocity: [OBJECT_OMEGA] (radians per second)
|
||||
Creator: [OBJECT_CREATOR]
|
||||
Owner: [OBJECT_OWNER]
|
||||
Previous owner: [OBJECT_LAST_OWNER_ID]
|
||||
Rezzed by: [OBJECT_REZZER_KEY]
|
||||
Group: [OBJECT_GROUP]
|
||||
Creation time: [OBJECT_CREATION_TIME]
|
||||
Pathfinding type: [OBJECT_PATHFINDING_TYPE]
|
||||
Attachment point: [OBJECT_ATTACHED_POINT]
|
||||
Temporarily attached: [OBJECT_TEMP_ATTACHED]
|
||||
Your current position: [AVATAR_POS]
|
||||
</string>
|
||||
<string name="fsbridge_error_scriptinfonotfound">Script info: Object to check is invalid or out of range.</string>
|
||||
<string name="fsbridge_error_scriptinfomalformed">Script info: Received malformed response from bridge. Try again.</string>
|
||||
<string name="fsbridge_error_injection">NOTICE: One or more scripts have been added to your Firestorm bridge! If you did not expect this message, use the Firestorm 'Avatar/Avatar Health/Recreate Bridge' menu option to re-create your bridge now.</string>
|
||||
|
|
@ -2975,6 +2999,8 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="fs_preprocessor_lexing_exception">[SEVERITY]: [ERR_NAME] ([LINENUMBER]): [ERR_DESC]</string>
|
||||
<string name="fs_preprocessor_exception">[ERR_NAME] ([LINENUMBER]): exception caught: [ERR_DESC]</string>
|
||||
<string name="fs_preprocessor_error">[ERR_NAME] ([LINENUMBER]): unexpected exception caught.</string>
|
||||
<string name="fs_preprocessor_lsl2_directive_override">Detected compile-as-LSL2 directive overriding preference setting.</string>
|
||||
<string name="fs_preprocessor_mono_directive_override">Detected compile-as-Mono directive overriding preference setting.</string>
|
||||
<!-- LSL Optimizer -->
|
||||
<string name="fs_preprocessor_optimizer_start">Optimizing out unreferenced user-defined functions and global variables.</string>
|
||||
<string name="fs_preprocessor_optimizer_regex_err">Not a valid regular expression: '[WHAT]'; LSL optimization skipped.</string>
|
||||
|
|
@ -3082,7 +3108,8 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="mode_settings_text.xml">Text</string>
|
||||
|
||||
<string name="Asset_Uploading">Uploading...
|
||||
|
||||
[ASSET_NAME]
|
||||
</string>
|
||||
<string name="Yes">Yes</string>
|
||||
<string name="No">No</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,6 @@
|
|||
<text name="label" width="72">
|
||||
Predefinido:
|
||||
</text>
|
||||
<button label="Borrar" name="delete"/>
|
||||
<button label="Eliminar" name="delete"/>
|
||||
<button label="Cancelar" name="cancel"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,9 @@
|
|||
<string name="status_parse_error">
|
||||
Error: Problema de análisis de DAE - consulta los datos en el registro.
|
||||
</string>
|
||||
<string name="status_bind_shape_orientation">
|
||||
Atención: la matriz de forma unida no está en orientación X-forward estándar.
|
||||
</string>
|
||||
<string name="status_material_mismatch">
|
||||
Error: el material del modelo no es un subconjunto del modelo de referencia.
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -422,6 +422,7 @@
|
|||
<text name="edit_object">
|
||||
Editar las características del objeto:
|
||||
</text>
|
||||
<check_box label="Malla animada" name="Animated Mesh Checkbox Ctrl" tool_tip="Permite que los objetos de malla aparejados estén animados de manera independiente"/>
|
||||
<check_box label="Flexibilidad" name="Flexible1D Checkbox Ctrl" tool_tip="Permite que el objeto flexione en el eje Z (sólo del lado del cliente)."/>
|
||||
<spinner label="Blandura" name="FlexNumSections"/>
|
||||
<spinner label="Gravedad" name="FlexGravity"/>
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@
|
|||
<menu_item_call label="Respaldo" name="Backup"/>
|
||||
<menu_item_call label="Collada" name="Collada"/>
|
||||
</context_menu>
|
||||
<menu_item_call label="Volcar XML" name="Dump XML"/>
|
||||
<menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
|
||||
<menu_item_call label="Eliminar" name="Delete"/>
|
||||
<menu_item_call label="Bloquear propietario de las partículas" name="Mute Particle"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/>
|
||||
<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
|
||||
<menu_item_check label="Ordenar según distancia" name="sort_distance"/>
|
||||
<menu_item_check label="Ordenar según Llegada reciente" name="sort_arrival"/>
|
||||
<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
|
||||
<menu_item_check label="Ver mapa" name="view_map"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -370,7 +370,6 @@
|
|||
<menu_item_check label="Mostrar matrices" name="Show Matrices"/>
|
||||
<menu_item_check label="Color bajo el cursor" name="Show Color Under Cursor"/>
|
||||
<menu_item_check label="Memoria" name="Show Memory"/>
|
||||
<menu_item_check label="Mostrar información de memoria privada" name="Show Private Mem Info"/>
|
||||
<menu_item_check label="Actualizaciones a objetos" name="Show Updates"/>
|
||||
</menu>
|
||||
<menu label="Forzar un error" name="Force Errors">
|
||||
|
|
@ -405,6 +404,7 @@
|
|||
<menu_item_check label="Área de textura" name="Texture Area"/>
|
||||
<menu_item_check label="Área de cara" name="Face Area"/>
|
||||
<menu_item_check label="Información sobre el nivel de detalle" name="LOD Info"/>
|
||||
<menu_item_check label="Recuento de triángulo" name="Triangle Count"/>
|
||||
<menu_item_check label="Cola de construcción" name="Build Queue"/>
|
||||
<menu_item_check label="Luces" name="Lights"/>
|
||||
<menu_item_check label="Armazón de colisión" name="Collision Skeleton"/>
|
||||
|
|
@ -531,6 +531,7 @@
|
|||
<menu_item_check label="Mostrar armazón de colisión" name="Show Collision Skeleton"/>
|
||||
<menu_item_check label="Mostrar los huesos" name="Show Bones"/>
|
||||
<menu_item_check label="Mostrar objetivo del avatar" name="Display Agent Target"/>
|
||||
<menu_item_check label="Mostrar las medidas impostoras" name="Show Impostor Extents"/>
|
||||
<menu_item_call label="Volcar objetos anexados" name="Dump Attachments"/>
|
||||
<menu_item_call label="Depurar texturas del avatar" name="Debug Avatar Textures"/>
|
||||
<menu_item_call label="Volcar texturas locales" name="Dump Local Textures"/>
|
||||
|
|
|
|||
|
|
@ -3412,6 +3412,9 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
|
|||
<notification name="PresetNotSaved">
|
||||
Error al guardar el valor predefinido [NAME].
|
||||
</notification>
|
||||
<notification name="DefaultPresetNotSaved">
|
||||
No se puede sobrescribir el valor predefinido.
|
||||
</notification>
|
||||
<notification name="PresetNotDeleted">
|
||||
Error al eliminar el valor predefinido [NAME].
|
||||
</notification>
|
||||
|
|
@ -4238,6 +4241,9 @@ Prueba otra vez dentro de un minuto.
|
|||
<notification name="CantCreateObjectRegionFull">
|
||||
No se puede crear el objeto solicitado. La región está llena.
|
||||
</notification>
|
||||
<notification name="CantCreateAnimatedObjectTooLarge">
|
||||
No se puede crear el objeto animado solicitado ya que supera el límite de triángulo aparejado.
|
||||
</notification>
|
||||
<notification name="CantAttackMultipleObjOneSpot">
|
||||
No puedes anexar varios objetos a un solo lugar.
|
||||
</notification>
|
||||
|
|
@ -4286,6 +4292,21 @@ Prueba otra vez dentro de un minuto.
|
|||
<notification name="CantChangeShape">
|
||||
No tienes permiso para cambiar esta forma.
|
||||
</notification>
|
||||
<notification name="NoPermsTooManyAttachedAnimatedObjects">
|
||||
Esta operación provocaría que la cantidad de objetos animados adjuntos supere el límite.
|
||||
</notification>
|
||||
<notification name="NoPermsLinkAnimatedObjectTooLarge">
|
||||
No se puede establecer un enlace entre estos objetos porque el objeto animado resultante superaría el límite de triángulo aparejado.
|
||||
</notification>
|
||||
<notification name="NoPermsSetFlagAnimatedObjectTooLarge">
|
||||
No se puede transformar este objeto en un objeto animado ya que superaría el límite de triángulo aparejado.
|
||||
</notification>
|
||||
<notification name="CantChangeAnimatedObjectStateInsufficientLand">
|
||||
No se puede cambiar el estado de objeto animado para este objeto porque provocaría que se exceda el límite de parcela.
|
||||
</notification>
|
||||
<notification name="ErrorNoMeshData">
|
||||
Error del servidor: no se puede completar esta operación ya que los datos de malla no han sido cargados.
|
||||
</notification>
|
||||
<notification name="NoAccessToClaimObjects">
|
||||
Tus privilegios de acceso no te permiten reclamar objetos aquí.
|
||||
</notification>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,9 @@
|
|||
<string name="status_parse_error">
|
||||
Erreur : Problème d'analyse de fichier .dae ; reportez-vous au journal pour plus de détails.
|
||||
</string>
|
||||
<string name="status_bind_shape_orientation">
|
||||
Avertissement : la matrice de formes de reliure n'est pas dans l'orientation standard X-avant.
|
||||
</string>
|
||||
<string name="status_material_mismatch">
|
||||
Erreur : le matériau du modèle ne correspond pas à un sous-ensemble du modèle de référence.
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -273,6 +273,7 @@
|
|||
<text name="select_single">Sélectionnez un prim pour changer ses attributs.</text>
|
||||
<text name="edit_object">Modifier les attributs de l'objet :</text>
|
||||
<check_box label="Flexible Path" name="Flexible1D Checkbox Ctrl" tool_tip="Permet à l'objet de se plier le long de l'axe Z (côté client uniquement)"/>
|
||||
<check_box label="Maillage animé" name="Animated Mesh Checkbox Ctrl" tool_tip="Permet aux objets maillés calés d'être animés indépendamment"/>
|
||||
<spinner label="Souplesse" name="FlexNumSections"/>
|
||||
<spinner label="Gravité" name="FlexGravity"/>
|
||||
<spinner label="Élasticité" name="FlexFriction"/>
|
||||
|
|
|
|||
|
|
@ -48,4 +48,6 @@
|
|||
</context_menu>
|
||||
<menu_item_call label="Supprimer" name="Delete"/>
|
||||
<menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
|
||||
<menu_item_call label="Dump XML" name="Dump XML"/>
|
||||
<menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
<menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/>
|
||||
<menu_item_check label="Trier par nom" name="sort_name"/>
|
||||
<menu_item_check label="Trier par distance" name="sort_distance"/>
|
||||
<menu_item_check name="view_icons" label="Afficher les icônes des résidents"/>
|
||||
<menu_item_check name="view_map" label="Afficher la carte"/>
|
||||
<menu_item_check label="Trier par arrivée récente" name="sort_arrival"/>
|
||||
<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
|
||||
<menu_item_check label="Afficher la carte" name="view_map"/>
|
||||
<menu_item_check label="Masquer les noms d’utilisateur" name="view_usernames"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -373,7 +373,6 @@
|
|||
<menu_item_check label="Show Matrices" name="Show Matrices"/>
|
||||
<menu_item_check label="Show Color Under Cursor" name="Show Color Under Cursor"/>
|
||||
<menu_item_check label="Show Memory" name="Show Memory"/>
|
||||
<menu_item_check label="Show Private Mem Info" name="Show Private Mem Info"/>
|
||||
<menu_item_check label="Show Updates to Objects" name="Show Updates"/>
|
||||
</menu>
|
||||
<menu label="Force an Error" name="Force Errors">
|
||||
|
|
@ -409,6 +408,7 @@
|
|||
<menu_item_check label="Texture Area" name="Texture Area"/>
|
||||
<menu_item_check label="Face Area" name="Face Area"/>
|
||||
<menu_item_check label="LOD Info" name="LOD Info"/>
|
||||
<menu_item_check label="Nombre de triangles" name="Triangle Count"/>
|
||||
<menu_item_check label="Build Queue" name="Build Queue"/>
|
||||
<menu_item_check label="Lights" name="Lights"/>
|
||||
<menu_item_check label="Particles" name="Particles"/>
|
||||
|
|
@ -536,6 +536,7 @@
|
|||
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
|
||||
<menu_item_check label="Voir les os" name="Show Bones"/>
|
||||
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
|
||||
<menu_item_check label="Afficher les étendues d'imposteur" name="Show Impostor Extents"/>
|
||||
<menu_item_call label="Dump Attachments" name="Dump Attachments"/>
|
||||
<menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/>
|
||||
<menu_item_call label="Dump Local Textures" name="Dump Local Textures"/>
|
||||
|
|
|
|||
|
|
@ -3207,6 +3207,9 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
|
|||
<notification name="PresetNotSaved">
|
||||
Erreur d’enregistrement du préréglage [NAME].
|
||||
</notification>
|
||||
<notification name="DefaultPresetNotSaved">
|
||||
Impossible de remplacer le préréglage par défaut.
|
||||
</notification>
|
||||
<notification name="PresetNotDeleted">
|
||||
Erreur de suppression du préréglage [NAME].
|
||||
</notification>
|
||||
|
|
@ -3966,6 +3969,9 @@ Veuillez réessayer dans une minute.
|
|||
<notification name="CantCreateObjectRegionFull">
|
||||
Création de l'objet demandé impossible. La région est pleine.
|
||||
</notification>
|
||||
<notification name="CantCreateAnimatedObjectTooLarge">
|
||||
Impossible de créer l'objet animé demandé car il dépasserait la limite de triangle calé.
|
||||
</notification>
|
||||
<notification name="CantAttackMultipleObjOneSpot">
|
||||
Vous ne pouvez pas attacher plusieurs objets au même endroit.
|
||||
</notification>
|
||||
|
|
@ -4014,6 +4020,21 @@ Veuillez réessayer dans une minute.
|
|||
<notification name="CantChangeShape">
|
||||
Vous n’êtes pas autorisé à modifier cette forme.
|
||||
</notification>
|
||||
<notification name="NoPermsTooManyAttachedAnimatedObjects">
|
||||
Une opération entraînerait le dépassement du nombre d'objets animés attachés.
|
||||
</notification>
|
||||
<notification name="NoPermsLinkAnimatedObjectTooLarge">
|
||||
Impossible de lier ces objets car l'objet animé résultant dépasserait la limite de triangle calé.
|
||||
</notification>
|
||||
<notification name="NoPermsSetFlagAnimatedObjectTooLarge">
|
||||
Impossible de transformer cet objet en objet animé car il dépasserait la limite de triangle calé.
|
||||
</notification>
|
||||
<notification name="CantChangeAnimatedObjectStateInsufficientLand">
|
||||
Impossible de modifier l'état de l'objet animé pour cet objet, car cela entraînerait un dépassement de la limite de parcelles.
|
||||
</notification>
|
||||
<notification name="ErrorNoMeshData">
|
||||
Erreur de serveur : impossible d'effectuer cette opération car les données de maillage ne sont pas chargées.
|
||||
</notification>
|
||||
<notification name="NoAccessToClaimObjects">
|
||||
Vos privilèges d'accès ne vous autorisent pas à revendiquer des objets ici.
|
||||
</notification>
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@
|
|||
Cancella ciclo giornata
|
||||
</string>
|
||||
<string name="label_water">
|
||||
Valori predefiniti:
|
||||
Valore predefinito:
|
||||
</string>
|
||||
<string name="label_sky">
|
||||
Valori predefiniti:
|
||||
Valore predefinito:
|
||||
</string>
|
||||
<string name="label_day_cycle">
|
||||
Ciclo giornata:
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
-Seleziona un preset-
|
||||
</string>
|
||||
<text name="label">
|
||||
Preset:
|
||||
Valore predefinito:
|
||||
</text>
|
||||
<button label="Elimina" name="delete"/>
|
||||
<button label="Annulla" name="cancel"/>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue