Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
32b5aa20c3
|
|
@ -21,8 +21,8 @@ indra/.distcc
|
|||
build-vc80/
|
||||
build-vc100/
|
||||
build-vc120/
|
||||
build-vc[0-9]*-32/
|
||||
build-vc[0-9]*-64/
|
||||
build-vc[0-9]*-32*/
|
||||
build-vc[0-9]*-64*/
|
||||
indra/CMakeFiles
|
||||
indra/build-vc[0-9]*
|
||||
indra/lib/mono/1.0/*.dll
|
||||
|
|
@ -98,4 +98,9 @@ indra/newview/pilot.xml
|
|||
indra/newview/exoflickrkeys.h
|
||||
indra/newview/fsdiscordkey.h
|
||||
my_autobuild.xml
|
||||
.vscode
|
||||
.vscode
|
||||
*.srctrlbm
|
||||
*.srctrldb
|
||||
*.srctrlprj
|
||||
|
||||
compile_commands.json
|
||||
|
|
|
|||
|
|
@ -992,11 +992,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>fd75a1941350a5a0b510b18192f28ef3</string>
|
||||
<string>b88e70667efc230a00d6a2d982af8fc5</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.04-windows-202592205.tar.bz2</string>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.05-windows-202860859.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -1006,18 +1006,18 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>534c065e8d284b794d1aabeda20f3600</string>
|
||||
<string>401829b65cac61a2f96179fadf7eb015</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.04-windows64-202592207.tar.bz2</string>
|
||||
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.05-windows64-202860900.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.01.04</string>
|
||||
<string>2.01.05</string>
|
||||
</map>
|
||||
<key>fontconfig</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env bash
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
echo "USAGE: $0 <OS|SL>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $1 == "SL" ] || [ $1 == "OS" ]
|
||||
then
|
||||
[ $1 == "SL" ] && l="OS" || l="SL"
|
||||
else
|
||||
if [ $1 == "test" ] || [ $1 == "?" ]
|
||||
then
|
||||
if [ -d "./build-vc150-64" ]
|
||||
then
|
||||
c="Unknown"
|
||||
if [ ! -d "./build-vc150-64-SL" ] && [ -d "./build-vc150-64-OS" ]
|
||||
then
|
||||
c="SL"
|
||||
fi
|
||||
if [ -d "./build-vc150-64-SL" ] && [ ! -d "./build-vc150-64-OS" ]
|
||||
then
|
||||
c="OS"
|
||||
fi
|
||||
echo "Current build is for $c"
|
||||
else
|
||||
echo "No build configured"
|
||||
fi
|
||||
exit 0
|
||||
else
|
||||
echo "Invalid target $1"
|
||||
echo "USAGE: $0 <OS|SL>"
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
t=$1
|
||||
|
||||
if [ -d "./build-vc150-64" ]
|
||||
then
|
||||
if [ ! -d "./build-vc150-64-$t" ]
|
||||
then
|
||||
# live folder exists
|
||||
# target does not so we are probably good to go
|
||||
echo "$t already setup"
|
||||
exit 0
|
||||
else
|
||||
# target folder exists so probably means that the setup is for the alternate
|
||||
if [ ! -d "./build-vc150-64-$l" ]
|
||||
then
|
||||
# alternate folder not found so we rename the live target back to this
|
||||
echo "Currently setup for $l. Renaming default back to $l"
|
||||
`mv ./build-vc150-64 ./build-vc150-64-$l`
|
||||
else
|
||||
# no LAST and no TARGET exists so this is not in the right state
|
||||
echo "Not setup for multi-target"
|
||||
exit 3
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d "./build-vc150-64-$t" ]
|
||||
then
|
||||
# live folder exists
|
||||
# target does not so we are probably good to go
|
||||
echo "renaming $t to default"
|
||||
`mv ./build-vc150-64-$t ./build-vc150-64`
|
||||
else
|
||||
echo "Not setup for target $t"
|
||||
exit 4
|
||||
fi
|
||||
|
||||
|
|
@ -268,6 +268,7 @@ Beq Janus
|
|||
Beth Walcher
|
||||
Beq Janus
|
||||
SL-10288
|
||||
SL-13583
|
||||
Bezilon Kasei
|
||||
Biancaluce Robbiani
|
||||
CT-225
|
||||
|
|
|
|||
|
|
@ -190,8 +190,12 @@ BOOL LLTexLayerSetBuffer::renderTexLayerSet(LLRenderTarget* bound_target)
|
|||
|
||||
LLTexLayerSetInfo::LLTexLayerSetInfo() :
|
||||
mBodyRegion( "" ),
|
||||
mWidth( 512 ),
|
||||
mHeight( 512 ),
|
||||
// <FS:Beq> FIRE-30020 allow 1024 local bakes (not strictly needed as avatar_lad is required)
|
||||
// mWidth( 512 ),
|
||||
// mHeight( 512 ),
|
||||
mWidth( 1024 ),
|
||||
mHeight( 1024 ),
|
||||
// </FS:Beq>
|
||||
mClearAlpha( TRUE )
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -430,7 +430,7 @@ void showJointScaleOverrides( const LLJoint& joint, const std::string& note, con
|
|||
bool LLJoint::aboveJointPosThreshold(const LLVector3& pos) const
|
||||
{
|
||||
LLVector3 diff = pos - getDefaultPosition();
|
||||
const F32 max_joint_pos_offset = 0.0001f; // 0.1 mm
|
||||
const F32 max_joint_pos_offset = LL_JOINT_TRESHOLD_POS_OFFSET; // 0.1 mm
|
||||
return diff.lengthSquared() > max_joint_pos_offset * max_joint_pos_offset;
|
||||
}
|
||||
|
||||
|
|
@ -533,7 +533,7 @@ void LLJoint::clearAttachmentPosOverrides()
|
|||
// getAllAttachmentPosOverrides()
|
||||
//--------------------------------------------------------------------
|
||||
void LLJoint::getAllAttachmentPosOverrides(S32& num_pos_overrides,
|
||||
std::set<LLVector3>& distinct_pos_overrides)
|
||||
std::set<LLVector3>& distinct_pos_overrides) const
|
||||
{
|
||||
num_pos_overrides = m_attachmentPosOverrides.count();
|
||||
LLVector3OverrideMap::map_type::const_iterator it = m_attachmentPosOverrides.getMap().begin();
|
||||
|
|
@ -547,7 +547,7 @@ void LLJoint::getAllAttachmentPosOverrides(S32& num_pos_overrides,
|
|||
// getAllAttachmentScaleOverrides()
|
||||
//--------------------------------------------------------------------
|
||||
void LLJoint::getAllAttachmentScaleOverrides(S32& num_scale_overrides,
|
||||
std::set<LLVector3>& distinct_scale_overrides)
|
||||
std::set<LLVector3>& distinct_scale_overrides) const
|
||||
{
|
||||
num_scale_overrides = m_attachmentScaleOverrides.count();
|
||||
LLVector3OverrideMap::map_type::const_iterator it = m_attachmentScaleOverrides.getMap().begin();
|
||||
|
|
|
|||
|
|
@ -79,6 +79,8 @@ const U32 LL_FACE_JOINT_NUM = (LL_CHARACTER_MAX_ANIMATED_JOINTS-2);
|
|||
const S32 LL_CHARACTER_MAX_PRIORITY = 7;
|
||||
const F32 LL_MAX_PELVIS_OFFSET = 5.f;
|
||||
|
||||
const F32 LL_JOINT_TRESHOLD_POS_OFFSET = 0.0001f; //0.1 mm
|
||||
|
||||
class LLVector3OverrideMap
|
||||
{
|
||||
public:
|
||||
|
|
@ -313,9 +315,9 @@ public:
|
|||
void showAttachmentScaleOverrides(const std::string& av_info) const;
|
||||
|
||||
void getAllAttachmentPosOverrides(S32& num_pos_overrides,
|
||||
std::set<LLVector3>& distinct_pos_overrides);
|
||||
std::set<LLVector3>& distinct_pos_overrides) const;
|
||||
void getAllAttachmentScaleOverrides(S32& num_scale_overrides,
|
||||
std::set<LLVector3>& distinct_scale_overrides);
|
||||
std::set<LLVector3>& distinct_scale_overrides) const;
|
||||
|
||||
// These are used in checks of whether a pos/scale override is considered significant.
|
||||
bool aboveJointPosThreshold(const LLVector3& pos) const;
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ public:
|
|||
LLInventoryCategory(const LLInventoryCategory* other);
|
||||
void copyCategory(const LLInventoryCategory* other); // LLRefCount requires custom copy
|
||||
protected:
|
||||
~LLInventoryCategory();
|
||||
virtual ~LLInventoryCategory();
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Accessors And Mutators
|
||||
|
|
|
|||
|
|
@ -5294,9 +5294,9 @@ public:
|
|||
LLVCacheTriangleData* tri = *iter;
|
||||
if (tri->mActive)
|
||||
{
|
||||
tri->mScore = tri->mVertex[0]->mScore;
|
||||
tri->mScore += tri->mVertex[1]->mScore;
|
||||
tri->mScore += tri->mVertex[2]->mScore;
|
||||
tri->mScore = tri->mVertex[0] ? tri->mVertex[0]->mScore : 0;
|
||||
tri->mScore += tri->mVertex[1] ? tri->mVertex[1]->mScore : 0;
|
||||
tri->mScore += tri->mVertex[2] ? tri->mVertex[2]->mScore : 0;
|
||||
|
||||
if (!mBestTriangle || mBestTriangle->mScore < tri->mScore)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -387,7 +387,7 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
|
|||
return LLModel::NO_ERRORS ;
|
||||
}
|
||||
|
||||
LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& face_list, std::vector<std::string>& materials, domPolylistRef& poly)
|
||||
LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& face_list, std::vector<std::string>& materials, domPolylistRef& poly, LLSD& log_msg)
|
||||
{
|
||||
domPRef p = poly->getP();
|
||||
domListOfUInts& idx = p->getValue();
|
||||
|
|
@ -447,6 +447,7 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
|
|||
LLVolumeFace::VertexMapData::PointMap point_map;
|
||||
|
||||
U32 cur_idx = 0;
|
||||
bool log_tc_msg = true;
|
||||
for (U32 i = 0; i < vcount.getCount(); ++i)
|
||||
{ //for each polygon
|
||||
U32 first_index = 0;
|
||||
|
|
@ -470,8 +471,21 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
|
|||
|
||||
if (tc_source)
|
||||
{
|
||||
cv.mTexCoord.setVec(tc[idx[cur_idx+tc_offset]*2+0],
|
||||
tc[idx[cur_idx+tc_offset]*2+1]);
|
||||
U64 idx_x = idx[cur_idx + tc_offset] * 2 + 0;
|
||||
U64 idx_y = idx[cur_idx + tc_offset] * 2 + 1;
|
||||
|
||||
if (idx_y < tc.getCount())
|
||||
{
|
||||
cv.mTexCoord.setVec(tc[idx_x], tc[idx_y]);
|
||||
}
|
||||
else if (log_tc_msg)
|
||||
{
|
||||
log_tc_msg = false;
|
||||
LL_WARNS() << "Texture coordinates data is not complete." << LL_ENDL;
|
||||
LLSD args;
|
||||
args["Message"] = "IncompleteTC";
|
||||
log_msg.append(args);
|
||||
}
|
||||
}
|
||||
|
||||
if (norm_source)
|
||||
|
|
@ -1262,7 +1276,7 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
|
|||
for (S32 i = 0; i < childCount; ++i)
|
||||
{
|
||||
domNode* pNode = daeSafeCast<domNode>(children[i]);
|
||||
if ( isNodeAJoint( pNode ) )
|
||||
if (pNode)
|
||||
{
|
||||
processJointNode( pNode, mJointList );
|
||||
}
|
||||
|
|
@ -1533,6 +1547,12 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
|
|||
}
|
||||
}
|
||||
|
||||
U32 bind_count = model->mSkinInfo.mAlternateBindMatrix.size();
|
||||
if (bind_count > 0 && bind_count != jointCnt)
|
||||
{
|
||||
LL_WARNS("Mesh") << "Model " << model->mLabel << " has invalid joint bind matrix list." << LL_ENDL;
|
||||
}
|
||||
|
||||
//grab raw position array
|
||||
|
||||
domVertices* verts = mesh->getVertices();
|
||||
|
|
@ -1897,59 +1917,61 @@ void LLDAELoader::processJointNode( domNode* pNode, JointTransformMap& jointTran
|
|||
//LL_WARNS()<<"ProcessJointNode# Node:" <<pNode->getName()<<LL_ENDL;
|
||||
|
||||
//1. handle the incoming node - extract out translation via SID or element
|
||||
if (isNodeAJoint(pNode))
|
||||
{
|
||||
LLMatrix4 workingTransform;
|
||||
|
||||
LLMatrix4 workingTransform;
|
||||
//Pull out the translate id and store it in the jointTranslations map
|
||||
daeSIDResolver jointResolverA(pNode, "./translate");
|
||||
domTranslate* pTranslateA = daeSafeCast<domTranslate>(jointResolverA.getElement());
|
||||
daeSIDResolver jointResolverB(pNode, "./location");
|
||||
domTranslate* pTranslateB = daeSafeCast<domTranslate>(jointResolverB.getElement());
|
||||
|
||||
//Pull out the translate id and store it in the jointTranslations map
|
||||
daeSIDResolver jointResolverA( pNode, "./translate" );
|
||||
domTranslate* pTranslateA = daeSafeCast<domTranslate>( jointResolverA.getElement() );
|
||||
daeSIDResolver jointResolverB( pNode, "./location" );
|
||||
domTranslate* pTranslateB = daeSafeCast<domTranslate>( jointResolverB.getElement() );
|
||||
//Translation via SID was successful
|
||||
if (pTranslateA)
|
||||
{
|
||||
extractTranslation(pTranslateA, workingTransform);
|
||||
}
|
||||
else
|
||||
if (pTranslateB)
|
||||
{
|
||||
extractTranslation(pTranslateB, workingTransform);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Translation via child from element
|
||||
daeElement* pTranslateElement = getChildFromElement(pNode, "translate");
|
||||
if (!pTranslateElement || pTranslateElement->typeID() != domTranslate::ID())
|
||||
{
|
||||
//LL_WARNS()<< "The found element is not a translate node" <<LL_ENDL;
|
||||
daeSIDResolver jointResolver(pNode, "./matrix");
|
||||
domMatrix* pMatrix = daeSafeCast<domMatrix>(jointResolver.getElement());
|
||||
if (pMatrix)
|
||||
{
|
||||
//LL_INFOS()<<"A matrix SID was however found!"<<LL_ENDL;
|
||||
domFloat4x4 domArray = pMatrix->getValue();
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
workingTransform.mMatrix[i][j] = domArray[i + j * 4];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "The found element is not translate or matrix node - most likely a corrupt export!" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
extractTranslationViaElement(pTranslateElement, workingTransform);
|
||||
}
|
||||
}
|
||||
|
||||
//Translation via SID was successful
|
||||
if ( pTranslateA )
|
||||
{
|
||||
extractTranslation( pTranslateA, workingTransform );
|
||||
}
|
||||
else
|
||||
if ( pTranslateB )
|
||||
{
|
||||
extractTranslation( pTranslateB, workingTransform );
|
||||
}
|
||||
else
|
||||
{
|
||||
//Translation via child from element
|
||||
daeElement* pTranslateElement = getChildFromElement( pNode, "translate" );
|
||||
if ( !pTranslateElement || pTranslateElement->typeID() != domTranslate::ID() )
|
||||
{
|
||||
//LL_WARNS()<< "The found element is not a translate node" <<LL_ENDL;
|
||||
daeSIDResolver jointResolver( pNode, "./matrix" );
|
||||
domMatrix* pMatrix = daeSafeCast<domMatrix>( jointResolver.getElement() );
|
||||
if ( pMatrix )
|
||||
{
|
||||
//LL_INFOS()<<"A matrix SID was however found!"<<LL_ENDL;
|
||||
domFloat4x4 domArray = pMatrix->getValue();
|
||||
for ( int i = 0; i < 4; i++ )
|
||||
{
|
||||
for( int j = 0; j < 4; j++ )
|
||||
{
|
||||
workingTransform.mMatrix[i][j] = domArray[i + j*4];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS()<< "The found element is not translate or matrix node - most likely a corrupt export!" <<LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
extractTranslationViaElement( pTranslateElement, workingTransform );
|
||||
}
|
||||
}
|
||||
|
||||
//Store the working transform relative to the nodes name.
|
||||
jointTransforms[ pNode->getName() ] = workingTransform;
|
||||
//Store the working transform relative to the nodes name.
|
||||
jointTransforms[pNode->getName()] = workingTransform;
|
||||
}
|
||||
|
||||
//2. handle the nodes children
|
||||
|
||||
|
|
@ -2422,7 +2444,7 @@ LLColor4 LLDAELoader::getDaeColor(daeElement* element)
|
|||
return value;
|
||||
}
|
||||
|
||||
bool LLDAELoader::addVolumeFacesFromDomMesh(LLModel* pModel,domMesh* mesh)
|
||||
bool LLDAELoader::addVolumeFacesFromDomMesh(LLModel* pModel,domMesh* mesh, LLSD& log_msg)
|
||||
{
|
||||
LLModel::EModelStatus status = LLModel::NO_ERRORS;
|
||||
domTriangles_Array& tris = mesh->getTriangles_array();
|
||||
|
|
@ -2444,7 +2466,7 @@ bool LLDAELoader::addVolumeFacesFromDomMesh(LLModel* pModel,domMesh* mesh)
|
|||
for (U32 i = 0; i < polys.getCount(); ++i)
|
||||
{
|
||||
domPolylistRef& poly = polys.get(i);
|
||||
status = load_face_from_dom_polylist(pModel->getVolumeFaces(), pModel->getMaterialList(), poly);
|
||||
status = load_face_from_dom_polylist(pModel->getVolumeFaces(), pModel->getMaterialList(), poly, log_msg);
|
||||
|
||||
if(status != LLModel::NO_ERRORS)
|
||||
{
|
||||
|
|
@ -2546,7 +2568,7 @@ bool LLDAELoader::loadModelsFromDomMesh(domMesh* mesh, std::vector<LLModel*>& mo
|
|||
|
||||
// Get the whole set of volume faces
|
||||
//
|
||||
addVolumeFacesFromDomMesh(ret, mesh);
|
||||
addVolumeFacesFromDomMesh(ret, mesh, mWarningsArray);
|
||||
|
||||
U32 volume_faces = ret->getNumVolumeFaces();
|
||||
|
||||
|
|
@ -2619,7 +2641,8 @@ bool LLDAELoader::createVolumeFacesFromDomMesh(LLModel* pModel, domMesh* mesh)
|
|||
{
|
||||
pModel->ClearFacesAndMaterials();
|
||||
|
||||
addVolumeFacesFromDomMesh(pModel, mesh);
|
||||
LLSD placeholder;
|
||||
addVolumeFacesFromDomMesh(pModel, mesh, placeholder);
|
||||
|
||||
if (pModel->getNumVolumeFaces() > 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ protected:
|
|||
//Verify that a controller matches vertex counts
|
||||
bool verifyController( domController* pController );
|
||||
|
||||
static bool addVolumeFacesFromDomMesh(LLModel* model, domMesh* mesh);
|
||||
static bool addVolumeFacesFromDomMesh(LLModel* model, domMesh* mesh, LLSD& log_msg);
|
||||
static bool createVolumeFacesFromDomMesh(LLModel* model, domMesh *mesh);
|
||||
|
||||
static LLModel* loadModelFromDomMesh(domMesh* mesh);
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ LLModelLoader::LLModelLoader(
|
|||
, mStateCallback(state_cb)
|
||||
, mOpaqueData(opaque_userdata)
|
||||
, mRigValidJointUpload(true)
|
||||
, mLegacyRigValid(true)
|
||||
, mLegacyRigFlags(0)
|
||||
, mNoNormalize(false)
|
||||
, mNoOptimize(false)
|
||||
, mCacheOnlyHitIfRigged(false)
|
||||
|
|
@ -148,6 +148,7 @@ LLModelLoader::LLModelLoader(
|
|||
{
|
||||
assert_main_thread();
|
||||
sActiveLoaderList.push_back(this) ;
|
||||
mWarningsArray = LLSD::emptyArray();
|
||||
}
|
||||
|
||||
LLModelLoader::~LLModelLoader()
|
||||
|
|
@ -158,6 +159,7 @@ LLModelLoader::~LLModelLoader()
|
|||
|
||||
void LLModelLoader::run()
|
||||
{
|
||||
mWarningsArray.clear();
|
||||
doLoadModel();
|
||||
doOnIdleOneTime(boost::bind(&LLModelLoader::loadModelCallback,this));
|
||||
}
|
||||
|
|
@ -402,7 +404,7 @@ void LLModelLoader::critiqueRigForUploadApplicability( const std::vector<std::st
|
|||
//2. It is suitable for upload as standard av with just skin weights
|
||||
|
||||
bool isJointPositionUploadOK = isRigSuitableForJointPositionUpload( jointListFromAsset );
|
||||
bool isRigLegacyOK = isRigLegacy( jointListFromAsset );
|
||||
U32 legacy_rig_flags = determineRigLegacyFlags( jointListFromAsset );
|
||||
|
||||
// It's OK that both could end up being true.
|
||||
|
||||
|
|
@ -416,19 +418,16 @@ void LLModelLoader::critiqueRigForUploadApplicability( const std::vector<std::st
|
|||
setRigValidForJointPositionUpload( false );
|
||||
}
|
||||
|
||||
if ( !isRigLegacyOK)
|
||||
{
|
||||
// This starts out true, becomes false if false for any loaded
|
||||
// mesh.
|
||||
setLegacyRigValid( false );
|
||||
}
|
||||
legacy_rig_flags |= getLegacyRigFlags();
|
||||
// This starts as 0, changes if any loaded mesh has issues
|
||||
setLegacyRigFlags(legacy_rig_flags);
|
||||
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// isRigLegacy()
|
||||
// determineRigLegacyFlags()
|
||||
//-----------------------------------------------------------------------------
|
||||
bool LLModelLoader::isRigLegacy( const std::vector<std::string> &jointListFromAsset )
|
||||
U32 LLModelLoader::determineRigLegacyFlags( const std::vector<std::string> &jointListFromAsset )
|
||||
{
|
||||
//No joints in asset
|
||||
if ( jointListFromAsset.size() == 0 )
|
||||
|
|
@ -441,7 +440,12 @@ bool LLModelLoader::isRigLegacy( const std::vector<std::string> &jointListFromAs
|
|||
{
|
||||
LL_WARNS() << "Rigged to " << jointListFromAsset.size() << " joints, max is " << mMaxJointsPerMesh << LL_ENDL;
|
||||
LL_WARNS() << "Skinning disabled due to too many joints" << LL_ENDL;
|
||||
return false;
|
||||
LLSD args;
|
||||
args["Message"] = "TooManyJoint";
|
||||
args["[JOINTS]"] = LLSD::Integer(jointListFromAsset.size());
|
||||
args["[MAX]"] = LLSD::Integer(mMaxJointsPerMesh);
|
||||
mWarningsArray.append(args);
|
||||
return LEGACY_RIG_FLAG_TOO_MANY_JOINTS;
|
||||
}
|
||||
|
||||
// Unknown joints in asset
|
||||
|
|
@ -452,16 +456,24 @@ bool LLModelLoader::isRigLegacy( const std::vector<std::string> &jointListFromAs
|
|||
if (mJointMap.find(*it)==mJointMap.end())
|
||||
{
|
||||
LL_WARNS() << "Rigged to unrecognized joint name " << *it << LL_ENDL;
|
||||
LLSD args;
|
||||
args["Message"] = "UnrecognizedJoint";
|
||||
args["[NAME]"] = *it;
|
||||
mWarningsArray.append(args);
|
||||
unknown_joint_count++;
|
||||
}
|
||||
}
|
||||
if (unknown_joint_count>0)
|
||||
{
|
||||
LL_WARNS() << "Skinning disabled due to unknown joints" << LL_ENDL;
|
||||
return false;
|
||||
LLSD args;
|
||||
args["Message"] = "UnknownJoints";
|
||||
args["[COUNT]"] = LLSD::Integer(unknown_joint_count);
|
||||
mWarningsArray.append(args);
|
||||
return LEGACY_RIG_FLAG_UNKNOWN_JOINT;
|
||||
}
|
||||
|
||||
return true;
|
||||
return LEGACY_RIG_OK;
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
// isRigSuitableForJointPositionUpload()
|
||||
|
|
|
|||
|
|
@ -42,6 +42,10 @@ typedef std::deque<std::string> JointNameSet;
|
|||
const S32 SLM_SUPPORTED_VERSION = 3;
|
||||
const S32 NUM_LOD = 4;
|
||||
|
||||
const U32 LEGACY_RIG_OK = 0;
|
||||
const U32 LEGACY_RIG_FLAG_TOO_MANY_JOINTS = 1;
|
||||
const U32 LEGACY_RIG_FLAG_UNKNOWN_JOINT = 2;
|
||||
|
||||
class LLModelLoader : public LLThread
|
||||
{
|
||||
public:
|
||||
|
|
@ -166,7 +170,7 @@ public:
|
|||
void critiqueRigForUploadApplicability( const std::vector<std::string> &jointListFromAsset );
|
||||
|
||||
//Determines if a rig is a legacy from the joint list
|
||||
bool isRigLegacy( const std::vector<std::string> &jointListFromAsset );
|
||||
U32 determineRigLegacyFlags( const std::vector<std::string> &jointListFromAsset );
|
||||
|
||||
//Determines if a rig is suitable for upload
|
||||
bool isRigSuitableForJointPositionUpload( const std::vector<std::string> &jointListFromAsset );
|
||||
|
|
@ -174,8 +178,9 @@ public:
|
|||
const bool isRigValidForJointPositionUpload( void ) const { return mRigValidJointUpload; }
|
||||
void setRigValidForJointPositionUpload( bool rigValid ) { mRigValidJointUpload = rigValid; }
|
||||
|
||||
const bool isLegacyRigValid( void ) const { return mLegacyRigValid; }
|
||||
void setLegacyRigValid( bool rigValid ) { mLegacyRigValid = rigValid; }
|
||||
const bool isLegacyRigValid(void) const { return mLegacyRigFlags == 0; }
|
||||
U32 getLegacyRigFlags() const { return mLegacyRigFlags; }
|
||||
void setLegacyRigFlags( U32 rigFlags ) { mLegacyRigFlags = rigFlags; }
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// isNodeAJoint()
|
||||
|
|
@ -185,6 +190,9 @@ public:
|
|||
return name != NULL && mJointMap.find(name) != mJointMap.end();
|
||||
}
|
||||
|
||||
const LLSD logOut() const { return mWarningsArray; }
|
||||
void clearLog() { mWarningsArray.clear(); }
|
||||
|
||||
protected:
|
||||
//<FS:ND> Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
|
||||
std::vector< std::string > toStringVector( std::vector< JointKey > const &aIn ) const
|
||||
|
|
@ -205,13 +213,15 @@ protected:
|
|||
void* mOpaqueData;
|
||||
|
||||
bool mRigValidJointUpload;
|
||||
bool mLegacyRigValid;
|
||||
U32 mLegacyRigFlags;
|
||||
|
||||
bool mNoNormalize;
|
||||
bool mNoOptimize;
|
||||
|
||||
JointTransformMap mJointTransformMap;
|
||||
|
||||
LLSD mWarningsArray; // preview floater will pull logs from here
|
||||
|
||||
static std::list<LLModelLoader*> sActiveLoaderList;
|
||||
static bool isAlive(LLModelLoader* loader) ;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
|
|||
, mTabComparator( NULL )
|
||||
, mNoVisibleTabsHelpText(NULL)
|
||||
, mNoVisibleTabsOrigString(params.no_visible_tabs_text.initial_value().asString())
|
||||
, mSkipScrollToChild(false)
|
||||
{
|
||||
initNoTabsWidget(params.no_matched_tabs_text);
|
||||
|
||||
|
|
@ -670,7 +671,7 @@ void LLAccordionCtrl::onScrollPosChangeCallback(S32, LLScrollbar*)
|
|||
// virtual
|
||||
void LLAccordionCtrl::onUpdateScrollToChild(const LLUICtrl *cntrl)
|
||||
{
|
||||
if (mScrollbar && mScrollbar->getVisible())
|
||||
if (mScrollbar && mScrollbar->getVisible() && !mSkipScrollToChild)
|
||||
{
|
||||
// same as scrollToShowRect
|
||||
LLRect rect;
|
||||
|
|
|
|||
|
|
@ -143,6 +143,8 @@ public:
|
|||
|
||||
bool getFitParent() const {return mFitParent;}
|
||||
|
||||
void setSkipScrollToChild(bool skip) { mSkipScrollToChild = skip; }
|
||||
|
||||
private:
|
||||
void initNoTabsWidget(const LLTextBox::Params& tb_params);
|
||||
void updateNoTabsHelpTextVisibility();
|
||||
|
|
@ -188,6 +190,8 @@ private:
|
|||
F32 mAutoScrollRate;
|
||||
LLTextBox* mNoVisibleTabsHelpText;
|
||||
|
||||
bool mSkipScrollToChild;
|
||||
|
||||
std::string mNoMatchedTabsOrigString;
|
||||
std::string mNoVisibleTabsOrigString;
|
||||
|
||||
|
|
|
|||
|
|
@ -700,7 +700,8 @@ void LLButton::draw()
|
|||
LLColor4 highlighting_color = LLColor4::white;
|
||||
LLColor4 glow_color = LLColor4::white;
|
||||
LLRender::eBlendType glow_type = LLRender::BT_ADD_WITH_ALPHA;
|
||||
LLUIImage* imagep = NULL;
|
||||
LLUIImage* imagep = NULL;
|
||||
LLUIImage* image_glow = NULL;
|
||||
|
||||
// Cancel sticking of color, if the button is pressed,
|
||||
// or when a flashing of the previously selected button is ended
|
||||
|
|
@ -767,17 +768,18 @@ void LLButton::draw()
|
|||
imagep = mImageDisabled;
|
||||
}
|
||||
|
||||
image_glow = imagep;
|
||||
|
||||
if (mFlashing)
|
||||
{
|
||||
// if button should flash and we have icon for flashing, use it as image for button
|
||||
if(flash && mImageFlash)
|
||||
if (flash && mImageFlash)
|
||||
{
|
||||
// setting flash to false to avoid its further influence on glow
|
||||
flash = false;
|
||||
imagep = mImageFlash;
|
||||
// if button should flash and we have icon for flashing, use it as image for button
|
||||
image_glow = mImageFlash;
|
||||
}
|
||||
// else use usual flashing via flash_color
|
||||
else if (mFlashingTimer)
|
||||
|
||||
// provide fade-in and fade-out via flash_color
|
||||
if (mFlashingTimer)
|
||||
{
|
||||
LLColor4 flash_color = mFlashBgColor.get();
|
||||
use_glow_effect = TRUE;
|
||||
|
|
@ -791,6 +793,11 @@ void LLButton::draw()
|
|||
{
|
||||
glow_color = highlighting_color;
|
||||
}
|
||||
else
|
||||
{
|
||||
// will fade from highlight color
|
||||
glow_color = flash_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -872,7 +879,7 @@ void LLButton::draw()
|
|||
if (mCurGlowStrength > 0.01f)
|
||||
{
|
||||
gGL.setSceneBlendType(glow_type);
|
||||
imagep->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), glow_color % (mCurGlowStrength * alpha));
|
||||
image_glow->drawSolid(0, 0, getRect().getWidth(), getRect().getHeight(), glow_color % (mCurGlowStrength * alpha));
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
}
|
||||
}
|
||||
|
|
@ -883,7 +890,7 @@ void LLButton::draw()
|
|||
if (mCurGlowStrength > 0.01f)
|
||||
{
|
||||
gGL.setSceneBlendType(glow_type);
|
||||
imagep->drawSolid(0, y, glow_color % (mCurGlowStrength * alpha));
|
||||
image_glow->drawSolid(0, y, glow_color % (mCurGlowStrength * alpha));
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -213,6 +213,7 @@ public:
|
|||
void setFlashing( bool b, bool force_flashing = false );
|
||||
BOOL getFlashing() const { return mFlashing; }
|
||||
LLFlashTimer* getFlashTimer() {return mFlashingTimer;}
|
||||
void setFlashColor(const LLUIColor &color) { mFlashBgColor = color; };
|
||||
|
||||
void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
|
||||
LLFontGL::HAlign getHAlign() const { return mHAlign; }
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@ LLScrollListCtrl::Params::Params()
|
|||
primary_sort_only("primary_sort_only", false), // <FS:Ansariel> Option to only sort by one column
|
||||
mouse_wheel_opaque("mouse_wheel_opaque", false),
|
||||
commit_on_keyboard_movement("commit_on_keyboard_movement", true),
|
||||
commit_on_selection_change("commit_on_selection_change", false),
|
||||
heading_height("heading_height"),
|
||||
page_lines("page_lines", 0),
|
||||
background_visible("background_visible"),
|
||||
|
|
@ -166,7 +167,7 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p)
|
|||
mMaxSelectable(0),
|
||||
mAllowKeyboardMovement(true),
|
||||
mCommitOnKeyboardMovement(p.commit_on_keyboard_movement),
|
||||
mCommitOnSelectionChange(false),
|
||||
mCommitOnSelectionChange(p.commit_on_selection_change),
|
||||
mSelectionChanged(false),
|
||||
mNeedsScroll(false),
|
||||
mCanSelect(true),
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ public:
|
|||
// behavioral flags
|
||||
Optional<bool> multi_select,
|
||||
commit_on_keyboard_movement,
|
||||
commit_on_selection_change,
|
||||
mouse_wheel_opaque;
|
||||
|
||||
// display flags
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@
|
|||
#include "llfloater.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
// Implementation Notes:
|
||||
|
|
@ -224,6 +223,8 @@ LLTabContainer::Params::Params()
|
|||
last_tab("last_tab"),
|
||||
use_custom_icon_ctrl("use_custom_icon_ctrl", false),
|
||||
open_tabs_on_drag_and_drop("open_tabs_on_drag_and_drop", false),
|
||||
enable_tabs_flashing("enable_tabs_flashing", false),
|
||||
tabs_flashing_color("tabs_flashing_color"),
|
||||
tab_icon_ctrl_pad("tab_icon_ctrl_pad", 0),
|
||||
use_ellipses("use_ellipses"),
|
||||
label_shadow("label_shadow",false), // no drop shadowed labels by default -Zi
|
||||
|
|
@ -268,8 +269,10 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p)
|
|||
mCustomIconCtrlUsed(p.use_custom_icon_ctrl),
|
||||
mOpenTabsOnDragAndDrop(p.open_tabs_on_drag_and_drop),
|
||||
mTabIconCtrlPad(p.tab_icon_ctrl_pad),
|
||||
mEnableTabsFlashing(p.enable_tabs_flashing),
|
||||
mTabsFlashingColor(p.tabs_flashing_color),
|
||||
mUseTabEllipses(p.use_ellipses),
|
||||
mDropShadowedText(p.label_shadow) // support for drop shadowed tab labels -Zi
|
||||
mDropShadowedText(p.label_shadow) // <FS:Zi> support for drop shadowed tab labels
|
||||
{
|
||||
// AO: Treat the IM tab container specially
|
||||
if (getName() == "im_box_tab_container")
|
||||
|
|
@ -306,6 +309,11 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p)
|
|||
mMinTabWidth = tabcntr_vert_tab_min_width;
|
||||
}
|
||||
|
||||
if (p.tabs_flashing_color.isProvided())
|
||||
{
|
||||
mEnableTabsFlashing = true;
|
||||
}
|
||||
|
||||
initButtons( );
|
||||
}
|
||||
|
||||
|
|
@ -1248,6 +1256,10 @@ void LLTabContainer::addTabPanel(const TabPanelParams& panel)
|
|||
p.pad_right(2);
|
||||
}
|
||||
|
||||
// inits flash timer
|
||||
p.button_flash_enable = mEnableTabsFlashing;
|
||||
p.flash_color = mTabsFlashingColor;
|
||||
|
||||
// <FS:Ansariel> Enable tab flashing
|
||||
p.button_flash_enable(LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableButtonFlashing"));
|
||||
p.button_flash_count(LLUI::getInstance()->mSettingGroups["config"]->getS32("FlashCount"));
|
||||
|
|
|
|||
|
|
@ -123,6 +123,12 @@ public:
|
|||
* Open tabs on hover in drag and drop situations
|
||||
*/
|
||||
Optional<bool> open_tabs_on_drag_and_drop;
|
||||
|
||||
/**
|
||||
* Enable tab flashing
|
||||
*/
|
||||
Optional<bool> enable_tabs_flashing;
|
||||
Optional<LLUIColor> tabs_flashing_color;
|
||||
|
||||
/**
|
||||
* Paddings for LLIconCtrl in case of LLCustomButtonIconCtrl usage(use_custom_icon_ctrl = true)
|
||||
|
|
@ -343,6 +349,8 @@ private:
|
|||
|
||||
bool mCustomIconCtrlUsed;
|
||||
bool mOpenTabsOnDragAndDrop;
|
||||
bool mEnableTabsFlashing;
|
||||
LLUIColor mTabsFlashingColor;
|
||||
S32 mTabIconCtrlPad;
|
||||
bool mUseTabEllipses;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2431,6 +2431,18 @@ void LLTextBase::needsReflow(S32 index)
|
|||
// [/SL:KB]
|
||||
}
|
||||
|
||||
S32 LLTextBase::removeFirstLine()
|
||||
{
|
||||
if (!mLineInfoList.empty())
|
||||
{
|
||||
S32 length = getLineEnd(0);
|
||||
deselect();
|
||||
removeStringNoUndo(0, length);
|
||||
return length;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void LLTextBase::appendLineBreakSegment(const LLStyle::Params& style_params)
|
||||
{
|
||||
segment_vec_t segments;
|
||||
|
|
|
|||
|
|
@ -435,8 +435,7 @@ public:
|
|||
virtual void setText(const LLStringExplicit &utf8str , const LLStyle::Params& input_params = LLStyle::Params()); // uses default style
|
||||
virtual std::string getText() const;
|
||||
void setMaxTextLength(S32 length) { mMaxTextByteLength = length; }
|
||||
// <FS:Ansariel> Getter for mMaxTextByteLength
|
||||
S32 getMaxTextLength() const { return mMaxTextByteLength; }
|
||||
S32 getMaxTextLength() { return mMaxTextByteLength; }
|
||||
|
||||
// wide-char versions
|
||||
void setWText(const LLWString& text);
|
||||
|
|
@ -465,6 +464,7 @@ public:
|
|||
|
||||
S32 getLength() const { return getWText().length(); }
|
||||
S32 getLineCount() const { return mLineInfoList.size(); }
|
||||
S32 removeFirstLine(); // returns removed length
|
||||
|
||||
void addDocumentChild(LLView* view);
|
||||
void removeDocumentChild(LLView* view);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,11 @@
|
|||
#include "lltexteditor.h"
|
||||
#include "lltextbox.h"
|
||||
|
||||
#if defined BOOST_FOREACH
|
||||
#undef BOOST_FOREACH
|
||||
#define BOOST_FOREACH(iter, coll) for (iter : coll)
|
||||
#endif
|
||||
|
||||
static const S32 LINE_HEIGHT = 15;
|
||||
|
||||
S32 LLView::sDepth = 0;
|
||||
|
|
|
|||
|
|
@ -513,6 +513,7 @@ set(viewer_SOURCE_FILES
|
|||
llmenuoptionpathfindingrebakenavmesh.cpp
|
||||
llmeshrepository.cpp
|
||||
llmimetypes.cpp
|
||||
llmodelpreview.cpp
|
||||
llmorphview.cpp
|
||||
llmoveview.cpp
|
||||
llmutelist.cpp
|
||||
|
|
@ -1280,6 +1281,7 @@ set(viewer_HEADER_FILES
|
|||
llmenuoptionpathfindingrebakenavmesh.h
|
||||
llmeshrepository.h
|
||||
llmimetypes.h
|
||||
llmodelpreview.h
|
||||
llmorphview.h
|
||||
llmoveview.h
|
||||
llmutelist.h
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
6.4.10
|
||||
6.4.11
|
||||
|
|
|
|||
|
|
@ -761,6 +761,17 @@
|
|||
<integer>1</integer>
|
||||
</map>
|
||||
|
||||
<key>FSAllowEEPWaterDerender</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Allow EEP assets to disable water rendering to increase FPS</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
|
||||
<key>FSAlwaysFly</key>
|
||||
<map>
|
||||
|
|
@ -773,7 +784,6 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
|
||||
<key>RadarReportChatRangeEnter</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -9119,188 +9129,6 @@
|
|||
<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>Diffuse colour for the Mesh uploader when textures not shown</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>
|
||||
|
|
@ -10657,17 +10485,6 @@ 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 (must be a power of 2)</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>
|
||||
|
|
|
|||
|
|
@ -93,6 +93,5 @@ void main()
|
|||
col.rgb += light_diffuse[1].rgb * calcDirectionalLight(norm, light_position[1].xyz);
|
||||
col.rgb += light_diffuse[2].rgb * calcDirectionalLight(norm, light_position[2].xyz);
|
||||
col.rgb += light_diffuse[3].rgb * calcDirectionalLight(norm, light_position[3].xyz);
|
||||
col /= 2.0;
|
||||
vertex_color = col*color;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8925,8 +8925,8 @@
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="hair"
|
||||
width="512"
|
||||
height="512"
|
||||
width="1024"
|
||||
height="1024"
|
||||
clear_alpha="false">
|
||||
<layer
|
||||
name="base"
|
||||
|
|
@ -9015,8 +9015,8 @@
|
|||
|
||||
<layer_set
|
||||
body_region="head"
|
||||
width="512"
|
||||
height="512">
|
||||
width="1024"
|
||||
height="1024">
|
||||
<layer
|
||||
name="head bump base"
|
||||
fixed_color = "128,128,128,255"
|
||||
|
|
@ -10151,8 +10151,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="upper_body"
|
||||
width="512"
|
||||
height="512">
|
||||
width="1024"
|
||||
height="1024">
|
||||
<layer
|
||||
name="base_upperbody bump"
|
||||
render_pass="bump"
|
||||
|
|
@ -11460,8 +11460,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="lower_body"
|
||||
width="512"
|
||||
height="512">
|
||||
width="1024"
|
||||
height="1024">
|
||||
<layer
|
||||
name="lower body bump base"
|
||||
fixed_color = "128,128,128,255"
|
||||
|
|
@ -12537,8 +12537,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="skirt"
|
||||
width="512"
|
||||
height="512"
|
||||
width="1024"
|
||||
height="1024"
|
||||
clear_alpha="false">
|
||||
<layer
|
||||
name="skirt_fabric"
|
||||
|
|
@ -12776,8 +12776,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="leftarm"
|
||||
width="512"
|
||||
height="512"
|
||||
width="1024"
|
||||
height="1024"
|
||||
clear_alpha="false">
|
||||
<layer
|
||||
name="base"
|
||||
|
|
@ -12852,8 +12852,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="leftleg"
|
||||
width="512"
|
||||
height="512"
|
||||
width="1024"
|
||||
height="1024"
|
||||
clear_alpha="false">
|
||||
|
||||
<layer
|
||||
|
|
@ -12921,8 +12921,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="aux1"
|
||||
width="512"
|
||||
height="512"
|
||||
width="1024"
|
||||
height="1024"
|
||||
clear_alpha="false">
|
||||
|
||||
<layer
|
||||
|
|
@ -12990,8 +12990,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="aux2"
|
||||
width="512"
|
||||
height="512"
|
||||
width="1024"
|
||||
height="1024"
|
||||
clear_alpha="false">
|
||||
|
||||
<layer
|
||||
|
|
@ -13059,8 +13059,8 @@ render_pass="bump">
|
|||
<!-- =========================================================== -->
|
||||
<layer_set
|
||||
body_region="aux3"
|
||||
width="512"
|
||||
height="512"
|
||||
width="1024"
|
||||
height="1024"
|
||||
clear_alpha="false">
|
||||
|
||||
<layer
|
||||
|
|
@ -17473,4 +17473,3 @@ render_pass="bump">
|
|||
layer="lower_pants" />
|
||||
</morph_masks>
|
||||
</linden_avatar>
|
||||
|
||||
|
|
|
|||
|
|
@ -533,7 +533,7 @@ void FSFloaterSearch::displayClassifiedDetails(LLAvatarClassifiedInfo*& c_info)
|
|||
map["LISTING_PRICE"] = llformat("L$%d", c_info->price_for_listing);
|
||||
map["SLURL"] = LLSLURL("parcel", c_info->parcel_id, "about").getSLURLString();
|
||||
|
||||
mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_groupspanel_ls_classifieds");
|
||||
mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_classifieds");
|
||||
mHasSelection = true;
|
||||
mDetailMaturity->setVisible(true);
|
||||
mParcelGlobal = c_info->pos_global;
|
||||
|
|
|
|||
|
|
@ -148,13 +148,11 @@ void FSFloaterWearableFavorites::onOpen(const LLSD& /*info*/)
|
|||
{
|
||||
if (!mInitialized)
|
||||
{
|
||||
if (!gInventory.isInventoryUsable())
|
||||
if (sFolderID.isNull())
|
||||
{
|
||||
return;
|
||||
initCategory();
|
||||
}
|
||||
|
||||
initCategory();
|
||||
|
||||
LLViewerInventoryCategory* category = gInventory.getCategory(sFolderID);
|
||||
if (!category)
|
||||
{
|
||||
|
|
@ -201,8 +199,15 @@ BOOL FSFloaterWearableFavorites::handleKeyHere(KEY key, MASK mask)
|
|||
return LLFloater::handleKeyHere(key, mask);
|
||||
}
|
||||
|
||||
// static
|
||||
void FSFloaterWearableFavorites::initCategory()
|
||||
{
|
||||
if (!gInventory.isInventoryUsable())
|
||||
{
|
||||
LL_WARNS() << "Cannot initialize Favorite Wearables inventory folder - inventory is not usable!" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLUUID fs_favs_id;
|
||||
|
||||
LLUUID fs_root_cat_id = gInventory.findCategoryByName(ROOT_FIRESTORM_FOLDER);
|
||||
|
|
|
|||
|
|
@ -78,10 +78,10 @@ public:
|
|||
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
|
||||
/*virtual*/ bool hasAccelerators() const { return true; }
|
||||
|
||||
static void initCategory();
|
||||
static LLUUID getFavoritesFolder();
|
||||
|
||||
private:
|
||||
void initCategory();
|
||||
void updateList(const LLUUID& folder_id);
|
||||
|
||||
void onItemDAD(const LLUUID& item_id);
|
||||
|
|
|
|||
|
|
@ -95,10 +95,13 @@ void LLDrawPoolSky::render(S32 pass)
|
|||
|
||||
LLGLSPipelineDepthTestSkyBox gls_skybox(true, false);
|
||||
|
||||
LLGLEnable fog_enable( (mShaderLevel < 1 && LLViewerCamera::getInstance()->cameraUnderWater()) ? GL_FOG : 0);
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLViewerCamera& camera = LLViewerCamera::instance();
|
||||
|
||||
LLGLEnable fog_enable( (mShaderLevel < 1 && camera.cameraUnderWater()) ? GL_FOG : 0); // <FS:Ansariel> Factor out instance() calls
|
||||
|
||||
gGL.pushMatrix();
|
||||
LLVector3 origin = LLViewerCamera::getInstance()->getOrigin();
|
||||
LLVector3 origin = camera.getOrigin(); // <FS:Ansariel> Factor out instance() calls
|
||||
gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]);
|
||||
|
||||
S32 face_count = (S32)mDrawFace.size();
|
||||
|
|
|
|||
|
|
@ -209,11 +209,14 @@ void LLDrawPoolWater::render(S32 pass)
|
|||
gGL.getTexUnit(2)->enable(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(2)->bind(mWaterImagep[1]) ;
|
||||
|
||||
LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis();
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLViewerCamera& camera = LLViewerCamera::instance();
|
||||
|
||||
LLVector3 camera_up = camera.getUpAxis(); // <FS:Ansariel> Factor out instance() calls
|
||||
F32 up_dot = camera_up * LLVector3::z_axis;
|
||||
|
||||
LLColor4 water_color;
|
||||
if (LLViewerCamera::getInstance()->cameraUnderWater())
|
||||
if (camera.cameraUnderWater()) // <FS:Ansariel> Factor out instance() calls
|
||||
{
|
||||
water_color.setVec(1.f, 1.f, 1.f, 0.4f);
|
||||
}
|
||||
|
|
@ -288,7 +291,7 @@ void LLDrawPoolWater::render(S32 pass)
|
|||
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadIdentity();
|
||||
LLMatrix4 camera_mat = LLViewerCamera::getInstance()->getModelview();
|
||||
LLMatrix4 camera_mat = camera.getModelview(); // <FS:Ansariel> Factor out instance() calls
|
||||
LLMatrix4 camera_rot(camera_mat.getMat3());
|
||||
camera_rot.invert();
|
||||
|
||||
|
|
@ -476,12 +479,16 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
|
|||
|
||||
void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& light_diffuse, const LLVector3& light_dir, F32 light_exp)
|
||||
{
|
||||
F32 water_height = LLEnvironment::instance().getWaterHeight();
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLEnvironment& environment = LLEnvironment::instance();
|
||||
LLViewerCamera& camera = LLViewerCamera::instance();
|
||||
|
||||
F32 water_height = environment.getWaterHeight(); // <FS:Ansariel> Factor out instance() calls
|
||||
F32 camera_height = LLViewerCamera::getInstance()->getOrigin().mV[2];
|
||||
F32 eyedepth = camera_height - water_height;
|
||||
bool underwater = eyedepth <= 0.0f;
|
||||
|
||||
LLEnvironment& environment = LLEnvironment::instance();
|
||||
//LLEnvironment& environment = LLEnvironment::instance(); // <FS:Ansariel> Factor out instance() calls
|
||||
LLSettingsWater::ptr_t pwater = environment.getCurrentWater();
|
||||
LLSettingsSky::ptr_t psky = environment.getCurrentSky();
|
||||
|
||||
|
|
@ -518,7 +525,9 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li
|
|||
LLViewerTexture* tex_a = mWaterNormp[0];
|
||||
LLViewerTexture* tex_b = mWaterNormp[1];
|
||||
|
||||
F32 blend_factor = LLEnvironment::instance().getCurrentWater()->getBlendFactor();
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
//F32 blend_factor = LLEnvironment::instance().getCurrentWater()->getBlendFactor();
|
||||
F32 blend_factor = pwater->getBlendFactor();
|
||||
|
||||
gGL.getTexUnit(bumpTex)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gGL.getTexUnit(bumpTex2)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
|
|
@ -575,10 +584,10 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li
|
|||
//shader->uniformMatrix4fv("inverse_ref", 1, GL_FALSE, (GLfloat*) gGLObliqueProjectionInverse.mMatrix);
|
||||
shader->uniform1f(LLShaderMgr::WATER_WATERHEIGHT, eyedepth);
|
||||
shader->uniform1f(LLShaderMgr::WATER_TIME, sTime);
|
||||
shader->uniform3fv(LLShaderMgr::WATER_EYEVEC, 1, LLViewerCamera::getInstance()->getOrigin().mV);
|
||||
shader->uniform3fv(LLShaderMgr::WATER_EYEVEC, 1, camera.getOrigin().mV); // <FS:Ansariel> Factor out instance() calls
|
||||
shader->uniform3fv(LLShaderMgr::WATER_SPECULAR, 1, light_diffuse.mV);
|
||||
shader->uniform1f(LLShaderMgr::WATER_SPECULAR_EXP, light_exp);
|
||||
if (LLEnvironment::instance().isCloudScrollPaused())
|
||||
if (environment.isCloudScrollPaused()) // <FS:Ansariel> Factor out instance() calls
|
||||
{
|
||||
static const std::array<F32, 2> zerowave{ {0.0f, 0.0f} };
|
||||
|
||||
|
|
@ -606,11 +615,11 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li
|
|||
shader->uniform1f(LLShaderMgr::WATER_SUN_ANGLE2, 0.1f + 0.2f*sunAngle);
|
||||
shader->uniform1i(LLShaderMgr::WATER_EDGE_FACTOR, edge ? 1 : 0);
|
||||
|
||||
LLVector4 rotated_light_direction = LLEnvironment::instance().getRotatedLightNorm();
|
||||
LLVector4 rotated_light_direction = environment.getRotatedLightNorm(); // <FS:Ansariel> Factor out instance() calls
|
||||
shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, rotated_light_direction.mV);
|
||||
shader->uniform3fv(LLShaderMgr::WL_CAMPOSLOCAL, 1, LLViewerCamera::getInstance()->getOrigin().mV);
|
||||
shader->uniform3fv(LLShaderMgr::WL_CAMPOSLOCAL, 1, camera.getOrigin().mV); // <FS:Ansariel> Factor out instance() calls
|
||||
|
||||
if (LLViewerCamera::getInstance()->cameraUnderWater())
|
||||
if (camera.cameraUnderWater()) // <FS:Ansariel> Factor out instance() calls
|
||||
{
|
||||
shader->uniform1f(LLShaderMgr::WATER_REFSCALE, pwater->getScaleBelow());
|
||||
}
|
||||
|
|
@ -740,7 +749,7 @@ void LLDrawPoolWater::shade()
|
|||
LLGLSLShader* shader = nullptr;
|
||||
LLGLSLShader* edge_shader = nullptr;
|
||||
|
||||
F32 eyedepth = LLViewerCamera::getInstance()->getOrigin().mV[2] - LLEnvironment::instance().getWaterHeight();
|
||||
F32 eyedepth = LLViewerCamera::getInstance()->getOrigin().mV[2] - environment.getWaterHeight(); // <FS:Ansariel> Factor out instance() calls
|
||||
|
||||
if (eyedepth < 0.f && LLPipeline::sWaterReflections)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -302,7 +302,10 @@ void LLDrawPoolWLSky::renderStarsDeferred(void) const
|
|||
|
||||
gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
|
||||
|
||||
F32 star_alpha = LLEnvironment::instance().getCurrentSky()->getStarBrightness() / 500.0f;
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLSettingsSky::ptr_t current_sky = LLEnvironment::instance().getCurrentSky();
|
||||
|
||||
F32 star_alpha = current_sky->getStarBrightness() / 500.0f; // <FS:Ansariel> Factor out instance() calls
|
||||
|
||||
// If start_brightness is not set, exit
|
||||
if(star_alpha < 0.001f)
|
||||
|
|
@ -316,7 +319,7 @@ void LLDrawPoolWLSky::renderStarsDeferred(void) const
|
|||
LLViewerTexture* tex_a = gSky.mVOSkyp->getBloomTex();
|
||||
LLViewerTexture* tex_b = gSky.mVOSkyp->getBloomTexNext();
|
||||
|
||||
F32 blend_factor = LLEnvironment::instance().getCurrentSky()->getBlendFactor();
|
||||
F32 blend_factor = current_sky->getBlendFactor(); // <FS:Ansariel> Factor out instance() calls
|
||||
|
||||
if (tex_a && (!tex_b || (tex_a == tex_b)))
|
||||
{
|
||||
|
|
@ -479,7 +482,10 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
|
|||
|
||||
LLFace * face = gSky.mVOSkyp->mFace[LLVOSky::FACE_SUN];
|
||||
|
||||
F32 blend_factor = LLEnvironment::instance().getCurrentSky()->getBlendFactor();
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
|
||||
|
||||
F32 blend_factor = psky->getBlendFactor(); // <FS:Ansariel> Factor out instance() calls
|
||||
bool can_use_vertex_shaders = gPipeline.canUseVertexShaders();
|
||||
bool can_use_windlight_shaders = gPipeline.canUseWindLightShaders();
|
||||
|
||||
|
|
@ -562,7 +568,8 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
|
|||
//moon_shader->bindTexture(LLShaderMgr::ALTERNATE_DIFFUSE_MAP, tex_b, LLTexUnit::TT_TEXTURE);
|
||||
}
|
||||
|
||||
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
//LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
|
||||
|
||||
F32 moon_brightness = (float)psky->getMoonBrightness();
|
||||
|
||||
|
|
|
|||
|
|
@ -1527,6 +1527,34 @@ LLEnvironment::DayInstance::ptr_t LLEnvironment::getSharedEnvironmentInstance()
|
|||
void LLEnvironment::updateEnvironment(LLSettingsBase::Seconds transition, bool forced)
|
||||
{
|
||||
DayInstance::ptr_t pinstance = getSelectedEnvironmentInstance();
|
||||
// <FS:Beq> Auto-disable water rendering via hasEEPWaterDerender
|
||||
// Allow parcel and region owners to disable water rendering for their visitors through an EEP setting
|
||||
// We test for the IMG_TRANSPARENT in the NormalMap channel, this is not a valid normal map so cannot clash with
|
||||
// any valid EEP asset use.It also allows non-FS users to create these assets.
|
||||
if(gSavedSettings.getBOOL("FSAllowEEPWaterDerender"))
|
||||
{
|
||||
auto targetWater = pinstance->getWater();
|
||||
static bool hasEEPWaterDerender{false};
|
||||
if(targetWater && targetWater->getNormalMapID()==IMG_TRANSPARENT)
|
||||
{
|
||||
// This EEP has explicit transparent water so let's disable rendering of water
|
||||
if(LLPipeline::hasRenderTypeControl(LLPipeline::RENDER_TYPE_WATER))
|
||||
{
|
||||
hasEEPWaterDerender = true;// remember that it was us who disabled it.
|
||||
LLPipeline::toggleRenderTypeControl(LLPipeline::RENDER_TYPE_WATER);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise re-enable it, only if it was us that disabled it
|
||||
if(hasEEPWaterDerender && !LLPipeline::hasRenderTypeControl(LLPipeline::RENDER_TYPE_WATER))
|
||||
{
|
||||
LLPipeline::toggleRenderTypeControl(LLPipeline::RENDER_TYPE_WATER);
|
||||
}
|
||||
hasEEPWaterDerender = false; // regardless of whether it was disabled it is no longer our problem
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
if ((mCurrentEnvironment != pinstance) || forced)
|
||||
{
|
||||
|
|
@ -1777,6 +1805,17 @@ void LLEnvironment::updateShaderUniforms(LLGLSLShader *shader)
|
|||
|
||||
void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envinfo, LLSettingsBase::Seconds transition)
|
||||
{
|
||||
if (!gAgent.getRegion())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// mRegionId id can be null, no specification as to why and if it's valid so check valid ids only
|
||||
if (gAgent.getRegion()->getRegionID() != envinfo->mRegionId && envinfo->mRegionId.notNull())
|
||||
{
|
||||
LL_INFOS("ENVIRONMENT") << "Requested environmend region id: " << envinfo->mRegionId << " agent is on: " << gAgent.getRegion()->getRegionID() << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (envinfo->mParcelId == INVALID_PARCEL_ID)
|
||||
{
|
||||
// the returned info applies to an entire region.
|
||||
|
|
|
|||
|
|
@ -496,7 +496,8 @@ void LLFloaterFixedEnvironment::onSaveAsCommit(const LLSD& notification, const L
|
|||
{
|
||||
const LLUUID &marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
|
||||
LLUUID parent_id = mInventoryItem->getParentUUID();
|
||||
if (marketplacelistings_id == parent_id)
|
||||
|
||||
if ((marketplacelistings_id == parent_id) || gInventory.isObjectDescendentOf(mInventoryItem->getUUID(), gInventory.getLibraryRootFolderID()))
|
||||
{
|
||||
parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS);
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -28,36 +28,26 @@
|
|||
#define LL_LLFLOATERMODELPREVIEW_H
|
||||
|
||||
#include "llfloaternamedesc.h"
|
||||
|
||||
#include "lldynamictexture.h"
|
||||
#include "llquaternion.h"
|
||||
#include "llmeshrepository.h"
|
||||
#include "llmodel.h"
|
||||
#include "llthread.h"
|
||||
#include "llviewermenufile.h"
|
||||
#include "llfloatermodeluploadbase.h"
|
||||
|
||||
#include "lldaeloader.h"
|
||||
#include "llmeshrepository.h"
|
||||
|
||||
class LLComboBox;
|
||||
class LLJoint;
|
||||
class LLViewerJointMesh;
|
||||
class LLVOAvatar;
|
||||
class LLTextBox;
|
||||
class LLVertexBuffer;
|
||||
class LLMeshFilePicker;
|
||||
class LLModelPreview;
|
||||
class LLFloaterModelPreview;
|
||||
class DAE;
|
||||
class daeElement;
|
||||
class domProfile_COMMON;
|
||||
class domInstance_geometry;
|
||||
class domNode;
|
||||
class domTranslate;
|
||||
class domController;
|
||||
class domSkin;
|
||||
class domMesh;
|
||||
class LLMenuButton;
|
||||
class LLToggleableMenu;
|
||||
class LLTabContainer;
|
||||
class LLViewerTextEditor;
|
||||
|
||||
|
||||
class LLJointOverrideData
|
||||
{
|
||||
public:
|
||||
LLJointOverrideData() : mHasConflicts(false) {};
|
||||
std::map<std::string, LLVector3> mPosOverrides; // models with overrides
|
||||
std::set<std::string> mModelsNoOverrides; // models without defined overrides
|
||||
bool mHasConflicts;
|
||||
};
|
||||
typedef std::map<std::string, LLJointOverrideData> joint_override_data_map_t;
|
||||
|
||||
class LLFloaterModelPreview : public LLFloaterModelUploadBase
|
||||
{
|
||||
|
|
@ -80,6 +70,7 @@ public:
|
|||
virtual ~LLFloaterModelPreview();
|
||||
|
||||
virtual BOOL postBuild();
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
void initModelPreview();
|
||||
|
||||
|
|
@ -93,6 +84,11 @@ public:
|
|||
|
||||
static void onMouseCaptureLostModelPreview(LLMouseHandler*);
|
||||
static void setUploadAmount(S32 amount) { sUploadAmount = amount; }
|
||||
static void addStringToLog(const std::string& message, const LLSD& args, bool flash, S32 lod = -1);
|
||||
static void addStringToLog(const std::string& str, bool flash);
|
||||
static void addStringToLog(const std::ostringstream& strm, bool flash);
|
||||
void clearAvatarTab(); // clears table
|
||||
void updateAvatarTab(bool highlight_overrides); // populates table and data as nessesary
|
||||
|
||||
void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);
|
||||
void setPreviewLOD(S32 lod);
|
||||
|
|
@ -107,6 +103,8 @@ public:
|
|||
|
||||
void loadModel(S32 lod);
|
||||
void loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
|
||||
|
||||
void loadHighLodModel();
|
||||
|
||||
void onViewOptionChecked(LLUICtrl* ctrl);
|
||||
void onUploadOptionChecked(LLUICtrl* ctrl);
|
||||
|
|
@ -115,6 +113,7 @@ public:
|
|||
void setViewOptionEnabled(const std::string& option, bool enabled);
|
||||
void enableViewOption(const std::string& option);
|
||||
void disableViewOption(const std::string& option);
|
||||
void onShowSkinWeightChecked(LLUICtrl* ctrl);
|
||||
|
||||
bool isModelLoading();
|
||||
|
||||
|
|
@ -143,8 +142,6 @@ protected:
|
|||
|
||||
static void onImportScaleCommit(LLUICtrl*, void*);
|
||||
static void onPelvisOffsetCommit(LLUICtrl*, void*);
|
||||
static void onUploadJointsCommit(LLUICtrl*,void*);
|
||||
static void onUploadSkinCommit(LLUICtrl*,void*);
|
||||
|
||||
static void onPreviewLODCommit(LLUICtrl*,void*);
|
||||
|
||||
|
|
@ -177,7 +174,10 @@ protected:
|
|||
// FIXME - this function and mStatusMessage have no visible effect, and the
|
||||
// actual status messages are managed by directly manipulation of
|
||||
// the UI element.
|
||||
void setStatusMessage(const std::string& msg);
|
||||
void setStatusMessage(const std::string& msg);
|
||||
void addStringToLogTab(const std::string& str, bool flash);
|
||||
|
||||
void setCtrlLoadFromFile(S32 lod);
|
||||
|
||||
LLModelPreview* mModelPreview;
|
||||
|
||||
|
|
@ -206,226 +206,34 @@ protected:
|
|||
LLSD mModelPhysicsFee;
|
||||
|
||||
private:
|
||||
void onClickCalculateBtn();
|
||||
void onClickCalculateBtn();
|
||||
void onJointListSelection();
|
||||
|
||||
void onLoDSourceCommit(S32 lod);
|
||||
|
||||
void modelUpdated(bool calculate_visible);
|
||||
|
||||
// Toggles between "Calculate weights & fee" and "Upload" buttons.
|
||||
void toggleCalculateButton();
|
||||
void toggleCalculateButton(bool visible);
|
||||
|
||||
// resets display options of model preview to their defaults.
|
||||
void resetDisplayOptions();
|
||||
|
||||
void resetUploadOptions();
|
||||
void clearLogTab();
|
||||
|
||||
void createSmoothComboBox(LLComboBox* combo_box, float min, float max);
|
||||
|
||||
LLButton* mUploadBtn;
|
||||
LLButton* mCalculateBtn;
|
||||
};
|
||||
LLViewerTextEditor* mUploadLogText;
|
||||
LLTabContainer* mTabContainer;
|
||||
|
||||
class LLMeshFilePicker : public LLFilePickerThread
|
||||
{
|
||||
public:
|
||||
LLMeshFilePicker(LLModelPreview* mp, S32 lod);
|
||||
virtual void notify(const std::vector<std::string>& filenames);
|
||||
S32 mAvatarTabIndex; // just to avoid any issues in case of xml changes
|
||||
std::string mSelectedJointName;
|
||||
|
||||
private:
|
||||
LLModelPreview* mMP;
|
||||
S32 mLOD;
|
||||
};
|
||||
|
||||
|
||||
class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
|
||||
{
|
||||
typedef boost::signals2::signal<void (F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost)> details_signal_t;
|
||||
typedef boost::signals2::signal<void (void)> model_loaded_signal_t;
|
||||
typedef boost::signals2::signal<void (bool)> model_updated_signal_t;
|
||||
|
||||
public:
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LOD_FROM_FILE = 0,
|
||||
GENERATE,
|
||||
USE_LOD_ABOVE,
|
||||
} eLoDMode;
|
||||
|
||||
public:
|
||||
LLModelPreview(S32 width, S32 height, LLFloater* fmp);
|
||||
virtual ~LLModelPreview();
|
||||
|
||||
void resetPreviewTarget();
|
||||
void setPreviewTarget(F32 distance);
|
||||
void setTexture(U32 name) { mTextureName = name; }
|
||||
|
||||
void setPhysicsFromLOD(S32 lod);
|
||||
BOOL render();
|
||||
void update();
|
||||
void genBuffers(S32 lod, bool skinned);
|
||||
void clearBuffers();
|
||||
void refresh();
|
||||
void rotate(F32 yaw_radians, F32 pitch_radians);
|
||||
void zoom(F32 zoom_amt);
|
||||
void pan(F32 right, F32 up);
|
||||
virtual BOOL needsRender() { return mNeedsUpdate; }
|
||||
void setPreviewLOD(S32 lod);
|
||||
void clearModel(S32 lod);
|
||||
void getJointAliases(JointMap& joint_map);
|
||||
void loadModel(std::string filename, S32 lod, bool force_disable_slm = false);
|
||||
void loadModelCallback(S32 lod);
|
||||
bool lodsReady() { return !mGenLOD && mLodsQuery.empty(); }
|
||||
void queryLODs() { mGenLOD = true; };
|
||||
void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);
|
||||
void generateNormals();
|
||||
void restoreNormals();
|
||||
U32 calcResourceCost();
|
||||
void rebuildUploadData();
|
||||
void saveUploadData(bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position);
|
||||
void saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position);
|
||||
void clearIncompatible(S32 lod);
|
||||
void updateStatusMessages();
|
||||
void updateLodControls(S32 lod);
|
||||
void clearGLODGroup();
|
||||
void onLODParamCommit(S32 lod, bool enforce_tri_limit);
|
||||
void addEmptyFace( LLModel* pTarget );
|
||||
|
||||
const bool getModelPivot( void ) const { return mHasPivot; }
|
||||
void setHasPivot( bool val ) { mHasPivot = val; }
|
||||
void setModelPivot( const LLVector3& pivot ) { mModelPivot = pivot; }
|
||||
|
||||
//Is a rig valid so that it can be used as a criteria for allowing for uploading of joint positions
|
||||
//Accessors for joint position upload friendly rigs
|
||||
const bool isRigValidForJointPositionUpload( void ) const { return mRigValidJointUpload; }
|
||||
void setRigValidForJointPositionUpload( bool rigValid ) { mRigValidJointUpload = rigValid; }
|
||||
|
||||
//Accessors for the legacy rigs
|
||||
const bool isLegacyRigValid( void ) const { return mLegacyRigValid; }
|
||||
void setLegacyRigValid( bool rigValid ) { mLegacyRigValid = rigValid; }
|
||||
|
||||
static void textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata );
|
||||
static bool lodQueryCallback();
|
||||
|
||||
boost::signals2::connection setDetailsCallback( const details_signal_t::slot_type& cb ){ return mDetailsSignal.connect(cb); }
|
||||
boost::signals2::connection setModelLoadedCallback( const model_loaded_signal_t::slot_type& cb ){ return mModelLoadedSignal.connect(cb); }
|
||||
boost::signals2::connection setModelUpdatedCallback( const model_updated_signal_t::slot_type& cb ){ return mModelUpdatedSignal.connect(cb); }
|
||||
|
||||
void setLoadState( U32 state ) { mLoadState = state; }
|
||||
U32 getLoadState() { return mLoadState; }
|
||||
|
||||
static bool sIgnoreLoadedCallback;
|
||||
std::vector<S32> mLodsQuery;
|
||||
std::vector<S32> mLodsWithParsingError;
|
||||
bool mHasDegenerate;
|
||||
|
||||
protected:
|
||||
|
||||
static void loadedCallback(LLModelLoader::scene& scene,LLModelLoader::model_list& model_list, S32 lod, void* opaque);
|
||||
static void stateChangedCallback(U32 state, void* opaque);
|
||||
|
||||
static LLJoint* lookupJointByName(const std::string&, void* opaque);
|
||||
static U32 loadTextures(LLImportMaterial& material, void* opaque);
|
||||
|
||||
private:
|
||||
//Utility function for controller vertex compare
|
||||
bool verifyCount( int expected, int result );
|
||||
//Creates the dummy avatar for the preview window
|
||||
void createPreviewAvatar( void );
|
||||
//Accessor for the dummy avatar
|
||||
LLVOAvatar* getPreviewAvatar( void ) { return mPreviewAvatar; }
|
||||
// Count amount of original models, excluding sub-models
|
||||
static U32 countRootModels(LLModelLoader::model_list models);
|
||||
|
||||
protected:
|
||||
friend class LLModelLoader;
|
||||
friend class LLFloaterModelPreview;
|
||||
friend class LLFloaterModelPreview::DecompRequest;
|
||||
friend class LLPhysicsDecomp;
|
||||
|
||||
LLFloater* mFMP;
|
||||
|
||||
LLPointer<LLViewerFetchedTexture> mUVGuideTexture; // <FS:Beq> Add UV Guide texture overlay
|
||||
BOOL mNeedsUpdate;
|
||||
bool mDirty;
|
||||
bool mGenLOD;
|
||||
U32 mTextureName;
|
||||
F32 mCameraDistance;
|
||||
F32 mCameraYaw;
|
||||
F32 mCameraPitch;
|
||||
F32 mCameraZoom;
|
||||
LLVector3 mCameraOffset;
|
||||
LLVector3 mPreviewTarget;
|
||||
LLVector3 mPreviewScale;
|
||||
S32 mPreviewLOD;
|
||||
S32 mPhysicsSearchLOD;
|
||||
U32 mResourceCost;
|
||||
std::string mLODFile[LLModel::NUM_LODS];
|
||||
bool mLoading;
|
||||
U32 mLoadState;
|
||||
bool mResetJoints;
|
||||
bool mModelNoErrors;
|
||||
|
||||
std::map<std::string, bool> mViewOption;
|
||||
|
||||
//GLOD object parameters (must rebuild object if these change)
|
||||
bool mLODFrozen;
|
||||
F32 mBuildShareTolerance;
|
||||
U32 mBuildQueueMode;
|
||||
U32 mBuildOperator;
|
||||
U32 mBuildBorderMode;
|
||||
U32 mRequestedLoDMode[LLModel::NUM_LODS];
|
||||
S32 mRequestedTriangleCount[LLModel::NUM_LODS];
|
||||
F32 mRequestedErrorThreshold[LLModel::NUM_LODS];
|
||||
U32 mRequestedBuildOperator[LLModel::NUM_LODS];
|
||||
U32 mRequestedQueueMode[LLModel::NUM_LODS];
|
||||
U32 mRequestedBorderMode[LLModel::NUM_LODS];
|
||||
F32 mRequestedShareTolerance[LLModel::NUM_LODS];
|
||||
F32 mRequestedCreaseAngle[LLModel::NUM_LODS];
|
||||
|
||||
LLModelLoader* mModelLoader;
|
||||
|
||||
LLModelLoader::scene mScene[LLModel::NUM_LODS];
|
||||
LLModelLoader::scene mBaseScene;
|
||||
|
||||
LLModelLoader::model_list mModel[LLModel::NUM_LODS];
|
||||
LLModelLoader::model_list mBaseModel;
|
||||
|
||||
typedef std::vector<LLVolumeFace> v_LLVolumeFace_t;
|
||||
typedef std::vector<v_LLVolumeFace_t> vv_LLVolumeFace_t;
|
||||
|
||||
vv_LLVolumeFace_t mModelFacesCopy[LLModel::NUM_LODS];
|
||||
vv_LLVolumeFace_t mBaseModelFacesCopy;
|
||||
|
||||
U32 mGroup;
|
||||
std::map<LLPointer<LLModel>, U32> mObject;
|
||||
U32 mMaxTriangleLimit;
|
||||
|
||||
LLMeshUploadThread::instance_list mUploadData;
|
||||
std::set<LLViewerFetchedTexture * > mTextureSet;
|
||||
|
||||
//map of vertex buffers to models (one vertex buffer in vector per face in model
|
||||
std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mVertexBuffer[LLModel::NUM_LODS+1];
|
||||
|
||||
details_signal_t mDetailsSignal;
|
||||
model_loaded_signal_t mModelLoadedSignal;
|
||||
model_updated_signal_t mModelUpdatedSignal;
|
||||
|
||||
LLVector3 mModelPivot;
|
||||
bool mHasPivot;
|
||||
|
||||
float mPelvisZOffset;
|
||||
|
||||
bool mRigValidJointUpload;
|
||||
bool mLegacyRigValid;
|
||||
|
||||
bool mLastJointUpdate;
|
||||
|
||||
JointNameSet mJointsFromNode;
|
||||
JointTransformMap mJointTransformMap;
|
||||
|
||||
LLPointer<LLVOAvatar> mPreviewAvatar;
|
||||
joint_override_data_map_t mJointOverrides[LLModel::NUM_LODS];
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERMODELPREVIEW_H
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
#define LL_LLFLOATERWORLDMAP_H
|
||||
|
||||
#include "llfloater.h"
|
||||
#include "llhudtext.h"
|
||||
#include "llmapimagetype.h"
|
||||
#include "lltracker.h"
|
||||
#include "llslurl.h"
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ protected:
|
|||
static void sortObjects();
|
||||
|
||||
LLHUDObject(const U8 type);
|
||||
~LLHUDObject();
|
||||
virtual ~LLHUDObject();
|
||||
|
||||
virtual void render() = 0;
|
||||
virtual void renderForTimer() {};
|
||||
|
|
|
|||
|
|
@ -607,7 +607,10 @@ S32 LLHUDText::getMaxLines()
|
|||
|
||||
void LLHUDText::markDead()
|
||||
{
|
||||
sTextObjects.erase(LLPointer<LLHUDText>(this));
|
||||
// make sure we have at least one pointer
|
||||
// till the end of the function
|
||||
LLPointer<LLHUDText> ptr(this);
|
||||
sTextObjects.erase(ptr);
|
||||
LLHUDObject::markDead();
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,314 @@
|
|||
/**
|
||||
* @file llmodelpreview.h
|
||||
* @brief LLModelPreview class definition, class
|
||||
* responsible for model preview inside LLFloaterModelPreview
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLMODELPREVIEW_H
|
||||
#define LL_LLMODELPREVIEW_H
|
||||
|
||||
#include "lldynamictexture.h"
|
||||
#include "llfloatermodelpreview.h"
|
||||
#include "llmeshrepository.h"
|
||||
#include "llmodelloader.h" //NUM_LOD
|
||||
#include "llmodel.h"
|
||||
|
||||
class LLJoint;
|
||||
class LLVOAvatar;
|
||||
class LLTextBox;
|
||||
class LLVertexBuffer;
|
||||
class DAE;
|
||||
class daeElement;
|
||||
class domProfile_COMMON;
|
||||
class domInstance_geometry;
|
||||
class domNode;
|
||||
class domTranslate;
|
||||
class domController;
|
||||
class domSkin;
|
||||
class domMesh;
|
||||
|
||||
// const strings needed by classes that use model preivew
|
||||
static const std::string lod_name[NUM_LOD + 1] =
|
||||
{
|
||||
"lowest",
|
||||
"low",
|
||||
"medium",
|
||||
"high",
|
||||
"I went off the end of the lod_name array. Me so smart."
|
||||
};
|
||||
|
||||
static const std::string lod_triangles_name[NUM_LOD + 1] =
|
||||
{
|
||||
"lowest_triangles",
|
||||
"low_triangles",
|
||||
"medium_triangles",
|
||||
"high_triangles",
|
||||
"I went off the end of the lod_triangles_name array. Me so smart."
|
||||
};
|
||||
|
||||
static const std::string lod_vertices_name[NUM_LOD + 1] =
|
||||
{
|
||||
"lowest_vertices",
|
||||
"low_vertices",
|
||||
"medium_vertices",
|
||||
"high_vertices",
|
||||
"I went off the end of the lod_vertices_name array. Me so smart."
|
||||
};
|
||||
|
||||
static const std::string lod_status_name[NUM_LOD + 1] =
|
||||
{
|
||||
"lowest_status",
|
||||
"low_status",
|
||||
"medium_status",
|
||||
"high_status",
|
||||
"I went off the end of the lod_status_name array. Me so smart."
|
||||
};
|
||||
|
||||
static const std::string lod_icon_name[NUM_LOD + 1] =
|
||||
{
|
||||
"status_icon_lowest",
|
||||
"status_icon_low",
|
||||
"status_icon_medium",
|
||||
"status_icon_high",
|
||||
"I went off the end of the lod_status_name array. Me so smart."
|
||||
};
|
||||
|
||||
static const std::string lod_status_image[NUM_LOD + 1] =
|
||||
{
|
||||
"ModelImport_Status_Good",
|
||||
"ModelImport_Status_Warning",
|
||||
"ModelImport_Status_Error",
|
||||
"I went off the end of the lod_status_image array. Me so smart."
|
||||
};
|
||||
|
||||
static const std::string lod_label_name[NUM_LOD + 1] =
|
||||
{
|
||||
"lowest_label",
|
||||
"low_label",
|
||||
"medium_label",
|
||||
"high_label",
|
||||
"I went off the end of the lod_label_name array. Me so smart."
|
||||
};
|
||||
|
||||
class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
|
||||
{
|
||||
LOG_CLASS(LLModelPreview);
|
||||
|
||||
typedef boost::signals2::signal<void(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost)> details_signal_t;
|
||||
typedef boost::signals2::signal<void(void)> model_loaded_signal_t;
|
||||
typedef boost::signals2::signal<void(bool)> model_updated_signal_t;
|
||||
|
||||
public:
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LOD_FROM_FILE = 0,
|
||||
GENERATE,
|
||||
USE_LOD_ABOVE,
|
||||
} eLoDMode;
|
||||
|
||||
public:
|
||||
// Todo: model preview shouldn't need floater dependency, it
|
||||
// should just expose data to floater, not control flaoter like it does
|
||||
LLModelPreview(S32 width, S32 height, LLFloater* fmp);
|
||||
virtual ~LLModelPreview();
|
||||
|
||||
void resetPreviewTarget();
|
||||
void setPreviewTarget(F32 distance);
|
||||
void setTexture(U32 name) { mTextureName = name; }
|
||||
|
||||
void setPhysicsFromLOD(S32 lod);
|
||||
BOOL render();
|
||||
void update();
|
||||
void genBuffers(S32 lod, bool skinned);
|
||||
void clearBuffers();
|
||||
void refresh();
|
||||
void rotate(F32 yaw_radians, F32 pitch_radians);
|
||||
void zoom(F32 zoom_amt);
|
||||
void pan(F32 right, F32 up);
|
||||
virtual BOOL needsRender() { return mNeedsUpdate; }
|
||||
void setPreviewLOD(S32 lod);
|
||||
void clearModel(S32 lod);
|
||||
void getJointAliases(JointMap& joint_map);
|
||||
void loadModel(std::string filename, S32 lod, bool force_disable_slm = false);
|
||||
void loadModelCallback(S32 lod);
|
||||
bool lodsReady() { return !mGenLOD && mLodsQuery.empty(); }
|
||||
void queryLODs() { mGenLOD = true; };
|
||||
void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);
|
||||
void generateNormals();
|
||||
void restoreNormals();
|
||||
U32 calcResourceCost();
|
||||
void rebuildUploadData();
|
||||
void saveUploadData(bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position);
|
||||
void saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position);
|
||||
void clearIncompatible(S32 lod);
|
||||
void updateStatusMessages();
|
||||
void updateLodControls(S32 lod);
|
||||
void clearGLODGroup();
|
||||
void onLODParamCommit(S32 lod, bool enforce_tri_limit);
|
||||
void addEmptyFace(LLModel* pTarget);
|
||||
|
||||
const bool getModelPivot(void) const { return mHasPivot; }
|
||||
void setHasPivot(bool val) { mHasPivot = val; }
|
||||
void setModelPivot(const LLVector3& pivot) { mModelPivot = pivot; }
|
||||
|
||||
//Is a rig valid so that it can be used as a criteria for allowing for uploading of joint positions
|
||||
//Accessors for joint position upload friendly rigs
|
||||
const bool isRigValidForJointPositionUpload(void) const { return mRigValidJointUpload; }
|
||||
void setRigValidForJointPositionUpload(bool rigValid) { mRigValidJointUpload = rigValid; }
|
||||
|
||||
//Accessors for the legacy rigs
|
||||
const bool isLegacyRigValid(void) const { return mLegacyRigFlags == 0; }
|
||||
U32 getLegacyRigFlags() const { return mLegacyRigFlags; }
|
||||
void setLegacyRigFlags(U32 rigFlags) { mLegacyRigFlags = rigFlags; }
|
||||
|
||||
static void textureLoadedCallback(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata);
|
||||
static bool lodQueryCallback();
|
||||
|
||||
boost::signals2::connection setDetailsCallback(const details_signal_t::slot_type& cb){ return mDetailsSignal.connect(cb); }
|
||||
boost::signals2::connection setModelLoadedCallback(const model_loaded_signal_t::slot_type& cb){ return mModelLoadedSignal.connect(cb); }
|
||||
boost::signals2::connection setModelUpdatedCallback(const model_updated_signal_t::slot_type& cb){ return mModelUpdatedSignal.connect(cb); }
|
||||
|
||||
void setLoadState(U32 state) { mLoadState = state; }
|
||||
U32 getLoadState() { return mLoadState; }
|
||||
|
||||
static bool sIgnoreLoadedCallback;
|
||||
std::vector<S32> mLodsQuery;
|
||||
std::vector<S32> mLodsWithParsingError;
|
||||
bool mHasDegenerate;
|
||||
|
||||
protected:
|
||||
|
||||
static void loadedCallback(LLModelLoader::scene& scene, LLModelLoader::model_list& model_list, S32 lod, void* opaque);
|
||||
static void stateChangedCallback(U32 state, void* opaque);
|
||||
|
||||
static LLJoint* lookupJointByName(const std::string&, void* opaque);
|
||||
static U32 loadTextures(LLImportMaterial& material, void* opaque);
|
||||
|
||||
void lookupLODModelFiles(S32 lod);
|
||||
|
||||
private:
|
||||
//Utility function for controller vertex compare
|
||||
bool verifyCount(int expected, int result);
|
||||
//Creates the dummy avatar for the preview window
|
||||
void createPreviewAvatar(void);
|
||||
//Accessor for the dummy avatar
|
||||
LLVOAvatar* getPreviewAvatar(void) { return mPreviewAvatar; }
|
||||
// Count amount of original models, excluding sub-models
|
||||
static U32 countRootModels(LLModelLoader::model_list models);
|
||||
|
||||
protected:
|
||||
friend class LLModelLoader;
|
||||
friend class LLFloaterModelPreview;
|
||||
friend class LLFloaterModelPreview::DecompRequest;
|
||||
friend class LLPhysicsDecomp;
|
||||
|
||||
LLFloater* mFMP;
|
||||
|
||||
LLPointer<LLViewerFetchedTexture> mUVGuideTexture; // <FS:Beq> Add UV Guide texture overlay
|
||||
BOOL mNeedsUpdate;
|
||||
bool mDirty;
|
||||
bool mGenLOD;
|
||||
U32 mTextureName;
|
||||
F32 mCameraDistance;
|
||||
F32 mCameraYaw;
|
||||
F32 mCameraPitch;
|
||||
F32 mCameraZoom;
|
||||
LLVector3 mCameraOffset;
|
||||
LLVector3 mPreviewTarget;
|
||||
LLVector3 mPreviewScale;
|
||||
S32 mPreviewLOD;
|
||||
S32 mPhysicsSearchLOD;
|
||||
U32 mResourceCost;
|
||||
std::string mLODFile[LLModel::NUM_LODS];
|
||||
bool mLoading;
|
||||
U32 mLoadState;
|
||||
bool mResetJoints;
|
||||
bool mModelNoErrors;
|
||||
bool mLookUpLodFiles;
|
||||
|
||||
std::map<std::string, bool> mViewOption;
|
||||
|
||||
//GLOD object parameters (must rebuild object if these change)
|
||||
bool mLODFrozen;
|
||||
F32 mBuildShareTolerance;
|
||||
U32 mBuildQueueMode;
|
||||
U32 mBuildOperator;
|
||||
U32 mBuildBorderMode;
|
||||
U32 mRequestedLoDMode[LLModel::NUM_LODS];
|
||||
S32 mRequestedTriangleCount[LLModel::NUM_LODS];
|
||||
F32 mRequestedErrorThreshold[LLModel::NUM_LODS];
|
||||
U32 mRequestedBuildOperator[LLModel::NUM_LODS];
|
||||
U32 mRequestedQueueMode[LLModel::NUM_LODS];
|
||||
U32 mRequestedBorderMode[LLModel::NUM_LODS];
|
||||
F32 mRequestedShareTolerance[LLModel::NUM_LODS];
|
||||
F32 mRequestedCreaseAngle[LLModel::NUM_LODS];
|
||||
|
||||
LLModelLoader* mModelLoader;
|
||||
|
||||
LLModelLoader::scene mScene[LLModel::NUM_LODS];
|
||||
LLModelLoader::scene mBaseScene;
|
||||
|
||||
LLModelLoader::model_list mModel[LLModel::NUM_LODS];
|
||||
LLModelLoader::model_list mBaseModel;
|
||||
|
||||
typedef std::vector<LLVolumeFace> v_LLVolumeFace_t;
|
||||
typedef std::vector<v_LLVolumeFace_t> vv_LLVolumeFace_t;
|
||||
|
||||
vv_LLVolumeFace_t mModelFacesCopy[LLModel::NUM_LODS];
|
||||
vv_LLVolumeFace_t mBaseModelFacesCopy;
|
||||
|
||||
U32 mGroup;
|
||||
std::map<LLPointer<LLModel>, U32> mObject;
|
||||
U32 mMaxTriangleLimit;
|
||||
|
||||
LLMeshUploadThread::instance_list mUploadData;
|
||||
std::set<LLViewerFetchedTexture * > mTextureSet;
|
||||
|
||||
//map of vertex buffers to models (one vertex buffer in vector per face in model
|
||||
std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mVertexBuffer[LLModel::NUM_LODS + 1];
|
||||
|
||||
details_signal_t mDetailsSignal;
|
||||
model_loaded_signal_t mModelLoadedSignal;
|
||||
model_updated_signal_t mModelUpdatedSignal;
|
||||
|
||||
LLVector3 mModelPivot;
|
||||
bool mHasPivot;
|
||||
|
||||
float mPelvisZOffset;
|
||||
|
||||
bool mRigValidJointUpload;
|
||||
U32 mLegacyRigFlags;
|
||||
|
||||
bool mLastJointUpdate;
|
||||
bool mFirstSkinUpdate;
|
||||
|
||||
JointNameSet mJointsFromNode;
|
||||
JointTransformMap mJointTransformMap;
|
||||
|
||||
LLPointer<LLVOAvatar> mPreviewAvatar;
|
||||
LLCachedControl<bool> mImporterDebug;
|
||||
};
|
||||
|
||||
#endif // LL_LLMODELPREVIEW_H
|
||||
|
|
@ -232,6 +232,12 @@ BOOL LLLandmarksPanel::postBuild()
|
|||
initMyInventoryPanel();
|
||||
initLibraryInventoryPanel();
|
||||
|
||||
LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion");
|
||||
if (accordion)
|
||||
{
|
||||
accordion->setSkipScrollToChild(true);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5636,8 +5636,8 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
|
|||
if (!node)
|
||||
{
|
||||
// <FS:Techwolf Lupindo> area search
|
||||
FSAreaSearch* area_search_floater = LLFloaterReg::getTypedInstance<FSAreaSearch>("area_search");
|
||||
if(!(area_search_floater && area_search_floater->isActive())) // Don't spam the log when areasearch is active.
|
||||
FSAreaSearch* area_search_floater = LLFloaterReg::findTypedInstance<FSAreaSearch>("area_search");
|
||||
if (!area_search_floater || !area_search_floater->isActive()) // Don't spam the log when areasearch is active.
|
||||
{
|
||||
// </FS:Techwolf Lupindo>
|
||||
LL_WARNS() << "Couldn't find object " << id << " selected." << LL_ENDL;
|
||||
|
|
@ -6146,11 +6146,15 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
|
|||
F32 cur_zoom = gAgentCamera.mHUDCurZoom;
|
||||
|
||||
// set up transform to encompass bounding box of HUD
|
||||
F32 aspect = LLViewerCamera::getInstance()->getAspect(); // <FS:Ansariel> Performance improvement
|
||||
|
||||
gGL.matrixMode(LLRender::MM_PROJECTION);
|
||||
gGL.pushMatrix();
|
||||
gGL.loadIdentity();
|
||||
F32 depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
|
||||
gGL.ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, depth);
|
||||
// <FS:Ansariel> Performance improvement
|
||||
//gGL.ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, depth);
|
||||
gGL.ortho(-0.5f * aspect, 0.5f * aspect, -0.5f, 0.5f, 0.f, depth);
|
||||
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.pushMatrix();
|
||||
|
|
@ -6163,7 +6167,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
|
|||
}
|
||||
|
||||
bool wireframe_selection = (gFloaterTools && gFloaterTools->getVisible()) || LLSelectMgr::sRenderHiddenSelections;
|
||||
F32 fogCfx = (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal() - gAgentCamera.getCameraPositionGlobal()).magVec() / (LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec() * 4), 0.0, 1.0);
|
||||
F32 fogCfx = (F32)llclamp((getSelectionCenterGlobal() - gAgentCamera.getCameraPositionGlobal()).magVec() / (getBBoxOfSelection().getExtentLocal().magVec() * 4), 0.0, 1.0); // <FS:Ansariel> Performance improvement
|
||||
|
||||
static LLColor4 sParentColor = LLColor4(sSilhouetteParentColor[VRED], sSilhouetteParentColor[VGREEN], sSilhouetteParentColor[VBLUE], LLSelectMgr::sHighlightAlpha);
|
||||
static LLColor4 sChildColor = LLColor4(sSilhouetteChildColor[VRED], sSilhouetteChildColor[VGREEN], sSilhouetteChildColor[VBLUE], LLSelectMgr::sHighlightAlpha);
|
||||
|
|
@ -6243,7 +6247,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
|
|||
if (mSelectedObjects->getNumNodes())
|
||||
{
|
||||
LLUUID inspect_item_id= LLUUID::null;
|
||||
LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
|
||||
LLFloaterInspect* inspect_instance = LLFloaterReg::findTypedInstance<LLFloaterInspect>("inspect");
|
||||
if(inspect_instance && inspect_instance->getVisible())
|
||||
{
|
||||
inspect_item_id = inspect_instance->getSelectedUUID();
|
||||
|
|
@ -6780,6 +6784,10 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &aColor)
|
|||
LLVolume *volume = objectp->getVolume();
|
||||
if (volume)
|
||||
{
|
||||
// <FS:Ansariel> Performance improvement
|
||||
LLViewerCamera& camera = LLViewerCamera::instance();
|
||||
LLSelectMgr& selectmgr = LLSelectMgr::instance();
|
||||
|
||||
F32 silhouette_thickness;
|
||||
if (isAgentAvatarValid() && is_hud_object)
|
||||
{
|
||||
|
|
@ -6787,8 +6795,8 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &aColor)
|
|||
}
|
||||
else
|
||||
{
|
||||
LLVector3 view_vector = LLViewerCamera::getInstance()->getOrigin() - objectp->getRenderPosition();
|
||||
silhouette_thickness = view_vector.magVec() * LLSelectMgr::sHighlightThickness * (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV());
|
||||
LLVector3 view_vector = camera.getOrigin() - objectp->getRenderPosition();
|
||||
silhouette_thickness = view_vector.magVec() * LLSelectMgr::sHighlightThickness * (camera.getView() / camera.getDefaultFOV());
|
||||
}
|
||||
F32 animationTime = (F32)LLFrameTimer::getElapsedSeconds();
|
||||
|
||||
|
|
@ -6806,10 +6814,10 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &aColor)
|
|||
// </FS:Ansariel>
|
||||
LLGLEnable fog(GL_FOG);
|
||||
glFogi(GL_FOG_MODE, GL_LINEAR);
|
||||
float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec();
|
||||
LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgentCamera.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0);
|
||||
float d = (camera.getPointOfInterest()-camera.getOrigin()).magVec();
|
||||
LLColor4 fogCol = color * (F32)llclamp((selectmgr.getSelectionCenterGlobal()-gAgentCamera.getCameraPositionGlobal()).magVec()/(selectmgr.getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0);
|
||||
glFogf(GL_FOG_START, d);
|
||||
glFogf(GL_FOG_END, d*(1 + (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV())));
|
||||
glFogf(GL_FOG_END, d*(1 + (camera.getView() / camera.getDefaultFOV())));
|
||||
glFogfv(GL_FOG_COLOR, fogCol.mV);
|
||||
// <FS:Ansariel> Don't use fixed functions when using shader renderer; found by Drake Arconis
|
||||
}
|
||||
|
|
@ -6928,7 +6936,7 @@ void dialog_refresh_all()
|
|||
|
||||
LLFloaterProperties::dirtyAll();
|
||||
|
||||
LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
|
||||
LLFloaterInspect* inspect_instance = LLFloaterReg::findTypedInstance<LLFloaterInspect>("inspect");
|
||||
if(inspect_instance)
|
||||
{
|
||||
inspect_instance->dirty();
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@
|
|||
#include "fsfloaterimcontainer.h"
|
||||
#include "fsfloaternearbychat.h"
|
||||
#include "fsfloatersearch.h"
|
||||
#include "fsfloaterwearablefavorites.h"
|
||||
#include "fslslbridge.h"
|
||||
#include "fsradar.h"
|
||||
#include "fsregistrarutils.h"
|
||||
|
|
@ -3027,6 +3028,9 @@ bool idle_startup()
|
|||
}
|
||||
// </FS:TT>
|
||||
|
||||
// <FS:Ansariel> Favorite Wearables
|
||||
FSFloaterWearableFavorites::initCategory();
|
||||
|
||||
// <FS:Ansariel> Bypass the calling card sync-crap to create the agent's calling card
|
||||
LLFriendCardsManager::createAgentCallingCard();
|
||||
|
||||
|
|
@ -3802,7 +3806,7 @@ void LLStartUp::initNameCache()
|
|||
cache_inst->setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));
|
||||
|
||||
// <FS:CR> Legacy name/Username format
|
||||
LLAvatarNameCache::getInstance()->setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));
|
||||
LLAvatarName::setUseLegacyFormat(gSavedSettings.getBOOL("FSNameTagShowLegacyUsernames"));
|
||||
// <FS:CR> FIRE-6659: Legacy "Resident" name toggle
|
||||
LLAvatarName::setTrimResidentSurname(gSavedSettings.getBOOL("FSTrimLegacyNames"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -281,6 +281,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_RENDER);
|
||||
|
||||
LLViewerCamera& camera = LLViewerCamera::instance(); // <FS:Ansariel> Factor out calls to getInstance
|
||||
|
||||
if (gWindowResized)
|
||||
{ //skip render on frames where window has been resized
|
||||
LL_DEBUGS("Window") << "Resizing window" << LL_ENDL;
|
||||
|
|
@ -493,10 +495,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
{
|
||||
// If someone knows how to call "View.ZoomDefault" by hand, we should do that instead of
|
||||
// replicating the behavior here. -Zi
|
||||
LLViewerCamera::getInstance()->setDefaultFOV(DEFAULT_FIELD_OF_VIEW);
|
||||
camera.setDefaultFOV(DEFAULT_FIELD_OF_VIEW);
|
||||
if(gSavedSettings.getBOOL("FSResetCameraOnTP"))
|
||||
{
|
||||
gSavedSettings.setF32("CameraAngle", LLViewerCamera::getInstance()->getView()); // FS:LO Dont reset rightclick zoom when we teleport however. Fixes FIRE-6246.
|
||||
gSavedSettings.setF32("CameraAngle", camera.getView()); // FS:LO Dont reset rightclick zoom when we teleport however. Fixes FIRE-6246.
|
||||
}
|
||||
// also, reset the marker for "currently zooming" in the mouselook zoom settings. -Zi
|
||||
LLVector3 vTemp=gSavedSettings.getVector3("_NACL_MLFovValues");
|
||||
|
|
@ -674,8 +676,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
//
|
||||
|
||||
LLAppViewer::instance()->pingMainloopTimeout("Display:Camera");
|
||||
LLViewerCamera::getInstance()->setZoomParameters(zoom_factor, subfield);
|
||||
LLViewerCamera::getInstance()->setNear(MIN_NEAR_PLANE);
|
||||
camera.setZoomParameters(zoom_factor, subfield); // <FS:Ansariel> Factor out calls to getInstance
|
||||
camera.setNear(MIN_NEAR_PLANE); // <FS:Ansariel> Factor out calls to getInstance
|
||||
|
||||
//////////////////////////
|
||||
//
|
||||
|
|
@ -753,7 +755,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_EEP_UPDATE);
|
||||
// update all the sky/atmospheric/water settings
|
||||
LLEnvironment::instance().update(LLViewerCamera::getInstance());
|
||||
LLEnvironment::instance().update(&camera); // <FS:Ansariel> Factor out calls to getInstance
|
||||
}
|
||||
|
||||
// *TODO: merge these two methods
|
||||
|
|
@ -782,7 +784,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER) ||
|
||||
gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_VOIDWATER)))
|
||||
{
|
||||
if (LLViewerCamera::getInstance()->cameraUnderWater())
|
||||
if (camera.cameraUnderWater()) // <FS:Ansariel> Factor out calls to getInstance
|
||||
{
|
||||
water_clip = -1;
|
||||
}
|
||||
|
|
@ -813,8 +815,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
|
||||
static LLCullResult result;
|
||||
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
|
||||
LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater();
|
||||
gPipeline.updateCull(*LLViewerCamera::getInstance(), result, water_clip);
|
||||
LLPipeline::sUnderWaterRender = camera.cameraUnderWater(); // <FS:Ansariel> Factor out calls to getInstance
|
||||
gPipeline.updateCull(camera, result, water_clip); // <FS:Ansariel> Factor out calls to getInstance
|
||||
stop_glerror();
|
||||
|
||||
LLGLState::checkStates();
|
||||
|
|
@ -842,7 +844,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
if (gFrameCount > 1)
|
||||
{ //for some reason, ATI 4800 series will error out if you
|
||||
//try to generate a shadow before the first frame is through
|
||||
gPipeline.generateSunShadow(*LLViewerCamera::getInstance());
|
||||
gPipeline.generateSunShadow(camera); // <FS:Ansariel> Factor out calls to getInstance
|
||||
}
|
||||
|
||||
LLVertexBuffer::unbind();
|
||||
|
|
@ -883,8 +885,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
//if (!for_snapshot)
|
||||
{
|
||||
LLAppViewer::instance()->pingMainloopTimeout("Display:Imagery");
|
||||
gPipeline.generateWaterReflection(*LLViewerCamera::getInstance());
|
||||
gPipeline.generateHighlight(*LLViewerCamera::getInstance());
|
||||
gPipeline.generateWaterReflection(camera); // <FS:Ansariel> Factor out calls to getInstance
|
||||
gPipeline.generateHighlight(camera); // <FS:Ansariel> Factor out calls to getInstance
|
||||
gPipeline.renderPhysicsDisplay();
|
||||
}
|
||||
|
||||
|
|
@ -946,7 +948,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
LLAppViewer::instance()->pingMainloopTimeout("Display:StateSort");
|
||||
{
|
||||
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
|
||||
gPipeline.stateSort(*LLViewerCamera::getInstance(), result);
|
||||
gPipeline.stateSort(camera, result); // <FS:Ansariel> Factor out calls to getInstance
|
||||
stop_glerror();
|
||||
|
||||
if (rebuild)
|
||||
|
|
@ -1020,7 +1022,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
// gGL.popMatrix();
|
||||
//}
|
||||
|
||||
LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
|
||||
LLPipeline::sUnderWaterRender = camera.cameraUnderWater() ? TRUE : FALSE; // <FS:Ansariel> Factor out calls to getInstance
|
||||
|
||||
// <FS:CR> Aurora Sim
|
||||
if (!LLWorld::getInstance()->getAllowRenderWater())
|
||||
|
|
@ -1089,11 +1091,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
gGL.setColorMask(true, false);
|
||||
if (LLPipeline::sRenderDeferred)
|
||||
{
|
||||
gPipeline.renderGeomDeferred(*LLViewerCamera::getInstance());
|
||||
gPipeline.renderGeomDeferred(camera); // <FS:Ansariel> Factor out calls to getInstance
|
||||
}
|
||||
else
|
||||
{
|
||||
gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE);
|
||||
gPipeline.renderGeom(camera, TRUE); // <FS:Ansariel> Factor out calls to getInstance
|
||||
}
|
||||
|
||||
gGL.setColorMask(true, true);
|
||||
|
|
@ -1296,11 +1298,14 @@ void render_hud_attachments()
|
|||
|
||||
LLRect get_whole_screen_region()
|
||||
{
|
||||
// <FS:Ansariel> Factor out calls to getInstance
|
||||
LLViewerCamera& camera = LLViewerCamera::instance();
|
||||
|
||||
LLRect whole_screen = gViewerWindow->getWorldViewRectScaled();
|
||||
|
||||
// apply camera zoom transform (for high res screenshots)
|
||||
F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
|
||||
S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
|
||||
F32 zoom_factor = camera.getZoomFactor(); // <FS:Ansariel> Factor out calls to getInstance
|
||||
S16 sub_region = camera.getZoomSubRegion(); // <FS:Ansariel> Factor out calls to getInstance
|
||||
if (zoom_factor > 1.f)
|
||||
{
|
||||
S32 num_horizontal_tiles = llceil(zoom_factor);
|
||||
|
|
@ -1322,10 +1327,15 @@ bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::mat
|
|||
LLBBox hud_bbox = gAgentAvatarp->getHUDBBox();
|
||||
|
||||
F32 hud_depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);
|
||||
proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth);
|
||||
proj.element(2,2) = -0.01f;
|
||||
|
||||
// <FS:Ansariel> Factor out calls to getInstance
|
||||
//proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth);
|
||||
//proj.element(2,2) = -0.01f;
|
||||
|
||||
F32 aspect_ratio = LLViewerCamera::getInstance()->getAspect();
|
||||
proj = gl_ortho(-0.5f * aspect_ratio, 0.5f * aspect_ratio, -0.5f, 0.5f, 0.f, hud_depth);
|
||||
proj.element(2,2) = -0.01f;
|
||||
// <//FS:Ansariel> Factor out calls to getInstance
|
||||
|
||||
glh::matrix4f mat;
|
||||
F32 scale_x = (F32)gViewerWindow->getWorldViewWidthScaled() / (F32)screen_region.getWidth();
|
||||
|
|
@ -1598,8 +1608,13 @@ void render_ui_2d()
|
|||
// Menu overlays, HUD, etc
|
||||
gViewerWindow->setup2DRender();
|
||||
|
||||
F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
|
||||
S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
|
||||
// <FS:Ansariel> Factor out instance() call
|
||||
//F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
|
||||
//S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
|
||||
LLViewerCamera& camera = LLViewerCamera::instance();
|
||||
F32 zoom_factor = camera.getZoomFactor();
|
||||
S16 sub_region = camera.getZoomSubRegion();
|
||||
LLVector2& ui_scale_factor = LLUI::getScaleFactor();
|
||||
|
||||
if (zoom_factor > 1.f)
|
||||
{
|
||||
|
|
@ -1620,7 +1635,9 @@ void render_ui_2d()
|
|||
gGL.pushMatrix();
|
||||
S32 half_width = (gViewerWindow->getWorldViewWidthScaled() / 2);
|
||||
S32 half_height = (gViewerWindow->getWorldViewHeightScaled() / 2);
|
||||
gGL.scalef(LLUI::getScaleFactor().mV[0], LLUI::getScaleFactor().mV[1], 1.f);
|
||||
// <FS:Ansariel> Factor out instance() call
|
||||
//gGL.scalef(LLUI::getScaleFactor().mV[0], LLUI::getScaleFactor().mV[1], 1.f);
|
||||
gGL.scalef(ui_scale_factor.mV[0], ui_scale_factor.mV[1], 1.f);
|
||||
gGL.translatef((F32)half_width, (F32)half_height, 0.f);
|
||||
F32 zoom = gAgentCamera.mHUDCurZoom;
|
||||
gGL.scalef(zoom,zoom,1.f);
|
||||
|
|
@ -1663,10 +1680,15 @@ void render_ui_2d()
|
|||
ui_inst->mDirtyRect = last_rect;
|
||||
last_rect = t_rect;
|
||||
|
||||
last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / ui_inst->getScaleFactor().mV[0]);
|
||||
last_rect.mRight = LLRect::tCoordType(last_rect.mRight / ui_inst->getScaleFactor().mV[0]);
|
||||
last_rect.mTop = LLRect::tCoordType(last_rect.mTop / ui_inst->getScaleFactor().mV[1]);
|
||||
last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / ui_inst->getScaleFactor().mV[1]);
|
||||
// <FS:Ansariel> Factor out instance() call
|
||||
//last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / ui_inst->getScaleFactor().mV[0]);
|
||||
//last_rect.mRight = LLRect::tCoordType(last_rect.mRight / ui_inst->getScaleFactor().mV[0]);
|
||||
//last_rect.mTop = LLRect::tCoordType(last_rect.mTop / ui_inst->getScaleFactor().mV[1]);
|
||||
//last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / ui_inst->getScaleFactor().mV[1]);
|
||||
last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / ui_scale_factor.mV[0]);
|
||||
last_rect.mRight = LLRect::tCoordType(last_rect.mRight / ui_scale_factor.mV[0]);
|
||||
last_rect.mTop = LLRect::tCoordType(last_rect.mTop / ui_scale_factor.mV[1]);
|
||||
last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / ui_scale_factor.mV[1]);
|
||||
|
||||
LLRect clip_rect(last_rect);
|
||||
|
||||
|
|
|
|||
|
|
@ -572,7 +572,7 @@ class LLFileUploadModel : public view_listener_t
|
|||
LLFloaterModelPreview* fmp = (LLFloaterModelPreview*) LLFloaterReg::getInstance("upload_model");
|
||||
if (fmp && !fmp->isModelLoading())
|
||||
{
|
||||
fmp->loadModel(3);
|
||||
fmp->loadHighLodModel();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ class LLViewerObject
|
|||
public LLTrace::MemTrackable<LLViewerObject>
|
||||
{
|
||||
protected:
|
||||
~LLViewerObject(); // use unref()
|
||||
virtual ~LLViewerObject(); // use unref()
|
||||
|
||||
// TomY: Provide for a list of extra parameter structures, mapped by structure name
|
||||
struct ExtraParameter
|
||||
|
|
|
|||
|
|
@ -1913,23 +1913,26 @@ void LLViewerObjectList::clearAllMapObjectsInRegion(LLViewerRegion* regionp)
|
|||
|
||||
void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
|
||||
{
|
||||
LLColor4 above_water_color = LLUIColorTable::instance().getColor( "NetMapOtherOwnAboveWater" );
|
||||
LLColor4 below_water_color = LLUIColorTable::instance().getColor( "NetMapOtherOwnBelowWater" );
|
||||
// <FS:Ansariel> Factor out calls to getInstance
|
||||
LLUIColorTable& colortable = LLUIColorTable::instance();
|
||||
|
||||
LLColor4 above_water_color = colortable.getColor( "NetMapOtherOwnAboveWater" );
|
||||
LLColor4 below_water_color = colortable.getColor( "NetMapOtherOwnBelowWater" );
|
||||
LLColor4 you_own_above_water_color =
|
||||
LLUIColorTable::instance().getColor( "NetMapYouOwnAboveWater" );
|
||||
colortable.getColor( "NetMapYouOwnAboveWater" );
|
||||
LLColor4 you_own_below_water_color =
|
||||
LLUIColorTable::instance().getColor( "NetMapYouOwnBelowWater" );
|
||||
colortable.getColor( "NetMapYouOwnBelowWater" );
|
||||
LLColor4 group_own_above_water_color =
|
||||
LLUIColorTable::instance().getColor( "NetMapGroupOwnAboveWater" );
|
||||
colortable.getColor( "NetMapGroupOwnAboveWater" );
|
||||
LLColor4 group_own_below_water_color =
|
||||
LLUIColorTable::instance().getColor( "NetMapGroupOwnBelowWater" );
|
||||
colortable.getColor( "NetMapGroupOwnBelowWater" );
|
||||
|
||||
// <FS:CR> FIRE-1846: Firestorm netmap enhancements
|
||||
LLColor4 you_own_physical_color = LLUIColorTable::instance().getColor ( "NetMapYouPhysical", LLColor4::red );
|
||||
LLColor4 group_own_physical_color = LLUIColorTable::instance().getColor ( "NetMapGroupPhysical", LLColor4::green );
|
||||
LLColor4 other_own_physical_color = LLUIColorTable::instance().getColor ( "NetMapOtherPhysical", LLColor4::green );
|
||||
LLColor4 scripted_object_color = LLUIColorTable::instance().getColor ( "NetMapScripted", LLColor4::orange );
|
||||
LLColor4 temp_on_rez_object_color = LLUIColorTable::instance().getColor ( "NetMapTempOnRez", LLColor4::orange );
|
||||
LLColor4 you_own_physical_color = colortable.getColor ( "NetMapYouPhysical", LLColor4::red );
|
||||
LLColor4 group_own_physical_color = colortable.getColor ( "NetMapGroupPhysical", LLColor4::green );
|
||||
LLColor4 other_own_physical_color = colortable.getColor ( "NetMapOtherPhysical", LLColor4::green );
|
||||
LLColor4 scripted_object_color = colortable.getColor ( "NetMapScripted", LLColor4::orange );
|
||||
LLColor4 temp_on_rez_object_color = colortable.getColor ( "NetMapTempOnRez", LLColor4::orange );
|
||||
static LLCachedControl<bool> fs_netmap_physical(gSavedSettings, "FSNetMapPhysical", false);
|
||||
static LLCachedControl<bool> fs_netmap_scripted(gSavedSettings, "FSNetMapScripted", false);
|
||||
static LLCachedControl<bool> fs_netmap_temp_on_rez(gSavedSettings, "FSNetMapTempOnRez", false);
|
||||
|
|
|
|||
|
|
@ -2869,7 +2869,6 @@ void LLViewerWindow::draw()
|
|||
|
||||
LLUI::setLineWidth(1.f);
|
||||
|
||||
LLUI::setLineWidth(1.f);
|
||||
// Reset any left-over transforms
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
|
||||
|
|
@ -2914,14 +2913,16 @@ void LLViewerWindow::draw()
|
|||
gGL.pushMatrix();
|
||||
LLUI::pushMatrix();
|
||||
{
|
||||
|
||||
// <FS:Ansariel> Factor out instance() call
|
||||
LLViewerCamera& camera = LLViewerCamera::instance();
|
||||
|
||||
// scale view by UI global scale factor and aspect ratio correction factor
|
||||
gGL.scaleUI(mDisplayScale.mV[VX], mDisplayScale.mV[VY], 1.f);
|
||||
|
||||
LLVector2 old_scale_factor = LLUI::getScaleFactor();
|
||||
// apply camera zoom transform (for high res screenshots)
|
||||
F32 zoom_factor = LLViewerCamera::getInstance()->getZoomFactor();
|
||||
S16 sub_region = LLViewerCamera::getInstance()->getZoomSubRegion();
|
||||
F32 zoom_factor = camera.getZoomFactor(); // <FS:Ansariel> Factor out instance() call
|
||||
S16 sub_region = camera.getZoomSubRegion(); // <FS:Ansariel> Factor out instance() call
|
||||
if (zoom_factor > 1.f)
|
||||
{
|
||||
//decompose subregion number to x and y values
|
||||
|
|
@ -2955,7 +2956,7 @@ void LLViewerWindow::draw()
|
|||
static LLUICachedControl<U32> userPresetHAlign("ExodusMouselookTextHAlign", 2);
|
||||
|
||||
LLVector3d myPosition = gAgentCamera.getCameraPositionGlobal();
|
||||
LLQuaternion myRotation = LLViewerCamera::getInstance()->getQuaternion();
|
||||
LLQuaternion myRotation = camera.getQuaternion();
|
||||
|
||||
myRotation.set(-myRotation.mQ[VX], -myRotation.mQ[VY], -myRotation.mQ[VZ], myRotation.mQ[VW]);
|
||||
|
||||
|
|
@ -2968,6 +2969,8 @@ void LLViewerWindow::draw()
|
|||
S32 length = avatars.size();
|
||||
if (length)
|
||||
{
|
||||
LGGContactSets& contact_sets = LGGContactSets::instance();
|
||||
|
||||
for (S32 i = 0; i < length; i++)
|
||||
{
|
||||
LLUUID& targetKey = avatars[i];
|
||||
|
|
@ -2983,10 +2986,10 @@ void LLViewerWindow::draw()
|
|||
}
|
||||
|
||||
LLColor4 targetColor = map_avatar_color.get();
|
||||
targetColor = LGGContactSets::getInstance()->colorize(targetKey, targetColor, LGG_CS_MINIMAP);
|
||||
targetColor = contact_sets.colorize(targetKey, targetColor, LGG_CS_MINIMAP);
|
||||
|
||||
//color based on contact sets prefs
|
||||
LGGContactSets::getInstance()->hasFriendColorThatShouldShow(targetKey, LGG_CS_MINIMAP, targetColor);
|
||||
contact_sets.hasFriendColorThatShouldShow(targetKey, LGG_CS_MINIMAP, targetColor);
|
||||
|
||||
LLColor4 mark_color;
|
||||
if (LLNetMap::getAvatarMarkColor(targetKey, mark_color))
|
||||
|
|
@ -3091,13 +3094,12 @@ void LLViewerWindow::draw()
|
|||
//#endif
|
||||
}
|
||||
|
||||
|
||||
//-TT Window Title Access
|
||||
// <FS:TT> Window Title Access
|
||||
void LLViewerWindow::setTitle(const std::string& win_title)
|
||||
{
|
||||
mWindow->setTitle(win_title);
|
||||
}
|
||||
//-TT
|
||||
// </FS:TT>
|
||||
|
||||
// Takes a single keyup event, usually when UI is visible
|
||||
BOOL LLViewerWindow::handleKeyUp(KEY key, MASK mask)
|
||||
|
|
|
|||
|
|
@ -1704,13 +1704,16 @@ void LLVOAvatar::renderCollisionVolumes()
|
|||
}
|
||||
}
|
||||
|
||||
void LLVOAvatar::renderBones()
|
||||
void LLVOAvatar::renderBones(const std::string &selected_joint)
|
||||
{
|
||||
LLGLEnable blend(GL_BLEND);
|
||||
|
||||
avatar_joint_list_t::iterator iter = mSkeleton.begin();
|
||||
avatar_joint_list_t::iterator end = mSkeleton.end();
|
||||
avatar_joint_list_t::iterator end = mSkeleton.end();
|
||||
|
||||
// For selected joints
|
||||
static LLVector3 SELECTED_COLOR_OCCLUDED(1.0f, 1.0f, 0.0f);
|
||||
static LLVector3 SELECTED_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
|
||||
// For bones with position overrides defined
|
||||
static LLVector3 OVERRIDE_COLOR_OCCLUDED(1.0f, 0.0f, 0.0f);
|
||||
static LLVector3 OVERRIDE_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
|
||||
|
|
@ -1737,7 +1740,18 @@ void LLVOAvatar::renderBones()
|
|||
|
||||
LLVector3 pos;
|
||||
LLUUID mesh_id;
|
||||
if (jointp->hasAttachmentPosOverride(pos,mesh_id))
|
||||
F32 sphere_scale = SPHERE_SCALEF;
|
||||
|
||||
// We are in render, so it is preferable to implement selection
|
||||
// in a different way, but since this is for debug/preview, this
|
||||
// is low priority
|
||||
if (jointp->getName() == selected_joint)
|
||||
{
|
||||
sphere_scale *= 16.f;
|
||||
occ_color = SELECTED_COLOR_OCCLUDED;
|
||||
visible_color = SELECTED_COLOR_VISIBLE;
|
||||
}
|
||||
else if (jointp->hasAttachmentPosOverride(pos,mesh_id))
|
||||
{
|
||||
occ_color = OVERRIDE_COLOR_OCCLUDED;
|
||||
visible_color = OVERRIDE_COLOR_VISIBLE;
|
||||
|
|
@ -1758,7 +1772,6 @@ void LLVOAvatar::renderBones()
|
|||
LLVector3 begin_pos(0,0,0);
|
||||
LLVector3 end_pos(jointp->getEnd());
|
||||
|
||||
F32 sphere_scale = SPHERE_SCALEF;
|
||||
|
||||
gGL.pushMatrix();
|
||||
gGL.multMatrix( &jointp->getXform()->getWorldMatrix().mMatrix[0][0] );
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ public:
|
|||
F32 getLastSkinTime() { return mLastSkinTime; }
|
||||
U32 renderTransparent(BOOL first_pass);
|
||||
void renderCollisionVolumes();
|
||||
void renderBones();
|
||||
void renderBones(const std::string &selected_joint = std::string());
|
||||
void renderJoints();
|
||||
static void deleteCachedImages(bool clearAll=true);
|
||||
static void destroyGL();
|
||||
|
|
|
|||
|
|
@ -1845,6 +1845,12 @@ bool LLVivoxVoiceClient::waitForChannel()
|
|||
return false;
|
||||
}
|
||||
|
||||
if (sShuttingDown)
|
||||
{
|
||||
logoutOfVivox(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (LLVoiceClient::instance().getVoiceEffectEnabled())
|
||||
{
|
||||
retrieveVoiceFonts();
|
||||
|
|
|
|||
|
|
@ -518,7 +518,10 @@ void LLVOSky::init()
|
|||
|
||||
void LLVOSky::calc()
|
||||
{
|
||||
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLEnvironment& environment = LLEnvironment::instance();
|
||||
|
||||
LLSettingsSky::ptr_t psky = environment.getCurrentSky(); // <FS:Ansariel> Factor out instance() calls
|
||||
|
||||
// invariants across whole sky tex process...
|
||||
m_atmosphericsVars.blue_density = psky->getBlueDensity();
|
||||
|
|
@ -528,7 +531,7 @@ void LLVOSky::calc()
|
|||
m_atmosphericsVars.density_multiplier = psky->getDensityMultiplier();
|
||||
m_atmosphericsVars.distance_multiplier = psky->getDistanceMultiplier();
|
||||
m_atmosphericsVars.max_y = psky->getMaxY();
|
||||
m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedSunNorm();
|
||||
m_atmosphericsVars.sun_norm = environment.getClampedSunNorm(); // <FS:Ansariel> Factor out instance() calls
|
||||
m_atmosphericsVars.sunlight = psky->getIsSunUp() ? psky->getSunlightColor() : psky->getMoonlightColor();
|
||||
m_atmosphericsVars.ambient = psky->getAmbientColor();
|
||||
m_atmosphericsVars.glow = psky->getGlow();
|
||||
|
|
@ -1096,8 +1099,11 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable)
|
|||
bool draw_sun = updateHeavenlyBodyGeometry(drawable, mSunScale, FACE_SUN, mSun, up, right);
|
||||
bool draw_moon = updateHeavenlyBodyGeometry(drawable, mMoonScale, FACE_MOON, mMoon, up, right);
|
||||
|
||||
draw_sun &= LLEnvironment::getInstance()->getIsSunUp();
|
||||
draw_moon &= LLEnvironment::getInstance()->getIsMoonUp();
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLEnvironment& environment = LLEnvironment::instance();
|
||||
|
||||
draw_sun &= environment.getIsSunUp(); // <FS:Ansariel> Factor out instance() calls
|
||||
draw_moon &= environment.getIsMoonUp(); // <FS:Ansariel> Factor out instance() calls
|
||||
|
||||
mSun.setDraw(draw_sun);
|
||||
mMoon.setDraw(draw_moon);
|
||||
|
|
|
|||
|
|
@ -815,6 +815,11 @@ void LLVOVolume::updateTextureVirtualSize(bool forced)
|
|||
LL_RECORD_BLOCK_TIME(FTM_VOLUME_TEXTURES);
|
||||
// Update the pixel area of all faces
|
||||
|
||||
if (mDrawable.isNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(!forced)
|
||||
{
|
||||
if(!isVisible())
|
||||
|
|
@ -2521,10 +2526,13 @@ bool LLVOVolume::notifyAboutCreatingTexture(LLViewerTexture *texture)
|
|||
} //if
|
||||
} //for
|
||||
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLMaterialMgr& mmgr = LLMaterialMgr::instance();
|
||||
|
||||
//setup new materials
|
||||
for(map_te_material::const_iterator it = new_material.begin(), end = new_material.end(); it != end; ++it)
|
||||
{
|
||||
LLMaterialMgr::getInstance()->put(getID(), it->first, *it->second);
|
||||
mmgr.put(getID(), it->first, *it->second); // <FS:Ansariel> Factor out instance() calls
|
||||
LLViewerObject::setTEMaterialParams(it->first, it->second);
|
||||
}
|
||||
|
||||
|
|
@ -2600,10 +2608,13 @@ bool LLVOVolume::notifyAboutMissingAsset(LLViewerTexture *texture)
|
|||
} //switch
|
||||
} //for
|
||||
|
||||
// <FS:Ansariel> Factor out instance() calls
|
||||
LLMaterialMgr& mmgr = LLMaterialMgr::instance();
|
||||
|
||||
//setup new materials
|
||||
for(map_te_material::const_iterator it = new_material.begin(), end = new_material.end(); it != end; ++it)
|
||||
{
|
||||
LLMaterialMgr::getInstance()->setLocalMaterial(getRegion()->getRegionID(), it->second);
|
||||
mmgr.setLocalMaterial(getRegion()->getRegionID(), it->second); // <FS:Ansariel> Factor out instance() calls
|
||||
LLViewerObject::setTEMaterialParams(it->first, it->second);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -139,27 +139,35 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name,
|
|||
// search_label += LLTrans::getString("worn");
|
||||
// item_state = IS_WORN;
|
||||
//}
|
||||
if (mWornIndicationEnabled && get_is_item_worn(mInventoryItemUUID))
|
||||
if (mWornIndicationEnabled)
|
||||
{
|
||||
std::string attachment_point_name;
|
||||
if (getType() != LLAssetType::AT_OBJECT || !isAgentAvatarValid()) // System layer or error condition, can't figure out attach point
|
||||
if (getType() == LLAssetType::AT_OBJECT && get_is_item_worn(mInventoryItemUUID))
|
||||
{
|
||||
std::string attachment_point_name;
|
||||
if (!isAgentAvatarValid())
|
||||
{
|
||||
search_label += LLTrans::getString("worn");
|
||||
}
|
||||
else if (gAgentAvatarp->getAttachedPointName(mInventoryItemUUID, attachment_point_name))
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[ATTACHMENT_POINT]"] = LLTrans::getString(attachment_point_name);
|
||||
search_label += LLTrans::getString("WornOnAttachmentPoint", args);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[ATTACHMENT_ERROR]"] = LLTrans::getString(attachment_point_name);
|
||||
search_label += LLTrans::getString("AttachmentErrorMessage", args);
|
||||
}
|
||||
|
||||
item_state = LLAppearanceMgr::instance().isLinkedInCOF(mInventoryItemUUID) ? IS_WORN : IS_MISMATCH;
|
||||
}
|
||||
else if (getType() != LLAssetType::AT_OBJECT && LLAppearanceMgr::instance().isLinkedInCOF(mInventoryItemUUID))
|
||||
{
|
||||
search_label += LLTrans::getString("worn");
|
||||
item_state = IS_WORN;
|
||||
}
|
||||
else if (gAgentAvatarp->getAttachedPointName(mInventoryItemUUID, attachment_point_name))
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[ATTACHMENT_POINT]"] = LLTrans::getString(attachment_point_name);
|
||||
search_label += LLTrans::getString("WornOnAttachmentPoint", args);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[ATTACHMENT_ERROR]"] = LLTrans::getString(attachment_point_name);
|
||||
search_label += LLTrans::getString("AttachmentErrorMessage", args);
|
||||
}
|
||||
|
||||
item_state = LLAppearanceMgr::instance().isLinkedInCOF(mInventoryItemUUID) ? IS_WORN : IS_MISMATCH;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
|
|
|
|||
|
|
@ -2505,6 +2505,9 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
|
|||
|
||||
LL_RECORD_BLOCK_TIME(FTM_CULL);
|
||||
|
||||
// <FS:Ansariel> Factor out instance() call
|
||||
LLWorld& world = LLWorld::instance();
|
||||
|
||||
grabReferences(result);
|
||||
|
||||
sCull->clear();
|
||||
|
|
@ -2564,8 +2567,8 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
|
|||
camera.disableUserClipPlane();
|
||||
}
|
||||
|
||||
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
|
||||
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
|
||||
for (LLWorld::region_list_t::const_iterator iter = world.getRegionList().begin(); // <FS:Ansariel> Factor out instance() call
|
||||
iter != world.getRegionList().end(); ++iter)
|
||||
{
|
||||
LLViewerRegion* region = *iter;
|
||||
|
||||
|
|
@ -2630,7 +2633,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
|
|||
|
||||
if (render_water)
|
||||
{
|
||||
LLWorld::getInstance()->precullWaterObjects(camera, sCull, render_water);
|
||||
world.precullWaterObjects(camera, sCull, render_water); // <FS:Ansariel> Factor out instance() call
|
||||
}
|
||||
|
||||
gGL.matrixMode(LLRender::MM_PROJECTION);
|
||||
|
|
@ -3061,8 +3064,9 @@ void LLPipeline::rebuildGroups()
|
|||
if (!group->isDead())
|
||||
{
|
||||
group->rebuildGeom();
|
||||
|
||||
if (group->getSpatialPartition()->mRenderByGroup)
|
||||
// <FS:Beq> defend against occasional crash due to null SP
|
||||
// if(group->getSpatialPartition()->mRenderByGroup)
|
||||
if(group->getSpatialPartition() && (group->getSpatialPartition()->mRenderByGroup))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
|
|
@ -6160,7 +6164,7 @@ void LLPipeline::setupAvatarLights(bool for_edit)
|
|||
}
|
||||
}
|
||||
F32 backlight_mag;
|
||||
if (LLEnvironment::instance().getIsSunUp())
|
||||
if (environment.getIsSunUp()) // <FS:Ansariel> Factor out instance() calls
|
||||
{
|
||||
backlight_mag = BACKLIGHT_DAY_MAGNITUDE_OBJECT;
|
||||
}
|
||||
|
|
@ -6704,7 +6708,7 @@ void LLPipeline::enableLightsDynamic()
|
|||
{
|
||||
gPipeline.enableLightsAvatar();
|
||||
}
|
||||
else if (gAgentAvatarp->mSpecialRenderMode >= 1) // anim preview
|
||||
else if (gAgentAvatarp->mSpecialRenderMode == 2) // anim preview
|
||||
{
|
||||
gPipeline.enableLightsAvatarEdit(LLColor4(0.7f, 0.6f, 0.3f, 1.f));
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 252 B |
Binary file not shown.
|
Before Width: | Height: | Size: 534 B After Width: | Height: | Size: 307 B |
Binary file not shown.
|
|
@ -723,6 +723,7 @@ with the same filename but different name
|
|||
|
||||
<texture name="TabTop_Right_Off" file_name="containers/TabTop_Right_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" />
|
||||
<texture name="TabTop_Right_Selected" file_name="containers/TabTop_Right_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" />
|
||||
<texture name="TabTop_Right_Flashing" file_name="containers/TabTop_Right_Flashing.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" />
|
||||
<texture name="TabTop_Middle_Off" file_name="containers/TabTop_Middle_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="120" scale.bottom="9" />
|
||||
<texture name="TabTop_Middle_Selected" file_name="containers/TabTop_Middle_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="96" scale.bottom="9" />
|
||||
<texture name="TabTop_Left_Off" file_name="containers/TabTop_Left_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="120" scale.bottom="9" />
|
||||
|
|
|
|||
|
|
@ -15,13 +15,18 @@
|
|||
<string name="inactive_combo_text">
|
||||
Voreinstellung...
|
||||
</string>
|
||||
|
||||
<panel name="controls">
|
||||
<panel name="zoom">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
|
||||
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
|
||||
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
|
||||
</panel>
|
||||
<panel name="zoom">
|
||||
<layout_stack name="camera_view_layout_stack">
|
||||
<layout_panel name="camera_rotate_layout_panel">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="camera_zoom_layout_panel">
|
||||
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="panel_track">
|
||||
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
<panel name="buttons_panel">
|
||||
<panel_camera_item name="front_view" tool_tip="Frontalansicht">
|
||||
|
|
@ -50,9 +55,11 @@
|
|||
</panel_camera_item>
|
||||
<button label="Position..." name="camera_position_btn"/>
|
||||
</panel>
|
||||
<combo_box name="preset_combo">
|
||||
<combo_box.item label="Voreinstellung verw." name="Use preset"/>
|
||||
</combo_box>
|
||||
<button name="gear_btn" tool_tip="Kamera-Voreinstellungen"/>
|
||||
<button name="save_preset_btn" tool_tip="Als Voreinstellung speichern"/>
|
||||
<panel name="preset_buttons_panel">
|
||||
<combo_box name="preset_combo">
|
||||
<combo_box.item label="Voreinstellung verw." name="Use preset"/>
|
||||
</combo_box>
|
||||
<button name="gear_btn" tool_tip="Kamera-Voreinstellungen"/>
|
||||
<button name="save_preset_btn" tool_tip="Als Voreinstellung speichern"/>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -88,6 +88,22 @@
|
|||
<string name="tbd">
|
||||
folgt
|
||||
</string>
|
||||
<string name="TooManyJoint">
|
||||
Skinning wurde wegen zu vieler Gelenke deaktiviert: [JOINTS], Maximum: [MAX]
|
||||
</string>
|
||||
<string name="UnrecognizedJoint">
|
||||
Geriggt an einem unbekannten Gelenk: [NAME]
|
||||
</string>
|
||||
<string name="UnknownJoints">
|
||||
Skinning wurde wegen [COUNT] unbekannter Gelenke deaktiviert.
|
||||
</string>
|
||||
<string name="ModelLoaded">
|
||||
Modell [MODEL_NAME] wurde geladen.
|
||||
</string>
|
||||
<string name="IncompleteTC">
|
||||
Daten für Textur-Koordinaten sind unvollständig.
|
||||
</string>
|
||||
|
||||
<panel name="left_panel">
|
||||
<panel name="model_name_representation_panel">
|
||||
<text name="name_label">
|
||||
|
|
@ -282,6 +298,19 @@
|
|||
</panel>
|
||||
</panel>
|
||||
<panel label="Hochladeoptionen" name="modifiers_panel">
|
||||
<text name="scale_label">
|
||||
Skalierung (1=keine):
|
||||
</text>
|
||||
<spinner name="import_scale" value="1.0"/>
|
||||
<text name="dimensions_label">
|
||||
Dimensionen:
|
||||
</text>
|
||||
<text name="import_dimensions">
|
||||
[X] X [Y] X [Z]
|
||||
</text>
|
||||
<check_box label="Texturen einschließen" name="upload_textures"/>
|
||||
</panel>
|
||||
<panel label="Übersteuerung" title="Avatar" name="rigging_panel">
|
||||
<text name="scale_label">
|
||||
Skalierung (1=keine):
|
||||
</text>
|
||||
|
|
@ -296,9 +325,9 @@
|
|||
<text name="include_label">
|
||||
Nur für Avatarmodelle:
|
||||
</text>
|
||||
<check_box label="Skingewicht einschließen" name="upload_skin"/>
|
||||
<check_box label="Gelenkpositionen einschließen" name="upload_joints"/>
|
||||
<check_box label="Skala sperren, wenn Gelenkposition definiert ist" name="lock_scale_if_joint_position"/>
|
||||
<check_box label="Skingewicht einschließen" name="upload_skin" top_pad="0"/>
|
||||
<check_box label="Gelenkpositionen einschließen" name="upload_joints" top_pad="2"/>
|
||||
<check_box label="Skala sperren, wenn Gelenkposition definiert ist" name="lock_scale_if_joint_position" top_pad="15"/>
|
||||
<check_box label="An Avatarform anpassen" name="deform"/>
|
||||
<radio_group name="deform_base">
|
||||
<radio_item label="Mann" name="0"/>
|
||||
|
|
@ -309,8 +338,29 @@
|
|||
Z-Offset (Av. anheben / senken):
|
||||
</text>
|
||||
<spinner name="pelvis_offset" value="0.0"/>
|
||||
<panel name="avatar_model_hint_panel">
|
||||
<text name="avatar_model_hint_text">
|
||||
<text name="skin_too_many_joints" text_color="Orange">
|
||||
Zu viele skingewichtete Gelenke
|
||||
</text>
|
||||
<text name="skin_unknown_joint">
|
||||
Modell hat unbekannte Gelenke
|
||||
</text>
|
||||
<text name="joints_descr">
|
||||
Gelenke:
|
||||
</text>
|
||||
<text name="conflicts_description">
|
||||
[CONFLICTS] Konflikte in [JOINTS_COUNT] Gelenk(e)
|
||||
</text>
|
||||
<text name="pos_overrides_descr">
|
||||
Position übersteuert für Gelenk '[JOINT]':
|
||||
</text>
|
||||
<scroll_list name="pos_overrides_list">
|
||||
<scroll_list.columns label="Modell" name="model_name"/>
|
||||
<scroll_list.columns label="X" name="axis_x"/>
|
||||
<scroll_list.columns label="Y" name="axis_y"/>
|
||||
<scroll_list.columns label="Z" name="axis_z"/>
|
||||
</scroll_list>
|
||||
<panel name="avatar_model_hint_panel" left="380" width="230">
|
||||
<text name="avatar_model_hint_text" width="220">
|
||||
Hinweis:
|
||||
Zu viele Objekte nutzen unnötigerweise den Standard-Anhängepunkt (Rechte Hand).
|
||||
|
||||
|
|
@ -318,6 +368,9 @@ Bitte ziehen Sie einen anderen Anhängepunkt nahe der Objektposition in Betracht
|
|||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel label="Protokoll" name="logs_panel">
|
||||
<check_box label="Detailliertes Log anzeigen" name="verbose_logging"/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<panel name="weights_and_warning_panel">
|
||||
<button label="Gewichte und Gebühr berechnen" name="calculate_btn" tool_tip="Gewichte und Gebühr berechnen" width="200"/>
|
||||
|
|
@ -339,7 +392,7 @@ Bitte ziehen Sie einen anderen Anhängepunkt nahe der Objektposition in Betracht
|
|||
<text name="server_weight">
|
||||
Server: [SIM]
|
||||
</text>
|
||||
<panel name="physics_costs_panel">
|
||||
<panel name="price_breakdown_panel">
|
||||
<text name="price_breakdown_title">
|
||||
Kosten-Aufstellung
|
||||
</text>
|
||||
|
|
@ -360,7 +413,7 @@ Niedrig:
|
|||
Niedrigste:
|
||||
</text>
|
||||
-->
|
||||
<panel name="physics_breakdown_panel">
|
||||
<panel name="physics_costs_panel">
|
||||
<text name="physics_breakdown_title">
|
||||
Physik-Kosten
|
||||
</text>
|
||||
|
|
@ -373,53 +426,39 @@ Analysiert:
|
|||
<panel name="preview_controls_panel">
|
||||
<panel name="preview_controls_inner_panel">
|
||||
<text name="preview_controls_title">
|
||||
Vorschau-Einstellungen:
|
||||
Vorschau-Kontrollen
|
||||
</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 name="preview_lod_combo" tool_tip="Dargestelltes LOD in der Vorschau">
|
||||
<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">Niedrigstes </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"/>
|
||||
<slider name="physics_explode" width="75" />
|
||||
<check_box label="Gelenk Position." name="show_joint_positions"/>
|
||||
<check_box label="Gelenkposition-Übersteuerung" name="show_joint_overrides"/>
|
||||
<check_box label="Skingew." name="show_skin_weight"/>
|
||||
</panel>
|
||||
<text name="warning_title" width="60">
|
||||
HINWEIS:
|
||||
</text>
|
||||
<text name="warning_message">
|
||||
Sie haben keine Berechtigung zum Hochladen von Netzmodellen. [[VURL] Weitere Infos], wie Sie sich zertifizieren lassen können.
|
||||
Sie haben keine Berechtigung zum Hochladen von Netzmodellen. [[VURL] Infos] zur Zertifizierung.
|
||||
</text>
|
||||
<text name="status">
|
||||
[STATUS]
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel name="right_panel">
|
||||
<text name="lod_label">
|
||||
Vorschau:
|
||||
</text>
|
||||
</panel>
|
||||
<panel name="lower_right_panel">
|
||||
</panel>
|
||||
<text name="lod_label">
|
||||
Vorschau:
|
||||
</text>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
<combo_box.item label="Flug-Assistent: Extremer Boost" name="flight_extreme"/>
|
||||
</combo_box>
|
||||
<slider label="Überblendzeit für Umgebungseinstellungen:" tool_tip="Intervall in Sekunden in dem Änderungen an den Umgebungseinstellungen ineinander überblenden. 0 = direkt ohne Verzögerung" name="manual_environment_change_transition_period"/>
|
||||
<check_box name="EnvironmentPersistAcrossLogin" label="Sitzungsübergreifende Umgebungseinstellungen aktivieren" tool_tip="Stellt die aktuellen Umgebungseinstellungen nach einem erneuten Login wieder her."/>
|
||||
</panel>
|
||||
|
||||
<!--Protection-->
|
||||
|
|
|
|||
|
|
@ -1,273 +1,297 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater
|
||||
legacy_header_height="0"
|
||||
header_height="0"
|
||||
bg_opaque_image="Window_NoTitle_Foreground"
|
||||
bg_alpha_image="Window_NoTitle_Foreground"
|
||||
positioning="specified"
|
||||
right="-460"
|
||||
bottom="-50"
|
||||
follows="left|bottom"
|
||||
can_minimize="false"
|
||||
can_close="true"
|
||||
height="165"
|
||||
layout="topleft"
|
||||
name="camera_floater"
|
||||
help_topic="camera_floater"
|
||||
save_visibility="true"
|
||||
show_title="false"
|
||||
single_instance="true"
|
||||
title="Camera Controls"
|
||||
chrome="true"
|
||||
save_rect="true"
|
||||
width="195">
|
||||
<floater.string
|
||||
name="rotate_tooltip">
|
||||
legacy_header_height="0"
|
||||
header_height="0"
|
||||
bg_opaque_image="Window_NoTitle_Foreground"
|
||||
bg_alpha_image="Window_NoTitle_Foreground"
|
||||
right="-460"
|
||||
bottom="-50"
|
||||
can_dock="false"
|
||||
can_minimize="false"
|
||||
can_resize="true"
|
||||
can_close="false"
|
||||
chrome="true"
|
||||
follows="bottom"
|
||||
height="135"
|
||||
min_height="135"
|
||||
layout="topleft"
|
||||
name="camera_floater"
|
||||
title="Camera Controls"
|
||||
help_topic="camera_floater"
|
||||
save_rect="true"
|
||||
save_visibility="true"
|
||||
show_title="false"
|
||||
single_instance="true"
|
||||
width="150"
|
||||
min_width="130">
|
||||
<floater.string name="rotate_tooltip">
|
||||
Rotate Camera Around Focus
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="zoom_tooltip">
|
||||
</floater.string>
|
||||
<floater.string name="zoom_tooltip">
|
||||
Zoom Camera Towards Focus
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="move_tooltip">
|
||||
</floater.string>
|
||||
<floater.string name="move_tooltip">
|
||||
Move Camera Up and Down, Left and Right
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="free_mode_title">
|
||||
</floater.string>
|
||||
<floater.string name="free_mode_title">
|
||||
View Object
|
||||
</floater.string>
|
||||
<string name="inactive_combo_text">Use preset</string>
|
||||
<panel
|
||||
border="false"
|
||||
follows="top|left"
|
||||
height="110"
|
||||
layout="topleft"
|
||||
left="2"
|
||||
top_pad="0"
|
||||
mouse_opaque="false"
|
||||
name="controls"
|
||||
width="190">
|
||||
<!--TODO: replace + - images -->
|
||||
<panel
|
||||
border="false"
|
||||
class="camera_zoom_panel"
|
||||
bottom="-1"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
mouse_opaque="false"
|
||||
name="zoom"
|
||||
top="0"
|
||||
width="190">
|
||||
<joystick_rotate
|
||||
follows="top|left"
|
||||
height="78"
|
||||
layout="topleft"
|
||||
left="2"
|
||||
name="cam_rotate_stick"
|
||||
quadrant="left"
|
||||
sound_flags="3"
|
||||
visible="true"
|
||||
tool_tip="Orbit camera around focus"
|
||||
top="25"
|
||||
width="78" />
|
||||
<button
|
||||
follows="top|left"
|
||||
height="18"
|
||||
image_disabled="AddItem_Disabled"
|
||||
image_selected="AddItem_Press"
|
||||
image_unselected="AddItem_Off"
|
||||
layout="topleft"
|
||||
left_pad="4"
|
||||
name="zoom_plus_btn"
|
||||
width="18"
|
||||
top="23">
|
||||
<commit_callback
|
||||
function="Zoom.plus" />
|
||||
<mouse_held_callback
|
||||
function="Zoom.plus" />
|
||||
</button>
|
||||
<slider_bar
|
||||
height="50"
|
||||
layout="topleft"
|
||||
name="zoom_slider"
|
||||
orientation="vertical"
|
||||
tool_tip="Zoom camera toward focus"
|
||||
top_pad="0"
|
||||
min_val="0"
|
||||
max_val="1"
|
||||
width="18">
|
||||
<commit_callback function="Slider.value_changed"/>
|
||||
</slider_bar>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="18"
|
||||
image_disabled="MinusItem_Disabled"
|
||||
image_selected="MinusItem_Press"
|
||||
image_unselected="MinusItem_Off"
|
||||
layout="topleft"
|
||||
name="zoom_minus_btn"
|
||||
top_pad="0"
|
||||
width="18">
|
||||
<commit_callback
|
||||
function="Zoom.minus" />
|
||||
<mouse_held_callback
|
||||
function="Zoom.minus" />
|
||||
</button>
|
||||
<joystick_track
|
||||
follows="top|left"
|
||||
height="78"
|
||||
image_selected="Cam_Tracking_In"
|
||||
image_unselected="Cam_Tracking_Out"
|
||||
layout="topleft"
|
||||
left_pad="4"
|
||||
name="cam_track_stick"
|
||||
quadrant="left"
|
||||
scale_image="false"
|
||||
sound_flags="3"
|
||||
tool_tip="Move camera up and down, left and right"
|
||||
top="25"
|
||||
width="78"/>
|
||||
</panel>
|
||||
</panel>
|
||||
<panel
|
||||
follows="all"
|
||||
height="27"
|
||||
layout="topleft"
|
||||
left="2"
|
||||
name="buttons_panel"
|
||||
top_pad="0"
|
||||
width="190">
|
||||
</floater.string>
|
||||
<string name="inactive_combo_text">Use preset</string>
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="25"
|
||||
layout="topleft"
|
||||
left="2"
|
||||
name="buttons_panel"
|
||||
width="120"
|
||||
top_pad="-5">
|
||||
<panel_camera_item
|
||||
name="front_view"
|
||||
tool_tip="Front View"
|
||||
width="18"
|
||||
left="2">
|
||||
name="front_view"
|
||||
tool_tip="Front View"
|
||||
width="18"
|
||||
left="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="Front View" />
|
||||
<panel_camera_item.picture
|
||||
image_name="Cam_Preset_Front_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_Front_On" />
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="Front View" />
|
||||
<panel_camera_item.picture image_name="Cam_Preset_Front_Off" />
|
||||
<panel_camera_item.selected_picture image_name="Cam_Preset_Front_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="group_view"
|
||||
tool_tip="Side View"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
name="group_view"
|
||||
tool_tip="Side View"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="Side View" />
|
||||
<panel_camera_item.picture
|
||||
image_name="Cam_Preset_Side_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_Side_On" />
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="Side View" />
|
||||
<panel_camera_item.picture image_name="Cam_Preset_Side_Off" />
|
||||
<panel_camera_item.selected_picture image_name="Cam_Preset_Side_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="rear_view"
|
||||
tool_tip="Rear View"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
name="rear_view"
|
||||
tool_tip="Rear View"
|
||||
parameter="Rear View" />
|
||||
<panel_camera_item.picture
|
||||
image_name="Cam_Preset_Back_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_Back_On" />
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
tool_tip="Rear View"
|
||||
parameter="Rear View" />
|
||||
<panel_camera_item.picture image_name="Cam_Preset_Back_Off" />
|
||||
<panel_camera_item.selected_picture image_name="Cam_Preset_Back_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="object_view"
|
||||
tool_tip="Object View"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="object_view" />
|
||||
<panel_camera_item.picture
|
||||
image_name="Object_View_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Object_View_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
<panel_camera_item.picture image_name="Object_View_Off" />
|
||||
<panel_camera_item.selected_picture image_name="Object_View_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="mouselook_view"
|
||||
tool_tip="Mouselook View"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="mouselook_view" />
|
||||
<panel_camera_item.picture
|
||||
image_name="MouseLook_View_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="MouseLook_View_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
<panel_camera_item.picture image_name="MouseLook_View_Off" />
|
||||
<panel_camera_item.selected_picture image_name="MouseLook_View_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="reset_view"
|
||||
tool_tip="Reset view"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="reset_view" />
|
||||
<panel_camera_item.picture
|
||||
image_name="StopReload_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="StopReload_Over" />
|
||||
</panel_camera_item>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
top_delta="2"
|
||||
label="Position..."
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="camera_position_btn"
|
||||
width="63">
|
||||
<button.commit_callback
|
||||
function="Floater.Show"
|
||||
parameter="prefs_view_advanced"/>
|
||||
</button>
|
||||
<panel_camera_item.picture image_name="StopReload_Off" />
|
||||
<panel_camera_item.selected_picture image_name="StopReload_Over" />
|
||||
</panel_camera_item>
|
||||
</panel>
|
||||
<combo_box
|
||||
height="23"
|
||||
mouse_opaque="true"
|
||||
name="preset_combo"
|
||||
width="135">
|
||||
<combo_list
|
||||
mouse_wheel_opaque="true"/>
|
||||
<combo_box.item
|
||||
label="Use preset"
|
||||
name="Use preset"
|
||||
value="default" />
|
||||
</combo_box>
|
||||
<button
|
||||
height="23"
|
||||
width="24"
|
||||
layout="topleft"
|
||||
<panel
|
||||
border="false"
|
||||
width="140"
|
||||
class="camera_zoom_panel"
|
||||
height="60"
|
||||
layout="topleft"
|
||||
left="5"
|
||||
mouse_opaque="false"
|
||||
name="zoom"
|
||||
follows="all">
|
||||
<layout_stack
|
||||
top="0"
|
||||
enabled="true"
|
||||
height="60"
|
||||
left="0"
|
||||
mouse_opaque="true"
|
||||
name="gear_btn"
|
||||
tool_tip="Camera Presets"
|
||||
top_delta="0"
|
||||
left_pad="3"
|
||||
image_overlay="Icon_Gear"
|
||||
is_toggle="true">
|
||||
<button.commit_callback
|
||||
function="CameraPresets.ShowPresetsList"/>
|
||||
</button>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
name="camera_view_layout_stack"
|
||||
orientation="horizontal"
|
||||
follows="all">
|
||||
|
||||
<layout_panel
|
||||
name="camera_rotate_layout_panel"
|
||||
user_resize="false"
|
||||
height="80"
|
||||
width="80">
|
||||
|
||||
<joystick_rotate
|
||||
follows="all"
|
||||
height="80"
|
||||
width="80"
|
||||
image_selected="Cam_Rotate_In"
|
||||
image_unselected="Cam_Rotate_Out"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
mouse_opaque="false"
|
||||
name="cam_rotate_stick"
|
||||
quadrant="left"
|
||||
scale_image="true"
|
||||
sound_flags="3"
|
||||
visible="true"
|
||||
tool_tip="Orbit camera around focus"
|
||||
held_down_delay.seconds="0.0"
|
||||
top="0" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="camera_zoom_layout_panel"
|
||||
auto_resize="false"
|
||||
user_resize="false"
|
||||
height="70"
|
||||
width="16">
|
||||
<button
|
||||
follows="top|left"
|
||||
height="16"
|
||||
image_disabled="AddItem_Disabled"
|
||||
image_selected="AddItem_Press"
|
||||
image_unselected="AddItem_Off"
|
||||
layout="topleft"
|
||||
left_delta="-2"
|
||||
name="zoom_plus_btn"
|
||||
scale_image="false"
|
||||
width="16"
|
||||
top="0">
|
||||
<commit_callback function="Zoom.plus" />
|
||||
<mouse_held_callback function="Zoom.plus" />
|
||||
</button>
|
||||
<slider_bar
|
||||
height="48"
|
||||
layout="topleft"
|
||||
name="zoom_slider"
|
||||
orientation="vertical"
|
||||
follows="top|left|bottom"
|
||||
tool_tip="Zoom camera toward focus"
|
||||
top_delta="13"
|
||||
left_delta="1"
|
||||
min_val="0"
|
||||
max_val="1"
|
||||
width="16">
|
||||
<commit_callback function="Slider.value_changed" />
|
||||
</slider_bar>
|
||||
<button
|
||||
follows="bottom|left"
|
||||
height="16"
|
||||
image_disabled="MinusItem_Disabled"
|
||||
image_selected="MinusItem_Press"
|
||||
image_unselected="MinusItem_Off"
|
||||
layout="topleft"
|
||||
name="zoom_minus_btn"
|
||||
scale_image="true"
|
||||
top_delta="44"
|
||||
left_delta="0"
|
||||
width="16">
|
||||
<commit_callback function="Zoom.minus" />
|
||||
<mouse_held_callback function="Zoom.minus" />
|
||||
</button>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="panel_track"
|
||||
user_resize="false"
|
||||
height="80"
|
||||
width="80">
|
||||
|
||||
<joystick_track
|
||||
follows="all"
|
||||
height="80"
|
||||
width="80"
|
||||
image_selected="Cam_Tracking_In"
|
||||
image_unselected="Cam_Tracking_Out"
|
||||
layout="topleft"
|
||||
left_delta="-2"
|
||||
name="cam_track_stick"
|
||||
quadrant="left"
|
||||
scale_image="true"
|
||||
sound_flags="3"
|
||||
tool_tip="Move camera up and down, left and right"
|
||||
top="0" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
<panel
|
||||
border="false"
|
||||
height="50"
|
||||
layout="topleft"
|
||||
follows="bottom|left|right"
|
||||
left="0"
|
||||
name="preset_buttons_panel"
|
||||
mouse_opaque="false">
|
||||
<button
|
||||
follows="bottom|left|right"
|
||||
height="22"
|
||||
bottom_delta="23"
|
||||
label="Position..."
|
||||
layout="topleft"
|
||||
left_pad="3"
|
||||
left_delta="5"
|
||||
name="camera_position_btn"
|
||||
width="113">
|
||||
<button.commit_callback
|
||||
function="Floater.Show"
|
||||
parameter="prefs_view_advanced" />
|
||||
</button>
|
||||
<button
|
||||
follows="bottom|right"
|
||||
height="22"
|
||||
layout="topleft"
|
||||
left_pad="3"
|
||||
name="save_preset_btn"
|
||||
tool_tip="Save as Preset"
|
||||
image_overlay="Activate_Checkmark"
|
||||
image_overlay="Command_Destinations_Icon"
|
||||
top_delta="0"
|
||||
width="24">
|
||||
<button.commit_callback
|
||||
function="CameraPresets.Save"/>
|
||||
</button>
|
||||
width="22">
|
||||
<button.commit_callback function="CameraPresets.Save" />
|
||||
</button>
|
||||
<combo_box
|
||||
follows="bottom|left|right"
|
||||
height="22"
|
||||
left="5"
|
||||
mouse_opaque="true"
|
||||
name="preset_combo"
|
||||
top_pad="0"
|
||||
width="113">
|
||||
<combo_list mouse_wheel_opaque="true" />
|
||||
<combo_box.item
|
||||
label="Use preset"
|
||||
name="Use preset"
|
||||
value="default" />
|
||||
</combo_box>
|
||||
<button
|
||||
follows="bottom|right"
|
||||
height="22"
|
||||
width="22"
|
||||
layout="topleft"
|
||||
mouse_opaque="true"
|
||||
name="gear_btn"
|
||||
tool_tip="Camera Presets"
|
||||
left_pad="3"
|
||||
image_overlay="Icon_Gear"
|
||||
is_toggle="true">
|
||||
<button.commit_callback function="CameraPresets.ShowPresetsList" />
|
||||
</button>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -4,11 +4,10 @@
|
|||
can_drag_on_left="false"
|
||||
can_minimize="true"
|
||||
can_resize="true"
|
||||
height="575"
|
||||
min_height="600"
|
||||
width="1024"
|
||||
top="0"
|
||||
min_width="1024"
|
||||
height="590"
|
||||
min_height="625"
|
||||
width="960"
|
||||
min_width="960"
|
||||
name="Model Preview"
|
||||
title="Upload Model"
|
||||
help_topic="upload_model">
|
||||
|
|
@ -43,15 +42,22 @@
|
|||
<string name="decomposing">Analyzing...</string>
|
||||
<string name="simplifying">Simplifying...</string>
|
||||
<string name="tbd">TBD</string>
|
||||
|
||||
<!-- Warnings and info from model loader-->
|
||||
<string name="TooManyJoint">Skinning disabled due to too many joints: [JOINTS], maximum: [MAX]</string>
|
||||
<string name="UnrecognizedJoint">Rigged to unrecognized joint name [NAME]</string>
|
||||
<string name="UnknownJoints">Skinning disabled due to [COUNT] unknown joints</string>
|
||||
<string name="ModelLoaded">Model [MODEL_NAME] loaded</string>
|
||||
<string name="IncompleteTC">Texture coordinates data is not complete.</string>
|
||||
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="570"
|
||||
height="595"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="left_panel"
|
||||
top_pad="0"
|
||||
width="630">
|
||||
width="635">
|
||||
<panel
|
||||
follows="all"
|
||||
height="50"
|
||||
|
|
@ -63,7 +69,7 @@
|
|||
follows="top|left"
|
||||
layout="topleft"
|
||||
height="15"
|
||||
left="15"
|
||||
left="2"
|
||||
name="name_label"
|
||||
text_color="White"
|
||||
top="0"
|
||||
|
|
@ -82,12 +88,16 @@
|
|||
</panel>
|
||||
<tab_container
|
||||
follows="top|left"
|
||||
top_pad="15"
|
||||
top_pad="0"
|
||||
left="0"
|
||||
height="300"
|
||||
height="330"
|
||||
width="635"
|
||||
name="import_tab"
|
||||
tab_position="top">
|
||||
tab_position="top"
|
||||
enable_tabs_flashing="true"
|
||||
tabs_flashing_color="MenuItemFlashBgColor">
|
||||
<last_tab
|
||||
tab_top_image_flash="TabTop_Right_Flashing"/> <!-- for log tab -->
|
||||
<!-- LOD PANEL -->
|
||||
<panel
|
||||
help_topic="upload_model_lod"
|
||||
|
|
@ -98,12 +108,12 @@
|
|||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="275"
|
||||
height="306"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="lod_tab_border"
|
||||
top_pad="0"
|
||||
width="629" />
|
||||
width="619" />
|
||||
<text
|
||||
follows="left|top"
|
||||
height="18"
|
||||
|
|
@ -736,7 +746,7 @@
|
|||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="275"
|
||||
height="306"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="physics_tab_border"
|
||||
|
|
@ -1095,11 +1105,12 @@
|
|||
width="16" />
|
||||
<text
|
||||
follows="left|top"
|
||||
height="15"
|
||||
height="35"
|
||||
layout="topleft"
|
||||
left_pad="2"
|
||||
name="physics_status_message_text"
|
||||
width="573"
|
||||
word_wrap="true"
|
||||
top_delta="3"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
@ -1111,7 +1122,7 @@
|
|||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="275"
|
||||
height="306"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="border"
|
||||
|
|
@ -1162,76 +1173,174 @@
|
|||
label="Include textures"
|
||||
left="20"
|
||||
top_pad="20"/>
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
name="border"
|
||||
top_pad="20"
|
||||
width="579"/>
|
||||
<text
|
||||
follows="top|left"
|
||||
height="15"
|
||||
left="20"
|
||||
name="include_label"
|
||||
text_color="White"
|
||||
top_pad="20"
|
||||
width="150">
|
||||
For avatar models only:
|
||||
</text>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Include skin weight"
|
||||
name="upload_skin"
|
||||
top_pad="15"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Include joint positions"
|
||||
name="upload_joints"
|
||||
top_pad="15"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Lock scale if joint position defined"
|
||||
name="lock_scale_if_joint_position"
|
||||
top_pad="15"/>
|
||||
<text
|
||||
follows="top|left"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left="220"
|
||||
name="pelvis_offset_label"
|
||||
text_color="White"
|
||||
top="134"
|
||||
width="250">
|
||||
Z offset (raise or lower avatar):
|
||||
</text>
|
||||
<spinner
|
||||
follows="top|left"
|
||||
height="20"
|
||||
min_val="-3.00"
|
||||
max_val="3.0"
|
||||
name="pelvis_offset"
|
||||
top_pad="10"
|
||||
value="0.0"
|
||||
width="80"/>
|
||||
</panel>
|
||||
<panel
|
||||
label="Overrides"
|
||||
layout="topleft"
|
||||
name="rigging_panel"
|
||||
title="Rigging">
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="306"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
name="avatar_tab_border"
|
||||
top_pad="0"
|
||||
width="619" />
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Include skin weight"
|
||||
label_text.text_color="White"
|
||||
name="upload_skin"
|
||||
top="8"
|
||||
left="10"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Include joint positions"
|
||||
label_text.text_color="White"
|
||||
name="upload_joints"
|
||||
left_delta="0"
|
||||
top_pad="7"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Lock scale if joint position defined"
|
||||
label_text.text_color="White"
|
||||
label_text.wrap="true"
|
||||
label_text.width="180"
|
||||
name="lock_scale_if_joint_position"
|
||||
top_pad="17"/>
|
||||
<text
|
||||
follows="top|left"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left="225"
|
||||
name="pelvis_offset_label"
|
||||
text_color="White"
|
||||
top="8"
|
||||
width="200">
|
||||
Z offset (raise or lower avatar):
|
||||
</text>
|
||||
<spinner
|
||||
follows="top|left"
|
||||
height="20"
|
||||
min_val="-3.00"
|
||||
max_val="3.0"
|
||||
name="pelvis_offset"
|
||||
top_pad="10"
|
||||
value="0.0"
|
||||
width="80"/>
|
||||
<text
|
||||
follows="top|left"
|
||||
height="17"
|
||||
left="425"
|
||||
name="skin_too_many_joints"
|
||||
text_color="Orange"
|
||||
top="7"
|
||||
width="195"
|
||||
word_wrap="true">
|
||||
Too many skinned joints
|
||||
</text>
|
||||
<text
|
||||
follows="top|left"
|
||||
height="32"
|
||||
left="425"
|
||||
name="skin_unknown_joint"
|
||||
text_color="Orange"
|
||||
top="8"
|
||||
width="195"
|
||||
word_wrap="true">
|
||||
Model has an unknown joint(s)
|
||||
</text>
|
||||
<text
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
height="15"
|
||||
left="10"
|
||||
name="joints_descr"
|
||||
top="73"
|
||||
width="150">
|
||||
Joints:
|
||||
</text>
|
||||
<scroll_list
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
name="joints_list"
|
||||
column_padding="0"
|
||||
draw_heading="false"
|
||||
draw_stripes="false"
|
||||
commit_on_selection_change="true"
|
||||
heading_height="23"
|
||||
height="199"
|
||||
left_delta="0"
|
||||
top_pad="0"
|
||||
width="205"/>
|
||||
<text
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
height="15"
|
||||
left_delta="0"
|
||||
name="conflicts_description"
|
||||
top_pad="2"
|
||||
width="205">
|
||||
[CONFLICTS] conflicts in [JOINTS_COUNT] joints
|
||||
</text>
|
||||
<text
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
height="15"
|
||||
left_pad="10"
|
||||
name="pos_overrides_descr"
|
||||
top="73"
|
||||
width="300">
|
||||
Position overrides for joint '[JOINT]':
|
||||
</text>
|
||||
<scroll_list
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
name="pos_overrides_list"
|
||||
column_padding="0"
|
||||
draw_heading="true"
|
||||
draw_stripes="false"
|
||||
heading_height="23"
|
||||
height="100"
|
||||
left_delta="0"
|
||||
top_pad="0"
|
||||
width="385">
|
||||
<scroll_list.columns
|
||||
label="Model"
|
||||
name="model_name"
|
||||
relative_width="0.49" />
|
||||
<scroll_list.columns
|
||||
label="X"
|
||||
name="axis_x"
|
||||
relative_width="0.17" />
|
||||
<scroll_list.columns
|
||||
label="Y"
|
||||
name="axis_y"
|
||||
relative_width="0.17" />
|
||||
<scroll_list.columns
|
||||
label="Z"
|
||||
name="axis_z"
|
||||
relative_width="0.17" />
|
||||
</scroll_list>
|
||||
<panel
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
border="true"
|
||||
left="400"
|
||||
height="165"
|
||||
top="100"
|
||||
border="true"
|
||||
left="410"
|
||||
height="110"
|
||||
top_pad="5"
|
||||
width="200"
|
||||
name="avatar_model_hint_panel"
|
||||
>
|
||||
<text
|
||||
left="5"
|
||||
width="190"
|
||||
height="165"
|
||||
height="110"
|
||||
name="avatar_model_hint_text"
|
||||
wrap="true"
|
||||
word_wrap="true"
|
||||
|
|
@ -1242,17 +1351,62 @@ 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>
|
||||
</panel>
|
||||
<panel
|
||||
label="Log"
|
||||
layout="topleft"
|
||||
name="logs_panel">
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="306"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
ignore_tab="false"
|
||||
right="-21"
|
||||
name="log_tab_border"
|
||||
top_pad="0"
|
||||
width="619" />
|
||||
<!-- FS:Beq Add control for vberbose logging -->
|
||||
<check_box
|
||||
control_name="ImporterDebug"
|
||||
follows="top|left"
|
||||
top_delta="12"
|
||||
left="4"
|
||||
width="70"
|
||||
label="Show detailed logging"
|
||||
name="verbose_logging"/>
|
||||
<!-- FS:Beq/ -->
|
||||
<text_editor
|
||||
type="string"
|
||||
length="1"
|
||||
embedded_items="false"
|
||||
follows="top|left"
|
||||
font="SansSerif"
|
||||
ignore_tab="false"
|
||||
layout="topleft"
|
||||
height="267"
|
||||
left="4"
|
||||
top="24"
|
||||
right="-22"
|
||||
max_length="65536"
|
||||
name="log_text"
|
||||
parse_urls="true"
|
||||
spellcheck="false"
|
||||
read_only="true"
|
||||
word_wrap="true">
|
||||
</text_editor>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<panel
|
||||
follows="top|left|bottom"
|
||||
layout="topleft"
|
||||
height="197"
|
||||
height="195"
|
||||
left="4"
|
||||
border="true"
|
||||
name="weights_and_warning_panel"
|
||||
top_pad="3"
|
||||
width="629">
|
||||
width="619">
|
||||
<button
|
||||
follows="top|left"
|
||||
label="Calculate weights & fee"
|
||||
|
|
@ -1354,7 +1508,7 @@ Please consider using an attachment point close to the item's position on the bo
|
|||
top_pad="5"
|
||||
layout="topleft"
|
||||
left="6"
|
||||
name="physics_costs_panel"
|
||||
name="price_breakdown_panel"
|
||||
width="120"
|
||||
height="100">
|
||||
<text
|
||||
|
|
@ -1437,7 +1591,7 @@ Lowest:
|
|||
border="true"
|
||||
layout="topleft"
|
||||
left_pad="15"
|
||||
name="physics_breakdown_panel"
|
||||
name="physics_costs_panel"
|
||||
width="120"
|
||||
height="100">
|
||||
<text
|
||||
|
|
@ -1481,10 +1635,11 @@ Analysed:
|
|||
[PHU]
|
||||
</text>-->
|
||||
</panel>
|
||||
<!-- FS:Beq relocate the preview controls to be sensible -->
|
||||
<panel
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
left_pad="100"
|
||||
left_pad="92"
|
||||
height="100"
|
||||
border="true"
|
||||
name="preview_controls_panel"
|
||||
|
|
@ -1516,138 +1671,144 @@ Analysed:
|
|||
<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="5"
|
||||
text_color="DrYellow"
|
||||
visible="false"
|
||||
width="40">
|
||||
NOTE:
|
||||
</text>
|
||||
<text
|
||||
text_color="White"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left_pad="1"
|
||||
name="warning_message"
|
||||
parse_urls="true"
|
||||
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_pad="-1" left="6" name="status">
|
||||
[STATUS]
|
||||
</text>
|
||||
</panel>
|
||||
</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"
|
||||
<view_border
|
||||
bevel_style="none"
|
||||
follows="top|left"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="lod_label"
|
||||
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="Joint Positions"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
name="show_joint_positions"
|
||||
word_wrap="down"
|
||||
left_pad="0"
|
||||
width="65"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
label="Joint Pos. Overrides"
|
||||
word_wrap="down"
|
||||
layout="topleft"
|
||||
name="show_joint_overrides"
|
||||
left_pad="5"
|
||||
width="100">
|
||||
</check_box>
|
||||
</panel>
|
||||
<!-- ========== NOTE MESSAGE ========== -->
|
||||
<text
|
||||
font="SansSerif"
|
||||
layout="topleft"
|
||||
left="6"
|
||||
name="warning_title"
|
||||
top_pad="5"
|
||||
text_color="DrYellow"
|
||||
visible="true"
|
||||
width="40">
|
||||
NOTE:
|
||||
</text>
|
||||
<text
|
||||
text_color="White"
|
||||
top="13"
|
||||
height="15"
|
||||
width="290">
|
||||
Preview:
|
||||
</text>-->
|
||||
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left_pad="1"
|
||||
name="warning_message"
|
||||
parse_urls="true"
|
||||
top_delta="0"
|
||||
wrap="true"
|
||||
width="530"
|
||||
visible="true">
|
||||
You dont have rights to upload mesh models. [[VURL] Find out how] to get certified.
|
||||
</text>
|
||||
<text
|
||||
text_color="Yellow"
|
||||
layout="topleft"
|
||||
top_pad="-2"
|
||||
left="6"
|
||||
name="status">
|
||||
[STATUS]
|
||||
</text>
|
||||
</panel>
|
||||
<panel
|
||||
border="true"
|
||||
bevel_style="none"
|
||||
follows="top|left|right|bottom"
|
||||
layout="topleft"
|
||||
name="preview_panel"
|
||||
top="5"
|
||||
height="560"
|
||||
width="375"
|
||||
<!-- /FS:Beq -->
|
||||
</panel>
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="630"
|
||||
name="lod_label"
|
||||
text_color="White"
|
||||
top="4"
|
||||
height="15"
|
||||
width="290">
|
||||
Preview:
|
||||
</text>
|
||||
<panel
|
||||
border="true"
|
||||
bevel_style="none"
|
||||
follows="top|left|right|bottom"
|
||||
layout="topleft"
|
||||
name="preview_panel"
|
||||
top="20"
|
||||
height="560"
|
||||
width="320"
|
||||
/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -19,5 +19,6 @@
|
|||
name="Preview Tabs"
|
||||
tab_position="bottom"
|
||||
top="0"
|
||||
width="448" />
|
||||
width="448"
|
||||
enable_tabs_flashing="true"/>
|
||||
</multi_floater>
|
||||
|
|
|
|||
|
|
@ -183,21 +183,32 @@
|
|||
value="15.0" />
|
||||
</combo_box>
|
||||
<slider
|
||||
name="manual_environment_change_transition_period"
|
||||
control_name="FSEnvironmentManualTransitionTime"
|
||||
label="Environment Transition Time:"
|
||||
decimal_digits="1"
|
||||
left="12"
|
||||
top_pad="10"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="18"
|
||||
increment="0.5"
|
||||
initial_value="0"
|
||||
max_val="60"
|
||||
min_val="0"
|
||||
width="520"
|
||||
tool_tip="Interval in seconds over which manual environment changes will blend. Zero is instant."/>
|
||||
name="manual_environment_change_transition_period"
|
||||
control_name="FSEnvironmentManualTransitionTime"
|
||||
label="Environment Transition Time:"
|
||||
decimal_digits="1"
|
||||
left="12"
|
||||
top_pad="15"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="18"
|
||||
increment="0.5"
|
||||
initial_value="0"
|
||||
max_val="60"
|
||||
min_val="0"
|
||||
width="520"
|
||||
tool_tip="Interval in seconds over which manual environment changes will blend. Zero is instant."/>
|
||||
<check_box
|
||||
top_pad="5"
|
||||
control_name="EnvironmentPersistAcrossLogin"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
initial_value="true"
|
||||
name="EnvironmentPersistAcrossLogin"
|
||||
label="Persist Environment settings throughout sessions"
|
||||
left="10"
|
||||
width="500"
|
||||
tool_tip="Restores the current environment settings after next login."/>
|
||||
</panel>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ Rozważ użycie innego punktu doczepienia, bliżej do pozycji obiektu na ciele.
|
|||
<text name="server_weight">
|
||||
Serwer: [SIM]
|
||||
</text>
|
||||
<panel name="physics_costs_panel">
|
||||
<panel name="price_breakdown_panel">
|
||||
<text name="price_breakdown_title">
|
||||
Podział kosztów
|
||||
</text>
|
||||
|
|
@ -223,7 +223,7 @@ Wysokie:
|
|||
Niskie:
|
||||
Najniższe:
|
||||
</text>
|
||||
<panel name="physics_breakdown_panel">
|
||||
<panel name="physics_costs_panel">
|
||||
<text name="physics_breakdown_title">
|
||||
Koszty fizyki
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,9 @@
|
|||
<floater.string name="buy_currency">
|
||||
Купить L$ [LINDENS] примерно за [LOCALAMOUNT]
|
||||
</floater.string>
|
||||
<floater.string name="info_cannot_buy">
|
||||
Нельзя купить
|
||||
</floater.string>
|
||||
<text name="info_need_more">
|
||||
Вам нужно больше L$
|
||||
</text>
|
||||
|
|
@ -59,8 +62,4 @@
|
|||
</text>
|
||||
<button label="Купить" name="buy_btn"/>
|
||||
<button label="Отмена" name="cancel_btn"/>
|
||||
<text name="info_cannot_buy">
|
||||
Нельзя купить
|
||||
</text>
|
||||
<button label="Открыть в Интернете" name="error_web"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<menu name="ScriptChiclet Menu">
|
||||
<menu_item_call label="Закрыть" name="Close"/>
|
||||
<menu_item_call label="Закрыть все" name="Close All"/>
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -352,6 +352,7 @@
|
|||
<menu_item_check label="Альфа" name="Rendering Type Alpha"/>
|
||||
<menu_item_check label="Дерево" name="Rendering Type Tree"/>
|
||||
<menu_item_check label="Аватары" name="Rendering Type Character"/>
|
||||
<menu_item_check label="Анимированный меш" name="Rendering Type Control Avatar"/>
|
||||
<menu_item_check label="Исправление поверхности" name="Rendering Type Surface Patch"/>
|
||||
<menu_item_check label="Небо" name="Rendering Type Sky"/>
|
||||
<menu_item_check label="Вода" name="Rendering Type Water"/>
|
||||
|
|
|
|||
|
|
@ -1471,6 +1471,10 @@
|
|||
<notification name="CantTeleportToGrid">
|
||||
Не удалось телепортироваться в [SLURL]: это место находится на другой сетке ([GRID]), а не на текущей ([CURRENT_GRID]). Закройте программу и попробуйте еще раз.
|
||||
</notification>
|
||||
<notification name="GeneralCertificateErrorShort">
|
||||
Не удалось установить соединение с сервером.
|
||||
[REASON]
|
||||
</notification>
|
||||
<notification name="GeneralCertificateError">
|
||||
Не удалось подключиться к серверу.
|
||||
[REASON]
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<panel label="Сообщения об ошибках" name="crash_reports">
|
||||
<check_box label="Отправить отчет об ошибке на firestormviewer.org" name="checkSendCrashReports" />
|
||||
<check_box label="Всегда спрашивать перед отправкой" name="checkSendCrashReportsAlwaysAsk" />
|
||||
<check_box label="Включая settings.xml" name="checkSendSettings" />
|
||||
<check_box label="Включая файлы настроек" name="checkSendSettings" />
|
||||
<text name="textSendSettings">
|
||||
(содержит имя пользователя)
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -201,9 +201,15 @@ SLURL: <nolink>[SLURL]</nolink>
|
|||
<string name="CertBasicConstraints">
|
||||
В цепочке сертификатов серверов слишком много сертификатов. Обратитесь к администратору сети.
|
||||
</string>
|
||||
<string name="CertInvalid">
|
||||
Не удалось загрузить сертификат. Обратитесь к администратору сети.
|
||||
</string>
|
||||
<string name="CertInvalidSignature">
|
||||
Не удалось проверить подпись сертификата, возвращенного сервером сетки. Обратитесь к администратору сетки.
|
||||
</string>
|
||||
<string name="CertAllocationFailure">
|
||||
Не удалось выделить память openssl для сертификата.
|
||||
</string>
|
||||
<string name="LoginFailedNoNetwork">
|
||||
Ошибка сети: не удалось установить соединение. Проверьте подключение к сети.
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@
|
|||
name="buy_currency">
|
||||
Buy L$ [LINDENS] for approx. [LOCALAMOUNT]
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="info_cannot_buy">
|
||||
Unable to Buy
|
||||
</floater.string>
|
||||
<icon
|
||||
height="215"
|
||||
image_name="Linden_Dollar_Background"
|
||||
|
|
@ -286,46 +290,4 @@ Re-enter amount to see the latest exchange rate.
|
|||
left_pad="10"
|
||||
name="cancel_btn"
|
||||
width="90"/>
|
||||
<icon
|
||||
height="215"
|
||||
image_name="Linden_Dollar_Alert"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="error_background"
|
||||
color="SL-White"
|
||||
top="15"
|
||||
use_draw_context_alpha="false"
|
||||
width="350"/>
|
||||
<text
|
||||
type="string"
|
||||
font="SansSerifHuge"
|
||||
left="165"
|
||||
width="360"
|
||||
height="25"
|
||||
top="25"
|
||||
text_color="Red"
|
||||
name="info_cannot_buy">
|
||||
Unable to Buy
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
width="176"
|
||||
height="125"
|
||||
top="60"
|
||||
left="165"
|
||||
word_wrap="true"
|
||||
text_color="SL-White"
|
||||
follows="bottom|right"
|
||||
name="cannot_buy_message">
|
||||
</text>
|
||||
<button
|
||||
follows="bottom|left"
|
||||
height="20"
|
||||
label="Continue to the Web"
|
||||
image_unselected="PushButton_On"
|
||||
layout="topleft"
|
||||
left="170"
|
||||
name="error_web"
|
||||
top="200"
|
||||
width="160"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@
|
|||
name="buy_currency">
|
||||
Buy L$ [LINDENS] for approx. [LOCALAMOUNT]
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="info_cannot_buy">
|
||||
Unable to Buy
|
||||
</floater.string>
|
||||
<icon
|
||||
height="215"
|
||||
image_name="Linden_Dollar_Background"
|
||||
|
|
@ -286,46 +290,4 @@ Re-enter amount to see the latest exchange rate.
|
|||
left_pad="10"
|
||||
name="cancel_btn"
|
||||
width="90"/>
|
||||
<icon
|
||||
height="215"
|
||||
image_name="Linden_Dollar_Alert"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="error_background"
|
||||
color="SL-White"
|
||||
top="15"
|
||||
use_draw_context_alpha="false"
|
||||
width="350"/>
|
||||
<text
|
||||
type="string"
|
||||
font="SansSerifHuge"
|
||||
left="165"
|
||||
width="360"
|
||||
height="25"
|
||||
top="25"
|
||||
text_color="Red"
|
||||
name="info_cannot_buy">
|
||||
Unable to Buy
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
width="176"
|
||||
height="125"
|
||||
top="60"
|
||||
left="165"
|
||||
word_wrap="true"
|
||||
text_color="SL-White"
|
||||
follows="bottom|right"
|
||||
name="cannot_buy_message">
|
||||
</text>
|
||||
<button
|
||||
follows="bottom|left"
|
||||
height="20"
|
||||
label="Continue to the Web"
|
||||
image_unselected="PushButton_On"
|
||||
layout="topleft"
|
||||
left="170"
|
||||
name="error_web"
|
||||
top="200"
|
||||
width="160"/>
|
||||
</floater>
|
||||
|
|
|
|||
Loading…
Reference in New Issue