From da94c0eaa2ce2711f0ae26968e87ef3e409126a9 Mon Sep 17 00:00:00 2001 From: Steven Bennetts Date: Fri, 12 Sep 2008 06:27:13 +0000 Subject: QAR-855 Viewer 1.21 RC 2 merge viewer_1-21 94770-96059 -> release --- indra/llcommon/linden_common.h | 6 + indra/llcommon/llapr.cpp | 22 +++ indra/llcommon/llapr.h | 14 ++ indra/llcommon/lldqueueptr.h | 8 +- indra/llcommon/llthread.cpp | 12 +- indra/llcommon/llversionviewer.h | 2 +- indra/llmessage/llpacketbuffer.cpp | 23 --- indra/llmessage/llpacketbuffer.h | 1 - indra/llmessage/llpacketring.cpp | 4 +- indra/llmessage/llpacketring.h | 2 +- indra/llmessage/llxfer.cpp | 4 +- indra/llmessage/llxfer.h | 2 +- indra/llmessage/llxfer_file.cpp | 6 +- indra/llmessage/llxfer_file.h | 2 +- indra/llmessage/llxfer_mem.cpp | 6 +- indra/llmessage/llxfer_mem.h | 2 +- indra/llmessage/llxfer_vfile.cpp | 6 +- indra/llmessage/llxfer_vfile.h | 2 +- indra/llmessage/llxfermanager.cpp | 4 +- indra/llmessage/llxfermanager.h | 2 +- indra/llrender/llgl.cpp | 22 ++- indra/llrender/llrender.cpp | 6 + indra/llrender/llrender.h | 3 +- indra/llrender/llvertexbuffer.cpp | 2 + indra/llui/lltexteditor.cpp | 16 +- indra/llui/llui.cpp | 2 +- indra/llvfs/lldir.cpp | 3 +- indra/llvfs/lldir_win32.cpp | 10 +- indra/llwindow/llwindow.cpp | 5 + indra/llwindow/llwindow.h | 1 + indra/llwindow/llwindowwin32.cpp | 4 +- indra/lscript/lscript_compile/indra.l | 7 +- indra/lscript/lscript_compile/indra.y | 71 +++++++ indra/newview/app_settings/keywords.ini | 4 + indra/newview/app_settings/settings.xml | 68 +++---- indra/newview/gpu_table.txt | 6 + indra/newview/llappviewer.cpp | 13 +- indra/newview/llappviewerwin32.cpp | 35 +++- indra/newview/llfloaterfriends.cpp | 33 +++- indra/newview/llfloaterfriends.h | 3 +- indra/newview/llfloaterimagepreview.cpp | 3 +- indra/newview/llfloatertopobjects.cpp | 23 +-- indra/newview/llglsandbox.cpp | 41 ---- indra/newview/llinventorymodel.cpp | 76 ++++++-- indra/newview/llinventorymodel.h | 15 +- indra/newview/llpanellogin.cpp | 14 +- indra/newview/llsky.h | 1 - indra/newview/llspatialpartition.cpp | 7 +- indra/newview/lltexturecache.cpp | 12 ++ indra/newview/lltexturecache.h | 3 + indra/newview/lltoolpie.cpp | 2 +- indra/newview/llurl.cpp | 4 +- indra/newview/llurl.h | 2 +- indra/newview/llviewercontrol.cpp | 17 +- indra/newview/llviewerdisplay.cpp | 11 -- indra/newview/llviewermedia.cpp | 6 +- indra/newview/llviewermenu.cpp | 213 ++------------------- indra/newview/llviewerstats.cpp | 1 - indra/newview/llviewerwindow.h | 5 +- indra/newview/llvoavatar.cpp | 13 +- indra/newview/llvoiceclient.cpp | 41 ++-- indra/newview/llvoiceclient.h | 4 +- indra/newview/llvovolume.cpp | 11 +- indra/newview/llxmlrpctransaction.cpp | 2 +- indra/newview/llxmlrpctransaction.h | 2 +- indra/newview/pipeline.cpp | 1 + indra/newview/pipeline.h | 3 +- .../newview/skins/default/xui/de/floater_about.xml | 38 ++-- .../skins/default/xui/de/floater_about_land.xml | 22 ++- indra/newview/skins/default/xui/de/floater_im.xml | 2 +- .../default/xui/de/floater_live_lsleditor.xml | 1 + .../skins/default/xui/de/floater_mem_leaking.xml | 18 ++ .../skins/default/xui/de/floater_postcard.xml | 18 +- .../skins/default/xui/de/floater_report_abuse.xml | 113 +++++++++++ .../skins/default/xui/de/floater_snapshot.xml | 30 ++- .../newview/skins/default/xui/de/floater_tools.xml | 25 +++ .../skins/default/xui/de/floater_top_objects.xml | 21 +- indra/newview/skins/default/xui/de/floater_tos.xml | 1 + indra/newview/skins/default/xui/de/menu_viewer.xml | 14 +- indra/newview/skins/default/xui/de/mime_types.xml | 11 +- indra/newview/skins/default/xui/de/panel_login.xml | 5 +- .../default/xui/de/panel_preferences_chat.xml | 5 +- .../default/xui/de/panel_preferences_general.xml | 2 + .../skins/default/xui/de/panel_region_debug.xml | 14 +- .../skins/default/xui/de/panel_region_estate.xml | 6 + .../newview/skins/default/xui/de/role_actions.xml | 15 +- indra/newview/skins/default/xui/de/strings.xml | 24 +++ .../newview/skins/default/xui/ja/floater_about.xml | 40 ++-- .../skins/default/xui/ja/floater_about_land.xml | 4 + indra/newview/skins/default/xui/ja/floater_im.xml | 2 +- .../default/xui/ja/floater_live_lsleditor.xml | 1 + .../skins/default/xui/ja/floater_mem_leaking.xml | 19 ++ .../skins/default/xui/ja/floater_postcard.xml | 23 ++- .../skins/default/xui/ja/floater_report_abuse.xml | 115 ++++++++++- .../skins/default/xui/ja/floater_snapshot.xml | 30 ++- .../newview/skins/default/xui/ja/floater_tools.xml | 25 +++ .../skins/default/xui/ja/floater_top_objects.xml | 1 + indra/newview/skins/default/xui/ja/floater_tos.xml | 1 + indra/newview/skins/default/xui/ja/menu_viewer.xml | 6 +- indra/newview/skins/default/xui/ja/mime_types.xml | 7 +- indra/newview/skins/default/xui/ja/panel_login.xml | 5 +- .../default/xui/ja/panel_preferences_chat.xml | 6 +- .../default/xui/ja/panel_preferences_general.xml | 2 + .../skins/default/xui/ja/panel_region_debug.xml | 15 +- .../skins/default/xui/ja/panel_region_estate.xml | 6 + .../newview/skins/default/xui/ja/role_actions.xml | 27 ++- indra/newview/skins/default/xui/ja/strings.xml | 24 +++ indra/win_crash_logger/llcrashloggerwindows.cpp | 2 + indra/win_crash_logger/llcrashloggerwindows.h | 1 - indra/win_crash_logger/win_crash_logger.cpp | 2 + 110 files changed, 1137 insertions(+), 589 deletions(-) create mode 100644 indra/newview/skins/default/xui/de/floater_mem_leaking.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_mem_leaking.xml diff --git a/indra/llcommon/linden_common.h b/indra/llcommon/linden_common.h index 60ea21d642..1581522a2e 100644 --- a/indra/llcommon/linden_common.h +++ b/indra/llcommon/linden_common.h @@ -32,6 +32,12 @@ #ifndef LL_LINDEN_COMMON_H #define LL_LINDEN_COMMON_H +#if defined(LL_WINDOWS) && defined(_DEBUG) +# define _CRTDBG_MAP_ALLOC +# include +# include +#endif + #include "llpreprocessor.h" #include diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index e83473216a..697f380f98 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -72,6 +72,28 @@ void ll_cleanup_apr() apr_terminate(); } +// +//LLAPRPool +// +LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size) +{ + mStatus = apr_pool_create(&mPool, parent); + + if(size > 0) //size is the number of blocks (which is usually 4K), NOT bytes. + { + apr_allocator_t *allocator = apr_pool_allocator_get(mPool); + if (allocator) + { + apr_allocator_max_free_set(allocator, size) ; + } + } +} + +LLAPRPool::~LLAPRPool() +{ + apr_pool_destroy(mPool) ; +} + // // LLScopedLock // diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index 403d504932..7d6dd4590f 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -60,6 +60,20 @@ void ll_init_apr(); */ void ll_cleanup_apr(); +class LLAPRPool +{ +public: + LLAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0) ; + ~LLAPRPool() ; + + apr_pool_t* getAPRPool() {return mPool ; } + apr_status_t getStatus() {return mStatus ; } + +private: + apr_pool_t* mPool ; + apr_status_t mStatus ; +} ; + /** * @class LLScopedLock * @brief Small class to help lock and unlock mutexes. diff --git a/indra/llcommon/lldqueueptr.h b/indra/llcommon/lldqueueptr.h index 06eee34cbc..0999e6754a 100644 --- a/indra/llcommon/lldqueueptr.h +++ b/indra/llcommon/lldqueueptr.h @@ -47,7 +47,7 @@ public: void init(); void destroy(); void reset(); - void realloc(U32 newsize); + void reallocate(U32 newsize); // ACCESSORS const Type& get(const S32 index) const; // no bounds checking @@ -115,7 +115,7 @@ template inline LLDynamicQueuePtr::LLDynamicQueuePtr(const S32 size) { init(); - realloc(size); + reallocate(size); } template @@ -134,7 +134,7 @@ inline void LLDynamicQueuePtr::init() } template -inline void LLDynamicQueuePtr::realloc(U32 newsize) +inline void LLDynamicQueuePtr::reallocate(U32 newsize) { if (newsize) { @@ -308,7 +308,7 @@ inline S32 LLDynamicQueuePtr::push(const Type &obj) { if (mMaxObj - count() <= 1) { - realloc(mMaxObj * 2); + reallocate(mMaxObj * 2); } mMemory[mLastObj++] = obj; diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index cc58552099..81cae60f3b 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -266,12 +266,12 @@ void LLThread::wakeLocked() LLMutex::LLMutex(apr_pool_t *poolp) : mAPRMutexp(NULL) { - if (poolp) - { - mIsLocalPool = FALSE; - mAPRPoolp = poolp; - } - else + //if (poolp) + //{ + // mIsLocalPool = FALSE; + // mAPRPoolp = poolp; + //} + //else { mIsLocalPool = TRUE; apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 0555b9ea3c..ce8d1e5759 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -34,7 +34,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 21; -const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_PATCH = 2; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Release"; diff --git a/indra/llmessage/llpacketbuffer.cpp b/indra/llmessage/llpacketbuffer.cpp index cb71fcd773..f264e8f495 100644 --- a/indra/llmessage/llpacketbuffer.cpp +++ b/indra/llmessage/llpacketbuffer.cpp @@ -65,7 +65,6 @@ LLPacketBuffer::LLPacketBuffer (S32 hSocket) LLPacketBuffer::~LLPacketBuffer () { - free(); } /////////////////////////////////////////////////////////// @@ -76,25 +75,3 @@ void LLPacketBuffer::init (S32 hSocket) mHost = ::get_sender(); } -/////////////////////////////////////////////////////////// - -void LLPacketBuffer::free () -{ -} - - - - - - - - - - - - - - - - - diff --git a/indra/llmessage/llpacketbuffer.h b/indra/llmessage/llpacketbuffer.h index 1e57517f29..9308202f1b 100644 --- a/indra/llmessage/llpacketbuffer.h +++ b/indra/llmessage/llpacketbuffer.h @@ -47,7 +47,6 @@ public: const char *getData() const { return mData; } LLHost getHost() const { return mHost; } void init(S32 hSocket); - void free(); protected: char mData[NET_BUFFER_SIZE]; // packet data /* Flawfinder : ignore */ diff --git a/indra/llmessage/llpacketring.cpp b/indra/llmessage/llpacketring.cpp index 48a02fede5..646d1865ea 100644 --- a/indra/llmessage/llpacketring.cpp +++ b/indra/llmessage/llpacketring.cpp @@ -59,11 +59,11 @@ LLPacketRing::LLPacketRing () : /////////////////////////////////////////////////////////// LLPacketRing::~LLPacketRing () { - free(); + cleanup(); } /////////////////////////////////////////////////////////// -void LLPacketRing::free () +void LLPacketRing::cleanup () { LLPacketBuffer *packetp; diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h index 0e1450ac1b..20aea5950d 100644 --- a/indra/llmessage/llpacketring.h +++ b/indra/llmessage/llpacketring.h @@ -47,7 +47,7 @@ public: LLPacketRing(); ~LLPacketRing(); - void free(); + void cleanup(); void dropPackets(U32); void setDropPercentage (F32 percent_to_drop); diff --git a/indra/llmessage/llxfer.cpp b/indra/llmessage/llxfer.cpp index 5682b1c454..8091184fda 100644 --- a/indra/llmessage/llxfer.cpp +++ b/indra/llmessage/llxfer.cpp @@ -55,7 +55,7 @@ LLXfer::LLXfer (S32 chunk_size) LLXfer::~LLXfer () { - free(); + cleanup(); } /////////////////////////////////////////////////////////// @@ -90,7 +90,7 @@ void LLXfer::init (S32 chunk_size) /////////////////////////////////////////////////////////// -void LLXfer::free () +void LLXfer::cleanup () { if (mBuffer) { diff --git a/indra/llmessage/llxfer.h b/indra/llmessage/llxfer.h index 57abc28960..9a8696e143 100644 --- a/indra/llmessage/llxfer.h +++ b/indra/llmessage/llxfer.h @@ -88,7 +88,7 @@ class LLXfer virtual ~LLXfer(); void init(S32 chunk_size); - virtual void free(); + virtual void cleanup(); virtual S32 startSend (U64 xfer_id, const LLHost &remote_host); virtual void sendPacket(S32 packet_num); diff --git a/indra/llmessage/llxfer_file.cpp b/indra/llmessage/llxfer_file.cpp index 3643c4880d..4926311adb 100644 --- a/indra/llmessage/llxfer_file.cpp +++ b/indra/llmessage/llxfer_file.cpp @@ -67,7 +67,7 @@ LLXfer_File::LLXfer_File (const std::string& local_filename, BOOL delete_local_o LLXfer_File::~LLXfer_File () { - free(); + cleanup(); } /////////////////////////////////////////////////////////// @@ -95,7 +95,7 @@ void LLXfer_File::init (const std::string& local_filename, BOOL delete_local_on_ /////////////////////////////////////////////////////////// -void LLXfer_File::free () +void LLXfer_File::cleanup () { if (mFp) { @@ -115,7 +115,7 @@ void LLXfer_File::free () lldebugs << "Keeping local file: " << mLocalFilename << llendl; } - LLXfer::free(); + LLXfer::cleanup(); } /////////////////////////////////////////////////////////// diff --git a/indra/llmessage/llxfer_file.h b/indra/llmessage/llxfer_file.h index 04336c75fe..8fdfd5e71f 100644 --- a/indra/llmessage/llxfer_file.h +++ b/indra/llmessage/llxfer_file.h @@ -53,7 +53,7 @@ class LLXfer_File : public LLXfer virtual ~LLXfer_File(); virtual void init(const std::string& local_filename, BOOL delete_local_on_completion, S32 chunk_size); - virtual void free(); + virtual void cleanup(); virtual S32 initializeRequest(U64 xfer_id, const std::string& local_filename, diff --git a/indra/llmessage/llxfer_mem.cpp b/indra/llmessage/llxfer_mem.cpp index dbaa3aebed..20b3db3e0b 100644 --- a/indra/llmessage/llxfer_mem.cpp +++ b/indra/llmessage/llxfer_mem.cpp @@ -48,7 +48,7 @@ LLXfer_Mem::LLXfer_Mem () LLXfer_Mem::~LLXfer_Mem () { - free(); + cleanup(); } /////////////////////////////////////////////////////////// @@ -62,9 +62,9 @@ void LLXfer_Mem::init () /////////////////////////////////////////////////////////// -void LLXfer_Mem::free () +void LLXfer_Mem::cleanup () { - LLXfer::free(); + LLXfer::cleanup(); } /////////////////////////////////////////////////////////// diff --git a/indra/llmessage/llxfer_mem.h b/indra/llmessage/llxfer_mem.h index a6b95c0fcf..c251348553 100644 --- a/indra/llmessage/llxfer_mem.h +++ b/indra/llmessage/llxfer_mem.h @@ -55,7 +55,7 @@ class LLXfer_Mem : public LLXfer virtual ~LLXfer_Mem(); virtual void init(); - virtual void free(); + virtual void cleanup(); virtual S32 startSend (U64 xfer_id, const LLHost &remote_host); virtual U64 registerXfer(U64 xfer_id, const void *datap, const S32 length); diff --git a/indra/llmessage/llxfer_vfile.cpp b/indra/llmessage/llxfer_vfile.cpp index 6dd683043b..aff1636290 100644 --- a/indra/llmessage/llxfer_vfile.cpp +++ b/indra/llmessage/llxfer_vfile.cpp @@ -60,7 +60,7 @@ LLXfer_VFile::LLXfer_VFile (LLVFS *vfs, const LLUUID &local_id, LLAssetType::ETy LLXfer_VFile::~LLXfer_VFile () { - free(); + cleanup(); } /////////////////////////////////////////////////////////// @@ -82,7 +82,7 @@ void LLXfer_VFile::init (LLVFS *vfs, const LLUUID &local_id, LLAssetType::EType /////////////////////////////////////////////////////////// -void LLXfer_VFile::free () +void LLXfer_VFile::cleanup () { LLVFile file(mVFS, mTempID, mType, LLVFile::WRITE); file.remove(); @@ -90,7 +90,7 @@ void LLXfer_VFile::free () delete mVFile; mVFile = NULL; - LLXfer::free(); + LLXfer::cleanup(); } /////////////////////////////////////////////////////////// diff --git a/indra/llmessage/llxfer_vfile.h b/indra/llmessage/llxfer_vfile.h index 84457edf26..c883d27854 100644 --- a/indra/llmessage/llxfer_vfile.h +++ b/indra/llmessage/llxfer_vfile.h @@ -58,7 +58,7 @@ class LLXfer_VFile : public LLXfer virtual ~LLXfer_VFile(); virtual void init(LLVFS *vfs, const LLUUID &local_id, LLAssetType::EType type); - virtual void free(); + virtual void cleanup(); virtual S32 initializeRequest(U64 xfer_id, LLVFS *vfs, diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp index 7f05404636..2afb9845c0 100644 --- a/indra/llmessage/llxfermanager.cpp +++ b/indra/llmessage/llxfermanager.cpp @@ -64,7 +64,7 @@ LLXferManager::LLXferManager (LLVFS *vfs) LLXferManager::~LLXferManager () { - free(); + cleanup(); } /////////////////////////////////////////////////////////// @@ -86,7 +86,7 @@ void LLXferManager::init (LLVFS *vfs) /////////////////////////////////////////////////////////// -void LLXferManager::free () +void LLXferManager::cleanup () { LLXfer *xferp; LLXfer *delp; diff --git a/indra/llmessage/llxfermanager.h b/indra/llmessage/llxfermanager.h index dff8181584..1a3e37102f 100644 --- a/indra/llmessage/llxfermanager.h +++ b/indra/llmessage/llxfermanager.h @@ -114,7 +114,7 @@ class LLXferManager virtual ~LLXferManager(); virtual void init(LLVFS *vfs); - virtual void free(); + virtual void cleanup(); void setUseAckThrottling(const BOOL use); void setAckThrottleBPS(const F32 bps); diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 42beddc5c7..570a0cbed1 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -60,6 +60,8 @@ BOOL gClothRipple = FALSE; BOOL gNoRender = FALSE; LLMatrix4 gGLObliqueProjectionInverse; +#define LL_GL_NAME_POOLING 0 + LLGLNamePool::pool_list_t LLGLNamePool::sInstances; #if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS @@ -1627,6 +1629,7 @@ void LLGLNamePool::cleanup() GLuint LLGLNamePool::allocate() { +#if LL_GL_NAME_POOLING for (name_list_t::iterator iter = mNameList.begin(); iter != mNameList.end(); ++iter) { if (!iter->used) @@ -1642,18 +1645,33 @@ GLuint LLGLNamePool::allocate() mNameList.push_back(entry); return entry.name; +#else + return allocateName(); +#endif } void LLGLNamePool::release(GLuint name) { +#if LL_GL_NAME_POOLING for (name_list_t::iterator iter = mNameList.begin(); iter != mNameList.end(); ++iter) { if (iter->name == name) { - iter->used = FALSE; - return; + if (iter->used) + { + iter->used = FALSE; + return; + } + else + { + llerrs << "Attempted to release a pooled name that is not in use!" << llendl; + } } } + llerrs << "Attempted to release a non pooled name!" << llendl; +#else + releaseName(name); +#endif } //static diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 4a87424bb8..9b116d6410 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -438,11 +438,17 @@ LLRender::LLRender() } LLRender::~LLRender() +{ + shutdown(); +} + +void LLRender::shutdown() { for (U32 i = 0; i < mTexUnits.size(); i++) { delete mTexUnits[i]; } + mTexUnits.clear(); } void LLRender::translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z) diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 7896f6c922..5133f2804e 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -176,7 +176,8 @@ public: LLRender(); ~LLRender(); - + void shutdown(); + void translatef(const GLfloat& x, const GLfloat& y, const GLfloat& z); void scalef(const GLfloat& x, const GLfloat& y, const GLfloat& z); void pushMatrix(); diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 3f2eb61641..2414d2adff 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -195,6 +195,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT, ((U16*) getIndicesPointer()) + indices_offset); + stop_glerror(); } void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const @@ -246,6 +247,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const } glDrawArrays(sGLMode[mode], first, count); + stop_glerror(); } //static diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index bf5cfd9934..0440d4c68b 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -4252,26 +4252,29 @@ void LLTextEditor::setTextEditorParameters(LLXMLNodePtr node) } /////////////////////////////////////////////////////////////////// +// Refactoring note: We may eventually want to replace this with boost::regex or +// boost::tokenizer capabilities since we've already fixed at least two JIRAs +// concerning logic issues associated with this function. S32 LLTextEditor::findHTMLToken(const std::string &line, S32 pos, BOOL reverse) const { std::string openers=" \t\n('\"[{<>"; std::string closers=" \t\n)'\"]}><;"; - S32 m2; - S32 retval; + S32 m2 = 0; + S32 retval = 0; if (reverse) { - for (retval=pos; retval>0; retval--) + for (retval=pos; retval >= 0; retval--) { m2 = openers.find(line.substr(retval,1)); if (m2 >= 0) { - retval++; break; } } + return retval+1; } else { @@ -4284,9 +4287,8 @@ S32 LLTextEditor::findHTMLToken(const std::string &line, S32 pos, BOOL reverse) break; } } - } - - return retval; + return retval; + } } BOOL LLTextEditor::findHTML(const std::string &line, S32 *begin, S32 *end) const diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index f34c48b729..43898f57ef 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -134,7 +134,7 @@ void gl_state_for_2d(S32 width, S32 height) glMatrixMode(GL_PROJECTION); glLoadIdentity(); - glOrtho(0.0f, window_width, 0.0f, window_height, -1.0f, 1.0f); + glOrtho(0.0f, llmax(window_width, 1.f), 0.0f, llmax(window_height,1.f), -1.0f, 1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); stop_glerror(); diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index 325a2a39b6..ff7bfde521 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -377,7 +377,8 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd case LL_PATH_EXECUTABLE: prefix = getExecutableDir(); - + break; + default: llassert(0); } diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp index d21babec24..6e124002bc 100644 --- a/indra/llvfs/lldir_win32.cpp +++ b/indra/llvfs/lldir_win32.cpp @@ -117,15 +117,13 @@ LLDir_Win32::LLDir_Win32() mExecutableDir = utf16str_to_utf8str(llutf16string(w_str)); #endif - mAppRODataDir = getCurPath(); - // *FIX:Mani - The following is the old way we did things. I'm keeping this around - // in case there is some really good reason to make mAppRODataDir == mExecutableDir - /* - if (strstr(mExecutableDir.c_str(), "indra\\newview")) + // When running in a dev tree, app_settings is under indra/newview/ + // but in production it is under Program Files/SecondLife/ + // Attempt to detect which one we're using. JC + if (mExecutableDir.find("indra") != std::string::npos) mAppRODataDir = getCurPath(); else mAppRODataDir = mExecutableDir; - */ } LLDir_Win32::~LLDir_Win32() diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp index 6b1cabc505..4f467be02d 100644 --- a/indra/llwindow/llwindow.cpp +++ b/indra/llwindow/llwindow.cpp @@ -203,6 +203,11 @@ BOOL LLWindowCallbacks::handleDeviceChange(LLWindow *window) return FALSE; } +void LLWindowCallbacks::handlePingWatchdog(LLWindow *window, const char * msg) +{ + +} + S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type) { // Properly hide the splash screen when displaying the message box diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index ec09234c83..9b1f005920 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -119,6 +119,7 @@ public: virtual void handleDataCopy(LLWindow *window, S32 data_type, void *data); virtual BOOL handleTimerEvent(LLWindow *window); virtual BOOL handleDeviceChange(LLWindow *window); + virtual void handlePingWatchdog(LLWindow *window, const char * msg); }; // Refer to llwindow_test in test/common/llwindow for usage example diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 1aaf18e3b6..0f2ef525b2 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -1575,7 +1575,9 @@ void LLWindowWin32::gatherInput() while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && msg_count < MAX_MESSAGE_PER_UPDATE) { + mCallbacks->handlePingWatchdog(this, "Main:TranslateGatherInput"); TranslateMessage(&msg); + mCallbacks->handlePingWatchdog(this, "Main:DispatchGatherInput"); DispatchMessage(&msg); msg_count++; @@ -1602,7 +1604,7 @@ void LLWindowWin32::gatherInput() } } */ - + mCallbacks->handlePingWatchdog(this, "Main:AsyncCallbackGatherInput"); // For async host by name support. Really hacky. if (gAsyncMsgCallback && (LL_WM_HOST_RESOLVED == msg.message)) { diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index 49ed6fc5ee..3e62195dc8 100644 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -611,6 +611,11 @@ extern "C" { int yyerror(const char *fmt, ...); } "TEXTURE_PLYWOOD" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "89556747-24cb-43ed-920b-47caed15465f"); return(STRING_CONSTANT); } "TEXTURE_TRANSPARENT" { yylval.sval = new char[UUID_STR_LENGTH]; strcpy(yylval.sval, "8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"); return(STRING_CONSTANT); } +"TOUCH_INVALID_FACE" { count(); yylval.ival = -1; return(INTEGER_CONSTANT); } +"TOUCH_INVALID_VECTOR" { count(); return(TOUCH_INVALID_VECTOR); } +"TOUCH_INVALID_TEXCOORD" { count(); return(TOUCH_INVALID_TEXCOORD); } + + {L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); } {N}+{E} { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); } @@ -752,8 +757,8 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename, #ifdef EMERGENCY_DEBUG_PRINTOUTS fclose(compfile); #endif - fclose(yyout); } + fclose(yyout); fclose(yyin); } diff --git a/indra/lscript/lscript_compile/indra.y b/indra/lscript/lscript_compile/indra.y index d10cbfedba..fdc240c772 100644 --- a/indra/lscript/lscript_compile/indra.y +++ b/indra/lscript/lscript_compile/indra.y @@ -136,6 +136,9 @@ %token ZERO_VECTOR %token ZERO_ROTATION +%token TOUCH_INVALID_VECTOR +%token TOUCH_INVALID_TEXCOORD + %nonassoc LOWER_THAN_ELSE %nonassoc ELSE @@ -439,6 +442,40 @@ vector_constant $$ = new LLScriptSAVector(gLine, gColumn, sa0, sa1, sa2); gAllocationManager->addAllocation($$); } + | TOUCH_INVALID_VECTOR + { + LLScriptConstantFloat *cf0 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf0); + LLScriptSAConstant *sa0 = new LLScriptSAConstant(gLine, gColumn, cf0); + gAllocationManager->addAllocation(sa0); + LLScriptConstantFloat *cf1 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf1); + LLScriptSAConstant *sa1 = new LLScriptSAConstant(gLine, gColumn, cf1); + gAllocationManager->addAllocation(sa1); + LLScriptConstantFloat *cf2 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf2); + LLScriptSAConstant *sa2 = new LLScriptSAConstant(gLine, gColumn, cf2); + gAllocationManager->addAllocation(sa2); + $$ = new LLScriptSAVector(gLine, gColumn, sa0, sa1, sa2); + gAllocationManager->addAllocation($$); + } + | TOUCH_INVALID_TEXCOORD + { + LLScriptConstantFloat *cf0 = new LLScriptConstantFloat(gLine, gColumn, -1.f); + gAllocationManager->addAllocation(cf0); + LLScriptSAConstant *sa0 = new LLScriptSAConstant(gLine, gColumn, cf0); + gAllocationManager->addAllocation(sa0); + LLScriptConstantFloat *cf1 = new LLScriptConstantFloat(gLine, gColumn, -1.f); + gAllocationManager->addAllocation(cf1); + LLScriptSAConstant *sa1 = new LLScriptSAConstant(gLine, gColumn, cf1); + gAllocationManager->addAllocation(sa1); + LLScriptConstantFloat *cf2 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf2); + LLScriptSAConstant *sa2 = new LLScriptSAConstant(gLine, gColumn, cf2); + gAllocationManager->addAllocation(sa2); + $$ = new LLScriptSAVector(gLine, gColumn, sa0, sa1, sa2); + gAllocationManager->addAllocation($$); + } ; quaternion_constant @@ -1645,6 +1682,40 @@ vector_initializer $$ = new LLScriptVectorInitializer(gLine, gColumn, sa0, sa1, sa2); gAllocationManager->addAllocation($$); } + | TOUCH_INVALID_VECTOR + { + LLScriptConstantFloat *cf0 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf0); + LLScriptConstantExpression *sa0 = new LLScriptConstantExpression(gLine, gColumn, cf0); + gAllocationManager->addAllocation(sa0); + LLScriptConstantFloat *cf1 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf1); + LLScriptConstantExpression *sa1 = new LLScriptConstantExpression(gLine, gColumn, cf1); + gAllocationManager->addAllocation(sa1); + LLScriptConstantFloat *cf2 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf2); + LLScriptConstantExpression *sa2 = new LLScriptConstantExpression(gLine, gColumn, cf2); + gAllocationManager->addAllocation(sa2); + $$ = new LLScriptVectorInitializer(gLine, gColumn, sa0, sa1, sa2); + gAllocationManager->addAllocation($$); + } + | TOUCH_INVALID_TEXCOORD + { + LLScriptConstantFloat *cf0 = new LLScriptConstantFloat(gLine, gColumn, -1.f); + gAllocationManager->addAllocation(cf0); + LLScriptConstantExpression *sa0 = new LLScriptConstantExpression(gLine, gColumn, cf0); + gAllocationManager->addAllocation(sa0); + LLScriptConstantFloat *cf1 = new LLScriptConstantFloat(gLine, gColumn, -1.f); + gAllocationManager->addAllocation(cf1); + LLScriptConstantExpression *sa1 = new LLScriptConstantExpression(gLine, gColumn, cf1); + gAllocationManager->addAllocation(sa1); + LLScriptConstantFloat *cf2 = new LLScriptConstantFloat(gLine, gColumn, 0.f); + gAllocationManager->addAllocation(cf2); + LLScriptConstantExpression *sa2 = new LLScriptConstantExpression(gLine, gColumn, cf2); + gAllocationManager->addAllocation(sa2); + $$ = new LLScriptVectorInitializer(gLine, gColumn, sa0, sa1, sa2); + gAllocationManager->addAllocation($$); + } ; quaternion_initializer diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index 23c88dc449..3679c3882c 100644 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -506,6 +506,10 @@ CLICK_ACTION_OPEN Used with llSetClickAction to set open as the default ac CLICK_ACTION_PLAY Used with llSetClickAction to set play as the default action when object is clicked CLICK_ACTION_OPEN_MEDIA Used with llSetClickAction to set open-media as the default action when object is clicked +TOUCH_INVALID_TEXCOORD Value returned by llDetectedTouchUV() and llDetectedTouchST() when the touch position is not valid. +TOUCH_INVALID_VECTOR Value returned by llDetectedTouchPos(), llDetectedTouchNormal(), and llDetectedTouchBinormal() when the touch position is not valid. +TOUCH_INVALID_FACE Value returned by llDetectedTouchFace() when the touch position is not valid. + # string constants [word .1, .3, .5] NULL_KEY Indicates an empty key diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8526c5afcd..1f34bae9b5 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2360,17 +2360,6 @@ 1.0 - EnablePushToTalk - - Comment - Must hold down a key or moouse button when talking into your microphone - Persist - 1 - Type - Boolean - Value - 1 - EnableRippleWater Comment @@ -5165,7 +5154,7 @@ PTTCurrentlyEnabled Comment - + Use Push to Talk mode Persist 0 Type @@ -5206,28 +5195,6 @@ Value - PerFrameHoverPick - - Comment - Detect the object under the mouse continually - Persist - 1 - Type - Boolean - Value - 1 - - PerFrameHoverPickCount - - Comment - Detect the object under the mouse every n frames - Persist - 1 - Type - S32 - Value - 1 - PermissionsCautionEnabled Comment @@ -5277,6 +5244,28 @@ Value 0.34999999404 + PicksPerSecondMouseMoving + + Comment + How often to perform hover picks while the mouse is moving (picks per second) + Persist + 1 + Type + F32 + Value + 5.0 + + PicksPerSecondMouseStationary + + Comment + How often to perform hover picks while the mouse is stationary (picks per second) + Persist + 1 + Type + F32 + Value + 0.0 + PieMenuLineWidth Comment @@ -6885,17 +6874,6 @@ Value 0 - ShowDepthBuffer - - Comment - Show depth buffer contents - Persist - 1 - Type - Boolean - Value - 0 - ShowDirectory Comment diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 7e7be97482..77b75e178f 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -67,6 +67,12 @@ ATI Mobility Radeon 8xxx .*ATI.*Mobility.*Radeon 8.* 0 1 ATI Mobility Radeon 9800 .*ATI.*Mobility.*98.* 1 1 ATI Mobility Radeon 9700 .*ATI.*Mobility.*97.* 1 1 ATI Mobility Radeon 9600 .*ATI.*Mobility.*96.* 0 1 +ATI Mobility Radeon HD 2300 .*ATI.*Mobility.*HD.*23.* 1 1 +ATI Mobility Radeon HD 2400 .*ATI.*Mobility.*HD.*24.* 1 1 +ATI Mobility Radeon HD 2600 .*ATI.*Mobility.*HD.*26.* 3 1 +ATI Mobility Radeon HD 3400 .*ATI.*Mobility.*HD.*34.* 1 1 +ATI Mobility Radeon HD 3600 .*ATI.*Mobility.*HD.*36.* 3 1 +ATI Mobility Radeon HD 3800 .*ATI.*Mobility.*HD.*38.* 3 1 ATI Mobility Radeon X1xxx .*ATI.*Mobility.*X1.* 0 1 ATI Mobility Radeon X2xxx .*ATI.*Mobility.*X2.* 0 1 ATI Mobility Radeon X3xx .*ATI.*Mobility.*X3.* 1 1 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 4c8ea54d8d..8ee21b6115 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -58,6 +58,7 @@ #include "llfloatersnapshot.h" #include "llviewerwindow.h" #include "llviewerdisplay.h" +#include "llviewermedia.h" #include "llviewermessage.h" #include "llviewerobjectlist.h" #include "llworldmap.h" @@ -82,8 +83,6 @@ # include // For initMarkerFile support #endif - - #include "llnotify.h" #include "llviewerkeyboard.h" #include "lllfsthread.h" @@ -466,9 +465,6 @@ static void settings_modify() gSavedSettings.setU32("VectorizeProcessor", 0 ); gSavedSettings.setBOOL("VectorizeSkin", FALSE); #endif - - // propagate push to talk preference to current status - gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk")); } void LLAppViewer::initGridChoice() @@ -581,7 +577,7 @@ bool LLAppViewer::init() // into the log files during normal startup until AFTER // we run the "program crashed last time" error handler below. // - + // Need to do this initialization before we do anything else, since anything // that touches files should really go through the lldir API gDirUtilp->initAppDirs("SecondLife"); @@ -1364,6 +1360,7 @@ bool LLAppViewer::cleanup() sImageDecodeThread = NULL; gImageList.shutdown(); // shutdown again in case a callback added something + LLUIImageList::getInstance()->cleanUp(); // This should eventually be done in LLAppViewer LLImage::cleanupClass(); @@ -1405,9 +1402,11 @@ bool LLAppViewer::cleanup() LLWeb::loadURLExternal( gLaunchFileOnQuit ); } - + + LLViewerMedia::cleanupClass(); llinfos << "Goodbye" << llendflush; + // return 0; return true; } diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 1d8f6a218c..a25b86467d 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -31,6 +31,10 @@ #include "llviewerprecompiledheaders.h" +#if defined(_DEBUG) +# define WINDOWS_CRT_MEM_CHECKS 1 +#endif + #include "llappviewerwin32.h" #include "llmemtype.h" @@ -127,6 +131,10 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, { LLMemType mt1(LLMemType::MTYPE_STARTUP); +#if WINDOWS_CRT_MEM_CHECKS && !INCLUDE_VLD + _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); // dump memory leaks on exit +#endif + // *FIX: global gIconResource = MAKEINTRESOURCE(IDI_LL_ICON); @@ -156,7 +164,32 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, // the assumption is that the error handler is responsible for doing // app cleanup if there was a problem. // - viewer_app_ptr->cleanup(); +#if WINDOWS_CRT_MEM_CHECKS + llinfos << "CRT Checking memory:" << llendflush; + if (!_CrtCheckMemory()) + { + llwarns << "_CrtCheckMemory() failed at prior to cleanup!" << llendflush; + } + else + { + llinfos << " No corruption detected." << llendflush; + } +#endif + + viewer_app_ptr->cleanup(); + +#if WINDOWS_CRT_MEM_CHECKS + llinfos << "CRT Checking memory:" << llendflush; + if (!_CrtCheckMemory()) + { + llwarns << "_CrtCheckMemory() failed after cleanup!" << llendflush; + } + else + { + llinfos << " No corruption detected." << llendflush; + } +#endif + } delete viewer_app_ptr; viewer_app_ptr = NULL; diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp index c5823ce0de..2d7d2ee15d 100644 --- a/indra/newview/llfloaterfriends.cpp +++ b/indra/newview/llfloaterfriends.cpp @@ -41,6 +41,7 @@ #include "lldir.h" #include "llagent.h" +#include "llappviewer.h" // for gLastVersionChannel #include "llfloateravatarpicker.h" #include "llviewerwindow.h" #include "llbutton.h" @@ -591,7 +592,7 @@ struct LLAddFriendData }; // static -void LLPanelFriends::callbackAddFriend(S32 option, const std::string& text, void* data) +void LLPanelFriends::callbackAddFriendWithMessage(S32 option, const std::string& text, void* data) { LLAddFriendData* add = (LLAddFriendData*)data; if (option == 0) @@ -601,6 +602,22 @@ void LLPanelFriends::callbackAddFriend(S32 option, const std::string& text, void delete add; } +// static +void LLPanelFriends::callbackAddFriend(S32 option, void* data) +{ + LLAddFriendData* add = (LLAddFriendData*)data; + if (option == 0) + { + // Servers older than 1.25 require the text of the message to be the + // calling card folder ID for the offering user. JC + LLUUID calling_card_folder_id = + gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + std::string message = calling_card_folder_id.asString(); + requestFriendship(add->mID, add->mName, message); + } + delete add; +} + // static void LLPanelFriends::onPickAvatar(const std::vector& names, const std::vector& ids, @@ -625,10 +642,20 @@ void LLPanelFriends::requestFriendshipDialog(const LLUUID& id, data->mID = id; data->mName = name; - // TODO: accept a line of text with this dialog LLStringUtil::format_map_t args; args["[NAME]"] = name; - gViewerWindow->alertXmlEditText("AddFriend", args, NULL, NULL, callbackAddFriend, data); + + // Look for server versions like: Second Life Server 1.24.4.95600 + if (gLastVersionChannel.find(" 1.24.") != std::string::npos) + { + // Old and busted server version, doesn't support friend + // requests with messages. + gViewerWindow->alertXml("AddFriend", args, callbackAddFriend, data); + } + else + { + gViewerWindow->alertXmlEditText("AddFriendWithMessage", args, NULL, NULL, callbackAddFriendWithMessage, data); + } } // static diff --git a/indra/newview/llfloaterfriends.h b/indra/newview/llfloaterfriends.h index c8cdce49a7..e3f3f96d00 100644 --- a/indra/newview/llfloaterfriends.h +++ b/indra/newview/llfloaterfriends.h @@ -119,7 +119,8 @@ private: // callback methods static void onSelectName(LLUICtrl* ctrl, void* user_data); - static void callbackAddFriend(S32 option, const std::string& text, void* user_data); + static void callbackAddFriendWithMessage(S32 option, const std::string& text, void* user_data); + static void callbackAddFriend(S32 option, void* user_data); static void onPickAvatar(const std::vector& names, const std::vector& ids, void* user_data); static void onMaximumSelect(void* user_data); diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index 32dcf3ae0a..3d29bb3286 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -114,8 +114,7 @@ BOOL LLFloaterImagePreview::postBuild() mSculptedPreview = new LLImagePreviewSculpted(256, 256); mSculptedPreview->setPreviewTarget(mRawImagep, 2.0f); - if ((mRawImagep->getWidth() <= LL_IMAGE_REZ_LOSSLESS_CUTOFF) && - (mRawImagep->getHeight() <= LL_IMAGE_REZ_LOSSLESS_CUTOFF)) + if (mRawImagep->getWidth() * mRawImagep->getHeight () <= LL_IMAGE_REZ_LOSSLESS_CUTOFF * LL_IMAGE_REZ_LOSSLESS_CUTOFF) childEnable("lossless_check"); } else diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 670541abe4..02ea02a291 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -157,8 +157,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) msg->getU32Fast(_PREHASH_RequestData, _PREHASH_TotalObjectCount, total_count); msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ReportType, mCurrentMode); - LLCtrlListInterface *list = childGetListInterface("objects_list"); - if (!list) return; + LLScrollListCtrl *list = getChild("objects_list"); S32 block_count = msg->getNumberOfBlocks("ReportData"); for (S32 block = 0; block < block_count; ++block) @@ -206,16 +205,16 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) element["columns"][3]["column"] = "location"; element["columns"][3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); element["columns"][3]["font"] = "SANSSERIF"; - element["columns"][3]["column"] = "time"; - element["columns"][3]["value"] = formatted_time((time_t)time_stamp); - element["columns"][3]["font"] = "SANSSERIF"; + element["columns"][4]["column"] = "time"; + element["columns"][4]["value"] = formatted_time((time_t)time_stamp); + element["columns"][4]["font"] = "SANSSERIF"; if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS && have_extended_data) { - element["columns"][4]["column"] = "Mono Time"; - element["columns"][4]["value"] = llformat("%0.3f", mono_score); - element["columns"][4]["font"] = "SANSSERIF"; + element["columns"][5]["column"] = "Mono Time"; + element["columns"][5]["value"] = llformat("%0.3f", mono_score); + element["columns"][5]["font"] = "SANSSERIF"; } list->addElement(element); @@ -228,13 +227,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) if (total_count == 0 && list->getItemCount() == 0) { - LLSD element; - element["id"] = LLUUID::null; - element["columns"][0]["column"] = "name"; - element["columns"][0]["value"] = getString("none_descriptor"); - element["columns"][0]["font"] = "SANSSERIF"; - - list->addElement(element); + list->addCommentText(getString("none_descriptor")); } else { diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 6b89d52b68..a021a66af2 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -1111,44 +1111,3 @@ void LLViewerObjectList::renderObjectBeacons() } -void pre_show_depth_buffer() -{ - glClear(GL_STENCIL_BUFFER_BIT); - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS,0,0); - glStencilOp(GL_INCR,GL_INCR,GL_INCR); -} - -void post_show_depth_buffer() -{ - int xsize =500, ysize =500; - U8 *buf = new U8[xsize*ysize]; - - glReadPixels(0,0,xsize,ysize,GL_STENCIL_INDEX,GL_UNSIGNED_BYTE, buf); - - int total = 0; - int i; - for (i=0;i xsize) y=6; - buf[ysize*(y+0)+i]=255; - buf[ysize*(y+1)+i]=255; - buf[ysize*(y+2)+i]=255; - } - glDrawPixels(xsize,ysize,GL_RED,GL_UNSIGNED_BYTE,buf); - - delete [] buf; -} diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index b890781ab2..9ee3840f7f 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -292,6 +292,28 @@ void LLInventoryModel::getDirectDescendentsOf(const LLUUID& cat_id, items = get_ptr_in_map(mParentChildItemTree, cat_id); } +// SJB: Added version to lock the arrays to catch potential logic bugs +void LLInventoryModel::lockDirectDescendentArrays(const LLUUID& cat_id, + cat_array_t*& categories, + item_array_t*& items) +{ + getDirectDescendentsOf(cat_id, categories, items); + if (categories) + { + mCategoryLock[cat_id] = true; + } + if (items) + { + mItemLock[cat_id] = true; + } +} + +void LLInventoryModel::unlockDirectDescendentArrays(const LLUUID& cat_id) +{ + mCategoryLock[cat_id] = false; + mItemLock[cat_id] = false; +} + // findCategoryUUIDForType() returns the uuid of the category that // specifies 'type' as what it defaults to containing. The category is // not necessarily only for that type. *NOTE: This will create a new @@ -619,6 +641,26 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) return mask; } +LLInventoryModel::cat_array_t* LLInventoryModel::getUnlockedCatArray(const LLUUID& id) +{ + cat_array_t* cat_array = get_ptr_in_map(mParentChildCategoryTree, id); + if (cat_array) + { + llassert_always(mCategoryLock[id] == false); + } + return cat_array; +} + +LLInventoryModel::item_array_t* LLInventoryModel::getUnlockedItemArray(const LLUUID& id) +{ + item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, id); + if (item_array) + { + llassert_always(mItemLock[id] == false); + } + return item_array; +} + // Calling this method with an inventory category will either change // an existing item with the matching id, or it will add the category. void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat) @@ -645,12 +687,12 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat) { // need to update the parent-child tree cat_array_t* cat_array; - cat_array = get_ptr_in_map(mParentChildCategoryTree, old_parent_id); + cat_array = getUnlockedCatArray(old_parent_id); if(cat_array) { cat_array->removeObj(old_cat); } - cat_array = get_ptr_in_map(mParentChildCategoryTree, new_parent_id); + cat_array = getUnlockedCatArray(new_parent_id); if(cat_array) { cat_array->put(old_cat); @@ -673,13 +715,15 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat) // make sure this category is correctly referenced by it's parent. cat_array_t* cat_array; - cat_array = get_ptr_in_map(mParentChildCategoryTree, cat->getParentUUID()); + cat_array = getUnlockedCatArray(cat->getParentUUID()); if(cat_array) { cat_array->put(new_cat); } // make space in the tree for this category's children. + llassert_always(mCategoryLock[new_cat->getUUID()] == false); + llassert_always(mItemLock[new_cat->getUUID()] == false); cat_array_t* catsp = new cat_array_t; item_array_t* itemsp = new item_array_t; mParentChildCategoryTree[new_cat->getUUID()] = catsp; @@ -707,9 +751,9 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id) if(cat && (cat->getParentUUID() != cat_id)) { cat_array_t* cat_array; - cat_array = get_ptr_in_map(mParentChildCategoryTree, cat->getParentUUID()); + cat_array = getUnlockedCatArray(cat->getParentUUID()); if(cat_array) cat_array->removeObj(cat); - cat_array = get_ptr_in_map(mParentChildCategoryTree, cat_id); + cat_array = getUnlockedCatArray(cat_id); cat->setParent(cat_id); if(cat_array) cat_array->put(cat); addChangedMask(LLInventoryObserver::STRUCTURE, object_id); @@ -719,9 +763,9 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id) if(item && (item->getParentUUID() != cat_id)) { item_array_t* item_array; - item_array = get_ptr_in_map(mParentChildItemTree, item->getParentUUID()); + item_array = getUnlockedItemArray(item->getParentUUID()); if(item_array) item_array->removeObj(item); - item_array = get_ptr_in_map(mParentChildItemTree, cat_id); + item_array = getUnlockedItemArray(cat_id); item->setParent(cat_id); if(item_array) item_array->put(item); addChangedMask(LLInventoryObserver::STRUCTURE, object_id); @@ -742,25 +786,25 @@ void LLInventoryModel::deleteObject(const LLUUID& id) mCategoryMap.erase(id); mItemMap.erase(id); //mInventory.erase(id); - item_array_t* item_list = get_ptr_in_map(mParentChildItemTree, parent_id); + item_array_t* item_list = getUnlockedItemArray(parent_id); if(item_list) { LLViewerInventoryItem* item = (LLViewerInventoryItem*)((LLInventoryObject*)obj); item_list->removeObj(item); } - cat_array_t* cat_list = get_ptr_in_map(mParentChildCategoryTree, parent_id); + cat_array_t* cat_list = getUnlockedCatArray(parent_id); if(cat_list) { LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)((LLInventoryObject*)obj); cat_list->removeObj(cat); } - item_list = get_ptr_in_map(mParentChildItemTree, id); + item_list = getUnlockedItemArray(id); if(item_list) { delete item_list; mParentChildItemTree.erase(id); } - cat_list = get_ptr_in_map(mParentChildCategoryTree, id); + cat_list = getUnlockedCatArray(id); if(cat_list) { delete cat_list; @@ -1999,11 +2043,13 @@ void LLInventoryModel::buildParentChildMap() cats.put(cat); if (mParentChildCategoryTree.count(cat->getUUID()) == 0) { + llassert_always(mCategoryLock[cat->getUUID()] == false); catsp = new cat_array_t; mParentChildCategoryTree[cat->getUUID()] = catsp; } if (mParentChildItemTree.count(cat->getUUID()) == 0) { + llassert_always(mItemLock[cat->getUUID()] == false); itemsp = new item_array_t; mParentChildItemTree[cat->getUUID()] = itemsp; } @@ -2028,7 +2074,7 @@ void LLInventoryModel::buildParentChildMap() for(i = 0; i < count; ++i) { LLViewerInventoryCategory* cat = cats.get(i); - catsp = get_ptr_in_map(mParentChildCategoryTree, cat->getParentUUID()); + catsp = getUnlockedCatArray(cat->getParentUUID()); if(catsp) { catsp->put(cat); @@ -2061,7 +2107,7 @@ void LLInventoryModel::buildParentChildMap() cat->setParent(gAgent.getInventoryRootID()); } cat->updateServer(TRUE); - catsp = get_ptr_in_map(mParentChildCategoryTree, cat->getParentUUID()); + catsp = getUnlockedCatArray(cat->getParentUUID()); if(catsp) { catsp->put(cat); @@ -2097,7 +2143,7 @@ void LLInventoryModel::buildParentChildMap() { LLPointer item; item = items.get(i); - itemsp = get_ptr_in_map(mParentChildItemTree, item->getParentUUID()); + itemsp = getUnlockedItemArray(item->getParentUUID()); if(itemsp) { itemsp->put(item); @@ -2114,7 +2160,7 @@ void LLInventoryModel::buildParentChildMap() // we update server here, the client might crash. //item->updateServer(); lost_item_ids.push_back(item->getUUID()); - itemsp = get_ptr_in_map(mParentChildItemTree, item->getParentUUID()); + itemsp = getUnlockedItemArray(item->getParentUUID()); if(itemsp) { itemsp->put(item); diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 4889d622dc..40dd55dda2 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -148,7 +148,13 @@ public: void getDirectDescendentsOf(const LLUUID& cat_id, cat_array_t*& categories, item_array_t*& items) const; - + + // SJB: Added version to lock the arrays to catch potential logic bugs + void lockDirectDescendentArrays(const LLUUID& cat_id, + cat_array_t*& categories, + item_array_t*& items); + void unlockDirectDescendentArrays(const LLUUID& cat_id); + // Starting with the object specified, add it's descendents to the // array provided, but do not add the inventory object specified // by id. There is no guaranteed order. Neither array will be @@ -401,6 +407,10 @@ protected: bool messageUpdateCore(LLMessageSystem* msg, bool do_accounting); +protected: + cat_array_t* getUnlockedCatArray(const LLUUID& id); + item_array_t* getUnlockedItemArray(const LLUUID& id); + protected: // Varaibles used to track what has changed since the last notify. U32 mModifyMask; @@ -418,6 +428,9 @@ protected: cat_map_t mCategoryMap; item_map_t mItemMap; + std::map mCategoryLock; + std::map mItemLock; + // cache recent lookups mutable LLPointer mLastItem; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index f7f46b0c30..7a8497aa2e 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -375,7 +375,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, // change z sort of clickable text to be behind buttons sendChildToBack(getChildView("channel_text")); - sendChildToBack(getChildView("version_text")); sendChildToBack(getChildView("forgot_password_text")); LLLineEditor* edit = getChild("password_edit"); @@ -418,20 +417,17 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, setDefaultBtn("connect_btn"); - childSetAction("quit_btn", onClickQuit, this); + // childSetAction("quit_btn", onClickQuit, this); - LLTextBox* version_text = getChild("version_text"); + std::string channel = gSavedSettings.getString("VersionChannelName"); std::string version = llformat("%d.%d.%d (%d)", LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD ); - version_text->setText(version); - version_text->setClickedCallback(onClickVersion); - version_text->setCallbackUserData(this); - LLTextBox* channel_text = getChild("channel_text"); - channel_text->setText(gSavedSettings.getString("VersionChannelName")); + channel_text->setTextArg("[CHANNEL]", channel); + channel_text->setTextArg("[VERSION]", version); channel_text->setClickedCallback(onClickVersion); channel_text->setCallbackUserData(this); @@ -1106,6 +1102,8 @@ void LLPanelLogin::onClickNewAccount(void*) } +// *NOTE: This function is dead as of 2008 August. I left it here in case +// we suddenly decide to put the Quit button back. JC // static void LLPanelLogin::onClickQuit(void*) { diff --git a/indra/newview/llsky.h b/indra/newview/llsky.h index 35d669152e..45dbfcfa05 100644 --- a/indra/newview/llsky.h +++ b/indra/newview/llsky.h @@ -57,7 +57,6 @@ public: ~LLSky(); void init(const LLVector3 &sun_direction); - void free(); void cleanup(); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index e9b09599e2..7ea791d253 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2149,7 +2149,8 @@ void renderBoundingBox(LLDrawable* drawable) if (vobj && vobj->onActiveList()) { gGL.flush(); - glLineWidth(4.f*sinf(gFrameTimeSeconds*2.f)+1.f); + glLineWidth(4.f*(sinf(gFrameTimeSeconds*2.f)*0.25f+0.75f)); + stop_glerror(); drawBoxOutline(pos,size); gGL.flush(); glLineWidth(1.f); @@ -2347,16 +2348,19 @@ public: if (!mCamera || mCamera->AABBInFrustumNoFarClip(group->mBounds[0], group->mBounds[1])) { node->accept(this); + stop_glerror(); for (U32 i = 0; i < node->getChildCount(); i++) { traverse(node->getChild(i)); + stop_glerror(); } //draw tight fit bounding boxes for spatial group if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCTREE)) { renderOctree(group); + stop_glerror(); } //render visibility wireframe @@ -2368,6 +2372,7 @@ public: gGLLastMatrix = NULL; glLoadMatrixd(gGLModelView); renderVisibility(group, mCamera); + stop_glerror(); gGLLastMatrix = NULL; glPopMatrix(); gGL.color4f(1,1,1,1); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index deb817d2ab..3d53eaa631 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -792,6 +792,14 @@ bool LLTextureCacheRemoteWorker::doWrite() //virtual bool LLTextureCacheWorker::doWork(S32 param) { + //allocate a new local apr_pool + LLAPRPool pool ; + + //save the current mFileAPRPool to avoid breaking anything. + apr_pool_t* old_pool = mCache->getFileAPRPool() ; + //make mFileAPRPool to point to the local one + mCache->setFileAPRPool(pool.getAPRPool()) ; + bool res = false; if (param == 0) // read { @@ -805,6 +813,10 @@ bool LLTextureCacheWorker::doWork(S32 param) { llassert_always(0); } + + //set mFileAPRPool back, the local one will be released automatically. + mCache->setFileAPRPool(old_pool) ; + return res; } diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index da7a6c3f12..f635679819 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -114,6 +114,9 @@ protected: std::string getTextureFileName(const LLUUID& id); void addCompleted(Responder* responder, bool success); +protected: + void setFileAPRPool(apr_pool_t* pool) { mFileAPRPool = pool ; } + private: void setDirNames(ELLPath location); void readHeaderCache(apr_pool_t* poolp = NULL); diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index b444cb8ce6..cc6af1043d 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -106,7 +106,7 @@ void LLToolPie::leftMouseCallback(const LLPickInfo& pick_info) BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask) { // don't pick transparent so users can't "pay" transparent objects - gViewerWindow->pickAsync(x, y, mask, rightMouseCallback, FALSE); + gViewerWindow->pickAsync(x, y, mask, rightMouseCallback, FALSE, TRUE); mPieMouseButtonDown = TRUE; // don't steal focus from UI return FALSE; diff --git a/indra/newview/llurl.cpp b/indra/newview/llurl.cpp index 454dd5047e..70cf5ab438 100644 --- a/indra/newview/llurl.cpp +++ b/indra/newview/llurl.cpp @@ -57,7 +57,7 @@ LLURL::LLURL(const char * url) LLURL::~LLURL() { - free(); + cleanup(); } void LLURL::init(const char * url) @@ -140,7 +140,7 @@ void LLURL::init(const char * url) // llinfos << " Tag : <" << mTag << ">" << llendl; } -void LLURL::free() +void LLURL::cleanup() { } diff --git a/indra/newview/llurl.h b/indra/newview/llurl.h index 99f93b9213..8c77916aa0 100644 --- a/indra/newview/llurl.h +++ b/indra/newview/llurl.h @@ -71,7 +71,7 @@ public: virtual ~LLURL(); virtual void init (const char * url); - virtual void free (); + virtual void cleanup (); bool operator==(const LLURL &rhs) const; bool operator!=(const LLURL &rhs) const; diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index a62bf9b9cf..98413065af 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -424,22 +424,7 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue) { if(gVoiceClient) { - // Note: Ignore the specific event value, look up the ones we want - - gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat")); - gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled")); - std::string keyString = gSavedSettings.getString("PushToTalkButton"); - gVoiceClient->setPTTKey(keyString); - gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle")); - gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation")); - std::string serverName = gSavedSettings.getString("VivoxDebugServerName"); - gVoiceClient->setVivoxDebugServerName(serverName); - - std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice"); - gVoiceClient->setCaptureDevice(inputDevice); - std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); - gVoiceClient->setRenderDevice(outputDevice); - gVoiceClient->setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled")); + gVoiceClient->updateSettings(); } return true; } diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index eef43af4c3..9e5b566e60 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -470,12 +470,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) // // LLAppViewer::instance()->pingMainloopTimeout("Display:RenderSetup"); - stop_glerror(); - if (gSavedSettings.getBOOL("ShowDepthBuffer")) - { - pre_show_depth_buffer(); - } - stop_glerror(); /////////////////////////////////////// @@ -1088,11 +1082,6 @@ void render_ui_3d() // Debugging stuff goes before the UI. - if (gSavedSettings.getBOOL("ShowDepthBuffer")) - { - post_show_depth_buffer(); - } - // Coordinate axes if (gSavedSettings.getBOOL("ShowAxes")) { diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index f5d822f2e3..ea1ef2a6a6 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -473,6 +473,9 @@ void LLViewerMedia::initBrowser() buildMediaManagerData( init_data ); LLMediaManager::initBrowser( init_data ); delete init_data; + + // We use a custom user agent with viewer version and skin name. + LLViewerMediaImpl::updateBrowserUserAgent(); } ////////////////////////////////////////////////////////////////////////////////////////// @@ -538,9 +541,6 @@ void LLViewerMedia::buildMediaManagerData( LLMediaManagerData* init_data ) init_data->setBrowserProfileName( profile_name ); init_data->setBrowserParentWindow( gViewerWindow->getMediaWindow() ); - // We use a custom user agent with viewer version and skin name. - LLViewerMediaImpl::updateBrowserUserAgent(); - // Users can change skins while client is running, so make sure // we pick up on changes. gSavedSettings.getControl("SkinCurrent")->getSignal()->connect( diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 26d526c988..7681e98eae 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -146,7 +146,6 @@ #include "llinventoryview.h" #include "llkeyboard.h" #include "llpanellogin.h" -#include "llfloaterlandmark.h" #include "llmenucommands.h" #include "llmenugl.h" #include "llmorphview.h" @@ -208,9 +207,6 @@ #include "lltexlayer.h" -void init_landmark_menu(LLMenuGL* menu); -void clear_landmark_menu(LLMenuGL* menu); - void init_client_menu(LLMenuGL* menu); void init_server_menu(LLMenuGL* menu); @@ -256,7 +252,6 @@ LLPieMenu *gPieAttachment = NULL; LLPieMenu *gPieLand = NULL; // local constants -const std::string LANDMARK_MENU_NAME("Landmarks"); const std::string CLIENT_MENU_NAME("Advanced"); const std::string SERVER_MENU_NAME("Admin"); @@ -274,7 +269,6 @@ LLPieMenu* gDetachPieMenu = NULL; LLPieMenu* gDetachScreenPieMenu = NULL; LLPieMenu* gDetachBodyPartPieMenus[8]; -LLMenuGL* gLandmarkMenu = NULL; LLMenuItemCallGL* gAFKMenu = NULL; LLMenuItemCallGL* gBusyMenu = NULL; @@ -336,8 +330,6 @@ void handle_audio_status_3(void*); void handle_audio_status_4(void*); #endif void manage_landmarks(void*); -void create_new_landmark(void*); -void landmark_menu_action(void*); void reload_ui(void*); void handle_agent_stop_moving(void*); void print_packets_lost(void*); @@ -497,55 +489,6 @@ BOOL enable_region_owner(void*); void menu_toggle_attached_lights(void* user_data); void menu_toggle_attached_particles(void* user_data); -class LLLandmarkObserver : public LLInventoryObserver -{ -public: - LLLandmarkObserver(); - virtual ~LLLandmarkObserver(); - - virtual void changed(U32 mask) - { - // JC - Disabled for now - slows down client or causes crashes - // in inventory code. - // - // Also, this may not be faster than just rebuilding the menu each time. - // I believe gInventory.getObject() is not fast. - // - //const std::set& changed_ids = gInventory.getChangedIDs(); - //std::set::const_iterator id_it; - //BOOL need_to_rebuild_menu = FALSE; - //for(id_it = changed_ids.begin(); id_it != changed_ids.end(); ++id_it) - //{ - // LLInventoryObject* objectp = gInventory.getObject(*id_it); - // if (objectp && (objectp->getType() == LLAssetType::AT_LANDMARK || objectp->getType() == LLAssetType::AT_CATEGORY)) - // { - // need_to_rebuild_menu = TRUE; - // } - //} - //if (need_to_rebuild_menu) - //{ - // init_landmark_menu(gLandmarkMenu); - //} - } -}; - -// For debugging only, I think the inventory observer doesn't get -// called if the inventory is loaded from cache. -void build_landmark_menu(void*) -{ - init_landmark_menu(gLandmarkMenu); -} - -LLLandmarkObserver::LLLandmarkObserver() -{ - gInventory.addObserver(this); -} - -LLLandmarkObserver::~LLLandmarkObserver() -{ - gInventory.removeObserver(this); -} - class LLMenuParcelObserver : public LLParcelObserver { public: @@ -555,7 +498,6 @@ public: }; static LLMenuParcelObserver* gMenuParcelObserver = NULL; -static LLLandmarkObserver* gLandmarkObserver = NULL; LLMenuParcelObserver::LLMenuParcelObserver() { @@ -729,17 +671,6 @@ void init_menus() // TomY TODO convert these two LLMenuGL*menu; - // JC - Maybe we don't want a global landmark menu - /* - menu = new LLMenuGL(LANDMARK_MENU_NAME); - // Defer init_landmark_menu() until inventory observer reports that we actually - // have inventory. Otherwise findCategoryByUUID() will create an empty - // Landmarks folder in inventory. JC - gMenuBarView->appendMenu( menu ); - menu->updateParent(LLMenuGL::sMenuContainer); - gLandmarkMenu = menu; - */ - menu = new LLMenuGL(CLIENT_MENU_NAME); init_client_menu(menu); gMenuBarView->appendMenu( menu ); @@ -755,9 +686,6 @@ void init_menus() // Let land based option enable when parcel changes gMenuParcelObserver = new LLMenuParcelObserver(); - // Let landmarks menu update when landmarks are added/removed - gLandmarkObserver = new LLLandmarkObserver(); - // // Debug menu visiblity // @@ -775,64 +703,6 @@ void init_menus() -void init_landmark_menu(LLMenuGL* menu) -{ - if (!menu) return; - - // clear existing menu, as we might be rebuilding as result of inventory update - clear_landmark_menu(menu); - - // *TODO: Translate - menu->append(new LLMenuItemCallGL("Organize Landmarks", - &manage_landmarks, NULL)); - menu->append(new LLMenuItemCallGL("New Landmark...", - &create_new_landmark, NULL)); - menu->appendSeparator(); - - // now collect all landmarks in inventory and build menu... - LLInventoryModel::cat_array_t* cats; - LLInventoryModel::item_array_t* items; - gInventory.getDirectDescendentsOf(gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK), cats, items); - if(items) - { - S32 count = items->count(); - for(S32 i = 0; i < count; ++i) - { - LLInventoryItem* item = items->get(i); - std::string landmark_name = item->getName(); - LLUUID* landmark_id_ptr = new LLUUID( item->getUUID() ); - LLMenuItemCallGL* menu_item = - new LLMenuItemCallGL(landmark_name, landmark_menu_action, - NULL, NULL, landmark_id_ptr); - menu->append(menu_item); - } - } -} - -void clear_landmark_menu(LLMenuGL* menu) -{ - if (!menu) return; - - // We store the UUIDs of the landmark inventory items in the userdata - // field of the menus. Therefore when we clean up the menu we need to - // delete that data. - const LLView::child_list_t* child_list = menu->getChildList(); - LLView::child_list_const_iter_t it = child_list->begin(); - for ( ; it != child_list->end(); ++it) - { - LLView* view = *it; - LLMenuItemCallGL* menu_item = dynamic_cast(view); - - if (menu_item && menu_item->getMenuCallback() == landmark_menu_action) - { - void* user_data = menu_item->getUserData(); - delete (LLUUID*)user_data; - } - } - - menu->empty(); -} - void init_client_menu(LLMenuGL* menu) { LLMenuGL* sub_menu = NULL; @@ -1364,12 +1234,10 @@ void init_debug_rendering_menu(LLMenuGL* menu) sub_menu->append(new LLMenuItemCheckGL("Raycasting", &LLPipeline::toggleRenderDebug, NULL, &LLPipeline::toggleRenderDebugControl, (void*)LLPipeline::RENDER_DEBUG_RAYCAST)); + sub_menu->append(new LLMenuItemCheckGL("Sculpt", &LLPipeline::toggleRenderDebug, NULL, + &LLPipeline::toggleRenderDebugControl, + (void*)LLPipeline::RENDER_DEBUG_SCULPTED)); - sub_menu->append(new LLMenuItemCheckGL("Show Depth Buffer", - &menu_toggle_control, - NULL, - &menu_check_control, - (void*)"ShowDepthBuffer")); sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect)); sub_menu->append(new LLMenuItemCallGL("Vectorize Perf Test", &run_vectorize_perf_test)); @@ -1607,14 +1475,9 @@ static std::vector > sMenus; //----------------------------------------------------------------------------- void cleanup_menus() { - clear_landmark_menu(gLandmarkMenu); - delete gMenuParcelObserver; gMenuParcelObserver = NULL; - delete gLandmarkObserver; - gLandmarkObserver = NULL; - delete gPieSelf; gPieSelf = NULL; @@ -1677,6 +1540,8 @@ class LLObjectTouch : public view_listener_t LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); if (!object) return true; + LLPickInfo pick = LLToolPie::getInstance()->getPick(); + LLMessageSystem *msg = gMessageSystem; msg->newMessageFast(_PREHASH_ObjectGrab); @@ -1686,6 +1551,13 @@ class LLObjectTouch : public view_listener_t msg->nextBlockFast( _PREHASH_ObjectData); msg->addU32Fast( _PREHASH_LocalID, object->mLocalID); msg->addVector3Fast(_PREHASH_GrabOffset, LLVector3::zero ); + msg->nextBlock("SurfaceInfo"); + msg->addVector3("UVCoord", LLVector3(pick.mUVCoords)); + msg->addVector3("STCoord", LLVector3(pick.mSTCoords)); + msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace); + msg->addVector3("Position", pick.mIntersection); + msg->addVector3("Normal", pick.mNormal); + msg->addVector3("Binormal", pick.mBinormal); msg->sendMessage( object->getRegion()->getHost()); // *NOTE: Hope the packets arrive safely and in order or else @@ -1697,6 +1569,13 @@ class LLObjectTouch : public view_listener_t msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); msg->nextBlockFast(_PREHASH_ObjectData); msg->addU32Fast(_PREHASH_LocalID, object->mLocalID); + msg->nextBlock("SurfaceInfo"); + msg->addVector3("UVCoord", LLVector3(pick.mUVCoords)); + msg->addVector3("STCoord", LLVector3(pick.mSTCoords)); + msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace); + msg->addVector3("Position", pick.mIntersection); + msg->addVector3("Normal", pick.mNormal); + msg->addVector3("Binormal", pick.mBinormal); msg->sendMessage(object->getRegion()->getHost()); return true; @@ -3154,60 +3033,6 @@ void handle_audio_status_4(void*) } #endif -void manage_landmarks(void*) -{ - LLFloaterLandmark::showInstance(1); -} - -void create_new_landmark(void*) -{ - // Note this is temporary cut and paste of legacy functionality. - // TODO: Make this spawn a floater allowing user customize before creating the inventory object - - LLViewerRegion* agent_region = gAgent.getRegion(); - if(!agent_region) - { - llwarns << "No agent region" << llendl; - return; - } - LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - if (!agent_parcel) - { - llwarns << "No agent parcel" << llendl; - return; - } - if (!agent_parcel->getAllowLandmark() - && !LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK)) - { - gViewerWindow->alertXml("CannotCreateLandmarkNotOwner"); - return; - } - - LLUUID folder_id; - folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); - std::string pos_string; - gAgent.buildLocationString(pos_string); - - create_inventory_item(gAgent.getID(), gAgent.getSessionID(), - folder_id, LLTransactionID::tnull, - pos_string, pos_string, // name, desc - LLAssetType::AT_LANDMARK, - LLInventoryType::IT_LANDMARK, - NOT_WEARABLE, PERM_ALL, - NULL); -} - -void landmark_menu_action(void* userdata) -{ - LLUUID item_id = *(LLUUID*)userdata; - - LLViewerInventoryItem* itemp = gInventory.getItem(item_id); - if (itemp) - { - open_landmark(itemp, itemp->getName(), FALSE); - } -} - void reload_ui(void *) { LLUICtrlFactory::getInstance()->rebuild(); diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 46fc91aa5a..72d6308503 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -757,7 +757,6 @@ void send_stats() S32 window_height = gViewerWindow->getWindowDisplayHeight(); S32 window_size = (window_width * window_height) / 1024; misc["string_1"] = llformat("%d", window_size); - misc["string_1"] = llformat("%.dx%d", window_width, window_height); // misc["string_2"] = // misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6 // misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6 diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 58d947787e..821e306145 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -174,7 +174,7 @@ public: /*virtual*/ void handleDataCopy(LLWindow *window, S32 data_type, void *data); /*virtual*/ BOOL handleTimerEvent(LLWindow *window); /*virtual*/ BOOL handleDeviceChange(LLWindow *window); - + /*virtual*/ void handlePingWatchdog(LLWindow *window, const char * msg); // @@ -240,6 +240,7 @@ public: void setCursor( ECursorType c ); void showCursor(); void hideCursor(); + BOOL getCursorHidden() { return mCursorHidden; } void moveCursorToCenter(); // move to center of window void setShowProgress(const BOOL show); @@ -402,10 +403,12 @@ protected: BOOL mSuppressToolbox; // sometimes hide the toolbox, despite // having a camera tool selected BOOL mHideCursorPermanent; // true during drags, mouselook + BOOL mCursorHidden; LLPickInfo mLastPick; LLPickInfo mHoverPick; std::vector mPicks; LLRect mPickScreenRegion; // area of frame buffer for rendering pick frames (generally follows mouse to avoid going offscreen) + LLTimer mPickTimer; // timer for scheduling n picks per second std::string mOverlayTitle; // Used for special titles such as "Second Life - Special E3 2003 Beta" diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index d5d7056ef7..0ccba521fa 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6269,10 +6269,6 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object) mDrawable->mXform.setPosition(rel_pos); mDrawable->mXform.setRotation(mDrawable->getWorldRotation() * inv_obj_rot); - //in case the viewerobject is not updated in time - mDrawable->getVObj()->setPosition(sit_object->getWorldPosition()) ; - mDrawable->getVObj()->setRotation(sit_object->getWorldRotation()) ; - gPipeline.markMoved(mDrawable, TRUE); mIsSitting = TRUE; mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject @@ -6333,10 +6329,6 @@ void LLVOAvatar::getOffObject() mDrawable->mXform.setPosition(cur_position_world); mDrawable->mXform.setRotation(cur_rotation_world); - //in case the viewerobject is not updated from sim in time - mDrawable->getVObj()->setPosition(cur_position_world); - mDrawable->getVObj()->setRotation(cur_rotation_world); - gPipeline.markMoved(mDrawable, TRUE); mIsSitting = FALSE; @@ -8894,6 +8886,11 @@ U32 LLVOAvatar::getVisibilityRank() void LLVOAvatar::setVisibilityRank(U32 rank) { + if (mDrawable.isNull() || mDrawable->isDead()) + { //do nothing + return; + } + BOOL stale = gFrameTimeSeconds - mLastFadeTime > 10.f; //only raise visibility rank or trigger a fade out every 10 seconds diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 3cf0eb839d..8b1eba11a0 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -839,19 +839,12 @@ LLVoiceClient::LLVoiceClient() mCaptureDeviceDirty = false; mRenderDeviceDirty = false; - // Load initial state from prefs. - mVoiceEnabled = gSavedSettings.getBOOL("EnableVoiceChat"); - mUsePTT = TRUE; //gSavedSettings.getBOOL("EnablePushToTalk"); - std::string keyString = gSavedSettings.getString("PushToTalkButton"); - setPTTKey(keyString); - mPTTIsToggle = gSavedSettings.getBOOL("PushToTalkToggle"); - mEarLocation = gSavedSettings.getS32("VoiceEarLocation"); - setVoiceVolume(gSavedSettings.getBOOL("MuteVoice") ? 0.f : gSavedSettings.getF32("AudioLevelVoice")); - std::string captureDevice = gSavedSettings.getString("VoiceInputAudioDevice"); - setCaptureDevice(captureDevice); - std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); - setRenderDevice(renderDevice); - mLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled"); + // Use default values for everything then call updateSettings() after preferences are loaded + mVoiceEnabled = false; + mUsePTT = true; + mPTTIsToggle = false; + mEarLocation = 0; + mLipSyncEnabled = false; mTuningMode = false; mTuningEnergy = 0.0f; @@ -895,12 +888,11 @@ LLVoiceClient::~LLVoiceClient() //---------------------------------------------- - - void LLVoiceClient::init(LLPumpIO *pump) { // constructor will set up gVoiceClient LLVoiceClient::getInstance()->mPump = pump; + LLVoiceClient::getInstance()->updateSettings(); } void LLVoiceClient::terminate() @@ -923,6 +915,25 @@ void LLVoiceClient::terminate() } } +//--------------------------------------------------- + +void LLVoiceClient::updateSettings() +{ + setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat")); + setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled")); + std::string keyString = gSavedSettings.getString("PushToTalkButton"); + setPTTKey(keyString); + setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle")); + setEarLocation(gSavedSettings.getS32("VoiceEarLocation")); + std::string serverName = gSavedSettings.getString("VivoxDebugServerName"); + setVivoxDebugServerName(serverName); + + std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice"); + setCaptureDevice(inputDevice); + std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); + setRenderDevice(outputDevice); + setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled")); +} ///////////////////////////// // utility functions diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 2e1efce6fb..c1f54d09f1 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -99,7 +99,9 @@ class LLVoiceClient: public LLSingleton serviceTypeC // one-to-one and small group chat }; static F32 OVERDRIVEN_POWER_LEVEL; - + + void updateSettings(); // call after loading settings and whenever they change + ///////////////////////////// // session control messages void connect(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index c6a7e9e28d..74af22dbc9 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -68,7 +68,8 @@ const S32 MIN_QUIET_FRAMES_COALESCE = 30; const F32 FORCE_SIMPLE_RENDER_AREA = 512.f; const F32 FORCE_CULL_AREA = 8.f; -const S32 SCULPT_REZ = 64; +// sadly - we can't lower sculptie rez below b/c residents have a LOT of content that depends on the 128 +const S32 SCULPT_REZ = 128; BOOL gAnimateTextures = TRUE; extern BOOL gHideSelectedObjects; @@ -530,7 +531,13 @@ void LLVOVolume::updateTextures() gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE); mSculptChanged = TRUE; } - + + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SCULPTED)) + { + setDebugText(llformat("T%d C%d V%d\n%dx%d", + texture_discard, current_discard, getVolume()->getSculptLevel(), + mSculptTexture->getHeight(), mSculptTexture->getWidth())); + } } diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index 9f1d8abca7..d9c6b6c58a 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -134,7 +134,7 @@ void LLXMLRPCValue::appendDouble(const char* id, double v) XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueDouble(id, v)); } -void LLXMLRPCValue::free() +void LLXMLRPCValue::cleanup() { XMLRPC_CleanupValue(mV); mV = NULL; diff --git a/indra/newview/llxmlrpctransaction.h b/indra/newview/llxmlrpctransaction.h index 0fc89e7813..d703f07d8b 100644 --- a/indra/newview/llxmlrpctransaction.h +++ b/indra/newview/llxmlrpctransaction.h @@ -74,7 +74,7 @@ public: void appendDouble(const char*, double); void appendValue(const char*, LLXMLRPCValue&); - void free(); + void cleanup(); // only call this on the top level created value XMLRPC_VALUE getValue() const; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f3168be46c..7dd9ab5e1e 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -4520,6 +4520,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot) return; } + LLVertexBuffer::unbind(); LLGLState::checkStates(); LLGLState::checkTextureChannels(); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index a6f76df47a..4ba6f39456 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -340,7 +340,8 @@ public: RENDER_DEBUG_LIGHTS = 0x100000, RENDER_DEBUG_BATCH_SIZE = 0x200000, RENDER_DEBUG_RAYCAST = 0x400000, - RENDER_DEBUG_SHAME = 0x800000 + RENDER_DEBUG_SHAME = 0x800000, + RENDER_DEBUG_SCULPTED = 0x1000000 }; public: diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml index 6490d8b5a2..9107b3ae8a 100644 --- a/indra/newview/skins/default/xui/de/floater_about.xml +++ b/indra/newview/skins/default/xui/de/floater_about.xml @@ -3,30 +3,30 @@ Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, Ben, Bunny, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Hunter, Ian, Jeff, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, BillTodd, Ryan, Zach, Sarah, Nova, Otakon, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, DanceStar, Jeska, Hungry, Torley, Kona, Callum, Charity, Ventrella, Jack, Uncle, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Monroe, David, Tess, Lizzie, Patsy, Pony, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, James, Katie, Dawn, Katt, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn und vielen anderen. - Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: aaron23 decuir, Abra Miles, absolute balderdash, adelle fitzgerald, Aeron Kohime, Aki Shichiroji, Alger Meads, Alissa Sabre, AlwaysIcey Mapholisto, Arawn Spitteler, Aren Mandala, Arianna Wrigglesworth, Bagushii Kohime, Balpien Hammerer, Blinking2342 Blinker, byakuya runo, Capucchy Streeter, Chandra Jun, Coyote Pace, Crusher Soderstrom, Cummere Mayo, cyberrosa Rossini, Dael Ra, danana dodonpa, Darek Deluca, Davec Horsforth, django yifu, draco crane, Dre Dagostino, Ephyu Reino, etan quan, Fenrix Murakami, Fledhyris Proudhon, Fred Wardhani, Frederich Courier, garth fairchang, Gellan Glenelg, Geraldine Giha, GOLAN Eilde, gonzo joubert, Hachiro Yokosuka, Hampton Hax, harleywood guru, Hevenz Vansant, imnotgoing sideways, Jaden Giles, Jeanette Janus, Karl Dorance, keaton Akina, Khashai Steinbeck, KiPSOFT Tuqiri, kirstenlee Cinquetti, Kitty Barnett, Laurent Vesta, Lazure Ryba, Lima Vesperia, Linzi Bingyi, Lisa Lowe, LuDon Ninetails, Mark Rosenbaum, McCabe Maxsted, Michi Lumin, Midi Aeon, ml0rtd kit, Mo Eriksen, Morice Flanagan, Mysterion Aeon, Nad Gough, norgan torok, Pygar Bu, Qie Niangao, rachel corleone, Rado Arado, roberto salubrius, Royer Pessoa, samia bechir, Sasha Nurmi, Sean Heying, Selkit Diller, Shadow Pidgeon, simon kline, Smokie Ember, Soap Clawtooth, Strife Onizuka, Tal Chernov, Talan Hyun, tangletwigs fairymeadow, Tanya Spinotti, Tayra Dagostino, Teebone Aeon, Theremes Langdon, Thraxis Epsilon, tucor Capalini, Vasko Hawker, VenusMari Zapedzki, Vex Streeter, Viktoria Dovgal, Vincent Nacon, Viridian Exonar, Vivienne Schell, WarKirby Magojiro, Wilton Lundquist, Yukinoroh Kamachi, Zyzzy Zarf +Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen:aaron23 decuir, Abra Miles, absolute balderdash, adelle fitzgerald, Aeron Kohime, Aki Shichiroji, Alger Meads, Alissa Sabre, AlwaysIcey Mapholisto, Arawn Spitteler, Aren Mandala, Arianna Wrigglesworth, Bagushii Kohime, Balpien Hammerer, Blinking2342 Blinker, byakuya runo, Capucchy Streeter, Chandra Jun, Coyote Pace, Crusher Soderstrom, Cummere Mayo, cyberrosa Rossini, Dael Ra, danana dodonpa, Darek Deluca, Davec Horsforth, django yifu, draco crane, Dre Dagostino, Ephyu Reino, etan quan, Fenrix Murakami, Fledhyris Proudhon, Fred Wardhani, Frederich Courier, garth fairchang, Gellan Glenelg, Geraldine Giha, GOLAN Eilde, gonzo joubert, Hachiro Yokosuka, Hampton Hax, harleywood guru, Hevenz Vansant, imnotgoing sideways, Jaden Giles, Jeanette Janus, Karl Dorance, keaton Akina, Khashai Steinbeck, KiPSOFT Tuqiri, kirstenlee Cinquetti, Kitty Barnett, Laurent Vesta, Lazure Ryba, Lima Vesperia, Linzi Bingyi, Lisa Lowe, LuDon Ninetails, Mark Rosenbaum, McCabe Maxsted, Michi Lumin, Midi Aeon, ml0rtd kit, Mo Eriksen, Morice Flanagan, Mysterion Aeon, Nad Gough, norgan torok, Pygar Bu, Qie Niangao, rachel corleone, Rado Arado, roberto salubrius, Royer Pessoa, samia bechir, Sasha Nurmi, Sean Heying, Selkit Diller, Shadow Pidgeon, simon kline, Smokie Ember, Soap Clawtooth, Strife Onizuka, Tal Chernov, Talan Hyun, tangletwigs fairymeadow, Tanya Spinotti, Tayra Dagostino, Teebone Aeon, Theremes Langdon, Thraxis Epsilon, tucor Capalini, Vasko Hawker, VenusMari Zapedzki, Vex Streeter, Viktoria Dovgal, Vincent Nacon, Viridian Exonar, Vivienne Schell, WarKirby Magojiro, Wilton Lundquist, Yukinoroh Kamachi, Zyzzy Zarf - 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler. +3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion +APR Copyright (C) 2000-2004 The Apache Software Foundation +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) +expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. +FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). +GL Copyright (C) 1999-2004 Brian Paul. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +ogg/vorbis Copyright (C) 2001, Xiphophorus +OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2002 Jean-loup Gailly und Mark Adler. - Alle Rechte vorbehalten. Details siehe licenses.txt. +Alle Rechte vorbehalten.Details siehe licenses.txt. - Voice-Chat-Audiocoding: Polycom(R) Siren14(TM) (ITU-T Empf. G.722.1 Anhang C) +Voice-Chat-Audiocoding:Polycom(R) Siren14(TM) (ITU-T Empf.G.722.1 Anhang C) - What happens to a dream deferred? --Langston Hughes +Was geschieht, wenn Träume aufgeschoben werden?- Langston Hughes Sie befinden sich in [POSITION] diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 52cd7a2a6d..b75eeba248 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -113,6 +113,10 @@ (Wird verkauft) + + Keine Parzelle ausgewählt. +Öffnen Sie "Welt" > "Land-Info" oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen. + @@ -192,27 +196,33 @@ [COUNT] -