diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index c0e8dc408..3b1c1e467 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -88,7 +88,7 @@ if (VIEWER) add_subdirectory(${VIEWER_PREFIX}linux_crash_logger) add_dependencies(viewer linux-crash-logger-strip-target) elseif (DARWIN) - add_subdirectory(${VIEWER_PREFIX}mac_crash_logger) + #add_subdirectory(${VIEWER_PREFIX}mac_crash_logger) #add_subdirectory(${VIEWER_PREFIX}mac_updater) add_dependencies(viewer mac-crash-logger) #add_dependencies(viewer mac-updater) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 30fc121ee..96005febe 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -220,10 +220,13 @@ if (LINUX) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -fomit-frame-pointer -mmmx -msse -mfpmath=sse -msse2 -ffast-math -ftree-vectorize -fweb -fexpensive-optimizations -frename-registers") else (${ARCH} STREQUAL "x86_64") - set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -march=pentium4 -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) + if (NOT STANDALONE) + set(MARCH_FLAG " -march=pentium4") + endif (NOT STANDALONE) + set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2}${MARCH_FLAG} -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELEASESSE2 "${CMAKE_C_FLAGS_RELEASESSE2}${MARCH_FLAG} -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse -msse2 ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}${MARCH_FLAG} -mfpmath=sse -msse2 "${GCC_EXTRA_OPTIMIZATIONS}) endif (${ARCH} STREQUAL "x86_64") endif (VIEWER) @@ -245,8 +248,8 @@ if (DARWIN) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlong-branch") # NOTE: it's critical that the optimization flag is put in front. # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered. - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -03 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -03 -msse3 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") set(CMAKE_CXX_FLAGS_RELEASESSE2 "${CMAKE_CXX_FLAGS_RELEASESSE2} -O3 -msse2 -mtune=generic -mfpmath=sse ${GCC_EXTRA_OPTIMIZATIONS}") @@ -278,11 +281,6 @@ endif (LINUX OR DARWIN) if (STANDALONE) add_definitions(-DLL_STANDALONE=1) - - if (LINUX AND ${ARCH} STREQUAL "i686") - add_definitions(-march=pentiumpro) - endif (LINUX AND ${ARCH} STREQUAL "i686") - else (STANDALONE) set(${ARCH}_linux_INCLUDES ELFIO diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake index 759b8f134..df9b5b18e 100644 --- a/indra/cmake/FMOD.cmake +++ b/indra/cmake/FMOD.cmake @@ -43,6 +43,7 @@ endif (NOT FMOD_LIBRARY) find_path(FMOD_INCLUDE_DIR fmod.h ${LIBS_PREBUILT_DIR}/include + ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include ${FMOD_SDK_DIR}/api/inc ${FMOD_SDK_DIR}/inc ${FMOD_SDK_DIR} diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 1a12339a7..fc5b40d42 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -24,11 +24,11 @@ else (STANDALONE) endif (LINUX) endif (STANDALONE) -if (GOOGLE_PERFTOOLS_FOUND) +if (GOOGLE_PERFTOOLS_FOUND AND STANDALONE) set(USE_GOOGLE_PERFTOOLS ON CACHE BOOL "Build with Google PerfTools support.") -else (GOOGLE_PERFTOOLS_FOUND) +else () set(USE_GOOGLE_PERFTOOLS OFF) -endif (GOOGLE_PERFTOOLS_FOUND) +endif () # XXX Disable temporarily, until we have compilation issues on 64-bit # Etch sorted. diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake index efb3d004c..222d1fac8 100644 --- a/indra/cmake/LLCommon.cmake +++ b/indra/cmake/LLCommon.cmake @@ -5,6 +5,12 @@ include(Boost) include(EXPAT) include(ZLIB) +if (DARWIN) + include(CMakeFindFrameworks) + find_library(CORESERVICES_LIBRARY CoreServices) +endif (DARWIN) + + set(LLCOMMON_INCLUDE_DIRS ${LIBS_OPEN_DIR}/cwdebug ${LIBS_OPEN_DIR}/llcommon diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index adfa08429..67cbd5b25 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -30,7 +30,7 @@ set(LIBS_SERVER_DIR ${CMAKE_SOURCE_DIR}/${LIBS_SERVER_PREFIX}) set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX}) set(SERVER_DIR ${CMAKE_SOURCE_DIR}/${SERVER_PREFIX}) set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX}) -set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation)") +set(LL_TESTS OFF CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation)") set(VISTA_ICON OFF CACHE BOOL "Allow vista icon with pre 2008 Visual Studio IDEs. (Assumes replacement old rcdll.dll with new rcdll.dll from win sdk 7.0 or later)") set(LIBS_PREBUILT_DIR ${CMAKE_SOURCE_DIR}/../libraries CACHE PATH diff --git a/indra/fmodfilestructure.zip b/indra/fmodfilestructure.zip deleted file mode 100644 index 1dcaffdd7..000000000 Binary files a/indra/fmodfilestructure.zip and /dev/null differ diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 3132a03e1..e7ce0fa9d 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -233,6 +233,7 @@ target_link_libraries( ${ZLIB_LIBRARIES} ${WINDOWS_LIBRARIES} ${CWDEBUG_LIBRARIES} + ${CORESERVICES_LIBRARY} ) if (LINUX) diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp index d3783c582..f1d7eb305 100644 --- a/indra/llcommon/llfasttimer.cpp +++ b/indra/llcommon/llfasttimer.cpp @@ -29,33 +29,22 @@ * COMPLETENESS OR PERFORMANCE. * $/LicenseInfo$ */ + #include "linden_common.h" #include "llfasttimer.h" - #include "llmemory.h" #include "llprocessor.h" - #if LL_WINDOWS #define WIN32_LEAN_AND_MEAN #include -#include "lltimer.h" -#elif LL_LINUX || LL_SOLARIS -#include -#include -#include "lltimer.h" -#elif LL_DARWIN -#include -#include "lltimer.h" // get_clock_count() -#else -#error "architecture not supported" #endif +#include "lltimer.h" ////////////////////////////////////////////////////////////////////////////// // statics - LLFastTimer::EFastTimerType LLFastTimer::sCurType = LLFastTimer::FTM_OTHER; int LLFastTimer::sCurDepth = 0; U64 LLFastTimer::sStart[LLFastTimer::FTM_MAX_DEPTH]; @@ -70,44 +59,12 @@ S32 LLFastTimer::sLastFrameIndex = -1; int LLFastTimer::sPauseHistory = 0; int LLFastTimer::sResetHistory = 0; -#define USE_RDTSC 0 +U64 LLFastTimer::sClockResolution = calc_clock_frequency(50U); // Resolution of get_clock_count() -#if LL_LINUX || LL_SOLARIS -U64 LLFastTimer::sClockResolution = 1000000000; // 1e9, Nanosecond resolution -#else -U64 LLFastTimer::sClockResolution = 1000000; // 1e6, Microsecond resolution -#endif - - -//static -#if (LL_DARWIN || LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__)) U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer { return sClockResolution >> 8; } -#else // windows or x86-mac or x86-linux or x86-solaris -U64 LLFastTimer::countsPerSecond() // counts per second for the *32-bit* timer -{ -#if USE_RDTSC || !LL_WINDOWS - //getCPUFrequency returns MHz and sCPUClockFrequency wants to be in Hz - static U64 sCPUClockFrequency = U64(LLProcessorInfo().getCPUFrequency()*1000000.0); - - // we drop the low-order byte in our timers, so report a lower frequency -#else - // If we're not using RDTSC, each fasttimer tick is just a performance counter tick. - // Not redefining the clock frequency itself (in llprocessor.cpp/calculate_cpu_frequency()) - // since that would change displayed MHz stats for CPUs - static bool firstcall = true; - static U64 sCPUClockFrequency; - if (firstcall) - { - QueryPerformanceFrequency((LARGE_INTEGER*)&sCPUClockFrequency); - firstcall = false; - } -#endif - return sCPUClockFrequency >> 8; -} -#endif void LLFastTimer::reset() { @@ -162,139 +119,17 @@ void LLFastTimer::reset() // Important note: These implementations must be FAST! // - -#if LL_WINDOWS -// -// Windows implementation of CPU clock -// - -// -// NOTE: put back in when we aren't using platform sdk anymore -// -// because MS has different signatures for these functions in winnt.h -// need to rename them to avoid conflicts -//#define _interlockedbittestandset _renamed_interlockedbittestandset -//#define _interlockedbittestandreset _renamed_interlockedbittestandreset -//#include -//#undef _interlockedbittestandset -//#undef _interlockedbittestandreset - -//inline U32 LLFastTimer::getCPUClockCount32() -//{ -// U64 time_stamp = __rdtsc(); -// return (U32)(time_stamp >> 8); -//} -// -//// return full timer value, *not* shifted by 8 bits -//inline U64 LLFastTimer::getCPUClockCount64() -//{ -// return __rdtsc(); -//} - // shift off lower 8 bits for lower resolution but longer term timing // on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing -#if USE_RDTSC -U32 LLFastTimer::getCPUClockCount32() -{ - U32 ret_val; - __asm - { - _emit 0x0f - _emit 0x31 - shr eax,8 - shl edx,24 - or eax, edx - mov dword ptr [ret_val], eax - } - return ret_val; -} -// return full timer value, *not* shifted by 8 bits -U64 LLFastTimer::getCPUClockCount64() -{ - U64 ret_val; - __asm - { - _emit 0x0f - _emit 0x31 - mov eax,eax - mov edx,edx - mov dword ptr [ret_val+4], edx - mov dword ptr [ret_val], eax - } - return ret_val; -} - -std::string LLFastTimer::sClockType = "rdtsc"; - -#else //LL_COMMON_API U64 get_clock_count(); // in lltimer.cpp -// These use QueryPerformanceCounter, which is arguably fine and also works on amd architectures. +// On windows these use QueryPerformanceCounter, which is arguably fine and also works on amd architectures. U32 LLFastTimer::getCPUClockCount32() { - return (U32)(get_clock_count()>>8); + return get_clock_count() >> 8; } U64 LLFastTimer::getCPUClockCount64() { return get_clock_count(); } - -std::string LLFastTimer::sClockType = "QueryPerformanceCounter"; -#endif - -#endif - - -#if (LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__)) -// -// Linux and Solaris implementation of CPU clock - non-x86. -// This is accurate but SLOW! Only use out of desperation. -// -// Try to use the MONOTONIC clock if available, this is a constant time counter -// with nanosecond resolution (but not necessarily accuracy) and attempts are -// made to synchronize this value between cores at kernel start. It should not -// be affected by CPU frequency. If not available use the REALTIME clock, but -// this may be affected by NTP adjustments or other user activity affecting -// the system time. -U64 LLFastTimer::getCPUClockCount64() -{ - struct timespec tp; - -#ifdef CLOCK_MONOTONIC // MONOTONIC supported at build-time? - if (-1 == clock_gettime(CLOCK_MONOTONIC,&tp)) // if MONOTONIC isn't supported at runtime then ouch, try REALTIME -#endif - clock_gettime(CLOCK_REALTIME,&tp); - - return (tp.tv_sec*LLFastTimer::sClockResolution)+tp.tv_nsec; -} - -U32 LLFastTimer::getCPUClockCount32() -{ - return (U32)(LLFastTimer::getCPUClockCount64() >> 8); -} - -std::string LLFastTimer::sClockType = "clock_gettime"; - -#endif // (LL_LINUX || LL_SOLARIS) && !(defined(__i386__) || defined(__amd64__)) - - -#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__)) -// -// Mac+Linux+Solaris FAST x86 implementation of CPU clock -U32 LLFastTimer::getCPUClockCount32() -{ - U64 x; - __asm__ volatile (".byte 0x0f, 0x31": "=A"(x)); - return (U32)(x >> 8); -} - -U64 LLFastTimer::getCPUClockCount64() -{ - U64 x; - __asm__ volatile (".byte 0x0f, 0x31": "=A"(x)); - return x; -} - -std::string LLFastTimer::sClockType = "rdtsc"; -#endif \ No newline at end of file diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index 7f3dac2cf..ddb2c1d3e 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -267,7 +267,6 @@ public: static void reset(); static U64 countsPerSecond(); - static std::string sClockType; public: static int sCurDepth; static U64 sStart[FTM_MAX_DEPTH]; diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 46176f4b0..35cee6653 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -35,6 +35,7 @@ #include #include +#include // uintptr_t #include "llerror.h" diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index fa23e625b..edb882de0 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -52,7 +52,7 @@ # include # include # include -//# include May be needed? +# include #elif LL_LINUX # include # include diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index b6d35f1db..b0cc64e59 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -99,11 +99,21 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap // Run the user supplied function threadp->run(); - llinfos << "LLThread::staticRun() Exiting: " << threadp->mName << llendl; + // Setting mStatus to STOPPED is done non-thread-safe, so it's + // possible that the thread is deleted by another thread at + // the moment it happens... therefore make a copy here. + char const* name = threadp->mName; // We're done with the run function, this thread is done executing now. threadp->mStatus = STOPPED; + // Only now print this info [doing that before setting mStatus + // to STOPPED makes it much more likely that another thread runs + // after the LLCurl::Multi::run() function exits and we actually + // change this variable (which really SHOULD have been inside + // the critical area of the mSignal lock)]. + llinfos << "LLThread::staticRun() Exiting: " << name << llendl; + return NULL; } @@ -432,18 +442,8 @@ LLCondition::~LLCondition() mAPRCondp = NULL; } - void LLCondition::wait() { - if (!isLocked()) - { //mAPRMutexp MUST be locked before calling apr_thread_cond_wait - apr_thread_mutex_lock(mAPRMutexp); -#if MUTEX_DEBUG - // avoid asserts on destruction in non-release builds - U32 id = LLThread::currentID(); - mIsLocked[id] = TRUE; -#endif - } apr_thread_cond_wait(mAPRCondp, mAPRMutexp); } diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index ae2e852c3..aa8d826d0 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -35,8 +35,8 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 5; -const S32 LL_VERSION_PATCH = 9; -const S32 LL_VERSION_BUILD = 1; +const S32 LL_VERSION_PATCH = 10; +const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Singularity"; diff --git a/indra/llmath/llcamera.cpp b/indra/llmath/llcamera.cpp index ba31254fb..7ab6cdd5f 100644 --- a/indra/llmath/llcamera.cpp +++ b/indra/llmath/llcamera.cpp @@ -92,7 +92,7 @@ F32 LLCamera::getMaxView() const // ---------------- LLCamera::setFoo() member functions ---------------- -void LLCamera::setUserClipPlane(LLPlane& plane) +void LLCamera::setUserClipPlane(const LLPlane& plane) { mPlaneCount = 7; mAgentPlanes[6] = plane; diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h index 0e35ffd13..0459f797c 100644 --- a/indra/llmath/llcamera.h +++ b/indra/llmath/llcamera.h @@ -144,7 +144,7 @@ public: virtual ~LLCamera(); - void setUserClipPlane(LLPlane& plane); + void setUserClipPlane(const LLPlane& plane); void disableUserClipPlane(); virtual void setView(F32 vertical_fov_rads); void setViewHeightInPixels(S32 height); diff --git a/indra/llmath/llplane.h b/indra/llmath/llplane.h index 32590c195..a18f63a0d 100644 --- a/indra/llmath/llplane.h +++ b/indra/llmath/llplane.h @@ -93,7 +93,7 @@ public: inline void getVector3(LLVector3& vec) const { vec.set(mV[0], mV[1], mV[2]); } // Retrieve the mask indicating which of the x, y, or z axis are greater or equal to zero. - inline U8 calcPlaneMask() + inline U8 calcPlaneMask() const { return mV.greaterEqual(LLVector4a::getZero()).getGatheredBits() & LLVector4Logical::MASK_XYZ; } diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 6fe9dea2c..524c0ef17 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -722,14 +722,17 @@ CURLMsg* LLCurl::Multi::info_read(S32* msgs_in_queue) void LLCurl::Multi::perform() { + mSignal->lock(); if (mPerformState == PERFORM_STATE_READY) { mSignal->signal(); } + mSignal->unlock(); } void LLCurl::Multi::run() { + mSignal->lock(); while (!mQuitting) { mSignal->wait(); @@ -753,6 +756,7 @@ void LLCurl::Multi::run() mPerformState = PERFORM_STATE_COMPLETED; } } + mSignal->unlock(); } S32 LLCurl::Multi::process() @@ -879,12 +883,16 @@ LLCurlRequest::~LLCurlRequest() for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ++iter) { LLCurl::Multi* multi = *iter; + multi->mSignal->lock(); multi->mQuitting = true; while (!multi->isStopped()) { multi->mSignal->signal(); + multi->mSignal->unlock(); apr_sleep(1000); + multi->mSignal->lock(); } + multi->mSignal->unlock(); } for_each(mMultiSet.begin(), mMultiSet.end(), DeletePointer()); } @@ -1023,12 +1031,16 @@ S32 LLCurlRequest::process() if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0) { mMultiSet.erase(curiter); + multi->mSignal->lock(); multi->mQuitting = true; while (!multi->isStopped()) { multi->mSignal->signal(); + multi->mSignal->unlock(); apr_sleep(1000); + multi->mSignal->unlock(); } + multi->mSignal->unlock(); delete multi; } @@ -1071,12 +1083,16 @@ LLCurlEasyRequest::LLCurlEasyRequest() LLCurlEasyRequest::~LLCurlEasyRequest() { + mMulti->mSignal->lock(); mMulti->mQuitting = true; while (!mMulti->isStopped()) { mMulti->mSignal->signal(); + mMulti->mSignal->unlock(); apr_sleep(1000); + mMulti->mSignal->lock(); } + mMulti->mSignal->unlock(); delete mMulti; } diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp index febcfea84..90ca3fea7 100644 --- a/indra/llplugin/slplugin/slplugin.cpp +++ b/indra/llplugin/slplugin/slplugin.cpp @@ -293,7 +293,7 @@ int main(int argc, char **argv) } // Check for a change in this process's frontmost window. - if(FrontWindow() != front_window) + if(FrontNonFloatingWindow() != front_window) { ProcessSerialNumber self = { 0, kCurrentProcess }; ProcessSerialNumber parent = { 0, kNoProcess }; @@ -319,7 +319,7 @@ int main(int argc, char **argv) } } - if((FrontWindow() != NULL) && (front_window == NULL)) + if((FrontNonFloatingWindow() != NULL) && (front_window == NULL)) { // Opening the first window @@ -331,7 +331,7 @@ int main(int argc, char **argv) if(layer_group) { - SetWindowGroup(FrontWindow(), layer_group); + SetWindowGroup(FrontNonFloatingWindow(), layer_group); } if(parent_is_front_process) @@ -340,9 +340,9 @@ int main(int argc, char **argv) (void) SetFrontProcess( &self ); } - ActivateWindow(FrontWindow(), true); + ActivateWindow(FrontNonFloatingWindow(), true); } - else if((FrontWindow() == NULL) && (front_window != NULL)) + else if((FrontNonFloatingWindow() == NULL) && (front_window != NULL)) { // Closing the last window @@ -362,7 +362,7 @@ int main(int argc, char **argv) window_hack_state = 2; } - front_window = FrontWindow(); + front_window = FrontNonFloatingWindow(); } } diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index d114b2f58..1574c2422 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -1355,7 +1355,7 @@ LLModel* LLModel::loadModelFromDomMesh(domMesh *mesh) ret->mLabel = getElementLabel(mesh); return ret; } -#endif MESH_IMPORT +#endif //MESH_IMPORT std::string LLModel::getName() const { diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h index c255655de..6c60e507d 100644 --- a/indra/llprimitive/llprimitive.h +++ b/indra/llprimitive/llprimitive.h @@ -112,7 +112,7 @@ public: #if MESH_ENABLED PARAMS_RESERVED = 0x50, // Used on server-side PARAMS_MESH = 0x60, -#endif MESH_ENABLED +#endif //MESH_ENABLED }; public: diff --git a/indra/llrender/llfont.cpp b/indra/llrender/llfont.cpp index 80f938ec6..69daf389c 100644 --- a/indra/llrender/llfont.cpp +++ b/indra/llrender/llfont.cpp @@ -246,9 +246,9 @@ BOOL LLFont::loadFace(const std::string& filename, const F32 point_size, const F FT_Set_Charmap(mFTFace, mFTFace->charmaps[0]); } - if (!mIsFallback) + if (!mIsFallback || !sOpenGLcrashOnRestart) // because this often crashes under Linux... { - // Add the default glyph + // Add the empty glyph`5 addGlyph(0, 0); } @@ -362,7 +362,7 @@ BOOL LLFont::addGlyphFromFont(const LLFont *fontp, const llwchar wch, const U32 if (mFTFace == NULL) return FALSE; - llassert(!mIsFallback); + //llassert(!mIsFallback); fontp->renderGlyph(glyph_index); S32 width = fontp->mFTFace->glyph->bitmap.width; S32 height = fontp->mFTFace->glyph->bitmap.rows; @@ -581,7 +581,7 @@ void LLFont::setSubImageLuminanceAlpha(const U32 x, { LLImageRaw *image_raw = mFontBitmapCachep->getImageRaw(bitmap_num); - llassert(!mIsFallback); + //llassert(!mIsFallback); llassert(image_raw && (image_raw->getComponents() == 2)); diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index f597d7c70..ea2da1150 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -275,7 +275,7 @@ void LLFontGL::destroyAllGL() else { sFontRegistry->destroyGL(); - } + } } } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 8699a5039..315ca14de 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -297,7 +297,9 @@ private: bool mDragOnLeft; BOOL mButtonsEnabled[BUTTON_COUNT]; +protected: LLButton* mButtons[BUTTON_COUNT]; +private: F32 mButtonScale; BOOL mAutoFocus; LLHandle mSnappedTo; diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp index 59c1d6fd2..8afbb63ae 100644 --- a/indra/llvfs/lldiriterator.cpp +++ b/indra/llvfs/lldiriterator.cpp @@ -63,10 +63,10 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask) { mIter = fs::directory_iterator(dir_path); } -#if BOOST_FILESYSTEM_VERSION == 2 - catch (fs::basic_filesystem_error& e) -#else +#if BOOST_FILESYSTEM_VERSION >= 3 catch (fs::filesystem_error& e) +#else + catch (fs::basic_filesystem_error& e) #endif { llerrs << e.what() << llendl; @@ -112,10 +112,10 @@ bool LLDirIterator::Impl::next(std::string &fname) while (mIter != end_itr && !found) { boost::smatch match; -#if BOOST_FILESYSTEM_VERSION == 2 - std::string name = mIter->path().filename(); -#else +#if BOOST_FILESYSTEM_VERSION >= 3 std::string name = mIter->path().filename().string(); +#else + std::string name = mIter->path().filename(); #endif if (found = boost::regex_match(name, match, mFilterExp)) { diff --git a/indra/lscript/lscript_execute/lscript_readlso.cpp b/indra/lscript/lscript_execute/lscript_readlso.cpp index 2948ebca6..a5dbd6221 100644 --- a/indra/lscript/lscript_execute/lscript_readlso.cpp +++ b/indra/lscript/lscript_execute/lscript_readlso.cpp @@ -120,7 +120,7 @@ void LLScriptLSOParse::printRegisters(LLFILE *fp) else if (gMajorVersion == LSL2_MAJOR_VERSION_TWO) { U64 data = get_register_u64(mRawData, (LSCRIPTRegisters)i); - fprintf(fp, "%s: 0x%X%X\n", gLSCRIPTRegisterNames[i], (U32)(data>>32), (U32)(data && 0xFFFFFFFF)); + fprintf(fp, "%s: 0x%X%X\n", gLSCRIPTRegisterNames[i], (U32)(data>>32), (U32)(data & 0xFFFFFFFF)); } } fprintf(fp, "=============================\n\n"); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index da4f2e3bb..6a68ded09 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9,10 +9,56 @@ settings_rlv.xml + CCSAllowNameplateOverride + + Comment + Allow CCS HUD to override nameplates. + Persist + 1 + Type + Boolean + Value + 1 + + + HTTPRequestRate + + Comment + Number of HTTP texture requests fired per second. + Persist + 1 + Type + U32 + Value + 30 + + HTTPMaxRequests + + Comment + Maximum number of simultaneous HTTP requests in progress. + Persist + 1 + Type + U32 + Value + 32 + + HTTPMinRequests + + Comment + Attempt to maintain at least this many HTTP requests in progress by ignoring bandwidth + Persist + 1 + Type + U32 + Value + 2 + + TeleportHistoryMaxEntries Comment - Maximum number of entries to allow in teleport history list. + Maximum number of entries to allow in teleport history list. Persist 1 Type @@ -20,7 +66,7 @@ Value 100 - + AllowLargeSounds Comment diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index c740123ab..97ff2cd19 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -365,17 +365,6 @@ This is an autoresponse! - AscentInstantMessageAnnounceIncoming - - Comment - Open a new IM tab when another person begins typing to you and announce that they are doing so. - Persist - 1 - Type - Boolean - Value - 0 - MoyMiniMapCustomColor Comment @@ -392,131 +381,6 @@ 1.0 - - AscentFriendColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 1.0 - 1.0 - 0.0 - 1.0 - - - AscentLindenColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 0.0 - 0.0 - 1.0 - 1.0 - - - AscentMutedColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 0.7 - 0.7 - 0.7 - 1.0 - - - AscentEstateOwnerColor - - Comment - Color of chat messages from other residents - Persist - 1 - Type - Color4 - Value - - 1.0 - 0.6 - 1.0 - 1.0 - - - AscentUseCustomTag - - Comment - Show a custom local tag. - Persist - 1 - Type - Boolean - Value - 0 - - AscentCustomTagColor - - Comment - Color of custom local tag. - Persist - 1 - Type - Color4 - Value - - 0.5 - 1.0 - 0.25 - 1.0 - - - AscentCustomTagLabel - - Comment - Label for the custom local tag - Persist - 1 - Type - String - Value - Custom - - AscentReportClientIndex - - Comment - Show your own tag - Persist - 1 - Type - U32 - Value - 1 - - AscentReportClientUUID - - Comment - Broadcasted Client Key - Persist - 1 - Type - String - Value - f25263b7-6167-4f34-a4ef-af65213b2e39 - rkeastInventoryPreviousCount diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl index 817d6c1c5..85e5675ac 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl @@ -10,20 +10,20 @@ uniform sampler2D diffuseMap; uniform float glowStrength; -float kern[4] = float[4](.25,.5,.8,1.0); //Initialize the correct (non nVidia cg) way +vec4 kern = vec4(.25,.5,.8,1.0); void main() { vec4 col = vec4(0.0, 0.0, 0.0, 0.0); - col += kern[0] * texture2D(diffuseMap, gl_TexCoord[0].xy); - col += kern[1] * texture2D(diffuseMap, gl_TexCoord[1].xy); - col += kern[2] * texture2D(diffuseMap, gl_TexCoord[2].xy); - col += kern[3] * texture2D(diffuseMap, gl_TexCoord[3].xy); - col += kern[3] * texture2D(diffuseMap, gl_TexCoord[0].zw); - col += kern[2] * texture2D(diffuseMap, gl_TexCoord[1].zw); - col += kern[1] * texture2D(diffuseMap, gl_TexCoord[2].zw); - col += kern[0] * texture2D(diffuseMap, gl_TexCoord[3].zw); + col += kern.x * texture2D(diffuseMap, gl_TexCoord[0].xy); + col += kern.y * texture2D(diffuseMap, gl_TexCoord[1].xy); + col += kern.z * texture2D(diffuseMap, gl_TexCoord[2].xy); + col += kern.w * texture2D(diffuseMap, gl_TexCoord[3].xy); + col += kern.w * texture2D(diffuseMap, gl_TexCoord[0].zw); + col += kern.z * texture2D(diffuseMap, gl_TexCoord[1].zw); + col += kern.y * texture2D(diffuseMap, gl_TexCoord[2].zw); + col += kern.x * texture2D(diffuseMap, gl_TexCoord[3].zw); gl_FragColor = vec4(col.rgb * glowStrength, col.a); } diff --git a/indra/newview/ascentprefschat.cpp b/indra/newview/ascentprefschat.cpp index bd52eb5f0..f80d86a22 100644 --- a/indra/newview/ascentprefschat.cpp +++ b/indra/newview/ascentprefschat.cpp @@ -491,6 +491,8 @@ void LLPrefsAscentChat::cancel() // Update local copy so cancel has no effect void LLPrefsAscentChat::apply() { + gSavedPerAccountSettings.setString("AscentInstantMessageResponse", childGetValue("im_response")); + refreshValues(); refresh(); } diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh index 77dd4d023..34cb59877 100755 --- a/indra/newview/linux_tools/wrapper.sh +++ b/indra/newview/linux_tools/wrapper.sh @@ -68,6 +68,13 @@ if [ "$GTK_IM_MODULE" = "scim" ]; then export GTK_IM_MODULE=xim fi +# Work around for a crash bug when restarting OpenGL after a change in the +# graphic settings (anti-aliasing, VBO, FSAA, full screen mode, UI scale). +# When you enable this work around, you can change the settings without +# crashing, but you will have to restart the viewer after changing them +# because the display still gets corrupted. +export LL_OPENGL_RESTART_CRASH_BUG=x + ## - Automatically work around the ATI mouse cursor crash bug: ## (this workaround is disabled as most fglrx users do not see the bug) #if lsmod | grep fglrx &>/dev/null ; then diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 7f6875385..c0e1e6e68 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -49,7 +49,7 @@ void LLAgentUI::buildFullname(std::string& name) /* //static -void LLAgentUI::buildSLURL(LLSLURL& slurl, const bool escaped /*= true*//*) +void LLAgentUI::buildSLURL(LLSLURL& slurl, const bool escaped /= true/ ) { LLSLURL return_slurl; LLViewerRegion *regionp = gAgent.getRegion(); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 25b38e55d..e8fed149a 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -689,7 +689,13 @@ bool LLAppViewer::init() LLViewerJointMesh::updateVectorize(); // load MIME type -> media impl mappings - LLMIMETypes::parseMIMETypes( std::string("mime_types.xml") ); +#if LL_WINDOWS + LLMIMETypes::parseMIMETypes( std::string("mime_types_windows.xml") ); +#elif LL_DARWIN + LLMIMETypes::parseMIMETypes( std::string("mime_types_mac.xml") ); +#elif LL_LINUX + LLMIMETypes::parseMIMETypes( std::string("mime_types_linux.xml") ); +#endif // Copy settings to globals. *TODO: Remove or move to appropriage class initializers settings_to_globals(); diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index 8b2aac6e9..e6fed3c30 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -75,8 +75,9 @@ LLDebugView::LLDebugView(const std::string& name, const LLRect &rect) mFrameStatView->setVisible(FALSE); // start invisible addChild(mFrameStatView); - r.set(25, rect.getHeight() - 50, (S32) (gViewerWindow->getVirtualWindowRect().getWidth() * 0.75f), - (S32) (gViewerWindow->getVirtualWindowRect().getHeight() * 0.75f)); + r.setLeftTopAndSize(25, rect.getHeight() - 50, + (S32) (gViewerWindow->getVirtualWindowRect().getWidth() * 0.75f), + (S32) (gViewerWindow->getVirtualWindowRect().getHeight() * 0.75f)); mFastTimerView = new LLFastTimerView("fast timers", r); mFastTimerView->setFollowsTop(); mFastTimerView->setFollowsLeft(); diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 57a313b9c..b981eb46d 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -244,7 +244,7 @@ static const int FTV_DISPLAY_NUM = LL_ARRAY_SIZE(ft_display_table); S32 ft_display_idx[FTV_DISPLAY_NUM]; // line of table entry for display purposes (for collapse) LLFastTimerView::LLFastTimerView(const std::string& name, const LLRect& rect) - : LLFloater(name, rect, std::string("Fast Timers")) + : LLFloater(name, rect, std::string(), FALSE, 1, 1, FALSE, FALSE, TRUE) { setVisible(FALSE); mDisplayMode = 0; @@ -331,6 +331,15 @@ S32 LLFastTimerView::getLegendIndex(S32 y) BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask) { + { + S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft; + S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom; + if (mButtons[BUTTON_CLOSE]->getVisible() && + mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y)) + { + return LLFloater::handleMouseDown(x, y, mask); + } + } if (x < mBarRect.mLeft) { S32 legend_index = getLegendIndex(y); @@ -392,6 +401,15 @@ BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLFastTimerView::handleMouseUp(S32 x, S32 y, MASK mask) { + { + S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft; + S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom; + if (mButtons[BUTTON_CLOSE]->getVisible() && + mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y)) + { + return LLFloater::handleMouseUp(x, y, mask); + } + } return FALSE; } @@ -440,6 +458,18 @@ BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks) return TRUE; } +void LLFastTimerView::onClose(bool app_quitting) +{ + if (app_quitting) + { + LLFloater::close(app_quitting); + } + else + { + setVisible(FALSE); + } +} + void LLFastTimerView::draw() { LLFastTimer t(LLFastTimer::FTM_RENDER_TIMER); @@ -453,8 +483,9 @@ void LLFastTimerView::draw() S32 height = (S32) (gViewerWindow->getVirtualWindowRect().getHeight()*0.75f); S32 width = (S32) (gViewerWindow->getVirtualWindowRect().getWidth() * 0.75f); - // HACK: casting away const. Should use setRect or some helper function instead. - const_cast(getRect()).setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height); + LLRect new_rect; + new_rect.setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height); + setRect(new_rect); S32 left, top, right, bottom; S32 x, y, barw, barh, dx, dy; @@ -602,11 +633,14 @@ void LLFastTimerView::draw() left = x; right = x + texth; top = y; bottom = y - texth; S32 scale_offset = 0; - if (i == mHoverIndex) + if (y > 3 * texth) { - scale_offset = llfloor(sinf(mHighlightTimer.getElapsedTimeF32() * 6.f) * 2.f); + if (i == mHoverIndex) + { + scale_offset = llfloor(sinf(mHighlightTimer.getElapsedTimeF32() * 6.f) * 2.f); + } + gl_rect_2d(left - scale_offset, top + scale_offset, right + scale_offset, bottom - scale_offset, *ft_display_table[i].color); } - gl_rect_2d(left - scale_offset, top + scale_offset, right + scale_offset, bottom - scale_offset, *ft_display_table[i].color); int tidx = ft_display_table[i].timer; F32 ms = 0; @@ -636,7 +670,7 @@ void LLFastTimerView::draw() dx = (texth+4) + level*8; LLColor4 color = disabled > 1 ? LLColor4::grey : LLColor4::white; - if (level > 0) + if (level > 0 && y > 3 * texth) { S32 line_start_y = (top + bottom) / 2; S32 line_end_y = line_start_y + ((texth + 2) * (display_line[i] - display_line[parent])) - (texth / 2); @@ -658,13 +692,16 @@ void LLFastTimerView::draw() next_parent = ft_display_table[next_parent].parent; } - if (is_child_of_hover_item) + if (y > 3 * texth) { - LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::BOLD); - } - else - { - LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, color, LLFontGL::LEFT, LLFontGL::TOP); + if (is_child_of_hover_item) + { + LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::BOLD); + } + else + { + LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, color, LLFontGL::LEFT, LLFontGL::TOP); + } } y -= (texth + 2); @@ -672,6 +709,11 @@ void LLFastTimerView::draw() if (textw > legendwidth) legendwidth = textw; } + if (y <= 3 * texth) + { + LLFontGL::getFontMonospace()->renderUTF8("", 0, 3 * texth, 2 * texth, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::BOLD); + } + for (S32 i=cur_line; i + //MK #include "llworld.h" #include "lleventpoll.h" @@ -238,6 +240,13 @@ void LLFloaterTeleportHistory::loadFile(const std::string &file_name) } } } + +struct SortByAge{ + inline bool operator() (LLScrollListItem* const i,LLScrollListItem* const j) const { + return (i->getValue().asInteger()>j->getValue().asInteger()); + } +}; + //static void LLFloaterTeleportHistory::saveFile(const std::string &file_name) { @@ -265,10 +274,7 @@ void LLFloaterTeleportHistory::saveFile(const std::string &file_name) if (pScrollList) { std::vector data_list = pScrollList->getAllData(); - struct SortByAge { - bool operator() (LLScrollListItem* i,LLScrollListItem* j) { return (i->getValue().asInteger()>j->getValue().asInteger());} - } sorter; - std::sort(data_list.begin(),data_list.end(),sorter);//Re-sort. Column sorting may have mucked the list up. Newer entries in front. + std::sort(data_list.begin(),data_list.end(),SortByAge());//Re-sort. Column sorting may have mucked the list up. Newer entries in front. for (std::vector::iterator itr = data_list.begin(); itr != data_list.end(); ++itr) { //Pack into LLSD mimicing one passed to addElement diff --git a/indra/newview/llfloaterteleporthistory.h b/indra/newview/llfloaterteleporthistory.h index 8b79f2510..7778de60d 100644 --- a/indra/newview/llfloaterteleporthistory.h +++ b/indra/newview/llfloaterteleporthistory.h @@ -43,7 +43,7 @@ #include "llfloater.h" #include "llscrolllistctrl.h" -class LLFloaterTeleportHistory : public LLFloater, public LLUISingleton> +class LLFloaterTeleportHistory : public LLFloater, public LLUISingleton > { public: LLFloaterTeleportHistory(const LLSD& seed); diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp index 0a7109b7c..3e38abe4c 100644 --- a/indra/newview/llhudicon.cpp +++ b/indra/newview/llhudicon.cpp @@ -73,6 +73,7 @@ LLHUDIcon::LLHUDIcon(const U8 type) : mScale(0.1f), mHidden(FALSE) { + llassert(this); sIconInstances.push_back(this); } @@ -333,7 +334,7 @@ LLHUDIcon* LLHUDIcon::lineSegmentIntersectAll(const LLVector3& start, const LLVe for(icon_it = sIconInstances.begin(); icon_it != sIconInstances.end(); ++icon_it) { LLHUDIcon* icon = *icon_it; - if (icon->lineSegmentIntersect(start, local_end, &position)) + if (icon && icon->lineSegmentIntersect(start, local_end, &position)) { ret = icon; if (intersection) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 8282bf8ff..8ae7f8523 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1653,7 +1653,7 @@ BOOL LLFolderBridge::isItemRemovable() return FALSE; } - if ( (LLAssetType::AT_NONE != category->getPreferredType()) && (LLFolderType::FT_OUTFIT != category->getPreferredType()) ) + if ( (LLFolderType::FT_NONE != category->getPreferredType()) && (LLFolderType::FT_OUTFIT != category->getPreferredType()) ) { return FALSE; } @@ -1666,7 +1666,7 @@ BOOL LLFolderBridge::isItemRemovable() for( i = 0; i < descendent_categories.count(); i++ ) { LLInventoryCategory* category = descendent_categories[i]; - if( LLAssetType::AT_NONE != category->getPreferredType() ) + if( LLFolderType::FT_NONE != category->getPreferredType() ) { return FALSE; } @@ -1792,7 +1792,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, const LLUUID& cat_id = inv_cat->getUUID(); const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false); const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); - BOOL is_movable = (LLAssetType::AT_NONE == inv_cat->getPreferredType()); + BOOL is_movable = (LLFolderType::FT_NONE == inv_cat->getPreferredType()); if( is_movable ) { LLInventoryModel::cat_array_t descendent_categories; diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index cf52896e8..574d70f4b 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -66,7 +66,7 @@ std::string LLLogChat::makeLogFileName(std::string filename) std::string LLLogChat::cleanFileName(std::string filename) { - std::string invalidChars = "\"\'\\/?*:<>|"; + std::string invalidChars = "\"\'\\/?*:<>|[]{}~"; // Cannot match glob or illegal filename chars S32 position = filename.find_first_of(invalidChars); while (position != filename.npos) { diff --git a/indra/newview/llnotify.cpp b/indra/newview/llnotify.cpp index ffd264b6c..afa2f84af 100644 --- a/indra/newview/llnotify.cpp +++ b/indra/newview/llnotify.cpp @@ -101,7 +101,7 @@ bool LLNotifyBox::onNotification(const LLSD& notify) //bring existing notification to top //This getInstance is ugly, as LLNotifyBox is derived from both LLInstanceTracker and LLEventTimer, which also is derived from its own LLInstanceTracker //Have to explicitly determine which getInstance function to use. - LLNotifyBox* boxp = LLNotifyBox::LLInstanceTracker::getInstance(notification->getID()); + LLNotifyBox* boxp = LLInstanceTracker::getInstance(notification->getID()); if (boxp && !boxp->isDead()) { gNotifyBoxView->showOnly(boxp); @@ -118,7 +118,7 @@ bool LLNotifyBox::onNotification(const LLSD& notify) } else if (notify["sigtype"].asString() == "delete") { - LLNotifyBox* boxp = LLNotifyBox::LLInstanceTracker::getInstance(notification->getID()); + LLNotifyBox* boxp = LLInstanceTracker::getInstance(notification->getID()); if (boxp && !boxp->isDead()) { boxp->close(); diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp index d1eee80b3..05de7fdc4 100644 --- a/indra/newview/llpanelland.cpp +++ b/indra/newview/llpanelland.cpp @@ -179,7 +179,7 @@ void LLPanelLandInfo::refresh() childSetEnabled("button abandon land",owner_release || manager_releaseable || gAgent.isGodlike()); // only mainland sims are subdividable by owner - if (regionp->getRegionFlags() && REGION_FLAGS_ALLOW_PARCEL_CHANGES) + if (regionp->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES) { childSetEnabled("button subdivide land",owner_divide || manager_divideable || gAgent.isGodlike()); } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 354ea1c0c..b5bbc99c4 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -476,7 +476,7 @@ void LLPanelObject::getState( ) } // can move or rotate only linked group with move permissions, or sub-object with move and modify perms - BOOL enable_move = objectp->permMove() && !objectp->isAttachment() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts")); + BOOL enable_move = objectp->permMove() && (!objectp->isAttachment() && objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts")); BOOL enable_scale = objectp->permMove() && objectp->permModify(); BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); BOOL enable_link = objectp->permMove() && !objectp->isAttachment() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts")); @@ -492,15 +492,6 @@ void LLPanelObject::getState( ) enable_rotate = FALSE; } - - - - - - - - - // [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) if ( (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SITTP))) ) { @@ -1125,14 +1116,14 @@ void LLPanelObject::getState( ) //top_shear_x_visible = FALSE; //top_shear_y_visible = FALSE; //advanced_cut_visible = TRUE; - //advanced_is_dimple = TRUE; + advanced_is_dimple = TRUE; //twist_min = OBJECT_TWIST_MIN; //twist_max = OBJECT_TWIST_MAX; //twist_inc = OBJECT_TWIST_INC; // Just like the others except no radius size_is_hole = TRUE; skew_visible = TRUE; - advanced_cut_visible = TRUE; + //advanced_cut_visible = TRUE; taper_visible = TRUE; radius_offset_visible = FALSE; revolutions_visible = TRUE; @@ -1145,8 +1136,9 @@ void LLPanelObject::getState( ) case MI_TEST_PRISM: case MI_TEST_HEMICYLINDER: cut_visible = FALSE; - advanced_cut_visible = TRUE; - taper_visible = FALSE; + //advanced_cut_visible = TRUE; + advanced_is_slice = TRUE; + //taper_visible = FALSE; radius_offset_visible = FALSE; revolutions_visible = FALSE; top_shear_x_visible = FALSE; @@ -2192,7 +2184,8 @@ void LLPanelObject::sendPosition(BOOL btn_down) // won't get dumped by the simulator. LLVector3d new_pos_global = regionp->getPosGlobalFromRegion(newpos); - if ( LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global) ) + if (LLWorld::getInstance()->positionRegionValidGlobal(new_pos_global) || + mObject->isAttachment()) { // send only if the position is changed, that is, the delta vector is not zero LLVector3d old_pos_global = mObject->getPositionGlobal(); @@ -2644,9 +2637,9 @@ void LLPanelObject::onPastePos(void* user_data) LLPanelObject* self = (LLPanelObject*) user_data; LLCalc* calcp = LLCalc::getInstance(); - mClipboardPos.mV[VX] = llclamp( mClipboardPos.mV[VX], 0.f, 256.f); - mClipboardPos.mV[VY] = llclamp( mClipboardPos.mV[VY], 0.f, 256.f); - mClipboardPos.mV[VZ] = llclamp( mClipboardPos.mV[VZ], 0.f, 4096.f); + mClipboardPos.mV[VX] = llclamp( mClipboardPos.mV[VX], -3.5f, 256.f); + mClipboardPos.mV[VY] = llclamp( mClipboardPos.mV[VY], -3.5f, 256.f); + mClipboardPos.mV[VZ] = llclamp( mClipboardPos.mV[VZ], -3.5f, 4096.f); self->mCtrlPosX->set( mClipboardPos.mV[VX] ); self->mCtrlPosY->set( mClipboardPos.mV[VY] ); @@ -2723,9 +2716,9 @@ void LLPanelObject::onPastePosClip(void* user_data) std::string stringVec = wstring_to_utf8str(temp_string); if(!getvectorfromclip(stringVec, &mClipboardPos)) return; - mClipboardPos.mV[VX] = llclamp(mClipboardPos.mV[VX], 0.f, 256.f); - mClipboardPos.mV[VY] = llclamp(mClipboardPos.mV[VY], 0.f, 256.f); - mClipboardPos.mV[VZ] = llclamp(mClipboardPos.mV[VZ], 0.f, 4096.f); + mClipboardPos.mV[VX] = llclamp(mClipboardPos.mV[VX], -3.5f, 256.f); + mClipboardPos.mV[VY] = llclamp(mClipboardPos.mV[VY], -3.5f, 256.f); + mClipboardPos.mV[VZ] = llclamp(mClipboardPos.mV[VZ], -3.5f, 4096.f); self->mCtrlPosX->set( mClipboardPos.mV[VX] ); self->mCtrlPosY->set( mClipboardPos.mV[VY] ); diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index 845129a38..6963f6a84 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -400,7 +400,7 @@ void LLPreviewAnim::gotAssetForSave(LLVFS *vfs, // static void LLPreviewAnim::gotAssetForSave_continued(char* buffer, S32 size, AIFilePicker* filepicker) { - if (!filepicker->hasFilename()) + if (filepicker->hasFilename()) { std::string filename = filepicker->getFilename(); std::ofstream export_file(filename.c_str(), std::ofstream::binary); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index dadd29dbd..6246c7ebe 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5678,7 +5678,7 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); gGL.popMatrix(); } -#endif MESH_ENABLED +#endif //MESH_ENABLED //----------------------------------------------------------------------------- // renderOneSilhouette() diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index cd74d3d73..d24bff56b 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -472,6 +472,30 @@ public: LLMutex* SGHostBlackList::sMutex = 0; SGHostBlackList::blacklist_t SGHostBlackList::blacklist; +//call every time a connection is opened +//return true if connecting allowed +static bool sgConnectionThrottle() { + static LLMutex mutex; + LLMutexLock lock(&mutex); + const U32 THROTTLE_TIMESTEPS_PER_SECOND = 10; + static const LLCachedControl max_connections_per_second("HTTPRequestRate", 30); + U32 max_connections = max_connections_per_second/THROTTLE_TIMESTEPS_PER_SECOND; + const U32 timestep = USEC_PER_SEC/THROTTLE_TIMESTEPS_PER_SECOND; + U64 now = LLTimer::getTotalTime(); + std::deque timestamps; + while(!timestamps.empty() && (timestamps[0]<=now-timestep)) { + timestamps.pop_front(); + } + if(timestamps.size() < max_connections) { + //llinfos << "throttle pass" << llendl; + timestamps.push_back(now); + return true; + } else { + //llinfos << "throttle fail" << llendl; + return false; + } +} + #if HTTP_METRICS // Cross-thread messaging for asset metrics. @@ -1250,11 +1274,12 @@ bool LLTextureFetchWorker::doWork(S32 param) //1, not openning too many file descriptors at the same time; //2, control the traffic of http so udp gets bandwidth. // - static const S32 MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE = 32; - static const S32 NUM_REQUESTS_TILL_THRESHOLDING = 2; - if((mFetcher->getNumHTTPRequests() > MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE) || + static const LLCachedControl max_http_requests("HTTPMaxRequests", 32); + static const LLCachedControl min_http_requests("HTTPMinRequests", 2); + if((mFetcher->getNumHTTPRequests() > max_http_requests) || ((mFetcher->getTextureBandwidth() > mFetcher->mMaxBandwidth) && - mFetcher->getNumHTTPRequests() > NUM_REQUESTS_TILL_THRESHOLDING)) + (mFetcher->getNumHTTPRequests() > min_http_requests)) || + !sgConnectionThrottle()) { return false ; //wait. } @@ -2058,8 +2083,8 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con unlockQueue() ; worker->lockWorkMutex(); - worker->mActiveCount++; - worker->mNeedsAux = needs_aux; + worker->mActiveCount++; + worker->mNeedsAux = needs_aux; worker->setCanUseHTTP(can_use_http) ; worker->unlockWorkMutex(); } @@ -2709,8 +2734,8 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 res = worker->insertPacket(0, data, data_size); worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority); worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR; - worker->unlockWorkMutex(); - return res; + worker->unlockWorkMutex(); + return res; } bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U16 packet_num, U16 data_size, U8* data) diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp index 593a382cd..44fc368f3 100644 --- a/indra/newview/lltoolbar.cpp +++ b/indra/newview/lltoolbar.cpp @@ -126,7 +126,6 @@ LLToolBar::LLToolBar() BOOL LLToolBar::postBuild() { childSetCommitCallback("communicate_btn", onClickCommunicate, this); - childSetControlName("communicate_btn", "ShowCommunicate"); childSetAction("chat_btn", onClickChat, this); childSetControlName("chat_btn", "ChatVisible"); diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index a21dc6a61..5da60b8b1 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -98,7 +98,7 @@ public: virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { - if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE)) + if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) { return true; } @@ -115,7 +115,7 @@ public: LLInventoryItem* item) { if(item) return true; - if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE)) + if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) { return true; } diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index f08404069..9f6a5e8b1 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -32,7 +32,6 @@ #include "llviewerprecompiledheaders.h" -#define LLVIEWERCAMERA_CPP #include "llviewercamera.h" #include // for setprecision diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index 85669f937..1fcda6362 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -51,11 +51,6 @@ const F32 OGL_TO_CFR_ROTATION[16] = { 0.f, 0.f, -1.f, 0.f, // -Z becomes X const BOOL FOR_SELECTION = TRUE; const BOOL NOT_FOR_SELECTION = FALSE; -// Build time optimization, generate this once in .cpp file -#ifndef LLVIEWERCAMERA_CPP -extern template class LLViewerCamera* LLSingleton::getInstance(); -#endif - class LLViewerCamera : public LLCamera, public LLSingleton { public: diff --git a/indra/newview/llviewergenericmessage.cpp b/indra/newview/llviewergenericmessage.cpp index b541104fd..1aa4919ac 100644 --- a/indra/newview/llviewergenericmessage.cpp +++ b/indra/newview/llviewergenericmessage.cpp @@ -111,6 +111,10 @@ void process_generic_message(LLMessageSystem* msg, void**) LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); LLWaterParamSet & param_set = param_mgr->mCurParams; + LLWaterParamSet backup; + if(!param_mgr->getParamSet("LightShare-Backup", backup)) { + param_mgr->addParamSet("LightShare-Backup", param_set); + } param_set.set("waterFogColor", wl->waterColor.red / 256.f, wl->waterColor.green / 256.f, wl->waterColor.blue / 256.f); param_set.set("waterFogDensity", pow(2.0f, wl->waterFogDensityExponent)); @@ -147,11 +151,16 @@ void process_generic_message(LLMessageSystem* msg, void**) normalMapTexture.set(out); - param_mgr->setParamSet( "Meta7CurrentRegion", param_set); + param_mgr->setParamSet( "LightShare-CurrentRegion", param_set); param_mgr->setNormalMapID(normalMapTexture); LLWLParamManager * wl_param_mgr = LLWLParamManager::instance(); LLWLParamSet & wl_param_set = wl_param_mgr->mCurParams; + LLWLParamSet wl_backup; + if(!wl_param_mgr->getParamSet("LightShare-Backup", wl_backup)) { + wl_param_mgr->addParamSet("LightShare-Backup", wl_param_set); + } + wl_param_set.setSunAngle(F_TWO_PI * wl->sunMoonPosiiton); wl_param_set.setEastAngle(F_TWO_PI * wl->eastAngle); wl_param_set.set("sunlight_color", wl->sunMoonColor.red * 3.0f, wl->sunMoonColor.green * 3.0f, wl->sunMoonColor.blue * 3.0f, wl->sunMoonColor.alpha * 3.0f); @@ -175,12 +184,12 @@ void process_generic_message(LLMessageSystem* msg, void**) wl_param_set.setEnableCloudScrollX(!wl->cloudScrollXLock); wl_param_set.setEnableCloudScrollY(!wl->cloudScrollYLock); wl_param_set.setStarBrightness(wl->starBrightness); - wl_param_mgr->removeParamSet("Meta7-CurrentRegion",true); - wl_param_mgr->addParamSet( "Meta7-CurrentRegion", wl_param_set); - wl_param_mgr->savePreset( "Meta7-CurrentRegion"); + wl_param_mgr->removeParamSet("LightShare-CurrentRegion",true); + wl_param_mgr->addParamSet( "LightShare-CurrentRegion", wl_param_set); + wl_param_mgr->savePreset( "LightShare-CurrentRegion"); LLWLParamManager::instance()->mAnimator.mIsRunning = false; LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; - wl_param_mgr->loadPreset( "Meta7-CurrentRegion",true); + wl_param_mgr->loadPreset( "LightShare-CurrentRegion",true); } } } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 63d3a4440..a1d157b7f 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -441,7 +441,7 @@ void LLViewerInventoryCategory::updateParentOnServer(BOOL restamp) const void LLViewerInventoryCategory::updateServer(BOOL is_new) const { // communicate that change with the server. - if ( (LLAssetType::AT_NONE != mPreferredType) && (LLFolderType::FT_OUTFIT != mPreferredType) ) + if ( (LLFolderType::FT_NONE != mPreferredType) && (LLFolderType::FT_OUTFIT != mPreferredType) ) { LLNotifications::instance().add("CannotModifyProtectedCategories"); return; @@ -465,7 +465,7 @@ void LLViewerInventoryCategory::removeFromServer( void ) llinfos << "Removing inventory category " << mUUID << " from server." << llendl; // communicate that change with the server. - if ( (LLAssetType::AT_NONE != mPreferredType) && (LLFolderType::FT_OUTFIT != mPreferredType) ) + if ( (LLFolderType::FT_NONE != mPreferredType) && (LLFolderType::FT_OUTFIT != mPreferredType) ) { LLNotifications::instance().add("CannotRemoveProtectedCategories"); return; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2be3d924c..dc5587615 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2864,15 +2864,10 @@ class LLObjectExport : public view_listener_t bool handleEvent(LLPointer event, const LLSD& userdata) { LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); - if (!object) return true; - - LLVOAvatar* avatar = find_avatar_from_object(object); - - if (!avatar) + if (object) { LLObjectBackup::getInstance()->exportObject(); } - return true; } }; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index a0479296d..2c1aecaf8 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -154,16 +154,13 @@ std::string build_extensions_string(ELoadFilter filter) } class AIFileUpload { - protected: - AIFilePicker* mPicker; - public: - AIFileUpload(void) : mPicker(NULL) { } - virtual ~AIFileUpload() { llassert(!mPicker); if (mPicker) { mPicker->abort(); mPicker = NULL; } } + AIFileUpload(void) { } + virtual ~AIFileUpload() { } public: bool is_valid(std::string const& filename, ELoadFilter type); - void filepicker_callback(ELoadFilter type); + void filepicker_callback(ELoadFilter type, AIFilePicker* picker); void start_filepicker(ELoadFilter type, char const* context); protected: @@ -179,21 +176,22 @@ void AIFileUpload::start_filepicker(ELoadFilter filter, char const* context) // display(); } - llassert(!mPicker); - mPicker = AIFilePicker::create(); - mPicker->open(filter, "", context); - mPicker->run(boost::bind(&AIFileUpload::filepicker_callback, this, filter)); + AIFilePicker* picker = AIFilePicker::create(); + picker->open(filter, "", context); + // Note that when the call back is called then we're still in the main loop of + // the viewer and therefore the AIFileUpload still exists, since that is only + // destructed at the end of main when exiting the viewer. + picker->run(boost::bind(&AIFileUpload::filepicker_callback, this, filter, picker)); } -void AIFileUpload::filepicker_callback(ELoadFilter type) +void AIFileUpload::filepicker_callback(ELoadFilter type, AIFilePicker* picker) { - if (mPicker->hasFilename()) + if (picker->hasFilename()) { - std::string filename = mPicker->getFilename(); + std::string filename = picker->getFilename(); if (is_valid(filename, type)) handle_event(filename); } - mPicker = NULL; } bool AIFileUpload::is_valid(std::string const& filename, ELoadFilter type) @@ -478,7 +476,7 @@ class LLFileMinimizeAllWindows : public view_listener_t }; // -class LLFileSaveTexture : public view_listener_t +class LLFileSavePreview : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { @@ -1275,12 +1273,11 @@ void init_menu_file() // (new LLFileMinimizeAllWindows())->registerListener(gMenuHolder, "File.MinimizeAllWindows"); // - (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); + (new LLFileSavePreview())->registerListener(gMenuHolder, "File.SavePreview"); (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); (new LLFileLogOut())->registerListener(gMenuHolder, "File.LogOut"); - //Emerald has a second llFileSaveTexture here... Same as the original. Odd. -HgB (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload"); (new LLFileEnableSaveAs())->registerListener(gMenuHolder, "File.EnableSaveAs"); } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d4042d312..d7a7566bd 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3085,7 +3085,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) // RELEASE-RLVa: if this code changes, remember to change the code down below as well if ( (chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mChatType != CHAT_TYPE_DEBUG_MSG) && (gSavedSettings.getBOOL("EffectScriptChatParticles")) && - ((!rlv_handler_t::isEnabled()) || (CHAT_TYPE_OWNER != chat.mChatType)) ) + (CHAT_TYPE_OWNER != chat.mChatType) ) // [/RLVa:KB] { LLPointer psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); @@ -3419,8 +3419,9 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) #endif //shy_mod // [RLVa:KB] - Alternate: Snowglobe-1.2.4 | Checked: 2009-07-10 (RLVa-1.0.0g) // Copy/paste from above - if ( (chatter) && (chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mChatType != CHAT_TYPE_DEBUG_MSG) && - (gSavedSettings.getBOOL("EffectScriptChatParticles")) ) + if ( chatter && (chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mChatType != CHAT_TYPE_DEBUG_MSG) && + (gSavedSettings.getBOOL("EffectScriptChatParticles")) && + (CHAT_TYPE_OWNER != chat.mChatType) ) { LLPointer psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); psc->setSourceObject(chatter); @@ -3749,10 +3750,18 @@ void process_teleport_finish(LLMessageSystem* msg, void**) */ //Reset the windlight profile to default - /*LLWLParamManager::instance()->mAnimator.mIsRunning = false; - LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; - LLWLParamManager::instance()->loadPreset("Default", true); - LLWaterParamManager::instance()->loadPreset("Default",true);*/ + //LLWLParamManager::instance()->mAnimator.mIsRunning = false; + //LLWLParamManager::instance()->mAnimator.mUseLindenTime = false; + LLWLParamSet wl_backup; + if(LLWLParamManager::instance()->getParamSet("LightShare-Backup", wl_backup)) { + LLWLParamManager::instance()->propagateParameters(); + LLWLParamManager::instance()->removeParamSet("LightShare-Backup", true); + } + LLWaterParamSet backup; + if(LLWaterParamManager::instance()->getParamSet("LightShare-Backup", backup)) { + LLWaterParamManager::instance()->propagateParameters(); + LLWaterParamManager::instance()->removeParamSet("LightShare-Backup", true); + } // now, use the circuit info to tell simulator about us! LL_INFOS("Messaging") << "process_teleport_finish() Enabling " diff --git a/indra/newview/llviewerobjectbackup.cpp b/indra/newview/llviewerobjectbackup.cpp index c76281c5a..d3e41550b 100644 --- a/indra/newview/llviewerobjectbackup.cpp +++ b/indra/newview/llviewerobjectbackup.cpp @@ -34,12 +34,10 @@ #include #include -#include "hippogridmanager.h" - // linden library includes #include "indra_constants.h" -#include "llapr.h" #include "llalertdialog.h" +#include "llapr.h" #include "llcallbacklist.h" #include "lldir.h" #include "lleconomy.h" @@ -79,9 +77,37 @@ #include "llviewerstats.h" #include "llviewerwindow.h" +#include "hippogridmanager.h" + #include "llviewerobjectbackup.h" -LLObjectBackup* LLObjectBackup::sInstance = 0; +LLObjectBackup* LLObjectBackup::sInstance = NULL; + +// Note: these default textures are initialized with hard coded values to +// prevent cheating. When not in SL, the user-configurable values are used +// instead (see setDefaultTextures() below). +static LLUUID LL_TEXTURE_PLYWOOD = LLUUID("89556747-24cb-43ed-920b-47caed15465f"); +static LLUUID LL_TEXTURE_BLANK = LLUUID("5748decc-f629-461c-9a36-a35a221fe21f"); +static LLUUID LL_TEXTURE_INVISIBLE = LLUUID("38b86f85-2575-52a9-a531-23108d8da837"); +static LLUUID LL_TEXTURE_TRANSPARENT = LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"); +static LLUUID LL_TEXTURE_MEDIA = LLUUID("8b5fec65-8d8d-9dc5-cda8-8fdf2716e361"); + +void setDefaultTextures() +{ + if (!gHippoGridManager->getConnectedGrid()->isSecondLife()) + { + // When not in SL (no texture perm check needed), we can get these + // defaults from the user settings... + LL_TEXTURE_PLYWOOD = LLUUID(gSavedSettings.getString("DefaultObjectTexture")); + LL_TEXTURE_BLANK = LLUUID(gSavedSettings.getString("UIImgWhiteUUID")); + if (gSavedSettings.controlExists("UIImgInvisibleUUID")) + { + // This control only exists in the Cool VL Viewer (added by the + // AllowInvisibleTextureInPicker patch) + LL_TEXTURE_INVISIBLE = LLUUID(gSavedSettings.getString("UIImgInvisibleUUID")); + } + } +} class importResponder: public LLNewAgentInventoryResponder { @@ -95,7 +121,7 @@ public: //virtual virtual void uploadComplete(const LLSD& content) { - lldebugs << "LLNewAgentInventoryResponder::result from capabilities" << llendl; + LL_DEBUGS("ObjectBackup") << "LLNewAgentInventoryResponder::result from capabilities" << LL_ENDL; LLAssetType::EType asset_type = LLAssetType::lookup(mPostData["asset_type"].asString()); LLInventoryType::EType inventory_type = LLInventoryType::lookup(mPostData["inventory_type"].asString()); @@ -120,8 +146,8 @@ public: } // Actually add the upload to viewer inventory - llinfos << "Adding " << content["new_inventory_item"].asUUID() << " " - << content["new_asset"].asUUID() << " to inventory." << llendl; + LL_INFOS("ObjectBackup") << "Adding " << content["new_inventory_item"].asUUID() << " " + << content["new_asset"].asUUID() << " to inventory." << LL_ENDL; if (mPostData["folder_id"].asUUID().notNull()) { LLPermissions perm; @@ -154,7 +180,7 @@ public: } else { - llwarns << "Can't find a folder to put it into" << llendl; + LL_WARNS("ObjectBackup") << "Can't find a folder to put it into" << LL_ENDL; } // remove the "Uploading..." message @@ -177,7 +203,7 @@ public: { if (imageformat == IMG_CODEC_TGA && mFormattedImage->getCodec() == IMG_CODEC_J2C) { - llwarns << "FAILED: texture " << mID << " is formatted as TGA. Not saving." << llendl; + LL_WARNS("ObjectBackup") << "FAILED: texture " << mID << " is formatted as TGA. Not saving." << LL_ENDL; LLObjectBackup::getInstance()->mNonExportedTextures |= LLObjectBackup::TEXTURE_BAD_ENCODING; mFormattedImage = NULL; mImageSize = 0; @@ -202,14 +228,14 @@ public: { if (success && mFormattedImage.notNull() && mImageSize > 0) { - llinfos << "SUCCESS getting texture " << mID << llendl; + LL_INFOS("ObjectBackup") << "SUCCESS getting texture " << mID << LL_ENDL; std::string name; mID.toString(name); name = LLObjectBackup::getInstance()->getfolder() + "//" + name; - llinfos << "Saving to " << name << llendl; + LL_INFOS("ObjectBackup") << "Saving to " << name << LL_ENDL; if (!mFormattedImage->save(name)) { - llwarns << "FAILED to save texture " << mID << llendl; + LL_WARNS("ObjectBackup") << "FAILED to save texture " << mID << LL_ENDL; LLObjectBackup::getInstance()->mNonExportedTextures |= LLObjectBackup::TEXTURE_SAVED_FAILED; } } @@ -217,12 +243,12 @@ public: { if (!success) { - llwarns << "FAILED to get texture " << mID << llendl; + LL_WARNS("ObjectBackup") << "FAILED to get texture " << mID << LL_ENDL; LLObjectBackup::getInstance()->mNonExportedTextures |= LLObjectBackup::TEXTURE_MISSING; } if (mFormattedImage.isNull()) { - llwarns << "FAILED: NULL texture " << mID << llendl; + LL_WARNS("ObjectBackup") << "FAILED: NULL texture " << mID << LL_ENDL; LLObjectBackup::getInstance()->mNonExportedTextures |= LLObjectBackup::TEXTURE_IS_NULL; } } @@ -340,6 +366,9 @@ void LLObjectBackup::exportObject() mLLSD.clear(); mThisGroup.clear(); + setDefaultTextures(); + LLSelectMgr::getInstance()->getSelection()->ref(); + // Open the file save dialog AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open("", FFSAVE_XML); @@ -351,6 +380,7 @@ void LLObjectBackup::exportObject_continued(AIFilePicker* filepicker) if (!filepicker->hasFilename()) { // User canceled save. + LLSelectMgr::getInstance()->getSelection()->unref(); return; } @@ -365,7 +395,7 @@ void LLObjectBackup::exportObject_continued(AIFilePicker* filepicker) bool LLObjectBackup::validatePerms(const LLPermissions *item_permissions) { - if (gHippoGridManager->getConnectedGrid()->getPlatform() == HippoGridInfo::PLATFORM_SECONDLIFE) + if (gHippoGridManager->getConnectedGrid()->isSecondLife()) { // In Second Life, you must be the creator to be permitted to export the asset. return (gAgent.getID() == item_permissions->getOwner() && @@ -390,12 +420,21 @@ bool LLObjectBackup::validatePerms(const LLPermissions *item_permissions) // the textures in the Library), whoever is the actual creator... Go figure ! LLUUID LLObjectBackup::validateTextureID(LLUUID asset_id) { - if (gHippoGridManager->getConnectedGrid()->getPlatform() != HippoGridInfo::PLATFORM_SECONDLIFE) + if (!gHippoGridManager->getConnectedGrid()->isSecondLife()) { // If we are not in Second Life, don't bother. return asset_id; } - LLUUID texture = LLUUID(gSavedSettings.getString("DefaultObjectTexture")); + LLUUID texture = LL_TEXTURE_PLYWOOD; + if (asset_id == texture || + asset_id == LL_TEXTURE_BLANK || + asset_id == LL_TEXTURE_INVISIBLE || + asset_id == LL_TEXTURE_TRANSPARENT || + asset_id == LL_TEXTURE_MEDIA) + { + // Allow to export a few default SL textures. + return asset_id; + } LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLAssetIDMatches asset_id_matches(asset_id); @@ -434,7 +473,6 @@ void LLObjectBackup::exportWorker(void *userdata) case EXPORT_INIT: { LLObjectBackup::getInstance()->show(true); - LLSelectMgr::getInstance()->getSelection()->ref(); struct ff : public LLSelectedNodeFunctor { virtual bool apply(LLSelectNode* node) @@ -449,7 +487,7 @@ void LLObjectBackup::exportWorker(void *userdata) } else { - llwarns << "Incorrect permission to export" << llendl; + LL_WARNS("ObjectBackup") << "Incorrect permission to export" << LL_ENDL; LLObjectBackup::getInstance()->mExportState = EXPORT_FAILED; LLSelectMgr::getInstance()->getSelection()->unref(); } @@ -462,13 +500,22 @@ void LLObjectBackup::exportWorker(void *userdata) { virtual bool apply(LLViewerObject* object) { + bool is_attachment = object->isAttachment(); object->boostTexturePriority(TRUE); LLViewerObject::child_list_t children = object->getChildren(); children.push_front(object); //push root onto list - LLSD prim_llsd = LLObjectBackup::getInstance()->primsToLLSD(children); + LLSD prim_llsd = LLObjectBackup::getInstance()->primsToLLSD(children, is_attachment); LLSD stuff; - stuff["root_position"] = object->getPosition().getValue(); - stuff["root_rotation"] = ll_sd_from_quaternion(object->getRotation()); + if (is_attachment) + { + stuff["root_position"] = object->getPositionEdit().getValue(); + stuff["root_rotation"] = ll_sd_from_quaternion(object->getRotationEdit()); + } + else + { + stuff["root_position"] = object->getPosition().getValue(); + stuff["root_rotation"] = ll_sd_from_quaternion(object->getRotation()); + } stuff["group_body"] = prim_llsd; LLObjectBackup::getInstance()->mLLSD["data"].append(stuff); return true; @@ -512,12 +559,12 @@ void LLObjectBackup::exportWorker(void *userdata) gIdleCallbacks.deleteFunction(exportWorker); if (LLObjectBackup::getInstance()->mNonExportedTextures == LLObjectBackup::TEXTURE_OK) { - llinfos << "Export successful and complete." << llendl; + LL_INFOS("ObjectBackup") << "Export successful and complete." << LL_ENDL; LLNotifications::instance().add("ExportSuccessful"); } else { - llinfos << "Export successful but incomplete: some texture(s) not saved." << llendl; + LL_INFOS("ObjectBackup") << "Export successful but incomplete: some texture(s) not saved." << LL_ENDL; std::string reason; if (LLObjectBackup::getInstance()->mNonExportedTextures & LLObjectBackup::TEXTURE_BAD_PERM) { @@ -525,7 +572,7 @@ void LLObjectBackup::exportWorker(void *userdata) } if (LLObjectBackup::getInstance()->mNonExportedTextures & LLObjectBackup::TEXTURE_MISSING) { - reason += "\nMissing texture."; + reason += "\nMissing texture (retrying after full rezzing might work)."; } if (LLObjectBackup::getInstance()->mNonExportedTextures & LLObjectBackup::TEXTURE_BAD_ENCODING) { @@ -548,14 +595,14 @@ void LLObjectBackup::exportWorker(void *userdata) case EXPORT_FAILED: gIdleCallbacks.deleteFunction(exportWorker); - llwarns << "Export process aborted." << llendl; + LL_WARNS("ObjectBackup") << "Export process aborted." << LL_ENDL; LLNotifications::instance().add("ExportFailed"); LLObjectBackup::getInstance()->close(); break; } } -LLSD LLObjectBackup::primsToLLSD(LLViewerObject::child_list_t child_list) +LLSD LLObjectBackup::primsToLLSD(LLViewerObject::child_list_t child_list, bool is_attachment) { LLViewerObject* object; LLSD llsd; @@ -566,7 +613,7 @@ LLSD LLObjectBackup::primsToLLSD(LLViewerObject::child_list_t child_list) object = (*i); LLUUID id = object->getID(); - llinfos << "Exporting prim " << object->getID().asString() << llendl; + LL_INFOS("ObjectBackup") << "Exporting prim " << object->getID().asString() << LL_ENDL; // Create an LLSD object that represents this prim. It will be injected in to the overall LLSD // tree structure @@ -588,9 +635,17 @@ LLSD LLObjectBackup::primsToLLSD(LLViewerObject::child_list_t child_list) } // Transforms - prim_llsd["position"] = object->getPosition().getValue(); + if (is_attachment) + { + prim_llsd["position"] = object->getPositionEdit().getValue(); + prim_llsd["rotation"] = ll_sd_from_quaternion(object->getRotationEdit()); + } + else + { + prim_llsd["position"] = object->getPosition().getValue(); + prim_llsd["rotation"] = ll_sd_from_quaternion(object->getRotation()); + } prim_llsd["scale"] = object->getScale().getValue(); - prim_llsd["rotation"] = ll_sd_from_quaternion(object->getRotation()); // Flags prim_llsd["shadows"] = object->flagCastShadows(); @@ -632,13 +687,13 @@ LLSD LLObjectBackup::primsToLLSD(LLViewerObject::child_list_t child_list) } if (alreadyseen == false) { - llinfos << "Found a sculpt texture, adding to list " << sculpt_texture << llendl; + LL_INFOS("ObjectBackup") << "Found a sculpt texture, adding to list " << sculpt_texture << LL_ENDL; mTexturesList.push_back(sculpt_texture); } } else { - llwarns << "Incorrect permission to export a sculpt texture." << llendl; + LL_WARNS("ObjectBackup") << "Incorrect permission to export a sculpt texture." << LL_ENDL; LLObjectBackup::getInstance()->mExportState = EXPORT_FAILED; } } @@ -655,14 +710,22 @@ LLSD LLObjectBackup::primsToLLSD(LLViewerObject::child_list_t child_list) this_te_llsd = object->getTE(i)->asLLSD(); this_te_llsd["imageid"] = t_id; te_llsd.append(this_te_llsd); - std::list::iterator iter; - for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) - { - if ((*iter) == t_id) - alreadyseen = true; + // Do not export Linden textures even though they don't taint creation. + if (t_id != LL_TEXTURE_PLYWOOD && + t_id != LL_TEXTURE_BLANK && + t_id != LL_TEXTURE_TRANSPARENT && + t_id != LL_TEXTURE_INVISIBLE && + t_id != LL_TEXTURE_MEDIA) + { + std::list::iterator iter; + for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) + { + if ((*iter) == t_id) + alreadyseen = true; + } + if (alreadyseen == false) + mTexturesList.push_back(t_id); } - if (alreadyseen == false) - mTexturesList.push_back(t_id); } prim_llsd["textures"] = te_llsd; @@ -679,7 +742,7 @@ void LLObjectBackup::exportNextTexture() { if (mTexturesList.empty()) { - llinfos << "Finished exporting textures." << llendl; + LL_INFOS("ObjectBackup") << "Finished exporting textures." << LL_ENDL; return; } @@ -687,7 +750,7 @@ void LLObjectBackup::exportNextTexture() std::list::iterator iter; iter = mTexturesList.begin(); - while (1) + while (true) { if (iter == mTexturesList.end()) { @@ -696,6 +759,13 @@ void LLObjectBackup::exportNextTexture() } id = (*iter); + if (id.isNull()) + { + // NULL texture id: just remove and ignore. + mTexturesList.remove(id); + iter = mTexturesList.begin(); + continue; + } LLViewerTexture* imagep = LLViewerTextureManager::findTexture(id); if (imagep != NULL) @@ -716,15 +786,17 @@ void LLObjectBackup::exportNextTexture() } else { - llwarns << "We *DON'T* have the texture " << llendl; + LL_WARNS("ObjectBackup") << "We *DON'T* have the texture " << id.asString() << LL_ENDL; mNonExportedTextures |= TEXTURE_MISSING; + mTexturesList.remove(id); + return; } iter++; } mTexturesList.remove(id); - llinfos << "Requesting texture " << id << llendl; + LL_INFOS("ObjectBackup") << "Requesting texture " << id << LL_ENDL; LLImageJ2C* mFormattedImage = new LLImageJ2C; CacheReadResponder* responder = new CacheReadResponder(id, mFormattedImage); LLAppViewer::getTextureCache()->readFromCache(id, LLWorkerThread::PRIORITY_HIGH, 0, 999999, responder); @@ -735,27 +807,33 @@ void LLObjectBackup::importObject(bool upload) mTexturesList.clear(); mAssetMap.clear(); mCurrentAsset = LLUUID::null; - + + setDefaultTextures(); + mRetexture = upload; - + // Open the file open dialog - AIFilePicker* filepicker = AIFilePicker::create(); + AIFilePicker* filepicker = new AIFilePicker; filepicker->open(FFLOAD_XML, "", "import"); filepicker->run(boost::bind(&LLObjectBackup::importObject_continued, this, filepicker)); - + return; } void LLObjectBackup::importObject_continued(AIFilePicker* filepicker) { if (!filepicker->hasFilename()) + { + // User canceled save. return; - - std::string file_name = filepicker->getFilename(); + } + + std::string file_name = filepicker->getFilename(); mFolder = gDirUtilp->getDirName(file_name); llifstream import_file(file_name); LLSDSerialize::fromXML(mLLSD, import_file); import_file.close(); + show(false); mAgentPos = gAgent.getPositionAgent(); mAgentRot = LLQuaternion(gAgent.getAtAxis(), gAgent.getLeftAxis(), gAgent.getUpAxis()); @@ -770,17 +848,6 @@ void LLObjectBackup::importObject_continued(AIFilePicker* filepicker) mObjects = mLLSD["data"].size(); mPrims = 0; mRezCount = 0; - - if (mObjects <= 0) { - LLSD args; - args["MESSAGE"] = std::string("Object import failed.\nThe XML file has an incompatible format or does not contain any objects."); - LLNotifications::instance().add("GenericAlert", args); - llwarns << "Trying to import illegal XML object file." << llendl; - return; - } - - show(false); - updateImportNumbers(); for (prim_arr_it = mLLSD["data"].beginArray(); prim_arr_it != mLLSD["data"].endArray(); prim_arr_it++) @@ -806,7 +873,7 @@ void LLObjectBackup::importObject_continued(AIFilePicker* filepicker) } if (alreadyseen == false) { - llinfos << "Found a new SCULPT texture to upload " << orig << llendl; + LL_INFOS("ObjectBackup") << "Found a new SCULPT texture to upload " << orig << LL_ENDL; mTexturesList.push_back(orig); } } @@ -819,18 +886,21 @@ void LLObjectBackup::importObject_continued(AIFilePicker* filepicker) LLTextureEntry te; te.fromLLSD(the_te); - te.getID(); - bool alreadyseen = false; + LLUUID id = te.getID(); + if (id != LL_TEXTURE_PLYWOOD && id != LL_TEXTURE_BLANK && id != LL_TEXTURE_INVISIBLE) // Do not upload the default textures + { + bool alreadyseen = false; - for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) - { - if ((*iter) == te.getID()) - alreadyseen = true; - } - if (alreadyseen == false) - { - llinfos << "Found a new texture to upload "<< te.getID() << llendl; - mTexturesList.push_back(te.getID()); + for (iter = mTexturesList.begin(); iter != mTexturesList.end(); iter++) + { + if ((*iter) == te.getID()) + alreadyseen = true; + } + if (alreadyseen == false) + { + LL_INFOS("ObjectBackup") << "Found a new texture to upload "<< te.getID() << LL_ENDL; + mTexturesList.push_back(te.getID()); + } } } } @@ -970,7 +1040,7 @@ void LLObjectBackup::xmlToPrim(LLSD prim_llsd, LLViewerObject* object) } // Textures - llinfos << "Processing textures for prim" << llendl; + LL_INFOS("ObjectBackup") << "Processing textures for prim" << LL_ENDL; LLSD te_llsd = prim_llsd["textures"]; LLSD::array_iterator text_it; U8 i = 0; @@ -990,7 +1060,7 @@ void LLObjectBackup::xmlToPrim(LLSD prim_llsd, LLViewerObject* object) object->setTE(i++, te); } - llinfos << "Textures done !" << llendl; + LL_INFOS("ObjectBackup") << "Textures done !" << LL_ENDL; //bump the iterator now so the callbacks hook together nicely //if (mPrimImportIter != mThisGroup.endMap()) @@ -1023,7 +1093,7 @@ void LLObjectBackup::primUpdate(LLViewerObject* object) if (mPrimImportIter == mThisGroup.endMap()) { - llinfos << "Trying to link" << llendl; + LL_INFOS("ObjectBackup") << "Trying to link" << LL_ENDL; if (mToSelect.size() > 1) { @@ -1053,7 +1123,7 @@ void LLObjectBackup::primUpdate(LLViewerObject* object) if (mToSelect.empty()) { - llwarns << "error: ran out of objects to mod." << llendl; + LL_WARNS("ObjectBackup") << "error: ran out of objects to mod." << LL_ENDL; return; } @@ -1085,7 +1155,7 @@ bool LLObjectBackup::newPrim(LLViewerObject* pobject) } else { - llinfos << "All prims rezzed, moving to build stage" << llendl; + LL_INFOS("ObjectBackup") << "All prims rezzed, moving to build stage" << LL_ENDL; // Deselecting is required to ensure that the first child prim // in the link set (which is also the last rezzed prim and thus // currently selected) will be properly renamed and desced. @@ -1104,7 +1174,7 @@ void LLObjectBackup::updateMap(LLUUID uploaded_asset) if (mCurrentAsset.isNull()) return; - llinfos << "Mapping " << mCurrentAsset << " to " << uploaded_asset << llendl; + LL_INFOS("ObjectBackup") << "Mapping " << mCurrentAsset << " to " << uploaded_asset << LL_ENDL; mAssetMap.insert(std::pair(mCurrentAsset, uploaded_asset)); } @@ -1140,13 +1210,13 @@ void myupload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ std::ostringstream llsdxml; LLSDSerialize::toXML(body, llsdxml); - lldebugs << "posting body to capability: " << llsdxml.str() << llendl; + LL_DEBUGS("ObjectBackup") << "posting body to capability: " << llsdxml.str() << LL_ENDL; //LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type)); LLHTTPClient::post(url, body, new importResponder(body, uuid, asset_type)); } else { - llinfos << "NewAgentInventory capability not found. Can't upload !" << llendl; + LL_INFOS("ObjectBackup") << "NewAgentInventory capability not found. Can't upload !" << LL_ENDL; } } @@ -1154,7 +1224,7 @@ void LLObjectBackup::uploadNextAsset() { if (mTexturesList.empty()) { - llinfos << "Texture list is empty, moving to rez stage." << llendl; + LL_INFOS("ObjectBackup") << "Texture list is empty, moving to rez stage." << LL_ENDL; mCurrentAsset = LLUUID::null; importFirstObject(); return; @@ -1167,7 +1237,7 @@ void LLObjectBackup::uploadNextAsset() LLUUID id = *iter; mTexturesList.pop_front(); - llinfos << "Got texture ID " << id << ": trying to upload" << llendl; + LL_INFOS("ObjectBackup") << "Got texture ID " << id << ": trying to upload" << LL_ENDL; mCurrentAsset = id; std::string struid; @@ -1182,7 +1252,7 @@ void LLObjectBackup::uploadNextAsset() S32 file_size; LLAPRFile outfile; - outfile.open(filename, LL_APR_RB, LLAPRFile::global, &file_size); + outfile.open(filename, LL_APR_RB, LLAPRFile::local, &file_size); if (outfile.getFileHandle()) { const S32 buf_size = 65536; @@ -1197,7 +1267,7 @@ void LLObjectBackup::uploadNextAsset() } else { - llwarns << "Unable to access output file " << filename << llendl; + LL_WARNS("ObjectBackup") << "Unable to access output file " << filename << LL_ENDL; uploadNextAsset(); return; } diff --git a/indra/newview/llviewerobjectbackup.h b/indra/newview/llviewerobjectbackup.h index 5ae33c382..8fa577dfe 100644 --- a/indra/newview/llviewerobjectbackup.h +++ b/indra/newview/llviewerobjectbackup.h @@ -107,7 +107,7 @@ private: LLUUID validateTextureID(LLUUID asset_id); // Convert a selection list of objects to LLSD - LLSD primsToLLSD(LLViewerObject::child_list_t child_list); + LLSD primsToLLSD(LLViewerObject::child_list_t child_list, bool is_attachment); // Start the import process void importFirstObject(); @@ -176,3 +176,4 @@ private: LLVector3 mAgentPos; LLQuaternion mAgentRot; }; + diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index c2cb0c5a4..c5b973af5 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1091,8 +1091,12 @@ LLPointer LLViewerTextureList::convertToUploadFile(LLPointer 1500) ? 64 : MIN_VIDEO_RAM_IN_MEGA_BYTES ; + if (system_ram > 2000) + return 128; + else if (system_ram > 1000) + return 64; + else + return MIN_VIDEO_RAM_IN_MEGA_BYTES; } //static diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 8fe85caa4..0ebb74e00 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4502,7 +4502,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei //rescale fonts initFonts(scale_factor); LLHUDText::reshape(); - } + } } S32 output_buffer_offset_y = 0; @@ -4665,7 +4665,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei gPipeline.resetDrawOrders(); } - if (high_res) + if (high_res && (show_ui || !hide_hud)) { send_agent_resume(); } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index ccf294730..6af2875a7 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3670,9 +3670,10 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) } // check attachments for nameplate override + static const LLCachedControl allow_nameplate_override ("CCSAllowNameplateOverride", true); std::string nameplate; attachment_map_t::iterator it, end=mAttachmentPoints.end(); - for (it=mAttachmentPoints.begin(); it!=end; ++it) { + if (allow_nameplate_override) for (it=mAttachmentPoints.begin(); it!=end; ++it) { // get attached object LLViewerJointAttachment *atm = it->second; if (!atm) continue; @@ -8736,6 +8737,22 @@ void LLVOAvatar::setCompositeUpdatesEnabled( BOOL b ) } } +void LLVOAvatar::setNameFromChat(const std::string &text) { + static const LLCachedControl allow_nameplate_override ("CCSAllowNameplateOverride", true); + if(allow_nameplate_override) { + mNameFromChatOverride = true; + mNameFromChatChanged = true; + mNameFromChatText = text; + } +} + +void LLVOAvatar::clearNameFromChat() { + mNameFromChatOverride = false; + mNameFromChatChanged = true; + mNameFromChatText = ""; +} + + void LLVOAvatar::addChat(const LLChat& chat) { std::deque::iterator chat_iter; diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 92e240ac8..ad3c2f641 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -598,8 +598,8 @@ public: void setCompositeUpdatesEnabled(BOOL b); - void setNameFromChat(const std::string &text) { mNameFromChatOverride = mNameFromChatChanged = true; mNameFromChatText = text; } - void clearNameFromChat() { mNameFromChatOverride = false; mNameFromChatChanged = true; mNameFromChatText = ""; } + void setNameFromChat(const std::string &text); + void clearNameFromChat(); public: diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 5ae0c27ba..1847e3ff4 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -543,24 +543,29 @@ void LLVOVolume::updateTextureVirtualSize() vsize = face->getTextureVirtualSize(); if (isAttachment()) { - // Rez attachments faster and at full details ! if (permYouOwner()) { - // Our attachments must really rez fast and fully: - // we shouldn't have to zoom on them to get the textures - // fully loaded ! - imagep->setBoostLevel(LLViewerTexture::BOOST_HUD); - imagep->dontDiscard(); + imagep->setBoostLevel(LLViewerTexture::BOOST_HIGH); } } } mPixelArea = llmax(mPixelArea, face->getPixelArea()); - + if (face->mTextureMatrix != NULL) { + // Animating textures also rez badly in Snowglobe because the + // actual displayed area is only a fraction (corresponding to one + // frame) of the animating texture. Let's fix that here: + if (mTextureAnimp && mTextureAnimp->mScaleS > 0.0f && mTextureAnimp->mScaleT > 0.0f) + { + // Adjust to take into account the actual frame size which is only a + // portion of the animating texture + vsize = vsize / mTextureAnimp->mScaleS / mTextureAnimp->mScaleT; + } + if ((vsize < MIN_TEX_ANIM_SIZE && old_size > MIN_TEX_ANIM_SIZE) || - (vsize > MIN_TEX_ANIM_SIZE && old_size < MIN_TEX_ANIM_SIZE)) + (vsize > MIN_TEX_ANIM_SIZE && old_size < MIN_TEX_ANIM_SIZE)) { gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_TCOORD, FALSE); } diff --git a/indra/newview/rlvfloaterbehaviour.cpp b/indra/newview/rlvfloaterbehaviour.cpp index 808f35408..c8f33f5e0 100644 --- a/indra/newview/rlvfloaterbehaviour.cpp +++ b/indra/newview/rlvfloaterbehaviour.cpp @@ -165,7 +165,7 @@ void RlvFloaterBehaviour::changed(const RlvCommand& /*rlvCmd*/, bool /*fInternal void RlvFloaterBehaviour::onAvatarNameLookup(const LLUUID& uuid) { - std::map::const_iterator itLookup = m_PendingLookup.find(uuid); + std::map::iterator itLookup = m_PendingLookup.find(uuid); if (itLookup != m_PendingLookup.end()) { itLookup->second.disconnect(); diff --git a/indra/newview/skins/default/xui/en-us/floater_instant_message.xml b/indra/newview/skins/default/xui/en-us/floater_instant_message.xml index 5e7b76f95..7c25a964f 100644 --- a/indra/newview/skins/default/xui/en-us/floater_instant_message.xml +++ b/indra/newview/skins/default/xui/en-us/floater_instant_message.xml @@ -39,8 +39,8 @@