Merge branch 'master' of https://vcs.firestormviewer.org/viewer-merges/phoenix-firestorm-546
commit
bd414ee0d0
|
|
@ -2151,9 +2151,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ba49274838d4c6bbd612db969b04e607</string>
|
||||
<string>e584491b67916c502233b23c6e4e44be</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/llphysicsextensions_tpv-1.0.561414-darwin64-561414.tar.bz2</string>
|
||||
<string>file:///opt/firestorm/llphysicsextensions_tpv-1.0.571939-darwin64-571939.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2175,9 +2175,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>30de712d424f179d89dd00c01ded7257</string>
|
||||
<string>534b3af2266f37151e629af7552f4cf2</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.561414-windows-561414.tar.bz2</string>
|
||||
<string>file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.571939-windows-571939.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -2187,16 +2187,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>abac12c4a12441704fa8884f1ca043d8</string>
|
||||
<string>9c39018c783443ee4b4eb368c937aeb3</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.561414-windows64-561414.tar.bz2</string>
|
||||
<string>file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.571939-windows64-571939.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.0.561414</string>
|
||||
<string>1.0.571939</string>
|
||||
</map>
|
||||
<key>mesa</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -251,9 +251,9 @@ if (DARWIN)
|
|||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DARWIN_extra_cstar_flags}")
|
||||
# NOTE: it's critical that the optimization flag is put in front.
|
||||
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
|
||||
## Really?? On developer machines too?
|
||||
##set(ENABLE_SIGNING TRUE)
|
||||
##set(SIGNING_IDENTITY "Developer ID Application: Phoenix Firestorm Project, Inc., The"")
|
||||
|
||||
set(ENABLE_SIGNING TRUE)
|
||||
set(SIGNING_IDENTITY "Developer ID Application: The Phoenix Firestorm Project, Inc." )
|
||||
endif (DARWIN)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,8 @@
|
|||
#define LL_LINDEN_COMMON_H
|
||||
|
||||
#include "llprofiler.h"
|
||||
#if TRACY_ENABLE // hooks for memory profiling
|
||||
// <FS:Beq/> #if (TRACY_ENABLE)
|
||||
#if (TRACY_ENABLE) && LL_PROFILER_ENABLE_TRACY_MEMORY
|
||||
void *tracy_aligned_malloc(size_t size, size_t alignment);
|
||||
void tracy_aligned_free(void *memblock);
|
||||
#define _aligned_malloc(X, Y) tracy_aligned_malloc((X), (Y))
|
||||
|
|
|
|||
|
|
@ -74,7 +74,14 @@
|
|||
#define LL_PROFILER_CONFIGURATION LL_PROFILER_CONFIG_FAST_TIMER
|
||||
#endif
|
||||
|
||||
extern thread_local bool gProfilerEnabled;
|
||||
extern thread_local bool gProfilerEnabled; // <FS:Beq/> This is being used to control memory allocations
|
||||
// <FS:Beq> We use the active flag to control deferred profiling.
|
||||
// It is functionally separate to the (poorly named) gProfilerEnabled flag
|
||||
namespace LLProfiler
|
||||
{
|
||||
extern bool active;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
#if defined(LL_PROFILER_CONFIGURATION) && (LL_PROFILER_CONFIGURATION > LL_PROFILER_CONFIG_NONE)
|
||||
#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY || LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY_FAST_TIMER
|
||||
|
|
@ -88,27 +95,29 @@ extern thread_local bool gProfilerEnabled;
|
|||
// <FS:Beq> Fixed mutual exclusion issues with RAM and GPU. NOTE: This might still break on Apple in which case we'll need to restrict that platform
|
||||
//// GPU Mutually exclusive with detailed memory tracing
|
||||
// #define LL_PROFILER_ENABLE_TRACY_OPENGL 0
|
||||
#define LL_PROFILER_ENABLE_TRACY_MEMORY 1
|
||||
#define LL_PROFILER_ENABLE_TRACY_MEMORY 0
|
||||
#define LL_PROFILER_ENABLE_TRACY_OPENGL 1
|
||||
#endif
|
||||
|
||||
#if LL_PROFILER_CONFIGURATION == LL_PROFILER_CONFIG_TRACY
|
||||
#define LL_PROFILER_FRAME_END FrameMark
|
||||
// <FS:Beq> Note: this threadlocal forces memory colelction enabled from the start. It conflicts with deferred profiling.
|
||||
#define LL_PROFILER_SET_THREAD_NAME( name ) tracy::SetThreadName( name ); gProfilerEnabled = true;
|
||||
// </FS:Beq>
|
||||
#define LL_PROFILER_THREAD_BEGIN(name) FrameMarkStart( name ) // C string
|
||||
#define LL_PROFILER_THREAD_END(name) FrameMarkEnd( name ) // C string
|
||||
// <FS:Beq> revert change that obscures custom FTM zones. We may want to may FTM Zones unique in future.
|
||||
// #define LL_RECORD_BLOCK_TIME(name) ZoneScoped // Want descriptive names; was: ZoneNamedN( ___tracy_scoped_zone, #name, gProfilerEnabled );
|
||||
#define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, gProfilerEnabled )
|
||||
// #define LL_RECORD_BLOCK_TIME(name) ZoneScoped // Want descriptive names; was: ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active );
|
||||
#define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active )
|
||||
// </FS:Beq>
|
||||
|
||||
// <FS:Beq>
|
||||
// #define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, true )
|
||||
// #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ) // RGB
|
||||
// #define LL_PROFILE_ZONE_SCOPED ZoneScoped
|
||||
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, gProfilerEnabled )
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, gProfilerEnabled ) // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, gProfilerEnabled ) // <FS:Beq/> Enable deferred collection through filters
|
||||
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active )
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ) // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ) // <FS:Beq/> Enable deferred collection through filters
|
||||
// </FS:Beq>
|
||||
|
||||
#define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val )
|
||||
|
|
@ -121,7 +130,7 @@ extern thread_local bool gProfilerEnabled;
|
|||
#define LL_PROFILE_FREE(ptr) TracyFree(ptr)
|
||||
|
||||
// <FS:Beq> Additional FS Tracy macros
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, gProfilerEnabled ) // <FS:Beq/> Additional Tracy macro
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active ) // <FS:Beq/> Additional Tracy macro
|
||||
#define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value)
|
||||
#define LL_PROFILE_PLOT_SQ( name, prev, value ) TracyPlot(name,prev);TracyPlot( name, value)
|
||||
#define LL_PROFILE_IS_CONNECTED TracyIsConnected
|
||||
|
|
@ -161,15 +170,15 @@ extern thread_local bool gProfilerEnabled;
|
|||
|
||||
// <FS:Beq> revert change that obscures custom FTM zones.
|
||||
// #define LL_RECORD_BLOCK_TIME(name) ZoneScoped const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__);
|
||||
#define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, gProfilerEnabled ); const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__);
|
||||
#define LL_RECORD_BLOCK_TIME(name) ZoneNamedN( ___tracy_scoped_zone, #name, LLProfiler::active ); const LLTrace::BlockTimer& LL_GLUE_TOKENS(block_time_recorder, __LINE__)(LLTrace::timeThisBlock(name)); (void)LL_GLUE_TOKENS(block_time_recorder, __LINE__);
|
||||
// </FS:Beq>
|
||||
// <FS:Beq>
|
||||
// #define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, true )
|
||||
// #define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, true ) // RGB
|
||||
// #define LL_PROFILE_ZONE_SCOPED ZoneScoped
|
||||
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, gProfilerEnabled );
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, gProfilerEnabled ) // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, gProfilerEnabled ) // <FS:Beq/> Enable deferred collection through filters
|
||||
#define LL_PROFILE_ZONE_NAMED(name) ZoneNamedN( ___tracy_scoped_zone, name, LLProfiler::active );
|
||||
#define LL_PROFILE_ZONE_NAMED_COLOR(name,color) ZoneNamedNC( ___tracy_scopped_zone, name, color, LLProfiler::active ) // RGB
|
||||
#define LL_PROFILE_ZONE_SCOPED ZoneNamed( ___tracy_scoped_zone, LLProfiler::active ) // <FS:Beq/> Enable deferred collection through filters
|
||||
// </FS:Beq>
|
||||
|
||||
#define LL_PROFILE_ZONE_NUM( val ) ZoneValue( val )
|
||||
|
|
@ -181,7 +190,7 @@ extern thread_local bool gProfilerEnabled;
|
|||
#define LL_PROFILE_ALLOC(ptr, size) TracyAlloc(ptr, size)
|
||||
#define LL_PROFILE_FREE(ptr) TracyFree(ptr)
|
||||
// <FS:Beq> Additional FS Tracy macros
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, gProfilerEnabled )
|
||||
#define LL_PROFILE_ZONE_COLOR(color) ZoneNamedC( ___tracy_scoped_zone, color, LLProfiler::active )
|
||||
#define LL_PROFILE_PLOT( name, value ) TracyPlot( name, value)
|
||||
#define LL_PROFILE_PLOT_SQ( name, prev, value ) TracyPlot( name, prev );TracyPlot( name, value )
|
||||
#define LL_PROFILE_IS_CONNECTED TracyIsConnected
|
||||
|
|
|
|||
|
|
@ -48,11 +48,12 @@
|
|||
#define LL_PROFILER_CATEGORY_ENABLE_DRAWPOOL 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_ENVIRONMENT 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_FACE 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_LLSD 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_INPUT 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_LLSD 0 // <FS:Beq/> Rationalise this silliness
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_LOGGING 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_MATERIAL 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_MEDIA 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_MEMORY 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_MEMORY 0 // <FS:Beq/> Rationalise this silliness
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_NETWORK 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_OCTREE 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_PIPELINE 1
|
||||
|
|
@ -61,12 +62,12 @@
|
|||
#define LL_PROFILER_CATEGORY_ENABLE_STATS 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_STRING 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_TEXTURE 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_THREAD 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_THREAD 0 // <FS:Beq/> Rationalise this silliness
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_UI 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_VIEWER 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_VERTEX 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_VOLUME 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_WIN32 1
|
||||
#define LL_PROFILER_CATEGORY_ENABLE_WIN32 0 // <FS:Beq/> Rationalise this silliness
|
||||
|
||||
#if LL_PROFILER_CATEGORY_ENABLE_APP
|
||||
#define LL_PROFILE_ZONE_NAMED_CATEGORY_APP LL_PROFILE_ZONE_NAMED
|
||||
|
|
@ -124,6 +125,16 @@
|
|||
#define LL_PROFILE_ZONE_SCOPED_CATEGORY_FACE
|
||||
#endif
|
||||
|
||||
// <FS:Beq> Additional scope category for input handlers
|
||||
#if LL_PROFILER_CATEGORY_ENABLE_INPUT
|
||||
#define LL_PROFILE_ZONE_NAMED_CATEGORY_INPUT LL_PROFILE_ZONE_NAMED
|
||||
#define LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT LL_PROFILE_ZONE_SCOPED
|
||||
#else
|
||||
#define LL_PROFILE_ZONE_NAMED_CATEGORY_INPUT(name)
|
||||
#define LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
|
||||
#if LL_PROFILER_CATEGORY_ENABLE_LLSD
|
||||
#define LL_PROFILE_ZONE_NAMED_CATEGORY_LLSD LL_PROFILE_ZONE_NAMED
|
||||
#define LL_PROFILE_ZONE_SCOPED_CATEGORY_LLSD LL_PROFILE_ZONE_SCOPED
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ public:
|
|||
# define hexnybl(N) (N)>9?((N)-10)+'a':(N)+'0'
|
||||
inline char * toShortString(char *out) const
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
// LL_PROFILE_ZONE_SCOPED;
|
||||
out[0] = hexnybl(mData[14]>>4);
|
||||
out[1] = hexnybl(mData[14]&15);
|
||||
out[2] = hexnybl(mData[15]>>4);
|
||||
|
|
@ -130,7 +130,7 @@ public:
|
|||
// full uuid - Much lighterweight than default, no allocation, or nul-term added - provide your own, ensure min 36 bytes.
|
||||
inline char * toStringFast(char *out) const
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
// LL_PROFILE_ZONE_SCOPED;
|
||||
out[0] = hexnybl(mData[0]>>4);
|
||||
out[1] = hexnybl(mData[0]&15);
|
||||
out[2] = hexnybl(mData[1]>>4);
|
||||
|
|
|
|||
|
|
@ -116,14 +116,17 @@ std::string colladaVersion[VERSIONTYPE_COUNT+1] =
|
|||
"Unsupported"
|
||||
};
|
||||
|
||||
static const std::string lod_suffix[LLModel::NUM_LODS] =
|
||||
{
|
||||
"_LOD0",
|
||||
"_LOD1",
|
||||
"_LOD2",
|
||||
"",
|
||||
"_PHYS",
|
||||
};
|
||||
// <FS:Beq> moved to allow configuration
|
||||
// static const std::string lod_suffix[LLModel::NUM_LODS] =
|
||||
// {
|
||||
// "_LOD0",
|
||||
// "_LOD1",
|
||||
// "_LOD2",
|
||||
// "",
|
||||
// "_PHYS",
|
||||
// };
|
||||
// </FS:Beq>
|
||||
|
||||
|
||||
const U32 LIMIT_MATERIALS_OUTPUT = 12;
|
||||
|
||||
|
|
@ -931,7 +934,11 @@ LLDAELoader::LLDAELoader(
|
|||
std::map<std::string, std::string>& jointAliasMap,
|
||||
U32 maxJointsPerMesh,
|
||||
U32 modelLimit,
|
||||
bool preprocess)
|
||||
// <FS:Beq> mesh loader suffix configuration
|
||||
// bool preprocess)
|
||||
bool preprocess,
|
||||
const LODSuffixArray& lod_suffix)
|
||||
// </FS:Beq>
|
||||
: LLModelLoader(
|
||||
filename,
|
||||
lod,
|
||||
|
|
@ -947,12 +954,21 @@ LLDAELoader::LLDAELoader(
|
|||
mGeneratedModelLimit(modelLimit),
|
||||
mPreprocessDAE(preprocess)
|
||||
{
|
||||
// <FS:Beq> mesh loader suffix configuration
|
||||
for(int i=0;i<LLModel::NUM_LODS;i++)
|
||||
{
|
||||
LLDAELoader::sLODSuffix[i] = lod_suffix[i];
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
LLDAELoader::~LLDAELoader()
|
||||
{
|
||||
}
|
||||
|
||||
//static
|
||||
LODSuffixArray LLDAELoader::sLODSuffix{};// <FS:Beq/> configurable lod suffixes
|
||||
|
||||
struct ModelSort
|
||||
{
|
||||
bool operator()(const LLPointer< LLModel >& lhs, const LLPointer< LLModel >& rhs)
|
||||
|
|
@ -2208,8 +2224,17 @@ void LLDAELoader::processElement( daeElement* element, bool& badElement, DAE* da
|
|||
{
|
||||
label += (char)((int)'a' + model->mSubmodelID);
|
||||
}
|
||||
|
||||
model->mLabel = label + lod_suffix[mLod];
|
||||
// <FS:Beq> Support altenate LOD naming conventions
|
||||
// model->mLabel = label + sLODSuffix[mLod];
|
||||
if ( sLODSuffix[mLod].size() > 0 )
|
||||
{
|
||||
model->mLabel = label + '_' + sLODSuffix[mLod];
|
||||
}
|
||||
else
|
||||
{
|
||||
model->mLabel = label;
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2485,13 +2510,19 @@ std::string LLDAELoader::getElementLabel(daeElement *element)
|
|||
// static
|
||||
size_t LLDAELoader::getSuffixPosition(std::string label)
|
||||
{
|
||||
// <FS:Ansariel> Bug fixes in mesh importer by Drake Arconis
|
||||
// <FS:Beq> Selectable suffixes
|
||||
//if ((label.find("_LOD") != -1) || (label.find("_PHYS") != -1))
|
||||
if ((label.find("_LOD") != std::string::npos) || (label.find("_PHYS") != std::string::npos))
|
||||
// </FS:Ansariel>
|
||||
//{
|
||||
// return label.rfind('_');
|
||||
//}
|
||||
for(int i=0; i < LLModel::NUM_LODS; i++)
|
||||
{
|
||||
return label.rfind('_');
|
||||
if (sLODSuffix[i].size() && label.find(sLODSuffix[i]) != std::string::npos)
|
||||
{
|
||||
return label.rfind('_');
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -2636,8 +2667,17 @@ bool LLDAELoader::loadModelsFromDomMesh(domMesh* mesh, std::vector<LLModel*>& mo
|
|||
LLModel* ret = new LLModel(volume_params, 0.f);
|
||||
|
||||
std::string model_name = getLodlessLabel(mesh);
|
||||
ret->mLabel = model_name + lod_suffix[mLod];
|
||||
|
||||
// <FS:Beq> Support altenate LOD naming conventions
|
||||
// ret->mLabel = model_name + sLODSuffix[mLod];
|
||||
if ( sLODSuffix[mLod].size() > 0 )
|
||||
{
|
||||
ret->mLabel = model_name + '_' + sLODSuffix[mLod];
|
||||
}
|
||||
else
|
||||
{
|
||||
ret->mLabel = model_name;
|
||||
}
|
||||
// </FS:Beq>
|
||||
llassert(!ret->mLabel.empty());
|
||||
|
||||
// Like a monkey, ready to be shot into space
|
||||
|
|
@ -2695,7 +2735,10 @@ bool LLDAELoader::loadModelsFromDomMesh(domMesh* mesh, std::vector<LLModel*>& mo
|
|||
{
|
||||
LLModel* next = new LLModel(volume_params, 0.f);
|
||||
next->mSubmodelID = ++submodelID;
|
||||
next->mLabel = model_name + (char)((int)'a' + next->mSubmodelID) + lod_suffix[mLod];
|
||||
// <FS:Beq> configurable lod suffixes
|
||||
// next->mLabel = model_name + (char)((int)'a' + next->mSubmodelID) + lod_suffix[mLod];
|
||||
next->mLabel = model_name + (char)((int)'a' + next->mSubmodelID) + sLODSuffix[mLod];
|
||||
// </FS:Beq>
|
||||
next->getVolumeFaces() = remainder;
|
||||
next->mNormalizedScale = ret->mNormalizedScale;
|
||||
next->mNormalizedTranslation = ret->mNormalizedTranslation;
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ class domController;
|
|||
class domSkin;
|
||||
class domMesh;
|
||||
|
||||
using LODSuffixArray = std::array<std::string,LLModel::NUM_LODS>; // <FS:Beq/> configurable lod suffixes
|
||||
class LLDAELoader : public LLModelLoader
|
||||
{
|
||||
public:
|
||||
|
|
@ -59,7 +60,11 @@ public:
|
|||
std::map<std::string, std::string>& jointAliasMap,
|
||||
U32 maxJointsPerMesh,
|
||||
U32 modelLimit,
|
||||
bool preprocess);
|
||||
// <FS:Beq> configrable lod suffix support
|
||||
// bool preprocess);
|
||||
bool preprocess,
|
||||
const LODSuffixArray& lod_suffix);
|
||||
// </FS:Beq>
|
||||
virtual ~LLDAELoader() ;
|
||||
|
||||
virtual bool OpenFile(const std::string& filename);
|
||||
|
|
@ -104,6 +109,7 @@ protected:
|
|||
static std::string getLodlessLabel(daeElement *element);
|
||||
|
||||
static std::string preprocessDAE(std::string filename);
|
||||
static LODSuffixArray sLODSuffix; // <FS:Beq/> mesh loader suffix configuration
|
||||
|
||||
private:
|
||||
U32 mGeneratedModelLimit; // Attempt to limit amount of generated submodels
|
||||
|
|
|
|||
|
|
@ -634,10 +634,13 @@ void LLModel::generateNormals(F32 angle_cutoff)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
extern std::string stripSuffix(std::string); // <FS:Beq/> mesh loader suffix configuration
|
||||
std::string LLModel::getName() const
|
||||
{
|
||||
return mRequestedLabel.empty() ? mLabel : mRequestedLabel;
|
||||
// <FS:Beq> remove the LOD suffix when used as the model name.
|
||||
// return mRequestedLabel.empty() ? mLabel : mRequestedLabel;
|
||||
return mRequestedLabel.empty() ? stripSuffix(mLabel) : mRequestedLabel;
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ void LLModelLoader::setLoadState(U32 state)
|
|||
{
|
||||
mStateCallback(state, mOpaqueData);
|
||||
}
|
||||
|
||||
extern std::string stripSuffix(std::string); // <FS:Beq/> mesh loader suffix configuration
|
||||
bool LLModelLoader::loadFromSLM(const std::string& filename)
|
||||
{
|
||||
//only need to populate mScene with data from slm
|
||||
|
|
@ -320,7 +320,10 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
|
|||
&& !instance_label.empty())
|
||||
{
|
||||
// restore model names
|
||||
std::string name = instance_label;
|
||||
// <FS:Beq> This is going to get confusing here. We are juggling internal LOD names, with potentially overridden user ones.
|
||||
// std::string name = instance_label;
|
||||
std::string name = stripSuffix(instance_label);
|
||||
// </FS:Beq>
|
||||
switch (lod)
|
||||
{
|
||||
case LLModel::LOD_IMPOSTOR: name += "_LOD0"; break;
|
||||
|
|
|
|||
|
|
@ -2443,7 +2443,7 @@ void LLImageGLThread::run()
|
|||
// We must perform setup on this thread before actually servicing our
|
||||
// WorkQueue, likewise cleanup afterwards.
|
||||
mWindow->makeContextCurrent(mContext);
|
||||
gGL.init();
|
||||
gGL.init(false);
|
||||
ThreadPool::run();
|
||||
gGL.shutdown();
|
||||
mWindow->destroySharedContext(mContext);
|
||||
|
|
|
|||
|
|
@ -877,7 +877,7 @@ LLRender::~LLRender()
|
|||
shutdown();
|
||||
}
|
||||
|
||||
void LLRender::init()
|
||||
void LLRender::init(bool needs_vertex_buffer)
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
if (gGLManager.mHasDebugOutput && gDebugGL)
|
||||
|
|
@ -905,18 +905,10 @@ void LLRender::init()
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
llassert_always(mBuffer.isNull()) ;
|
||||
stop_glerror();
|
||||
// <FS:Ansariel> Reset VB during TP
|
||||
//mBuffer = new LLVertexBuffer(immediate_mask, 0);
|
||||
//mBuffer->allocateBuffer(4096, 0, TRUE);
|
||||
//mBuffer->getVertexStrider(mVerticesp);
|
||||
//mBuffer->getTexCoord0Strider(mTexcoordsp);
|
||||
//mBuffer->getColorStrider(mColorsp);
|
||||
initVB();
|
||||
// </FS:Ansariel>
|
||||
stop_glerror();
|
||||
if (needs_vertex_buffer)
|
||||
{
|
||||
initVertexBuffer();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Don't ignore OpenGL max line width
|
||||
GLint range[2];
|
||||
|
|
@ -929,6 +921,29 @@ void LLRender::init()
|
|||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
void LLRender::initVertexBuffer()
|
||||
{
|
||||
llassert_always(mBuffer.isNull()) ;
|
||||
stop_glerror();
|
||||
mBuffer = new LLVertexBuffer(immediate_mask, 0);
|
||||
// <FS:Ansariel> Warn in case of allocation failure
|
||||
//mBuffer->allocateBuffer(4096, 0, TRUE);
|
||||
if (!mBuffer->allocateBuffer(4096, 0, true))
|
||||
{
|
||||
// If this doesn't work, we're knee-deep in trouble!
|
||||
LL_WARNS() << "Failed to allocate Vertex Buffer for common rendering" << LL_ENDL;
|
||||
}
|
||||
mBuffer->getVertexStrider(mVerticesp);
|
||||
mBuffer->getTexCoord0Strider(mTexcoordsp);
|
||||
mBuffer->getColorStrider(mColorsp);
|
||||
stop_glerror();
|
||||
}
|
||||
|
||||
void LLRender::resetVertexBuffer()
|
||||
{
|
||||
mBuffer = NULL;
|
||||
}
|
||||
|
||||
void LLRender::shutdown()
|
||||
{
|
||||
for (U32 i = 0; i < mTexUnits.size(); i++)
|
||||
|
|
@ -944,33 +959,9 @@ void LLRender::shutdown()
|
|||
delete mLightState[i];
|
||||
}
|
||||
mLightState.clear();
|
||||
// <FS:Ansariel> Reset VB during TP
|
||||
//mBuffer = NULL ;
|
||||
destroyVB();
|
||||
// </FS:Ansariel>
|
||||
resetVertexBuffer();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Reset VB during TP
|
||||
void LLRender::initVB()
|
||||
{
|
||||
mBuffer = new LLVertexBuffer(immediate_mask, 0);
|
||||
if (!mBuffer->allocateBuffer(4096, 0, true))
|
||||
{
|
||||
// If this doesn't work, we're knee-deep in trouble!
|
||||
LL_WARNS() << "Failed to allocate Vertex Buffer for common rendering" << LL_ENDL;
|
||||
}
|
||||
mBuffer->getVertexStrider(mVerticesp);
|
||||
mBuffer->getTexCoord0Strider(mTexcoordsp);
|
||||
mBuffer->getColorStrider(mColorsp);
|
||||
}
|
||||
|
||||
void LLRender::destroyVB()
|
||||
{
|
||||
mBuffer = NULL;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
|
||||
void LLRender::refreshState(void)
|
||||
{
|
||||
mDirty = true;
|
||||
|
|
@ -1697,28 +1688,37 @@ void LLRender::flush()
|
|||
|
||||
mCount = 0;
|
||||
|
||||
if (mBuffer->useVBOs() && !mBuffer->isLocked())
|
||||
{ //hack to only flush the part of the buffer that was updated (relies on stream draw using buffersubdata)
|
||||
mBuffer->getVertexStrider(mVerticesp, 0, count);
|
||||
mBuffer->getTexCoord0Strider(mTexcoordsp, 0, count);
|
||||
mBuffer->getColorStrider(mColorsp, 0, count);
|
||||
}
|
||||
|
||||
mBuffer->flush();
|
||||
mBuffer->setBuffer(immediate_mask);
|
||||
if (mBuffer)
|
||||
{
|
||||
if (mBuffer->useVBOs() && !mBuffer->isLocked())
|
||||
{ //hack to only flush the part of the buffer that was updated (relies on stream draw using buffersubdata)
|
||||
mBuffer->getVertexStrider(mVerticesp, 0, count);
|
||||
mBuffer->getTexCoord0Strider(mTexcoordsp, 0, count);
|
||||
mBuffer->getColorStrider(mColorsp, 0, count);
|
||||
}
|
||||
|
||||
mBuffer->flush();
|
||||
mBuffer->setBuffer(immediate_mask);
|
||||
|
||||
// <FS:Ansariel> Remove QUADS rendering mode
|
||||
//if (mMode == LLRender::QUADS && sGLCoreProfile)
|
||||
//{
|
||||
// mBuffer->drawArrays(LLRender::TRIANGLES, 0, count);
|
||||
// mQuadCycle = 1;
|
||||
//}
|
||||
//else
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
mBuffer->drawArrays(mMode, 0, count);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// mBuffer is present in main thread and not present in an image thread
|
||||
LL_ERRS() << "A flush call from outside main rendering thread" << LL_ENDL;
|
||||
}
|
||||
|
||||
|
||||
// <FS:Ansariel> Remove QUADS rendering mode
|
||||
//if (mMode == LLRender::QUADS && sGLCoreProfile)
|
||||
//{
|
||||
// mBuffer->drawArrays(LLRender::TRIANGLES, 0, count);
|
||||
// mQuadCycle = 1;
|
||||
//}
|
||||
//else
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
mBuffer->drawArrays(mMode, 0, count);
|
||||
}
|
||||
|
||||
mVerticesp[0] = mVerticesp[count];
|
||||
mTexcoordsp[0] = mTexcoordsp[count];
|
||||
mColorsp[0] = mColorsp[count];
|
||||
|
|
|
|||
|
|
@ -365,12 +365,10 @@ public:
|
|||
|
||||
LLRender();
|
||||
~LLRender();
|
||||
void init() ;
|
||||
void init(bool needs_vertex_buffer);
|
||||
void initVertexBuffer();
|
||||
void resetVertexBuffer();
|
||||
void shutdown();
|
||||
// <FS:Ansariel> Reset VB during TP
|
||||
void initVB();
|
||||
void destroyVB();
|
||||
// </FS:Ansariel>
|
||||
|
||||
// Refreshes renderer state to the cached values
|
||||
// Needed when the render context has changed and invalidated the current state
|
||||
|
|
|
|||
|
|
@ -1070,7 +1070,7 @@ void LLVertexBuffer::releaseIndices()
|
|||
|
||||
bool LLVertexBuffer::createGLBuffer(U32 size)
|
||||
{
|
||||
if (mGLBuffer)
|
||||
if (mGLBuffer || mMappedData)
|
||||
{
|
||||
destroyGLBuffer();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -265,7 +265,6 @@ public:
|
|||
bool getTangentStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false);
|
||||
bool getTangentStrider(LLStrider<LLVector4a>& strider, S32 index=0, S32 count = -1, bool map_range = false);
|
||||
bool getColorStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false);
|
||||
bool getTextureIndexStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false);
|
||||
bool getEmissiveStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false);
|
||||
bool getWeightStrider(LLStrider<F32>& strider, S32 index=0, S32 count = -1, bool map_range = false);
|
||||
// <FS:Ansariel> Vectorized Weight4Strider and ClothWeightStrider by Drake Arconis
|
||||
|
|
|
|||
|
|
@ -877,21 +877,20 @@ void LLWindowWin32::close()
|
|||
// Restore gamma to the system values.
|
||||
restoreGamma();
|
||||
|
||||
if (mhDC)
|
||||
{
|
||||
if (!ReleaseDC(mWindowHandle, mhDC))
|
||||
{
|
||||
LL_WARNS("Window") << "Release of mhDC failed" << LL_ENDL;
|
||||
}
|
||||
mhDC = NULL;
|
||||
}
|
||||
|
||||
LL_DEBUGS("Window") << "Destroying Window" << LL_ENDL;
|
||||
|
||||
mWindowThread->post([=]()
|
||||
{
|
||||
if (IsWindow(mWindowHandle))
|
||||
{
|
||||
if (mhDC)
|
||||
{
|
||||
if (!ReleaseDC(mWindowHandle, mhDC))
|
||||
{
|
||||
LL_WARNS("Window") << "Release of ghDC failed!" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we don't leave a blank toolbar button.
|
||||
ShowWindow(mWindowHandle, SW_HIDE);
|
||||
|
||||
|
|
@ -917,6 +916,7 @@ void LLWindowWin32::close()
|
|||
// Even though the above lambda might not yet have run, we've already
|
||||
// bound mWindowHandle into it by value, which should suffice for the
|
||||
// operations we're asking. That's the last time WE should touch it.
|
||||
mhDC = NULL;
|
||||
mWindowHandle = NULL;
|
||||
mWindowThread->close();
|
||||
}
|
||||
|
|
@ -1509,12 +1509,10 @@ const S32 max_format = (S32)num_formats - 1;
|
|||
{
|
||||
wglDeleteContext (mhRC); // Release The Rendering Context
|
||||
mhRC = 0; // Zero The Rendering Context
|
||||
|
||||
}
|
||||
ReleaseDC (mWindowHandle, mhDC); // Release The Device Context
|
||||
mhDC = 0; // Zero The Device Context
|
||||
}
|
||||
|
||||
// will release and recreate mhDC, mWindowHandle
|
||||
recreateWindow(window_rect, dw_ex_style, dw_style);
|
||||
|
||||
RECT rect;
|
||||
|
|
@ -1664,7 +1662,8 @@ const S32 max_format = (S32)num_formats - 1;
|
|||
|
||||
void LLWindowWin32::recreateWindow(RECT window_rect, DWORD dw_ex_style, DWORD dw_style)
|
||||
{
|
||||
auto oldHandle = mWindowHandle;
|
||||
auto oldWindowHandle = mWindowHandle;
|
||||
auto oldDCHandle = mhDC;
|
||||
|
||||
// zero out mWindowHandle and mhDC before destroying window so window
|
||||
// thread falls back to peekmessage
|
||||
|
|
@ -1676,7 +1675,8 @@ void LLWindowWin32::recreateWindow(RECT window_rect, DWORD dw_ex_style, DWORD dw
|
|||
auto window_work =
|
||||
[this,
|
||||
self=mWindowThread,
|
||||
oldHandle,
|
||||
oldWindowHandle,
|
||||
oldDCHandle,
|
||||
// bind CreateWindowEx() parameters by value instead of
|
||||
// back-referencing LLWindowWin32 members
|
||||
windowClassName=mWindowClassName,
|
||||
|
|
@ -1692,11 +1692,19 @@ void LLWindowWin32::recreateWindow(RECT window_rect, DWORD dw_ex_style, DWORD dw
|
|||
self->mWindowHandle = 0;
|
||||
self->mhDC = 0;
|
||||
|
||||
// important to call DestroyWindow() from the window thread
|
||||
if (oldHandle && !destroy_window_handler(oldHandle))
|
||||
if (oldWindowHandle)
|
||||
{
|
||||
LL_WARNS("Window") << "Failed to properly close window before recreating it!"
|
||||
<< LL_ENDL;
|
||||
if (oldDCHandle && !ReleaseDC(oldWindowHandle, oldDCHandle))
|
||||
{
|
||||
LL_WARNS("Window") << "Failed to ReleaseDC" << LL_ENDL;
|
||||
}
|
||||
|
||||
// important to call DestroyWindow() from the window thread
|
||||
if (!destroy_window_handler(oldWindowHandle))
|
||||
{
|
||||
LL_WARNS("Window") << "Failed to properly close window before recreating it!"
|
||||
<< LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
auto handle = CreateWindowEx(dw_ex_style,
|
||||
|
|
@ -1734,7 +1742,7 @@ void LLWindowWin32::recreateWindow(RECT window_rect, DWORD dw_ex_style, DWORD dw
|
|||
};
|
||||
// But how we pass window_work to the window thread depends on whether we
|
||||
// already have a window handle.
|
||||
if (! oldHandle)
|
||||
if (!oldWindowHandle)
|
||||
{
|
||||
// Pass window_work using the WorkQueue: without an existing window
|
||||
// handle, the window thread can't call GetMessage().
|
||||
|
|
@ -1747,7 +1755,7 @@ void LLWindowWin32::recreateWindow(RECT window_rect, DWORD dw_ex_style, DWORD dw
|
|||
// PostMessage(oldHandle) because oldHandle won't be destroyed until
|
||||
// the window thread has retrieved and executed window_work.
|
||||
LL_DEBUGS("Window") << "posting window_work to message queue" << LL_ENDL;
|
||||
mWindowThread->Post(oldHandle, window_work);
|
||||
mWindowThread->Post(oldWindowHandle, window_work);
|
||||
}
|
||||
|
||||
auto future = promise.get_future();
|
||||
|
|
|
|||
|
|
@ -2671,7 +2671,7 @@ if (DARWIN)
|
|||
set(MACOSX_EXECUTABLE_NAME "Firestorm")
|
||||
set(MACOSX_BUNDLE_INFO_STRING "Firestorm Viewer")
|
||||
set(MACOSX_BUNDLE_ICON_FILE "firestorm_icon.icns")
|
||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.phoenixviewer.firestorm.viewer-${ND_VIEWER_FLAVOR}")
|
||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.firestormviewer.firestorm")
|
||||
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${VIEWER_CHANNEL} ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
|
||||
set(MACOSX_BUNDLE_BUNDLE_NAME "Firestorm")
|
||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
|
||||
|
|
|
|||
|
|
@ -9239,6 +9239,62 @@
|
|||
<key>Backup</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSMeshLowestLodSuffix</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Suffix to use for Lowest LOD models and files (DAE).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>LOD0</string>
|
||||
</map>
|
||||
<key>FSMeshLowLodSuffix</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Suffix to use for Low LOD models and files (DAE).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>LOD1</string>
|
||||
</map>
|
||||
<key>FSMeshMediumLodSuffix</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Suffix to use for Medium LOD models and files (DAE).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>LOD2</string>
|
||||
</map>
|
||||
<key>FSMeshHighLodSuffix</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Suffix to use for High LOD models and files (DAE).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string></string>
|
||||
</map>
|
||||
<key>FSMeshPhysicsSuffix</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Suffix to use for Physics models and files (DAE).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>PHYS</string>
|
||||
</map>
|
||||
|
||||
<key>FSMeshUploadAutoEnableWeights</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -19822,7 +19878,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>FSParticleChat</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Speak Particle Info on channel 9000</string>
|
||||
<string>Send Selection Info on channel 9000 when editing objects (does not work if PrivatePointAtTarget is enabled)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ WLSkyDetail 1 48
|
|||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
// Medium High Graphics Settings (deferred enabled)
|
||||
//
|
||||
list MidHigh
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -183,7 +183,7 @@ RenderTransparentWater 1 1
|
|||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
|
|
@ -191,7 +191,7 @@ WLSkyDetail 1 48
|
|||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// High Graphics Settings
|
||||
// High Graphics Settings (deferred + SSAO)
|
||||
//
|
||||
list High
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -212,15 +212,15 @@ RenderTransparentWater 1 1
|
|||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
WLSkyDetail 1 48
|
||||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred)
|
||||
// High Ultra Graphics Settings (deferred + SSAO)
|
||||
//
|
||||
list HighUltra
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -242,7 +242,7 @@ RenderTreeLODFactor 1 0.5
|
|||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
WLSkyDetail 1 48
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ WLSkyDetail 1 48
|
|||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
// Medium High Graphics Settings (deferred enabled)
|
||||
//
|
||||
list MidHigh
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -184,7 +184,7 @@ RenderTransparentWater 1 1
|
|||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
|
|
@ -192,7 +192,7 @@ WLSkyDetail 1 48
|
|||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// High Graphics Settings
|
||||
// High Graphics Settings (deferred + SSAO)
|
||||
//
|
||||
list High
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -213,15 +213,15 @@ RenderTransparentWater 1 1
|
|||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
WLSkyDetail 1 48
|
||||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred)
|
||||
// High Ultra Graphics Settings (deferred + SSAO)
|
||||
//
|
||||
list HighUltra
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -243,7 +243,7 @@ RenderTreeLODFactor 1 0.5
|
|||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
WLSkyDetail 1 48
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ WLSkyDetail 1 128
|
|||
Disregard128DefaultDrawDistance 1 1
|
||||
Disregard96DefaultDrawDistance 1 1
|
||||
RenderTextureMemoryMultiple 1 1.0
|
||||
RenderCompressTextures 1 1
|
||||
RenderCompressTextures 1 1
|
||||
RenderShaderLightingMaxLevel 1 3
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 1
|
||||
|
|
@ -161,7 +161,7 @@ WLSkyDetail 1 48
|
|||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
// Medium High Graphics Settings (deferred enabled)
|
||||
//
|
||||
list MidHigh
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -182,7 +182,7 @@ RenderTransparentWater 1 1
|
|||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 0
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
|
|
@ -190,7 +190,7 @@ WLSkyDetail 1 48
|
|||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// High Graphics Settings (deferred)
|
||||
// High Graphics Settings (deferred + SSAO)
|
||||
//
|
||||
list High
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -212,14 +212,14 @@ RenderTreeLODFactor 1 0.5
|
|||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
RenderShadowDetail 1 0
|
||||
WLSkyDetail 1 48
|
||||
RenderFSAASamples 1 2
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred)
|
||||
// High Ultra Graphics Settings (deferred + SSAO)
|
||||
//
|
||||
list HighUltra
|
||||
RenderAnisotropic 1 1
|
||||
|
|
@ -241,7 +241,7 @@ RenderTreeLODFactor 1 0.5
|
|||
RenderVolumeLODFactor 1 2.0
|
||||
WindLightUseAtmosShaders 1 1
|
||||
RenderDeferred 1 1
|
||||
RenderDeferredSSAO 1 0
|
||||
RenderDeferredSSAO 1 1
|
||||
RenderShadowDetail 1 0
|
||||
RenderUseAdvancedAtmospherics 1 0
|
||||
WLSkyDetail 1 48
|
||||
|
|
|
|||
|
|
@ -81,6 +81,13 @@ const F32 MIN_DISTANCE_MOVED = 1.0f;
|
|||
// timeout to resend object properties request again
|
||||
const F32 REQUEST_TIMEOUT = 30.0f;
|
||||
|
||||
std::string RLVa_hideNameIfRestricted(std::string const &name)
|
||||
{
|
||||
if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
return name;
|
||||
else
|
||||
return RlvStrings::getAnonym(name);
|
||||
}
|
||||
|
||||
F32 calculateObjectDistance(LLVector3d agent_pos, LLViewerObject* object)
|
||||
{
|
||||
|
|
@ -907,10 +914,13 @@ void FSAreaSearch::matchObject(FSObjectProperties& details, LLViewerObject* obje
|
|||
std::string object_description = details.description;
|
||||
|
||||
details.name_requested = false;
|
||||
getNameFromUUID(details.ownership_id, true, owner_name, details.group_owned, details.name_requested);
|
||||
getNameFromUUID(details.creator_id, false, creator_name, false, details.name_requested);
|
||||
getNameFromUUID(details.last_owner_id, false, last_owner_name, false, details.name_requested);
|
||||
getNameFromUUID(details.group_id, false, group_name, true, details.name_requested);
|
||||
getNameFromUUID(details.ownership_id, owner_name, details.group_owned, details.name_requested);
|
||||
getNameFromUUID(details.creator_id, creator_name, false, details.name_requested);
|
||||
getNameFromUUID(details.last_owner_id, last_owner_name, false, details.name_requested);
|
||||
getNameFromUUID(details.group_id, group_name, true, details.name_requested);
|
||||
|
||||
owner_name = RLVa_hideNameIfRestricted(owner_name);
|
||||
last_owner_name = RLVa_hideNameIfRestricted(last_owner_name);
|
||||
|
||||
if (mRegexSearch)
|
||||
{
|
||||
|
|
@ -1042,7 +1052,7 @@ void FSAreaSearch::matchObject(FSObjectProperties& details, LLViewerObject* obje
|
|||
|
||||
cell_params.column = "owner";
|
||||
cell_params.value = owner_name;
|
||||
row_params.columns.add(cell_params);
|
||||
row_params.columns.add(cell_params);
|
||||
|
||||
cell_params.column = "group";
|
||||
cell_params.value = group_name;
|
||||
|
|
@ -1105,7 +1115,7 @@ void FSAreaSearch::updateObjectCosts(const LLUUID& object_id, F32 object_cost, F
|
|||
}
|
||||
}
|
||||
|
||||
void FSAreaSearch::getNameFromUUID(const LLUUID& id, bool needs_rlva_check, std::string& name, bool group, bool& name_requested)
|
||||
void FSAreaSearch::getNameFromUUID(const LLUUID& id, std::string& name, bool group, bool& name_requested)
|
||||
{
|
||||
static const std::string unknown_name = LLTrans::getString("AvatarNameWaiting");
|
||||
|
||||
|
|
@ -1127,46 +1137,28 @@ void FSAreaSearch::getNameFromUUID(const LLUUID& id, bool needs_rlva_check, std:
|
|||
else
|
||||
{
|
||||
LLAvatarName av_name;
|
||||
if (LLAvatarNameCache::get(id, &av_name))
|
||||
{
|
||||
if (!needs_rlva_check || !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
{
|
||||
name = av_name.getCompleteName();
|
||||
}
|
||||
else
|
||||
{
|
||||
name = RlvStrings::getAnonym(av_name);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!LLAvatarNameCache::get(id, &av_name))
|
||||
{
|
||||
name = unknown_name;
|
||||
if (std::find(mNamesRequested.begin(), mNamesRequested.end(), id) == mNamesRequested.end())
|
||||
{
|
||||
mNamesRequested.push_back(id);
|
||||
boost::signals2::connection cb_connection = LLAvatarNameCache::get(id, boost::bind(&FSAreaSearch::avatarNameCacheCallback, this, _1, _2, needs_rlva_check));
|
||||
boost::signals2::connection cb_connection = LLAvatarNameCache::get(id, boost::bind(&FSAreaSearch::avatarNameCacheCallback, this, _1, _2));
|
||||
mNameCacheConnections.insert(std::make_pair(id, cb_connection)); // mNamesRequested will do the dupe check
|
||||
}
|
||||
name_requested = true;
|
||||
}
|
||||
else
|
||||
name = av_name.getCompleteName();
|
||||
}
|
||||
}
|
||||
|
||||
void FSAreaSearch::avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name, bool needs_rlva_check)
|
||||
void FSAreaSearch::avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name)
|
||||
{
|
||||
std::string name;
|
||||
if (!needs_rlva_check || !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
{
|
||||
name = av_name.getCompleteName();
|
||||
}
|
||||
else
|
||||
{
|
||||
name = RlvStrings::getAnonym(av_name);
|
||||
}
|
||||
callbackLoadFullName(id, name);
|
||||
callbackLoadFullName(id, av_name.getCompleteName());
|
||||
}
|
||||
|
||||
void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& full_name)
|
||||
void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& full_name )
|
||||
{
|
||||
auto iter = mNameCacheConnections.find(id);
|
||||
if (iter != mNameCacheConnections.end())
|
||||
|
|
@ -1193,7 +1185,7 @@ void FSAreaSearch::callbackLoadFullName(const LLUUID& id, const std::string& ful
|
|||
}
|
||||
}
|
||||
|
||||
mPanelList->updateName(id, full_name);
|
||||
mPanelList->updateName(id, full_name);
|
||||
}
|
||||
|
||||
void FSAreaSearch::updateCounterText()
|
||||
|
|
@ -1613,7 +1605,7 @@ void FSPanelAreaSearchList::updateName(const LLUUID& id, const std::string& name
|
|||
if (owner_column && (id == details.owner_id))
|
||||
{
|
||||
LLScrollListText* owner_text = (LLScrollListText*)item->getColumn(owner_column->mIndex);
|
||||
owner_text->setText(name);
|
||||
owner_text->setText(RLVa_hideNameIfRestricted(name));
|
||||
mResultList->setNeedsSort();
|
||||
}
|
||||
|
||||
|
|
@ -1627,7 +1619,7 @@ void FSPanelAreaSearchList::updateName(const LLUUID& id, const std::string& name
|
|||
if (last_owner_column && (id == details.last_owner_id))
|
||||
{
|
||||
LLScrollListText* last_owner_text = (LLScrollListText*)item->getColumn(last_owner_column->mIndex);
|
||||
last_owner_text->setText(name);
|
||||
last_owner_text->setText(RLVa_hideNameIfRestricted(name));
|
||||
mResultList->setNeedsSort();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ public:
|
|||
virtual void draw();
|
||||
virtual void onOpen(const LLSD& key);
|
||||
|
||||
void avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name, bool needs_rlva_check);
|
||||
void avatarNameCacheCallback(const LLUUID& id, const LLAvatarName& av_name);
|
||||
void callbackLoadFullName(const LLUUID& id, const std::string& full_name);
|
||||
void processObjectProperties(LLMessageSystem* msg);
|
||||
void updateObjectCosts(const LLUUID& object_id, F32 object_cost, F32 link_cost, F32 physics_cost, F32 link_physics_cost);
|
||||
|
|
@ -172,7 +172,7 @@ public:
|
|||
private:
|
||||
void requestObjectProperties(const std::vector< U32 >& request_list, bool select, LLViewerRegion* regionp);
|
||||
void matchObject(FSObjectProperties& details, LLViewerObject* objectp);
|
||||
void getNameFromUUID(const LLUUID& id, bool needs_rvla_check, std::string& name, bool group, bool& name_requested);
|
||||
void getNameFromUUID(const LLUUID& id, std::string& name, bool group, bool& name_requested);
|
||||
|
||||
void updateCounterText();
|
||||
bool regexTest(std::string text);
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ constexpr auto SceneType {FSPerfStats::ObjType_t::OT_GENERAL};
|
|||
class FSExceptionsContextMenu : public LLListContextMenu
|
||||
{
|
||||
public:
|
||||
FSExceptionsContextMenu(FSFloaterPerformance* floater_settings)
|
||||
explicit FSExceptionsContextMenu(FSFloaterPerformance* floater_settings)
|
||||
: mFloaterPerformance(floater_settings)
|
||||
{}
|
||||
protected:
|
||||
|
|
@ -250,11 +250,13 @@ void FSFloaterPerformance::draw()
|
|||
|
||||
FSPerfStats::bufferToggleLock.lock(); // prevent toggle for a moment
|
||||
|
||||
auto tot_frame_time_ns = FSPerfStats::raw_to_ns(FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_FRAME));
|
||||
|
||||
auto tot_frame_time_raw = FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_FRAME);
|
||||
// cumulative avatar time (includes idle processing, attachments and base av)
|
||||
auto tot_avatar_time_raw = FSPerfStats::StatsRecorder::getSum(AvType, FSPerfStats::StatType_t::RENDER_COMBINED);
|
||||
// cumulative avatar render specific time (a bit arbitrary as the processing is too.)
|
||||
auto tot_avatar_render_time_raw = tot_avatar_time_raw - FSPerfStats::StatsRecorder::getSum(AvType, FSPerfStats::StatType_t::RENDER_IDLE);
|
||||
// auto tot_av_idle_time_raw = FSPerfStats::StatsRecorder::getSum(AvType, FSPerfStats::StatType_t::RENDER_IDLE);
|
||||
// auto tot_avatar_render_time_raw = tot_avatar_time_raw - tot_av_idle_time_raw;
|
||||
// the time spent this frame on the "display()" call. Treated as "tot time rendering"
|
||||
auto tot_render_time_raw = FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_DISPLAY);
|
||||
// sleep time is basically forced sleep when window out of focus
|
||||
|
|
@ -263,8 +265,8 @@ void FSFloaterPerformance::draw()
|
|||
auto tot_ui_time_raw = FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_UI);
|
||||
// cumulative time spent rendering HUDS
|
||||
auto tot_huds_time_raw = FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_HUDS);
|
||||
// "idle" time. This is the time spent in the idle poll section of the main loop, we DO remove the avatar idle time as the avatar number we display is the total avatar time inclusive of idle processing.
|
||||
auto tot_idle_time_raw = FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_IDLE) - FSPerfStats::StatsRecorder::getSum(AvType, FSPerfStats::StatType_t::RENDER_IDLE);
|
||||
// "idle" time. This is the time spent in the idle poll section of the main loop
|
||||
auto tot_idle_time_raw = FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_IDLE);
|
||||
// similar to sleep time, induced by FPS limit
|
||||
auto tot_limit_time_raw = FSPerfStats::StatsRecorder::getSceneStat(FSPerfStats::StatType_t::RENDER_FPSLIMIT);
|
||||
// swap time is time spent in swap buffer
|
||||
|
|
@ -273,6 +275,7 @@ void FSFloaterPerformance::draw()
|
|||
FSPerfStats::bufferToggleLock.unlock();
|
||||
|
||||
auto unreliable = false; // if there is something to skew the stats such as sleep of fps cap
|
||||
auto tot_frame_time_ns = FSPerfStats::raw_to_ns(tot_frame_time_raw);
|
||||
auto tot_avatar_time_ns = FSPerfStats::raw_to_ns( tot_avatar_time_raw );
|
||||
auto tot_huds_time_ns = FSPerfStats::raw_to_ns( tot_huds_time_raw );
|
||||
// UI time includes HUD time so dedut that before we calc percentages
|
||||
|
|
@ -282,10 +285,10 @@ void FSFloaterPerformance::draw()
|
|||
// auto tot_limit_time_ns = FSPerfStats::raw_to_ns( tot_limit_time_raw );
|
||||
|
||||
// auto tot_render_time_ns = FSPerfStats::raw_to_ns( tot_render_time_raw );
|
||||
auto tot_idle_time_ns = FSPerfStats::raw_to_ns( tot_idle_time_raw );
|
||||
auto tot_swap_time_ns = FSPerfStats::raw_to_ns( tot_swap_time_raw );
|
||||
auto tot_scene_time_ns = FSPerfStats::raw_to_ns( tot_render_time_raw - tot_avatar_render_time_raw - tot_swap_time_raw - tot_ui_time_raw);
|
||||
|
||||
auto tot_idle_time_ns = FSPerfStats::raw_to_ns( tot_idle_time_raw );
|
||||
auto tot_swap_time_ns = FSPerfStats::raw_to_ns( tot_swap_time_raw );
|
||||
auto tot_scene_time_ns = FSPerfStats::raw_to_ns( tot_render_time_raw - tot_avatar_time_raw - tot_swap_time_raw - tot_ui_time_raw);
|
||||
// auto tot_overhead_time_ns = FSPerfStats::raw_to_ns( tot_frame_time_raw - tot_render_time_raw - tot_idle_time_raw );
|
||||
|
||||
// // remove time spent sleeping for fps limit or out of focus.
|
||||
// tot_frame_time_ns -= tot_limit_time_ns;
|
||||
|
|
|
|||
|
|
@ -1540,6 +1540,22 @@ void FSLSLPreprocessor::start_process()
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// FIRE-31718: Preprocessor crashes viewer on recursive #include
|
||||
|
||||
// Truncate the resulting preprocessed script to something the text field can handle without
|
||||
// freezing for so long the viewer disconnects. The usual script source code limit is 64kB so
|
||||
// let's play it safe and allow twice as much here. The script is most likely already unusable
|
||||
// at this point due to the preprocessor bailing out with an error earlier, so a truncated
|
||||
// version doesn't hurt more than it already did.
|
||||
if (output.size() > 128 * 1024)
|
||||
{
|
||||
output.resize(128 * 1024);
|
||||
display_error(LLTrans::getString("fs_preprocessor_truncated"));
|
||||
}
|
||||
}
|
||||
|
||||
if (!errored)
|
||||
{
|
||||
if (preprocessor_enabled && use_compression)
|
||||
|
|
|
|||
|
|
@ -222,14 +222,14 @@ namespace FSPerfStats
|
|||
|
||||
// clean the write maps in all cases.
|
||||
auto& statsTypeMatrix = statsDoubleBuffer[writeBuffer];
|
||||
for(auto& statsMap : statsTypeMatrix)
|
||||
for(auto& statsMapByType : statsTypeMatrix)
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_STATS("Clear stats maps");
|
||||
for(auto& stat_entry : statsMap)
|
||||
for(auto& stat_entry : statsMapByType)
|
||||
{
|
||||
std::fill_n(stat_entry.second.begin() ,static_cast<size_t>(ST::STATS_COUNT),0);
|
||||
}
|
||||
statsMap.clear();
|
||||
statsMapByType.clear();
|
||||
}
|
||||
for(int i=0; i< static_cast<size_t>(ObjType_t::OT_COUNT); i++)
|
||||
{
|
||||
|
|
@ -363,7 +363,7 @@ namespace FSPerfStats
|
|||
// if so we've got work to do
|
||||
|
||||
// how much of the frame was spent on non avatar related work?
|
||||
U32 non_avatar_time_raw = tot_frame_time_raw - tot_avatar_time_raw;
|
||||
U64 non_avatar_time_raw = tot_frame_time_raw - tot_avatar_time_raw;
|
||||
|
||||
// If the target frame time < scene time (estimated as non_avatar time)
|
||||
U64 target_avatar_time_raw;
|
||||
|
|
|
|||
|
|
@ -44,8 +44,8 @@
|
|||
#ifdef TRACY_ENABLE
|
||||
// USAGE_TRACKING - displays overlapping stats that may imply double counting.
|
||||
// ATTACHMENT_TRACKING - displays detailed tracking info for Avatar and Attachment. very heavy overhead.
|
||||
// #define USAGE_TRACKING
|
||||
// #define ATTACHMENT_TRACKING
|
||||
#define USAGE_TRACKING
|
||||
#define ATTACHMENT_TRACKING
|
||||
#else
|
||||
#undef USAGE_TRACKING
|
||||
#undef ATTACHMENT_TRACKING
|
||||
|
|
@ -183,19 +183,18 @@ namespace FSPerfStats
|
|||
static inline StatsRecorder& getInstance()
|
||||
{
|
||||
static StatsRecorder instance;
|
||||
// volatile int dummy{};
|
||||
return instance;
|
||||
}
|
||||
static inline void setFocusAv(const LLUUID& avID){focusAv = avID;};
|
||||
static inline const LLUUID& getFocusAv(){return (focusAv);};
|
||||
static inline void send(StatsRecord&& u){StatsRecorder::getInstance().q.enqueue(u);};
|
||||
static inline const LLUUID& getFocusAv(){return focusAv;};
|
||||
static inline void send(StatsRecord && upd){StatsRecorder::getInstance().q.enqueue(std::move(upd));};
|
||||
static void endFrame(){StatsRecorder::getInstance().q.enqueue(StatsRecord{StatType_t::RENDER_DONE, ObjType_t::OT_GENERAL, LLUUID::null, LLUUID::null, 0});};
|
||||
static void clearStats(){StatsRecorder::getInstance().q.enqueue(StatsRecord{StatType_t::RENDER_DONE, ObjType_t::OT_GENERAL, LLUUID::null, LLUUID::null, 1});};
|
||||
|
||||
static inline void setEnabled(bool on_or_off){collectionEnabled=on_or_off;};
|
||||
static inline void enable() { collectionEnabled=true; };
|
||||
static inline void disable() { collectionEnabled=false; };
|
||||
static inline bool enabled() { return(collectionEnabled); };
|
||||
static inline bool enabled() { return collectionEnabled; };
|
||||
|
||||
static inline int getReadBufferIndex() { return (writeBuffer ^ 1); };
|
||||
// static inline const StatsTypeMatrix& getCurrentStatsMatrix(){ return statsDoubleBuffer[getReadBufferIndex()];}
|
||||
|
|
@ -235,7 +234,7 @@ namespace FSPerfStats
|
|||
static bool collectionEnabled;
|
||||
|
||||
|
||||
void processUpdate(const StatsRecord& upd)
|
||||
void processUpdate(const StatsRecord& upd) const
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
|
||||
// LL_INFOS("perfstats") << "processing update:" << LL_ENDL;
|
||||
|
|
@ -286,13 +285,15 @@ namespace FSPerfStats
|
|||
|
||||
if (ot == ObjType_t::OT_ATTACHMENT)
|
||||
{
|
||||
if( !upd.isRigged && !upd.isHUD )
|
||||
if( !upd.isHUD ) // don't include HUD cost in self.
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED("Att as Av")
|
||||
// For all attachments that are not rigged we add them to the avatar (for all avatars) cost.
|
||||
doUpd(avKey, ObjType_t::OT_AVATAR, type, val);
|
||||
}
|
||||
if( avKey == focusAv )
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED("Att as Att")
|
||||
// For attachments that are for the focusAv (self for now) we record them for the attachment/complexity view
|
||||
if(upd.isHUD)
|
||||
{
|
||||
|
|
@ -301,10 +302,10 @@ namespace FSPerfStats
|
|||
// LL_INFOS("perfstats") << "frame: " << gFrameCount << " Attachment update("<< (type==StatType_t::RENDER_GEOMETRY?"GEOMETRY":"SHADOW") << ": " << key.asString() << " = " << val << LL_ENDL;
|
||||
doUpd(key, ot, type, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
// LL_INFOS("perfstats") << "frame: " << gFrameCount << " non-self Att update("<< (type==StatType_t::RENDER_GEOMETRY?"GEOMETRY":"SHADOW") << ": " << key.asString() << " = " << val << " for av " << avKey.asString() << LL_ENDL;
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// // LL_INFOS("perfstats") << "frame: " << gFrameCount << " non-self Att update("<< (type==StatType_t::RENDER_GEOMETRY?"GEOMETRY":"SHADOW") << ": " << key.asString() << " = " << val << " for av " << avKey.asString() << LL_ENDL;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -338,12 +339,13 @@ namespace FSPerfStats
|
|||
static void run()
|
||||
{
|
||||
StatsRecord upd[10];
|
||||
auto& instance {StatsRecorder::getInstance()};
|
||||
LL_PROFILER_THREAD_BEGIN("PerfStats");
|
||||
auto & instance {StatsRecorder::getInstance()};
|
||||
LL_PROFILER_SET_THREAD_NAME("PerfStats");
|
||||
|
||||
while( enabled() && !LLApp::isExiting() )
|
||||
{
|
||||
auto count = instance.q.wait_dequeue_bulk_timed(upd, 10, std::chrono::milliseconds(10));
|
||||
LL_PROFILER_THREAD_BEGIN("PerfStats");
|
||||
if(count)
|
||||
{
|
||||
// LL_INFOS("perfstats") << "processing " << count << " updates." << LL_ENDL;
|
||||
|
|
@ -352,8 +354,8 @@ namespace FSPerfStats
|
|||
instance.processUpdate(upd[i]);
|
||||
}
|
||||
}
|
||||
LL_PROFILER_THREAD_END("PerfStats");
|
||||
}
|
||||
LL_PROFILER_THREAD_END("PerfStats");
|
||||
}
|
||||
|
||||
Queue q;
|
||||
|
|
@ -384,7 +386,7 @@ namespace FSPerfStats
|
|||
#ifdef USAGE_TRACKING
|
||||
if(stat.objType == FSPerfStats::ObjType_t::OT_ATTACHMENT)
|
||||
{
|
||||
if(!stat.isRigged && FSPerfStats::inUseAvatar){FSZoneText("OVERLAP AVATAR",14);}
|
||||
if(!stat.isRigged && FSPerfStats::inUseAvatar){LL_PROFILE_ZONE_TEXT("OVERLAP AVATAR",14);}
|
||||
|
||||
LL_PROFILE_PLOT_SQ("InUse", (int64_t)FSPerfStats::inUse, (int64_t)FSPerfStats::inUse+1);
|
||||
FSPerfStats::inUse++;
|
||||
|
|
@ -407,7 +409,7 @@ namespace FSPerfStats
|
|||
|
||||
template < ObjType_t OD = ObjTypeDiscriminator,
|
||||
std::enable_if_t<OD == ObjType_t::OT_GENERAL> * = nullptr>
|
||||
RecordTime( StatType_t type ):RecordTime<ObjTypeDiscriminator>(LLUUID::null, LLUUID::null, type )
|
||||
explicit RecordTime( StatType_t type ):RecordTime<ObjTypeDiscriminator>(LLUUID::null, LLUUID::null, type )
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
|
||||
#ifdef USAGE_TRACKING
|
||||
|
|
@ -425,7 +427,7 @@ namespace FSPerfStats
|
|||
LL_PROFILE_ZONE_COLOR(tracy::Color::Purple);
|
||||
|
||||
#ifdef USAGE_TRACKING
|
||||
if(FSPerfStats::inUseAvatar){FSZoneText("OVERLAP AVATAR",14);}
|
||||
if(FSPerfStats::inUseAvatar){LL_PROFILE_ZONE_TEXT("OVERLAP AVATAR",14);}
|
||||
|
||||
LL_PROFILE_PLOT_SQ("InUseAv", (int64_t)FSPerfStats::inUseAvatar, (int64_t)FSPerfStats::inUseAvatar+1);
|
||||
FSPerfStats::inUseAvatar++;
|
||||
|
|
@ -502,6 +504,7 @@ namespace FSPerfStats
|
|||
|
||||
// helper functions
|
||||
using RATptr = std::unique_ptr<FSPerfStats::RecordAttachmentTime>;
|
||||
using RSTptr = std::unique_ptr<FSPerfStats::RecordSceneTime>;
|
||||
|
||||
template <typename T>
|
||||
static inline void trackAttachments(const T * vobj, bool isRigged, RATptr* ratPtrp)
|
||||
|
|
@ -542,11 +545,12 @@ static inline void trackAttachments(const T * vobj, bool isRigged, RATptr* ratPt
|
|||
// deliberately reset to ensure destruction before construction of replacement.
|
||||
ratPtrp->reset();
|
||||
};
|
||||
*ratPtrp = std::make_unique<FSPerfStats::RecordAttachmentTime>( av,
|
||||
obj,
|
||||
( (LLPipeline::sShadowRender)?FSPerfStats::StatType_t::RENDER_SHADOWS : FSPerfStats::StatType_t::RENDER_GEOMETRY ),
|
||||
isRigged,
|
||||
rootAtt->isHUDAttachment());
|
||||
*ratPtrp = std::make_unique<FSPerfStats::RecordAttachmentTime>(
|
||||
av,
|
||||
obj,
|
||||
( LLPipeline::sShadowRender?FSPerfStats::StatType_t::RENDER_SHADOWS : FSPerfStats::StatType_t::RENDER_GEOMETRY ),
|
||||
isRigged,
|
||||
rootAtt->isHUDAttachment());
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ if [[ -f "$CONFIG_FILE" ]]; then
|
|||
zip_file=${app_file/app/zip}
|
||||
ditto -c -k --keepParent "$app_file" "$zip_file"
|
||||
if [[ -f "$zip_file" ]]; then
|
||||
res=$(xcrun altool --notarize-app --primary-bundle-id "com.secondlife.viewer" \
|
||||
res=$(xcrun altool --notarize-app --primary-bundle-id "org.firestormviewer.firestorm" \
|
||||
--username $USERNAME \
|
||||
--password $PASSWORD \
|
||||
--asc-provider $ASC_PROVIDER \
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ Terminal=false\n\
|
|||
Type=Application\n\
|
||||
Categories=Application;Internet;Network;\n\
|
||||
StartupNotify=true\n\
|
||||
X-Desktop-File-Install-Version=3.0\n
|
||||
X-Desktop-File-Install-Version=3.0\n\
|
||||
StartupWMClass=do-not-directly-run-firestorm-bin"
|
||||
|
||||
echo " - Installing menu entries in ${desktop_entries_dir}"
|
||||
|
|
|
|||
|
|
@ -3264,7 +3264,13 @@ S32 LLAgentCamera::directionToKey(S32 direction)
|
|||
void LLAgentCamera::storeCameraPosition()
|
||||
{
|
||||
gSavedPerAccountSettings.setVector3d("FSStoredCameraPos", getCameraPositionGlobal());
|
||||
gSavedPerAccountSettings.setVector3d("FSStoredCameraFocus", getFocusTargetGlobal());
|
||||
|
||||
// get a vector pointing forward from the camera view manually, getFocusTargetGlobal() will
|
||||
// not return useful values if the camera is in flycam mode or was just switched out of
|
||||
// flycam mode and not repositioned after
|
||||
LLVector3d forward = LLVector3d(1.0, 0.0, 0.0) * LLViewerCamera::getInstance()->getQuaternion() + getCameraPositionGlobal();
|
||||
gSavedPerAccountSettings.setVector3d("FSStoredCameraFocus", forward);
|
||||
|
||||
LLUUID stored_camera_focus_object_id = LLUUID::null;
|
||||
if (mFocusObject)
|
||||
{
|
||||
|
|
@ -3294,6 +3300,15 @@ void LLAgentCamera::loadCameraPosition()
|
|||
return;
|
||||
}
|
||||
|
||||
// switch off flycam mode if needed
|
||||
if (LLViewerJoystick::getInstance()->getOverrideCamera())
|
||||
{
|
||||
handle_toggle_flycam();
|
||||
|
||||
// exiting from flycam usually keeps the camera where it is but here we want it to actually move
|
||||
LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true);
|
||||
}
|
||||
|
||||
unlockView();
|
||||
setCameraPosAndFocusGlobal(stored_camera_pos, stored_camera_focus, stored_camera_focus_object_id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1522,11 +1522,6 @@ void LLAppViewer::initMaxHeapSize()
|
|||
#else
|
||||
F32Gigabytes max_heap_size_gb = (F32Gigabytes)gSavedSettings.getF32("MaxHeapSize64");
|
||||
#endif
|
||||
// <FS:Ansariel> Enable low memory checks on 32bit builds
|
||||
#if ADDRESS_SIZE == 64
|
||||
max_heap_size_gb = F32Gigabytes(128);
|
||||
#endif
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLMemory::initMaxHeapSizeGB(max_heap_size_gb);
|
||||
}
|
||||
|
|
@ -1649,9 +1644,9 @@ bool LLAppViewer::doFrame()
|
|||
// </FS:Beq>
|
||||
// <FS:Ansariel> FIRE-22297: FPS limiter not working properly on Mac/Linux
|
||||
LLTimer frameTimer;
|
||||
{FSPerfStats::RecordSceneTime T (FSPerfStats::StatType_t::RENDER_IDLE); // <FS:Beq/> perf stats
|
||||
|
||||
nd::etw::logFrame(); // <FS:ND> Write the start of each frame. Even if our Provider (Firestorm) would be enabled, this has only light impact. Does nothing on OSX and Linux.
|
||||
{FSPerfStats::RecordSceneTime T (FSPerfStats::StatType_t::RENDER_IDLE); // <FS:Beq/> perf stats
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_APP("df LLTrace");
|
||||
if (LLFloaterReg::instanceVisible("block_timers"))
|
||||
|
|
@ -1667,9 +1662,9 @@ bool LLAppViewer::doFrame()
|
|||
|
||||
//clear call stack records
|
||||
LL_CLEAR_CALLSTACKS();
|
||||
} // <FS:Beq/> perf stats
|
||||
} // <FS:Beq/> perf stats (close NonRender/IDLE tracking starting at event pump)
|
||||
{
|
||||
{FSPerfStats::RecordSceneTime T (FSPerfStats::StatType_t::RENDER_IDLE); // <FS:Beq> ensure we have the entire top scope of frame covered
|
||||
{FSPerfStats::RecordSceneTime T (FSPerfStats::StatType_t::RENDER_IDLE); // <FS:Beq> ensure we have the entire top scope of frame covered (input event and coro)
|
||||
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_APP( "df processMiscNativeEvents" )
|
||||
pingMainloopTimeout("Main:MiscNativeWindowEvents");
|
||||
|
|
@ -1717,7 +1712,7 @@ bool LLAppViewer::doFrame()
|
|||
// give listeners a chance to run
|
||||
llcoro::suspend();
|
||||
}
|
||||
}// <FS:Beq> ensure we have the entire top scope of frame covered
|
||||
}// <FS:Beq> ensure we have the entire top scope of frame covered (close input event and coro "idle")
|
||||
|
||||
if (!LLApp::isExiting())
|
||||
{
|
||||
|
|
@ -1751,12 +1746,12 @@ bool LLAppViewer::doFrame()
|
|||
|
||||
// Update state based on messages, user input, object idle.
|
||||
{
|
||||
FSPerfStats::RecordSceneTime T (FSPerfStats::StatType_t::RENDER_IDLE);
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_APP( "df pauseMainloopTimeout" )
|
||||
pauseMainloopTimeout(); // *TODO: Remove. Messages shouldn't be stalling for 20+ seconds!
|
||||
}
|
||||
|
||||
{
|
||||
FSPerfStats::RecordSceneTime T (FSPerfStats::StatType_t::RENDER_IDLE);
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_APP("df idle"); //LL_RECORD_BLOCK_TIME(FTM_IDLE);
|
||||
idle();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -924,12 +924,14 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update)
|
|||
LLVector3 cam_pos_from_agent = LLViewerCamera::getInstance()->getOrigin();
|
||||
LLVector3 cam_to_box_offset = point_to_box_offset(cam_pos_from_agent, av_box);
|
||||
mDistanceWRTCamera = llmax(0.01f, ll_round(cam_to_box_offset.magVec(), 0.01f));
|
||||
LL_DEBUGS("DynamicBox") << volume->getAvatar()->getFullname()
|
||||
<< " pos (ignored) " << pos
|
||||
<< " cam pos " << cam_pos_from_agent
|
||||
<< " box " << av_box[0] << "," << av_box[1]
|
||||
<< " -> dist " << mDistanceWRTCamera
|
||||
<< LL_ENDL;
|
||||
// <FS:Beq> Remove debug that has measurable impact even when disabled.
|
||||
// LL_DEBUGS("DynamicBox") << volume->getAvatar()->getFullname()
|
||||
// << " pos (ignored) " << pos
|
||||
// << " cam pos " << cam_pos_from_agent
|
||||
// << " box " << av_box[0] << "," << av_box[1]
|
||||
// << " -> dist " << mDistanceWRTCamera
|
||||
// << LL_ENDL;
|
||||
// </FS:Beq>
|
||||
mVObjp->updateLOD();
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -405,7 +405,7 @@ void LLRenderPass::renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL t
|
|||
LLViewerObject* vobj = pparams->mFace->getViewerObject();
|
||||
if(vobj->isAttachment())
|
||||
{
|
||||
trackAttachments( vobj, pparams->mFace->isState(LLFace::RIGGED),&ratPtr);
|
||||
trackAttachments( vobj, false,&ratPtr);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
|
@ -422,11 +422,22 @@ void LLRenderPass::renderRiggedGroup(LLSpatialGroup* group, U32 type, U32 mask,
|
|||
U64 lastMeshId = 0;
|
||||
mask |= LLVertexBuffer::MAP_WEIGHT4;
|
||||
|
||||
std::unique_ptr<FSPerfStats::RecordAttachmentTime> ratPtr{}; // <FS:Beq/> Perf stats
|
||||
for (LLSpatialGroup::drawmap_elem_t::iterator k = draw_info.begin(); k != draw_info.end(); ++k)
|
||||
{
|
||||
LLDrawInfo* pparams = *k;
|
||||
if (pparams)
|
||||
{
|
||||
// <FS:Beq> Capture render times
|
||||
if(pparams->mFace)
|
||||
{
|
||||
LLViewerObject* vobj = pparams->mFace->getViewerObject();
|
||||
if(vobj->isAttachment())
|
||||
{
|
||||
trackAttachments( vobj, true ,&ratPtr);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
if (lastAvatar != pparams->mAvatar || lastMeshId != pparams->mSkinInfo->mHash)
|
||||
{
|
||||
uploadMatrixPalette(*pparams);
|
||||
|
|
@ -454,7 +465,7 @@ void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture, BOOL batch_text
|
|||
LLViewerObject* vobj = pparams->mFace->getViewerObject();
|
||||
if(vobj->isAttachment())
|
||||
{
|
||||
trackAttachments( vobj, pparams->mFace->isState(LLFace::RIGGED),&ratPtr);
|
||||
trackAttachments( vobj, false, &ratPtr);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
|
@ -469,11 +480,22 @@ void LLRenderPass::pushRiggedBatches(U32 type, U32 mask, BOOL texture, BOOL batc
|
|||
LLVOAvatar* lastAvatar = nullptr;
|
||||
U64 lastMeshId = 0;
|
||||
mask |= LLVertexBuffer::MAP_WEIGHT4;
|
||||
std::unique_ptr<FSPerfStats::RecordAttachmentTime> ratPtr{}; // <FS:Beq/> Perf stats
|
||||
for (LLCullResult::drawinfo_iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i)
|
||||
{
|
||||
LLDrawInfo* pparams = *i;
|
||||
if (pparams)
|
||||
{
|
||||
// <FS:Beq> Capture render times
|
||||
if(pparams->mFace)
|
||||
{
|
||||
LLViewerObject* vobj = pparams->mFace->getViewerObject();
|
||||
if(vobj->isAttachment())
|
||||
{
|
||||
trackAttachments( vobj, true, &ratPtr);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
if (pparams->mAvatar.notNull() && (lastAvatar != pparams->mAvatar || lastMeshId != pparams->mSkinInfo->mHash))
|
||||
{
|
||||
uploadMatrixPalette(*pparams);
|
||||
|
|
@ -501,7 +523,7 @@ void LLRenderPass::pushMaskBatches(U32 type, U32 mask, BOOL texture, BOOL batch_
|
|||
LLViewerObject* vobj = (*pparams).mFace->getViewerObject();
|
||||
if(vobj->isAttachment())
|
||||
{
|
||||
trackAttachments( vobj, (*pparams).mFace->isState(LLFace::RIGGED),&ratPtr);
|
||||
trackAttachments( vobj, false, &ratPtr);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
|
@ -516,11 +538,22 @@ void LLRenderPass::pushRiggedMaskBatches(U32 type, U32 mask, BOOL texture, BOOL
|
|||
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL;
|
||||
LLVOAvatar* lastAvatar = nullptr;
|
||||
U64 lastMeshId = 0;
|
||||
std::unique_ptr<FSPerfStats::RecordAttachmentTime> ratPtr{};
|
||||
for (LLCullResult::drawinfo_iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i)
|
||||
{
|
||||
LLDrawInfo* pparams = *i;
|
||||
if (pparams)
|
||||
{
|
||||
// <FS:Beq> Capture render times
|
||||
if((*pparams).mFace)
|
||||
{
|
||||
LLViewerObject* vobj = (*pparams).mFace->getViewerObject();
|
||||
if(vobj->isAttachment())
|
||||
{
|
||||
trackAttachments( vobj, true, &ratPtr);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
if (LLGLSLShader::sCurBoundShaderPtr)
|
||||
{
|
||||
LLGLSLShader::sCurBoundShaderPtr->setMinimumAlpha(pparams->mAlphaMaskCutoff);
|
||||
|
|
|
|||
|
|
@ -122,6 +122,12 @@ void LLMeshFilePicker::notify(const std::vector<std::string>& filenames)
|
|||
}
|
||||
}
|
||||
|
||||
// <FS:Beq> support for settings panel of floater
|
||||
const void updateUDPhysics(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter type)
|
||||
{
|
||||
gSavedSettings.setString("FSPhysicsPresetUser1", filenames[0]);
|
||||
}
|
||||
// </FS:Beq>
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLFloaterModelPreview()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -146,6 +152,14 @@ mAvatarTabIndex(0)
|
|||
}
|
||||
}
|
||||
|
||||
// <FS:Beq> support for settings panel of floater
|
||||
//static
|
||||
void LLFloaterModelPreview::onSelectUDPhysics(LLUICtrl* ctrl, void* userdata)
|
||||
{
|
||||
(new LLFilePickerReplyThread(boost::bind(&updateUDPhysics, _1, _2), LLFilePicker::FFLOAD_COLLADA, false))->getFile();
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// postBuild()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -209,6 +223,9 @@ BOOL LLFloaterModelPreview::postBuild()
|
|||
getChild<LLColorSwatchCtrl>("mesh_preview_physics_fill_color")->setCommitCallback(preview_refresh_cb);
|
||||
getChild<LLColorSwatchCtrl>("mesh_preview_degenerate_edge_color")->setCommitCallback(preview_refresh_cb);
|
||||
getChild<LLColorSwatchCtrl>("mesh_preview_degenerate_fill_color")->setCommitCallback(preview_refresh_cb);
|
||||
|
||||
getChild<LLComboBox>("lod_suffix_combo")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onSuffixStandardSelected, this, _1)); // mesh loader suffix configuration
|
||||
getChild<LLButton>("set_user_def_phys")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onSelectUDPhysics, this, _1)); // mesh loader suffix configuration
|
||||
// </FS:Beq>
|
||||
|
||||
childDisable("upload_skin");
|
||||
|
|
@ -1185,6 +1202,75 @@ void LLFloaterModelPreview::onPhysicsUseLOD(LLUICtrl* ctrl, void* userdata)
|
|||
}
|
||||
}
|
||||
|
||||
// <FS:Beq> mesh loader suffix configuration
|
||||
//static
|
||||
void LLFloaterModelPreview::onSuffixStandardSelected(LLUICtrl* ctrl, void* userdata)
|
||||
{
|
||||
S32 which{0};
|
||||
// SL standard LODs are the reverse of every other game engine (LOD0 least detail)
|
||||
// SL has no suffix for the HIGH LOD
|
||||
const std::array<std::string,5> sl_suffixes = {
|
||||
"LOD0",
|
||||
"LOD1",
|
||||
"LOD2",
|
||||
"",
|
||||
"PHYS"
|
||||
};
|
||||
// Game engines (UE, Unity, CryEngine, Godot, etc.) all use LOD0 as highest.
|
||||
// They typically also label the high with a suffix too
|
||||
const std::array<std::string,5> std_suffixes = {
|
||||
"LOD3",
|
||||
"LOD2",
|
||||
"LOD1",
|
||||
"LOD0",
|
||||
"PHYS"
|
||||
};
|
||||
// Human friendly. When making things manually people naturally use names.
|
||||
const std::array<std::string,5> desc_suffixes = {
|
||||
"LOWEST",
|
||||
"LOW",
|
||||
"MED",
|
||||
"HIGH",
|
||||
"PHYS"
|
||||
};
|
||||
|
||||
LLCtrlSelectionInterface* iface = sInstance->childGetSelectionInterface("lod_suffix_combo");
|
||||
if (iface)
|
||||
{
|
||||
which = iface->getFirstSelectedIndex();
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "no UI element found! nothing changed" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (which)
|
||||
{
|
||||
case 1: // SL
|
||||
for (int i = 0; i < LLModel::NUM_LODS; i++)
|
||||
{
|
||||
gSavedSettings.setString(LLModelPreview::sSuffixVarNames[i], sl_suffixes[i]);
|
||||
}
|
||||
break;
|
||||
case 2: // standard
|
||||
for (int i = 0; i < LLModel::NUM_LODS; i++)
|
||||
{
|
||||
gSavedSettings.setString(LLModelPreview::sSuffixVarNames[i], std_suffixes[i]);
|
||||
}
|
||||
break;
|
||||
case 3: // descriptive english
|
||||
for (int i = 0; i < LLModel::NUM_LODS; i++)
|
||||
{
|
||||
gSavedSettings.setString(LLModelPreview::sSuffixVarNames[i], desc_suffixes[i]);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LL_WARNS() << "no standard selected, nothing changed" << LL_ENDL;
|
||||
break;
|
||||
};
|
||||
}
|
||||
// </FS:Beq>
|
||||
//static
|
||||
void LLFloaterModelPreview::onCancel(LLUICtrl* ctrl, void* data)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public:
|
|||
void loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
|
||||
|
||||
void loadHighLodModel();
|
||||
|
||||
|
||||
void onViewOptionChecked(LLUICtrl* ctrl);
|
||||
void onUploadOptionChecked(LLUICtrl* ctrl);
|
||||
bool isViewOptionChecked(const LLSD& userdata);
|
||||
|
|
@ -167,6 +167,8 @@ protected:
|
|||
static void onPhysicsOptimize(LLUICtrl* ctrl, void* userdata);
|
||||
static void onPhysicsDecomposeBack(LLUICtrl* ctrl, void* userdata);
|
||||
static void onPhysicsSimplifyBack(LLUICtrl* ctrl, void* userdata);
|
||||
static void onSuffixStandardSelected(LLUICtrl* ctrl, void* userdata); // <FS:Beq> mesh loader suffix configuration
|
||||
static void onSelectUDPhysics(LLUICtrl* ctrl, void* userdata); // <FS:Beq/> custom setter for upload preview settings tab
|
||||
|
||||
void draw();
|
||||
|
||||
|
|
|
|||
|
|
@ -92,6 +92,17 @@ bool LLModelPreview::sIgnoreLoadedCallback = false;
|
|||
// </FS:Beq>
|
||||
const F32 SKIN_WEIGHT_CAMERA_DISTANCE = 16.f;
|
||||
|
||||
// <FS:Beq> mesh loader suffix configuration
|
||||
//static
|
||||
const std::array<std::string,5> LLModelPreview::sSuffixVarNames
|
||||
{
|
||||
"FSMeshLowestLodSuffix",
|
||||
"FSMeshLowLodSuffix",
|
||||
"FSMeshMediumLodSuffix",
|
||||
"FSMeshHighLodSuffix",
|
||||
"FSMeshPhysicsSuffix"
|
||||
};
|
||||
// </FS:Beq>
|
||||
LLViewerFetchedTexture* bindMaterialDiffuseTexture(const LLImportMaterial& material)
|
||||
{
|
||||
LLViewerFetchedTexture *texture = LLViewerTextureManager::getFetchedTexture(material.getDiffuseMap(), FTT_DEFAULT, TRUE, LLGLTexture::BOOST_PREVIEW);
|
||||
|
|
@ -110,13 +121,19 @@ LLViewerFetchedTexture* bindMaterialDiffuseTexture(const LLImportMaterial& mater
|
|||
|
||||
std::string stripSuffix(std::string name)
|
||||
{
|
||||
// <FS:Ansariel> Bug fixes in mesh importer by Drake Arconis
|
||||
// <FS:Beq> Selectable suffixes
|
||||
//if ((name.find("_LOD") != -1) || (name.find("_PHYS") != -1))
|
||||
if ((name.find("_LOD") != std::string::npos) || (name.find("_PHYS") != std::string::npos))
|
||||
// </FS:Ansariel>
|
||||
// {
|
||||
// return name.substr(0, name.rfind('_'));
|
||||
// }
|
||||
for(int i=0; i < LLModel::NUM_LODS; i++)
|
||||
{
|
||||
return name.substr(0, name.rfind('_'));
|
||||
}
|
||||
const auto& suffix = gSavedSettings.getString(LLModelPreview::sSuffixVarNames[i]);
|
||||
if (suffix.size() && name.find(suffix) != std::string::npos)
|
||||
{
|
||||
return name.substr(0, name.rfind('_'));
|
||||
}
|
||||
} // </FS:Beq>
|
||||
return name;
|
||||
}
|
||||
|
||||
|
|
@ -125,12 +142,24 @@ std::string getLodSuffix(S32 lod)
|
|||
std::string suffix;
|
||||
switch (lod)
|
||||
{
|
||||
case LLModel::LOD_IMPOSTOR: suffix = "_LOD0"; break;
|
||||
case LLModel::LOD_LOW: suffix = "_LOD1"; break;
|
||||
case LLModel::LOD_MEDIUM: suffix = "_LOD2"; break;
|
||||
case LLModel::LOD_PHYSICS: suffix = "_PHYS"; break;
|
||||
case LLModel::LOD_HIGH: break;
|
||||
// <FS:Beq> selectable suffixes
|
||||
// case LLModel::LOD_IMPOSTOR: suffix = "_LOD0"; break;
|
||||
// case LLModel::LOD_LOW: suffix = "_LOD1"; break;
|
||||
// case LLModel::LOD_MEDIUM: suffix = "_LOD2"; break;
|
||||
// case LLModel::LOD_PHYSICS: suffix = "_PHYS"; break;
|
||||
// case LLModel::LOD_HIGH: break;
|
||||
case LLModel::LOD_IMPOSTOR: suffix = gSavedSettings.getString("FSMeshLowestLodSuffix"); break;
|
||||
case LLModel::LOD_LOW: suffix = gSavedSettings.getString("FSMeshLowLodSuffix"); break;
|
||||
case LLModel::LOD_MEDIUM: suffix = gSavedSettings.getString("FSMeshMediumLodSuffix"); break;
|
||||
case LLModel::LOD_HIGH: suffix = gSavedSettings.getString("FSMeshHighLodSuffix"); break;
|
||||
case LLModel::LOD_PHYSICS: suffix = gSavedSettings.getString("FSMeshPhysicsSuffix"); break;
|
||||
default:break;
|
||||
}
|
||||
if(suffix.size())
|
||||
{
|
||||
suffix = "_" + suffix;
|
||||
}
|
||||
// </FS:Beq>
|
||||
return suffix;
|
||||
}
|
||||
|
||||
|
|
@ -461,8 +490,10 @@ void LLModelPreview::rebuildUploadData()
|
|||
// then the indexed method will be attempted below.
|
||||
|
||||
LLMatrix4 transform;
|
||||
|
||||
std::string name_to_match = instance.mLabel;
|
||||
// <FS:Beq> user defined LOD names
|
||||
// std::string name_to_match = instance.mLabel;
|
||||
std::string name_to_match = stripSuffix(instance.mLabel);
|
||||
// </FS:Beq>
|
||||
llassert(!name_to_match.empty());
|
||||
|
||||
int extensionLOD;
|
||||
|
|
@ -503,7 +534,10 @@ void LLModelPreview::rebuildUploadData()
|
|||
int searchLOD = (i > LLModel::LOD_HIGH) ? LLModel::LOD_HIGH : i;
|
||||
while ((searchLOD <= LLModel::LOD_HIGH) && !lod_model)
|
||||
{
|
||||
std::string name_to_match = instance.mLabel;
|
||||
// <FS:Beq> user defined LOD names
|
||||
// std::string name_to_match = instance.mLabel;
|
||||
std::string name_to_match = stripSuffix(instance.mLabel);
|
||||
// </FS:Beq>
|
||||
llassert(!name_to_match.empty());
|
||||
|
||||
std::string toAdd = getLodSuffix(searchLOD);
|
||||
|
|
@ -536,6 +570,13 @@ void LLModelPreview::rebuildUploadData()
|
|||
{
|
||||
std::ostringstream out;
|
||||
out << "Attempting to use model index " << idx;
|
||||
// <FS:Beq> better debug (watch for dangling single line else)
|
||||
if(i==4)
|
||||
{
|
||||
out << " for PHYS";
|
||||
}
|
||||
else
|
||||
// </FS:Beq>
|
||||
out << " for LOD" << i;
|
||||
out << " of " << instance.mLabel;
|
||||
LL_INFOS() << out.str() << LL_ENDL;
|
||||
|
|
@ -881,6 +922,12 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable
|
|||
std::map<std::string, std::string> joint_alias_map;
|
||||
getJointAliases(joint_alias_map);
|
||||
|
||||
std::array<std::string,LLModel::NUM_LODS> lod_suffix;
|
||||
for(int i=0; i < LLModel::NUM_LODS; i++)
|
||||
{
|
||||
lod_suffix[i] = gSavedSettings.getString(sSuffixVarNames[i]);
|
||||
}
|
||||
|
||||
mModelLoader = new LLDAELoader(
|
||||
filename,
|
||||
lod,
|
||||
|
|
@ -894,7 +941,10 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable
|
|||
joint_alias_map,
|
||||
LLSkinningUtil::getMaxJointCount(),
|
||||
gSavedSettings.getU32("ImporterModelLimit"),
|
||||
gSavedSettings.getBOOL("ImporterPreprocessDAE"));
|
||||
// <FS:Beq> allow LOD suffix configuration
|
||||
// gSavedSettings.getBOOL("ImporterPreprocessDAE"));
|
||||
gSavedSettings.getBOOL("ImporterPreprocessDAE"),
|
||||
lod_suffix);
|
||||
|
||||
if (force_disable_slm)
|
||||
{
|
||||
|
|
@ -1230,7 +1280,7 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
|||
// this actually works like "ImporterLegacyMatching" for this particular LOD
|
||||
for (U32 idx = 0; idx < mModel[loaded_lod].size() && idx < mBaseModel.size(); ++idx)
|
||||
{
|
||||
std::string name = mBaseModel[idx]->mLabel;
|
||||
std::string name = stripSuffix(mBaseModel[idx]->mLabel);
|
||||
std::string loaded_name = stripSuffix(mModel[loaded_lod][idx]->mLabel);
|
||||
|
||||
if (loaded_name != name)
|
||||
|
|
@ -1491,10 +1541,32 @@ F32 LLModelPreview::genMeshOptimizerPerModel(LLModel *base_model, LLModel *targe
|
|||
|
||||
if (result_error < 0)
|
||||
{
|
||||
LL_WARNS() << "Negative result error from meshoptimizer for model " << target_model->mLabel
|
||||
// <FS:Beq> Log these properly
|
||||
// LL_WARNS() << "Negative result error from meshoptimizer for model " << target_model->mLabel
|
||||
// << " target Indices: " << target_indices
|
||||
// << " new Indices: " << new_indices
|
||||
// << " original count: " << size_indices << LL_ENDL;
|
||||
std::ostringstream out;
|
||||
out << "Negative result error from meshoptimizer for model " << target_model->mLabel
|
||||
<< " target Indices: " << target_indices
|
||||
<< " new Indices: " << new_indices
|
||||
<< " original count: " << size_indices << LL_ENDL;
|
||||
<< " original count: " << size_indices ;
|
||||
LL_WARNS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mImporterDebug)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "Good result error from meshoptimizer for model " << target_model->mLabel
|
||||
<< " target Indices: " << target_indices
|
||||
<< " new Indices: " << new_indices
|
||||
<< " original count: " << size_indices << " (result error:" << result_error << ")";
|
||||
LL_DEBUGS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
if (new_indices < 3)
|
||||
|
|
@ -1558,14 +1630,26 @@ F32 LLModelPreview::genMeshOptimizerPerModel(LLModel *base_model, LLModel *targe
|
|||
// Normally this shouldn't happen since the whole point is to reduce amount of vertices
|
||||
// but it might happen if user tries to run optimization with too large triangle or error value
|
||||
// so fallback to 'per face' mode or verify requested limits and copy base model as is.
|
||||
LL_WARNS() << "Over triangle limit. Failed to optimize in 'per object' mode, falling back to per face variant for"
|
||||
<< " model " << target_model->mLabel
|
||||
<< " target Indices: " << target_indices
|
||||
<< " new Indices: " << new_indices
|
||||
<< " original count: " << size_indices
|
||||
<< " error treshold: " << error_threshold
|
||||
<< LL_ENDL;
|
||||
|
||||
// <FS:Beq> Log this properly
|
||||
// LL_WARNS() << "Over triangle limit. Failed to optimize in 'per object' mode, falling back to per face variant for"
|
||||
// << " model " << target_model->mLabel
|
||||
// << " target Indices: " << target_indices
|
||||
// << " new Indices: " << new_indices
|
||||
// << " original count: " << size_indices
|
||||
// << " error treshold: " << error_threshold
|
||||
// << LL_ENDL;
|
||||
if (mImporterDebug)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "Over triangle limit. Failed to optimize in 'per object' mode, falling back to per face variant for"
|
||||
<< " model " << target_model->mLabel
|
||||
<< " target Indices: " << target_indices
|
||||
<< " new Indices: " << new_indices
|
||||
<< " original count: " << size_indices
|
||||
<< " error treshold: " << error_threshold;
|
||||
LL_DEBUGS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
}
|
||||
// U16 vertices overflow shouldn't happen, but just in case
|
||||
new_indices = 0;
|
||||
valid_faces = 0;
|
||||
|
|
@ -1702,13 +1786,39 @@ F32 LLModelPreview::genMeshOptimizerPerFace(LLModel *base_model, LLModel *target
|
|||
|
||||
if (result_error < 0)
|
||||
{
|
||||
LL_WARNS() << "Negative result error from meshoptimizer for face " << face_idx
|
||||
// <FS:Beq> Log these properly
|
||||
// LL_WARNS() << "Negative result error from meshoptimizer for face " << face_idx
|
||||
// << " of model " << target_model->mLabel
|
||||
// << " target Indices: " << target_indices
|
||||
// << " new Indices: " << new_indices
|
||||
// << " original count: " << size_indices
|
||||
// << " error treshold: " << error_threshold
|
||||
// << LL_ENDL;
|
||||
std::ostringstream out;
|
||||
out << "Negative result error from meshoptimizer for face " << face_idx
|
||||
<< " of model " << target_model->mLabel
|
||||
<< " target Indices: " << target_indices
|
||||
<< " new Indices: " << new_indices
|
||||
<< " original count: " << size_indices
|
||||
<< " error treshold: " << error_threshold
|
||||
<< LL_ENDL;
|
||||
<< " error treshold: " << error_threshold;
|
||||
LL_WARNS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mImporterDebug)
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << "Good result error from meshoptimizer for face " << face_idx
|
||||
<< " of model " << target_model->mLabel
|
||||
<< " target Indices: " << target_indices
|
||||
<< " new Indices: " << new_indices
|
||||
<< " original count: " << size_indices
|
||||
<< " error treshold: " << error_threshold << " (result error:" << result_error << ")";
|
||||
LL_DEBUGS("MeshUpload") << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
LLVolumeFace &new_face = target_model->getVolumeFace(face_idx);
|
||||
|
|
@ -1723,12 +1833,20 @@ F32 LLModelPreview::genMeshOptimizerPerFace(LLModel *base_model, LLModel *target
|
|||
{
|
||||
// meshopt_optimizeSloppy() can optimize triangles away even if target_indices is > 2,
|
||||
// but optimize() isn't supposed to
|
||||
LL_INFOS() << "No indices generated by meshoptimizer for face " << face_idx
|
||||
// LL_INFOS() << "No indices generated by meshoptimizer for face " << face_idx
|
||||
// << " of model " << target_model->mLabel
|
||||
// << " target Indices: " << target_indices
|
||||
// << " original count: " << size_indices
|
||||
// << " error treshold: " << error_threshold
|
||||
// << LL_ENDL;
|
||||
std::ostringstream out;
|
||||
out << "No indices generated by meshoptimizer for face " << face_idx
|
||||
<< " of model " << target_model->mLabel
|
||||
<< " target Indices: " << target_indices
|
||||
<< " original count: " << size_indices
|
||||
<< " error treshold: " << error_threshold
|
||||
<< LL_ENDL;
|
||||
<< " error treshold: " << error_threshold;
|
||||
LL_INFOS("MeshUpload") << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
}
|
||||
|
||||
// Face got optimized away
|
||||
|
|
@ -1764,14 +1882,19 @@ F32 LLModelPreview::genMeshOptimizerPerFace(LLModel *base_model, LLModel *target
|
|||
|
||||
void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 decimation, bool enforce_tri_limit)
|
||||
{
|
||||
LL_INFOS() << "Generating lod " << which_lod << " using meshoptimizer" << LL_ENDL;
|
||||
// <FS:Beq> Log things properly
|
||||
// LL_INFOS() << "Generating lod " << which_lod << " using meshoptimizer" << LL_ENDL;
|
||||
std::ostringstream out;
|
||||
out << "Generating lod " << which_lod << " using meshoptimizer";
|
||||
LL_INFOS("MeshUpload") << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, false);
|
||||
// Allow LoD from -1 to LLModel::LOD_PHYSICS
|
||||
if (which_lod < -1 || which_lod > LLModel::NUM_LODS - 1)
|
||||
{
|
||||
std::ostringstream out;
|
||||
// std::ostringstream out; // <FS:Beq/> already instantiated
|
||||
out << "Invalid level of detail: " << which_lod;
|
||||
LL_WARNS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, false);
|
||||
LLFloaterModelPreview::addStringToLog(out, true); // <FS:Beq/> if you don't flash the log tab on error when do you?
|
||||
assert(lod >= -1 && lod < LLModel::NUM_LODS);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1881,7 +2004,15 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
|
|||
volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE);
|
||||
mModel[lod][mdl_idx] = new LLModel(volume_params, 0.f);
|
||||
|
||||
std::string name = base->mLabel + getLodSuffix(lod);
|
||||
// <FS:Beq> Support altenate LOD naming conventions
|
||||
// std::string name = base->mLabel + getLodSuffix(lod);
|
||||
std::string name = stripSuffix(base->mLabel);
|
||||
std::string suffix = getLodSuffix(lod);
|
||||
if ( suffix.size() > 0 )
|
||||
{
|
||||
name += suffix;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
mModel[lod][mdl_idx]->mLabel = name;
|
||||
mModel[lod][mdl_idx]->mSubmodelID = base->mSubmodelID;
|
||||
|
|
@ -1984,7 +2115,12 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
|
|||
const U32 too_many_vertices = 27000;
|
||||
if (size_vertices > too_many_vertices)
|
||||
{
|
||||
LL_WARNS() << "Sloppy optimization method failed for a complex model " << target_model->getName() << LL_ENDL;
|
||||
// <FS:Beq> log this properly.
|
||||
// LL_WARNS() << "Sloppy optimization method failed for a complex model " << target_model->getName() << LL_ENDL;
|
||||
out << "Sloppy optimization method failed for a complex model " << target_model->getName();
|
||||
LL_WARNS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
// </FS:Beq>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2018,26 +2154,46 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
|
|||
// Fallback to normal method
|
||||
precise_ratio = genMeshOptimizerPerModel(base, target_model, indices_decimator, lod_error_threshold, false);
|
||||
}
|
||||
|
||||
LL_INFOS() << "Model " << target_model->getName()
|
||||
// <FS:Beq> Log stuff properly
|
||||
// LL_INFOS() << "Model " << target_model->getName()
|
||||
// << " lod " << which_lod
|
||||
// << " resulting ratio " << precise_ratio
|
||||
// << " simplified using per model method." << LL_ENDL;
|
||||
out << "Model " << target_model->getName()
|
||||
<< " lod " << which_lod
|
||||
<< " resulting ratio " << precise_ratio
|
||||
<< " simplified using per model method." << LL_ENDL;
|
||||
<< " simplified using per model method.";
|
||||
LL_INFOS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Model " << target_model->getName()
|
||||
// <FS:Beq> Log stuff properly
|
||||
// LL_INFOS() << "Model " << target_model->getName()
|
||||
// << " lod " << which_lod
|
||||
// << " resulting ratio " << sloppy_ratio
|
||||
// << " sloppily simplified using per model method." << LL_ENDL;
|
||||
out << "Model " << target_model->getName()
|
||||
<< " lod " << which_lod
|
||||
<< " resulting ratio " << sloppy_ratio
|
||||
<< " sloppily simplified using per model method." << LL_ENDL;
|
||||
<< " sloppily simplified using per model method.";
|
||||
LL_INFOS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Model " << target_model->getName()
|
||||
<< " lod " << which_lod
|
||||
<< " resulting ratio " << precise_ratio
|
||||
<< " simplified using per model method." << LL_ENDL;
|
||||
// <FS:Beq> Log stuff properly
|
||||
// LL_INFOS() << "Model " << target_model->getName()
|
||||
// << " lod " << which_lod
|
||||
// << " resulting ratio " << precise_ratio
|
||||
// << " simplified using per model method." << LL_ENDL;
|
||||
out << "Bad MeshOptimisation result for Model " << target_model->getName()
|
||||
<< " lod " << which_lod
|
||||
<< " resulting ratio " << precise_ratio
|
||||
<< " simplified using per model method.";
|
||||
LL_WARNS() << out.str() << LL_ENDL;
|
||||
LLFloaterModelPreview::addStringToLog(out, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3167,7 +3323,7 @@ void LLModelPreview::lookupLODModelFiles(S32 lod)
|
|||
// Note: we cannot use gDirUtilp here because the getExtension forces a tolower which would then break uppercase extensions on Linux/Mac
|
||||
std::size_t offset = lod_filename.find_last_of('.');
|
||||
std::string ext = (offset == std::string::npos || offset == 0) ? "" : lod_filename.substr(offset+1);
|
||||
lod_filename = gDirUtilp->getDirName(lod_filename) + gDirUtilp->getDirDelimiter() + gDirUtilp->getBaseFileName(lod_filename, true) + getLodSuffix(next_lod) + "." + ext;
|
||||
lod_filename = gDirUtilp->getDirName(lod_filename) + gDirUtilp->getDirDelimiter() + stripSuffix(gDirUtilp->getBaseFileName(lod_filename, true)) + getLodSuffix(next_lod) + "." + ext;
|
||||
std::ostringstream out;
|
||||
out << "Looking for file: " << lod_filename << " for LOD " << next_lod;
|
||||
LL_DEBUGS("MeshUpload") << out.str() << LL_ENDL;
|
||||
|
|
@ -4212,7 +4368,7 @@ bool LLModelPreview::lodQueryCallback()
|
|||
{
|
||||
S32 lod = preview->mLodsQuery.back();
|
||||
preview->mLodsQuery.pop_back();
|
||||
preview->genMeshOptimizerLODs(lod, MESH_OPTIMIZER_AUTO);
|
||||
preview->genMeshOptimizerLODs(lod, MESH_OPTIMIZER_AUTO, 3, false);
|
||||
|
||||
if (preview->mLookUpLodFiles && (lod == LLModel::LOD_HIGH))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
|
|||
typedef boost::signals2::signal<void(bool)> model_updated_signal_t;
|
||||
|
||||
public:
|
||||
static const std::array<std::string,5> sSuffixVarNames; // <FS:Beq/> mesh loader suffix configuration
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
|
|
|||
|
|
@ -377,7 +377,7 @@ LLPanelMainInventory::~LLPanelMainInventory( void )
|
|||
LLSD filterState;
|
||||
LLInventoryPanel::InventoryState p;
|
||||
all_items_panel->getFilter().toParams(p.filter);
|
||||
//all_items_panel->getRootViewModel().getSorter().toParams(p.sort); // <FS:Ansariel> Causes parser error, also unused (uses debug setting instead)
|
||||
all_items_panel->getRootViewModel().getSorter().toParams(p.sort);
|
||||
if (p.validateBlock(false))
|
||||
{
|
||||
LLParamSDParser().writeSD(filterState, p);
|
||||
|
|
@ -391,7 +391,7 @@ LLPanelMainInventory::~LLPanelMainInventory( void )
|
|||
LLSD filterState;
|
||||
LLInventoryPanel::InventoryState p;
|
||||
panel->getFilter().toParams(p.filter);
|
||||
//panel->getRootViewModel().getSorter().toParams(p.sort); // <FS:Ansariel> Causes parser error, also unused (uses debug setting instead)
|
||||
panel->getRootViewModel().getSorter().toParams(p.sort);
|
||||
if (p.validateBlock(false))
|
||||
{
|
||||
LLParamSDParser().writeSD(filterState, p);
|
||||
|
|
|
|||
|
|
@ -654,11 +654,13 @@ F32 LLSpatialPartition::calcDistance(LLSpatialGroup* group, LLCamera& camera)
|
|||
dist = eye.getLength3().getF32();
|
||||
}
|
||||
|
||||
#if !LL_RELEASE
|
||||
LL_DEBUGS("RiggedBox") << "calcDistance, group " << group << " camera " << origin << " obj bounds "
|
||||
<< group->mObjectBounds[0] << ", " << group->mObjectBounds[1]
|
||||
<< " dist " << dist << " radius " << group->mRadius << LL_ENDL;
|
||||
#endif
|
||||
// <FS:Beq> This debug has measurable imapcty even when discarded
|
||||
//#if !LL_RELEASE
|
||||
// LL_DEBUGS("RiggedBox") << "calcDistance, group " << group << " camera " << origin << " obj bounds "
|
||||
// << group->mObjectBounds[0] << ", " << group->mObjectBounds[1]
|
||||
// << " dist " << dist << " radius " << group->mRadius << LL_ENDL;
|
||||
//#endif
|
||||
// </FS:Beq>
|
||||
|
||||
if (dist < 16.f)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -560,6 +560,7 @@ void LLViewerJoystick::terminate()
|
|||
// -----------------------------------------------------------------------------
|
||||
void LLViewerJoystick::updateStatus()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT;
|
||||
#if LIB_NDOF
|
||||
|
||||
ndof_update(mNdofDev);
|
||||
|
|
@ -752,6 +753,7 @@ void LLViewerJoystick::resetDeltas(S32 axis[])
|
|||
// -----------------------------------------------------------------------------
|
||||
void LLViewerJoystick::moveObjects(bool reset)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT;
|
||||
static bool toggle_send_to_sim = false;
|
||||
|
||||
if (!gFocusMgr.getAppHasFocus() || mDriverState != JDS_INITIALIZED
|
||||
|
|
@ -876,6 +878,7 @@ void LLViewerJoystick::moveObjects(bool reset)
|
|||
// -----------------------------------------------------------------------------
|
||||
void LLViewerJoystick::moveAvatar(bool reset)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT;
|
||||
if (!gFocusMgr.getAppHasFocus() || mDriverState != JDS_INITIALIZED
|
||||
|| !gSavedSettings.getBOOL("JoystickEnabled") || !gSavedSettings.getBOOL("JoystickAvatarEnabled"))
|
||||
{
|
||||
|
|
@ -1119,6 +1122,7 @@ void LLViewerJoystick::moveAvatar(bool reset)
|
|||
// -----------------------------------------------------------------------------
|
||||
void LLViewerJoystick::moveFlycam(bool reset)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT;
|
||||
static LLQuaternion sFlycamRotation;
|
||||
static LLVector3 sFlycamPosition;
|
||||
static F32 sFlycamZoom;
|
||||
|
|
@ -1283,6 +1287,7 @@ void LLViewerJoystick::moveFlycam(bool reset)
|
|||
// -----------------------------------------------------------------------------
|
||||
bool LLViewerJoystick::toggleFlycam()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT;
|
||||
if (!gSavedSettings.getBOOL("JoystickEnabled") || !gSavedSettings.getBOOL("JoystickFlycamEnabled"))
|
||||
{
|
||||
mOverrideCamera = false;
|
||||
|
|
@ -1319,6 +1324,7 @@ bool LLViewerJoystick::toggleFlycam()
|
|||
|
||||
void LLViewerJoystick::scanJoystick()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_INPUT;
|
||||
if (mDriverState != JDS_INITIALIZED || !gSavedSettings.getBOOL("JoystickEnabled"))
|
||||
{
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -9783,7 +9783,7 @@ class FSProfilerToggle : public view_listener_t
|
|||
{
|
||||
BOOL checked = gSavedSettings.getBOOL( "ProfilingActive" );
|
||||
gSavedSettings.setBOOL( "ProfilingActive", !checked );
|
||||
gProfilerEnabled = !checked;
|
||||
LLProfiler::active = !checked;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2106,7 +2106,7 @@ LLViewerWindow::LLViewerWindow(const Params& p)
|
|||
}
|
||||
LLVertexBuffer::initClass(gSavedSettings.getBOOL("RenderVBOEnable"), gSavedSettings.getBOOL("RenderVBOMappingDisable"));
|
||||
LL_INFOS("RenderInit") << "LLVertexBuffer initialization done." << LL_ENDL ;
|
||||
gGL.init() ;
|
||||
gGL.init(true);
|
||||
// <FS:Ansariel> Exodus vignette
|
||||
exoPostProcess::getInstance(); // Make sure we've created one of these
|
||||
|
||||
|
|
|
|||
|
|
@ -3005,6 +3005,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
|
|||
if (detailed_update)
|
||||
{
|
||||
U32 draw_order = 0;
|
||||
S32 attachment_selected = LLSelectMgr::getInstance()->getSelection()->getObjectCount() && LLSelectMgr::getInstance()->getSelection()->isAttachment();
|
||||
for (attachment_map_t::iterator iter = mAttachmentPoints.begin();
|
||||
iter != mAttachmentPoints.end();
|
||||
++iter)
|
||||
|
|
@ -3051,7 +3052,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
|
|||
}
|
||||
|
||||
// if selecting any attachments, update all of them as non-damped
|
||||
if (LLSelectMgr::getInstance()->getSelection()->getObjectCount() && LLSelectMgr::getInstance()->getSelection()->isAttachment())
|
||||
if (attachment_selected)
|
||||
{
|
||||
gPipeline.updateMoveNormalAsync(attached_object->mDrawable);
|
||||
}
|
||||
|
|
@ -12096,7 +12097,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
|
|||
// place in the code. For now, this is a good spot as the complexity calculation
|
||||
// gets updated when rigging data arrives, so we can reliably identify rigged
|
||||
// attachments where the skinning information took a while to load.
|
||||
if (attached_object->isHUDAttachment() && attached_object->mCheckRigOnHUD)
|
||||
if (attached_object->isHUDAttachment() && attached_object->mCheckRigOnHUD && !attached_object->isTempAttachment())
|
||||
{
|
||||
// check if the root object is rigged
|
||||
bool is_rigged = attached_object->isRiggedMesh();
|
||||
|
|
|
|||
|
|
@ -5296,15 +5296,26 @@ LLControlAVBridge::LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regi
|
|||
|
||||
bool can_batch_texture(LLFace* facep)
|
||||
{
|
||||
if (facep->getTextureEntry()->getBumpmap())
|
||||
{ //bump maps aren't worked into texture batching yet
|
||||
return false;
|
||||
}
|
||||
// <FS:Beq> fix batching when materials disabled and alpha none/masked.
|
||||
// if (facep->getTextureEntry()->getBumpmap())
|
||||
// { //bump maps aren't worked into texture batching yet
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (facep->getTextureEntry()->getMaterialParams().notNull())
|
||||
{ //materials don't work with texture batching yet
|
||||
return false;
|
||||
// if (facep->getTextureEntry()->getMaterialParams().notNull())
|
||||
// { //materials don't work with texture batching yet
|
||||
// return false;
|
||||
// }
|
||||
const auto te = facep->getTextureEntry();
|
||||
if (LLPipeline::sRenderDeferred && te )
|
||||
{
|
||||
auto mat = te->getMaterialParams();
|
||||
if(mat && (mat->getNormalID() != LLUUID::null || mat->getSpecularID() != LLUUID::null))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
if (facep->getTexture() && facep->getTexture()->getPrimaryFormat() == GL_ALPHA)
|
||||
{ //can't batch invisiprims
|
||||
|
|
@ -6584,6 +6595,14 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
|
|||
LLFace* facep = *face_iter;
|
||||
LLViewerTexture* tex = facep->getTexture();
|
||||
const LLTextureEntry* te = facep->getTextureEntry();
|
||||
// <FS:Beq> Don't batch fully transparent faces
|
||||
if (te && ( te->getAlpha() == 0.f ) && ( te->getGlow() == 0.0 ) && !LLDrawPoolAlpha::sShowDebugAlpha)
|
||||
{
|
||||
facep->setSize(0,0);
|
||||
++face_iter;
|
||||
continue;
|
||||
}
|
||||
// </FS:Beq>
|
||||
LLMaterialPtr mat = te->getMaterialParams();
|
||||
LLMaterialID matId = te->getMaterialID();
|
||||
|
||||
|
|
|
|||
|
|
@ -7458,11 +7458,9 @@ void LLPipeline::doResetVertexBuffers(bool forced)
|
|||
mResetVertexBuffers = false;
|
||||
|
||||
mCubeVB = NULL;
|
||||
|
||||
mDeferredVB = NULL;
|
||||
mDeferredVB = NULL;
|
||||
mAuxiliaryVB = NULL;
|
||||
exoPostProcess::instance().destroyVB(); // Will be re-created via updateRenderDeferred()
|
||||
gGL.destroyVB();
|
||||
|
||||
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
|
||||
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
|
||||
|
|
@ -7496,10 +7494,11 @@ void LLPipeline::doResetVertexBuffers(bool forced)
|
|||
LLPathingLib::getInstance()->cleanupVBOManager();
|
||||
}
|
||||
LLVOPartGroup::destroyGL();
|
||||
gGL.resetVertexBuffer();
|
||||
|
||||
SUBSYSTEM_CLEANUP(LLVertexBuffer);
|
||||
|
||||
if (LLVertexBuffer::sGLCount > 0)
|
||||
if (LLVertexBuffer::sGLCount != 0)
|
||||
{
|
||||
LL_WARNS() << "VBO wipe failed -- " << LLVertexBuffer::sGLCount << " buffers remaining." << LL_ENDL;
|
||||
}
|
||||
|
|
@ -7523,15 +7522,18 @@ void LLPipeline::doResetVertexBuffers(bool forced)
|
|||
LLPipeline::sTextureBindTest = gSavedSettings.getBOOL("RenderDebugTextureBind");
|
||||
|
||||
LLVertexBuffer::initClass(LLVertexBuffer::sEnableVBOs, LLVertexBuffer::sDisableVBOMapping);
|
||||
gGL.initVertexBuffer();
|
||||
|
||||
// <FS:Ansariel> Reset VB during TP
|
||||
//mDeferredVB = new LLVertexBuffer(DEFERRED_VB_MASK, 0);
|
||||
//mDeferredVB->allocateBuffer(8, 0, true);
|
||||
initDeferredVB();
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLVOPartGroup::restoreGL();
|
||||
|
||||
// <FS:Ansariel> Reset VB during TP
|
||||
updateRenderDeferred(); // Moved further down because of exoPostProcess creating a new VB
|
||||
|
||||
gGL.initVB();
|
||||
|
||||
initDeferredVB();
|
||||
initAuxiliaryVB();
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater name="Load Pref Preset" title="Voreinstellung laden">
|
||||
<floater name="load_pref_preset" title="Voreinstellung laden">
|
||||
<string name="title_graphic">
|
||||
Grafikvoreinstellung laden
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -393,10 +393,40 @@
|
|||
</text>
|
||||
<check_box label="Gewichte automatisch aktivieren" tool_tip="Automatisch die Gewichte für Netze mit Rigging-Informationen aktivieren" name="mesh_preview_auto_weights"/>
|
||||
<check_box label="Automatische Vorschau für Gewichte" tool_tip="Zeigt automatisch die Gewichte für Netze mit Rigging-Informationen in der Vorschau" name="mesh_preview_auto_show_weights"/>
|
||||
<text name="mesh_preview_ud_preset_label" width="220">
|
||||
Benutzerdefinierte Physik-Einstellungen:
|
||||
<text name="lod_suffix_label">
|
||||
LOD-Suffixe:
|
||||
</text>
|
||||
<combo_box name="lod_suffix_combo" tool_tip="Voreinstellung auswählen oder eigene definieren">
|
||||
<combo_item name="choose_one">Standard auswählen oder manuell bearbeiten...</combo_item>
|
||||
<combo_item name="suff_sl">SL-Standard (Niedrigste=LOD0)</combo_item>
|
||||
<combo_item name="suff_unity">Spiele-Engine-Standard (Niedrigste=LOD3)</combo_item>
|
||||
<combo_item name="suff_descriptive">Words (high,med...)</combo_item>
|
||||
</combo_box>
|
||||
<text name="suf_lowest_lab">
|
||||
Niedrigste:
|
||||
</text>
|
||||
<line_editor name="suf_lowest" tool_tip="Suffix, welches das niedrigste LOD im Dateinamen oder eines Modells innerhalb einer Datei identifiziert." />
|
||||
<text name="suf_low_lab">
|
||||
Niedrid:
|
||||
</text>
|
||||
<line_editor name="suf_low" tool_tip="Suffix, welches das niedrige LOD im Dateinamen oder eines Modells innerhalb einer Datei identifiziert." />
|
||||
<text name="suf_medium_lab" width="45">
|
||||
Medium:
|
||||
</text>
|
||||
<line_editor name="suf_medium" tool_tip="Suffix, welches das mittlere LOD im Dateinamen oder eines Modells innerhalb einer Datei identifiziert." />
|
||||
<text name="suf_high_lab">
|
||||
Hoch:
|
||||
</text>
|
||||
<line_editor name="suf_high" tool_tip="Suffix, welches das hohe LOD im Dateinamen oder eines Modells innerhalb einer Datei identifiziert." />
|
||||
<text name="suf_physics_lab">
|
||||
Physik:
|
||||
</text>
|
||||
<line_editor name="suf_physics" tool_tip="Suffix, welches die Physik im Dateinamen oder eines Modells innerhalb einer Datei identifiziert." />
|
||||
<text name="mesh_preview_ud_preset_label" width="190">
|
||||
Benutzerdef. Physik-Einstellungen:
|
||||
</text>
|
||||
<line_editor name="ud_physics" tool_tip="Dateipfad zu einer einfachen Collada Mesh-Definition, die für Physik verwendet wird." />
|
||||
<button label="Durchsuchen" label_selected="Durchsuchen" name="set_user_def_phys"/>
|
||||
<text name="mesh_preview_colors_label">
|
||||
Farben für Modell-Upload:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -7048,6 +7048,9 @@ Ihre aktuelle Position: [AVATAR_POS]
|
|||
<string name="fs_preprocessor_caching_err">
|
||||
Fehler beim Cachen der eingebundenen Datei „[FILENAME]“.
|
||||
</string>
|
||||
<string name="fs_preprocessor_truncated">
|
||||
Achtung: Präprozessor-Ausgabe wurde aufgrund exzessiver Textlänge gekürzt. Das Skript wird wahrscheinlich nicht funktionieren.
|
||||
</string>
|
||||
|
||||
<string name="animation_explorer_seconds_ago">
|
||||
Vor [SECONDS] Sekunden
|
||||
|
|
|
|||
|
|
@ -1471,30 +1471,187 @@
|
|||
tool_tip="Automatically show weights in preview for meshes with rigging info"
|
||||
name="mesh_preview_auto_show_weights"/>
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="24"
|
||||
height="12"
|
||||
name="lod_suffix_label"
|
||||
top_pad="5"
|
||||
width="110">
|
||||
LOD Suffixes:
|
||||
</text>
|
||||
<combo_box
|
||||
follows="left|top"
|
||||
height="18"
|
||||
left_pad="0"
|
||||
name="lod_suffix_combo"
|
||||
width="250"
|
||||
top_delta="0"
|
||||
tool_tip="Pick a preset or set your own">
|
||||
<combo_item name="choose_one">Choose a standard or manually edit...</combo_item>
|
||||
<combo_item name="suff_sl">SL Standard (Lowest=LOD0)</combo_item>
|
||||
<combo_item name="suff_unity">Games Engine Standard (Lowest=LOD3)</combo_item>
|
||||
<combo_item name="suff_descriptive">Words (high,med...)</combo_item>
|
||||
</combo_box>
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="24"
|
||||
height="12"
|
||||
name="mesh_preview_ud_preset_label"
|
||||
name="suf_lowest_lab"
|
||||
top_pad="10"
|
||||
width="200">
|
||||
Physics User Defined Preset:
|
||||
halign="right"
|
||||
width="60">
|
||||
Lowest:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSPhysicsPresetUser1"
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
top_delta="-7"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_length_chars="4096"
|
||||
name="ud_physics"
|
||||
tool_tip="Full system path to a simple Collada mesh definition to be used for physics."
|
||||
width="270" />
|
||||
<line_editor
|
||||
control_name="FSMeshLowestLodSuffix"
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
top_delta="-5"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_length_chars="10"
|
||||
name="suf_lowest"
|
||||
tool_tip="The Suffix used to identify the Lowest LOD file on disk and models within a file."
|
||||
width="60" />
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
halign="right"
|
||||
height="12"
|
||||
name="suf_low_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
Low:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshLowLodSuffix"
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
top_delta="-5"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_length_chars="10"
|
||||
name="suf_low"
|
||||
tool_tip="The Suffix used to identify the Low LOD file on disk and models within a file."
|
||||
width="60" />
|
||||
<text
|
||||
follows="left|top"
|
||||
top_delta="5"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
height="12"
|
||||
name="suf_medium_lab"
|
||||
halign="right"
|
||||
width="40">
|
||||
Medium:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshMediumLodSuffix"
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
top_delta="-5"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_length_chars="10"
|
||||
name="suf_medium"
|
||||
tool_tip="The Suffix used to identify the Medium LOD file on disk and models within a file."
|
||||
width="60" />
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
height="12"
|
||||
halign="right"
|
||||
name="suf_high_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
High:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshHighLodSuffix"
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
top_delta="-5"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_length_chars="10"
|
||||
name="suf_high"
|
||||
tool_tip="The Suffix used to identify the High LOD file on disk and models within a file."
|
||||
width="60" />
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
height="12"
|
||||
name="suf_physics_lab"
|
||||
top_delta="5"
|
||||
width="40">
|
||||
Physics:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSMeshPhysicsSuffix"
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
top_delta="-5"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_length_chars="10"
|
||||
name="suf_physics"
|
||||
tool_tip="The Suffix used to identify the Physics file on disk and models within a file."
|
||||
width="60" />
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="24"
|
||||
height="12"
|
||||
name="mesh_preview_ud_preset_label"
|
||||
top_pad="15"
|
||||
width="170">
|
||||
Physics User Defined Preset:
|
||||
</text>
|
||||
<line_editor
|
||||
control_name="FSPhysicsPresetUser1"
|
||||
border_style="line"
|
||||
border_thickness="1"
|
||||
follows="left|top"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
top_delta="-5"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
max_length_chars="4096"
|
||||
name="ud_physics"
|
||||
tool_tip="Full system path to a simple Collada mesh definition to be used for physics."
|
||||
width="270" />
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Browse"
|
||||
label_selected="Browse"
|
||||
left_pad="5"
|
||||
name="set_user_def_phys"
|
||||
top_delta="0"
|
||||
width="100">
|
||||
</button>
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
|
|
@ -1522,7 +1679,7 @@
|
|||
control_name="MeshPreviewCanvasColor"
|
||||
follows="top|left"
|
||||
left_pad="14"
|
||||
height="64"
|
||||
height="48"
|
||||
width="120"
|
||||
top_delta="-12"
|
||||
can_apply_immediately="true"
|
||||
|
|
@ -1533,7 +1690,7 @@
|
|||
control_name="MeshPreviewEdgeColor"
|
||||
follows="top|left"
|
||||
left_pad="24"
|
||||
height="64"
|
||||
height="48"
|
||||
width="120"
|
||||
can_apply_immediately="true"
|
||||
label="Model Edge"
|
||||
|
|
@ -1543,7 +1700,7 @@
|
|||
control_name="PreviewAmbientColor"
|
||||
follows="top|left"
|
||||
left_pad="24"
|
||||
height="64"
|
||||
height="48"
|
||||
width="120"
|
||||
can_apply_immediately="true"
|
||||
label="Ambient Light"
|
||||
|
|
@ -1559,7 +1716,7 @@
|
|||
valign="center"
|
||||
mouse_opaque="false"
|
||||
name="physics_settings_label"
|
||||
top_pad="20"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
Physics:
|
||||
</text>
|
||||
|
|
@ -1567,7 +1724,7 @@
|
|||
control_name="MeshPreviewPhysicsEdgeColor"
|
||||
follows="top|left"
|
||||
left_pad="14"
|
||||
height="64"
|
||||
height="48"
|
||||
can_apply_immediately="true"
|
||||
width="120"
|
||||
top_delta="-12"
|
||||
|
|
@ -1577,8 +1734,8 @@
|
|||
<color_swatch
|
||||
control_name="MeshPreviewPhysicsFillColor"
|
||||
follows="top|left"
|
||||
left_pad="20"
|
||||
height="64"
|
||||
left_pad="24"
|
||||
height="48"
|
||||
width="120"
|
||||
can_apply_immediately="true"
|
||||
label="Physics Fill"
|
||||
|
|
@ -1594,7 +1751,7 @@
|
|||
valign="center"
|
||||
mouse_opaque="false"
|
||||
name="physics_issues_setting_label"
|
||||
top_pad="24"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
Physics Issues:
|
||||
</text>
|
||||
|
|
@ -1602,7 +1759,7 @@
|
|||
control_name="MeshPreviewDegenerateEdgeColor"
|
||||
follows="top|left"
|
||||
left_pad="14"
|
||||
height="64"
|
||||
height="48"
|
||||
width="120"
|
||||
top_delta="-12"
|
||||
can_apply_immediately="true"
|
||||
|
|
@ -1613,7 +1770,7 @@
|
|||
control_name="MeshPreviewDegenerateFillColor"
|
||||
follows="top|left"
|
||||
left_pad="24"
|
||||
height="64"
|
||||
height="48"
|
||||
width="120"
|
||||
can_apply_immediately="true"
|
||||
label="Bad Triangle Fill"
|
||||
|
|
|
|||
|
|
@ -374,7 +374,7 @@
|
|||
width="255">
|
||||
<button.commit_callback
|
||||
function="World.EnvSettings"
|
||||
parameter="default"/>
|
||||
parameter="region"/>
|
||||
</button>
|
||||
</panel>
|
||||
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@
|
|||
layout="topleft"
|
||||
left="5"
|
||||
top_pad="10"
|
||||
width="100">
|
||||
width="105">
|
||||
Density Multiplier:
|
||||
</text>
|
||||
<slider
|
||||
|
|
@ -268,7 +268,7 @@
|
|||
layout="topleft"
|
||||
left="5"
|
||||
top_pad="15"
|
||||
width="100">
|
||||
width="105">
|
||||
Distance Multiplier:
|
||||
</text>
|
||||
<slider
|
||||
|
|
@ -292,7 +292,7 @@
|
|||
layout="topleft"
|
||||
left="5"
|
||||
top_pad="15"
|
||||
width="100">
|
||||
width="105">
|
||||
Maximum Altitude:
|
||||
</text>
|
||||
<slider
|
||||
|
|
@ -316,7 +316,7 @@
|
|||
layout="topleft"
|
||||
left="5"
|
||||
top_pad="15"
|
||||
width="100">
|
||||
width="105">
|
||||
Scene Gamma:
|
||||
</text>
|
||||
<slider
|
||||
|
|
@ -330,7 +330,7 @@
|
|||
max_val="20"
|
||||
name="scene_gamma"
|
||||
top_delta="0"
|
||||
width="207"
|
||||
width="219"
|
||||
can_edit_text="true"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
|
|
|||
|
|
@ -3159,6 +3159,7 @@ Your current position: [AVATAR_POS]
|
|||
<string name="fs_preprocessor_cache_completed">Caching completed for '[FILENAME]'</string>
|
||||
<string name="fs_preprocessor_cache_unsafe">Error: script named '[FILENAME]' isn't safe to copy to the filesystem. This include will fail.</string>
|
||||
<string name="fs_preprocessor_caching_err">Error caching included file '[FILENAME]'</string>
|
||||
<string name="fs_preprocessor_truncated">Warning: Preprocessor output truncated due to excessive script text size. This script will most likely not work.</string>
|
||||
<!-- </FS:Cron> -->
|
||||
|
||||
<!-- Animation Explorer -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater name="Load Pref Preset" title="CARGAR VALOR PREDEFINIDO PREF">
|
||||
<floater name="load_pref_preset" title="CARGAR VALOR PREDEFINIDO PREF">
|
||||
<string name="title_graphic">
|
||||
Cargar valor predefinido gráfico
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater name="Save Pref Preset" title="GUARDAR VALOR PREDEFINIDO PREF">
|
||||
<string name="title_graphic">
|
||||
Guardar valor predefinido gráfico
|
||||
</string>
|
||||
<string name="title_camera">
|
||||
Guardar valor predefinido de cámara
|
||||
</string>
|
||||
<floater name="save_pref_preset" title="GUARDAR VALOR PREDEFINIDO PREF">
|
||||
<text name="Preset">
|
||||
Escribe el nombre del valor predefinido o elige un valor predefinido ya existente.
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,10 @@
|
|||
<text name="label_show">
|
||||
Afficher :
|
||||
</text>
|
||||
<check_box label="Btes de délimitation pour les lumières" name="lights_bounding_boxes"/>
|
||||
<check_box label="Balises" name="beacons"/>
|
||||
<check_box label="Surbrillances" name="highlights"/>
|
||||
<check_box label="Infos sur les balises dans la fenêtre" name="FSRenderBeaconText"/>
|
||||
<text name="beacon_width_label" tool_tip="Largeur de la balise">
|
||||
Largeur :
|
||||
</text>
|
||||
|
|
@ -18,6 +20,9 @@
|
|||
<check_box label="Sources sonores" name="sounds"/>
|
||||
<check_box label="Sources des particules" name="particles"/>
|
||||
<check_box label="Sources des médias" name="moapbeacon"/>
|
||||
<text name="label_objects">
|
||||
Montrer la direction :
|
||||
</text>
|
||||
<check_box label="Soleil" name="sun"/>
|
||||
<check_box label="Lune" name="moon"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -3,64 +3,76 @@
|
|||
<floater.string name="buy_currency">
|
||||
Achetez [LINDENS] L$ pour environ [LOCALAMOUNT]
|
||||
</floater.string>
|
||||
<text left="5" name="info_need_more" right="-5">
|
||||
Plus de L$ sont requis
|
||||
</text>
|
||||
<text name="contacting">
|
||||
En train de contacter
|
||||
le Lindex...
|
||||
</text>
|
||||
<text left="5" name="info_buying">
|
||||
Acheter des L$
|
||||
</text>
|
||||
<text name="balance_label">
|
||||
J'ai
|
||||
</text>
|
||||
<text name="balance_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
<text name="currency_action">
|
||||
Je veux acheter
|
||||
</text>
|
||||
<text left="308" name="currency_label">
|
||||
L$
|
||||
</text>
|
||||
<line_editor label="L$" left_pad="-85" name="currency_amt" width="65">
|
||||
1234
|
||||
</line_editor>
|
||||
<text name="buying_label">
|
||||
Pour
|
||||
</text>
|
||||
<text left_delta="68" name="currency_est" width="138">
|
||||
environ [LOCALAMOUNT]
|
||||
</text>
|
||||
<text name="getting_data" width="138">
|
||||
Estimation en cours...
|
||||
</text>
|
||||
<text name="buy_action">
|
||||
[ACTION]
|
||||
</text>
|
||||
<text name="total_label">
|
||||
Mon nouveau solde sera de
|
||||
</text>
|
||||
<text name="total_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
<text name="currency_links">
|
||||
[http://www.secondlife.com/my/account/payment_method_management.php mode de paiement] | [http://www.secondlife.com/my/account/currency.php devise]
|
||||
</text>
|
||||
<text name="exchange_rate_note">
|
||||
Saisissez à nouveau le montant pour voir le taux de change actuel.
|
||||
</text>
|
||||
<text name="purchase_warning_repurchase">
|
||||
Confirmer cet achat n'achète que des L$, pas l'objet.
|
||||
</text>
|
||||
<text bottom_delta="16" name="purchase_warning_notenough">
|
||||
Vous n'achetez pas assez de L$. Veuillez augmenter le montant.
|
||||
</text>
|
||||
<button label="Acheter" name="buy_btn"/>
|
||||
<button label="Annuler" name="cancel_btn"/>
|
||||
<floater.string name="info_cannot_buy" left="160" width="200">
|
||||
<floater.string name="info_cannot_buy">
|
||||
Achat impossible
|
||||
</floater.string>
|
||||
<layout_stack name="outer_stack">
|
||||
<layout_panel name="layout_panel_title">
|
||||
<text left="5" name="info_need_more" right="-5">
|
||||
Plus de L$ sont requis
|
||||
</text>
|
||||
<text left="5" name="info_buying">
|
||||
Acheter des L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_price">
|
||||
<text name="target_price_label">
|
||||
Vous avez besoin de
|
||||
</text>
|
||||
<text name="target_price">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_balance">
|
||||
<text name="balance_label">
|
||||
Vous avez
|
||||
</text>
|
||||
<text name="balance_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_required">
|
||||
<text name="required_label">
|
||||
Vous devez acheter au moins
|
||||
</text>
|
||||
<text name="required_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_action">
|
||||
<text name="currency_action">
|
||||
Vous voulez acheter
|
||||
</text>
|
||||
<text name="currency_est">
|
||||
environ [LOCALAMOUNT]
|
||||
</text>
|
||||
<text name="getting_data">
|
||||
Estimation en cours...
|
||||
</text>
|
||||
<text name="total_label">
|
||||
Votre nouveau solde sera
|
||||
</text>
|
||||
<text name="total_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_msg">
|
||||
<text name="currency_links">
|
||||
[http://www.secondlife.com/my/account/payment_method_management.php mode de paiement] | [http://www.secondlife.com/my/account/currency.php devise]
|
||||
</text>
|
||||
<text name="exchange_rate_note">
|
||||
Saisissez à nouveau le montant pour voir le taux de change actuel.
|
||||
</text>
|
||||
<text name="purchase_warning_repurchase">
|
||||
Confirm. cet achat n'achète que des L$, pas l'objet.
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_buttons">
|
||||
<text name="contacting">
|
||||
Contact avec LindeX...
|
||||
</text>
|
||||
<button label="Acheter" name="buy_btn" />
|
||||
<button label="Annuler" name="cancel_btn" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater name="Load Pref Preset" title="CHARGER LE PRÉRÉGLAGE PRÉF.">
|
||||
<floater name="load_pref_preset" title="CHARGER LE PRÉRÉGLAGE PRÉF.">
|
||||
<string name="title_graphic">
|
||||
Charger le préréglage de graphique
|
||||
</string>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater name="Save Pref Preset" title="ENREGISTRER LE PRÉRÉGLAGE PRÉF.">
|
||||
<string name="title_graphic">
|
||||
Enregistrer le préréglage de graphique
|
||||
</string>
|
||||
<string name="title_camera">
|
||||
Enregistrer le préréglage de caméra
|
||||
</string>
|
||||
<floater name="save_pref_preset" title="ENREGISTRER LE PRÉRÉGLAGE PRÉF.">
|
||||
<text name="Preset">
|
||||
Tapez un nom pour le préréglage ou choisissez un préréglage existant.
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -118,6 +118,12 @@
|
|||
<check_box label="Valeurs en %" tool_tip="Par défaut, tout est en pourcentages et chaque axe est fixé à 50" name="FSPivotPercToggle"/>
|
||||
<button label="Permissions de création par défaut" name="fs_default_creation_permissions"/>
|
||||
<text name="text_box_scripting_font" width="155">Police de l'éditeur de script :</text>
|
||||
<combo_box name="FSScriptingFontName" tool_tip="Nom de la police utilisée dans l'éditeur de script LSL" />
|
||||
<combo_box name="FSScriptingFontSize" tool_tip="Taille de la police utilisée dans l'éditeur de script LSL">
|
||||
<combo_item name="Small" label="Petite"/>
|
||||
<combo_item name="Medium" label="Moyenne"/>
|
||||
<combo_item name="Large" label="Grande"/>
|
||||
</combo_box>
|
||||
<check_box label="Activer le préprocesseur LSL" tool_tip="Quand coché, le préprocesseur LSL est activé." name="preproc_checkbox"/>
|
||||
<check_box label="Optimiser" tool_tip="Quand coché, le préprocesseur LSL optimisera la place que prennent les scripts." name="preprocoptimizer_checkbox"/>
|
||||
<check_box label="Condition switch()" left_delta="80" tool_tip="Quand coché, le préprocesseur LSL permettra l'utilisation de la condition switch() pour le contrôle de flux de scripts." name="preprocswitch_checkbox"/>
|
||||
|
|
|
|||
|
|
@ -6824,6 +6824,78 @@ Votre position actuelle : [AVATAR_POS]
|
|||
<string name="fs_preprocessor_mono_directive_override">
|
||||
Détection de la directive compile-as-Mono outrepassant les préférences.
|
||||
</string>
|
||||
<!-- LSL Optimizer -->
|
||||
<string name="fs_preprocessor_optimizer_start">
|
||||
Optimisation des fonctions définies par l'utilisateur et des variables globales non référencées.
|
||||
</string>
|
||||
<string name="fs_preprocessor_optimizer_regex_err">
|
||||
Expression régulière non valide : '[WHAT]' ; optimisation LSL ignorée.
|
||||
</string>
|
||||
<string name="fs_preprocessor_optimizer_exception">
|
||||
Exception détectée : '[WHAT]' ; optimisation LSL sautée.
|
||||
</string>
|
||||
<string name="fs_preprocessor_optimizer_unexpected_exception">
|
||||
Exception inattendue dans l'optimiseur LSL ; non appliquée.
|
||||
</string>
|
||||
<!-- LSL Compressor -->
|
||||
<string name="fs_preprocessor_compress_start">
|
||||
Compression du texte du script en supprimant les espaces inutiles.
|
||||
</string>
|
||||
<string name="fs_preprocessor_compress_regex_err">
|
||||
Expression régulière non valide : '[WHAT]' ; la compression LSL est ignorée.
|
||||
</string>
|
||||
<string name="fs_preprocessor_compress_exception">
|
||||
Exception interceptée : '[WHAT]' ; la compression LSL est ignorée.
|
||||
</string>
|
||||
<string name="fs_preprocessor_compress_unexpected_exception">
|
||||
Exception inattendue dans le compresseur LSL ; non appliquée.
|
||||
</string>
|
||||
<!-- LSL Lazy lists -->
|
||||
<string name="fs_preprocessor_lazylist_start">
|
||||
Appliquer la conversion de liste paresseuse.
|
||||
</string>
|
||||
<string name="fs_preprocessor_lazylist_regex_err">
|
||||
Pas une expression régulière valide : '[WHAT]' ; Le convertisseur de liste paresseux a été ignoré.
|
||||
</string>
|
||||
<string name="fs_preprocessor_lazylist_exception">
|
||||
Exception interceptée : '[WHAT]' ; le convertisseur de liste paresseux a été ignoré.
|
||||
</string>
|
||||
<string name="fs_preprocessor_lazylist_unexpected_exception">
|
||||
Exception inattendue dans le convertisseur de liste paresseux ; non appliquée.
|
||||
</string>
|
||||
<!-- LSL switch statement -->
|
||||
<string name="fs_preprocessor_switchstatement_start">
|
||||
Application de la conversion des instructions de commutation.
|
||||
</string>
|
||||
<string name="fs_preprocessor_switchstatement_regex_err">
|
||||
Expression régulière non valide : '[WHAT]' ; Le convertisseur d'instruction de commutation a été ignoré.
|
||||
</string>
|
||||
<string name="fs_preprocessor_switchstatement_exception">
|
||||
Exception interceptée : '[WHAT]' ; Le convertisseur d'instruction de commutation a été ignoré.
|
||||
</string>
|
||||
<string name="fs_preprocessor_switchstatement_unexpected_exception">
|
||||
Exception inattendue dans le convertisseur d'instruction de commutation ; non appliquée.
|
||||
</string>
|
||||
<!-- LSL Cache -->
|
||||
<string name="fs_preprocessor_cache_miss">
|
||||
Mise en cache du fichier inclus : '[FILENAME]'.
|
||||
</string>
|
||||
<string name="fs_preprocessor_cache_invalidated">
|
||||
Le fichier inclus '[FILENAME]' a changé, remise en cache.
|
||||
</string>
|
||||
<string name="fs_preprocessor_cache_completed">
|
||||
La mise en cache est terminée pour '[FILENAME]'.
|
||||
</string>
|
||||
<string name="fs_preprocessor_cache_unsafe">
|
||||
Erreur : le script nommé '[FILENAME]' n'est pas fiable pour être copié dans le système de fichiers. Cet include échouera.
|
||||
</string>
|
||||
<string name="fs_preprocessor_caching_err">
|
||||
Erreur de mise en cache du fichier inclus '[FILENAME]'.
|
||||
</string>
|
||||
<string name="fs_preprocessor_truncated">
|
||||
Avertissement : La sortie du préprocesseur a été tronquée en raison de la taille excessive du texte du script. Ce script ne fonctionnera probablement pas.
|
||||
</string>
|
||||
<!-- </FS:Cron> -->
|
||||
|
||||
<!-- Animation Explorer -->
|
||||
<string name="animation_explorer_seconds_ago">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<contents>
|
||||
<rows name="camera_actions">
|
||||
<columns label="Camera" name="lst_action" />
|
||||
</rows>
|
||||
<rows name="look_up">
|
||||
<columns name="lst_action" value="Guarda su" />
|
||||
</rows>
|
||||
<rows name="look_down">
|
||||
<columns name="lst_action" value="Guarda giù" />
|
||||
</rows>
|
||||
<rows name="move_forward">
|
||||
<columns name="lst_action" value="Camera in avanti" />
|
||||
</rows>
|
||||
<rows name="move_backward">
|
||||
<columns name="lst_action" value="Camera indietro" />
|
||||
</rows>
|
||||
<rows name="move_forward_fast">
|
||||
<columns name="lst_action" value="Camera in avanti veloce" />
|
||||
</rows>
|
||||
<rows name="move_backward_fast">
|
||||
<columns name="lst_action" value="Camera indietro veloce" />
|
||||
</rows>
|
||||
<rows name="spin_over">
|
||||
<columns name="lst_action" value="Ruota camera verso l'alto" />
|
||||
</rows>
|
||||
<rows name="spin_under">
|
||||
<columns name="lst_action" value="Ruota camera verso il basso" />
|
||||
</rows>
|
||||
<rows name="pan_up">
|
||||
<columns name="lst_action" value="Sposta camera verso l'alto" />
|
||||
</rows>
|
||||
<rows name="pan_down">
|
||||
<columns name="lst_action" value="Sposta camera verso il basso" />
|
||||
</rows>
|
||||
<rows name="pan_left">
|
||||
<columns name="lst_action" value="Sposta camera a sinistra" />
|
||||
</rows>
|
||||
<rows name="pan_right">
|
||||
<columns name="lst_action" value="Sposta camera a destra" />
|
||||
</rows>
|
||||
<rows name="pan_in">
|
||||
<columns name="lst_action" value="Sposta camera in avanti" />
|
||||
</rows>
|
||||
<rows name="pan_out">
|
||||
<columns name="lst_action" value="Sposta camera indietro" />
|
||||
</rows>
|
||||
<rows name="spin_around_ccw">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera attorno al punto di focus in senso antiorario." value="Ruota camera verso destra" />
|
||||
</rows>
|
||||
<rows name="spin_around_cw">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera attorno al punto di focus in senso orario." value="Ruota camera verso sinistra" />
|
||||
</rows>
|
||||
<rows name="move_forward_sitting">
|
||||
<columns name="lst_action" value="Camera in avanti (s)" />
|
||||
</rows>
|
||||
<rows name="move_backward_sitting">
|
||||
<columns name="lst_action" value="Camera indietro (s)" />
|
||||
</rows>
|
||||
<rows name="spin_over_sitting">
|
||||
<columns name="lst_action" value="Ruota camera verso l'alto (s)" />
|
||||
</rows>
|
||||
<rows name="spin_under_sitting">
|
||||
<columns name="lst_action" value="Ruota camera verso il basso (s)" />
|
||||
</rows>
|
||||
<rows name="spin_around_ccw_sitting">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera attorno al punto di focus in senso antiorario." value="Ruota camera verso destra (s)" />
|
||||
</rows>
|
||||
<rows name="spin_around_cw_sitting">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera attorno al punto di focus in senso orario." value="Ruota camera verso sinistra (s)" />
|
||||
</rows>
|
||||
</contents>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<contents>
|
||||
<columns label="Azione" name="lst_action" />
|
||||
<columns label="Controllo Primario" name="lst_ctrl1" />
|
||||
<columns label="Alternativa 1" name="lst_ctrl2" />
|
||||
<columns label="Alternativa 2" name="lst_ctrl3" />
|
||||
</contents>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<contents>
|
||||
<rows name="editing_actions">
|
||||
<columns label="Modifica" name="lst_action" />
|
||||
</rows>
|
||||
<rows name="edit_avatar_spin_ccw">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera attorno all'avatar in senso antiorario." value="Ruota camera verso destra" />
|
||||
</rows>
|
||||
<rows name="edit_avatar_spin_cw">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera attorno all'avatar in senso orario." value="Ruota camera verso sinistra" />
|
||||
</rows>
|
||||
<rows name="edit_avatar_spin_over">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera sopra all'avatar" value="Ruota camera verso l'alto" />
|
||||
</rows>
|
||||
<rows name="edit_avatar_spin_under">
|
||||
<columns name="lst_action" tool_tip="Ruota la camera sotto all'avatar" value="Ruota camera verso il basso" />
|
||||
</rows>
|
||||
<rows name="edit_avatar_move_forward">
|
||||
<columns name="lst_action" value="Camera in avanti" />
|
||||
</rows>
|
||||
<rows name="edit_avatar_move_backward">
|
||||
<columns name="lst_action" value="Camera indietro" />
|
||||
</rows>
|
||||
</contents>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<contents>
|
||||
<rows name="media_actions">
|
||||
<columns label="Suono e Media" name="lst_action" />
|
||||
</rows>
|
||||
<rows name="toggle_pause_media">
|
||||
<columns name="lst_action" value="Play / Pausa media" />
|
||||
</rows>
|
||||
<rows name="toggle_enable_media">
|
||||
<columns name="lst_action" value="Play / Stop tutti i media" />
|
||||
</rows>
|
||||
<rows name="voice_follow_key">
|
||||
<columns name="lst_action" value="Voce" />
|
||||
</rows>
|
||||
<rows name="toggle_voice">
|
||||
<columns name="lst_action" value="Interruttore voce" />
|
||||
</rows>
|
||||
<rows name="start_chat">
|
||||
<columns name="lst_action" value="Avvia chat" />
|
||||
</rows>
|
||||
<rows name="start_gesture">
|
||||
<columns name="lst_action" value="Riproduci gesto" />
|
||||
</rows>
|
||||
<rows name="script_trigger_lbutton">
|
||||
<columns name="lst_action" value="Interagisci (LMB)" />
|
||||
</rows>
|
||||
</contents>
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<contents>
|
||||
<rows name="move_actions">
|
||||
<columns label="Movimento" name="lst_action" />
|
||||
</rows>
|
||||
<rows name="walk_to">
|
||||
<columns name="lst_action" tool_tip="Cammina verso il luogo indicato dal cursore del mouse." value="Vai a" />
|
||||
</rows>
|
||||
<rows name="teleport_to">
|
||||
<columns name="lst_action" tool_tip="Teleport nel luogo indicato dal cursore del mouse. Non tutte le posizioni consentono il teleport diretto." value="Teleport a" />
|
||||
</rows>
|
||||
<rows name="push_forward">
|
||||
<columns name="lst_action" value="Vai avanti" />
|
||||
</rows>
|
||||
<rows name="push_backward">
|
||||
<columns name="lst_action" value="Torna indietro" />
|
||||
</rows>
|
||||
<rows name="turn_left">
|
||||
<columns name="lst_action" value="Gira a sinistra" />
|
||||
</rows>
|
||||
<rows name="turn_right">
|
||||
<columns name="lst_action" value="Gira a destra" />
|
||||
</rows>
|
||||
<rows name="slide_left">
|
||||
<columns name="lst_action" value="Vai a sinistra" />
|
||||
</rows>
|
||||
<rows name="slide_right">
|
||||
<columns name="lst_action" value="Vai a destra" />
|
||||
</rows>
|
||||
<rows name="jump">
|
||||
<columns name="lst_action" value="Salto / Su" />
|
||||
</rows>
|
||||
<rows name="push_down">
|
||||
<columns name="lst_action" value="Giù" />
|
||||
</rows>
|
||||
<rows name="run_forward">
|
||||
<columns name="lst_action" value="Corri in avanti" />
|
||||
</rows>
|
||||
<rows name="run_backward">
|
||||
<columns name="lst_action" value="Corri indietro" />
|
||||
</rows>
|
||||
<rows name="run_left">
|
||||
<columns name="lst_action" value="Corri a sinistra" />
|
||||
</rows>
|
||||
<rows name="run_right">
|
||||
<columns name="lst_action" value="Corri a destra" />
|
||||
</rows>
|
||||
<rows name="toggle_run">
|
||||
<columns name="lst_action" value="Corri sempre" />
|
||||
</rows>
|
||||
<rows name="toggle_fly">
|
||||
<columns name="lst_action" value="Vola / Ferma volo" />
|
||||
</rows>
|
||||
<rows name="toggle_sit">
|
||||
<columns name="lst_action" value="Siediti / Alzati" />
|
||||
</rows>
|
||||
<rows name="stop_moving">
|
||||
<columns name="lst_action" value="Stop movimento" />
|
||||
</rows>
|
||||
</contents>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<floater name="360capture" title="Foto panoramica a 360°">
|
||||
<floater min_width="450" name="360capture" title="Foto Panoramica a 360°">
|
||||
<panel name="ui_panel_left">
|
||||
<text name="quality_level_label">
|
||||
Livello qualità
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="sound_explorer" title="Suoni">
|
||||
<floater name="sound_explorer" title="Esplora Suoni">
|
||||
<floater.string name="Playing">
|
||||
In esecuzione
|
||||
</floater.string>
|
||||
|
|
@ -14,17 +14,18 @@
|
|||
</floater.string>
|
||||
<check_box name="avatars_chk" label="Avatar" />
|
||||
<check_box name="objects_chk" label="Oggetti" />
|
||||
<check_box name="collision_chk" label="Suoni predefiniti di collisione"/>
|
||||
<check_box name="repeated_asset_chk" label="Asset ripetuto" left_delta="185"/>
|
||||
<check_box name="collision_chk" label="Suoni predef. di collisione"/>
|
||||
<check_box name="repeated_asset_chk" label="Suoni ripetuti"/>
|
||||
<check_box name="pause_chk" label="Pausa log"/>
|
||||
<scroll_list name="sound_list">
|
||||
<columns label="Riproduzione" name="playing"/>
|
||||
<columns label="Riproduzione" name="playing" width="100"/>
|
||||
<columns label="Tipo" name="type"/>
|
||||
<columns label="Proprietario" name="owner"/>
|
||||
<columns label="Suono" name="sound"/>
|
||||
</scroll_list>
|
||||
<button label="Riproduci" name="play_locally_btn"/>
|
||||
<button label="Play in Locale" name="play_locally_btn"/>
|
||||
<button label="Stop in Locale" name="stop_locally_btn" />
|
||||
<button label="Guarda" name="look_at_btn"/>
|
||||
<button label="Lista nera" name="bl_btn"/>
|
||||
<button label="Ferma" name="stop_btn"/>
|
||||
<button label="Lista Nera" name="bl_btn"/>
|
||||
<button label="Stop" name="stop_btn"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floaterland" title="Informazioni sul terreno">
|
||||
<floater name="floaterland" title="Informazioni sul Terreno">
|
||||
<floater.string name="Hours">
|
||||
[HOURS] ore.
|
||||
</floater.string>
|
||||
|
|
@ -188,7 +188,7 @@ o suddivisa.
|
|||
<text name="region_landtype_lbl">
|
||||
Tipo:
|
||||
</text>
|
||||
<text left="125" name="region_landtype_text">
|
||||
<text left="125" name="region_landtype_text" width="230">
|
||||
Mainland / Homestead
|
||||
</text>
|
||||
<text name="region_maturity_lbl">
|
||||
|
|
@ -478,5 +478,6 @@ media:
|
|||
</panel>
|
||||
</panel>
|
||||
<panel label="Esperienze" name="land_experiences_panel"/>
|
||||
<panel label="Ambiente" name="land_environment_panel" />
|
||||
</tab_container>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,22 +1,84 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="env_adjust_snapshot" title="Illuminazione personale">
|
||||
<floater name="env_adjust_snapshot" title="Illuminazione Personalizzata">
|
||||
<layout_stack name="outer_stack">
|
||||
<layout_panel name="env_controls">
|
||||
<layout_stack name="settings_stack">
|
||||
<layout_panel>
|
||||
<button label="Reimposta" name="btn_reset" tool_tip="Chiudi e reimposta a Ambiente Condiviso"/>
|
||||
<layout_panel name="lp_1">
|
||||
<text name="ambient_lbl">
|
||||
Ambiente:
|
||||
</text>
|
||||
<text name="blue_horizon_lbl">
|
||||
Orizz. blu:
|
||||
</text>
|
||||
<text name="blue_density_lbl">
|
||||
Densità blu:
|
||||
</text>
|
||||
<button label="Ripristina" name="btn_reset" tool_tip="Chiudi e reimposta Ambiente Condiviso"/>
|
||||
<text name="sun_color_lbl">
|
||||
Colore sole:
|
||||
</text>
|
||||
<text name="cloud_color_lbl">
|
||||
Col. nuvole:
|
||||
</text>
|
||||
<text name="cloud_map_label">
|
||||
Immagine nuvola:
|
||||
Imm. nuvole:
|
||||
</text>
|
||||
<text name="water_map_label">
|
||||
Imm. acqua:
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel>
|
||||
<layout_panel name="lp_2">
|
||||
<text name="haze_horizon_label">
|
||||
Orizzonte foschia:
|
||||
</text>
|
||||
<text name="haze_density_label">
|
||||
Densità foschia:
|
||||
</text>
|
||||
<text name="cloud_coverage_label">
|
||||
Nuvolosità:
|
||||
</text>
|
||||
<text name="cloud_scale_label">
|
||||
Dimensioni nuvole:
|
||||
</text>
|
||||
<text name="scene_gamma_label">
|
||||
Gamma scena:
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_3">
|
||||
<text name="label">
|
||||
Sole:
|
||||
</text>
|
||||
<check_box label="Mostra marcatore" name="sunbeacon"/>
|
||||
<text name="sun_azimuth_label">
|
||||
Azimut:
|
||||
</text>
|
||||
<text name="sun_elevation_label">
|
||||
Elevazione:
|
||||
</text>
|
||||
<check_box label="Mostra marcatore" name="sunbeacon" />
|
||||
<text name="scale_label">
|
||||
Dimensioni:
|
||||
</text>
|
||||
<text name="glow_focus_label">
|
||||
Nitidezza bagliore:
|
||||
</text>
|
||||
<text name="glow_size_label">
|
||||
Dimensioni bagliore:
|
||||
</text>
|
||||
<text name="star_brightness_label">
|
||||
Luminosità stelle:
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel>
|
||||
<check_box label="Mostra marcatore" name="moonbeacon"/>
|
||||
<layout_panel name="lp_4">
|
||||
<text name="label">
|
||||
Luna:
|
||||
</text>
|
||||
<text name="moon_azimuth_label">
|
||||
Azimut:
|
||||
</text>
|
||||
<text name="moon_elevation_label">
|
||||
Elevazione:
|
||||
</text>
|
||||
<check_box label="Mostra marcatore" name="moonbeacon" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="animation_explorer" title="Esplora Animazioni">
|
||||
<scroll_list name="animation_list">
|
||||
<scroll_list.column label="Riprodotta da" name="played_by" />
|
||||
<scroll_list.column label="Riproduzione" name="played" />
|
||||
<scroll_list.column label="Priorità" name="priority" />
|
||||
<scroll_list.column label="Tempo" name="timestamp" />
|
||||
<scroll_list.column label="ID animazione" name="animation_id" />
|
||||
<scroll_list.column label="ID oggetto" name="object_id" />
|
||||
</scroll_list>
|
||||
<panel name="buttons_panel">
|
||||
<button label="Ferma" name="stop_btn" />
|
||||
<button label="Ferma e revoca perm." name="stop_and_revoke_btn" />
|
||||
<button label="Revoca perm." name="revoke_btn" />
|
||||
<check_box label="Escludi le mie animaz." name="no_owned_animations_check" tool_tip="Se selezionata, verranno escluse tutte le animazioni del tuo avatar, come quelle dell'AO o quelle predefinite del sistema." />
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="animation_overrider" title="Animatore (AO)">
|
||||
<floater name="animation_overrider" title="AO">
|
||||
<floater.string name="ao_no_sets_loaded">Nessun AO caricato</floater.string>
|
||||
<floater.string name="ao_no_animations_loaded">Nessuna animazione caricata</floater.string>
|
||||
<floater.string name="ao_dnd_only_on_full_interface">Trascinare una annotazione AO sulla finestra centrale. Clic su ingranaggio per aprirla.</floater.string>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<floater name="floater_avatar_render_settings" title="Impostazioni resa avatar">
|
||||
<floater name="floater_avatar_render_settings" title="Impostazioni Resa Avatar">
|
||||
<string name="av_never_render" value="Mai"/>
|
||||
<string name="av_always_render" value="Sempre"/>
|
||||
<filter_editor label="Filtra persone" name="people_filter_input"/>
|
||||
|
|
|
|||
|
|
@ -14,12 +14,15 @@
|
|||
<text name="label_objects">
|
||||
Per questi oggetti:
|
||||
</text>
|
||||
<check_box label="Fisico" name="physical"/>
|
||||
<check_box label="Con script" name="scripted"/>
|
||||
<check_box label="Tocca solo" name="touch_only"/>
|
||||
<check_box label="Fonti sonore" name="sounds"/>
|
||||
<check_box label="Fonti delle particelle" name="particles"/>
|
||||
<check_box label="Fonti multimedia" name="moapbeacon"/>
|
||||
<check_box label="Oggetti fisici" name="physical"/>
|
||||
<check_box label="Oggetti scriptati" name="scripted"/>
|
||||
<check_box label="Solo cliccabili" name="touch_only"/>
|
||||
<check_box label="Sorgenti suoni" name="sounds"/>
|
||||
<check_box label="Sorgenti particelle" name="particles"/>
|
||||
<check_box label="Sorgenti multimedia" name="moapbeacon"/>
|
||||
<text name="label_objects">
|
||||
Mostra direzione:
|
||||
</text>
|
||||
<check_box label="Sole" name="sun"/>
|
||||
<check_box label="Luna" name="moon"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="build options floater" title="Opzioni griglia">
|
||||
<floater name="build options floater" title="Opzioni Griglia">
|
||||
<spinner label="Unità (metri)" name="GridResolution"/>
|
||||
<spinner label="Ampiezza (metri)" name="GridDrawSize"/>
|
||||
<spinner label="Numero decimali" name="DecimalPrecision"/>
|
||||
|
|
|
|||
|
|
@ -3,55 +3,77 @@
|
|||
<floater.string name="buy_currency">
|
||||
acquistare [LINDENS] L$ per circa [LOCALAMOUNT]
|
||||
</floater.string>
|
||||
<text font="SansSerifLarge" left="5" name="info_need_more" right="-5">
|
||||
Ti servono più L$
|
||||
</text>
|
||||
<text name="contacting">
|
||||
Sto contattando il LindeX...
|
||||
</text>
|
||||
<text name="info_buying">
|
||||
Acquista L$
|
||||
</text>
|
||||
<text name="balance_label">
|
||||
Io ho
|
||||
</text>
|
||||
<text name="balance_amount">
|
||||
[AMT]L$
|
||||
</text>
|
||||
<text name="currency_action" width="45">
|
||||
Voglio acquistare
|
||||
</text>
|
||||
<text name="buying_label">
|
||||
Al prezzo
|
||||
</text>
|
||||
<text name="currency_est">
|
||||
circa [LOCALAMOUNT]
|
||||
</text>
|
||||
<text name="getting_data">
|
||||
Stima in corso...
|
||||
</text>
|
||||
<text name="total_label">
|
||||
Il mio saldo sarà
|
||||
</text>
|
||||
<text name="total_amount">
|
||||
[AMT]L$
|
||||
</text>
|
||||
<text name="currency_links">
|
||||
[http://www.secondlife.com/my/account/payment_method_management.php metodo di pagamento] | [http://www.secondlife.com/my/account/currency.php valuta]
|
||||
</text>
|
||||
<text name="exchange_rate_note">
|
||||
Riscrivi l'importo per vedere l'ultimo tasso di cambio.
|
||||
</text>
|
||||
<text name="purchase_warning_repurchase">
|
||||
La conferma di questo acquisto compra solo L$, non
|
||||
l'oggetto.
|
||||
</text>
|
||||
<text bottom_delta="16" name="purchase_warning_notenough">
|
||||
Non stai acquistando abbastanza L$. Aumenta l'importo.
|
||||
</text>
|
||||
<button label="Acquista" name="buy_btn"/>
|
||||
<button label="Annulla" name="cancel_btn"/>
|
||||
<floater.string name="info_cannot_buy" left="160" font="SansSerifBig">
|
||||
<floater.string name="info_cannot_buy">
|
||||
Impossibile acquistare
|
||||
</floater.string>
|
||||
<layout_stack name="outer_stack">
|
||||
<layout_panel name="layout_panel_title">
|
||||
<text name="info_need_more">
|
||||
Hai bisogno di più L$
|
||||
</text>
|
||||
<text name="info_buying">
|
||||
Acquista L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_price">
|
||||
<text name="target_price_label">
|
||||
Hai bisogno di
|
||||
</text>
|
||||
<text name="target_price">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_balance">
|
||||
<text name="balance_label">
|
||||
Attualmente hai
|
||||
</text>
|
||||
<text name="balance_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_required">
|
||||
<text name="required_label">
|
||||
Dovresti acquistare almeno
|
||||
</text>
|
||||
<text name="required_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_action">
|
||||
<text name="currency_action">
|
||||
Scegli l'importo da acquistare
|
||||
</text>
|
||||
<text name="currency_est">
|
||||
Circa [LOCALAMOUNT]
|
||||
</text>
|
||||
<text name="getting_data">
|
||||
Stima in corso......
|
||||
</text>
|
||||
<text name="total_label">
|
||||
Il tuo nuovo saldo sarà
|
||||
</text>
|
||||
<text name="total_amount">
|
||||
[AMT] L$
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_msg">
|
||||
<text name="currency_links">
|
||||
[http://www.secondlife.com/my/account/payment_method_management.php metodo di pagamento] | [http://www.secondlife.com/my/account/currency.php valuta]
|
||||
</text>
|
||||
<text name="exchange_rate_note">
|
||||
Inserisci di nuovo l'importo per vedere l'ultimo tasso di cambio.
|
||||
</text>
|
||||
<text name="purchase_warning_repurchase">
|
||||
Dopo aver ricevuto i tuoi L$, dovresti provare
|
||||
di nuovo a fare l'acquisto.
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="layout_panel_buttons">
|
||||
<text name="contacting">
|
||||
Sto contattando LindeX...
|
||||
</text>
|
||||
<button label="Acquista" name="buy_btn" />
|
||||
<button label="Annulla" name="cancel_btn" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_buy_currency_html" title="Acquista valuta"/>
|
||||
<floater name="floater_buy_currency_html" title="Acquista Valuta"/>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="buy land" title="Acquista terreno">
|
||||
<floater name="buy land" title="Acquista Terreno">
|
||||
<floater.string name="can_resell">
|
||||
Può essere rivenduto.
|
||||
</floater.string>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="camera_floater" title="Controlli fotocamera">
|
||||
<floater name="camera_floater" title="Controlli Fotocamera">
|
||||
<floater.string name="rotate_tooltip">
|
||||
Ruota la telecamera intorno all'inquadratura
|
||||
Ruota la camera intorno all'inquadratura
|
||||
</floater.string>
|
||||
<floater.string name="zoom_tooltip">
|
||||
Avvicina la telecamera nell'inquadratura
|
||||
Avvicina la camera nell'inquadratura
|
||||
</floater.string>
|
||||
<floater.string name="move_tooltip">
|
||||
Muovi la telecamera su, giù, a sinistra e a destra
|
||||
Muovi la camera su, giù, a sinistra e a destra
|
||||
</floater.string>
|
||||
<floater.string name="free_mode_title">
|
||||
Vista Oggetto
|
||||
</floater.string>
|
||||
<string name="inactive_combo_text">
|
||||
Usa Preset
|
||||
</string>
|
||||
<panel name="buttons_panel">
|
||||
<panel_camera_item name="front_view" tool_tip="Vista Frontale"/>
|
||||
<panel_camera_item name="group_view" tool_tip="Vista Laterale"/>
|
||||
<panel_camera_item name="rear_view" tool_tip="Vista Posteriore"/>
|
||||
<panel_camera_item name="object_view" tool_tip="Vista Oggetto"/>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="Vista Mouselook"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="Ripristina vista"/>
|
||||
</panel>
|
||||
<panel name="zoom">
|
||||
<layout_stack name="camera_view_layout_stack">
|
||||
<layout_panel name="camera_rotate_layout_panel">
|
||||
|
|
@ -22,14 +36,12 @@
|
|||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
<panel name="buttons_view">
|
||||
<panel_camera_item name="front_view" tool_tip="Vista frontale"/>
|
||||
<panel_camera_item name="group_view" tool_tip="Vista laterale"/>
|
||||
<panel_camera_item name="rear_view" tool_tip="Vista posteriore"/>
|
||||
</panel>
|
||||
<panel name="buttons">
|
||||
<panel_camera_item name="object_view" tool_tip="Vista oggetto"/>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="Vista mouselook"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="Ripristina vista"/>
|
||||
<panel name="preset_buttons_panel">
|
||||
<button label="Posizione..." name="camera_position_btn" />
|
||||
<button name="save_preset_btn" tool_tip="Salva come Preset" />
|
||||
<combo_box name="preset_combo">
|
||||
<combo_box.item label="Usa Preset" name="Use preset" />
|
||||
</combo_box>
|
||||
<button name="gear_btn" tool_tip="Preset Camera" />
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater title="Preset Camera" name="floater_camera_presets" />
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_conversation_log" title="Registro conversazioni">
|
||||
<floater name="floater_conversation_log" title="Registro Conversazioni">
|
||||
<panel name="buttons_panel">
|
||||
<filter_editor label="Filtro persone" name="people_filter_input"/>
|
||||
<menu_button name="conversations_gear_btn" tool_tip="Azioni su persona/gruppo selezionato"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="create_landmark" title="Crea Segnaposto">
|
||||
<string name="favorites_bar">
|
||||
Barra dei preferiti
|
||||
</string>
|
||||
<text name="title_label" value="Dettagli segnaposto" />
|
||||
<text name="name_label" value="Nome:" />
|
||||
<text name="folder_label" value="Salva segnaposto in:" />
|
||||
<text name="new_folder_textbox">
|
||||
[secondlife:/// Crea nuova cartella]
|
||||
</text>
|
||||
<text name="notes_label" value="Note:" />
|
||||
<button label="Annulla" name="cancel_btn" />
|
||||
</floater>
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<floater name="delete_pref_preset" title="Elimina preset preferenze">
|
||||
<floater name="delete_pref_preset" title="Elimina Preset">
|
||||
<string name="title_graphic">
|
||||
Elimina preset grafica
|
||||
Elimina Preset Grafica
|
||||
</string>
|
||||
<string name="title_camera">
|
||||
Elimina preset videocamera
|
||||
Elimina Preset Camera
|
||||
</string>
|
||||
<text name="Preset">
|
||||
Seleziona un preset
|
||||
|
|
|
|||
|
|
@ -1,38 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="env_edit_extdaycycle" title="Modifica ciclo giornata">
|
||||
<string name="title_new">
|
||||
Crea un nuovo ciclo giornata
|
||||
</string>
|
||||
<string name="title_edit">
|
||||
Modifica ciclo giornata
|
||||
</string>
|
||||
<string name="hint_new">
|
||||
Dai un nome al ciclo della giornata, regola i comandi per crearlo e fai clic su "Salva".
|
||||
</string>
|
||||
<string name="hint_edit">
|
||||
Per modificare il ciclo della giornata, regola i comandi seguenti e fai clic su "Salva".
|
||||
</string>
|
||||
<string name="time_label">
|
||||
([HH]:[MM])
|
||||
</string>
|
||||
<string name="sky_track_label">
|
||||
Cielo [ALT]
|
||||
</string>
|
||||
<string name="sky_label">
|
||||
Cielo
|
||||
</string>
|
||||
<string name="water_label">
|
||||
Acqua
|
||||
</string>
|
||||
<string name="commit_parcel">
|
||||
Applica al lotto
|
||||
</string>
|
||||
<string name="commit_region">
|
||||
Applica alla regione
|
||||
</string>
|
||||
<floater name="env_edit_extdaycycle" title="Modifica Ciclo Giornata">
|
||||
<string name="title_new">Crea un nuovo ciclo giornata</string>
|
||||
<string name="title_edit">Modifica ciclo giornata</string>
|
||||
<string name="hint_new">Assegna un nome al ciclo della giornata, regola le impostazioni e clicca su Salva.</string>
|
||||
<string name="hint_edit">Per modificare il ciclo della giornata, regola le impostazioni e clicca su Salva.</string>
|
||||
<string name="sky_track_label">Cielo [ALT]</string>
|
||||
<string name="sky_label">Cielo</string>
|
||||
<string name="water_label">Acqua</string>
|
||||
<string name="commit_parcel">Applica al lotto</string>
|
||||
<string name="commit_region">Applica alla regione</string>
|
||||
<layout_stack name="outer_stack">
|
||||
<layout_panel name="name_and_import">
|
||||
<text name="label">
|
||||
<text name="label" width="125">
|
||||
Nome ciclo giornata:
|
||||
</text>
|
||||
<button label="Importa" name="btn_import" tool_tip="Importa impostazioni legacy dal disco."/>
|
||||
|
|
@ -44,35 +23,27 @@
|
|||
<button label="Cielo 4:" name="sky4_track"/>
|
||||
<button label="Cielo 3:" name="sky3_track"/>
|
||||
<button label="Cielo 2:" name="sky2_track"/>
|
||||
<button label="Suolo" name="sky1_track"/>
|
||||
<button label="Terreno" name="sky1_track"/>
|
||||
<button label="Acqua" name="water_track"/>
|
||||
</panel>
|
||||
<panel name="timeline">
|
||||
<text name="p0" value="0%[DSC]"/>
|
||||
<text name="p1" value="25%[DSC]"/>
|
||||
<text name="p2" value="50%[DSC]"/>
|
||||
<text name="p3" value="75%[DSC]"/>
|
||||
<text name="p4" value="100%[DSC]"/>
|
||||
<multi_slider initial_value="0" name="WLTimeSlider"/>
|
||||
<multi_slider initial_value="0" name="WLDayCycleFrames"/>
|
||||
<text name="current_time" value="[PRCNT]%[DSC]"/>
|
||||
<layout_stack>
|
||||
<layout_panel>
|
||||
<button label="Clona Percorso Da" name="copy_track"/>
|
||||
<button label="Carica Percorso Da" name="load_track"/>
|
||||
<button label="Cancella Percorso" name="clear_track"/>
|
||||
<layout_stack name="track_options_ls">
|
||||
<layout_panel name="track_options_lp">
|
||||
<button label="Clona Traccia Da" name="copy_track"/>
|
||||
<button label="Carica Traccia Da" name="load_track"/>
|
||||
<button label="Cancella Traccia" name="clear_track"/>
|
||||
</layout_panel>
|
||||
<layout_panel>
|
||||
<layout_panel name="track_progress_lp">
|
||||
<layout_stack name="progress_control">
|
||||
<layout_panel name="skip_back">
|
||||
<button name="skip_back_btn" tool_tip="Passo indietro"/>
|
||||
<button name="skip_back_btn" tool_tip="Step precedente"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="skip_forward">
|
||||
<button name="skip_forward_btn" tool_tip="Passo avanti"/>
|
||||
<button name="skip_forward_btn" tool_tip="Step successivo"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
<layout_panel>
|
||||
<layout_panel name="frames_lp">
|
||||
<button label="Aggiungi [FRAME]" name="add_frame"/>
|
||||
<button label="Carica [FRAME]" name="btn_load_frame"/>
|
||||
<button label="Elimina [FRAME]" name="delete_frame"/>
|
||||
|
|
@ -82,7 +53,7 @@
|
|||
</layout_panel>
|
||||
<layout_panel name="frame_edit_controls">
|
||||
<text name="icn_lock_edit">
|
||||
Seleziona un fotogramma chiave dalla cronologia degli eventi qui sopra per modificare le impostazioni.
|
||||
Seleziona un fotogramma dalla sequenza temporale qui sopra per modificare le impostazioni.
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="frame_settings_water">
|
||||
|
|
@ -92,7 +63,7 @@
|
|||
</layout_panel>
|
||||
<layout_panel name="frame_settings_sky">
|
||||
<tab_container name="sky_tabs">
|
||||
<panel label="Atmosfera e illuminazione" name="atmosphere_panel"/>
|
||||
<panel label="Atmosfera e Illuminazione" name="atmosphere_panel"/>
|
||||
<panel label="Nuvole" name="clouds_panel"/>
|
||||
<panel label="Sole e Luna" name="moon_panel"/>
|
||||
</tab_container>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater label="Evento" name="Event" title="Dettagli evento">
|
||||
<floater label="Evento" name="Event" title="Dettagli Evento">
|
||||
<floater.string name="loading_text">
|
||||
Caricamento in corso...
|
||||
</floater.string>
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="experiencepicker" title="Scelta esperienza"/>
|
||||
<floater name="experiencepicker" title="Scelta Esperienza"/>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<floater.string name="empty_slurl">
|
||||
(nessuno)
|
||||
</floater.string>
|
||||
<text name="edit_title" value="Profilo esperienza"/>
|
||||
<text name="edit_title" value="Profilo Esperienza"/>
|
||||
<tab_container name="tab_container">
|
||||
<panel name="panel_experience_info">
|
||||
<scroll_container name="xp_scroll">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Fixed Environment" title="Ambiente stabilito">
|
||||
<floater name="Fixed Environment" title="Ambiente Fisso">
|
||||
<string name="edit_sky">
|
||||
Modifica cielo:
|
||||
</string>
|
||||
|
|
@ -8,6 +8,9 @@
|
|||
</string>
|
||||
<layout_stack name="floater_stack">
|
||||
<layout_panel name="info_panel">
|
||||
<text name="info_panel_label">
|
||||
Nome:
|
||||
</text>
|
||||
<button label="Carica" name="btn_load" tool_tip="Carica impostazioni dall’inventario"/>
|
||||
<button label="Importa" name="btn_import" tool_tip="Importa impostazioni legacy dal disco."/>
|
||||
</layout_panel>
|
||||
|
|
@ -17,7 +20,7 @@
|
|||
<button label="Salva" name="btn_commit"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="revert_btn_lp">
|
||||
<button label="Annulla" name="btn_cancel" tool_tip="Ripristina l'ultima versione salvata"/>
|
||||
<button label="Annulla" name="btn_cancel" tool_tip="Ripristina l'ultima versione salvata"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="area_search" title="Cerca oggetti nell'area">
|
||||
<floater name="area_search" title="Cerca Oggetti (cerca nell'area circostante)">
|
||||
<tab_container name="area_searchtab">
|
||||
<panel label="Elenco" name="area_search_list_panel">
|
||||
<panel.string name="ListedPendingTotalBlank">
|
||||
|
|
@ -9,22 +9,22 @@
|
|||
[LISTED] elencati | [PENDING] in corso | [TOTAL] totali
|
||||
</panel.string>
|
||||
<fs_scroll_list name="result_list">
|
||||
<fs_scroll_list.columns name="distance" label="Dist" tool_tip="Distanza dell'oggetto dall'avatar."/>
|
||||
<fs_scroll_list.columns name="distance" label="Distanza" tool_tip="Distanza dell'oggetto dall'avatar." width="58"/>
|
||||
<fs_scroll_list.columns name="name" label="Nome"/>
|
||||
<fs_scroll_list.columns name="description" label="Descrizione"/>
|
||||
<fs_scroll_list.columns name="price" label="Prezzo" tool_tip="Se l'oggetto è in vendita, quanto costa."/>
|
||||
<fs_scroll_list.columns name="land_impact" label="IMP" tool_tip="Il numero conteggiato rispetto al massimo per il lotto."/>
|
||||
<fs_scroll_list.columns name="price" label="Prezzo" tool_tip="Se l'oggetto è in vendita, quanto costa." width="45" />
|
||||
<fs_scroll_list.columns name="land_impact" label="Impatto" tool_tip="Il numero conteggiato rispetto al massimo per il lotto." width="50"/>
|
||||
<fs_scroll_list.columns name="prim_count" label="Prim" tool_tip="Numero di prim che formano l'oggetto."/>
|
||||
<fs_scroll_list.columns name="owner" label="Prop"/>
|
||||
<fs_scroll_list.columns name="owner" label="Proprietario"/>
|
||||
<fs_scroll_list.columns name="group" label="Gruppo" tool_tip="Gruppo associato all'oggetto."/>
|
||||
<fs_scroll_list.columns name="creator" label="Creatore"/>
|
||||
<fs_scroll_list.columns name="last_owner" label="Prop prec" tool_tip="Ultimo proprietario."/>
|
||||
<fs_scroll_list.columns name="last_owner" label="Proprietario Precedente" tool_tip="Ultimo proprietario."/>
|
||||
</fs_scroll_list>
|
||||
<button name="Refresh" label="Ricarica"/>
|
||||
<text name="counter">
|
||||
elencati | in corso | totali
|
||||
</text>
|
||||
<check_box name="beacons" label="Mostra fari"/>
|
||||
<check_box name="beacons" label="Mostra marcatori" left_pad="170"/>
|
||||
</panel>
|
||||
<panel label="Trova" name="area_search_find_panel" >
|
||||
<text name="name_label">
|
||||
|
|
@ -43,21 +43,21 @@
|
|||
Creatore:
|
||||
</text>
|
||||
<text name="last_owner_label">
|
||||
Proprietario precedente:
|
||||
Proprietario Precedente:
|
||||
</text>
|
||||
<check_box name="regular_expression" label="Usa RegEx"/>
|
||||
<check_box name="regular_expression" label="Usa espressioni regolari"/>
|
||||
<button name="search" label="Cerca"/>
|
||||
<button name="clear" label="Pulisci"/>
|
||||
</panel>
|
||||
<panel name="area_search_filter_panel" label="Filtra">
|
||||
<text name="only_list">
|
||||
Elenca solo oggetti che sono:
|
||||
Elenca solo gli oggetti che sono:
|
||||
</text>
|
||||
<check_box name="filter_locked" label="Bloccati"/>
|
||||
<check_box name="filter_physical" label="Fisici"/>
|
||||
<check_box name="filter_phantom" label="Fantasma"/>
|
||||
<check_box name="filter_temporary" label="Temporanei"/>
|
||||
<check_box name="filter_attachment" label="Attaccati"/>
|
||||
<check_box name="filter_attachment" label="Indossati"/>
|
||||
<check_box name="filter_moap" label="Media condivisi"/>
|
||||
<check_box name="filter_perm_copy" label="Copiabili"/>
|
||||
<check_box name="filter_perm_modify" label="Modificabili"/>
|
||||
|
|
@ -86,12 +86,12 @@
|
|||
</text>
|
||||
<check_box name="filter_agent_parcel_only" label="Solo in questo lotto"/>
|
||||
<text name="only_list">
|
||||
Escludi oggetti che sono:
|
||||
Escludi gli oggetti che sono:
|
||||
</text>
|
||||
<check_box name="exclude_attachment" label="Attaccati"/>
|
||||
<check_box name="exclude_attachment" label="Indossati"/>
|
||||
<check_box name="exclude_physical" label="Fisici"/>
|
||||
<check_box name="exclude_temporary" label="Temporanei"/>
|
||||
<check_box name="exclude_childprim" label="Prim figli"/>
|
||||
<check_box name="exclude_childprim" label="Prim linkati"/>
|
||||
<check_box name="exclude_neighbor_region" label="Nelle regioni confinanti"/>
|
||||
<button name="apply" label="Applica"/>
|
||||
</panel>
|
||||
|
|
@ -104,11 +104,11 @@
|
|||
<check_box name="show_description" label="Descrizione"/>
|
||||
<check_box name="show_price" label="Prezzo"/>
|
||||
<check_box name="show_land_impact" label="Impatto"/>
|
||||
<check_box name="show_prim_count" label="Numero prim"/>
|
||||
<check_box name="show_prim_count" label="Prim"/>
|
||||
<check_box name="show_owner" label="Proprietario"/>
|
||||
<check_box name="show_group" label="Gruppo"/>
|
||||
<check_box name="show_creator" label="Creatore"/>
|
||||
<check_box name="show_last_owner" label="Ultimo proprietario"/>
|
||||
<check_box name="show_last_owner" label="Proprietario Precedente"/>
|
||||
</panel>
|
||||
<panel label="Avanzate" name="area_search_advanced_panel">
|
||||
<check_box name="double_click_touch" label="Doppio clic tocca oggetto"/>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="fs_asset_blacklist" title="Lista nera asset">
|
||||
<floater name="fs_asset_blacklist" title="Lista Nera (oggetti / avatar de-renderizzati e suoni bloccati)">
|
||||
<floater.string name="asset_object">
|
||||
Oggetti
|
||||
Oggetto
|
||||
</floater.string>
|
||||
<floater.string name="asset_texture">
|
||||
Texture
|
||||
</floater.string>
|
||||
<floater.string name="asset_sound">
|
||||
Suoni
|
||||
Suono
|
||||
</floater.string>
|
||||
<floater.string name="asset_resident">
|
||||
Residente
|
||||
Avatar
|
||||
</floater.string>
|
||||
<floater.string name="asset_unknown">
|
||||
Sconosciuto
|
||||
|
|
@ -24,6 +24,7 @@
|
|||
<floater.string name="DateFormatString">
|
||||
[day,datetime,local]/[mthnum,datetime,local]/[year,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
|
||||
</floater.string>
|
||||
<filter_editor label="Filtro lista nera" name="filter_input" />
|
||||
<fs_scroll_list name="result_list">
|
||||
<columns name="name" label="Nome"/>
|
||||
<columns name="region" label="Regione"/>
|
||||
|
|
@ -31,7 +32,9 @@
|
|||
<columns name="date" label="Data"/>
|
||||
<columns name="permanent" label="Permanente"/>
|
||||
</fs_scroll_list>
|
||||
<button name="remove_btn" label="Rimuovi selezione"/>
|
||||
<button name="remove_temp_btn" label="Canc. temporaneo"/>
|
||||
<button name="remove_btn" label="Rimuovi selezionato"/>
|
||||
<button name="remove_temp_btn" label="Rimuovi temporanei"/>
|
||||
<button name="play_btn" label="Play suono" tool_tip="Riproduci il suono selezionato; puoi riprodurre un solo suono alla volta." />
|
||||
<button name="stop_btn" label="Stop suono" tool_tip="Interrompi la riproduzione del suono corrente." />
|
||||
<button name="close_btn" label="Chiudi"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="avatarrendersettings" title="Impostazioni resa avatar">
|
||||
<floater name="avatarrendersettings" title="Impostazioni Resa Avatar">
|
||||
<floater.string name="av_render_never">
|
||||
Mai
|
||||
</floater.string>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="floater_blocklist" title="Oggetti e residenti bloccati">
|
||||
<panel name="panel_block_list_sidetray" label="Oggetti e residenti bloccati"/>
|
||||
<floater name="floater_blocklist" title="Oggetti / Residenti Bloccati">
|
||||
<panel name="panel_block_list_sidetray" label="Oggetti / Residenti Bloccati"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="fs_camera_floater_small" title="Controlli Fotocamera">
|
||||
<floater.string name="rotate_tooltip">
|
||||
Ruota la camera intorno all'inquadratura
|
||||
</floater.string>
|
||||
<floater.string name="zoom_tooltip">
|
||||
Avvicina la camera nell'inquadratura
|
||||
</floater.string>
|
||||
<floater.string name="move_tooltip">
|
||||
Muovi la camera su, giù, a sinistra e a destra
|
||||
</floater.string>
|
||||
<floater.string name="free_mode_title">
|
||||
Vista Oggetto
|
||||
</floater.string>
|
||||
<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="Orbita la camera intorno al centro focale"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="camera_zoom_layout_panel">
|
||||
<slider_bar name="zoom_slider" tool_tip="Zoom verso il centro focale"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="panel_track">
|
||||
<joystick_track name="cam_track_stick" tool_tip="Muovi la camera su, giù, a sinistra e a destra"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</panel>
|
||||
<panel name="buttons_view">
|
||||
<panel_camera_item name="front_view" tool_tip="Vista Frontale"/>
|
||||
<panel_camera_item name="group_view" tool_tip="Vista Laterale"/>
|
||||
<panel_camera_item name="rear_view" tool_tip="Vista Posteriore"/>
|
||||
</panel>
|
||||
<panel name="buttons">
|
||||
<panel_camera_item name="object_view" tool_tip="Vista Oggetto"/>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="Vista Mouselook"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="Ripristina vista"/>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -6,6 +6,6 @@
|
|||
<tab_container name="friends_and_groups">
|
||||
<panel label="Amici" name="friends_panel" />
|
||||
<panel label="Gruppi" name="groups_panel"/>
|
||||
<panel label="Set contatti" name="contact_sets_panel"/>
|
||||
<panel label="Set Contatti" name="contact_sets_panel"/>
|
||||
</tab_container>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -42,9 +42,15 @@
|
|||
<layout_panel name="lp_options_btn">
|
||||
<menu_button tool_tip="Opzioni chat" name="chat_options_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_search_btn">
|
||||
<button name="chat_search_btn" tool_tip="Cerca chat" />
|
||||
</layout_panel>
|
||||
<layout_panel name="support_panel">
|
||||
<check_box label="Specifica versione" name="FSSupportGroupChatPrefix_toggle" tool_tip="Aggiunge la versione del viewer e le info sulla modalità in testa ai messaggi inviati a questo gruppo; questo può aiutare il gruppo di supporto a diagnosticare i problemi e può migliorare l'accuratezza delle risposte"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="testing_panel">
|
||||
<check_box label="Specifica versione" name="FSSupportGroupChatPrefixTesting_toggle" tool_tip="Aggiungi la versione e la skin del viewer, il sistema operativo e lo stato RLVa davanti ai messaggi inviati da te a questo gruppo, il che aiuterà il team di supporto a diagnosticare correttamente i tuoi problemi e a migliorare la precisione nel rispondere alle tue domande. (questo è separato dai gruppi di supporto)" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<layout_stack name="chat_stack">
|
||||
<layout_panel name="panel_im_control_lp">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="money_tracker" title="Traccia transazioni">
|
||||
<floater name="money_tracker" title="Transazioni">
|
||||
<name_list name="payment_list">
|
||||
<name_list.columns name="time" label="Data" />
|
||||
<name_list.columns name="name" label="Nome" />
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="nearby_chat" title="Chat locale">
|
||||
<floater name="nearby_chat" title="Chat Locale">
|
||||
<floater.string name="chatbox_label">
|
||||
Alla chat locale
|
||||
Chat locale
|
||||
</floater.string>
|
||||
<layout_stack name="ls_control_panel">
|
||||
<layout_panel name="lp_translate_btn">
|
||||
|
|
@ -11,11 +11,14 @@
|
|||
<button tool_tip="Apri il log della chat locale" name="chat_history_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_history_muted_btn">
|
||||
<button tool_tip="Inserisci anche la chat bloccata nel log" name="chat_history_muted_btn"/>
|
||||
<button tool_tip="Mostra i messaggi bloccati nel log della chat locale" name="chat_history_muted_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_options_btn">
|
||||
<menu_button tool_tip="Opzioni chat" name="chat_options_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="lp_chat_search_btn">
|
||||
<button name="chat_search_btn" tool_tip="Cerca nella chat locale" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<layout_stack name="ls_chat">
|
||||
<layout_panel name="panel_im_control_lp">
|
||||
|
|
@ -28,15 +31,15 @@
|
|||
<layout_panel name="chat_layout_panel">
|
||||
<layout_stack name="input_panels">
|
||||
<layout_panel name="input_button_layout_panel">
|
||||
<spinner name="ChatChannel" tool_tip="Canale a cui mandare la chat. Abilitare in Preferenze -> Chat -> Scrittura -> Selezione canale nella barra chat"/>
|
||||
<spinner name="ChatChannel" tool_tip="Canale a cui inviare i messaggi. Abilitare in Preferenze -> Chat -> Scrittura -> Selezione canale nella barra chat"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="chat_type_layout_panel">
|
||||
<combo_box name="chat_type" tool_tip="sussurra = 10m, parla = 20m, grida = 100m">
|
||||
<combo_box name="chat_type" tool_tip="Sussurra = 10m, Parla = 20m, Grida = 100m">
|
||||
<combo_box.item name="chat_type_whisper" label="Sussurra"/>
|
||||
<combo_box.item name="chat_type_say" label="Parla"/>
|
||||
<combo_box.item name="chat_type_shout" label="Grida"/>
|
||||
</combo_box>
|
||||
<button label="Invia" name="send_chat" tool_tip="sussurra = 10m, parla = 20m, grida = 100m"/>
|
||||
<button label="Invia" name="send_chat" tool_tip="Sussurra = 10m, Parla = 20m, Grida = 100m"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -26,13 +26,10 @@
|
|||
<layout_panel name="lp1">
|
||||
<layout_stack name="bottom_bar_ls1">
|
||||
<layout_panel name="teleport_btn_lp">
|
||||
<button label="Teleport" name="teleport_btn" tool_tip="Teleport al punto selezionato"/>
|
||||
<button label="Teleport" name="teleport_btn" tool_tip="Teleport al luogo selezionato"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="map_btn_lp">
|
||||
<button label="Mappa" name="map_btn" tool_tip="Show the corresponding area on the World Map"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="edit_btn_lp">
|
||||
<button label="Modifica" name="edit_btn" tool_tip="Modifica questo segnaposto"/>
|
||||
<button label="Mappa" name="map_btn" tool_tip="Mostra il luogo selezionato sulla mappa"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="overflow_btn_lp">
|
||||
<menu_button name="overflow_btn" tool_tip="Mostra altre opzioni"/>
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="floater_fs_posestand" title="Posa eretta"/>
|
||||
<floater name="floater_fs_posestand" title="Pose Stand"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="floater_fs_protected_folders" title="Cartelle Protette">
|
||||
<floater.string name="UnknownFolder">
|
||||
(cartella sconosciuta)
|
||||
</floater.string>
|
||||
<panel name="buttons_panel">
|
||||
<filter_editor label="Filtro cartelle protette" name="filter_input" />
|
||||
<button name="remove_btn" tool_tip="Rimuovi dalla lista delle cartelle protette" />
|
||||
</panel>
|
||||
<panel name="panel_fs_protected_folders">
|
||||
<scroll_list name="folder_list">
|
||||
<scroll_list.columns label="Nome" name="name" />
|
||||
</scroll_list>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -28,11 +28,11 @@
|
|||
Copertura: [COVERCHARGE]
|
||||
</floater.string>
|
||||
<tab_container name="ls_tabs">
|
||||
<panel label="Cerca web" name="panel_ls_web" />
|
||||
<panel label="Web" name="panel_ls_web" />
|
||||
<panel label="Persone" name="panel_ls_people" />
|
||||
<panel label="Gruppi" name="panel_ls_groups" />
|
||||
<panel label="Luoghi" name="panel_ls_places" />
|
||||
<panel label="Vendite terreno" name="panel_ls_land" />
|
||||
<panel label="Vendita Terreni" name="panel_ls_land" />
|
||||
<panel label="Eventi" name="panel_ls_events" />
|
||||
<panel label="Inserzioni" name="panel_ls_classifieds" />
|
||||
</tab_container>
|
||||
|
|
@ -41,14 +41,15 @@
|
|||
<text_editor name="aux1" value="Campo info aggiuntive 1" />
|
||||
<text_editor name="aux2" value="Campo info aggiuntive 2" />
|
||||
<text_editor name="location" value="Info sul luogo" />
|
||||
<button label="Apri profilo" name="people_profile_btn"/>
|
||||
<button label="Manda IM" name="people_message_btn"/>
|
||||
<button label="Aggiungi amico" name="people_friend_btn"/>
|
||||
<button label="Apri profilo" name="group_profile_btn"/>
|
||||
<button label="Entra in chat" name="group_message_btn"/>
|
||||
<button label="Aggiungi gruppo" name="group_join_btn"/>
|
||||
<text_editor name="desc" value="Apri questa porta con la chiave dell'immaginazione. Al di là c'è un'altra dimensione: una dimensione del suono, una dimensione della vista, una dimensione della mente. Ti stai spostando in una terra di ombra e di sostanza, di cose e di idee; sei appena entrato nella Twilight Zone. Quello che stai per vedere è reale; i contendenti sullo schermo non sono attori. Sono veri cittadini che, dopo aver depositato le loro pretese in un vero e proprio tribunale per le controversie di modesta entità, sono stati persuasi a depositare lì le loro cause e a farli insediare qui, in questo foro... il Tribunale del Popolo." />
|
||||
<button label="Profilo" name="people_profile_btn"/>
|
||||
<button label="Invia IM" name="people_message_btn"/>
|
||||
<button label="Aggiungi Amico" name="people_friend_btn"/>
|
||||
<button label="Profilo" name="group_profile_btn"/>
|
||||
<button label="Entra in Chat" name="group_message_btn"/>
|
||||
<button label="Entra nel Gruppo" name="group_join_btn"/>
|
||||
<button label="Teleport" name="teleport_btn"/>
|
||||
<button label="Mostra in mappa" name="map_btn"/>
|
||||
<button label="Mappa" name="map_btn"/>
|
||||
<button label="Promemoria" name="event_reminder_btn"/>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue