diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index f7c0a471a..af41d373a 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) @@ -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/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/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp index cef016e0c..fec8af6fe 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/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index dc4aeef4a..ef5719c02 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9,6 +9,52 @@ 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 + S32 + Value + 30 + + HTTPMaxRequests + + Comment + Maximum number of simultaneous HTTP requests in progress. + Persist + 1 + Type + S32 + Value + 32 + + HTTPMinRequests + + Comment + Attempt to maintain at least this many HTTP requests in progress by ignoring bandwidth + Persist + 1 + Type + S32 + Value + 2 + + AllowLargeSounds Comment diff --git a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl index 25d65b571..dd1c8ee64 100644 --- a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl @@ -32,7 +32,7 @@ vec4 applyWaterFog(vec4 color) float depth = length(getPositionEye() - int_v); //get "thickness" of water - float l = max(depth, 0.1); + float l = min(max(depth, 0.1),50.0); float kd = waterFogDensity; float ks = waterFogKS; diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index d448368ea..926df8895 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; @@ -2199,7 +2191,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(); @@ -2637,9 +2630,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] ); @@ -2716,9 +2709,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/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index cd74d3d73..967d56b9d 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); + S32 max_connections = max_connections_per_second/THROTTLE_TIMESTEPS_PER_SECOND; + const S32 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/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/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 45c64a4ef..90cff3cdc 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2863,15 +2863,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/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 0ce93e3cc..5eb4096de 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3095,7 +3095,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()); @@ -3429,8 +3429,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); @@ -3759,10 +3760,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 0ec25719e..f131f07dc 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/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index fd1e82d1d..9319db137 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1163,7 +1163,7 @@ void LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinary // AND the CRC matches. JC LLDataPacker *LLViewerRegion::getDP(U32 local_id, U32 crc) { - llassert(mCacheLoaded); + //llassert(mCacheLoaded); unnecessary and annoyijng, davep agrees LLVOCacheEntry* entry = get_if_there(mCacheMap, local_id, (LLVOCacheEntry*)NULL); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 89e316e59..13f3c8f46 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1094,8 +1094,12 @@ const S32 MAX_VIDEO_RAM = 512; // 512MB max for performance reasons. S32 LLViewerTextureList::getMinVideoRamSetting() { S32 system_ram = (S32)BYTES_TO_MEGA_BYTES(gSysMemory.getPhysicalMemoryClamped()); - //min texture mem sets to 64M if total physical mem is more than 1.5GB - return (system_ram > 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/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 0623d51e9..f219fe860 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3523,9 +3523,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; @@ -8417,6 +8418,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 b50111e40..95d774dc3 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -559,8 +559,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/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 6028f4d80..bf8956960 100644 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -298,6 +298,11 @@ void LLWaterParamManager::update(LLViewerCamera * cam) mWaterPlane = LLVector4(enorm.v[0], enorm.v[1], enorm.v[2], -ep.dot(enorm)); + if((mWaterPlane.mV[3] >= 0.f) == LLViewerCamera::getInstance()->cameraUnderWater()) //Sign borkage.. + { + mWaterPlane.scaleVec(LLVector4(-1.f,-1.f,-1.f,-1.f)); + } + LLVector3 sunMoonDir; if (gSky.getSunDirection().mV[2] > LLSky::NIGHTTIME_ELEVATION_COS) { 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 @@