merge with STORM-105 and viewer-development

master
Merov Linden 2010-11-10 22:39:11 -08:00
commit 0e07758b54
164 changed files with 1732 additions and 1655 deletions

View File

@ -712,6 +712,8 @@ Thraxis Epsilon
VWR-383
tiamat bingyi
CT-246
Tofu Buzzard
STORM-546
TraductoresAnonimos Alter
CT-324
Tue Torok

View File

@ -55,7 +55,6 @@ set(llcommon_SOURCE_FILES
llevents.cpp
lleventtimer.cpp
llfasttimer_class.cpp
llmetricperformancetester.cpp
llfile.cpp
llfindlocale.cpp
llfixedbuffer.cpp
@ -71,6 +70,7 @@ set(llcommon_SOURCE_FILES
llmemorystream.cpp
llmemtype.cpp
llmetrics.cpp
llmetricperformancetester.cpp
llmortician.cpp
lloptioninterface.cpp
llptrto.cpp
@ -161,7 +161,6 @@ set(llcommon_HEADER_FILES
llextendedstatus.h
llfasttimer.h
llfasttimer_class.h
llmetricperformancetester.h
llfile.h
llfindlocale.h
llfixedbuffer.h
@ -188,6 +187,7 @@ set(llcommon_HEADER_FILES
llmemorystream.h
llmemtype.h
llmetrics.h
llmetricperformancetester.h
llmortician.h
llnametable.h
lloptioninterface.h

View File

@ -52,7 +52,7 @@ void LLMetricPerformanceTesterBasic::cleanClass()
/*static*/
BOOL LLMetricPerformanceTesterBasic::addTester(LLMetricPerformanceTesterBasic* tester)
{
llassert_always(tester != NULL);
llassert_always(tester != NULL);
std::string name = tester->getTesterName() ;
if (getTester(name))
{
@ -67,6 +67,7 @@ BOOL LLMetricPerformanceTesterBasic::addTester(LLMetricPerformanceTesterBasic* t
/*static*/
LLMetricPerformanceTesterBasic* LLMetricPerformanceTesterBasic::getTester(std::string name)
{
// Check for the requested metric name
name_tester_map_t::iterator found_it = sTesterMap.find(name) ;
if (found_it != sTesterMap.end())
{
@ -74,13 +75,21 @@ LLMetricPerformanceTesterBasic* LLMetricPerformanceTesterBasic::getTester(std::s
}
return NULL ;
}
/*static*/
// Return TRUE if this metric is requested or if the general default "catch all" metric is requested
BOOL LLMetricPerformanceTesterBasic::isMetricLogRequested(std::string name)
{
return (LLFastTimer::sMetricLog && ((LLFastTimer::sLogName == name) || (LLFastTimer::sLogName == DEFAULT_METRIC_NAME)));
}
//----------------------------------------------------------------------------------------------
// LLMetricPerformanceTesterBasic : Tester instance methods
//----------------------------------------------------------------------------------------------
LLMetricPerformanceTesterBasic::LLMetricPerformanceTesterBasic(std::string name) :
mName(name),
mName(name),
mCount(0)
{
if (mName == std::string())
@ -110,7 +119,7 @@ void LLMetricPerformanceTesterBasic::postOutputTestResults(LLSD* sd)
void LLMetricPerformanceTesterBasic::outputTestResults()
{
LLSD sd;
preOutputTestResults(&sd) ;
outputTestRecord(&sd) ;
postOutputTestResults(&sd) ;
@ -124,43 +133,43 @@ void LLMetricPerformanceTesterBasic::addMetric(std::string str)
/*virtual*/
void LLMetricPerformanceTesterBasic::analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current)
{
resetCurrentCount() ;
resetCurrentCount() ;
std::string currentLabel = getCurrentLabelName();
BOOL in_base = (*base).has(currentLabel) ;
BOOL in_current = (*current).has(currentLabel) ;
std::string current_label = getCurrentLabelName();
BOOL in_base = (*base).has(current_label) ;
BOOL in_current = (*current).has(current_label) ;
while(in_base || in_current)
{
LLSD::String label = currentLabel ;
if(in_base && in_current)
{
*os << llformat("%s\n", label.c_str()) ;
while(in_base || in_current)
{
LLSD::String label = current_label ;
for(U32 index = 0 ; index < mMetricStrings.size() ; index++)
{
switch((*current)[label][ mMetricStrings[index] ].type())
{
case LLSD::TypeInteger:
compareTestResults(os, mMetricStrings[index],
(S32)((*base)[label][ mMetricStrings[index] ].asInteger()), (S32)((*current)[label][ mMetricStrings[index] ].asInteger())) ;
break ;
case LLSD::TypeReal:
compareTestResults(os, mMetricStrings[index],
(F32)((*base)[label][ mMetricStrings[index] ].asReal()), (F32)((*current)[label][ mMetricStrings[index] ].asReal())) ;
break;
default:
llerrs << "unsupported metric " << mMetricStrings[index] << " LLSD type: " << (S32)(*current)[label][ mMetricStrings[index] ].type() << llendl ;
}
}
}
if(in_base && in_current)
{
*os << llformat("%s\n", label.c_str()) ;
incrementCurrentCount();
currentLabel = getCurrentLabelName();
in_base = (*base).has(currentLabel) ;
in_current = (*current).has(currentLabel) ;
}
for(U32 index = 0 ; index < mMetricStrings.size() ; index++)
{
switch((*current)[label][ mMetricStrings[index] ].type())
{
case LLSD::TypeInteger:
compareTestResults(os, mMetricStrings[index],
(S32)((*base)[label][ mMetricStrings[index] ].asInteger()), (S32)((*current)[label][ mMetricStrings[index] ].asInteger())) ;
break ;
case LLSD::TypeReal:
compareTestResults(os, mMetricStrings[index],
(F32)((*base)[label][ mMetricStrings[index] ].asReal()), (F32)((*current)[label][ mMetricStrings[index] ].asReal())) ;
break;
default:
llerrs << "unsupported metric " << mMetricStrings[index] << " LLSD type: " << (S32)(*current)[label][ mMetricStrings[index] ].type() << llendl ;
}
}
}
incrementCurrentCount();
current_label = getCurrentLabelName();
in_base = (*base).has(current_label) ;
in_current = (*current).has(current_label) ;
}
}
/*virtual*/
@ -182,12 +191,12 @@ void LLMetricPerformanceTesterBasic::compareTestResults(std::ofstream* os, std::
//----------------------------------------------------------------------------------------------
LLMetricPerformanceTesterWithSession::LLMetricPerformanceTesterWithSession(std::string name) :
LLMetricPerformanceTesterBasic(name),
mBaseSessionp(NULL),
mCurrentSessionp(NULL)
LLMetricPerformanceTesterBasic(name),
mBaseSessionp(NULL),
mCurrentSessionp(NULL)
{
}
LLMetricPerformanceTesterWithSession::~LLMetricPerformanceTesterWithSession()
{
if (mBaseSessionp)
@ -205,33 +214,33 @@ LLMetricPerformanceTesterWithSession::~LLMetricPerformanceTesterWithSession()
/*virtual*/
void LLMetricPerformanceTesterWithSession::analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current)
{
// Load the base session
resetCurrentCount() ;
mBaseSessionp = loadTestSession(base) ;
// Load the current session
resetCurrentCount() ;
mCurrentSessionp = loadTestSession(current) ;
if (!mBaseSessionp || !mCurrentSessionp)
{
llerrs << "Error loading test sessions." << llendl ;
}
// Compare
compareTestSessions(os) ;
// Release memory
if (mBaseSessionp)
{
delete mBaseSessionp ;
mBaseSessionp = NULL ;
}
if (mCurrentSessionp)
{
delete mCurrentSessionp ;
mCurrentSessionp = NULL ;
}
// Load the base session
resetCurrentCount() ;
mBaseSessionp = loadTestSession(base) ;
// Load the current session
resetCurrentCount() ;
mCurrentSessionp = loadTestSession(current) ;
if (!mBaseSessionp || !mCurrentSessionp)
{
llerrs << "Error loading test sessions." << llendl ;
}
// Compare
compareTestSessions(os) ;
// Release memory
if (mBaseSessionp)
{
delete mBaseSessionp ;
mBaseSessionp = NULL ;
}
if (mCurrentSessionp)
{
delete mCurrentSessionp ;
mCurrentSessionp = NULL ;
}
}

View File

@ -27,6 +27,8 @@
#ifndef LL_METRICPERFORMANCETESTER_H
#define LL_METRICPERFORMANCETESTER_H
const std::string DEFAULT_METRIC_NAME("metric");
/**
* @class LLMetricPerformanceTesterBasic
* @brief Performance Metric Base Class
@ -35,114 +37,121 @@ class LL_COMMON_API LLMetricPerformanceTesterBasic
{
public:
/**
* @brief Creates a basic tester instance.
* @param[in] name - Unique string identifying this tester instance.
*/
* @brief Creates a basic tester instance.
* @param[in] name - Unique string identifying this tester instance.
*/
LLMetricPerformanceTesterBasic(std::string name);
virtual ~LLMetricPerformanceTesterBasic();
/**
* @return Returns true if the instance has been added to the tester map.
* Need to be tested after creation of a tester instance so to know if the tester is correctly handled.
* A tester might not be added to the map if another tester with the same name already exists.
*/
BOOL isValid() const { return mValidInstance; }
* @return Returns true if the instance has been added to the tester map.
* Need to be tested after creation of a tester instance so to know if the tester is correctly handled.
* A tester might not be added to the map if another tester with the same name already exists.
*/
BOOL isValid() const { return mValidInstance; }
/**
* @brief Write a set of test results to the log LLSD.
*/
* @brief Write a set of test results to the log LLSD.
*/
void outputTestResults() ;
/**
* @brief Compare the test results.
* By default, compares the test results against the baseline one by one, item by item,
* in the increasing order of the LLSD record counter, starting from the first one.
*/
* @brief Compare the test results.
* By default, compares the test results against the baseline one by one, item by item,
* in the increasing order of the LLSD record counter, starting from the first one.
*/
virtual void analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current) ;
/**
* @return Returns the number of the test metrics in this tester instance.
*/
* @return Returns the number of the test metrics in this tester instance.
*/
S32 getNumberOfMetrics() const { return mMetricStrings.size() ;}
/**
* @return Returns the metric name at index
* @param[in] index - Index on the list of metrics managed by this tester instance.
*/
* @return Returns the metric name at index
* @param[in] index - Index on the list of metrics managed by this tester instance.
*/
std::string getMetricName(S32 index) const { return mMetricStrings[index] ;}
protected:
/**
* @return Returns the name of this tester instance.
*/
* @return Returns the name of this tester instance.
*/
std::string getTesterName() const { return mName ;}
/**
* @brief Insert a new metric to be managed by this tester instance.
* @param[in] str - Unique string identifying the new metric.
*/
* @brief Insert a new metric to be managed by this tester instance.
* @param[in] str - Unique string identifying the new metric.
*/
void addMetric(std::string str) ;
/**
* @brief Compare test results, provided in 2 flavors: compare integers and compare floats.
* @param[out] os - Formatted output string holding the compared values.
* @param[in] metric_string - Name of the metric.
* @param[in] v_base - Base value of the metric.
* @param[in] v_current - Current value of the metric.
*/
* @brief Compare test results, provided in 2 flavors: compare integers and compare floats.
* @param[out] os - Formatted output string holding the compared values.
* @param[in] metric_string - Name of the metric.
* @param[in] v_base - Base value of the metric.
* @param[in] v_current - Current value of the metric.
*/
virtual void compareTestResults(std::ofstream* os, std::string metric_string, S32 v_base, S32 v_current) ;
virtual void compareTestResults(std::ofstream* os, std::string metric_string, F32 v_base, F32 v_current) ;
/**
* @brief Reset internal record count. Count starts with 1.
*/
* @brief Reset internal record count. Count starts with 1.
*/
void resetCurrentCount() { mCount = 1; }
/**
* @brief Increment internal record count.
*/
* @brief Increment internal record count.
*/
void incrementCurrentCount() { mCount++; }
/**
* @return Returns the label to be used for the current count. It's "TesterName"-"Count".
*/
std::string getCurrentLabelName() const { return llformat("%s-%d", mName.c_str(), mCount) ;}
/**
* @brief Write a test record to the LLSD. Implementers need to overload this method.
* @param[out] sd - The LLSD record to store metric data into.
*/
* @return Returns the label to be used for the current count. It's "TesterName"-"Count".
*/
std::string getCurrentLabelName() const { return llformat("%s-%d", mName.c_str(), mCount) ;}
/**
* @brief Write a test record to the LLSD. Implementers need to overload this method.
* @param[out] sd - The LLSD record to store metric data into.
*/
virtual void outputTestRecord(LLSD* sd) = 0 ;
private:
void preOutputTestResults(LLSD* sd) ;
void postOutputTestResults(LLSD* sd) ;
std::string mName ; // Name of this tester instance
S32 mCount ; // Current record count
BOOL mValidInstance; // TRUE if the instance is managed by the map
std::string mName ; // Name of this tester instance
S32 mCount ; // Current record count
BOOL mValidInstance; // TRUE if the instance is managed by the map
std::vector< std::string > mMetricStrings ; // Metrics strings
// Static members managing the collection of testers
public:
// Map of all the tester instances in use
// Map of all the tester instances in use
typedef std::map< std::string, LLMetricPerformanceTesterBasic* > name_tester_map_t;
static name_tester_map_t sTesterMap ;
/**
* @return Returns a pointer to the tester
* @param[in] name - Name of the tester instance queried.
*/
* @return Returns a pointer to the tester
* @param[in] name - Name of the tester instance queried.
*/
static LLMetricPerformanceTesterBasic* getTester(std::string name) ;
/**
* @return Returns TRUE if there's a tester defined, FALSE otherwise.
*/
* @return Returns TRUE if that metric *or* the default catch all metric has been requested to be logged
* @param[in] name - Name of the tester queried.
*/
static BOOL isMetricLogRequested(std::string name);
/**
* @return Returns TRUE if there's a tester defined, FALSE otherwise.
*/
static BOOL hasMetricPerformanceTesters() { return !sTesterMap.empty() ;}
/**
* @brief Delete all testers and reset the tester map
*/
* @brief Delete all testers and reset the tester map
*/
static void cleanClass() ;
private:
// Add a tester to the map. Returns false if adding fails.
static BOOL addTester(LLMetricPerformanceTesterBasic* tester) ;
// Add a tester to the map. Returns false if adding fails.
static BOOL addTester(LLMetricPerformanceTesterBasic* tester) ;
};
/**
@ -153,42 +162,42 @@ class LL_COMMON_API LLMetricPerformanceTesterWithSession : public LLMetricPerfor
{
public:
/**
* @param[in] name - Unique string identifying this tester instance.
*/
* @param[in] name - Unique string identifying this tester instance.
*/
LLMetricPerformanceTesterWithSession(std::string name);
virtual ~LLMetricPerformanceTesterWithSession();
/**
* @brief Compare the test results.
* This will be loading the base and current sessions and compare them using the virtual
* abstract methods loadTestSession() and compareTestSessions()
*/
* @brief Compare the test results.
* This will be loading the base and current sessions and compare them using the virtual
* abstract methods loadTestSession() and compareTestSessions()
*/
virtual void analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current) ;
protected:
/**
* @class LLMetricPerformanceTesterWithSession::LLTestSession
* @brief Defines an interface for the two abstract virtual functions loadTestSession() and compareTestSessions()
*/
class LLTestSession
{
public:
virtual ~LLTestSession() ;
};
/**
* @brief Convert an LLSD log into a test session.
* @param[in] log - The LLSD record
* @return Returns the record as a test session
*/
* @class LLMetricPerformanceTesterWithSession::LLTestSession
* @brief Defines an interface for the two abstract virtual functions loadTestSession() and compareTestSessions()
*/
class LL_COMMON_API LLTestSession
{
public:
virtual ~LLTestSession() ;
};
/**
* @brief Convert an LLSD log into a test session.
* @param[in] log - The LLSD record
* @return Returns the record as a test session
*/
virtual LLMetricPerformanceTesterWithSession::LLTestSession* loadTestSession(LLSD* log) = 0;
/**
* @brief Compare the base session and the target session. Assumes base and current sessions have been loaded.
* @param[out] os - The comparison result as a standard stream
*/
* @brief Compare the base session and the target session. Assumes base and current sessions have been loaded.
* @param[out] os - The comparison result as a standard stream
*/
virtual void compareTestSessions(std::ofstream* os) = 0;
LLTestSession* mBaseSessionp;
LLTestSession* mCurrentSessionp;
};

View File

@ -67,14 +67,15 @@ LLImageJ2C::LLImageJ2C() : LLImageFormatted(IMG_CODEC_J2C),
mDataSizes[i] = 0;
}
if (LLFastTimer::sMetricLog && !LLImageJ2C::sTesterp && ((LLFastTimer::sLogName == sTesterName) || (LLFastTimer::sLogName == "metric")))
// If that test log has ben requested but not yet created, create it
if (LLMetricPerformanceTesterBasic::isMetricLogRequested(sTesterName) && !LLMetricPerformanceTesterBasic::getTester(sTesterName))
{
LLImageJ2C::sTesterp = new LLImageCompressionTester() ;
if (!LLImageJ2C::sTesterp->isValid())
{
delete LLImageJ2C::sTesterp;
LLImageJ2C::sTesterp = NULL;
}
sTesterp = new LLImageCompressionTester() ;
if (!sTesterp->isValid())
{
delete sTesterp;
sTesterp = NULL;
}
}
}
@ -148,7 +149,7 @@ BOOL LLImageJ2C::decode(LLImageRaw *raw_imagep, F32 decode_time)
// Returns TRUE to mean done, whether successful or not.
BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 first_channel, S32 max_channel_count )
{
LLTimer elapsed;
LLTimer elapsed;
LLMemType mt1(mMemType);
BOOL res = TRUE;
@ -187,19 +188,20 @@ BOOL LLImageJ2C::decodeChannels(LLImageRaw *raw_imagep, F32 decode_time, S32 fir
LLImage::setLastError(mLastError);
}
if (LLImageJ2C::sTesterp)
{
// Decompression stat gathering
// Note that we *do not* take into account the decompression failures data so we night overestimate the time spent processing
// Always add the decompression time to the stat
LLImageJ2C::sTesterp->updateDecompressionStats(elapsed.getElapsedTimeF32()) ;
if (res)
{
// The whole data stream is finally decompressed when res is returned as TRUE
LLImageJ2C::sTesterp->updateDecompressionStats(this->getDataSize(), raw_imagep->getDataSize()) ;
}
}
LLImageCompressionTester* tester = (LLImageCompressionTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
// Decompression stat gathering
// Note that we *do not* take into account the decompression failures data so we might overestimate the time spent processing
// Always add the decompression time to the stat
tester->updateDecompressionStats(elapsed.getElapsedTimeF32()) ;
if (res)
{
// The whole data stream is finally decompressed when res is returned as TRUE
tester->updateDecompressionStats(this->getDataSize(), raw_imagep->getDataSize()) ;
}
}
return res;
}
@ -213,7 +215,7 @@ BOOL LLImageJ2C::encode(const LLImageRaw *raw_imagep, F32 encode_time)
BOOL LLImageJ2C::encode(const LLImageRaw *raw_imagep, const char* comment_text, F32 encode_time)
{
LLTimer elapsed;
LLTimer elapsed;
LLMemType mt1(mMemType);
resetLastError();
BOOL res = mImpl->encodeImpl(*this, *raw_imagep, comment_text, encode_time, mReversible);
@ -222,21 +224,21 @@ BOOL LLImageJ2C::encode(const LLImageRaw *raw_imagep, const char* comment_text,
LLImage::setLastError(mLastError);
}
if (LLImageJ2C::sTesterp)
{
// Compression stat gathering
// Note that we *do not* take into account the compression failures cases so we night overestimate the time spent processing
// Always add the compression time to the stat
LLImageJ2C::sTesterp->updateCompressionStats(elapsed.getElapsedTimeF32()) ;
if (res)
{
// The whole data stream is finally compressed when res is returned as TRUE
LLImageJ2C::sTesterp->updateCompressionStats(this->getDataSize(), raw_imagep->getDataSize()) ;
}
}
LLImageCompressionTester* tester = (LLImageCompressionTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
// Compression stat gathering
// Note that we *do not* take into account the compression failures cases so we night overestimate the time spent processing
// Always add the compression time to the stat
tester->updateCompressionStats(elapsed.getElapsedTimeF32()) ;
if (res)
{
// The whole data stream is finally compressed when res is returned as TRUE
tester->updateCompressionStats(this->getDataSize(), raw_imagep->getDataSize()) ;
}
}
return res;
}
@ -459,15 +461,15 @@ LLImageCompressionTester::LLImageCompressionTester() : LLMetricPerformanceTester
addMetric("Perf Compression (kB/s)");
mRunBytesInDecompression = 0;
mRunBytesInCompression = 0;
mRunBytesInCompression = 0;
mTotalBytesInDecompression = 0;
mTotalBytesOutDecompression = 0;
mTotalBytesInCompression = 0;
mTotalBytesOutCompression = 0;
mTotalBytesInDecompression = 0;
mTotalBytesOutDecompression = 0;
mTotalBytesInCompression = 0;
mTotalBytesOutCompression = 0;
mTotalTimeDecompression = 0.0f;
mTotalTimeCompression = 0.0f;
mTotalTimeDecompression = 0.0f;
mTotalTimeCompression = 0.0f;
}
LLImageCompressionTester::~LLImageCompressionTester()
@ -478,13 +480,13 @@ LLImageCompressionTester::~LLImageCompressionTester()
//virtual
void LLImageCompressionTester::outputTestRecord(LLSD *sd)
{
std::string currentLabel = getCurrentLabelName();
std::string currentLabel = getCurrentLabelName();
F32 decompressionPerf = 0.0f;
F32 compressionPerf = 0.0f;
F32 decompressionRate = 0.0f;
F32 compressionRate = 0.0f;
F32 totalkBInDecompression = (F32)(mTotalBytesInDecompression) / 1000.0;
F32 totalkBOutDecompression = (F32)(mTotalBytesOutDecompression) / 1000.0;
F32 totalkBInCompression = (F32)(mTotalBytesInCompression) / 1000.0;
@ -506,56 +508,56 @@ void LLImageCompressionTester::outputTestRecord(LLSD *sd)
{
compressionRate = totalkBInCompression / totalkBOutCompression;
}
(*sd)[currentLabel]["Time Decompression (s)"] = (LLSD::Real)mTotalTimeDecompression;
(*sd)[currentLabel]["Volume In Decompression (kB)"] = (LLSD::Real)totalkBInDecompression;
(*sd)[currentLabel]["Volume Out Decompression (kB)"]= (LLSD::Real)totalkBOutDecompression;
(*sd)[currentLabel]["Decompression Ratio (x:1)"] = (LLSD::Real)decompressionRate;
(*sd)[currentLabel]["Perf Decompression (kB/s)"] = (LLSD::Real)decompressionPerf;
(*sd)[currentLabel]["Time Compression (s)"] = (LLSD::Real)mTotalTimeCompression;
(*sd)[currentLabel]["Volume In Compression (kB)"] = (LLSD::Real)totalkBInCompression;
(*sd)[currentLabel]["Volume Out Compression (kB)"] = (LLSD::Real)totalkBOutCompression;
(*sd)[currentLabel]["Compression Ratio (x:1)"] = (LLSD::Real)compressionRate;
(*sd)[currentLabel]["Compression Ratio (x:1)"] = (LLSD::Real)compressionRate;
(*sd)[currentLabel]["Perf Compression (kB/s)"] = (LLSD::Real)compressionPerf;
}
void LLImageCompressionTester::updateCompressionStats(const F32 deltaTime)
{
mTotalTimeCompression += deltaTime;
mTotalTimeCompression += deltaTime;
}
void LLImageCompressionTester::updateCompressionStats(const S32 bytesCompress, const S32 bytesRaw)
{
mTotalBytesInCompression += bytesRaw;
mRunBytesInCompression += bytesRaw;
mTotalBytesOutCompression += bytesCompress;
if (mRunBytesInCompression > (1000000))
{
// Output everything
outputTestResults();
// Reset the compression data of the run
mRunBytesInCompression = 0;
}
mTotalBytesInCompression += bytesRaw;
mRunBytesInCompression += bytesRaw;
mTotalBytesOutCompression += bytesCompress;
if (mRunBytesInCompression > (1000000))
{
// Output everything
outputTestResults();
// Reset the compression data of the run
mRunBytesInCompression = 0;
}
}
void LLImageCompressionTester::updateDecompressionStats(const F32 deltaTime)
{
mTotalTimeDecompression += deltaTime;
mTotalTimeDecompression += deltaTime;
}
void LLImageCompressionTester::updateDecompressionStats(const S32 bytesIn, const S32 bytesOut)
{
mTotalBytesInDecompression += bytesIn;
mRunBytesInDecompression += bytesIn;
mTotalBytesOutDecompression += bytesOut;
if (mRunBytesInDecompression > (1000000))
{
// Output everything
outputTestResults();
// Reset the decompression data of the run
mRunBytesInDecompression = 0;
}
mTotalBytesInDecompression += bytesIn;
mRunBytesInDecompression += bytesIn;
mTotalBytesOutDecompression += bytesOut;
if (mRunBytesInDecompression > (1000000))
{
// Output everything
outputTestResults();
// Reset the decompression data of the run
mRunBytesInDecompression = 0;
}
}
//----------------------------------------------------------------------------------------------

View File

@ -74,13 +74,11 @@ public:
static std::string getEngineInfo();
// Image compression/decompression tester
static LLImageCompressionTester* sTesterp ;
protected:
friend class LLImageJ2CImpl;
friend class LLImageJ2COJ;
friend class LLImageJ2CKDU;
friend class LLImageCompressionTester;
void decodeFailed();
void updateRawDiscardLevel();
@ -94,6 +92,9 @@ protected:
BOOL mReversible;
LLImageJ2CImpl *mImpl;
std::string mLastError;
// Image compression/decompression tester
static LLImageCompressionTester* sTesterp;
};
// Derive from this class to implement JPEG2000 decoding

View File

@ -565,29 +565,25 @@ std::string LLCacheName::buildLegacyName(const std::string& complete_name)
}
std::string username = complete_name.substr(open_paren);
boost::regex complete_name_regex("( \\()([a-z0-9]+)(.[a-z]+)*(\\))");
boost::match_results<std::string::const_iterator> name_results;
if (!boost::regex_match(username, name_results, complete_name_regex)) return complete_name;
boost::regex complete_name_regex("( \\()([a-z0-9]+)(.[a-z]+)*(\\))");
boost::match_results<std::string::const_iterator> name_results;
if (!boost::regex_match(username, name_results, complete_name_regex)) return complete_name;
std::string legacy_name = name_results[2];
// capitalize the first letter
std::string cap_letter = legacy_name.substr(0, 1);
LLStringUtil::toUpper(cap_letter);
legacy_name = cap_letter + legacy_name.substr(1);
if (name_results[3].matched)
{
legacy_name = cap_letter + legacy_name.substr(1);
if (name_results[3].matched)
{
std::string last_name = name_results[3];
std::string cap_letter = last_name.substr(1, 1);
LLStringUtil::toUpper(cap_letter);
last_name = cap_letter + last_name.substr(2);
legacy_name = legacy_name + " " + last_name;
}
else
{
legacy_name = legacy_name + " Resident";
}
last_name = cap_letter + last_name.substr(2);
legacy_name = legacy_name + " " + last_name;
}
return legacy_name;
}

View File

@ -456,8 +456,7 @@ BOOL LLAccordionCtrlTab::handleMouseDown(S32 x, S32 y, MASK mask)
{
if(y >= (getRect().getHeight() - HEADER_HEIGHT) )
{
LLAccordionCtrlTabHeader* header = getChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
header->setFocus(true);
mHeader->setFocus(true);
changeOpenClose(getDisplayChildren());
//reset stored state
@ -509,10 +508,9 @@ void LLAccordionCtrlTab::setAccordionView(LLView* panel)
std::string LLAccordionCtrlTab::getTitle() const
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if (header)
if (mHeader)
{
return header->getTitle();
return mHeader->getTitle();
}
else
{
@ -522,57 +520,51 @@ std::string LLAccordionCtrlTab::getTitle() const
void LLAccordionCtrlTab::setTitle(const std::string& title, const std::string& hl)
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if (header)
if (mHeader)
{
header->setTitle(title, hl);
mHeader->setTitle(title, hl);
}
}
void LLAccordionCtrlTab::setTitleFontStyle(std::string style)
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if (header)
if (mHeader)
{
header->setTitleFontStyle(style);
mHeader->setTitleFontStyle(style);
}
}
void LLAccordionCtrlTab::setTitleColor(LLUIColor color)
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if (header)
if (mHeader)
{
header->setTitleColor(color);
mHeader->setTitleColor(color);
}
}
boost::signals2::connection LLAccordionCtrlTab::setFocusReceivedCallback(const focus_signal_t::slot_type& cb)
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if (header)
if (mHeader)
{
return header->setFocusReceivedCallback(cb);
return mHeader->setFocusReceivedCallback(cb);
}
return boost::signals2::connection();
}
boost::signals2::connection LLAccordionCtrlTab::setFocusLostCallback(const focus_signal_t::slot_type& cb)
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if (header)
if (mHeader)
{
return header->setFocusLostCallback(cb);
return mHeader->setFocusLostCallback(cb);
}
return boost::signals2::connection();
}
void LLAccordionCtrlTab::setSelected(bool is_selected)
{
LLAccordionCtrlTabHeader* header = findChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if (header)
if (mHeader)
{
header->setSelected(is_selected);
mHeader->setSelected(is_selected);
}
}
@ -776,8 +768,7 @@ S32 LLAccordionCtrlTab::notify(const LLSD& info)
BOOL LLAccordionCtrlTab::handleKey(KEY key, MASK mask, BOOL called_from_parent)
{
LLAccordionCtrlTabHeader* header = getChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
if( !header->hasFocus() )
if( !mHeader->hasFocus() )
return LLUICtrl::handleKey(key, mask, called_from_parent);
if ( (key == KEY_RETURN )&& mask == MASK_NONE)
@ -830,15 +821,19 @@ BOOL LLAccordionCtrlTab::handleKey(KEY key, MASK mask, BOOL called_from_parent)
void LLAccordionCtrlTab::showAndFocusHeader()
{
LLAccordionCtrlTabHeader* header = getChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME);
header->setFocus(true);
header->setSelected(mSelectionEnabled);
mHeader->setFocus(true);
mHeader->setSelected(mSelectionEnabled);
LLRect screen_rc;
LLRect selected_rc = header->getRect();
LLRect selected_rc = mHeader->getRect();
localRectToScreen(selected_rc, &screen_rc);
notifyParent(LLSD().with("scrollToShowRect",screen_rc.getValue()));
// This call to notifyParent() is intended to deliver "scrollToShowRect" command
// to the parent LLAccordionCtrl so by calling it from the direct parent of this
// accordion tab (assuming that the parent is an LLAccordionCtrl) the calls chain
// is shortened and messages from inside the collapsed tabs are avoided.
// See STORM-536.
getParent()->notifyParent(LLSD().with("scrollToShowRect",screen_rc.getValue()));
}
void LLAccordionCtrlTab::storeOpenCloseState()
{

View File

@ -61,6 +61,9 @@
// use this to control "jumping" behavior when Ctrl-Tabbing
const S32 TABBED_FLOATER_OFFSET = 0;
// static
F32 LLFloater::sActiveFloaterTransparency = 0.0f;
F32 LLFloater::sInactiveFloaterTransparency = 0.0f;
std::string LLFloater::sButtonNames[BUTTON_COUNT] =
{
@ -200,6 +203,21 @@ void LLFloater::initClass()
{
sButtonToolTips[i] = LLTrans::getString( sButtonToolTipsIndex[i] );
}
LLControlVariable* ctrl = LLUI::sSettingGroups["config"]->getControl("ActiveFloaterTransparency").get();
if (ctrl)
{
ctrl->getSignal()->connect(boost::bind(&LLFloater::updateActiveFloaterTransparency));
sActiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("ActiveFloaterTransparency");
}
ctrl = LLUI::sSettingGroups["config"]->getControl("InactiveFloaterTransparency").get();
if (ctrl)
{
ctrl->getSignal()->connect(boost::bind(&LLFloater::updateInactiveFloaterTransparency));
sInactiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("InactiveFloaterTransparency");
}
}
// defaults for floater param block pulled from widgets/floater.xml
@ -347,6 +365,18 @@ void LLFloater::layoutDragHandle()
updateTitleButtons();
}
// static
void LLFloater::updateActiveFloaterTransparency()
{
sActiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("ActiveFloaterTransparency");
}
// static
void LLFloater::updateInactiveFloaterTransparency()
{
sInactiveFloaterTransparency = LLUI::sSettingGroups["config"]->getF32("InactiveFloaterTransparency");
}
void LLFloater::addResizeCtrls()
{
// Resize bars (sides)
@ -1622,7 +1652,8 @@ void LLFloater::onClickCloseBtn()
// virtual
void LLFloater::draw()
{
F32 alpha = getDrawContext().mAlpha;
mCurrentTransparency = hasFocus() ? sActiveFloaterTransparency : sInactiveFloaterTransparency;
// draw background
if( isBackgroundVisible() )
{
@ -1653,12 +1684,12 @@ void LLFloater::draw()
if (image)
{
// We're using images for this floater's backgrounds
image->draw(getLocalRect(), overlay_color % alpha);
image->draw(getLocalRect(), overlay_color % mCurrentTransparency);
}
else
{
// We're not using images, use old-school flat colors
gl_rect_2d( left, top, right, bottom, color % alpha );
gl_rect_2d( left, top, right, bottom, color % mCurrentTransparency );
// draw highlight on title bar to indicate focus. RDW
if(hasFocus()
@ -1670,7 +1701,7 @@ void LLFloater::draw()
const LLFontGL* font = LLFontGL::getFontSansSerif();
LLRect r = getRect();
gl_rect_2d_offset_local(0, r.getHeight(), r.getWidth(), r.getHeight() - (S32)font->getLineHeight() - 1,
titlebar_focus_color % alpha, 0, TRUE);
titlebar_focus_color % mCurrentTransparency, 0, TRUE);
}
}
}
@ -1720,7 +1751,6 @@ void LLFloater::draw()
void LLFloater::drawShadow(LLPanel* panel)
{
F32 alpha = panel->getDrawContext().mAlpha;
S32 left = LLPANEL_BORDER_WIDTH;
S32 top = panel->getRect().getHeight() - LLPANEL_BORDER_WIDTH;
S32 right = panel->getRect().getWidth() - LLPANEL_BORDER_WIDTH;
@ -1737,7 +1767,7 @@ void LLFloater::drawShadow(LLPanel* panel)
shadow_color.mV[VALPHA] *= 0.5f;
}
gl_drop_shadow(left, top, right, bottom,
shadow_color % alpha,
shadow_color % mCurrentTransparency,
llround(shadow_offset));
}

View File

@ -341,6 +341,9 @@ private:
void addDragHandle();
void layoutDragHandle(); // repair layout
static void updateActiveFloaterTransparency();
static void updateInactiveFloaterTransparency();
public:
// Called when floater is opened, passes mKey
// Public so external views or floaters can watch for this floater opening
@ -408,6 +411,11 @@ private:
bool mDocked;
bool mTornOff;
F32 mCurrentTransparency;
static F32 sActiveFloaterTransparency;
static F32 sInactiveFloaterTransparency;
static LLMultiFloater* sHostp;
static BOOL sQuitting;
static std::string sButtonNames[BUTTON_COUNT];

View File

@ -64,7 +64,7 @@ LLNotificationForm::FormElementBase::FormElementBase()
LLNotificationForm::FormIgnore::FormIgnore()
: text("text"),
control("control"),
invert_control("invert_control", true),
invert_control("invert_control", false),
save_option("save_option", false)
{}
@ -194,7 +194,7 @@ LLNotificationForm::LLNotificationForm()
LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotificationForm::Params& p)
: mIgnore(IGNORE_NO),
mInvertSetting(true) // ignore settings by default mean true=show, false=ignore
mInvertSetting(false) // ignore settings by default mean true=show, false=ignore
{
if (p.ignore.isProvided())
{
@ -219,7 +219,7 @@ LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotifica
}
else
{
LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Ignore notification with this name", TRUE);
LLUI::sSettingGroups["ignores"]->declareBOOL(name, show_notification, "Show notification with this name", TRUE);
mIgnoreSetting = LLUI::sSettingGroups["ignores"]->getControl(name);
}
}
@ -357,15 +357,15 @@ LLControlVariablePtr LLNotificationForm::getIgnoreSetting()
bool LLNotificationForm::getIgnored()
{
bool ignored = false;
bool show = true;
if (mIgnore != LLNotificationForm::IGNORE_NO
&& mIgnoreSetting)
{
ignored = mIgnoreSetting->getValue().asBoolean();
if (mInvertSetting) ignored = !ignored;
show = mIgnoreSetting->getValue().asBoolean();
if (mInvertSetting) show = !show;
}
return ignored;
return !show;
}
void LLNotificationForm::setIgnored(bool ignored)
@ -373,7 +373,7 @@ void LLNotificationForm::setIgnored(bool ignored)
if (mIgnoreSetting)
{
if (mInvertSetting) ignored = !ignored;
mIgnoreSetting->setValue(ignored);
mIgnoreSetting->setValue(!ignored);
}
}

View File

@ -904,7 +904,7 @@ LLPanel *LLPanel::childGetVisiblePanelWithHelp()
child = *it;
// do we have a panel with a help topic?
LLPanel *panel = dynamic_cast<LLPanel *>(child);
if (panel && panel->getVisible() && !panel->getHelpTopic().empty())
if (panel && panel->isInVisibleChain() && !panel->getHelpTopic().empty())
{
return panel;
}

View File

@ -209,7 +209,13 @@ LLUrlEntryHTTPLabel::LLUrlEntryHTTPLabel()
std::string LLUrlEntryHTTPLabel::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
return getLabelFromWikiLink(url);
std::string label = getLabelFromWikiLink(url);
return (!LLUrlRegistry::instance().hasUrl(label)) ? label : getUrl(url);
}
std::string LLUrlEntryHTTPLabel::getTooltip(const std::string &string) const
{
return getUrl(string);
}
std::string LLUrlEntryHTTPLabel::getUrl(const std::string &string) const

View File

@ -133,6 +133,7 @@ class LLUrlEntryHTTPLabel : public LLUrlEntryBase
public:
LLUrlEntryHTTPLabel();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getTooltip(const std::string &string) const;
/*virtual*/ std::string getUrl(const std::string &string) const;
};

View File

@ -448,6 +448,18 @@ void LLScriptLibrary::init()
addFunction(10.f, 1.0f, dummy_func, "llSetPrimMediaParams", "i", "il");
addFunction(10.f, 1.0f, dummy_func, "llGetPrimMediaParams", "l", "il");
addFunction(10.f, 1.0f, dummy_func, "llClearPrimMedia", "i", "i");
addFunction(10.f, 0.f, dummy_func, "llSetLinkPrimitiveParamsFast", NULL, "il");
addFunction(10.f, 0.f, dummy_func, "llGetLinkPrimitiveParams", "l", "il");
addFunction(10.f, 0.f, dummy_func, "llLinkParticleSystem", NULL, "il");
addFunction(10.f, 0.f, dummy_func, "llSetLinkTextureAnim", NULL, "iiiiifff");
addFunction(10.f, 0.f, dummy_func, "llGetLinkNumberOfSides", "i", "i");
// IDEVO Name lookup calls, see lscript_avatar_names.h
addFunction(10.f, 0.f, dummy_func, "llGetUsername", "s", "k");
addFunction(10.f, 0.f, dummy_func, "llRequestUsername", "k", "k");
addFunction(10.f, 0.f, dummy_func, "llGetDisplayName", "s", "k");
addFunction(10.f, 0.f, dummy_func, "llRequestDisplayName", "k", "k");
// energy, sleep, dummy_func, name, return type, parameters, help text, gods-only

View File

@ -35,6 +35,17 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>ActiveFloaterTransparency</key>
<map>
<key>Comment</key>
<string>Transparency of active floaters (floaters that have focus)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.95</real>
</map>
<key>AdvanceSnapshot</key>
<map>
<key>Comment</key>
@ -1161,13 +1172,13 @@
<key>CacheNumberOfRegionsForObjects</key>
<map>
<key>Comment</key>
<string>Controls number of regions to be cached for objects, ranges from 16 to 128.</string>
<string>Controls number of regions to be cached for objects.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>128</integer>
<integer>20000</integer>
</map>
<key>CacheSize</key>
<map>
@ -3986,6 +3997,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>InactiveFloaterTransparency</key>
<map>
<key>Comment</key>
<string>Transparency of inactive floaters (floaters that have no focus)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.5</real>
</map>
<key>InBandwidth</key>
<map>
<key>Comment</key>

View File

@ -510,10 +510,10 @@ class LLFastTimerLogThread : public LLThread
public:
std::string mFile;
LLFastTimerLogThread(std::string& testName) : LLThread("fast timer log")
LLFastTimerLogThread(std::string& test_name) : LLThread("fast timer log")
{
std::string fileName = testName + std::string(".slp");
mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, fileName);
std::string file_name = test_name + std::string(".slp");
mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_name);
}
void run()
@ -1303,7 +1303,7 @@ bool LLAppViewer::cleanup()
{
// workaround for DEV-35406 crash on shutdown
LLEventPumps::instance().reset();
// remove any old breakpad minidump files from the log directory
if (! isError())
{
@ -1638,14 +1638,14 @@ bool LLAppViewer::cleanup()
{
llinfos << "Analyzing performance" << llendl;
std::string baselineName = LLFastTimer::sLogName + "_baseline.slp";
std::string currentName = LLFastTimer::sLogName + ".slp";
std::string reportName = LLFastTimer::sLogName + "_report.csv";
std::string baseline_name = LLFastTimer::sLogName + "_baseline.slp";
std::string current_name = LLFastTimer::sLogName + ".slp";
std::string report_name = LLFastTimer::sLogName + "_report.csv";
LLFastTimerView::doAnalysis(
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baselineName),
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, currentName),
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, reportName));
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name),
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, current_name),
gDirUtilp->getExpandedFilename(LL_PATH_LOGS, report_name));
}
LLMetricPerformanceTesterBasic::cleanClass() ;
@ -2113,16 +2113,16 @@ bool LLAppViewer::initConfiguration()
LLFastTimer::sMetricLog = TRUE ;
// '--logmetrics' can be specified with a named test metric argument so the data gathering is done only on that test
// In the absence of argument, every metric is gathered (makes for a rather slow run and hard to decipher report...)
std::string testName = clp.getOption("logmetrics")[0];
llinfos << "'--logmetrics' argument : " << testName << llendl;
if (testName == "")
{
llwarns << "No '--logmetrics' argument given, will output all metrics." << llendl;
LLFastTimer::sLogName = std::string("metric");
}
else
{
LLFastTimer::sLogName = testName;
std::string test_name = clp.getOption("logmetrics")[0];
llinfos << "'--logmetrics' argument : " << test_name << llendl;
if (test_name == "")
{
llwarns << "No '--logmetrics' argument given, will output all metrics to " << DEFAULT_METRIC_NAME << llendl;
LLFastTimer::sLogName = DEFAULT_METRIC_NAME;
}
else
{
LLFastTimer::sLogName = test_name;
}
}
@ -2164,7 +2164,7 @@ bool LLAppViewer::initConfiguration()
{
LLFastTimerView::sAnalyzePerformance = TRUE;
}
if (clp.hasOption("replaysession"))
{
LLAgentPilot::sReplaySession = TRUE;

View File

@ -167,7 +167,7 @@ public:
// mute/unmute the system's master audio
virtual void setMasterSystemAudioMute(bool mute);
virtual bool getMasterSystemAudioMute();
protected:
virtual bool initWindow(); // Initialize the viewer's window.
virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
@ -253,7 +253,7 @@ private:
// For performance and metric gathering
LLThread* mFastTimerLogThread;
// for tracking viewer<->region circuit death
bool mAgentRegionLastAlive;
LLUUID mAgentRegionLastID;

View File

@ -335,7 +335,7 @@ public:
LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
if(mSourceType != CHAT_SOURCE_AGENT)
if(mSourceType != CHAT_SOURCE_AGENT || mAvatarID.isNull())
icon->setDrawTooltip(false);
switch (mSourceType)

View File

@ -168,7 +168,6 @@ public:
LLFacePool(const U32 type);
virtual ~LLFacePool();
virtual void renderForSelect() = 0;
BOOL isDead() { return mReferences.empty(); }
virtual LLViewerTexture *getTexture();

View File

@ -743,79 +743,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
}
}
//-----------------------------------------------------------------------------
// renderForSelect()
//-----------------------------------------------------------------------------
void LLDrawPoolAvatar::renderForSelect()
{
if (mDrawFace.empty())
{
return;
}
const LLFace *facep = mDrawFace[0];
if (!facep->getDrawable())
{
return;
}
LLVOAvatar *avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get();
if (avatarp->isDead() || avatarp->mIsDummy || avatarp->mDrawable.isNull())
{
return;
}
S32 curr_shader_level = getVertexShaderLevel();
S32 name = avatarp->mDrawable->getVObj()->mGLName;
LLColor4U color((U8)(name >> 16), (U8)(name >> 8), (U8)name);
BOOL impostor = avatarp->isImpostor();
if (impostor)
{
gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
avatarp->renderImpostor(color);
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
return;
}
sVertexProgram = &gAvatarPickProgram;
if (curr_shader_level > 0)
{
gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
}
gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
gGL.setSceneBlendType(LLRender::BT_REPLACE);
glColor4ubv(color.mV);
if (curr_shader_level > 0) // for hardware blending
{
sRenderingSkinned = TRUE;
sVertexProgram->bind();
enable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
}
avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
// if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done
if (curr_shader_level > 0)
{
sRenderingSkinned = FALSE;
sVertexProgram->unbind();
disable_vertex_weighting(sVertexProgram->mAttribute[LLViewerShaderMgr::AVATAR_WEIGHT]);
}
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
// restore texture mode
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
//-----------------------------------------------------------------------------
// getDebugTexture()

View File

@ -64,7 +64,6 @@ public:
/*virtual*/ void endRenderPass(S32 pass);
/*virtual*/ void prerender();
/*virtual*/ void render(S32 pass = 0);
/*virtual*/ void renderForSelect();
/*virtual*/ S32 getNumDeferredPasses();
/*virtual*/ void beginDeferredPass(S32 pass);

View File

@ -95,6 +95,3 @@ void LLDrawPoolClouds::render(S32 pass)
}
void LLDrawPoolClouds::renderForSelect()
{
}

View File

@ -49,7 +49,6 @@ public:
/*virtual*/ void enqueue(LLFace *face);
/*virtual*/ void beginRenderPass(S32 pass);
/*virtual*/ void render(S32 pass = 0);
/*virtual*/ void renderForSelect();
};
#endif // LL_LLDRAWPOOLSKY_H

View File

@ -85,7 +85,3 @@ void LLDrawPoolGround::render(S32 pass)
glPopMatrix();
}
void LLDrawPoolGround::renderForSelect()
{
}

View File

@ -47,7 +47,6 @@ public:
/*virtual*/ void prerender();
/*virtual*/ void render(S32 pass = 0);
/*virtual*/ void renderForSelect();
};
#endif // LL_LLDRAWPOOLGROUND_H

View File

@ -143,10 +143,6 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)
}
}
void LLDrawPoolSky::renderForSelect()
{
}
void LLDrawPoolSky::endRenderPass( S32 pass )
{
}

View File

@ -58,7 +58,6 @@ public:
/*virtual*/ void prerender();
/*virtual*/ void render(S32 pass = 0);
/*virtual*/ void renderForSelect();
/*virtual*/ void endRenderPass(S32 pass);
void setSkyTex(LLSkyTex* const st) { mSkyTex = st; }

View File

@ -899,27 +899,6 @@ void LLDrawPoolTerrain::renderOwnership()
}
void LLDrawPoolTerrain::renderForSelect()
{
if (mDrawFace.empty())
{
return;
}
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
iter != mDrawFace.end(); iter++)
{
LLFace *facep = *iter;
if (!facep->getDrawable()->isDead() && (facep->getDrawable()->getVObj()->mGLName))
{
facep->renderForSelect(LLVertexBuffer::MAP_VERTEX);
}
}
}
void LLDrawPoolTerrain::dirtyTextures(const std::set<LLViewerFetchedTexture*>& textures)
{
LLViewerFetchedTexture* tex = LLViewerTextureManager::staticCastToFetchedTexture(mTexturep) ;

View File

@ -66,7 +66,6 @@ public:
/*virtual*/ void prerender();
/*virtual*/ void beginRenderPass( S32 pass );
/*virtual*/ void endRenderPass( S32 pass );
/*virtual*/ void renderForSelect();
/*virtual*/ void dirtyTextures(const std::set<LLViewerFetchedTexture*>& textures);
/*virtual*/ LLViewerTexture *getTexture();
/*virtual*/ LLViewerTexture *getDebugTexture();

View File

@ -183,68 +183,6 @@ void LLDrawPoolTree::endShadowPass(S32 pass)
}
void LLDrawPoolTree::renderForSelect()
{
if (mDrawFace.empty())
{
return;
}
LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f);
LLGLSObjectSelectAlpha gls_alpha;
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.setSceneBlendType(LLRender::BT_REPLACE);
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
if (gSavedSettings.getBOOL("RenderAnimateTrees"))
{
renderTree(TRUE);
}
else
{
gGL.getTexUnit(sDiffTex)->bind(mTexturep);
for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
iter != mDrawFace.end(); iter++)
{
LLFace *face = *iter;
LLDrawable *drawablep = face->getDrawable();
if (drawablep->isDead() || face->mVertexBuffer.isNull())
{
continue;
}
// Render each of the trees
LLVOTree *treep = (LLVOTree *)drawablep->getVObj().get();
LLColor4U color(255,255,255,255);
if (treep->mGLName != 0)
{
S32 name = treep->mGLName;
color = LLColor4U((U8)(name >> 16), (U8)(name >> 8), (U8)name, 255);
LLFacePool::LLOverrideFaceColor col(this, color);
face->mVertexBuffer->setBuffer(LLDrawPoolTree::VERTEX_DATA_MASK);
face->mVertexBuffer->drawRange(LLRender::TRIANGLES, 0, face->mVertexBuffer->getRequestedVerts()-1, face->mVertexBuffer->getRequestedIndices(), 0);
gPipeline.addTrianglesDrawn(face->mVertexBuffer->getRequestedIndices());
}
}
}
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
void LLDrawPoolTree::renderTree(BOOL selecting)
{
LLGLState normalize(GL_NORMALIZE, TRUE);

View File

@ -62,7 +62,6 @@ public:
/*virtual*/ void render(S32 pass = 0);
/*virtual*/ void endRenderPass( S32 pass );
/*virtual*/ S32 getNumPasses() { return 1; }
/*virtual*/ void renderForSelect();
/*virtual*/ BOOL verify() const;
/*virtual*/ LLViewerTexture *getTexture();
/*virtual*/ LLViewerTexture *getDebugTexture();

View File

@ -591,12 +591,6 @@ void LLDrawPoolWater::shade()
}
void LLDrawPoolWater::renderForSelect()
{
// Can't select water!
return;
}
LLViewerTexture *LLDrawPoolWater::getDebugTexture()
{
return LLViewerFetchedTexture::sSmokeImagep;

View File

@ -74,7 +74,6 @@ public:
/*virtual*/ S32 getNumPasses();
/*virtual*/ void render(S32 pass = 0);
/*virtual*/ void prerender();
/*virtual*/ void renderForSelect();
/*virtual*/ LLViewerTexture *getDebugTexture();
/*virtual*/ LLColor3 getDebugColor() const; // For AGP debug display

View File

@ -399,84 +399,6 @@ void LLFace::updateCenterAgent()
}
}
void LLFace::renderForSelect(U32 data_mask)
{
if(mDrawablep.isNull() || mVertexBuffer.isNull())
{
return;
}
LLSpatialGroup* group = mDrawablep->getSpatialGroup();
if (!group || group->isState(LLSpatialGroup::GEOM_DIRTY))
{
return;
}
if (mVObjp->mGLName)
{
S32 name = mVObjp->mGLName;
LLColor4U color((U8)(name >> 16), (U8)(name >> 8), (U8)name);
#if 0 // *FIX: Postponing this fix until we have texcoord pick info...
if (mTEOffset != -1)
{
color.mV[VALPHA] = (U8)(getTextureEntry()->getColor().mV[VALPHA] * 255.f);
}
#endif
glColor4ubv(color.mV);
if (!getPool())
{
switch (getPoolType())
{
case LLDrawPool::POOL_ALPHA:
gGL.getTexUnit(0)->bind(getTexture());
break;
default:
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
break;
}
}
mVertexBuffer->setBuffer(data_mask);
#if !LL_RELEASE_FOR_DOWNLOAD
LLGLState::checkClientArrays("", data_mask);
#endif
if (mTEOffset != -1)
{
// mask off high 4 bits (16 total possible faces)
color.mV[0] &= 0x0f;
color.mV[0] |= (mTEOffset & 0x0f) << 4;
glColor4ubv(color.mV);
}
if (mIndicesCount)
{
if (isState(GLOBAL))
{
if (mDrawablep->getVOVolume())
{
glPushMatrix();
glMultMatrixf((float*) mDrawablep->getRegion()->mRenderMatrix.mMatrix);
mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
glPopMatrix();
}
else
{
mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
}
}
else
{
glPushMatrix();
glMultMatrixf((float*)getRenderMatrix().mMatrix);
mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
glPopMatrix();
}
}
}
}
void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
{
if (mDrawablep->getSpatialGroup() == NULL)

View File

@ -173,7 +173,6 @@ public:
void updateCenterAgent(); // Update center when xform has changed.
void renderSelectedUV();
void renderForSelect(U32 data_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0);
void renderSelected(LLViewerTexture *image, const LLColor4 &color);
F32 getKey() const { return mDistance; }

View File

@ -1184,12 +1184,12 @@ void LLFastTimerView::outputAllMetrics()
{
if (LLMetricPerformanceTesterBasic::hasMetricPerformanceTesters())
{
for (LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin();
iter != LLMetricPerformanceTesterBasic::sTesterMap.end(); ++iter)
{
LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second);
tester->outputTestResults();
}
for (LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin();
iter != LLMetricPerformanceTesterBasic::sTesterMap.end(); ++iter)
{
LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second);
tester->outputTestResults();
}
}
}

View File

@ -37,7 +37,7 @@ public:
static BOOL sAnalyzePerformance;
static void outputAllMetrics();
static void outputAllMetrics();
static void doAnalysis(std::string baseline, std::string target, std::string output);
private:

View File

@ -414,6 +414,9 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
{
*accept = ACCEPT_NO;
LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
if (LLToolDragAndDrop::SOURCE_AGENT != source && LLToolDragAndDrop::SOURCE_LIBRARY != source) return FALSE;
switch (cargo_type)
{

View File

@ -803,7 +803,7 @@ void LLFloaterPreference::buildPopupLists()
LLScrollListItem* item = NULL;
bool show_popup = formp->getIgnored();
bool show_popup = !formp->getIgnored();
if (!show_popup)
{
if (ignore == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
@ -1155,7 +1155,7 @@ void LLFloaterPreference::onClickDisablePopup()
for (itor = items.begin(); itor != items.end(); ++itor)
{
LLNotificationTemplatePtr templatep = LLNotifications::instance().getTemplate(*(std::string*)((*itor)->getUserdata()));
templatep->mForm->setIgnored(false);
templatep->mForm->setIgnored(true);
}
buildPopupLists();
@ -1169,7 +1169,7 @@ void LLFloaterPreference::resetAllIgnored()
{
if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
{
iter->second->mForm->setIgnored(true);
iter->second->mForm->setIgnored(false);
}
}
}
@ -1182,7 +1182,7 @@ void LLFloaterPreference::setAllIgnored()
{
if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO)
{
iter->second->mForm->setIgnored(false);
iter->second->mForm->setIgnored(true);
}
}
}

View File

@ -1212,8 +1212,6 @@ LLViewerWindow::ESnapshotType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSna
type = LLViewerWindow::SNAPSHOT_TYPE_COLOR;
else if (id == "depth")
type = LLViewerWindow::SNAPSHOT_TYPE_DEPTH;
else if (id == "objects")
type = LLViewerWindow::SNAPSHOT_TYPE_OBJECT_ID;
return type;
}

View File

@ -147,6 +147,17 @@ void LLFloaterTopObjects::handle_land_reply(LLMessageSystem* msg, void** data)
}
void LLFloaterTopObjects::onAvatarNameCache(const LLUUID& agent_id,
const LLAvatarName& av_name,
LLSD element)
{
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("objects_list");
element["columns"][2]["value"] = av_name.getCompleteName();
list->addElement(element);
}
void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
{
U32 request_flags;
@ -171,6 +182,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
F32 mono_score = 0.f;
bool have_extended_data = false;
S32 public_urls = 0;
LLUUID owner_id;
msg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block);
msg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block);
@ -186,8 +198,10 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
msg->getF32("DataExtended", "MonoScore", mono_score, block);
msg->getS32(_PREHASH_ReportData,"PublicURLs",public_urls,block);
msg->getUUID("DataExtended","OwnerID",owner_id,block);
}
LLSD element;
element["id"] = task_id;
@ -238,8 +252,16 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
columns[6]["font"] = "SANSSERIF";
}
element["columns"] = columns;
list->addElement(element);
if (!owner_id.isNull())
{
LLAvatarNameCache::get(owner_id, boost::bind(&LLFloaterTopObjects::onAvatarNameCache, this, _1, _2, element));
}
else
{
list->addElement(element);
}
mObjectListData.append(element);
mObjectListIDs.push_back(task_id);

View File

@ -29,8 +29,11 @@
#include "llfloater.h"
class LLAvatarName;
class LLUICtrl;
#include <boost/signals2.hpp> // boost::signals2::trackable
class LLFloaterTopObjects : public LLFloater
{
friend class LLFloaterReg;
@ -51,6 +54,8 @@ public:
static void setMode(U32 mode);
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name, LLSD element);
private:
LLFloaterTopObjects(const LLSD& key);
~LLFloaterTopObjects();

View File

@ -2429,6 +2429,7 @@ S32 LLFolderView::notify(const LLSD& info)
{
setFocus(true);
selectFirstItem();
scrollToShowSelection();
return 1;
}
@ -2436,6 +2437,7 @@ S32 LLFolderView::notify(const LLSD& info)
{
setFocus(true);
selectLastItem();
scrollToShowSelection();
return 1;
}
}

View File

@ -663,35 +663,27 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
x2 = x1 + PARCEL_GRID_STEP_METERS;
y2 = y1;
if (gRenderForSelect)
{
LLColor4U color((U8)(GL_NAME_PARCEL_WALL >> 16), (U8)(GL_NAME_PARCEL_WALL >> 8), (U8)GL_NAME_PARCEL_WALL);
gGL.color4ubv(color.mV);
}
dy = (pos_y - y1) + DIST_OFFSET;
if (pos_x < x1)
dx = pos_x - x1;
else if (pos_x > x2)
dx = pos_x - x2;
else
dx = 0;
dist = dx*dx+dy*dy;
if (dist < MIN_DIST_SQ)
alpha = MAX_ALPHA;
else if (dist > MAX_DIST_SQ)
alpha = 0.0f;
else
{
dy = (pos_y - y1) + DIST_OFFSET;
if (pos_x < x1)
dx = pos_x - x1;
else if (pos_x > x2)
dx = pos_x - x2;
else
dx = 0;
dist = dx*dx+dy*dy;
if (dist < MIN_DIST_SQ)
alpha = MAX_ALPHA;
else if (dist > MAX_DIST_SQ)
alpha = 0.0f;
else
alpha = 30/dist;
alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
gGL.color4f(1.f, 1.f, 1.f, alpha);
}
alpha = 30/dist;
alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
gGL.color4f(1.f, 1.f, 1.f, alpha);
if ((pos_y - y1) < 0) direction = SOUTH_MASK;
else direction = NORTH_MASK;
@ -709,35 +701,27 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
x2 = x1;
y2 = y1 + PARCEL_GRID_STEP_METERS;
if (gRenderForSelect)
{
LLColor4U color((U8)(GL_NAME_PARCEL_WALL >> 16), (U8)(GL_NAME_PARCEL_WALL >> 8), (U8)GL_NAME_PARCEL_WALL);
gGL.color4ubv(color.mV);
}
dx = (pos_x - x1) + DIST_OFFSET;
if (pos_y < y1)
dy = pos_y - y1;
else if (pos_y > y2)
dy = pos_y - y2;
else
dy = 0;
dist = dx*dx+dy*dy;
if (dist < MIN_DIST_SQ)
alpha = MAX_ALPHA;
else if (dist > MAX_DIST_SQ)
alpha = 0.0f;
else
{
dx = (pos_x - x1) + DIST_OFFSET;
if (pos_y < y1)
dy = pos_y - y1;
else if (pos_y > y2)
dy = pos_y - y2;
else
dy = 0;
alpha = 30/dist;
alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
dist = dx*dx+dy*dy;
if (dist < MIN_DIST_SQ)
alpha = MAX_ALPHA;
else if (dist > MAX_DIST_SQ)
alpha = 0.0f;
else
alpha = 30/dist;
alpha = llclamp(alpha, 0.0f, MAX_ALPHA);
gGL.color4f(1.f, 1.f, 1.f, alpha);
}
gGL.color4f(1.f, 1.f, 1.f, alpha);
if ((pos_x - x1) > 0) direction = WEST_MASK;
else direction = EAST_MASK;

View File

@ -201,11 +201,6 @@ void LLHUDIcon::render()
renderIcon(FALSE);
}
void LLHUDIcon::renderForSelect()
{
renderIcon(TRUE);
}
BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3* intersection)
{
if (mHidden)

View File

@ -52,7 +52,6 @@ friend class LLHUDObject;
public:
/*virtual*/ void render();
/*virtual*/ void renderForSelect();
/*virtual*/ void markDead();
/*virtual*/ F32 getDistance() const { return mDistance; }

View File

@ -283,27 +283,6 @@ void LLHUDObject::renderAll()
LLVertexBuffer::unbind();
}
// static
void LLHUDObject::renderAllForSelect()
{
LLHUDObject *hud_objp;
hud_object_list_t::iterator object_it;
for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); )
{
hud_object_list_t::iterator cur_it = object_it++;
hud_objp = (*cur_it);
if (hud_objp->getNumRefs() == 1)
{
sHUDObjects.erase(cur_it);
}
else if (hud_objp->isVisible())
{
hud_objp->renderForSelect();
}
}
}
// static
void LLHUDObject::renderAllForTimer()
{

View File

@ -104,7 +104,6 @@ protected:
~LLHUDObject();
virtual void render() = 0;
virtual void renderForSelect() {};
virtual void renderForTimer() {};
protected:

View File

@ -113,36 +113,21 @@ void LLHUDText::render()
if (!mOnHUDAttachment && sDisplayText)
{
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
renderText(FALSE);
renderText();
}
}
void LLHUDText::renderForSelect()
{
if (!mOnHUDAttachment)
{
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
renderText(TRUE);
}
}
void LLHUDText::renderText(BOOL for_select)
void LLHUDText::renderText()
{
if (!mVisible || mHidden)
{
return;
}
// don't pick text
if (for_select)
{
return;
}
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
LLGLState gls_blend(GL_BLEND, for_select ? FALSE : TRUE);
LLGLState gls_alpha(GL_ALPHA_TEST, for_select ? FALSE : TRUE);
LLGLState gls_blend(GL_BLEND, TRUE);
LLGLState gls_alpha(GL_ALPHA_TEST, TRUE);
LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f);
F32 alpha_factor = 1.f;
@ -594,7 +579,7 @@ void LLHUDText::renderAllHUD()
for (text_it = sVisibleHUDTextObjects.begin(); text_it != sVisibleHUDTextObjects.end(); ++text_it)
{
(*text_it)->renderText(FALSE);
(*text_it)->renderText();
}
}

View File

@ -128,8 +128,7 @@ protected:
LLHUDText(const U8 type);
/*virtual*/ void render();
/*virtual*/ void renderForSelect();
void renderText(BOOL for_select);
void renderText();
static void updateAll();
S32 getMaxLines();

View File

@ -95,6 +95,7 @@ BOOL gForceRenderLandFence = FALSE;
BOOL gDisplaySwapBuffers = FALSE;
BOOL gDepthDirty = FALSE;
BOOL gResizeScreenTexture = FALSE;
BOOL gWindowResized = FALSE;
BOOL gSnapshot = FALSE;
U32 gRecentFrameCount = 0; // number of 'recent' frames
@ -218,22 +219,15 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLMemType mt_render(LLMemType::MTYPE_RENDER);
LLFastTimer t(FTM_RENDER);
if (gResizeScreenTexture)
{ //skip render on frames where screen texture is resizing
if (gWindowResized)
{ //skip render on frames where window has been resized
gGL.flush();
if (!for_snapshot)
{
glClear(GL_COLOR_BUFFER_BIT);
gViewerWindow->mWindow->swapBuffers();
}
gResizeScreenTexture = FALSE;
glClear(GL_COLOR_BUFFER_BIT);
gViewerWindow->mWindow->swapBuffers();
gPipeline.resizeScreenTexture();
if (!for_snapshot)
{
return;
}
gResizeScreenTexture = FALSE;
gWindowResized = FALSE;
return;
}
if (LLPipeline::sRenderDeferred)
@ -666,11 +660,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLVertexBuffer::clientCopy(0.016);
}
//if (gResizeScreenTexture)
//{
// gResizeScreenTexture = FALSE;
// gPipeline.resizeScreenTexture();
//}
if (gResizeScreenTexture)
{
gResizeScreenTexture = FALSE;
gPipeline.resizeScreenTexture();
}
gGL.setColorMask(true, true);
glClearColor(0,0,0,0);

View File

@ -40,5 +40,6 @@ extern BOOL gTeleportDisplay;
extern LLFrameTimer gTeleportDisplayTimer;
extern BOOL gForceRenderLandFence;
extern BOOL gResizeScreenTexture;
extern BOOL gWindowResized;
#endif // LL_LLVIEWERDISPLAY_H

View File

@ -257,7 +257,7 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass, BOOL is_dummy )
// if object is transparent, defer it, otherwise
// give the joint subclass a chance to draw itself
//----------------------------------------------------------------
if ( gRenderForSelect || is_dummy )
if ( is_dummy )
{
triangle_count += drawShape( pixelArea, first_pass, is_dummy );
}

View File

@ -61,7 +61,6 @@ extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB;
extern PFNGLWEIGHTFVARBPROC glWeightfvARB;
extern PFNGLVERTEXBLENDARBPROC glVertexBlendARB;
#endif
extern BOOL gRenderForSelect;
static LLPointer<LLVertexBuffer> sRenderBuffer = NULL;
static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX |
@ -515,17 +514,14 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
//----------------------------------------------------------------
// setup current color
//----------------------------------------------------------------
if (!gRenderForSelect)
{
if (is_dummy)
glColor4fv(LLVOAvatar::getDummyColor().mV);
else
glColor4fv(mColor.mV);
}
if (is_dummy)
glColor4fv(LLVOAvatar::getDummyColor().mV);
else
glColor4fv(mColor.mV);
stop_glerror();
LLGLSSpecular specular(LLColor4(1.f,1.f,1.f,1.f), gRenderForSelect ? 0.0f : mShiny && !(mFace->getPool()->getVertexShaderLevel() > 0));
LLGLSSpecular specular(LLColor4(1.f,1.f,1.f,1.f), mShiny && !(mFace->getPool()->getVertexShaderLevel() > 0));
//----------------------------------------------------------------
// setup current texture
@ -580,19 +576,6 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy)
gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT));
}
if (gRenderForSelect)
{
if (isTransparent())
{
gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
}
else
{
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
mFace->mVertexBuffer->setBuffer(sRenderMask);
U32 start = mMesh->mFaceVertexOffset;

View File

@ -1199,7 +1199,6 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam
const BOOL auto_open =
gSavedSettings.getBOOL("ShowInInventory") && // don't open if showininventory is false
!(asset_type == LLAssetType::AT_CALLINGCARD) && // don't open if it's a calling card
!(item && (item->getInventoryType() == LLInventoryType::IT_ATTACHMENT)) && // don't open if it's an item that's an attachment
!from_name.empty(); // don't open if it's not from anyone.
LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
if(active_panel)

View File

@ -1274,34 +1274,6 @@ void LLViewerObjectList::generatePickList(LLCamera &camera)
}
}
void LLViewerObjectList::renderPickList(const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent)
{
gRenderForSelect = TRUE;
gPipeline.renderForSelect(mSelectPickList, render_transparent, screen_rect);
//
// Render pass for selected objects
//
gGL.color4f(1,1,1,1);
gViewerWindow->renderSelections( TRUE, pick_parcel_wall, FALSE );
//fix for DEV-19335. Don't pick hud objects when customizing avatar (camera mode doesn't play nice with nametags).
if (!gAgentCamera.cameraCustomizeAvatar())
{
// render pickable ui elements, like names, etc.
LLHUDObject::renderAllForSelect();
}
gGL.flush();
LLVertexBuffer::unbind();
gRenderForSelect = FALSE;
//llinfos << "Rendered " << count << " for select" << llendl;
//llinfos << "Took " << pick_timer.getElapsedTimeF32()*1000.f << "ms to pick" << llendl;
}
LLViewerObject *LLViewerObjectList::getSelectedObject(const U32 object_id)
{
std::set<LLViewerObject*>::iterator pick_it;

View File

@ -104,7 +104,6 @@ public:
// Selection related stuff
void generatePickList(LLCamera &camera);
void renderPickList(const LLRect& screen_rect, BOOL pick_parcel_wall, BOOL render_transparent);
LLViewerObject *getSelectedObject(const U32 object_id);

View File

@ -342,14 +342,14 @@ void LLViewerTextureManager::init()
LLViewerTexture::initClass() ;
if (LLFastTimer::sMetricLog && !LLViewerTextureManager::sTesterp && ((LLFastTimer::sLogName == sTesterName) || (LLFastTimer::sLogName == "metric")))
if (LLMetricPerformanceTesterBasic::isMetricLogRequested(sTesterName) && !LLMetricPerformanceTesterBasic::getTester(sTesterName))
{
LLViewerTextureManager::sTesterp = new LLTexturePipelineTester() ;
if (!LLViewerTextureManager::sTesterp->isValid())
{
delete LLViewerTextureManager::sTesterp;
LLViewerTextureManager::sTesterp = NULL;
}
sTesterp = new LLTexturePipelineTester() ;
if (!sTesterp->isValid())
{
delete sTesterp;
sTesterp = NULL;
}
}
}
@ -414,9 +414,10 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
{
sCurrentTime = gFrameTimeSeconds ;
if(LLViewerTextureManager::sTesterp)
LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
LLViewerTextureManager::sTesterp->update() ;
tester->update() ;
}
LLViewerMediaTexture::updateClass() ;
@ -609,9 +610,10 @@ bool LLViewerTexture::bindDefaultImage(S32 stage)
//check if there is cached raw image and switch to it if possible
switchToCachedImage() ;
if(LLViewerTextureManager::sTesterp)
LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
LLViewerTextureManager::sTesterp->updateGrayTextureBinding() ;
tester->updateGrayTextureBinding() ;
}
return res;
}
@ -1072,9 +1074,10 @@ BOOL LLViewerTexture::isLargeImage()
//virtual
void LLViewerTexture::updateBindStatsForTester()
{
if(LLViewerTextureManager::sTesterp)
LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
LLViewerTextureManager::sTesterp->updateTextureBindingStats(this) ;
tester->updateTextureBindingStats(this) ;
}
}
@ -1855,10 +1858,11 @@ bool LLViewerFetchedTexture::updateFetch()
// We may have data ready regardless of whether or not we are finished (e.g. waiting on write)
if (mRawImage.notNull())
{
if(LLViewerTextureManager::sTesterp)
LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
mIsFetched = TRUE ;
LLViewerTextureManager::sTesterp->updateTextureLoadingStats(this, mRawImage, LLAppViewer::getTextureFetch()->isFromLocalCache(mID)) ;
tester->updateTextureLoadingStats(this, mRawImage, LLAppViewer::getTextureFetch()->isFromLocalCache(mID)) ;
}
mRawDiscardLevel = fetch_discard;
if ((mRawImage->getDataSize() > 0 && mRawDiscardLevel >= 0) &&
@ -3082,9 +3086,10 @@ void LLViewerLODTexture::scaleDown()
{
switchToCachedImage() ;
if(LLViewerTextureManager::sTesterp)
LLTexturePipelineTester* tester = (LLTexturePipelineTester*)LLMetricPerformanceTesterBasic::getTester(sTesterName);
if (tester)
{
LLViewerTextureManager::sTesterp->setStablizingTime() ;
tester->setStablizingTime() ;
}
}
}
@ -3621,7 +3626,7 @@ LLTexturePipelineTester::LLTexturePipelineTester() : LLMetricPerformanceTesterWi
LLTexturePipelineTester::~LLTexturePipelineTester()
{
LLViewerTextureManager::sTesterp = NULL ;
LLViewerTextureManager::sTesterp = NULL;
}
void LLTexturePipelineTester::update()
@ -3687,7 +3692,7 @@ void LLTexturePipelineTester::reset()
//virtual
void LLTexturePipelineTester::outputTestRecord(LLSD *sd)
{
std::string currentLabel = getCurrentLabelName();
std::string currentLabel = getCurrentLabelName();
(*sd)[currentLabel]["TotalBytesLoaded"] = (LLSD::Integer)mTotalBytesLoaded ;
(*sd)[currentLabel]["TotalBytesLoadedFromCache"] = (LLSD::Integer)mTotalBytesLoadedFromCache ;
(*sd)[currentLabel]["TotalBytesLoadedForLargeImage"] = (LLSD::Integer)mTotalBytesLoadedForLargeImage ;
@ -3874,7 +3879,7 @@ LLMetricPerformanceTesterWithSession::LLTestSession* LLTexturePipelineTester::lo
sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mTime = 0.f ;
//load a session
std::string currentLabel = getCurrentLabelName();
std::string currentLabel = getCurrentLabelName();
BOOL in_log = (*log).has(currentLabel) ;
while (in_log)
{
@ -3945,9 +3950,9 @@ LLMetricPerformanceTesterWithSession::LLTestSession* LLTexturePipelineTester::lo
sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mAveragePercentageBytesUsedPerSecond = 0.f ;
sessionp->mInstantPerformanceList[sessionp->mInstantPerformanceListCounter].mTime = 0.f ;
}
// Next label
// Next label
incrementCurrentCount() ;
currentLabel = getCurrentLabelName();
currentLabel = getCurrentLabelName();
in_log = (*log).has(currentLabel) ;
}

View File

@ -1863,6 +1863,8 @@ void LLViewerWindow::reshape(S32 width, S32 height)
return;
}
gWindowResized = TRUE;
// update our window rectangle
mWindowRectRaw.mRight = mWindowRectRaw.mLeft + width;
mWindowRectRaw.mTop = mWindowRectRaw.mBottom + height;
@ -4009,30 +4011,19 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
{
gDisplaySwapBuffers = FALSE;
gDepthDirty = TRUE;
if (type == SNAPSHOT_TYPE_OBJECT_ID)
{
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
LLViewerCamera::getInstance()->setZoomParameters(scale_factor, subimage_x+(subimage_y*llceil(scale_factor)));
setup3DRender();
gObjectList.renderPickList(gViewerWindow->getWindowRectScaled(), FALSE, FALSE);
const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor));
if (LLPipeline::sRenderDeferred)
{
display(do_rebuild, scale_factor, subfield, TRUE);
}
else
{
const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor));
if (LLPipeline::sRenderDeferred)
{
display(do_rebuild, scale_factor, subfield, TRUE);
}
else
{
display(do_rebuild, scale_factor, subfield, TRUE);
display(do_rebuild, scale_factor, subfield, TRUE);
// Required for showing the GUI in snapshots and performing bloom composite overlay
// Call even if show_ui is FALSE
render_ui(scale_factor, subfield);
}
render_ui(scale_factor, subfield);
}
S32 subimage_x_offset = llclamp(buffer_x_offset - (subimage_x * window_width), 0, window_width);
@ -4055,7 +4046,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot");
}
if (type == SNAPSHOT_TYPE_OBJECT_ID || type == SNAPSHOT_TYPE_COLOR)
if (type == SNAPSHOT_TYPE_COLOR)
{
glReadPixels(
subimage_x_offset, out_y + subimage_y_offset,
@ -4439,6 +4430,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message)
LLVOAvatar::restoreGL();
gResizeScreenTexture = TRUE;
gWindowResized = TRUE;
if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures())
{

View File

@ -316,8 +316,7 @@ public:
typedef enum
{
SNAPSHOT_TYPE_COLOR,
SNAPSHOT_TYPE_DEPTH,
SNAPSHOT_TYPE_OBJECT_ID
SNAPSHOT_TYPE_DEPTH
} ESnapshotType;
BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE,

View File

@ -54,7 +54,7 @@ LLViewerWindowListener::LLViewerWindowListener(LLViewerWindow* llviewerwindow):
// saveSnapshotArgs["type"] = LLSD::String();
add("saveSnapshot",
"Save screenshot: [\"filename\"], [\"width\"], [\"height\"], [\"showui\"], [\"rebuild\"], [\"type\"]\n"
"type: \"COLOR\", \"DEPTH\", \"OBJECT_ID\"\n"
"type: \"COLOR\", \"DEPTH\"\n"
"Post on [\"reply\"] an event containing [\"ok\"]",
&LLViewerWindowListener::saveSnapshot,
saveSnapshotArgs);
@ -71,7 +71,6 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const
#define tp(name) types[#name] = LLViewerWindow::SNAPSHOT_TYPE_##name
tp(COLOR);
tp(DEPTH);
tp(OBJECT_ID);
#undef tp
// Our add() call should ensure that the incoming LLSD does in fact
// contain our required arguments. Deal with the optional ones.

View File

@ -3992,7 +3992,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
// *NOTE: this is disabled (there is no UI for enabling sShowFootPlane) due
// to DEV-14477. the code is left here to aid in tracking down the cause
// of the crash in the future. -brad
if (!gRenderForSelect && sShowFootPlane && mDrawable.notNull())
if (sShowFootPlane && mDrawable.notNull())
{
LLVector3 slaved_pos = mDrawable->getPositionAgent();
LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]);

View File

@ -224,7 +224,6 @@ BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const
// Format string used to construct filename for the object cache
static const char OBJECT_CACHE_FILENAME[] = "objects_%d_%d.slc";
const U32 MAX_NUM_OBJECT_ENTRIES = 128 ;
const U32 NUM_ENTRIES_TO_PURGE = 16 ;
const char* object_cache_dirname = "objectcache";
const char* header_filename = "object.cache";
@ -296,9 +295,9 @@ void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version)
if (!mReadOnly)
{
LLFile::mkdir(mObjectCacheDirName);
}
mCacheSize = llclamp(size,
MAX_NUM_OBJECT_ENTRIES, NUM_ENTRIES_TO_PURGE);
}
mCacheSize = size;
mMetaInfo.mVersion = cache_version;
readCacheHeader();
@ -434,7 +433,7 @@ void LLVOCache::readCacheHeader()
HeaderEntryInfo* entry ;
mNumEntries = 0 ;
while(mNumEntries < MAX_NUM_OBJECT_ENTRIES)
while(mNumEntries < mCacheSize)
{
entry = new HeaderEntryInfo() ;
if(!checkRead(apr_file, entry, sizeof(HeaderEntryInfo)))
@ -487,10 +486,10 @@ void LLVOCache::writeCacheHeader()
}
mNumEntries = mHeaderEntryQueue.size() ;
if(mNumEntries < MAX_NUM_OBJECT_ENTRIES)
if(mNumEntries < mCacheSize)
{
HeaderEntryInfo* entry = new HeaderEntryInfo() ;
for(S32 i = mNumEntries ; i < MAX_NUM_OBJECT_ENTRIES ; i++)
for(U32 i = mNumEntries ; i < mCacheSize; i++)
{
//fill the cache with the default entry.
if(!checkWrite(apr_file, entry, sizeof(HeaderEntryInfo)))

View File

@ -130,8 +130,6 @@ static S32 sDelayedVBOEnable = 0;
BOOL gAvatarBacklight = FALSE;
BOOL gRenderForSelect = FALSE;
BOOL gDebugPipeline = FALSE;
LLPipeline gPipeline;
const LLMatrix4* gGLLastMatrix = NULL;
@ -3807,185 +3805,6 @@ void LLPipeline::renderDebug()
gGL.flush();
}
void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects, BOOL render_transparent, const LLRect& screen_rect)
{
assertInitialized();
gGL.setColorMask(true, false);
gPipeline.resetDrawOrders();
LLViewerCamera* camera = LLViewerCamera::getInstance();
for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
{
stateSort((*iter)->mDrawable, *camera);
}
LLMemType mt(LLMemType::MTYPE_PIPELINE_RENDER_SELECT);
glMatrixMode(GL_MODELVIEW);
LLGLSDefault gls_default;
LLGLSObjectSelect gls_object_select;
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE,GL_TRUE);
disableLights();
LLVertexBuffer::unbind();
//for each drawpool
LLGLState::checkStates();
LLGLState::checkTextureChannels();
LLGLState::checkClientArrays();
U32 last_type = 0;
// If we don't do this, we crash something on changing graphics settings
// from Medium -> Low, because we unload all the shaders and the
// draw pools aren't aware. I don't know if this has to be a separate
// loop before actual rendering. JC
for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
{
LLDrawPool *poolp = *iter;
if (poolp->isFacePool() && hasRenderType(poolp->getType()))
{
poolp->prerender();
}
}
for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
{
LLDrawPool *poolp = *iter;
if (poolp->isFacePool() && hasRenderType(poolp->getType()))
{
LLFacePool* face_pool = (LLFacePool*) poolp;
face_pool->renderForSelect();
LLVertexBuffer::unbind();
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
if (poolp->getType() != last_type)
{
last_type = poolp->getType();
LLGLState::checkStates();
LLGLState::checkTextureChannels();
LLGLState::checkClientArrays();
}
}
}
LLGLEnable alpha_test(GL_ALPHA_TEST);
if (render_transparent)
{
gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
}
else
{
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f);
}
gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
U32 prim_mask = LLVertexBuffer::MAP_VERTEX |
LLVertexBuffer::MAP_TEXCOORD0;
for (std::set<LLViewerObject*>::iterator i = objects.begin(); i != objects.end(); ++i)
{
LLViewerObject* vobj = *i;
LLDrawable* drawable = vobj->mDrawable;
if (vobj->isDead() ||
vobj->isHUDAttachment() ||
(LLSelectMgr::getInstance()->mHideSelectedObjects && vobj->isSelected()) ||
drawable->isDead() ||
!hasRenderType(drawable->getRenderType()))
{
continue;
}
for (S32 j = 0; j < drawable->getNumFaces(); ++j)
{
LLFace* facep = drawable->getFace(j);
if (!facep->getPool())
{
facep->renderForSelect(prim_mask);
}
}
}
// pick HUD objects
if (isAgentAvatarValid() && sShowHUDAttachments)
{
glh::matrix4f save_proj(glh_get_current_projection());
glh::matrix4f save_model(glh_get_current_modelview());
setup_hud_matrices(screen_rect);
for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
iter != gAgentAvatarp->mAttachmentPoints.end(); )
{
LLVOAvatar::attachment_map_t::iterator curiter = iter++;
LLViewerJointAttachment* attachment = curiter->second;
if (attachment->getIsHUDAttachment())
{
for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();
attachment_iter != attachment->mAttachedObjects.end();
++attachment_iter)
{
if (LLViewerObject* attached_object = (*attachment_iter))
{
LLDrawable* drawable = attached_object->mDrawable;
if (drawable->isDead())
{
continue;
}
for (S32 j = 0; j < drawable->getNumFaces(); ++j)
{
LLFace* facep = drawable->getFace(j);
if (!facep->getPool())
{
facep->renderForSelect(prim_mask);
}
}
//render child faces
LLViewerObject::const_child_list_t& child_list = attached_object->getChildren();
for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
iter != child_list.end(); iter++)
{
LLViewerObject* child = *iter;
LLDrawable* child_drawable = child->mDrawable;
for (S32 l = 0; l < child_drawable->getNumFaces(); ++l)
{
LLFace* facep = child_drawable->getFace(l);
if (!facep->getPool())
{
facep->renderForSelect(prim_mask);
}
}
}
}
}
}
}
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(save_proj.m);
glh_set_current_projection(save_proj);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(save_model.m);
glh_set_current_modelview(save_model);
}
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
LLVertexBuffer::unbind();
gGL.setColorMask(true, true);
}
void LLPipeline::rebuildPools()
{
LLMemType mt(LLMemType::MTYPE_PIPELINE_REBUILD_POOLS);

View File

@ -245,7 +245,6 @@ public:
void renderHighlights();
void renderDebug();
void renderForSelect(std::set<LLViewerObject*>& objects, BOOL render_transparent, const LLRect& screen_rect);
void rebuildPools(); // Rebuild pools
void findReferences(LLDrawable *drawablep); // Find the lists which have references to this object
@ -713,7 +712,6 @@ void render_bbox(const LLVector3 &min, const LLVector3 &max);
void render_hud_elements();
extern LLPipeline gPipeline;
extern BOOL gRenderForSelect;
extern BOOL gDebugPipeline;
extern const LLMatrix4* gGLLastMatrix;

View File

@ -26,7 +26,10 @@ Person ein:
</text>
<line_editor bottom_delta="-76" name="Edit" top_pad="16"/>
<button label="Los" label_selected="Los" name="Find" top="70"/>
<scroll_list top="80" height="54" name="SearchResults"/>
<scroll_list height="54" name="SearchResults" top="80">
<columns label="Name" name="name"/>
<columns label="Benutzername" name="username"/>
</scroll_list>
</panel>
<panel label="Freunde" name="FriendsPanel">
<text name="InstructSelectFriend">
@ -41,24 +44,11 @@ Person ein:
<text name="meters">
Meter
</text>
<button
follows="top|left"
layout="topleft"
left_pad="0"
height="28"
width="28"
name="Refresh"
image_overlay="Refresh_Off" />
<scroll_list
follows="all"
height="100"
border="false"
layout="topleft"
left="0"
name="NearMe"
sort_column="0"
top="50"
width="132" />
<button follows="top|left" height="28" image_overlay="Refresh_Off" layout="topleft" left_pad="0" name="Refresh" width="28"/>
<scroll_list border="false" follows="all" height="100" layout="topleft" left="0" name="NearMe" sort_column="0" top="50" width="132">
<columns label="Name" name="name"/>
<columns label="Benutzername" name="username"/>
</scroll_list>
</panel>
</tab_container>
<button label="OK" label_selected="OK" name="ok_btn"/>

View File

@ -4,19 +4,19 @@
Nicht erkannt
</floater.string>
<floater.string name="bump">
[TIME] [FIRST] [LAST] hat Sie gestoßen
[TIME] [NAME] hat Sie gestoßen
</floater.string>
<floater.string name="llpushobject">
[TIME] [FIRST] [LAST] hat Sie mit einem Skript gestoßen
[TIME] [NAME] hat Sie mit einem Skript gestoßen
</floater.string>
<floater.string name="selected_object_collide">
[TIME] [FIRST] [LAST] hat Sie mit einem Objekt getroffen
[TIME] [NAME] hat Sie mit einem Objekt getroffen
</floater.string>
<floater.string name="scripted_object_collide">
[TIME] [FIRST] [LAST] hat Sie mit einem Skript-Objekt getroffen
[TIME] [NAME] hat Sie mit einem Skript-Objekt getroffen
</floater.string>
<floater.string name="physical_object_collide">
[TIME] [FIRST] [LAST] hat Sie mit einem physischen Objekt getroffen
[TIME] [NAME] hat Sie mit einem physischen Objekt getroffen
</floater.string>
<floater.string name="timeStr">
[[hour,datetime,slt]:[min,datetime,slt]]

View File

@ -1,26 +1,29 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="contents" title="KOPIE DES OBJEKTES KAUFEN">
<floater.string name="title_buy_text">
Kaufen
</floater.string>
<floater.string name="title_buy_copy_text">
Kopie kaufen von
</floater.string>
<floater.string name="no_copy_text">
(kein Kopieren)
</floater.string>
<floater.string name="no_modify_text">
(kein Bearbeiten)
</floater.string>
<floater.string name="no_transfer_text">
(kein Transferieren)
</floater.string>
<text name="contents_text">
Inhalt:
</text>
<text name="buy_text">
[AMOUNT] L$ von [NAME] kaufen?
[AMOUNT] L$ kaufen von:
</text>
<text name="buy_name_text">
[NAME]?
</text>
<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
<button label="Kaufen" label_selected="Kaufen" name="buy_btn"/>
<text name="title_buy_text">
Kaufen
</text>
<string name="title_buy_copy_text">
Kopie kaufen von
</string>
<text name="no_copy_text">
(kein Kopieren)
</text>
<text name="no_modify_text">
(kein Bearbeiten)
</text>
<text name="no_transfer_text">
(kein Transferieren)
</text>
<button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/>
</floater>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Display Name" title="ANZEIGENAMEN ÄNDERN">
<text name="info_text">
Der Anzeigename ist der Name, den Sie Ihrem Avatar geben. Sie können ihn einmal pro Woche ändern.
</text>
<text name="lockout_text">
Sie können Ihren Anzeigenamen erst wieder zu diesem Zeitpunkt ändern: [TIME].
</text>
<text name="set_name_label">
Neuer Anzeigename:
</text>
<text name="name_confirm_label">
Geben Sie den neuen Namen zur Bestätigung noch einmal ein:
</text>
<button label="Speichern" name="save_btn" tool_tip="Speichern Sie Ihren neuen Anzeigenamen"/>
<button label="Zurücksetzen" name="reset_btn" tool_tip="Benutzernamen als Anzeigenamen verwenden"/>
<button label="Abbrechen" name="cancel_btn"/>
</floater>

View File

@ -1,40 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
follows="all"
height="400"
can_resize="true"
help_topic="event_details"
label="Event"
layout="topleft"
name="Event"
save_rect="true"
save_visibility="false"
title="EVENT DETAILS"
width="600">
<floater.string
name="loading_text">
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
<floater.string name="loading_text">
Wird geladen...
</floater.string>
<floater.string
name="done_text">
Done
</floater.string>
<web_browser
trusted_content="true"
follows="left|right|top|bottom"
layout="topleft"
left="10"
name="browser"
height="365"
width="580"
top="0"/>
<text
follows="bottom|left"
height="16"
layout="topleft"
left_delta="0"
name="status_text"
top_pad="10"
width="150" />
<floater.string name="done_text">
Fertig
</floater.string>
<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
</floater>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="incoming call" title="ANRUF VON UNBEKANNT">
<floater name="incoming call" title="Eingehender Anruf">
<floater.string name="lifetime">
5
</floater.string>

View File

@ -11,7 +11,7 @@
</text>
<icon name="icon_person" tool_tip="Person"/>
<text left="130" name="payee_name">
[FIRST] [LAST]
Extrem langen Namen testen, um zu prüfen, ob er abgeschnitten wird
</text>
<button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
<button label="5 L$" label_selected="5 L$" name="fastpay 5"/>

View File

@ -8,7 +8,7 @@
</string>
<icon name="icon_person" tool_tip="Person"/>
<text left="128" name="payee_name" width="168">
[FIRST] [LAST]
Ericacita Moostopolison
</text>
<text halign="left" name="object_name_label">
Über Objekt:

View File

@ -171,13 +171,13 @@
Ersteller:
</text>
<text name="Creator Name">
Esbee Linden
Frau Esbee Linden (esbee.linden)
</text>
<text name="Owner:">
Eigentümer:
</text>
<text name="Owner Name">
Erica Linden
Frau Erica &quot;Elch&quot; Linden (erica.linden)
</text>
<text name="Group:">
Gruppe:

View File

@ -19,7 +19,7 @@
<layout_panel name="my_panel">
<text name="user_text" value="Mein Avatar:"/>
</layout_panel>
<layout_panel name="leave_call_panel">
<layout_panel name="leave_call_panel">
<layout_stack name="voice_effect_and_leave_call_stack">
<layout_panel name="leave_call_btn_panel">
<button label="Anruf beenden" name="leave_call_btn"/>

View File

@ -10,10 +10,12 @@
<string name="Details">
[SL_PROFILE]
</string>
<text name="user_name_small" value="Launische Produktengine mit langem Namen"/>
<text name="user_name" value="Grumpity ProductEngine"/>
<text name="user_slid" value="james.linden"/>
<text name="user_subtitle" value="11 Monate und 3 Tage alt"/>
<text name="user_details">
Dies ist meine Beschreibung und ich finde sie wirklich gut!
Dies ist meine Second Life-Beschreibung und ich finde sie wirklich gut! Meine Beschreibung ist deshalb so lang, weil ich gerne rede.
</text>
<slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/>
<button label="Freund hinzufügen" name="add_friend_btn" width="110"/>

View File

@ -85,6 +85,7 @@
<menu_item_call label="Kopie nehmen" name="Take Copy"/>
<menu_item_call label="Objekt wieder in meinem Inventar speichern" name="Save Object Back to My Inventory"/>
<menu_item_call label="Wieder in Objektinhalt speichern" name="Save Object Back to Object Contents"/>
<menu_item_call label="Objekt zurückgeben" name="Return Object back to Owner"/>
</menu>
<menu label="Skripts" name="Scripts">
<menu_item_call label="Skripts rekompilieren (Mono)" name="Mono"/>
@ -98,6 +99,7 @@
<menu_item_check label="Nur meine Objekte auswählen" name="Select Only My Objects"/>
<menu_item_check label="Nur bewegliche Objekte auswählen" name="Select Only Movable Objects"/>
<menu_item_check label="Nach Umgebung auswählen" name="Select By Surrounding"/>
<menu_item_check label="Auswahlumrandung anzeigen" name="Show Selection Outlines"/>
<menu_item_check label="Ausgeblendete Auswahl anzeigen" name="Show Hidden Selection"/>
<menu_item_check label="Lichtradius für Auswahl anzeigen" name="Show Light Radius for Selection"/>
<menu_item_check label="Auswahlstrahl anzeigen" name="Show Selection Beam"/>
@ -118,6 +120,7 @@
<menu_item_call label="Missbrauch melden" name="Report Abuse"/>
<menu_item_call label="Fehler melden" name="Report Bug"/>
<menu_item_call label="INFO ÜBER [APP_NAME]" name="About Second Life"/>
<menu_item_check label="Hinweise aktivieren" name="Enable Hints"/>
</menu>
<menu label="Erweitert" name="Advanced">
<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
@ -309,7 +312,7 @@
<menu_item_call label="Ausgewählte Objektinfo drucken" name="Print Selected Object Info"/>
<menu_item_call label="Agent-Info drucken" name="Print Agent Info"/>
<menu_item_call label="Speicher-Stats" name="Memory Stats"/>
<menu_item_check label="Doppelklicken: Auto-Pilot" name="Double-Click Auto-Pilot"/>
<menu_item_check label="Doppelklicken: Auto-Pilot" name="Double-ClickAuto-Pilot"/>
<menu_item_check label="Doppelklicken: Teleport" name="DoubleClick Teleport"/>
<menu_item_check label="Fehler in SelectMgr beseitigen" name="Debug SelectMgr"/>
<menu_item_check label="Fehler in Klicks beseitigen" name="Debug Clicks"/>
@ -326,6 +329,7 @@
<menu_item_call label="Als XML speichern" name="Save to XML"/>
<menu_item_check label="XUI-Namen anzeigen" name="Show XUI Names"/>
<menu_item_call label="Test-IMs senden" name="Send Test IMs"/>
<menu_item_call label="Namen-Cache leeren" name="Flush Names Caches"/>
</menu>
<menu label="Avatar" name="Character">
<menu label="Geladene Textur nehmen" name="Grab Baked Texture">

View File

@ -110,8 +110,8 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut.
<usetemplate name="okbutton" yestext="Ja"/>
</notification>
<notification name="GrantModifyRights">
Wenn Sie einem anderen Einwohner die Erlaubnis zum Bearbeiten erteilen, dann kann dieser JEDES Objekt, das Sie inworld besitzen, verändern, löschen oder nehmen. Seien Sie SEHR vorsichtig, wenn Sie diese Erlaubnis gewähren!
Möchten Sie [FIRST_NAME] [LAST_NAME] die Erlaubnis zum Bearbeiten gewähren?
Wenn Sie einem anderen Einwohner Änderungsrechte gewähren, dann kann dieser JEDES Objekt, das Sie inworld besitzen, ändern, löschen oder an sich nehmen. Seien Sie daher beim Gewähren dieser Rechte sehr vorsichtig!
Möchten Sie [NAME] Änderungsrechte gewähren?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
<notification name="GrantModifyRightsMultiple">
@ -120,7 +120,7 @@ Möchten Sie den ausgewählten Einwohnern Änderungsrechte gewähren?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
<notification name="RevokeModifyRights">
Möchten Sie [FIRST_NAME] [LAST_NAME] die Änderungsrechte entziehen?
Möchten Sie [NAME] die Änderungsrechte entziehen?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
<notification name="RevokeModifyRightsMultiple">
@ -324,17 +324,17 @@ Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
</notification>
<notification name="MustHaveAccountToLogIn">
Hoppla! Da fehlt noch etwas.
Geben Sie bitte den Vor- und den Nachnamen Ihres Avatars ein.
Sue haben ein Feld leer gelassen.
Sie müssen den Benutzernamen Ihres Avatars eingeben.
Sie benötigen ein Benutzerkonto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Benutzerkonto anlegen?
Sie benötigen ein Konto, um [SECOND_LIFE] betreten zu können. Möchten Sie jetzt ein Konto erstellen?
<url name="url">
https://join.secondlife.com/index.php?lang=de-DE
</url>
<usetemplate name="okcancelbuttons" notext="Erneut versuchen" yestext="Neues Benutzerkonto anlegen"/>
</notification>
<notification name="InvalidCredentialFormat">
Sie müssen den Vor- und Nachnamen Ihres Avatars in das Feld Benutzername eingeben, und sich dann erneut anmelden.
Sie müssen entweder den Benutzernamen oder den Vor- und Nachnamen Ihres Avatars in das Feld „Benutzername“ eingeben und die Anmeldung dann erneut versuchen.
</notification>
<notification name="AddClassified">
Anzeigen werden im Suchverzeichnis im Abschnitt „Anzeigen&quot; und auf [http://secondlife.com/community/classifieds secondlife.com] für eine Woche angezeigt.
@ -932,12 +932,6 @@ Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen
Landkauf für Gruppe nicht möglich:
Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
</notification>
<notification label="Freund hinzufügen" name="AddFriend">
Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
[NAME] Freundschaft anbieten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification label="Freund hinzufügen" name="AddFriendWithMessage">
Freunde können sich gegenseitig die Berechtigung erteilen, sich auf der Karte zu sehen und den Online-Status anzuzeigen.
@ -981,7 +975,7 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen.
</form>
</notification>
<notification name="RemoveFromFriends">
Möchten Sie [FIRST_NAME] [LAST_NAME] aus Ihrer Freundesliste entfernen?
Möchten Sie [NAME] aus Ihrer Freundesliste entfernen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="RemoveMultipleFromFriends">
@ -1104,11 +1098,10 @@ Der Gruppe „[GROUP_NAME]“
</notification>
<notification name="DeedLandToGroupWithContribution">
Die Schenkung dieser Parzelle setzt voraus, dass die Gruppe über ausreichende Landnutzungsrechte verfügt.
Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[FIRST_NAME] [LAST_NAME]“.
Die Schenkung beinhaltet eine Landübertragung an die Gruppe von „[NAME]“.
Dem Eigentümer wird der Kaufpreis für das Land nicht rückerstattet. Bei Verkauf der übertragenen Parzelle wird der Erlös zwischen den Gruppenmitgliedern aufgeteilt.
Der Gruppe „[GROUP_NAME]“
[AREA] m² Land schenken?
Der Gruppe „[GROUP_NAME]“ [AREA] m² an Land schenken?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
<notification name="DisplaySetToSafe">
@ -1479,6 +1472,46 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
<notification name="SetDisplayNameSuccess">
Hallo [DISPLAY_NAME],
wir bitten Sie um Geduld, während Ihr Name im System geändert wird. Es kann einige Tage dauern, bis Ihr [http://wiki.secondlife.com/wiki/Setting_your_display_name neuer Name] in Objekten, Skripts, Suchen usw. erscheint.
</notification>
<notification name="SetDisplayNameBlocked">
Ihr Anzeigename kann leider nicht geändert werden. Wenn Sie der Ansicht sind, dass Sie diese Meldung fälschlicherweise erhalten haben, wenden Sie sich bitte an unseren Support.
</notification>
<notification name="SetDisplayNameFailedLength">
Dieser Name ist leider zu lang. Anzeigenamen können maximal [LENGTH] Zeichen enthalten.
Wählen Sie einen kürzeren Namen.
</notification>
<notification name="SetDisplayNameFailedGeneric">
Ihr Anzeigename konnte leider nicht festgelegt werden. Versuchen Sie es später erneut.
</notification>
<notification name="SetDisplayNameMismatch">
Die eingegebenen Anzeigenamen stimmen nicht überein. Wiederholen Sie die Eingabe.
</notification>
<notification name="AgentDisplayNameUpdateThresholdExceeded">
Sie müssen leider noch ein bisschen warten, bevor Sie Ihren Anzeigenamen ändern können.
Weitere Informationen finden Sie unter http://wiki.secondlife.com/wiki/Setting_your_display_name.
Versuchen Sie es später erneut.
</notification>
<notification name="AgentDisplayNameSetBlocked">
Der angeforderte Name enthält ein unzulässiges Wort und konnte deshalb nicht festgelegt werden.
Versuchen Sie einen anderen Namen.
</notification>
<notification name="AgentDisplayNameSetInvalidUnicode">
Der gewünschte Anzeigename enthält ungültige Zeichen.
</notification>
<notification name="AgentDisplayNameSetOnlyPunctuation">
Ihr Anzeigenamen muss Buchstaben enthalten und kann nicht ausschließlich aus Satzzeichen bestehen.
</notification>
<notification name="DisplayNameUpdate">
[OLD_NAME] ([OLD_NAME] ([SLID]) hat einen neuen Namen: [NEW_NAME].
</notification>
<notification name="OfferTeleport">
Teleport an Ihre Position mit der folgenden Meldung anbieten?
<form name="form">
@ -2047,10 +2080,10 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
Betreff: [SUBJECT], Nachricht: [MESSAGE]
</notification>
<notification name="FriendOnline">
[FIRST] [LAST] ist online
[NAME] ist online
</notification>
<notification name="FriendOffline">
[FIRST] [LAST] ist offline
[NAME] ist offline
</notification>
<notification name="AddSelfFriend">
Obwohl Sie ein sehr netter Mensch sind, können Sie sich nicht selbst als Freund hinzufügen.
@ -2117,9 +2150,6 @@ Dies kann die Eingabe Ihres Passworts beeinflussen.
<notification name="CannotRemoveProtectedCategories">
Geschützte Kategorien können nicht entfernt werden.
</notification>
<notification name="OfferedCard">
Sie haben [FIRST] [LAST] eine Visitenkarte angeboten.
</notification>
<notification name="UnableToBuyWhileDownloading">
Kauf nicht möglich. Objektdaten werden noch geladen.
Bitte versuchen Sie es erneut.
@ -2190,7 +2220,10 @@ Wählen Sie eine kleinere Landfläche.
<notification name="SystemMessage">
[MESSAGE]
</notification>
<notification name="PaymentRecived">
<notification name="PaymentReceived">
[MESSAGE]
</notification>
<notification name="PaymentSent">
[MESSAGE]
</notification>
<notification name="EventNotification">
@ -2199,7 +2232,7 @@ Wählen Sie eine kleinere Landfläche.
[NAME]
[DATE]
<form name="form">
<button name="Details" text="Beschreibung"/>
<button name="Details" text="Details"/>
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
@ -2235,7 +2268,7 @@ Bitte installieren Sie das Plugin erneut. Falls weiterhin Problem auftreten, kon
Ihre Objekte auf der ausgewählten Parzelle wurden in Ihr Inventar transferiert.
</notification>
<notification name="OtherObjectsReturned">
Die Objekte von [FIRST] [LAST] auf dieser Parzelle wurden in das Inventar dieser Person transferiert.
Alle Objekte auf der ausgewählten Parzelle, die Einwohner „[NAME]“ gehören, wurden an ihren Eigentümer zurückgegeben.
</notification>
<notification name="OtherObjectsReturned2">
Alle Objekte auf der ausgewählten Parzelle, die Einwohner &apos;[NAME]&apos; gehören, wurden an ihren Eigentümern zurückgegeben.
@ -2362,7 +2395,7 @@ Versuchen Sie es in einigen Minuten erneut.
Es konnte keine gültige Parzelle gefunden werden.
</notification>
<notification name="ObjectGiveItem">
Ein Objekt namens [OBJECTFROMNAME] von [NAME_SLURL] hat Ihnen folgendes übergeben [OBJECTTYPE]:
Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, hat Ihnen folgende/n/s [OBJECTTYPE] übergeben:
[ITEM_SLURL]
<form name="form">
<button name="Keep" text="Behalten"/>
@ -2427,9 +2460,9 @@ Versuchen Sie es in einigen Minuten erneut.
Sie haben [TO_NAME] die Freundschaft angeboten.
</notification>
<notification name="OfferFriendshipNoMessage">
[NAME] bietet Ihnen die Freundschaft an.
[NAME_SLURL] bietet die Freundschaft an.
(Sie werden dadurch den gegenseitigen Online-Status sehen können.)
(Standardmäßig können Sie gegenseitig ihren Online-Status sehen.)
<form name="form">
<button name="Accept" text="Akzeptieren"/>
<button name="Decline" text="Ablehnen"/>
@ -2468,7 +2501,7 @@ Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
[MESSAGE]
Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
Von Objekt: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, Eigentümer: [NAME]?
<form name="form">
<button name="Gotopage" text="Zur Seite"/>
<button name="Cancel" text="Abbrechen"/>
@ -2484,7 +2517,7 @@ Von Objekt: [OBJECTNAME], Eigentümer: [NAME]?
Dieser Artikel verwendet eine Funktion, die Ihr Viewer nicht unterstützt. Bitte aktualisieren Sie Ihre Version von [APP_NAME], um dieses Objekt anziehen zu können.
</notification>
<notification name="ScriptQuestion">
Das Objekt „[OBJECTNAME]“, Eigentum von „[NAME]“, möchte:
Das Objekt „&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;“, das „[NAME]“ gehört, stellt folgende Anfrage:
[QUESTIONS]
Ist das OK?
@ -2495,7 +2528,7 @@ Ist das OK?
</form>
</notification>
<notification name="ScriptQuestionCaution">
Ein Objekt namens „[OBJECTNAME]“ des Eigentümers „[NAME]“ möchte:
Das Objekt „&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;“, das „[NAME]“ gehört, stellt folgende Anfrage:
[QUESTIONS]
Wenn Sie diesem Objekt und seinem Ersteller nicht vertrauen, sollten Sie diese Anfrage ablehnen.
@ -2508,14 +2541,14 @@ Anfrage gestatten?
</form>
</notification>
<notification name="ScriptDialog">
[FIRST] [LAST]s „[TITLE]“
&lt;nolink&gt;[TITLE]&lt;/nolink&gt; von [NAME]
[MESSAGE]
<form name="form">
<button name="Ignore" text="Ignorieren"/>
</form>
</notification>
<notification name="ScriptDialogGroup">
[GROUPNAME]s „[TITLE]“
&lt;nolink&gt;[TITLE]&lt;/nolink&gt;“ von [GROUPNAME]
[MESSAGE]
<form name="form">
<button name="Ignore" text="Ignorieren"/>
@ -2553,13 +2586,13 @@ Klicken Sie auf &apos;Akzeptieren &apos;, um dem Gespräch beizutreten, oder au
</form>
</notification>
<notification name="AutoUnmuteByIM">
[FIRST] [LAST] hat eine Benachrichtigung erhalten und wird nicht länger ignoriert.
[NAME] hat eine Instant Message erhalten und wird nicht länger ignoriert.
</notification>
<notification name="AutoUnmuteByMoney">
[FIRST] [LAST] wurde bezahlt und wird nicht länger ignoriert.
[NAME] hat Geld erhalten und wird nicht länger ignoriert.
</notification>
<notification name="AutoUnmuteByInventory">
[FIRST] [LAST] wurde Inventar angeboten und wird nicht länger ignoriert.
[NAME] wurde ein Inventarobjekt angeboten und wird nicht länger ignoriert.
</notification>
<notification name="VoiceInviteGroup">
[NAME] ist einem Voice-Chat mit der Gruppe [GROUP] beigetreten.
@ -2786,6 +2819,37 @@ auch dann stummgeschaltet werden, wenn Sie den Anruf verlassen haben.
Alle stummschalten?
<usetemplate ignoretext="Bestätigen, bevor alle Teilnehmer in einem Gruppengespräch stummgeschaltet werden." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
</notification>
<notification label="Chat" name="HintChat">
Um mitzureden, geben Sie Text in das Chat-Feld unten ein.
</notification>
<notification label="Stehen" name="HintSit">
Um aufzustehen, klicken Sie auf die Schaltfläche „Stehen“.
</notification>
<notification label="Welt erkunden" name="HintDestinationGuide">
Im Reiseführer finden Sie Tausende von interessanten Orten. Wählen Sie einfach einen Ort aus und klicken Sie auf „Teleportieren“.
</notification>
<notification label="Seitenleiste" name="HintSidePanel">
In der Seitenleiste können Sie schnell auf Ihr Inventar, Ihre Outfits, Ihre Profile u. ä. zugreifen.
</notification>
<notification label="Bewegen" name="HintMove">
Um zu gehen oder zu rennen, öffnen Sie das Bedienfeld „Bewegen“ und klicken Sie auf die Pfeile. Sie können auch die Pfeiltasten auf Ihrer Tastatur verwenden.
</notification>
<notification label="Anzeigename" name="HintDisplayName">
Hier können Sie Ihren anpassbaren Anzeigenamen festlegen. Der Anzeigename unterscheidet sich von Ihrem eindeutigen Benutzernamen, der nicht geändert werden kann. In den Einstellungen können Sie festlegen, welcher Name von anderen Einwohnern angezeigt wird.
</notification>
<notification label="Inventar" name="HintInventory">
In Ihrem Inventar befinden sich verschiedene Objekte. Die neuesten Objekte finden Sie in der Registerkarte „Aktuell“.
</notification>
<notification label="Sie haben Linden-Dollar!" name="HintLindenDollar">
Hier wird Ihr aktueller L$-Kontostand angezeigt. Klicken Sie auf „L$ kaufen“, um mehr Linden-Dollar zu kaufen.
</notification>
<notification name="PopupAttempt">
Ein Popup konnte nicht geöffnet werden.
<form name="form">
<ignore name="ignore" text="Alle Popups aktivieren"/>
<button name="open" text="Popup-Fenster öffnen"/>
</form>
</notification>
<global name="UnsupportedCPU">
- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
</global>

View File

@ -26,6 +26,14 @@
<scroll_container name="profile_scroll">
<panel name="scroll_content_panel">
<panel name="data_panel">
<text name="display_name_label" value="Anzeigename:"/>
<text name="solo_username_label" value="Benutzername:"/>
<button name="set_name" tool_tip="Anzeigenamen festlegen"/>
<text name="solo_user_name" value="Hamilton Hitchings"/>
<text name="user_name" value="Hamilton Hitchings"/>
<text name="user_name_small" value="Hamilton Hitchings"/>
<text name="user_label" value="Benutzername:"/>
<text name="user_slid" value="hamilton.linden"/>
<panel name="lifes_images_panel">
<panel name="second_life_image_panel">
<text name="second_life_photo_title_text" value="[SECOND_LIFE]:"/>
@ -46,7 +54,7 @@
<text name="my_account_link" value="[[URL] Meine Startseite aufrufen]"/>
<text name="title_partner_text" value="Mein Partner:"/>
<panel name="partner_data_panel">
<name_box initial_value="(wird in Datenbank gesucht)" name="partner_text" value="[FIRST] [LAST]"/>
<text initial_value="(wird in Datenbank gesucht)" name="partner_text" value="[FIRST] [LAST]"/>
</panel>
<text name="partner_edit_link" value="[[URL] bearbeiten]"/>
</panel>

View File

@ -24,6 +24,7 @@
<scroll_list.columns label="Region" name="location"/>
<scroll_list.columns label="Typ" name="type"/>
<scroll_list.columns label="Gebiet" name="area"/>
<scroll_list.columns label="Ausgeblendet" name="hidden"/>
</scroll_list>
<text name="total_contributed_land_label">
Gesamtbeitrag:

View File

@ -11,7 +11,7 @@
<text name="username_text">
Benutzername:
</text>
<line_editor label="Benutzername" name="username_edit" tool_tip="[SECOND_LIFE]-Benutzername"/>
<line_editor label="berndschmidt12 oder Liebe Sonne" name="username_edit" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/>
<text name="password_text">
Kennwort:
</text>
@ -31,7 +31,7 @@
Registrieren
</text>
<text name="forgot_password_text">
Namen oder Kennwort vergessen?
Benutzernamen oder Kennwort vergessen?
</text>
<text name="login_help">
Sie brauchen Hilfe?

View File

@ -80,7 +80,7 @@
<text name="region_rating_label" value="Einstufung:"/>
<text name="region_rating" value="Adult"/>
<text name="region_owner_label" value="Eigentümer:"/>
<text name="region_owner" value="moose Van Moose"/>
<text name="region_owner" value="Elch von Elch extra langer Name Elch"/>
<text name="region_group_label" value="Gruppe:"/>
<text name="region_group">
The Mighty Moose of mooseville soundvillemoose
@ -93,6 +93,7 @@
<text name="estate_name_label" value="Grundbesitz:"/>
<text name="estate_rating_label" value="Einstufung:"/>
<text name="estate_owner_label" value="Eigentümer:"/>
<text name="estate_owner" value="Länge des Eigentümernamens mit langem Namen testen"/>
<text name="covenant_label" value="Vertrag:"/>
</panel>
</accordion_tab>

View File

@ -44,9 +44,10 @@
<radio_item label="An" name="radio2" value="1"/>
<radio_item label="Kurz anzeigen" name="radio3" value="2"/>
</radio_group>
<check_box label="Meinen Namen anzeigen" name="show_my_name_checkbox1"/>
<check_box initial_value="true" label="Kleine Avatarnamen" name="small_avatar_names_checkbox"/>
<check_box label="Gruppentitel anzeigen" name="show_all_title_checkbox1"/>
<check_box label="Mein Name" name="show_my_name_checkbox1"/>
<check_box label="Benutzernamen" name="show_slids" tool_tip="Benutzernamen wie berndschmidt123 anzeigen"/>
<check_box label="Gruppentitel" name="show_all_title_checkbox1" tool_tip="Gruppentitel wie „Vorstand“ oder „Mitglied“"/>
<check_box label="Freunde hervorheben" name="show_friends" tool_tip="Avatarnamen Ihrer Freunde hervorheben"/>
<text name="effects_color_textbox">
Meine Effekte:
</text>
@ -61,6 +62,7 @@
<combo_box.item label="30 Minuten" name="item3"/>
<combo_box.item label="nie" name="item4"/>
</combo_box>
<check_box label="Anzeigenamen anzeigen" name="display_names_check" tool_tip="Aktivieren Sie diese Option, um Anzeigenamen in Chat, IM, Avatarnamen usw. zu verwenden."/>
<text name="text_box3">
Antwort, wenn im „Beschäftigt“-Modus:
</text>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Hardware/Internet" name="Input panel">
<button label="Andere Geräte" name="joystick_setup_button"/>
<text name="Mouselook:">
Mouselook:
</text>
@ -40,6 +39,7 @@
<check_box initial_value="true" label="Plugins aktivieren" name="browser_plugins_enabled"/>
<check_box initial_value="true" label="Cookies annehmen" name="cookies_enabled"/>
<check_box initial_value="true" label="Javascript aktivieren" name="browser_javascript_enabled"/>
<check_box initial_value="false" label="Medienbrowser-Popups aktivieren" name="media_popup_enabled"/>
<check_box initial_value="false" label="Web-Proxy aktivieren" name="web_proxy_enabled"/>
<text name="Proxy location">
Proxy-Standort:

View File

@ -6,8 +6,14 @@
<string name="status_offline">
Offline
</string>
<text_editor name="user_name" value="(wird geladen...)"/>
<text name="display_name_label" value="Anzeigename:"/>
<text name="solo_username_label" value="Benutzername:"/>
<text name="status" value="Online"/>
<text name="user_name_small" value="Dieser Name ist ein ganz außerordentlich langer Name"/>
<text name="user_name" value="Jack Linden"/>
<button name="copy_to_clipboard" tool_tip="In Zwischenablage kopieren"/>
<text name="user_label" value="Benutzername:"/>
<text name="user_slid" value="jack.linden"/>
<tab_container name="tabs" tab_min_width="60">
<panel label="PROFIL" name="panel_profile"/>
<panel label="AUSWAHL" name="panel_picks"/>

View File

@ -1,76 +1,73 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<role_actions>
<action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen und Entfernen von Mitgliedern sowie den Beitritt ohne Einladung." name="Membership">
<action description="Personen in diese Gruppe einladen" longdescription="Leute in diese Gruppe mit der Schaltfläche „Einladen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ in die Gruppe einladen." name="member invite"/>
<action description="Mitglieder aus dieser Gruppe werfen" longdescription="Leute aus dieser Gruppe mit der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ aus der Gruppe werfen. Ein Eigentümer kann jeden, außer einen anderen Eigentümer, ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe werfen, wenn es die Rolle Jeder inne hat, jedoch KEINE andere Rolle. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject"/>
<action description="„Registrierung offen“ aktivieren/deaktivieren und „Beitrittsgebühr“ ändern." longdescription="„Registrierung offen“ aktivieren, um damit neue Mitglieder ohne Einladung beitreten können, und die „Beitrittsgebühr“ im Abschnitt „Allgemein“ ändern." name="member options"/>
<action description="Personen in diese Gruppe einladen" longdescription="Leute in diese Gruppe mit der Schaltfläche „Einladen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ in die Gruppe einladen." name="member invite" value="1"/>
<action description="Mitglieder aus dieser Gruppe werfen" longdescription="Leute aus dieser Gruppe mit der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“ aus der Gruppe werfen. Ein Eigentümer kann jeden, außer einen anderen Eigentümer, ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe werfen, wenn es die Rolle Jeder inne hat, jedoch KEINE andere Rolle. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject" value="2"/>
<action description="„Registrierung offen“ aktivieren/deaktivieren und „Beitrittsgebühr“ ändern." longdescription="„Registrierung offen“ aktivieren, um damit neue Mitglieder ohne Einladung beitreten können, und die „Beitrittsgebühr“ im Abschnitt „Allgemein“ ändern." name="member options" value="3"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen, Entfernen und Ändern von Gruppenrollen, das Zuweisen und Entfernen von Rollen und das Zuweisen von Fähigkeiten zu Rollen." name="Roles">
<action description="Neue Rollen erstellen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ erstellen." name="role create"/>
<action description="Rollen löschen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ löschen." name="role delete"/>
<action description="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern." longdescription="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern. Dies wird im unteren Bereich des Abschnitts „Rollen“ &gt; Registerkarte „Rollen“ eingestellt, nachdem eine Rolle ausgewählt wurde." name="role properties"/>
<action description="Mitgliedern nur eigene Rollen zuweisen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen zugewiesen werden. Ein Mitglied mit dieser Fähigkeit kann anderen Mitgliedern nur die eigenen Rollen zuweisen." name="role assign member limited"/>
<action description="Mitgliedern beliebige Rolle zuweisen" longdescription="Sie können Mitglieder jede beliebige Rolle der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) zuweisen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) Rollen mit weitreichenden Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role assign member"/>
<action description="Mitgliedern Rollen entziehen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen abgenommen werden. Eigentümer können nicht entfernt werden." name="role remove member"/>
<action description="Rollenfähigkeiten zuweisen und entfernen" longdescription="Fähigkeiten für jede Rolle können in der Liste „Zulässige Fähigkeiten&quot; (Abschnitt „Rollen&quot; &gt; Registerkarte „Rollen“) zugewiesen und auch entzogen werden. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) alle Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role change actions"/>
<action description="Neue Rollen erstellen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ erstellen." name="role create" value="4"/>
<action description="Rollen löschen" longdescription="Neue Rollen im Abschnitt „Rollen“ &gt; Registerkarte „Rollen“ löschen." name="role delete" value="5"/>
<action description="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern." longdescription="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern. Dies wird im unteren Bereich des Abschnitts „Rollen“ &gt; Registerkarte „Rollen“ eingestellt, nachdem eine Rolle ausgewählt wurde." name="role properties" value="6"/>
<action description="Mitgliedern nur eigene Rollen zuweisen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen zugewiesen werden. Ein Mitglied mit dieser Fähigkeit kann anderen Mitgliedern nur die eigenen Rollen zuweisen." name="role assign member limited" value="7"/>
<action description="Mitgliedern beliebige Rolle zuweisen" longdescription="Sie können Mitglieder jede beliebige Rolle der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) zuweisen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) Rollen mit weitreichenden Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role assign member" value="8"/>
<action description="Mitgliedern Rollen entziehen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ &gt; Registerkarte „Mitglieder“) können Mitgliedern Rollen abgenommen werden. Eigentümer können nicht entfernt werden." name="role remove member" value="9"/>
<action description="Rollenfähigkeiten zuweisen und entfernen" longdescription="Fähigkeiten für jede Rolle können in der Liste „Zulässige Fähigkeiten&quot; (Abschnitt „Rollen&quot; &gt; Registerkarte „Rollen“) zugewiesen und auch entzogen werden. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) alle Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Überlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role change actions" value="10"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, die Gruppenidentität zu ändern, z. B. öffentliche Sichtbarkeit, Charta und Insignien." name="Group Identity">
<action description="Charta, Insignien und „Im Web veröffentlichen“ ändern und festlegen, welche Mitglieder in der Gruppeninfo öffentlich sichtbar sind." longdescription="Charta, Insignien und „In Suche anzeigen&quot; ändern. Diese Einstellungen werden im Abschnitt „Allgemein&quot; vorgenommen." name="group change identity"/>
<action description="Charta, Insignien und „Im Web veröffentlichen“ ändern und festlegen, welche Mitglieder in der Gruppeninfo öffentlich sichtbar sind." longdescription="Charta, Insignien und „In Suche anzeigen&quot; ändern. Diese Einstellungen werden im Abschnitt „Allgemein&quot; vorgenommen." name="group change identity" value="11"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, gruppeneigenes Land zu übertragen, zu bearbeiten und zu verkaufen. Klicken Sie mit rechts auf den Boden und wählen Sie „Land-Info...“ oder klicken Sie in der Navigationsleiste auf das Symbol „i&quot;." name="Parcel Management">
<action description="Land übertragen und für Gruppe kaufen" longdescription="Land übertragen und für Gruppe kaufen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Allgemein“." name="land deed"/>
<action description="Land Governor Linden überlassen" longdescription="Land Governor Linden überlassen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann gruppeneigenes Land unter „Land-Info“ &gt; „Allgemein“ aufgeben und es ohne Verkauf in das Eigentum von Linden zurückführen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land release"/>
<action description="Land.zu.verkaufen-Info einstellen" longdescription="Land zu verkaufen-Info einstellen. *WARNUNG* Mitglieder in einer Rolle mit dieser Fähigkeit können gruppeneigenes Land jederzeit unter „Land-Info“ &gt; „Allgemein“ verkaufen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land set sale info"/>
<action description="Parzellen teilen und zusammenlegen" longdescription="Parzellen teilen und zusammenlegen. Klicken Sie dazu mit rechts auf den Boden, wählen sie „Terrain bearbeiten“ und ziehen Sie die Maus auf das Land, um eine Auswahl zu treffen. Zum Teilen treffen Sie eine Auswahl und klicken auf „Unterteilen“. Zum Zusammenlegen von zwei oder mehr angrenzenden Parzellen klicken Sie auf „Zusammenlegen“." name="land divide join"/>
<action description="Land übertragen und für Gruppe kaufen" longdescription="Land übertragen und für Gruppe kaufen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Allgemein“." name="land deed" value="12"/>
<action description="Land Governor Linden überlassen" longdescription="Land Governor Linden überlassen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann gruppeneigenes Land unter „Land-Info“ &gt; „Allgemein“ aufgeben und es ohne Verkauf in das Eigentum von Linden zurückführen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land release" value="13"/>
<action description="Land.zu.verkaufen-Info einstellen" longdescription="Land zu verkaufen-Info einstellen. *WARNUNG* Mitglieder in einer Rolle mit dieser Fähigkeit können gruppeneigenes Land jederzeit unter „Land-Info“ &gt; „Allgemein“ verkaufen! Überlegen Sie sich, wem Sie diese Fähigkeit verleihen." name="land set sale info" value="14"/>
<action description="Parzellen teilen und zusammenlegen" longdescription="Parzellen teilen und zusammenlegen. Klicken Sie dazu mit rechts auf den Boden, wählen sie „Terrain bearbeiten“ und ziehen Sie die Maus auf das Land, um eine Auswahl zu treffen. Zum Teilen treffen Sie eine Auswahl und klicken auf „Unterteilen“. Zum Zusammenlegen von zwei oder mehr angrenzenden Parzellen klicken Sie auf „Zusammenlegen“." name="land divide join" value="15"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, den Parzellennamen und die Veröffentlichungseinstellungen sowie die Anzeige des Suchverzeichnisses, den Landepunkt und die TP-Routenoptionen festzulegen." name="Parcel Identity">
<action description="„Ort in Suche anzeigen&quot; ein-/ausschalten und Kategorie festlegen." longdescription="Auf der Registerkarte „Optionen“ unter „Land-Info“ können Sie „Ort in Suche anzeigen“ ein- und ausschalten und die Parzellenkategorie festlegen." name="land find places"/>
<action description="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern" longdescription="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern Diese Einstellungen finden Sie unter „Land-Info“ &gt; Registerkarte „Optionen“." name="land change identity"/>
<action description="Landepunkt und Teleport-Route festlegen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle einen Landepunkt für ankommende Teleports und Teleport-Routen festlegen. Diese Einstellungen finden Sie unter „Land-Info“ &gt; „Optionen“." name="land set landing point"/>
<action description="„Ort in Suche anzeigen&quot; ein-/ausschalten und Kategorie festlegen." longdescription="Auf der Registerkarte „Optionen“ unter „Land-Info“ können Sie „Ort in Suche anzeigen“ ein- und ausschalten und die Parzellenkategorie festlegen." name="land find places" value="17"/>
<action description="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern" longdescription="Parzellenname, Beschreibung und Einstellung für „Ort in Suche anzeigen&quot; ändern Diese Einstellungen finden Sie unter „Land-Info“ &gt; Registerkarte „Optionen“." name="land change identity" value="18"/>
<action description="Landepunkt und Teleport-Route festlegen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle einen Landepunkt für ankommende Teleports und Teleport-Routen festlegen. Diese Einstellungen finden Sie unter „Land-Info“ &gt; „Optionen“." name="land set landing point" value="19"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Parzellenoptionen wie „Objekte erstellen“, „Terrain bearbeiten“ sowie Musik- und Medieneinstellungen zu ändern." name="Parcel Settings">
<action description="Musik- und Medieneinstellungen ändern" longdescription="Die Einstellungen für Streaming-Musik und Filme finden Sie unter „Land-Info“ &gt; „Medien“." name="land change media"/>
<action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ &gt; „Optionen“ &gt; „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundbesitzes und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Optionen“." name="land edit"/>
<action description="„Land-Info“-Optionen einstellen" longdescription="„Sicher (kein Schaden)“ und „Fliegen“ ein- und ausschalten und Einwohnern folgende Aktionen erlauben: „Terrain bearbeiten“, „Bauen“, „Landmarken erstellen“ und „Skripts ausführen“ auf gruppeneigenem Land in „Land-Info“ &gt; Registerkarte „Optionen“." name="land options"/>
<action description="Musik- und Medieneinstellungen ändern" longdescription="Die Einstellungen für Streaming-Musik und Filme finden Sie unter „Land-Info“ &gt; „Medien“." name="land change media" value="20"/>
<action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ &gt; „Optionen“ &gt; „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundbesitzes und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ &gt; „Optionen“." name="land edit" value="21"/>
<action description="„Land-Info“-Optionen einstellen" longdescription="„Sicher (kein Schaden)“ und „Fliegen“ ein- und ausschalten und Einwohnern folgende Aktionen erlauben: „Terrain bearbeiten“, „Bauen“, „Landmarken erstellen“ und „Skripts ausführen“ auf gruppeneigenem Land in „Land-Info“ &gt; Registerkarte „Optionen“." name="land options" value="22"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Umgehen von Restriktionen auf gruppeneigenen Parzellen zu erlauben." name="Parcel Powers">
<action description="„Terrain bearbeiten“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle das Terrain bearbeiten, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow edit land"/>
<action description="„Fliegen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle fliegen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow fly"/>
<action description="„Objekte erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle Objekte erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow create"/>
<action description="„Landmarke erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können für eine gruppeneigene Parzelle eine Landmarke erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow landmark"/>
<action description="„Hier als Zuhause wählen“ auf Gruppenland zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer an diese Gruppe übertragenen Parzelle die Funktion „Welt“ &gt; „Landmarken“ &gt; „Hier als Zuhause wählen“ verwenden." name="land allow set home"/>
<action description="„Terrain bearbeiten“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle das Terrain bearbeiten, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow edit land" value="23"/>
<action description="„Fliegen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle fliegen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow fly" value="24"/>
<action description="„Objekte erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer gruppeneigenen Parzelle Objekte erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow create" value="25"/>
<action description="„Landmarke erstellen“ zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können für eine gruppeneigene Parzelle eine Landmarke erstellen, selbst wenn diese Option unter „Land-Info“ &gt; „Optionen“ deaktiviert ist." name="land allow landmark" value="26"/>
<action description="„Hier als Zuhause wählen“ auf Gruppenland zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können auf einer an diese Gruppe übertragenen Parzelle die Funktion „Welt“ &gt; „Landmarken“ &gt; „Hier als Zuhause wählen“ verwenden." name="land allow set home" value="28"/>
<action description="Veranstaltung von Events auf Gruppenland zulassen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Parzellen im Gruppenbesitz als Veranstaltungsorte für Events auswählen." name="land allow host event" value="41"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, den Zugang auf gruppeneigenen Parzellen zu steuern. Dazu gehört das Einfrieren und Ausschließen von Einwohnern." name="Parcel Access">
<action description="Parzellen-Zugangslisten verwalten" longdescription="Parzellen-Zugangslisten bearbeiten Sie unter „Land-Info“ &gt; „Zugang“." name="land manage allowed"/>
<action description="Parzellen-Bannlisten verwalten" longdescription="Bannlisten für Parzellen bearbeiten Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage banned"/>
<action description="Parzelleneinstellungen für „Pässe verkaufen“ ändern" longdescription="Die Parzellen-Einstellungen für „Pässe verkaufen“ ändern Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage passes"/>
<action description="Einwohner aus Parzellen werfen und einfrieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können gegen unerwünschte Einwohner auf einer gruppeneigenen Parzelle Maßnahmen ergreifen. Klicken Sie den Einwohner mit rechts an und wählen Sie „Hinauswerfen“ oder „Einfrieren“." name="land admin"/>
<action description="Parzellen-Zugangslisten verwalten" longdescription="Parzellen-Zugangslisten bearbeiten Sie unter „Land-Info“ &gt; „Zugang“." name="land manage allowed" value="29"/>
<action description="Parzellen-Bannlisten verwalten" longdescription="Bannlisten für Parzellen bearbeiten Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage banned" value="30"/>
<action description="Parzelleneinstellungen für „Pässe verkaufen“ ändern" longdescription="Die Parzellen-Einstellungen für „Pässe verkaufen“ ändern Sie unter „Land-Info“ &gt; Registerkarte „Zugang“." name="land manage passes" value="31"/>
<action description="Einwohner aus Parzellen werfen und einfrieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können gegen unerwünschte Einwohner auf einer gruppeneigenen Parzelle Maßnahmen ergreifen. Klicken Sie den Einwohner mit rechts an und wählen Sie „Hinauswerfen“ oder „Einfrieren“." name="land admin" value="32"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Zurückgeben von Objekten sowie das Platzieren und Verschieben von Linden-Pflanzen zu erlauben. Mitglieder können den Grundbesitz aufräumen und an der Landschaftsgestaltung mitwirken. Aber Vorsicht: Zurückgegebene Objekte können nicht mehr zurückgeholt werden." name="Parcel Content">
<action description="Gruppeneigene Objekte zurückgeben" longdescription="Gruppeneigene Objekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group owned"/>
<action description="Gruppenobjekte zurückgeben" longdescription="Gruppenobjekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group set"/>
<action description="Gruppenfremde Objekte zurückgeben" longdescription="Objekte von gruppenfremden Personen auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return non group"/>
<action description="Landschaftsgestaltung mit Linden-Pflanzen" longdescription="Die Fähigkeit zur Landschaftsgestaltung ermöglicht das Platzieren und Verschieben von Linden-Bäumen, -Pflanzen und -Gräsern. Diese Objekte finden Sie im Bibliotheksordner des Inventars unter Objekte. Sie lassen sich auch mit der Menü Erstellen erzeugen." name="land gardening"/>
<action description="Gruppeneigene Objekte zurückgeben" longdescription="Gruppeneigene Objekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group owned" value="48"/>
<action description="Gruppenobjekte zurückgeben" longdescription="Gruppenobjekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return group set" value="33"/>
<action description="Gruppenfremde Objekte zurückgeben" longdescription="Objekte von gruppenfremden Personen auf gruppeneigenen Parzellen können Sie unter „Land-Info“ &gt; „Objekte“ zurückgeben." name="land return non group" value="34"/>
<action description="Landschaftsgestaltung mit Linden-Pflanzen" longdescription="Die Fähigkeit zur Landschaftsgestaltung ermöglicht das Platzieren und Verschieben von Linden-Bäumen, -Pflanzen und -Gräsern. Diese Objekte finden Sie im Bibliotheksordner des Inventars unter Objekte. Sie lassen sich auch mit der Menü Erstellen erzeugen." name="land gardening" value="35"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, gruppeneigene Objekte zu übertragen, zu bearbeiten und zu verkaufen. Änderungen werden im Werkzeug Bearbeiten auf der Registerkarte Allgemein vorgenommen. Klicken Sie mit rechts auf ein Objekt und wählen Sie &apos;Bearbeiten &apos;, um seine Einstellungen anzuzeigen." name="Object Management">
<action description="Objekte an Gruppe übertragen" longdescription="Objekte an eine Gruppe übertragen können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object deed"/>
<action description="Gruppeneigene Objekte manipulieren (verschieben, kopieren, bearbeiten)" longdescription="Gruppeneigene Objekte lassen sich im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“ manipulieren (verschieben, kopieren, bearbeiten)." name="object manipulate"/>
<action description="Gruppeneigene Objekte zum Verkauf freigeben" longdescription="Gruppeneigene Objekte zum Verkauf freigeben, können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object set sale"/>
<action description="Objekte an Gruppe übertragen" longdescription="Objekte an eine Gruppe übertragen können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object deed" value="36"/>
<action description="Gruppeneigene Objekte manipulieren (verschieben, kopieren, bearbeiten)" longdescription="Gruppeneigene Objekte lassen sich im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“ manipulieren (verschieben, kopieren, bearbeiten)." name="object manipulate" value="38"/>
<action description="Gruppeneigene Objekte zum Verkauf freigeben" longdescription="Gruppeneigene Objekte zum Verkauf freigeben, können Sie im Werkzeug „Bearbeiten“ auf der Registerkarte „Allgemein“." name="object set sale" value="39"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Gruppenschulden und Gruppendividenden zu aktivieren und den Zugriff auf das Gruppenkonto zu beschränken." name="Accounting">
<action description="Gruppenschulden zahlen und Gruppendividende erhalten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit zahlen automatisch Gruppenschulden und erhalten Gruppendividenden. D. h. sie erhalten einen Anteil an Verkäufen von gruppeneigenem Land, der täglich verrechnet wird. Außerdem zahlen Sie automatisch für anfallende Kosten wie Parzellenlisten-Gebühren." name="accounting accountable"/>
<action description="Gruppenschulden zahlen und Gruppendividende erhalten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit zahlen automatisch Gruppenschulden und erhalten Gruppendividenden. D. h. sie erhalten einen Anteil an Verkäufen von gruppeneigenem Land, der täglich verrechnet wird. Außerdem zahlen Sie automatisch für anfallende Kosten wie Parzellenlisten-Gebühren." name="accounting accountable" value="40"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Senden, Empfangen und Anzeigen von Gruppennachrichten zu erlauben." name="Notices">
<action description="Mitteilungen senden" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen im Abschnitt Gruppe &gt; Mitteilungen senden." name="notices send"/>
<action description="Mitteilungen erhalten und ältere Mitteilungen anzeigen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen erhalten und im Abschnitt Gruppe &gt; Mitteilungen ältere Mitteilungen anzeigen." name="notices receive"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Erstellen von Anfragen, das Abstimmen über Anfragen und das Anzeigen des Abstimmprotokolls zu erlauben." name="Proposals">
<action description="Neue Anfragen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Anfragen stellen, über die auf der Registerkarte „Anfragen“ in der Gruppeninfo abgestimmt werden kann." name="proposal start"/>
<action description="Über Anfragen abstimmen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können in der Gruppeninfo unter „Anfragen“ über Anfragen abstimmen." name="proposal vote"/>
<action description="Mitteilungen senden" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen im Abschnitt Gruppe &gt; Mitteilungen senden." name="notices send" value="42"/>
<action description="Mitteilungen erhalten und ältere Mitteilungen anzeigen" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Mitteilungen erhalten und im Abschnitt Gruppe &gt; Mitteilungen ältere Mitteilungen anzeigen." name="notices receive" value="43"/>
</action_set>
<action_set description="Diese Fähigkeiten ermöglichen es, den Zugang zu Gruppen-Chat und Gruppen-Voice-Chat zu steuern." name="Chat">
<action description="Gruppen-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Chat und Gruppen-Voice-Chat beitreten." name="join group chat"/>
<action description="Gruppen-Voice-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Voice-Chat beitreten. HINWEIS: Sie benötigen die Fähigkeit „Gruppen-Chat beitreten“, um Zugang zu dieser Voice-Chat-Sitzung zu erhalten." name="join voice chat"/>
<action description="Gruppen-Chat moderieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können den Zugang zu und die Teilnahme an Gruppen-Chat- und Voice-Chat-Sitzungen steuern." name="moderate group chat"/>
<action description="Gruppen-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Chat und Gruppen-Voice-Chat beitreten." name="join group chat" value="16"/>
<action description="Gruppen-Voice-Chat beitreten" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können Gruppen-Voice-Chat beitreten. HINWEIS: Sie benötigen die Fähigkeit „Gruppen-Chat beitreten“, um Zugang zu dieser Voice-Chat-Sitzung zu erhalten." name="join voice chat" value="27"/>
<action description="Gruppen-Chat moderieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können den Zugang zu und die Teilnahme an Gruppen-Chat- und Voice-Chat-Sitzungen steuern." name="moderate group chat" value="37"/>
</action_set>
</role_actions>

View File

@ -206,6 +206,9 @@
<string name="TooltipAgentUrl">
Anklicken, um das Profil dieses Einwohners anzuzeigen
</string>
<string name="TooltipAgentInspect">
Mehr über diesen Einwohner
</string>
<string name="TooltipAgentMute">
Klicken, um diesen Einwohner stummzuschalten
</string>
@ -762,6 +765,12 @@
<string name="Estate / Full Region">
Grundstück / Vollständige Region
</string>
<string name="Estate / Homestead">
Grundbesitz/Homestead
</string>
<string name="Mainland / Homestead">
Mainland/Homestead
</string>
<string name="Mainland / Full Region">
Mainland / Vollständige Region
</string>
@ -3574,7 +3583,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
Sie sind der einzige Benutzer in dieser Sitzung.
</string>
<string name="offline_message">
[FIRST] [LAST] ist offline.
[NAME] ist offline.
</string>
<string name="invite_message">
Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen.
@ -3643,7 +3652,10 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
http://secondlife.com/landing/voicemorphing
</string>
<string name="paid_you_ldollars">
[NAME] hat Ihnen [AMOUNT] L$ bezahlt.
[NAME] hat Ihnen [REASON] [AMOUNT] L$ bezahlt.
</string>
<string name="paid_you_ldollars_no_reason">
[NAME] hat Ihnen [AMOUNT] L$ bezahlt.
</string>
<string name="you_paid_ldollars">
Sie haben [REASON] [AMOUNT] L$ an [NAME] bezahlt.
@ -3657,6 +3669,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="you_paid_ldollars_no_name">
Sie haben [REASON] [AMOUNT] L$ bezahlt.
</string>
<string name="for item">
für [ITEM]
</string>
<string name="for a parcel of land">
für eine Landparzelle
</string>
@ -3675,6 +3690,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="to upload">
fürs Hochladen
</string>
<string name="to publish a classified ad">
um eine Anzeige aufzugeben
</string>
<string name="giving">
[AMOUNT] L$ werden bezahlt
</string>

View File

@ -6539,7 +6539,7 @@ Mute everyone?
<form name="form">
<ignore name="ignore"
control="MediaEnablePopups"
invert_control="false"
invert_control="true"
text="Enable all pop-ups"/>
<button default="true"
index="0"

View File

@ -147,7 +147,7 @@
layout="topleft"
left="10"
top_pad="2"
max_length="64"
max_length="256"
name="classified_desc"
text_color="black"
word_wrap="true" />

View File

@ -17,6 +17,42 @@
name="middle_mouse">
Middle Mouse
</panel.string>
<slider
can_edit_text="false"
control_name="ActiveFloaterTransparency"
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0.8"
layout="topleft"
label_width="120"
label="Active floater opacity:"
left="240"
max_val="1.00"
min_val="0.00"
name="active"
show_text="true"
top="75"
width="290" />
<slider
can_edit_text="false"
control_name="InactiveFloaterTransparency"
decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
initial_value="0.5"
layout="topleft"
label_width="120"
label="Inctive floater opacity:"
left="240"
max_val="1.00"
min_val="0.00"
name="active"
show_text="true"
top_pad="15"
width="290" />
<icon
follows="left|top"
height="18"
@ -70,7 +106,7 @@
height="10"
left="80"
name="heading2"
width="270"
width="240"
top_pad="5">
Automatic position for:
</text>
@ -207,7 +243,7 @@ Automatic position for:
left="80"
name="UI Size:"
top_pad="25"
width="300">
width="160">
UI size
</text>
<slider

View File

@ -141,6 +141,7 @@
layout="topleft"
max_length="65536"
name="Script Editor"
text_readonly_color="DkGray"
width="487"
show_line_numbers="true"
word_wrap="true">

View File

@ -1793,6 +1793,43 @@ Returns the media params for a particular face on an object, given the desired l
llClearPrimMedia(integer face)
Clears (deletes) the media and all params from the given face.
</string>
<string name="LSLTipText_llSetLinkPrimitiveParamsFast" translate="false">
llSetLinkPrimitiveParamsFast(integer linknumber,list rules)
Set primitive parameters for linknumber based on rules.
</string>
<string name="LSLTipText_llGetLinkPrimitiveParams" translate="false">
llGetLinkPrimitiveParams(integer linknumber,list rules)
Get primitive parameters for linknumber based on rules.
</string>
<string name="LSLTipText_llLinkParticleSystem" translate="false">
llLinkParticleSystem(integer linknumber,list rules)
Creates a particle system based on rules. Empty list removes particle system from object.
List format is [ rule1, data1, rule2, data2 . . . rulen, datan ].
</string>
<string name="LSLTipText_llSetLinkTextureAnim" translate="false">
llSetLinkTextureAnim(integer link, integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate)
Animate the texture on the specified prim's face/faces.
</string>
<string name="LSLTipText_llGetLinkNumberOfSides" translate="false">
integer llGetLinkNumberOfSides(integer link)
Returns the number of sides of the specified linked prim.
</string>
<string name="LSLTipText_llGetUsername" translate="false">
string llGetUsername(key id)
Returns the single-word username of an avatar, iff the avatar is in the current region, otherwise the empty string.
</string>
<string name="LSLTipText_llRequestUsername" translate="false">
key llRequestUsername(key id)
Requests single-word username of an avatar. When data is available the dataserver event will be raised.
</string>
<string name="LSLTipText_llGetDisplayName" translate="false">
string llGetDisplayName(key id)
Returns the name of an avatar, iff the avatar is in the current simulator, otherwise the empty string.
</string>
<string name="LSLTipText_llRequestDisplayName" translate="false">
key llRequestDisplayName(key id)
Requests name of an avatar. When data is available the dataserver event will be raised.
</string>
<!-- Avatar busy/away mode -->
<string name="AvatarSetNotAway">Not Away</string>

View File

@ -427,7 +427,17 @@ los media:
<check_box label="Media en bucle" name="media_loop" tool_tip="Ejecuta el media en bucle: cuando acaba su ejecución, vuelve a empezar."/>
</panel>
<panel label="SONIDO" name="land_audio_panel">
<text name="MusicURL:">
URL de música:
</text>
<check_box label="Ocultar la URL" name="hide_music_url" tool_tip="Al marcar esta opción se ocultará la URL de la música a quien no esté autorizado a ver la información de esta parcela."/>
<text name="Sound:">
Sonido:
</text>
<check_box label="Restringir sonidos de objetos y gestos a esta parcela" name="check sound local"/>
<text name="Voice settings:">
Voz:
</text>
<check_box label="Activar la voz" name="parcel_enable_voice_channel"/>
<check_box label="Autorizar la voz (establecido por el Estado)" name="parcel_enable_voice_channel_is_estate_disabled"/>
<check_box label="Limitar la voz a esta parcela" name="parcel_enable_voice_channel_local"/>
@ -460,7 +470,20 @@ los media:
<spinner label="Precio en L$:" name="PriceSpin"/>
<spinner label="Horas de acceso:" name="HoursSpin"/>
<panel name="Allowed_layout_panel">
<text label="Always Allow" name="AllowedText">
Residentes autorizados
</text>
<name_list name="AccessList" tool_tip="([LISTED] listados de un máx. de [MAX])"/>
<button label="Añadir" name="add_allowed"/>
<button label="Quitar" label_selected="Quitar" name="remove_allowed"/>
</panel>
<panel name="Banned_layout_panel">
<text label="Ban" name="BanCheck">
Residentes con el acceso prohibido
</text>
<name_list name="BannedList" tool_tip="([LISTED] listados de un máx. de [MAX])"/>
<button label="Añadir" name="add_banned"/>
<button label="Quitar" label_selected="Quitar" name="remove_banned"/>
</panel>
</panel>
</tab_container>

View File

@ -24,6 +24,10 @@
Saisissez une partie du nom du résident :
</text>
<button label="OK" label_selected="OK" name="Find"/>
<scroll_list name="SearchResults">
<columns label="Nom" name="name"/>
<columns label="Nom d&apos;utilisateur" name="username"/>
</scroll_list>
</panel>
<panel label="Amis" name="FriendsPanel">
<text name="InstructSelectFriend">
@ -39,7 +43,10 @@
mètres
</text>
<button font="SansSerifSmall" label="Rafraîchir la liste" label_selected="Rafraîchir la liste" left_delta="10" name="Refresh" width="105"/>
<scroll_list bottom_delta="-169" height="159" name="NearMe"/>
<scroll_list bottom_delta="-169" height="159" name="NearMe">
<columns label="Nom" name="name"/>
<columns label="Nom d&apos;utilisateur" name="username"/>
</scroll_list>
</panel>
</tab_container>
<button label="OK" label_selected="OK" name="ok_btn"/>

View File

@ -4,19 +4,19 @@
Aucun détecté
</floater.string>
<floater.string name="bump">
[TIME] [FIRST] [LAST] est entré en collision avec vous
[TIME] [NAME] est entré en collision avec vous.
</floater.string>
<floater.string name="llpushobject">
[TIME] [FIRST] [LAST] vous a bousculé avec un script
[TIME] [NAME] vous a bousculé avec un script.
</floater.string>
<floater.string name="selected_object_collide">
[TIME] [FIRST] [LAST] vous a donné un coup avec un objet
[TIME] [NAME] vous a donné un coup avec un objet.
</floater.string>
<floater.string name="scripted_object_collide">
[TIME] [FIRST] [LAST] vous a donné un coup avec un objet scripté
[TIME] [NAME] vous a donné un coup avec un objet scripté.
</floater.string>
<floater.string name="physical_object_collide">
[TIME] [FIRST] [LAST] vous a donné un coup avec un objet physique
[TIME] [NAME] vous a donné un coup avec un objet physique.
</floater.string>
<floater.string name="timeStr">
[[hour,datetime,slt]:[min,datetime,slt]]

View File

@ -1,26 +1,29 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="contents" title="ACHETER UNE COPIE DE L&apos;OBJET">
<floater.string name="title_buy_text">
Acheter
</floater.string>
<floater.string name="title_buy_copy_text">
Acheter une copie
</floater.string>
<floater.string name="no_copy_text">
(pas de copie)
</floater.string>
<floater.string name="no_modify_text">
(pas de modification)
</floater.string>
<floater.string name="no_transfer_text">
(pas de transfert)
</floater.string>
<text name="contents_text">
Contient :
</text>
<text name="buy_text">
Acheter pour [AMOUNT] L$ à [NAME] ?
Acheter pour [AMOUNT] L$ à :
</text>
<text name="buy_name_text">
[NAME] ?
</text>
<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
<button label="Acheter" label_selected="Acheter" name="buy_btn"/>
<string name="title_buy_text">
Acheter
</string>
<string name="title_buy_copy_text">
Acheter une copie
</string>
<string name="no_copy_text">
(pas de copie)
</string>
<string name="no_modify_text">
(pas de modification)
</string>
<string name="no_transfer_text">
(pas de transfert)
</string>
<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
</floater>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Display Name" title="MODIFICATION DU NOM D&apos;AFFICHAGE">
<text name="info_text">
Le nom que vous donnez à votre avatar s&apos;appelle le nom d&apos;affichage. Vous pouvez en changer une fois par semaine.
</text>
<text name="lockout_text">
Vous ne pouvez pas changer de nom d&apos;affichage jusqu&apos;au : [TIME].
</text>
<text name="set_name_label">
Nouveau nom d&apos;affichage :
</text>
<text name="name_confirm_label">
Saisir à nouveau le nom pour confirmer :
</text>
<button label="Enregistrer" name="save_btn" tool_tip="Enregistrer le nouveau nom d&apos;affichage."/>
<button label="Réinitialiser" name="reset_btn" tool_tip="Définir le nom d&apos;affichage sur le nom d&apos;utilisateur."/>
<button label="Annuler" name="cancel_btn"/>
</floater>

View File

@ -1,40 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
follows="all"
height="400"
can_resize="true"
help_topic="event_details"
label="Event"
layout="topleft"
name="Event"
save_rect="true"
save_visibility="false"
title="EVENT DETAILS"
width="600">
<floater.string
name="loading_text">
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater can_resize="true" follows="all" height="400" help_topic="event_details" label="Event" layout="topleft" name="Event" save_rect="true" save_visibility="false" title="EVENT DETAILS" width="600">
<floater.string name="loading_text">
Chargement...
</floater.string>
<floater.string
name="done_text">
Done
</floater.string>
<web_browser
trusted_content="true"
follows="left|right|top|bottom"
layout="topleft"
left="10"
name="browser"
height="365"
width="580"
top="0"/>
<text
follows="bottom|left"
height="16"
layout="topleft"
left_delta="0"
name="status_text"
top_pad="10"
width="150" />
<floater.string name="done_text">
Terminé
</floater.string>
<web_browser follows="left|right|top|bottom" height="365" layout="topleft" left="10" name="browser" top="0" trusted_content="true" width="580"/>
<text follows="bottom|left" height="16" layout="topleft" left_delta="0" name="status_text" top_pad="10" width="150"/>
</floater>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="incoming call" title="APPEL D&apos;UN(E)INCONNU(E)">
<floater name="incoming call" title="Appel entrant">
<floater.string name="lifetime">
5
</floater.string>

Some files were not shown because too many files have changed in this diff Show More