diff options
Diffstat (limited to 'indra/newview')
56 files changed, 509 insertions, 237 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 040fc7955e..cb8fc466b9 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1436,11 +1436,24 @@ if (DARWIN)    LIST(APPEND viewer_SOURCE_FILES llfilepicker_mac.mm)    LIST(APPEND viewer_HEADER_FILES llfilepicker_mac.h) +  set_source_files_properties( +    llappviewermacosx-objc.mm +    PROPERTIES +    SKIP_PRECOMPILE_HEADERS TRUE +  ) + +  set_source_files_properties( +    llfilepicker_mac.mm +    PROPERTIES +    SKIP_PRECOMPILE_HEADERS TRUE +  ) +    # This should be compiled with the viewer.    LIST(APPEND viewer_SOURCE_FILES llappdelegate-objc.mm)    set_source_files_properties(      llappdelegate-objc.mm      PROPERTIES +    SKIP_PRECOMPILE_HEADERS TRUE      COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}"      # BugsplatMac is a module, imported with @import. That language feature      # demands these -f switches. @@ -1729,6 +1742,10 @@ list(APPEND EVENT_HOST_SCRIPTS ${EVENT_HOST_SCRIPT_GLOB_LIST})  set(PACKAGE ON CACHE BOOL      "Add a package target that builds an installer package.") +if(USE_PRECOMPILED_HEADERS) +  target_precompile_headers( ${VIEWER_BINARY_NAME} PRIVATE llviewerprecompiledheaders.h ) +endif(USE_PRECOMPILED_HEADERS) +  if (WINDOWS)      set_target_properties(${VIEWER_BINARY_NAME}          PROPERTIES @@ -1739,10 +1756,6 @@ if (WINDOWS)          )      target_compile_options(${VIEWER_BINARY_NAME} PRIVATE /bigobj) -    if(USE_PRECOMPILED_HEADERS) -       target_precompile_headers( ${VIEWER_BINARY_NAME} PRIVATE llviewerprecompiledheaders.h ) -    endif(USE_PRECOMPILED_HEADERS) -      # If adding a file to viewer_manifest.py in the WindowsManifest.construct() method, be sure to add the dependency      # here.      # *NOTE:Mani - This is a crappy hack to have important dependencies for the viewer_manifest copy action @@ -2042,6 +2055,22 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU")          COMPILE_FLAGS -Wno-uninitialized)      set_source_files_properties(llviewerstats.cpp PROPERTIES          COMPILE_FLAGS -Wno-unused-value) +    set_source_files_properties( +        llaisapi.cpp +        llconversationlog.cpp +        llconversationmodel.cpp +        lleventnotifier.cpp +        llfloateravatarrendersettings.cpp +        llfloatereditextdaycycle.cpp +        llfloaternewfeaturenotification.cpp +        llinventoryfunctions.cpp +        llnotificationlistitem.cpp +        llpanelenvironment.cpp +        llpanelgroupnotices.cpp +        llpanelteleporthistory.cpp +        lltoastgroupnotifypanel.cpp +        llvoavatar.cpp +        PROPERTIES COMPILE_FLAGS -Wno-stringop-overflow)      set_source_files_properties(llurl.cpp PROPERTIES COMPILE_FLAGS          -Wno-stringop-truncation)      set_source_files_properties( diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 7b764d47b3..b522213aec 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9142,6 +9142,17 @@      <key>Value</key>      <integer>1</integer>    </map> +    <key>RenderReflectionProbeCount</key> +    <map> +        <key>Comment</key> +        <string>Number of probes to render.  Maximum of 256.  Clamps to the nearest power of 2.</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>U32</string> +        <key>Value</key> +        <integer>256</integer> +    </map>    <key>RenderReflectionProbeResolution</key>    <map>      <key>Comment</key> diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl index fa94fb98f0..a4f144faba 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl @@ -87,6 +87,7 @@ vec3 clampHDRRange(vec3 color)      // This is a safety measure to prevent that.      // As to the specific number there - allegedly some HDR displays expect values to be in the 0-11.2 range. Citation needed.      // -Geenz 2025-03-05 +    color = mix(color, vec3(1), isinf(color));      color = mix(color, vec3(0.0), isnan(color));      return clamp(color, vec3(0.0), vec3(11.2));  } diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index cb79410d72..883963d558 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -86,6 +86,7 @@ RenderTonemapType			1   1  RenderTonemapMix			1   1  RenderDisableVintageMode           1   1  RenderMaxTextureResolution         1   2048 +RenderReflectionProbeCount  1   256  //  // Low Graphics Settings @@ -128,6 +129,7 @@ RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderDisableVintageMode           1   0  RenderMaxTextureResolution         1   512 +RenderReflectionProbeCount  1   1  //  // Medium Low Graphics Settings @@ -170,6 +172,7 @@ RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderDisableVintageMode           1   0  RenderMaxTextureResolution         1   1024 +RenderReflectionProbeCount  1   16  //  // Medium Graphics Settings (standard) @@ -211,6 +214,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   32  //  // Medium High Graphics Settings @@ -252,6 +256,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   64  //  // High Graphics Settings (SSAO + sun shadows) @@ -293,6 +298,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   128  //  // High Ultra Graphics Settings (deferred + SSAO + all shadows) @@ -334,6 +340,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   256  //  // Ultra graphics (REALLY PURTY!) @@ -375,6 +382,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   256  //  // Class Unknown Hardware (unknown) @@ -408,6 +416,7 @@ RenderReflectionProbeDetail	0	-1  RenderMirrors				0	0  RenderDisableVintageMode           1   0  RenderMaxTextureResolution         1   2048 +RenderReflectionProbeCount  0   0  list Intel  RenderAnisotropic			1	0 @@ -429,6 +438,7 @@ RenderMirrors				0	0  RenderGLMultiThreadedTextures 0 0  RenderGLMultiThreadedMedia 0 0  RenderDisableVintageMode           1   0 +RenderReflectionProbeCount  0   0  list TexUnit16orLess  RenderTerrainPBRDetail      1   -1 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index f3c3c4fcd9..0a94da3917 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -86,6 +86,7 @@ RenderTonemapMix			1   1  RenderDisableVintageMode           1   1  RenderDownScaleMethod       1   0  RenderMaxTextureResolution         1   2048 +RenderReflectionProbeCount  1   256  //  // Low Graphics Settings @@ -128,6 +129,7 @@ RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderDisableVintageMode           1   0  RenderMaxTextureResolution         1   512 +RenderReflectionProbeCount  1   1  // @@ -171,6 +173,7 @@ RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderDisableVintageMode           1   0  RenderMaxTextureResolution         1   1024 +RenderReflectionProbeCount  1   16  //  // Medium Graphics Settings (standard) @@ -212,6 +215,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   32  //  // Medium High Graphics Settings @@ -253,6 +257,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   64  //  // High Graphics Settings (SSAO + sun shadows) @@ -294,6 +299,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   128  //  // High Ultra Graphics Settings (SSAO + all shadows) @@ -335,6 +341,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   256  //  // Ultra graphics (REALLY PURTY!) @@ -376,6 +383,7 @@ RenderExposure				1   1  RenderTonemapType			1   1  RenderTonemapMix			1   0.7  RenderMaxTextureResolution  1   2048 +RenderReflectionProbeCount  1   256  //  // Class Unknown Hardware (unknown) @@ -408,6 +416,7 @@ RenderShadowDetail			0	0  RenderMirrors				0	0  RenderDisableVintageMode           1   0  RenderMaxTextureResolution         1   2048 +RenderReflectionProbeCount  0   0  list TexUnit8orLess  RenderDeferredSSAO			0	0 @@ -448,6 +457,7 @@ RenderReflectionProbeDetail	0	0  RenderReflectionsEnabled    0   0  RenderMirrors				0	0  RenderDisableVintageMode           1   0 +RenderReflectionProbeCount  0   0  list VaryingVectors16orLess  RenderTerrainPBRPlanarSampleCount 1   1 diff --git a/indra/newview/gltf/common.h b/indra/newview/gltf/common.h index 742daff715..8cf3f1dff7 100644 --- a/indra/newview/gltf/common.h +++ b/indra/newview/gltf/common.h @@ -26,8 +26,6 @@   * $/LicenseInfo$   */ -#define GLM_ENABLE_EXPERIMENTAL 1 -  #include "glm/vec2.hpp"  #include "glm/vec3.hpp"  #include "glm/vec4.hpp" diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index ed82f1db48..2161dbe19e 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -4321,9 +4321,14 @@ void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)  void LLAgent::doTeleportViaLandmark(const LLUUID& landmark_asset_id)  { -    bool is_local(false); -    LLViewerRegion* regionp  = getRegion(); +    LLViewerRegion* regionp = getRegion(); +    if (!regionp) +    { +        LL_WARNS("Teleport") << "called when agent region is null" << LL_ENDL; +        return; +    } +    bool is_local(false);      if (LLLandmark* landmark = gLandmarkList.getAsset(landmark_asset_id, NULL))      {          LLVector3d pos_global; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 4e0c5d7df0..101aca3823 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4722,48 +4722,64 @@ void wear_multiple(const uuid_vec_t& ids, bool replace)      LLAppearanceMgr::instance().wearItemsOnAvatar(ids, true, replace, cb);  } -// SLapp for easy-wearing of a stock (library) avatar -// +bool wear_category(const LLSD& query_map, bool append) +{ +    LLUUID folder_uuid; + +    if (query_map.has("folder_name")) +    { +        std::string outfit_folder_name = query_map["folder_name"]; +        folder_uuid = findDescendentCategoryIDByName(gInventory.getLibraryRootFolderID(), outfit_folder_name); +        if (folder_uuid.isNull()) +            LL_WARNS() << "Couldn't find " << std::quoted(outfit_folder_name) << " in the Library" << LL_ENDL; +    } +    if (folder_uuid.isNull() && query_map.has("folder_id")) +    { +        folder_uuid = query_map["folder_id"].asUUID(); +    } + +    if (folder_uuid.notNull()) +    { +        if (LLViewerInventoryCategory* cat = gInventory.getCategory(folder_uuid)) +        { +            if (bool is_library = gInventory.isObjectDescendentOf(folder_uuid, gInventory.getRootFolderID())) +            { +                LLPointer<LLInventoryCategory> new_category = new LLInventoryCategory(folder_uuid, LLUUID::null, LLFolderType::FT_CLOTHING, "Quick Appearance"); +                LLAppearanceMgr::getInstance()->wearInventoryCategory(new_category, true, append); +            } +            else +            { +                LLAppearanceMgr::getInstance()->wearInventoryCategory(cat, true, append); +            } +            return true; +        } +        else +        { +            LL_WARNS() << "Couldn't find folder id" << folder_uuid << " in Inventory" << LL_ENDL; +        } +    } + +    return false; +} +  class LLWearFolderHandler : public LLCommandHandler  {  public:      // not allowed from outside the app -    LLWearFolderHandler() : LLCommandHandler("wear_folder", UNTRUSTED_BLOCK) { } +    LLWearFolderHandler() : LLCommandHandler("wear_folder", UNTRUSTED_BLOCK) {}      bool handle(const LLSD& tokens,                  const LLSD& query_map,                  const std::string& grid,                  LLMediaCtrl* web)      { -        LLSD::UUID folder_uuid; - -        if (folder_uuid.isNull() && query_map.has("folder_name")) -        { -            std::string outfit_folder_name = query_map["folder_name"]; -            folder_uuid = findDescendentCategoryIDByName( -                gInventory.getLibraryRootFolderID(), -                outfit_folder_name); -        } -        if (folder_uuid.isNull() && query_map.has("folder_id")) +        if (wear_category(query_map, false))          { -            folder_uuid = query_map["folder_id"].asUUID(); -        } +            // Assume this is coming from the predefined avatars web floater +            LLUIUsage::instance().logCommand("Avatar.WearPredefinedAppearance"); -        if (folder_uuid.notNull()) -        { -            LLPointer<LLInventoryCategory> category = new LLInventoryCategory(folder_uuid, -                                                                              LLUUID::null, -                                                                              LLFolderType::FT_CLOTHING, -                                                                              "Quick Appearance"); -            if ( gInventory.getCategory( folder_uuid ) != NULL ) -            { -                // Assume this is coming from the predefined avatars web floater -                LLUIUsage::instance().logCommand("Avatar.WearPredefinedAppearance"); -                LLAppearanceMgr::getInstance()->wearInventoryCategory(category, true, false); - -                // *TODOw: This may not be necessary if initial outfit is chosen already -- josh -                gAgent.setOutfitChosen(true); -            } +            // *TODOw: This may not be necessary if initial outfit is chosen already -- josh +            gAgent.setOutfitChosen(true);          }          // release avatar picker keyboard focus @@ -4773,4 +4789,46 @@ public:      }  }; +class LLAddFolderHandler : public LLCommandHandler +{ +public: +    // not allowed from outside the app +    LLAddFolderHandler() : LLCommandHandler("add_folder", UNTRUSTED_BLOCK) {} + +    bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) +    { +        wear_category(query_map, true); + +        return true; +    } +}; + +class LLRemoveFolderHandler : public LLCommandHandler +{ +public: +    LLRemoveFolderHandler() : LLCommandHandler("remove_folder", UNTRUSTED_BLOCK) {} + +    bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) +    { +        if (query_map.has("folder_id")) +        { +            LLUUID folder_id = query_map["folder_id"].asUUID(); +            if (folder_id.notNull()) +            { +                if (LLViewerInventoryCategory* cat = gInventory.getCategory(folder_id)) +                { +                    LLAppearanceMgr::instance().takeOffOutfit(cat->getLinkedUUID()); +                } +                else +                { +                    LL_WARNS() << "Couldn't find folder id" << folder_id << " in Inventory" << LL_ENDL; +                } +            } +        } +        return true; +    } +}; +  LLWearFolderHandler gWearFolderHandler; +LLAddFolderHandler gAddFolderHandler; +LLRemoveFolderHandler gRemoveFolderHandler; diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index 8e9ab8f87f..829b6380cd 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -42,6 +42,7 @@  #include "llinventorymodel.h"  #include "llnotifications.h"  #include "llslurl.h" +#include "llstartup.h"  #include "llimview.h"  #include "lltrans.h"  #include "llviewercontrol.h" @@ -271,6 +272,22 @@ S32 LLAvatarTracker::addBuddyList(const LLAvatarTracker::buddy_map_t& buds)                      << "]" << LL_ENDL;          }      } + +    // It's possible that the buddy list getting propagated from the inventory may have happened after we actually got the buddy list. +    // Any buddies that we got prior will reside in a special queue that we must process and update statuses accordingly with. +    // Do that here. +    // -Geenz 2025-03-12 +    while (!mBuddyStatusQueue.empty()) +    { +        auto buddyStatus = mBuddyStatusQueue.front(); +        mBuddyStatusQueue.pop(); + +        if (mBuddyInfo.find(buddyStatus.first) != mBuddyInfo.end()) +        { +            setBuddyOnline(buddyStatus.first, buddyStatus.second); +        } +    } +      // do not notify observers here - list can be large so let it be done on idle.      return new_buddy_count; @@ -335,6 +352,8 @@ void LLAvatarTracker::setBuddyOnline(const LLUUID& id, bool is_online)      {          LL_WARNS() << "!! No buddy info found for " << id                  << ", setting to " << (is_online ? "Online" : "Offline") << LL_ENDL; +        LL_WARNS() << "Did we receive a buddy status update before the buddy info?" << LL_ENDL; +        mBuddyStatusQueue.push(std::make_pair(id, is_online));      }  } @@ -706,6 +725,8 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)              {                  LL_WARNS() << "Received online notification for unknown buddy: "                      << agent_id << " is " << (online ? "ONLINE" : "OFFLINE") << LL_ENDL; +                LL_WARNS() << "Adding buddy to buddy queue." << LL_ENDL; +                mBuddyStatusQueue.push(std::make_pair(agent_id, true));              }              if(tracking_id == agent_id) @@ -723,7 +744,11 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)          mModifyMask |= LLFriendObserver::ONLINE;          instance().notifyObservers(); -        gInventory.notifyObservers(); +        // Skip if we had received the friends list before the inventory callbacks were properly initialized +        if (LLStartUp::getStartupState() > STATE_INVENTORY_CALLBACKS) +        { +            gInventory.notifyObservers(); +        }      }  } diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h index 48b93fdf9d..f45adfbfec 100644 --- a/indra/newview/llcallingcard.h +++ b/indra/newview/llcallingcard.h @@ -109,6 +109,7 @@ public:      // add or remove agents from buddy list. Each method takes a set      // of buddies and returns how many were actually added or removed.      typedef std::map<LLUUID, LLRelationship*> buddy_map_t; +    typedef std::queue<std::pair<LLUUID, bool>> buddy_status_queue_t;      S32 addBuddyList(const buddy_map_t& buddies);      //S32 removeBuddyList(const buddy_list_t& exes); @@ -194,6 +195,7 @@ protected:      //LLInventoryObserver* mInventoryObserver;      buddy_map_t mBuddyInfo; +    buddy_status_queue_t mBuddyStatusQueue;      typedef std::set<LLUUID> changed_buddy_t;      changed_buddy_t mChangedBuddyIDs; diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 70ae4ee13f..4921964b35 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -33,6 +33,7 @@  // viewer includes  #include "llagent.h" +#include "llagentcamera.h"  #include "llcriticaldamp.h"  #include "llface.h"  #include "lllightconstants.h" @@ -778,6 +779,14 @@ bool LLDrawable::updateMove()      makeActive(); +    // #3256 force undampened movement for attached objects in mouselook +    // to prevent animation bork for linkset with animated parts +    if (!isRoot() && gAgentCamera.cameraMouselook() && +        !mVObjp->isRiggedMesh() && mVObjp->getAvatar() && mVObjp->getAvatar()->isSelf()) +    { +        return updateMoveUndamped(); +    } +      return isState(MOVE_UNDAMPED) ? updateMoveUndamped() : updateMoveDamped();  } diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index ff30c83f51..25970f8a08 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -33,6 +33,7 @@  #include "llagentui.h"  #include "llbase64.h"  #include "llcallbacklist.h" +#include "lldate.h"  #include "llenvironment.h"  #include "llimagejpeg.h"  #include "llmediactrl.h" @@ -692,7 +693,15 @@ void LLFloater360Capture::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent                                          );                  // execute the command on the page -                mWebBrowser->getMediaPlugin()->executeJavaScript(cmd); +                LLPluginClassMedia* plugin = mWebBrowser->getMediaPlugin(); +                if (plugin) +                { +                    plugin->executeJavaScript(cmd); +                } +                else +                { +                    LL_WARNS("360Capture") << "No media plugin found" << LL_ENDL; +                }              }          }          break; @@ -773,7 +782,15 @@ void LLFloater360Capture::onSaveLocalBtn()      // send it to the browser instance, triggering the equirectangular capture      // process and complimentary offer to save the image -    mWebBrowser->getMediaPlugin()->executeJavaScript(cmd); +    LLPluginClassMedia* plugin = mWebBrowser->getMediaPlugin(); +    if (plugin) +    { +        plugin->executeJavaScript(cmd); +    } +    else +    { +        LL_WARNS("360Capture") << "No media plugin found" << LL_ENDL; +    }  }  // We capture all 6 images sequentially and if parts of the world are moving @@ -863,15 +880,7 @@ const std::string LLFloater360Capture::generate_proposed_filename()      filename << "_";      // add in the current HH-MM-SS (with leading 0's) so users can easily save many shots in same folder -    std::time_t cur_epoch = std::time(nullptr); -    std::tm* tm_time = std::localtime(&cur_epoch); -    filename << std::setfill('0') << std::setw(4) << (tm_time->tm_year + 1900); -    filename << std::setfill('0') << std::setw(2) << (tm_time->tm_mon + 1); -    filename << std::setfill('0') << std::setw(2) << tm_time->tm_mday; -    filename << "_"; -    filename << std::setfill('0') << std::setw(2) << tm_time->tm_hour; -    filename << std::setfill('0') << std::setw(2) << tm_time->tm_min; -    filename << std::setfill('0') << std::setw(2) << tm_time->tm_sec; +    filename << LLDate::now().toLocalDateString("%Y%m%d_%H%M%S");      // the unusual way we save the output image (originates in the      // embedded browser and not the C++ code) means that the system diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index ce1072a968..fdac390e8a 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -544,6 +544,10 @@ void LLFloaterPreference::onDoNotDisturbResponseChanged()  LLFloaterPreference::~LLFloaterPreference()  {      LLConversationLog::instance().removeObserver(this); +    if (LLAvatarPropertiesProcessor::instanceExists()) +    { +        LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this); +    }      mComplexityChangedSignal.disconnect();      mImpostorsChangedSignal.disconnect();  } diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 40806c22fc..fa9c421a8f 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -237,7 +237,7 @@ private:      std::unique_ptr< ll::prefs::SearchData > mSearchData;      bool mSearchDataDirty; -    boost::signals2::connection mImpostorsChangedSignal; +    boost::signals2::connection	mImpostorsChangedSignal;      boost::signals2::connection mComplexityChangedSignal;      void onUpdateFilterTerm( bool force = false ); diff --git a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp index 5e53e00e0a..a8a1e507a8 100644 --- a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp +++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp @@ -51,6 +51,8 @@ LLFloaterPreferenceGraphicsAdvanced::LLFloaterPreferenceGraphicsAdvanced(const L      mCommitCallbackRegistrar.add("Pref.Cancel", boost::bind(&LLFloaterPreferenceGraphicsAdvanced::onBtnCancel, this, _2));      mCommitCallbackRegistrar.add("Pref.OK",     boost::bind(&LLFloaterPreferenceGraphicsAdvanced::onBtnOK, this, _2)); + +    mImpostorsChangedSignal = gSavedSettings.getControl("RenderAvatarMaxNonImpostors")->getSignal()->connect(boost::bind(&LLFloaterPreferenceGraphicsAdvanced::updateIndirectMaxNonImpostors, this, _2));  }  LLFloaterPreferenceGraphicsAdvanced::~LLFloaterPreferenceGraphicsAdvanced() @@ -58,7 +60,6 @@ LLFloaterPreferenceGraphicsAdvanced::~LLFloaterPreferenceGraphicsAdvanced()      mComplexityChangedSignal.disconnect();      mComplexityModeChangedSignal.disconnect();      mLODFactorChangedSignal.disconnect(); -    mNumImpostorsChangedSignal.disconnect();  }  bool LLFloaterPreferenceGraphicsAdvanced::postBuild() diff --git a/indra/newview/llfloaterpreferencesgraphicsadvanced.h b/indra/newview/llfloaterpreferencesgraphicsadvanced.h index 61203be068..a1a54f238d 100644 --- a/indra/newview/llfloaterpreferencesgraphicsadvanced.h +++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.h @@ -61,6 +61,7 @@ protected:      void        onBtnOK(const LLSD& userdata);      void        onBtnCancel(const LLSD& userdata); +    boost::signals2::connection	mImpostorsChangedSignal;      boost::signals2::connection mComplexityChangedSignal;      boost::signals2::connection mComplexityModeChangedSignal;      boost::signals2::connection mLODFactorChangedSignal; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 6bbd27478c..2d972ea3f5 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -851,6 +851,13 @@ void LLPanelRegionInfo::initCtrl(const std::string& name)      getChild<LLUICtrl>(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onChangeAnything, this));  } +void LLPanelRegionInfo::initAndSetTexCtrl(LLTextureCtrl*& ctrl, const std::string& name) +{ +    ctrl = findChild<LLTextureCtrl>(name); +    if (ctrl) +        ctrl->setOnSelectCallback([this](LLUICtrl* ctrl, const LLSD& param){ onChangeAnything(); }); +} +  template<typename CTRL>  void LLPanelRegionInfo::initAndSetCtrl(CTRL*& ctrl, const std::string& name)  { @@ -1580,7 +1587,7 @@ bool LLPanelRegionTerrainInfo::postBuild()      for(S32 i = 0; i < LLTerrainMaterials::ASSET_COUNT; ++i)      { -        initAndSetCtrl(mTextureDetailCtrl[i], llformat("texture_detail_%d", i)); +        initAndSetTexCtrl(mTextureDetailCtrl[i], llformat("texture_detail_%d", i));          if (mTextureDetailCtrl[i])          {              mTextureDetailCtrl[i]->setBakeTextureEnabled(false); diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 201d8b0a68..a8631c36ca 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -159,6 +159,7 @@ public:  protected:      void initCtrl(const std::string& name);      template<typename CTRL> void initAndSetCtrl(CTRL*& ctrl, const std::string& name); +    void initAndSetTexCtrl(LLTextureCtrl*& ctrl, const std::string& name);      // Returns true if update sent and apply button should be      // disabled. diff --git a/indra/newview/llgltfmateriallist.cpp b/indra/newview/llgltfmateriallist.cpp index 25438eae5e..d8b3f996aa 100644 --- a/indra/newview/llgltfmateriallist.cpp +++ b/indra/newview/llgltfmateriallist.cpp @@ -353,6 +353,18 @@ void LLGLTFMaterialList::queueApply(const LLViewerObject* obj, S32 side, const L      }  } +void LLGLTFMaterialList::queueApply(const LLViewerObject* obj, S32 side, const LLUUID& asset_id, const std::string &override_json) +{ +    if (asset_id.isNull() || override_json.empty()) +    { +        queueApply(obj, side, asset_id); +    } +    else +    { +        sApplyQueue.push_back({ obj->getID(), side, asset_id, nullptr, override_json }); +    } +} +  void LLGLTFMaterialList::queueApply(const LLViewerObject* obj, S32 side, const LLUUID& asset_id, const LLGLTFMaterial* material_override)  {      if (asset_id.isNull() || material_override == nullptr) @@ -456,6 +468,10 @@ void LLGLTFMaterialList::flushUpdatesOnce(std::shared_ptr<CallbackHolder> callba          {              data[i]["gltf_json"] = e.override_data->asJSON();          } +        if (!e.override_json.empty()) +        { +            data[i]["gltf_json"] = e.override_json; +        }          else          {              // Clear all overrides diff --git a/indra/newview/llgltfmateriallist.h b/indra/newview/llgltfmateriallist.h index e79da3592a..97d173d3a7 100644 --- a/indra/newview/llgltfmateriallist.h +++ b/indra/newview/llgltfmateriallist.h @@ -67,6 +67,7 @@ public:      //      // NOTE: Implicitly clears most override data if present      static void queueApply(const LLViewerObject* obj, S32 side, const LLUUID& asset_id); +    static void queueApply(const LLViewerObject* obj, S32 side, const LLUUID& asset_id, const std::string& override_json);      // Queue an application of a material asset we want to send to the simulator.      //  Call "flushUpdates" to flush pending updates immediately. @@ -160,6 +161,7 @@ protected:          S32 side = -1;          LLUUID asset_id;          LLPointer<LLGLTFMaterial> override_data; +        std::string override_json;      };      typedef std::list<ApplyMaterialAssetData> apply_queue_t; diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index 590cd09a31..4e8bcc4f7a 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -650,14 +650,6 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,                      asset_type = (LLAssetType::EType)(atoi((*(iter++)).c_str()));                      iter++; // wearable type if applicable, otherwise asset type                      item_name = std::string((*(iter++)).c_str()); -                    // Note There is more elements in 'tokens' ... - - -                    for (int i = 0; i < 6; i++) -                    { -                        LL_WARNS() << *(iter++) << LL_ENDL; -                        iter++; -                    }                  }              }              else diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 6e9232d6f4..756f3b33ed 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -3553,6 +3553,7 @@ void LLIMMgr::inviteToSession(              && voice_invite && "VoiceInviteQuestionDefault" == question_type)          {              LL_INFOS("IMVIEW") << "Rejecting voice call from initiating muted resident " << caller_name << LL_ENDL; +            payload["voice_channel_info"] = voice_channel_info;              LLIncomingCallDialog::processCallResponse(1, payload);              return;          } @@ -3601,6 +3602,7 @@ void LLIMMgr::inviteToSession(                  send_do_not_disturb_message(gMessageSystem, caller_id, session_id);              }              // silently decline the call +            payload["voice_channel_info"] = voice_channel_info;              LLIncomingCallDialog::processCallResponse(1, payload);              return;          } diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index 9e936eee5b..2e0669fc38 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -99,7 +99,7 @@ void LLInventoryItemsList::updateSelection()      for(std::vector<LLSD>::const_iterator cur_id_it = cur.begin(); cur_id_it != cur.end() && !mSelectTheseIDs.empty(); ++cur_id_it)      { -        uuid_vec_t::iterator select_ids_it = std::find(mSelectTheseIDs.begin(), mSelectTheseIDs.end(), *cur_id_it); +        uuid_vec_t::iterator select_ids_it = std::find(mSelectTheseIDs.begin(), mSelectTheseIDs.end(), cur_id_it->asUUID());          if(select_ids_it != mSelectTheseIDs.end())          {              selectItemByUUID(*select_ids_it); diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 1db7bd978c..5e230d95bd 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -894,6 +894,11 @@ bool LLLogChat::isTranscriptFileFound(std::string fullname)      return result;  } +std::string LLLogChat::getGroupChatSuffix() +{ +    return GROUP_CHAT_SUFFIX; +} +  //*TODO mark object's names in a special way so that they will be distinguishable form avatar name  //which are more strict by its nature (only firstname and secondname)  //Example, an object's name can be written like "Object <actual_object's_name>" diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h index dbbd8ae1ba..39c40b985e 100644 --- a/indra/newview/lllogchat.h +++ b/indra/newview/lllogchat.h @@ -127,6 +127,8 @@ public:      static bool isAdHocTranscriptExist(std::string file_name);      static bool isTranscriptFileFound(std::string fullname); +    static std::string getGroupChatSuffix(); +      bool historyThreadsFinished(LLUUID session_id);      LLLoadHistoryThread* getLoadHistoryThread(LLUUID session_id);      LLDeleteHistoryThread* getDeleteHistoryThread(LLUUID session_id); diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 23f1f8fa5a..cdf7f05ada 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -92,10 +92,18 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type,              from = SYSTEM_FROM;          } -        // Build a new format username or firstname_lastname for legacy names -        // to use it for a history log filename. -        std::string user_name = LLCacheName::buildUsername(session_name); -        LLIMModel::instance().logToFile(user_name, from, from_id, message); +        std::string file_name; +        if (session_type == IM_SESSION_GROUP_START) +        { +            file_name = session_name + LLLogChat::getGroupChatSuffix(); +        } +        else +        { +            // Build a new format username or firstname_lastname for legacy names +            // to use it for a history log filename. +            file_name = LLCacheName::buildUsername(session_name); +        } +        LLIMModel::instance().logToFile(file_name, from, from_id, message);      }      else      { diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 0f5f7aebf8..6e666b8a4b 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -924,8 +924,8 @@ void LLOutfitListBase::onIdleRefreshList()          if (cat)          {              std::string name = cat->getName(); -        updateChangedCategoryName(cat, name); -    } +            updateChangedCategoryName(cat, name); +        }          curent_time = LLTimer::getTotalSeconds();          if (curent_time >= end_time) diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 1faf241aaa..449a670de9 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -266,6 +266,15 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t      }  } +void LLPanelClassifiedInfo::setAvatarId(const LLUUID& avatar_id) +{ +    if (mAvatarId.notNull()) +    { +        LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarId, this); +    } +    mAvatarId = avatar_id; +} +  void LLPanelClassifiedInfo::resetData()  {      setClassifiedName(LLStringUtil::null); diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h index 266b9d222a..a429468a52 100644 --- a/indra/newview/llpanelclassified.h +++ b/indra/newview/llpanelclassified.h @@ -53,7 +53,7 @@ public:      /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); -    void setAvatarId(const LLUUID& avatar_id) { mAvatarId = avatar_id; } +    void setAvatarId(const LLUUID& avatar_id);      LLUUID& getAvatarId() { return mAvatarId; } diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index 4f1fd5dfca..3a6a6a5ec3 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -68,9 +68,9 @@ LLPanelEmojiComplete::LLPanelEmojiComplete(const LLPanelEmojiComplete::Params& p      {          LLScrollbar::Params sbparams;          sbparams.orientation(LLScrollbar::VERTICAL); -        sbparams.doc_size(mTotalEmojis); +        sbparams.doc_size(static_cast<S32>(mTotalEmojis));          sbparams.doc_pos(0); -        sbparams.page_size(mVisibleEmojis); +        sbparams.page_size(static_cast<S32>(mVisibleEmojis));          sbparams.change_callback([this](S32 index, LLScrollbar*) { onScrollbarChange(index); });          mScrollbar = LLUICtrlFactory::create<LLScrollbar>(sbparams);          addChild(mScrollbar); diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index cc2c7f2a99..168f28ed79 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -4464,21 +4464,14 @@ void LLPanelFace::onPasteTexture(LLViewerObject* objectp, S32 te)                  tep->setGLTFRenderMaterial(nullptr);                  tep->setGLTFMaterialOverride(nullptr); -                LLSD override_data; -                override_data["object_id"] = objectp->getID(); -                override_data["side"] = te;                  if (te_data["te"].has("pbr_override"))                  { -                    override_data["gltf_json"] = te_data["te"]["pbr_override"]; +                    LLGLTFMaterialList::queueApply(objectp, te, te_data["te"]["pbr"].asUUID(), te_data["te"]["pbr_override"]);                  }                  else                  { -                    override_data["gltf_json"] = ""; +                    LLGLTFMaterialList::queueApply(objectp, te, te_data["te"]["pbr"].asUUID());                  } - -                override_data["asset_id"] = te_data["te"]["pbr"].asUUID(); - -                LLGLTFMaterialList::queueUpdate(override_data);              }              else              { diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index a5b4db0580..d964fa9170 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1582,7 +1582,7 @@ void LLPanelMainInventory::initInventoryViews()  void LLPanelMainInventory::toggleViewMode()  { -    if(mSingleFolderMode && isCombinationViewMode()) +    if(mSingleFolderMode && isCombinationViewMode() && mCombinationGalleryPanel->getRootFolder().notNull())      {          mCombinationInventoryPanel->getRootFolder()->setForceArrange(false);      } @@ -2030,7 +2030,11 @@ void LLPanelMainInventory::onVisibilityChange( bool new_visibility )          {              menu->setVisible(false);          } -        getActivePanel()->getRootFolder()->finishRenamingItem(); +        LLFolderView* root_folder = mActivePanel ? mActivePanel->getRootFolder() : nullptr; +        if (root_folder) +        { +            root_folder->finishRenamingItem(); +        }      }  } @@ -2043,7 +2047,8 @@ bool LLPanelMainInventory::isSaveTextureEnabled(const LLSD& userdata)      }      else      { -        LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); +        LLFolderView* root_folder = getActivePanel() ? getActivePanel()->getRootFolder() : nullptr; +        LLFolderViewItem* current_item = root_folder ? root_folder->getCurSelectedItem() : nullptr;          if (current_item)          {              inv_item = dynamic_cast<LLViewerInventoryItem*>(static_cast<LLFolderViewModelItemInventory*>(current_item->getViewModelItem())->getInventoryObject()); @@ -2439,8 +2444,6 @@ void LLPanelMainInventory::updateCombinationVisibility()              mCombinationGalleryPanel->handleModifiedFilter();          } -        getActivePanel()->getRootFolder(); -          if (mReshapeInvLayout              && show_inv_pane              && (mCombinationGalleryPanel->hasVisibleItems() || mCombinationGalleryPanel->areViewsInitialized()) @@ -2497,8 +2500,12 @@ void LLPanelMainInventory::updateCombinationVisibility()          && mCombinationInventoryPanel->areViewsInitialized())      {          mCombinationInventoryPanel->setSelectionByID(mCombInvUUIDNeedsRename, true); -        mCombinationInventoryPanel->getRootFolder()->scrollToShowSelection(); -        mCombinationInventoryPanel->getRootFolder()->setNeedsAutoRename(true); +        LLFolderView* root = mCombinationInventoryPanel->getRootFolder(); +        if (root) +        { +            root->scrollToShowSelection(); +            root->setNeedsAutoRename(true); +        }          mCombInvUUIDNeedsRename.setNull();      }  } diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp index 2708d5edf0..e91fff320a 100644 --- a/indra/newview/llreflectionmapmanager.cpp +++ b/indra/newview/llreflectionmapmanager.cpp @@ -221,6 +221,14 @@ void LLReflectionMapManager::update()          resume();      } +    static LLCachedControl<U32> probe_count(gSavedSettings, "RenderReflectionProbeCount", 256U); +    bool countReset = mReflectionProbeCount != probe_count; + +    if (countReset) +    { +        mResetFade = -0.5f; +    } +      initReflectionMaps();      static LLCachedControl<bool> render_hdr(gSavedSettings, "RenderHDREnabled", true); @@ -335,6 +343,13 @@ void LLReflectionMapManager::update()          }      } +    if (countReset) +    { +        mResetFade = -0.5f; +    } + +    mResetFade = llmin((F32)(mResetFade + gFrameIntervalSeconds), 1.f); +      for (unsigned int i = 0; i < mProbes.size(); ++i)      {          LLReflectionMap* probe = mProbes[i]; @@ -1022,60 +1037,18 @@ void LLReflectionMapManager::updateUniforms()      LL_PROFILE_ZONE_SCOPED_CATEGORY_DISPLAY; -    // structure for packing uniform buffer object -    // see class3/deferred/reflectionProbeF.glsl -    struct ReflectionProbeData -    { -        // for box probes, matrix that transforms from camera space to a [-1, 1] cube representing the bounding box of -        // the box probe -        LLMatrix4 refBox[LL_MAX_REFLECTION_PROBE_COUNT]; - -        LLMatrix4 heroBox; - -        // for sphere probes, origin (xyz) and radius (w) of refmaps in clip space -        LLVector4 refSphere[LL_MAX_REFLECTION_PROBE_COUNT]; - -        // extra parameters -        //  x - irradiance scale -        //  y - radiance scale -        //  z - fade in -        //  w - znear -        LLVector4 refParams[LL_MAX_REFLECTION_PROBE_COUNT]; - -        LLVector4 heroSphere; - -        // indices used by probe: -        //  [i][0] - cubemap array index for this probe -        //  [i][1] - index into "refNeighbor" for probes that intersect this probe -        //  [i][2] - number of probes  that intersect this probe, or -1 for no neighbors -        //  [i][3] - priority (probe type stored in sign bit - positive for spheres, negative for boxes) -        GLint refIndex[LL_MAX_REFLECTION_PROBE_COUNT][4]; - -        // list of neighbor indices -        GLint refNeighbor[4096]; - -        GLint refBucket[256][4]; //lookup table for which index to start with for the given Z depth -        // numbrer of active refmaps -        GLint refmapCount; - -        GLint     heroShape; -        GLint     heroMipCount; -        GLint     heroProbeCount; -    };      mReflectionMaps.resize(mReflectionProbeCount);      getReflectionMaps(mReflectionMaps); -    ReflectionProbeData rpd; -      F32 minDepth[256];      for (int i = 0; i < 256; ++i)      { -        rpd.refBucket[i][0] = mReflectionProbeCount; -        rpd.refBucket[i][1] = mReflectionProbeCount; -        rpd.refBucket[i][2] = mReflectionProbeCount; -        rpd.refBucket[i][3] = mReflectionProbeCount; +        mProbeData.refBucket[i][0] = mReflectionProbeCount; +        mProbeData.refBucket[i][1] = mReflectionProbeCount; +        mProbeData.refBucket[i][2] = mReflectionProbeCount; +        mProbeData.refBucket[i][3] = mReflectionProbeCount;          minDepth[i] = FLT_MAX;      } @@ -1121,7 +1094,7 @@ void LLReflectionMapManager::updateUniforms()                  if (refmap->mMinDepth < minDepth[i])                  {                      minDepth[i] = refmap->mMinDepth; -                    rpd.refBucket[i][0] = refmap->mProbeIndex; +                    mProbeData.refBucket[i][0] = refmap->mProbeIndex;                  }              }          } @@ -1149,25 +1122,25 @@ void LLReflectionMapManager::updateUniforms()                  }              }              modelview.affineTransform(refmap->mOrigin, oa); -            rpd.refSphere[count].set(oa.getF32ptr()); -            rpd.refSphere[count].mV[3] = refmap->mRadius; +            mProbeData.refSphere[count].set(oa.getF32ptr()); +            mProbeData.refSphere[count].mV[3] = refmap->mRadius;          } -        rpd.refIndex[count][0] = refmap->mCubeIndex; +        mProbeData.refIndex[count][0] = refmap->mCubeIndex;          llassert(nc % 4 == 0); -        rpd.refIndex[count][1] = nc / 4; -        rpd.refIndex[count][3] = refmap->mPriority; +        mProbeData.refIndex[count][1] = nc / 4; +        mProbeData.refIndex[count][3] = refmap->mPriority;          // for objects that are reflection probes, use the volume as the influence volume of the probe          // only possibile influence volumes are boxes and spheres, so detect boxes and treat everything else as spheres -        if (refmap->getBox(rpd.refBox[count])) +        if (refmap->getBox(mProbeData.refBox[count]))          { // negate priority to indicate this probe has a box influence volume -            rpd.refIndex[count][3] = -rpd.refIndex[count][3]; +            mProbeData.refIndex[count][3] = -mProbeData.refIndex[count][3];          } -        rpd.refParams[count].set( -            llmax(minimum_ambiance, refmap->getAmbiance())*ambscale, // ambiance scale -            radscale, // radiance scale +        mProbeData.refParams[count].set( +            llmax(minimum_ambiance, refmap->getAmbiance())*ambscale * llmax(mResetFade, 0.f), // ambiance scale +            radscale * llmax(mResetFade, 0.f), // radiance scale              refmap->mFadeIn, // fade in weight              oa.getF32ptr()[2] - refmap->mRadius); // z near @@ -1192,7 +1165,7 @@ void LLReflectionMapManager::updateUniforms()                  }                  // this neighbor may be sampled -                rpd.refNeighbor[ni++] = idx; +                mProbeData.refNeighbor[ni++] = idx;                  neighbor_count++;                  if (neighbor_count >= max_neighbors) @@ -1205,11 +1178,11 @@ void LLReflectionMapManager::updateUniforms()          if (nc == ni)          {              //no neighbors, tag as empty -            rpd.refIndex[count][1] = -1; +            mProbeData.refIndex[count][1] = -1;          }          else          { -            rpd.refIndex[count][2] = ni - nc; +            mProbeData.refIndex[count][2] = ni - nc;              // move the cursor forward              nc = ni; @@ -1247,19 +1220,19 @@ void LLReflectionMapManager::updateUniforms()      }  #endif -    rpd.refmapCount = count; +    mProbeData.refmapCount = count;      gPipeline.mHeroProbeManager.updateUniforms();      // Get the hero data. -    rpd.heroBox = gPipeline.mHeroProbeManager.mHeroData.heroBox; -    rpd.heroSphere = gPipeline.mHeroProbeManager.mHeroData.heroSphere; -    rpd.heroShape  = gPipeline.mHeroProbeManager.mHeroData.heroShape; -    rpd.heroMipCount = gPipeline.mHeroProbeManager.mHeroData.heroMipCount; -    rpd.heroProbeCount = gPipeline.mHeroProbeManager.mHeroData.heroProbeCount; +    mProbeData.heroBox = gPipeline.mHeroProbeManager.mHeroData.heroBox; +    mProbeData.heroSphere = gPipeline.mHeroProbeManager.mHeroData.heroSphere; +    mProbeData.heroShape  = gPipeline.mHeroProbeManager.mHeroData.heroShape; +    mProbeData.heroMipCount   = gPipeline.mHeroProbeManager.mHeroData.heroMipCount; +    mProbeData.heroProbeCount = gPipeline.mHeroProbeManager.mHeroData.heroProbeCount; -    //copy rpd into uniform buffer object +    //copy mProbeData into uniform buffer object      if (mUBO == 0)      {          glGenBuffers(1, &mUBO); @@ -1268,7 +1241,7 @@ void LLReflectionMapManager::updateUniforms()      {          LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("rmmsu - update buffer");          glBindBuffer(GL_UNIFORM_BUFFER, mUBO); -        glBufferData(GL_UNIFORM_BUFFER, sizeof(ReflectionProbeData), &rpd, GL_STREAM_DRAW); +        glBufferData(GL_UNIFORM_BUFFER, sizeof(ReflectionProbeData), &mProbeData, GL_STREAM_DRAW);          glBindBuffer(GL_UNIFORM_BUFFER, 0);      } @@ -1402,7 +1375,8 @@ void LLReflectionMapManager::renderDebug()  void LLReflectionMapManager::initReflectionMaps()  { -    U32 count = LL_MAX_REFLECTION_PROBE_COUNT; +    static LLCachedControl<U32> probe_count(gSavedSettings, "RenderReflectionProbeCount", 256U); +    U32 count = probe_count();      static LLCachedControl<U32> ref_probe_res(gSavedSettings, "RenderReflectionProbeResolution", 128U);      U32 probe_resolution = nhpo2(llclamp(ref_probe_res(), (U32)64, (U32)512)); diff --git a/indra/newview/llreflectionmapmanager.h b/indra/newview/llreflectionmapmanager.h index f81fb30738..9f88776ac2 100644 --- a/indra/newview/llreflectionmapmanager.h +++ b/indra/newview/llreflectionmapmanager.h @@ -56,6 +56,51 @@ public:          REALTIME = 2      }; +    // General guidance for UBOs is to statically allocate all of these fields to make your life ever so slightly easier. +    // Then set a "max" value for the number of probes you'll ever have, and use that to index into the arrays. +    // We do this with refmapCount.  The shaders will just pick up on it there. +    // This data structure should _always_ match what's in class3/deferred/reflectionProbeF.glsl. +    // The shader can and will break otherwise. +    // -Geenz 2025-03-10 +    struct ReflectionProbeData +    { +        // for box probes, matrix that transforms from camera space to a [-1, 1] cube representing the bounding box of +        // the box probe +        LLMatrix4 refBox[LL_MAX_REFLECTION_PROBE_COUNT]; + +        LLMatrix4 heroBox; + +        // for sphere probes, origin (xyz) and radius (w) of refmaps in clip space +        LLVector4 refSphere[LL_MAX_REFLECTION_PROBE_COUNT]; + +        // extra parameters +        //  x - irradiance scale +        //  y - radiance scale +        //  z - fade in +        //  w - znear +        LLVector4 refParams[LL_MAX_REFLECTION_PROBE_COUNT]; + +        LLVector4 heroSphere; + +        // indices used by probe: +        //  [i][0] - cubemap array index for this probe +        //  [i][1] - index into "refNeighbor" for probes that intersect this probe +        //  [i][2] - number of probes  that intersect this probe, or -1 for no neighbors +        //  [i][3] - priority (probe type stored in sign bit - positive for spheres, negative for boxes) +        GLint refIndex[LL_MAX_REFLECTION_PROBE_COUNT][4]; + +        // list of neighbor indices +        GLint refNeighbor[4096]; + +        GLint refBucket[256][4]; // lookup table for which index to start with for the given Z depth +        // numbrer of active refmaps +        GLint refmapCount; + +        GLint heroShape; +        GLint heroMipCount; +        GLint heroProbeCount; +    }; +      // allocate an environment map of the given resolution      LLReflectionMapManager(); @@ -207,8 +252,12 @@ private:      // if true, reset all probe render state on the next update (for teleports and sky changes)      bool mReset = false; +    float mResetFade = 1.f; +      // if true, only update the default probe      bool mPaused = false;      F32 mResumeTime = 0.f; + +    ReflectionProbeData mProbeData;  }; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index de673b591f..9a26ebc5f9 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1741,6 +1741,15 @@ bool idle_startup()              gAssetStorage->setUpstream(regionp->getHost());              gCacheName->setUpstream(regionp->getHost());          } + +        // It is entirely possible that we may get the friends list _before_ we have the callbacks registered to process that. +        // This will lead to the friends list not being processed properly and online statuses not being updated appropriately at login. +        // So, we need to make sure that we have the callbacks registered before we get the friends list. +        // This appears to crop up on some systems somewhere between STATE_AGENT_SEND and STATE_INVENTORY_SEND.  It's happened to me a few times now. +        // -Geenz 2025-03-12 +        LL_INFOS() << " AvatarTracker" << LL_ENDL; +        LLAvatarTracker::instance().registerCallbacks(gMessageSystem); +          do_startup_frame();          // Create login effect @@ -2040,8 +2049,6 @@ bool idle_startup()          LLMessageSystem* msg = gMessageSystem;          LL_INFOS() << " Inventory" << LL_ENDL;          LLInventoryModel::registerCallbacks(msg); -        LL_INFOS() << " AvatarTracker" << LL_ENDL; -        LLAvatarTracker::instance().registerCallbacks(msg);          LL_INFOS() << " Landmark" << LL_ENDL;          LLLandmark::registerCallbacks(msg);          do_startup_frame(); diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 75adb722f3..9d6f44c096 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -574,12 +574,13 @@ bool LLToolDragAndDrop::handleKey(KEY key, MASK mask)  bool LLToolDragAndDrop::handleToolTip(S32 x, S32 y, MASK mask)  { +    const F32 DRAG_N_DROP_TOOLTIP_DELAY = 0.1f;      if (!mToolTipMsg.empty())      {          LLToolTipMgr::instance().unblockToolTips();          LLToolTipMgr::instance().show(LLToolTip::Params()              .message(mToolTipMsg) -            .delay_time(gSavedSettings.getF32( "DragAndDropToolTipDelay" ))); +            .delay_time(DRAG_N_DROP_TOOLTIP_DELAY));          return true;      }      return false; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 8aa9bebb74..030dfeaa6f 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2928,15 +2928,15 @@ void LLViewerObject::fetchInventoryFromServer()          else          {              LL_WARNS() << "Using old task inventory path!" << LL_ENDL; -            // Results in processTaskInv -            LLMessageSystem *msg = gMessageSystem; -            msg->newMessageFast(_PREHASH_RequestTaskInventory); -            msg->nextBlockFast(_PREHASH_AgentData); -            msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); -            msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); -            msg->nextBlockFast(_PREHASH_InventoryData); -            msg->addU32Fast(_PREHASH_LocalID, mLocalID); -            msg->sendReliable(mRegionp->getHost()); +        // Results in processTaskInv +        LLMessageSystem* msg = gMessageSystem; +        msg->newMessageFast(_PREHASH_RequestTaskInventory); +        msg->nextBlockFast(_PREHASH_AgentData); +        msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); +        msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); +        msg->nextBlockFast(_PREHASH_InventoryData); +        msg->addU32Fast(_PREHASH_LocalID, mLocalID); +        msg->sendReliable(mRegionp->getHost());          }      }  } diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h index a857887247..5700d8b278 100644 --- a/indra/newview/llviewerprecompiledheaders.h +++ b/indra/newview/llviewerprecompiledheaders.h @@ -29,22 +29,28 @@  #ifndef LL_LLVIEWERPRECOMPILEDHEADERS_H  #define LL_LLVIEWERPRECOMPILEDHEADERS_H -#include "llwin32headers.h" -  // This file MUST be the first one included by each .cpp file  // in viewer.  // It is used to precompile headers for improved build speed.  #include "linden_common.h" +#include "llwin32headers.h" +  #include <algorithm>  #include <deque>  #include <functional> +#include <list>  #include <map>  #include <set>  #include <vector> +#include <string_view> +#include <unordered_map> +#include <unordered_set>  // Library headers from llcommon project: +#include "apply.h" +#include "function_types.h"  #include "indra_constants.h"  #include "llinitparam.h"  #include "llapp.h" @@ -54,8 +60,10 @@  #include "llerror.h"  #include "llfasttimer.h"  #include "llframetimer.h" +#include "llinstancetracker.h"  #include "llpointer.h"  #include "llprocessor.h" +#include "llrand.h"  #include "llrefcount.h"  #include "llsafehandle.h"  #include "llsd.h" @@ -65,11 +73,13 @@  #include "llstring.h"  #include "llsys.h"  #include "lltimer.h" +#include "lluuid.h"  #include "stdtypes.h"  #include "u64.h"  // Library includes from llmath project  #include "llmath.h" +#include "llbbox.h"  #include "llbboxlocal.h"  #include "llcamera.h"  #include "llcoord.h" @@ -77,9 +87,7 @@  #include "llcrc.h"  #include "llplane.h"  #include "llquantize.h" -#include "llrand.h"  #include "llrect.h" -#include "lluuid.h"  #include "m3math.h"  #include "m4math.h"  #include "llquaternion.h" @@ -91,11 +99,42 @@  #include "v4coloru.h"  #include "v4math.h"  #include "xform.h" +#include "llvector4a.h" +#include "llmatrix4a.h" +#include "lloctree.h" +#include "llvolume.h" +// Library includes from llfilesystem project  #include "lldir.h"  // Library includes from llmessage project +#include "llassetstorage.h" +#include "llavatarnamecache.h"  #include "llcachename.h" +#include "llcorehttputil.h" + +// Library includes from llrender project +#include "llgl.h" +#include "llrender.h" + +// Library includes from llrender project +#include "llcharacter.h" + +// Library includes from llui project +#include "llnotifications.h" +#include "llpanel.h" +#include "llfloater.h" + +#include <boost/function.hpp> +#include <boost/signals2.hpp> +#include <boost/unordered_set.hpp> +#include <boost/unordered_map.hpp> +#include <boost/json.hpp> +#include "glm/glm.hpp" +#include "glm/gtc/type_ptr.hpp" +#include "glm/ext/quaternion_float.hpp" +#include "glm/gtx/quaternion.hpp" +#include "glm/gtx/matrix_decompose.hpp"  #endif diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 6b4878e7fa..f2e34dd56e 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -920,7 +920,8 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag          U32 face_count = 0;          // get adjusted bias based on image resolution -        F32 max_discard = F32(imagep->getMaxDiscardLevel()); +        LLImageGL* img = imagep->getGLTexture(); +        F32 max_discard = F32(img ? img->getMaxDiscardLevel() : MAX_DISCARD_LEVEL);          F32 bias = llclamp(max_discard - 2.f, 1.f, LLViewerTexture::sDesiredDiscardBias);          // convert bias into a vsize scaler diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 2a71cc05c1..e560968119 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -66,6 +66,7 @@  #include "llchatentry.h"  #include "indra_constants.h"  #include "llassetstorage.h" +#include "lldate.h"  #include "llerrorcontrol.h"  #include "llfontgl.h"  #include "llmousehandler.h" @@ -79,14 +80,12 @@  #include "message.h"  #include "object_flags.h"  #include "lltimer.h" -#include "llviewermenu.h"  #include "lltooltip.h"  #include "llmediaentry.h"  #include "llurldispatcher.h"  #include "raytrace.h"  // newview includes -#include "llagent.h"  #include "llbox.h"  #include "llchicletbar.h"  #include "llconsole.h" @@ -118,7 +117,6 @@  #include "llfontfreetype.h"  #include "llgesturemgr.h"  #include "llglheaders.h" -#include "lltooltip.h"  #include "llhudmanager.h"  #include "llhudobject.h"  #include "llhudview.h" @@ -133,7 +131,6 @@  #include "llmorphview.h"  #include "llmoveview.h"  #include "llnavigationbar.h" -#include "llnotificationhandler.h"  #include "llpaneltopinfobar.h"  #include "llpopupview.h"  #include "llpreviewtexture.h" @@ -166,17 +163,13 @@  #include "lltoolselectland.h"  #include "lltrans.h"  #include "lluictrlfactory.h" -#include "llurldispatcher.h"        // SLURL from other app instance  #include "llversioninfo.h"  #include "llvieweraudio.h" -#include "llviewercamera.h"  #include "llviewergesture.h"  #include "llviewertexturelist.h"  #include "llviewerinventory.h" -#include "llviewerinput.h"  #include "llviewermedia.h"  #include "llviewermediafocus.h" -#include "llviewermenu.h"  #include "llviewermessage.h"  #include "llviewerobjectlist.h"  #include "llviewerparcelmgr.h" @@ -210,7 +203,6 @@  #include "llwindowlistener.h"  #include "llviewerwindowlistener.h" -#include "llpaneltopinfobar.h"  #include "llcleanup.h"  #if LL_WINDOWS @@ -4808,26 +4800,23 @@ void LLViewerWindow::saveImageLocal(LLImageFormatted *image, const snapshot_save      }      // Look for an unused file name -    bool is_snapshot_name_loc_set = isSnapshotLocSet(); +    auto is_snapshot_name_loc_set = isSnapshotLocSet();      std::string filepath; -    S32 i = 1; -    S32 err = 0; -    std::string extension("." + image->getExtension()); +    auto i = 1; +    auto err = 0; +    auto extension("." + image->getExtension()); +    auto now = LLDate::now();      do      {          filepath = sSnapshotDir;          filepath += gDirUtilp->getDirDelimiter();          filepath += sSnapshotBaseName; - -        if (is_snapshot_name_loc_set) -        { -            filepath += llformat("_%.3d",i); -        } - +        filepath += now.toLocalDateString("_%Y-%m-%d_%H%M%S"); +        filepath += llformat("%.2d", i);          filepath += extension;          llstat stat_info; -        err = LLFile::stat( filepath, &stat_info ); +        err = LLFile::stat(filepath, &stat_info);          i++;      }      while( -1 != err  // Search until the file is not found (i.e., stat() gives an error). diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 5c2206a3b1..808b36b215 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -763,6 +763,9 @@       name="SelectedOutfitTextColor"       reference="EmphasisColor" />      <color +     name="SearchableControlHighlightColor" +     value="0.5 0.1 0.1 1" /> +    <color       name="SilhouetteChildColor"       value="0.13 0.42 0.77 1" />      <color diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index b147c49224..4bed43dd1d 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -31,7 +31,6 @@ Sichtweite: [DRAW_DISTANCE] m  Bandbreite: [NET_BANDWITH] kbit/s  LOD-Faktor: [LOD_FACTOR]  Darstellungsqualität: [RENDER_QUALITY] -Erweitertes Beleuchtungsmodell: [GPU_SHADERS]  Texturspeicher: [TEXTURE_MEMORY] MB</string>  	<string name="AboutOSXHiDPI">HiDPI-Anzeigemodus: [HIDPI]</string>  	<string name="AboutLibs">J2C-Decoderversion: [J2C_VERSION] diff --git a/indra/newview/skins/default/xui/en/floater_fast_timers.xml b/indra/newview/skins/default/xui/en/floater_fast_timers.xml index 00411ba20b..ae907bcb5f 100644 --- a/indra/newview/skins/default/xui/en/floater_fast_timers.xml +++ b/indra/newview/skins/default/xui/en/floater_fast_timers.xml @@ -75,7 +75,7 @@          step_size="16"          doc_pos="0"          doc_size="3000" -        page_size="0" +        page_size="50"            />      </layout_panel>      <layout_panel name="timers_panel" diff --git a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml index 9db5502387..9a0623f66e 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml @@ -859,6 +859,23 @@    </combo_box>    <slider +    control_name="RenderReflectionProbeCount" +    decimal_digits="0" +    follows="left|top" +    height="16" +    increment="1" +    initial_value="256" +    label="Max. Reflection Probes:" +    label_width="145" +    layout="topleft" +    left="420" +    min_val="1" +    max_val="256" +    name="MaxProbes" +    top_delta="24" +    width="260" /> + +  <slider      control_name="RenderExposure"      decimal_digits="1"      follows="left|top" diff --git a/indra/newview/skins/default/xui/en/panel_performance_preferences.xml b/indra/newview/skins/default/xui/en/panel_performance_preferences.xml index c1260f3b4a..ece9bb2552 100644 --- a/indra/newview/skins/default/xui/en/panel_performance_preferences.xml +++ b/indra/newview/skins/default/xui/en/panel_performance_preferences.xml @@ -427,6 +427,16 @@     layout="topleft"     top="80"     left="213" +   name="0_lbl" +   width="7"> +    0 +  </text> +  <text +   follows="left|top" +   font="SansSerifSmall" +   height="18" +   layout="topleft" +   left_pad="31"     name="1_lbl"     width="7">      1 @@ -436,7 +446,7 @@     font="SansSerifSmall"     height="18"     layout="topleft" -   left_pad="31" +   left_pad="30"     name="2_lbl"     width="7">      2 @@ -479,16 +489,6 @@     left_pad="30"     name="6_lbl"     width="7"> -      6 -  </text> -  <text -   follows="left|top" -   font="SansSerifSmall" -   height="18" -   layout="topleft" -   left_pad="30" -   name="7_lbl" -   width="7"> -    7 +    6    </text>  </panel> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index c6c0e9e77d..cf86427477 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -29,7 +29,6 @@ Distancia de dibujo: [DRAW_DISTANCE]m  Ancho de banda: [NET_BANDWITH]kbit/s  Factor LOD: [LOD_FACTOR]  Calidad de renderización: [RENDER_QUALITY] -Modelo de iluminación avanzado: [GPU_SHADERS]  Memoria de textura: [TEXTURE_MEMORY]MB</string>  	<string name="AboutOSXHiDPI">Modo de visualización HiDPi: [HIDPI]</string>  	<string name="AboutLibs">Versión de descodificador J2C: [J2C_VERSION]  diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 737b570e98..3889e26aee 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -32,7 +32,6 @@ Distance de dessin : [DRAW_DISTANCE]m  Bande passante : [NET_BANDWITH] kbit/s  Facteur LOD (niveau de détail) : [LOD_FACTOR]  Qualité de rendu : [RENDER_QUALITY] -Modèle d’éclairage avancé : [GPU_SHADERS]  Mémoire textures : [TEXTURE_MEMORY] Mo</string>  	<string name="AboutOSXHiDPI">Mode d'affichage HiDPI : [HIDPI]</string>  	<string name="AboutLibs">J2C Decoder Version: [J2C_VERSION]  diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 69381ef00e..270e7ac3a1 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -31,7 +31,6 @@ Distanza visualizzazione: [DRAW_DISTANCE]m  Larghezza banda: [NET_BANDWITH]kbit/s  Fattore livello di dettaglio: [LOD_FACTOR]  Qualità di rendering: [RENDER_QUALITY] -Modello illuminazione avanzato: [GPU_SHADERS]  Memoria texture: [TEXTURE_MEMORY]MB</string>  	<string name="AboutOSXHiDPI">Modalità display HiDPI: [HIDPI]</string>  	<string name="AboutLibs">J2C Versione decoder: [J2C_VERSION]  diff --git a/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml index a031cd7176..40e7800adc 100644 --- a/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml +++ b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml @@ -96,25 +96,4 @@  	<text name="photo_desc">  		(0.0~4.0の値を入れてください)  	</text> -	<text name="1_lbl"> -		1 -	</text> -	<text name="2_lbl"> -		2 -	</text> -	<text name="3_lbl"> -		3 -	</text> -	<text name="4_lbl"> -		4 -	</text> -	<text name="5_lbl"> -		5 -	</text> -	<text name="6_lbl"> -		6 -	</text> -	<text name="7_lbl"> -		7 -	</text>  </panel> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index d04c514322..106bf91d0c 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -66,7 +66,6 @@ SLURL:<nolink>[SLURL]</nolink>  帯域幅:[NET_BANDWITH]kbit/秒  LOD係数:[LOD_FACTOR]  描画の質:[RENDER_QUALITY] -高度な光源モデル:[GPU_SHADERS]  テクスチャメモリ:[TEXTURE_MEMORY]㎆  	</string>  	<string name="AboutOSXHiDPI"> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index 26ec6cc9dc..8032443020 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -49,7 +49,6 @@ Pole widzenia (Draw Distance): [DRAW_DISTANCE]m  Przepustowość (Bandwidth): [NET_BANDWITH]kbit/s  Mnożnik poziomu detali (LOD Factor): [LOD_FACTOR]  Jakość wyświetlania (Render quality): [RENDER_QUALITY] -Zaawansowane oświetlenie (Advanced Lighting Model): [GPU_SHADERS]  Pamięć tekstur (Texture memory): [TEXTURE_MEMORY]MB  Pamięć podręczna dysku (Disk cache): [DISK_CACHE_INFO]  	</string> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 0b12dd2aa0..3e33744b85 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -29,7 +29,6 @@ Estabelecer a distância: [DRAW_DISTANCE]m  Largura da banda: [NET_BANDWITH]kbit/s  LOD fator: [LOD_FACTOR]  Qualidade de renderização: [RENDER_QUALITY] -Modelo avançado de luzes: [GPU_SHADERS]  Memória de textura: [TEXTURE_MEMORY]MB</string>  	<string name="AboutOSXHiDPI">HiDPI modo de exibição: [HIDPI]</string>  	<string name="AboutLibs">Versão do J2C Decoder: [J2C_VERSION]  diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 649d5e7107..10b0d3578f 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -69,7 +69,6 @@ SLURL: <nolink>[SLURL]</nolink>  Ширина канала: [NET_BANDWITH] кбит/с  Коэффициент детализации: [LOD_FACTOR]  Качество визуализации: [RENDER_QUALITY] -Расширенная модель освещения: [GPU_SHADERS]  Память текстур: [TEXTURE_MEMORY] МБ  	</string>  	<string name="AboutOSXHiDPI"> diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index f80d8e3382..d992788e13 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -69,7 +69,6 @@ UI Ölçeklendirme: [UI_SCALE]  Bant genişliği: [NET_BANDWITH]kbit/s  LOD faktörü: [LOD_FACTOR]  İşleme kalitesi: [RENDER_QUALITY] -Gelişmiş Aydınlatma Modeli: [GPU_SHADERS]  Doku belleği: [TEXTURE_MEMORY]MB  	</string>  	<string name="AboutOSXHiDPI"> diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index bdb16c9bf1..d053d2b30d 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -69,7 +69,6 @@  頻寬:[NET_BANDWITH]千位元/秒  細節層次率:[LOD_FACTOR]  呈像品質:[RENDER_QUALITY] -進階照明模型:[GPU_SHADERS]  材質記憶體:[TEXTURE_MEMORY]MB  	</string>  	<string name="AboutOSXHiDPI"> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index fcf5a37364..e9112694d9 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1029,6 +1029,12 @@ class Darwin_x86_64_Manifest(ViewerManifest):                                  ):                          dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile) +                        oldpath = os.path.join("@rpath", libfile) +                        self.run_command( +                            ['install_name_tool', '-change', oldpath, +                             '@executable_path/../Resources/%s' % libfile, +                             executable]) +                  # our apps                  executable_path = {}                  embedded_apps = [ (os.path.join("llplugin", "slplugin"), "SLPlugin.app") ] | 
