diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake index df9b5b18e..a2d9245ff 100644 --- a/indra/cmake/FMOD.cmake +++ b/indra/cmake/FMOD.cmake @@ -7,26 +7,13 @@ if(INSTALL_PROPRIETARY) use_prebuilt_binary(fmod) endif(INSTALL_PROPRIETARY) -find_library(FMOD_LIBRARY_RELEASE +find_library(FMOD_LIBRARY NAMES fmod fmodvc fmod-3.75 PATHS - ${ARCH_PREBUILT_DIRS_RELEASE} + optimized ${ARCH_PREBUILT_DIRS_RELEASE} + debug ${ARCH_PREBUILT_DIRS_DEBUG} ) -find_library(FMOD_LIBRARY_DEBUG - NAMES fmod fmodvc fmod-3.75 - PATHS - ${ARCH_PREBUILT_DIRS_DEBUG} - ) - -if (FMOD_LIBRARY_RELEASE AND FMOD_LIBRARY_DEBUG) - set(FMOD_LIBRARY - debug ${FMOD_LIBRARY_DEBUG} - optimized ${FMOD_LIBRARY_RELEASE}) -elseif (FMOD_LIBRARY_RELEASE) - set(FMOD_LIBRARY ${FMOD_LIBRARY_RELEASE}) -endif (FMOD_LIBRARY_RELEASE AND FMOD_LIBRARY_DEBUG) - if (NOT FMOD_LIBRARY) set(FMOD_SDK_DIR CACHE PATH "Path to the FMOD SDK.") if (FMOD_SDK_DIR) diff --git a/indra/cmake/FMODEX.cmake b/indra/cmake/FMODEX.cmake index 934b74b24..bf74341fe 100644 --- a/indra/cmake/FMODEX.cmake +++ b/indra/cmake/FMODEX.cmake @@ -7,26 +7,13 @@ if(INSTALL_PROPRIETARY) use_prebuilt_binary(fmodex) endif(INSTALL_PROPRIETARY) -find_library(FMODEX_LIBRARY_RELEASE +find_library(FMODEX_LIBRARY NAMES fmodex fmodex_vc fmodexL_vc PATHS - ${ARCH_PREBUILT_DIRS_RELEASE} + optimized ${ARCH_PREBUILT_DIRS_RELEASE} + debug ${ARCH_PREBUILT_DIRS_DEBUG} ) -find_library(FMODEX_LIBRARY_DEBUG - NAMES fmodex fmodex_vc fmodexL_vc - PATHS - ${ARCH_PREBUILT_DIRS_DEBUG} - ) - -if (FMODEX_LIBRARY_RELEASE AND FMODEX_LIBRARY_DEBUG) - set(FMODEX_LIBRARY - debug ${FMODEX_LIBRARY_DEBUG} - optimized ${FMODEX_LIBRARY_RELEASE}) -elseif (FMODEX_LIBRARY_RELEASE) - set(FMODEX_LIBRARY ${FMODEX_LIBRARY_RELEASE}) -endif (FMODEX_LIBRARY_RELEASE AND FMODEX_LIBRARY_DEBUG) - if (NOT FMODEX_LIBRARY) set(FMODEX_SDK_DIR CACHE PATH "Path to the FMOD Ex SDK.") if (FMODEX_SDK_DIR) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a6ab1be32..2a902697a 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1353,12 +1353,16 @@ if (FMOD OR FMODEX) if (NOT WINDOWS) set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp) add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES}) - if(FMODEX) - set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY}) - endif(FMODEX) - if(FMOD) - set(fmodwrapper_needed_LIBRARIES "${fmodwrapper_needed_LIBRARIES} ${FMOD_LIBRARY}") - endif(FMOD) + if(FMOD AND FMODEX) + set(fmodwrapper_needed_LIBRARIES "${FMODEX_LIBRARY} ${FMOD_LIBRARY}") + else(FMOD AND FMODEX) + if(FMODEX) + set(fmodwrapper_needed_LIBRARIES ${FMODEX_LIBRARY}) + endif(FMODEX) + if(FMOD) + set(fmodwrapper_needed_LIBRARIES "${FMOD_LIBRARY}") + endif(FMOD) + endif(FMOD AND FMODEX) if (DARWIN) list(APPEND fmodwrapper_needed_LIBRARIES ${CARBON_LIBRARY}) set_target_properties( diff --git a/indra/newview/llfloaterblacklist.cpp b/indra/newview/llfloaterblacklist.cpp index 07c0a94cb..dd3443019 100644 --- a/indra/newview/llfloaterblacklist.cpp +++ b/indra/newview/llfloaterblacklist.cpp @@ -11,12 +11,14 @@ #include "llviewerwindow.h" #include "llwindow.h" #include "llviewercontrol.h" +#include "llviewerobjectlist.h" #include "lldate.h" #include "llagent.h" LLFloaterBlacklist* LLFloaterBlacklist::sInstance; std::vector LLFloaterBlacklist::blacklist_textures; +std::vector LLFloaterBlacklist::blacklist_objects; std::map LLFloaterBlacklist::blacklist_entries; @@ -49,11 +51,13 @@ BOOL LLFloaterBlacklist::postBuild() childSetAction("remove_btn", onClickRemove, this); childSetAction("save_btn", onClickSave, this); childSetAction("load_btn", onClickLoad, this); + childSetAction("rerender_btn", onClickRerender, this); childSetVisible("copy_uuid_btn",false); LLComboBox* box = getChild("asset_combo"); box->add("Texture",LLSD(0)); box->add("Sound",LLSD(1)); box->add("Animation",LLSD(20)); + box->add("Object",LLSD(6)); refresh(); return TRUE; } @@ -64,6 +68,7 @@ void LLFloaterBlacklist::refresh() list->clearRows(); for(std::map::iterator iter = blacklist_entries.begin(); iter != blacklist_entries.end(); ++iter) { + if(iter->first.isNull()) continue; LLSD element; std::string agent; gCacheName->getFullName(LLUUID(iter->second["entry_agent"].asString()), agent); @@ -121,10 +126,14 @@ void LLFloaterBlacklist::addEntry(LLUUID key, LLSD data) { if(key.notNull()) { - if(!data.has("entry_type")) + if(!data.has("entry_type")) + { LL_WARNS("FloaterBlacklistAdd") << "addEntry called with no entry type, specify LLAssetType::Etype" << LL_ENDL; + } else if(!data.has("entry_name")) + { LL_WARNS("FloaterBlacklistAdd") << "addEntry called with no entry name, specify the name that should appear in the listing for this entry." << LL_ENDL; + } else { if(!data.has("entry_date")) @@ -137,20 +146,22 @@ void LLFloaterBlacklist::addEntry(LLUUID key, LLSD data) } if(data["entry_type"].asString() == "1") { - //remove sounds - LLUUID sound_id=LLUUID(key); - gVFS->removeFile(sound_id,LLAssetType::AT_SOUND); - std::string wav_path= gDirUtilp->getExpandedFilename(LL_PATH_CACHE,sound_id.asString()) + ".dsf"; - if(LLAPRFile::isExist(wav_path, LL_APR_RPB)) - LLAPRFile::remove(wav_path); - gAudiop->removeAudioData(sound_id); + //remove sounds + LLUUID sound_id=LLUUID(key); + gVFS->removeFile(sound_id,LLAssetType::AT_SOUND); + std::string wav_path= gDirUtilp->getExpandedFilename(LL_PATH_CACHE,sound_id.asString()) + ".dsf"; + if(LLAPRFile::isExist(wav_path, LL_APR_RPB)) + LLAPRFile::remove(wav_path); + gAudiop->removeAudioData(sound_id); } blacklist_entries.insert(std::pair(key,data)); updateBlacklists(); } } else + { LL_WARNS("FloaterBlacklistAdd") << "addEntry called with a null entry key, please specify LLUUID of asset." << LL_ENDL; + } } // static @@ -173,19 +184,19 @@ void LLFloaterBlacklist::onClickRemove(void* user_data) LLScrollListCtrl* list = floaterp->getChild("file_list"); if(list->getFirstSelected()) { - LLScrollListItem* item = list->getFirstSelected(); - LLUUID selected_id(item->getColumn(0)->getValue().asUUID()); - if(selected_id.isNull()) return; - list->deleteSingleItem(list->getFirstSelectedIndex()); - blacklist_entries.erase(selected_id); - updateBlacklists(); - + LLScrollListItem* item = list->getFirstSelected(); + LLUUID selected_id = item->getColumn(0)->getValue().asUUID(); + if(selected_id.isNull()) return; + list->deleteSingleItem(list->getFirstSelectedIndex()); + blacklist_entries.erase(selected_id); + updateBlacklists(); + } } // static void LLFloaterBlacklist::loadFromSave() { - std::string file_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "floater_blist_settings.xml"); + std::string file_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "blacklist_sg1.xml"); llifstream xml_file(file_name); if(!xml_file.is_open()) return; LLSD data; @@ -206,6 +217,7 @@ void LLFloaterBlacklist::updateBlacklists() if(gAssetStorage) { blacklist_textures.clear(); + blacklist_objects.clear(); gAssetStorage->mBlackListedAsset.clear(); for(std::map::iterator iter = blacklist_entries.begin(); iter != blacklist_entries.end(); ++iter) { @@ -217,6 +229,12 @@ void LLFloaterBlacklist::updateBlacklists() { gAssetStorage->mBlackListedAsset.push_back(LLUUID(iter->first)); } + + if(blacklist_entries[iter->first]["entry_type"].asString() == "6") + { + blacklist_objects.push_back(LLUUID(iter->first)); + } + } saveToDisk(); LLFloaterBlacklist* instance = LLFloaterBlacklist::getInstance(); @@ -228,7 +246,7 @@ void LLFloaterBlacklist::updateBlacklists() //static void LLFloaterBlacklist::saveToDisk() { - std::string file_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "floater_blist_settings.xml"); + std::string file_name = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "blacklist_sg1.xml"); llofstream export_file(file_name); LLSD data; for(std::map::iterator iter = blacklist_entries.begin(); iter != blacklist_entries.end(); ++iter) @@ -259,7 +277,7 @@ void LLFloaterBlacklist::onClickSave_continued(AIFilePicker* filepicker) { data[iter->first.asString()] = iter->second; } - LLSDSerialize::toPrettyXML(data, export_file); + LLSDSerialize::toPrettyXML(data, export_file); export_file.close(); } } @@ -291,4 +309,25 @@ void LLFloaterBlacklist::onClickLoad_continued(AIFilePicker* filepicker) xml_file.close(); } } + + +void LLFloaterBlacklist::onClickRerender(void* user_data) +{ + std::map blacklist_new; + for(std::map::iterator itr = blacklist_entries.begin(); itr != blacklist_entries.end(); ++itr) + { + if(blacklist_entries[itr->first]["entry_type"].asString() == "6") continue; + blacklist_new[itr->first] = blacklist_entries[itr->first]; + blacklist_new[itr->second] = blacklist_entries[itr->second]; + } + blacklist_entries = blacklist_new; + saveToDisk(); + LLFloaterBlacklist* instance = LLFloaterBlacklist::getInstance(); + if(instance) + { + instance->refresh(); + } + +} + // diff --git a/indra/newview/llfloaterblacklist.h b/indra/newview/llfloaterblacklist.h index c718fd71d..6851e1a1e 100644 --- a/indra/newview/llfloaterblacklist.h +++ b/indra/newview/llfloaterblacklist.h @@ -32,6 +32,7 @@ public: static std::map blacklist_entries; static std::vector blacklist_textures; + static std::vector blacklist_objects; static void loadFromSave(); @@ -48,6 +49,7 @@ private: static void onClickSave_continued(AIFilePicker* filepicker); static void onClickLoad(void* user_data); static void onClickLoad_continued(AIFilePicker* filepicker); + static void onClickRerender(void* user_data); static void onClickCopyUUID(void* user_data); static void onClickRemove(void* user_data); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 9681d8dc2..2aee848f0 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2265,25 +2265,78 @@ class LLObjectDerender : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLViewerObject* slct = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); + LLViewerObject* slct = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); if(!slct)return true; + LLUUID id = slct->getID(); LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); LLUUID root_key; - LLSelectNode* node = selection->getFirstRootNode(); - if(node)root_key = node->getObject()->getID(); - if(root_key.notNull()) + //delivers null in linked parts if used as getFirstRootNode() + LLSelectNode* node = selection->getFirstRootNode(NULL,TRUE); + + /*this works for derendering entire object if child is selected + + LLSelectNode* node = selection->getFirstNode(); + //Delivers node even when linked parts, but only first node + + LLViewerObject* obj = node->getObject(); + LLViewerObject* parent = (LLViewerObject*)obj->getParent();*/ + + + if(node) { - id = root_key; - //LLSelectMgr::getInstance()->removeObjectFromSelections(root_key); + root_key = node->getObject()->getID(); + llinfos << "Derender node has key " << root_key << llendl; } - LLSelectMgr::getInstance()->removeObjectFromSelections(id); - - // ...don't kill the avatar - //if (!(id == gAgentID)) - // Kill 'em all - if (true) + else { + llinfos << "Derender node is null " << llendl; + } + + LLViewerRegion* cur_region = gAgent.getRegion(); + std::string entry_name; + if(slct->isAvatar()){ + LLNameValue* firstname = slct->getNVPair("FirstName"); + LLNameValue* lastname = slct->getNVPair("LastName"); + entry_name = llformat("Derendered: (AV) %s %s",firstname->getString(),lastname->getString()); + } + else{ + if(root_key.isNull()) + { + return true; + } + id = root_key; + if(!node->mName.empty()) + { + if(cur_region) + entry_name = llformat("Derendered: %s in region %s",node->mName.c_str(),cur_region->getName().c_str()); + else + entry_name = llformat("Derendered: %s",node->mName.c_str()); + } + else + { + if(cur_region) + entry_name = llformat("Derendered: (unkown object) in region %s",cur_region->getName().c_str()); + else + entry_name = "Derendered: (unkown object)"; + + } + } + + + + + LLSD indata; + indata["entry_type"] = 6; //AT_TEXTURE + indata["entry_name"] = entry_name; + indata["entry_agent"] = gAgent.getID(); + + + // ...don't kill the avatar + if (!(id == gAgentID)) + { + LLFloaterBlacklist::addEntry(id,indata); + LLSelectMgr::getInstance()->deselectAll(); LLViewerObject *objectp = gObjectList.findObject(id); if (objectp) { diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 3236c4717..2bcee1478 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -80,6 +80,7 @@ #include "object_flags.h" #include "llappviewer.h" +#include "llfloaterblacklist.h" #include "llviewerobjectbackup.h" @@ -528,6 +529,15 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, } #endif + + if(std::find(LLFloaterBlacklist::blacklist_objects.begin(), + LLFloaterBlacklist::blacklist_objects.end(),fullid) != LLFloaterBlacklist::blacklist_objects.end()) + { + llinfos << "Blacklisted object asset " << fullid.asString() << " blocked." << llendl; + continue; + } + + objectp = createObject(pcode, regionp, fullid, local_id, gMessageSystem->getSender()); if (!objectp) { diff --git a/indra/newview/skins/default/xui/en-us/floater_blacklist.xml b/indra/newview/skins/default/xui/en-us/floater_blacklist.xml index ec7fbf667..9d40085b1 100644 --- a/indra/newview/skins/default/xui/en-us/floater_blacklist.xml +++ b/indra/newview/skins/default/xui/en-us/floater_blacklist.xml @@ -10,13 +10,15 @@ - + +