Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm into linux-updates

master
Nicky 2021-02-27 23:45:22 +01:00
commit 1f550f2fd0
17 changed files with 82 additions and 56 deletions

View File

@ -1,9 +1,5 @@
First, make sure gcc-5.4 and g++-5.4 are installed.
Ensure you can build a stock viewer-development try as described in the SL wiki. Before asking for any help
compiling Firestorm, make sure you can build viewer-development first. If you try and skip this step, you may
receive much less help. http://wiki.secondlife.com/wiki/Compiling_the_viewer_(Linux)
If you want to use licensed FMOD or KDU build libraries (they are optional) you have to provision these yourself.
If you're licensing these with Phoenix/Firestorm, ask for the libraries for fmod and kdu. Put them into:
/opt/firestorm
@ -31,6 +27,9 @@ Other examples:
autobuild build -A64 -c ReleaseFS --no-configure -- --clean # Clean rebuild
autobuild build -A64 -c ReleaseFS -- --package # Complete a build and package it into a tarball
If you want to build with clang you can call autobuild like this:
CC=clang CXX=clang++ autobuild configure -A64 -c ReleaseFS
Any of the configure options can also be used (and do the same thing) with the build options.
Typical LL autobuild configure options should also work, as long as they don't duplicate configuration we are
already doing.

View File

@ -214,6 +214,10 @@ if (LINUX)
set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../lib' -Wl,--exclude-libs,ALL")
set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
if( NOT (CMAKE_CXX_COMPILER MATCHES ".*clang") )
set( CMAKE_CXX_FLAGS "-fabi-version=9 ${CMAKE_CXX_FLAGS}" )
endif()
endif (LINUX)

View File

@ -106,7 +106,7 @@ LLJoint *LLCharacter::getJoint( const std::string &name )
if (!joint)
{
LL_WARNS() << "Failed to find joint." << LL_ENDL;
LL_WARNS() << "Failed to find joint: " << name << LL_ENDL;
}
return joint;
}

View File

@ -241,10 +241,12 @@ void LLMotionController::purgeExcessMotions()
}
U32 loaded_count = mLoadedMotions.size();
if (loaded_count > (2 * MAX_MOTION_INSTANCES) && loaded_count > mLastCountAfterPurge)
{
LL_WARNS_ONCE("Animation") << loaded_count << " Loaded Motions. Amount of motions is over limit." << LL_ENDL;
}
// <FS:Ansariel> Can't do anything about it anyway - stop spamming the log
//if (loaded_count > (2 * MAX_MOTION_INSTANCES) && loaded_count > mLastCountAfterPurge)
//{
// LL_WARNS_ONCE("Animation") << loaded_count << " Loaded Motions. Amount of motions is over limit." << LL_ENDL;
//}
// </FS:Ansariel>
mLastCountAfterPurge = loaded_count;
}

View File

@ -134,6 +134,8 @@ public:
typedef std::vector<LLUUID> uuid_vec_t;
typedef std::set<LLUUID> uuid_set_t;
// <FS:Beq> cleanupDeadObject spam avoidance
typedef std::multiset<LLUUID> uuid_multiset_t;
// Helper structure for ordering lluuids in stl containers. eg:
// std::map<LLUUID, LLWidget*, lluuid_less> widget_map;

View File

@ -417,15 +417,18 @@ void LLAppViewerLinux::initCrashReporting(bool reportFreeze)
pid_str << LLApp::getPid();
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "");
std::string appname = gDirUtilp->getExecutableFilename();
std::string grid{ LLGridManager::getInstance()->getGridId() };
std::string title{ LLAppViewer::instance()->getSecondLifeTitle() };
std::string pidstr{ pid_str.str() };
// launch the actual crash logger
const char * cmdargv[] =
{cmd.c_str(),
"-user",
(char*)LLGridManager::getInstance()->getGridId().c_str(),
grid.c_str(),
"-name",
LLAppViewer::instance()->getSecondLifeTitle().c_str(),
title.c_str(),
"-pid",
pid_str.str().c_str(),
pidstr.c_str(),
"-dumpdir",
logdir.c_str(),
"-procname",

View File

@ -152,7 +152,7 @@ void LLAvatarRenderNotifier::displayNotification(bool show_over_limit)
}
// log unconditionally
LL_WARNS("AvatarRenderInfo") << notification_name << " " << args << LL_ENDL;
LL_DEBUGS("AvatarRenderInfo") << notification_name << " " << args << LL_ENDL;
if ( expire_delay // expiration of zero means do not show the notices
&& gAgentCamera.getLastCameraMode() != CAMERA_MODE_MOUSELOOK // don't display notices in Mouselook

View File

@ -567,13 +567,6 @@ bool LLInventoryFilter::checkAgainstPermissions(const LLFolderViewModelItemInven
{
if (!listener) return FALSE;
// <FS:Zi> Fix empty filtered folders still showing
if (listener->getInventoryType() == LLInventoryType::IT_CATEGORY)
{
return false;
}
// </FS:Zi>
PermissionMask perm = listener->getPermissionMask();
const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(listener);
if (bridge && bridge->isLink())

View File

@ -403,6 +403,7 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry*
bool justCreated = false;
if (!objectp)
{
objectp = createObjectFromCache(pcode, regionp, fullid, entry->getLocalID());
LL_DEBUGS("ObjectUpdate") << "uuid " << fullid << " created objectp " << objectp << LL_ENDL;
@ -1415,25 +1416,20 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)
// bool new_dead_object = true;
if (mDeadObjects.find(objectp->mID) != mDeadObjects.end())
{
LL_INFOS() << "Object " << objectp->mID << " already on dead list!" << LL_ENDL;
// <FS:Beq> FIRE-30694 DeadObject Spam
// LL_INFOS() << "Object " << objectp->mID << " already on dead list!" << LL_ENDL;
// new_dead_object = false;
LL_DEBUGS() << "Object " << objectp->mID << " already on dead list!" << LL_ENDL;
// </FS:Beq>
}
else
// <FS:Beq> detect but still delete dupes
// else
{
// <FS:Beq> FIRE-30694 DeadObject Spam
// mDeadObjects.insert(objectp->mID);
bool success;
std::tie( std::ignore, success ) = mDeadObjects.insert( objectp->mID );
if( success )
{
mNumDeadObjects++;
llassert( mNumDeadObjects == mDeadObjects.size() );
}
else
{
LL_WARNS() << "Object " << objectp->mID << " failed to insert on dead list!" << LL_ENDL;
}
mDeadObjects.insert( objectp->mID );
mNumDeadObjects++;
llassert( mNumDeadObjects == mDeadObjects.size() );
// </FS:Beq>
}
@ -1641,11 +1637,17 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
{
// <FS:Beq> FIRE-30694 DeadObject Spam
// mDeadObjects.erase(objectp->mID); // <FS:Ansariel> Use timer for cleaning up dead objects
if(mDeadObjects.erase(objectp->mID)==0)
{
auto delete_me = mDeadObjects.find(objectp->mID);
if( delete_me !=mDeadObjects.end() )
{
mDeadObjects.erase( delete_me );
}
else
{
LL_WARNS() << "Attempt to delete object " << objectp->mID << " but object not in dead list" << LL_ENDL;
num_divergent++; // this is the number we are adrift in the count
}
}
LLPointer<LLViewerObject>::swap(*iter, *target);
*target = NULL;
++target;
@ -1682,7 +1684,7 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
// TODO(Beq) If this still happens, we ought to realign at this point. Do a full sweep and reset.
if ( mNumDeadObjects != mDeadObjects.size() )
{
LL_WARNS() << "Num dead objects (" << mNumDeadObjects << ") != dead object list size (" << mDeadObjects.size() << "), deadlist discrepancy (" << num_divergent << ")" << LL_ENDL;
LL_WARNS_ONCE() << "Num dead objects (" << mNumDeadObjects << ") != dead object list size (" << mDeadObjects.size() << "), deadlist discrepancy (" << num_divergent << ")" << LL_ENDL;
}
// </FS:Ansariel>
}
@ -2326,7 +2328,7 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe
return NULL;
}
// </FS:Ansariel>
LLUUID fullid;
if (uuid == LLUUID::null)
{
@ -2519,7 +2521,9 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
}
else
{
LL_INFOS() << "Missing orphan child, removing from list" << LL_ENDL;
// <FS:Beq> descope uninteresting spam we can do nothing about.
// LL_INFOS() << "Missing orphan child, removing from list" << LL_ENDL;
LL_DEBUGS() << "Missing orphan child, removing from list" << LL_ENDL;
iter = mOrphanChildren.erase(iter);
}

View File

@ -223,7 +223,10 @@ protected:
vobj_list_t mMapObjects;
uuid_set_t mDeadObjects;
// <FS:Beq> deadobject cleanup
// uuid_set_t mDeadObjects;
uuid_multiset_t mDeadObjects;
// </FS:Beq>
std::map<LLUUID, LLPointer<LLViewerObject> > mUUIDObjectMap;

View File

@ -5319,13 +5319,15 @@ static LLTrace::BlockTimerStatHandle FTM_REGISTER_FACE("Register Face");
void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, U32 type)
{
LL_RECORD_BLOCK_TIME(FTM_REGISTER_FACE);
if ( type == LLRenderPass::PASS_ALPHA
&& facep->getTextureEntry()->getMaterialParams().notNull()
&& !facep->getVertexBuffer()->hasDataType(LLVertexBuffer::TYPE_TANGENT)
&& LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1)
{
LL_WARNS_ONCE("RenderMaterials") << "Oh no! No binormals for this alpha blended face!" << LL_ENDL;
}
// <FS:Ansariel> Can't do anything about it anyway - stop spamming the log
//if ( type == LLRenderPass::PASS_ALPHA
// && facep->getTextureEntry()->getMaterialParams().notNull()
// && !facep->getVertexBuffer()->hasDataType(LLVertexBuffer::TYPE_TANGENT)
// && LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1)
//{
// LL_WARNS_ONCE("RenderMaterials") << "Oh no! No binormals for this alpha blended face!" << LL_ENDL;
//}
// </FS:Ansariel>
// bool selected = facep->getViewerObject()->isSelected();
//

View File

@ -6,9 +6,10 @@
<panel.string name="ItemcountCompleted">
[ITEM_COUNT] Элементов [FILTER]
</panel.string>
<text name="ItemcountText">
Объекты:
</text>
<panel.string name="ItemcountUnknown">
Обнаружено [ITEM_COUNT] элементов [FILTER]
</panel.string>
<menu_bar name="inventory_menu_bar">
<menu label="Инвентарь" name="inventory_inventory_menu">
<menu_item_call name="inventory_open" label="Открыть" />
@ -70,7 +71,9 @@
<menu_item_check name="inventory_filter_show_links" label="Показать ссылки" />
<menu_item_check name="inventory_filter_only_links" label="Показать только ссылки" />
<menu_item_check name="inventory_filter_hide_links" label="Скрыть ссылки" />
<menu_item_check name="inventory_show_partial_results" label="Показать частичные результаты поиска" />
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемое"/>
<menu_item_check name="inventory_filter_only_copy" label="Только копируемое"/>
<menu_item_check name="inventory_filter_only_transfer" label="Только передаваемое"/>
</menu>
</menu_bar>
<filter_editor label="Фильтр" name="inventory search editor" tool_tip="Напишите одно или несколько слов для поиска. Для разделения используйте '+' "/>
@ -108,7 +111,7 @@
<button name="new_inv_btn" tool_tip="Дополнительное окно инвентаря"/>
</panel>
<panel name="dummy_panel">
<text name="ItemcountText">
<text name="ItemcountText" tool_tip="[ITEMS] предметов, [CATEGORIES] папок">
Элементов
</text>
</panel>

View File

@ -325,7 +325,7 @@
follows="left|top"
enabled_control="EnableMouselook"
height="16"
label="Don't close Conversations and Radar windows when changing into Mouselook"
label="Keep Conversations and Radar windows open when changing into Mouselook"
layout="topleft"
name="FSShowConvoAndRadarInML"
top_pad="5"

View File

@ -15,6 +15,9 @@
<check_box label="Настройки" name="check_settings"/>
<button label="Все" label_selected="Все" name="All"/>
<button label="Нет" label_selected="Нет" name="None"/>
<check_box label="Изм." name="check_modify"/>
<check_box label="Коп." name="check_copy"/>
<check_box label="Пер." name="check_transfer"/>
<check_box label="Показывать папки" name="check_show_empty"/>
<check_box label="Создано мной" name="check_created_by_me"/>
<check_box label="Создано другими" name="check_created_by_others"/>

View File

@ -11,7 +11,6 @@
<menu_item_check name="inventory_search_by_creator" label="Создателю"/>
<menu_item_check name="inventory_search_by_description" label="Описанию"/>
<menu_item_check name="inventory_search_by_all" label="Всему"/>
<menu_item_check name="inventory_show_partial_results" label="Частичные результаты"/>
</context_menu>
<menu_item_check label="Добавление объектов по двойному нажатию" name="add_inv_toggle"/>
<menu_item_check label="Добавление одежды по двойному нажатию" name="add_invclothing_toggle"/>
@ -27,5 +26,8 @@
<menu_item_check name="inventory_filter_show_links" label="Показать ссылки"/>
<menu_item_check name="inventory_filter_only_links" label="Показать только ссылки"/>
<menu_item_check name="inventory_filter_hide_links" label="Скрыть ссылки"/>
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемое"/>
<menu_item_check name="inventory_filter_only_copy" label="Только копируемое"/>
<menu_item_check name="inventory_filter_only_transfer" label="Показать передаваемое"/>
<menu_item_call label="Очистить корзину" name="empty_trash"/>
</toggleable_menu>

View File

@ -1890,6 +1890,10 @@ http://www.firestormviewer.org/support за помощь в решении эт
<string name="Snapshots" value=" Снимки,"/>
<string name="No Filters" value="Нет "/>
<string name="Since Logoff" value=" - с выхода"/>
<string name="Modifiable" value="Изменяемое"/>
<string name="Copyable" value="Копируемое"/>
<string name="Transferable" value="Передаваемое"/>
<string name="PermissionsFilter" value=" - Только [PERMISSIONS]"/>
<string name="InvFolder My Inventory">
Инвентарь
</string>

View File

@ -67,7 +67,9 @@
<menu_item_check name="inventory_filter_show_links" label="Показать ссылки" />
<menu_item_check name="inventory_filter_only_links" label="Показать только ссылки" />
<menu_item_check name="inventory_filter_hide_links" label="Скрыть ссылки" />
<menu_item_check name="inventory_show_partial_results" label="Показать частичные результаты поиска" />
<menu_item_check name="inventory_filter_only_modify" label="Только изменяемые"/>
<menu_item_check name="inventory_filter_only_copy" label="Только копируемые"/>
<menu_item_check name="inventory_filter_only_transfer" label="Только передаваемые"/>
</menu>
</menu_bar>
<filter_editor label="Фильтр" name="inventory search editor" tool_tip="Напишите одно или несколько слов для поиска. Для разделения используйте '+' "/>
@ -96,7 +98,7 @@
<recent_inventory_panel label="Недавние" name="Recent Items"/>
<worn_inventory_panel label="Надетые" name="Worn Items"/>
</tab_container>
<text name="ItemcountText">
<text name="ItemcountText" tool_tip="[ITEMS] предметов, [CATEGORIES] папок">
Объекты:
</text>
</panel>