From 120ca8328730d20585bf6011177e8dbcd1aa6fa4 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 30 Jun 2018 15:54:27 +0200 Subject: [PATCH 01/75] [FIXED] 'Creator' and 'Owner' on the build floater show the full SLurl rather than resolved name --HG-- branch : RLVa --- indra/newview/llpanelpermissions.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 6a4e5f4e25..64cef9fc1c 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -394,25 +394,25 @@ void LLPanelPermissions::refresh() // LLSelectMgr::getInstance()->selectGetCreator(mCreatorID, creator_app_link); // Style for creator and owner links (both group and agent) - LLStyle::Params style_params; - LLColor4 link_color = LLUIColorTable::instance().getColor("HTMLLinkColor"); - style_params.color = link_color; - style_params.readonly_color = link_color; - style_params.is_link = true; // link will be added later - const LLFontGL* fontp = mLabelCreatorName->getFont(); - style_params.font.name = LLFontGL::nameFromFont(fontp); - style_params.font.size = LLFontGL::sizeFromFont(fontp); - style_params.font.style = "UNDERLINE"; + //LLStyle::Params style_params; + //LLColor4 link_color = LLUIColorTable::instance().getColor("HTMLLinkColor"); + //style_params.color = link_color; + //style_params.readonly_color = link_color; + //style_params.is_link = true; // link will be added later + //const LLFontGL* fontp = mLabelCreatorName->getFont(); + //style_params.font.name = LLFontGL::nameFromFont(fontp); + //style_params.font.size = LLFontGL::sizeFromFont(fontp); + //style_params.font.style = "UNDERLINE"; LLAvatarName av_name; - style_params.link_href = creator_app_link; + //style_params.link_href = creator_app_link; // [RLVa:KB] - Checked: RLVa-2.0.1 // Only anonymize the creator if all of the selection was created by the same avie who's also the owner or they're a nearby avie if ( (RlvActions::isRlvEnabled()) && (creators_identical) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, mCreatorID)) && ( (mCreatorID == mOwnerID) || (RlvUtil::isNearbyAgent(mCreatorID))) ) { creator_app_link = LLSLURL("agent", mCreatorID, "rlvanonym").getSLURLString(); } - mLabelCreatorName->setText(creator_app_link, style_params); + mLabelCreatorName->setText(creator_app_link); // [/RLVa:KB] // if (LLAvatarNameCache::get(mCreatorID, &av_name)) // { @@ -478,13 +478,13 @@ void LLPanelPermissions::refresh() owner_id = mLastOwnerID; } - style_params.link_href = owner_app_link; +// style_params.link_href = owner_app_link; // [RLVa:KB] - Checked: RLVa-2.0.1 if ( (RlvActions::isRlvEnabled()) && (owners_identical) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, mOwnerID)) ) { owner_app_link = LLSLURL("agent", mOwnerID, "rlvanonym").getSLURLString(); } - mLabelOwnerName->setText(owner_app_link, style_params); + mLabelOwnerName->setText(owner_app_link); // [/RLVa:KB] // if (LLAvatarNameCache::get(owner_id, &av_name)) // { From 4de98aa4c6559bfa23d005d96db4f38a43a845c5 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 21 Jul 2018 10:11:06 +0200 Subject: [PATCH 02/75] Added tag RLVa-2.2.0 for changeset 06290281ca53 --HG-- branch : RLVa --- .hgtags | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.hgtags b/.hgtags index 404db8512d..6f04f7eadd 100755 --- a/.hgtags +++ b/.hgtags @@ -1217,4 +1217,5 @@ a563f7e215c7883c1cfd20908085687a0ed96284 RLVa-1.4.0 0c8f23b2c4cf96d1a08bd527b3ccb6339a9fdb60 RLVa-1.4.6 674db463770b78f836fc9c87a1b2235e212a576c RLVa-1.4.7 7fc0f5d537b46dc1a9f09a1db4ac67752e3462b1 RLVa-2.0.0 -9372d6c0a565581d907a8d6d2dda74a5ae05ade5 RLVa-2.1.0 \ No newline at end of file +9372d6c0a565581d907a8d6d2dda74a5ae05ade5 RLVa-2.1.0 +06290281ca53c25721b043fbb1843438402d47ba RLVa-2.2.0 From 528c5add06a3e1598133b5706681e88d6b997f83 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 24 Jul 2018 00:51:05 +0200 Subject: [PATCH 03/75] Removed RLVa code artifact --HG-- branch : Appearance-Misc --- indra/newview/llappearancemgr.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index f390ae474f..b38892a37e 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3080,13 +3080,6 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, LLPointergetIsLinkType() && item->getLinkedUUID() == item_id) { -// [RLVa:KB] - Checked: 2013-02-12 (RLVa-1.4.8) - if (rlv_handler_t::isEnabled()) - { - RLV_ASSERT(rlvPredCanRemoveItem(item)); - } -// [/RLVa:KB] - // if (item->getType() == LLAssetType::AT_OBJECT) // [RLVa:KB] - Checked: 2013-02-12 (RLVa-1.4.8) if (immediate_delete) From 89d5b12bc28f08701b6081eca7acd244296eba85 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Fri, 21 Dec 2018 23:11:23 +0100 Subject: [PATCH 04/75] Throttled @setgroup because some people can't help themselves and now we can't have nice things -> One (unowned) @setgroup is allowed every 60 seconds across all objects -> An object obtaining a @setgroup lock is allowed to bypass the throttle a single time to allow @setgroup=n,setgroup:[;]=force to always succeed regardless of any/other objects' command history --HG-- branch : RLVa --- indra/newview/rlvcommon.cpp | 2 ++ indra/newview/rlvdefines.h | 2 ++ indra/newview/rlvhandler.cpp | 36 ++++++++++++++++++++++++++++++++++++ indra/newview/rlvhandler.h | 4 ++++ 4 files changed, 44 insertions(+) diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 6f04b40437..e9c26586d0 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -395,6 +395,8 @@ const char* RlvStrings::getStringFromReturnCode(ERlvCmdRet eRet) return "no active behaviours"; case RLV_RET_FAILED_BLOCKED: return "blocked object"; + case RLV_RET_FAILED_THROTTLED: + return "throttled"; // The following are identified by the chat verb case RLV_RET_RETAINED: case RLV_RET_SUCCESS: diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index f8cb3f3295..dc552b528d 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -79,6 +79,7 @@ const S32 RLVa_VERSION_PATCH = 0; #define RLV_PUTINV_PREFIX "#RLV/~" #define RLV_PUTINV_SEPARATOR "/" #define RLV_PUTINV_MAXDEPTH 4 +#define RLV_SETGROUP_THROTTLE 60.f #define RLV_SETROT_OFFSET F_PI_BY_TWO // @setrot is off by 90 degrees with the rest of SL #define RLV_STRINGS_FILE "rlva_strings.xml" @@ -314,6 +315,7 @@ enum ERlvCmdRet { RLV_RET_FAILED_DEPRECATED, // Command failed (deprecated and no longer supported) RLV_RET_FAILED_NOBEHAVIOUR, // Command failed (force modifier on an object with no active restrictions) RLV_RET_FAILED_BLOCKED, // Command failed (object is blocked) + RLV_RET_FAILED_THROTTLED, // Command failed (throttled) RLV_RET_NO_PROCESSOR // Command doesn't have a template processor define (legacy code) }; #define RLV_RET_SUCCEEDED(eCmdRet) (((eCmdRet) & RLV_RET_SUCCESS) == RLV_RET_SUCCESS) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 408cf9cfe1..838dbbd169 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -193,6 +193,21 @@ bool RlvHandler::hasBehaviourRoot(const LLUUID& idObjRoot, ERlvBehaviour eBhvr, return false; } +bool RlvHandler::ownsBehaviour(const LLUUID& idObj, ERlvBehaviour eBhvr) const +{ + bool fHasBhvr = false; + for (const auto& objEntry : m_Objects) + { + if (objEntry.second.hasBehaviour(eBhvr, false)) + { + if (objEntry.first != idObj) + return false; + fHasBhvr = true; + } + } + return fHasBhvr; +} + // ============================================================================ // Behaviour exception handling // @@ -646,6 +661,24 @@ void RlvHandler::onIMQueryListResponse(const LLSD& sdNotification, const LLSD sd // Command specific helper functions - @setgroup // +bool RlvHandler::checkActiveGroupThrottle(const LLUUID& idRlvObj) +{ + bool fAllow = m_GroupChangeExpiration.first.checkExpirationAndReset(llmax(RLV_SETGROUP_THROTTLE, 5.f)); + if (fAllow) + { + // (Un)owned expiration resets the last lock owner + m_GroupChangeExpiration.second.setNull(); + } + else if ( (!fAllow) && (m_GroupChangeExpiration.second.isNull()) && (ownsBehaviour(idRlvObj, RLV_BHVR_SETGROUP)) ) + { + // The current lock owner wants to change the active group (title) before the expiration - allow once + m_GroupChangeExpiration.second = idRlvObj; + m_GroupChangeExpiration.first.setTimerExpirySec(llmax(RLV_SETGROUP_THROTTLE, 5.f)); + fAllow = true; + } + return fAllow; +} + void RlvHandler::changed(const LLUUID& idGroup, LLGroupChange change) { // If we're receiving information about a group we're not interested in, we forgot a removeObserver somewhere @@ -2857,6 +2890,9 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCm if (fValid) { + if (!gRlvHandler.checkActiveGroupThrottle(rlvCmd.getObjectID())) + return RLV_RET_FAILED_THROTTLED; + if (optionList.size() == 1) gRlvHandler.setActiveGroup(idGroup); else if (optionList.size() == 2) diff --git a/indra/newview/rlvhandler.h b/indra/newview/rlvhandler.h index 0601cf1977..85acec1bce 100644 --- a/indra/newview/rlvhandler.h +++ b/indra/newview/rlvhandler.h @@ -68,6 +68,8 @@ public: bool hasBehaviourExcept(ERlvBehaviour eBhvr, const std::string& strOption, const LLUUID& idObj) const; // Returns TRUE if at least one object in the linkset with specified root ID contains the specified behaviour (and optional option) bool hasBehaviourRoot(const LLUUID& idObjRoot, ERlvBehaviour eBhvr, const std::string& strOption = LLStringUtil::null) const; + // Returns TRUE if the specified object is the only object containing the specified behaviour + bool ownsBehaviour(const LLUUID& idObj, ERlvBehaviour eBhvr) const; // Adds or removes an exception for the specified behaviour void addException(const LLUUID& idObj, ERlvBehaviour eBhvr, const RlvExceptionOption& varOption); @@ -141,6 +143,7 @@ public: static bool setEnabled(bool fEnable); protected: // Command specific helper functions (NOTE: these generally do not perform safety checks) + bool checkActiveGroupThrottle(const LLUUID& idRlvObj); // @setgroup=force void clearOverlayImage(); // @setoverlay=n void setActiveGroup(const LLUUID& idGroup); // @setgroup=force void setActiveGroupRole(const LLUUID& idGroup, const std::string& strRole); // @setgroup=force @@ -256,6 +259,7 @@ protected: mutable LLVector3d m_posSitSource; // @standtp=n (mutable because onForceXXX handles are all declared as const) mutable LLUUID m_idAgentGroup; // @setgroup=n std::pair m_PendingGroupChange; // @setgroup=force + std::pair m_GroupChangeExpiration; // @setgroup=force LLPointer m_pOverlayImage = nullptr; // @setoverlay=n int m_nOverlayOrigBoost = 0; // @setoverlay=n From d0b42a90618c2579fe23eca97f267a4dee5e46e2 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 22 Dec 2018 15:37:28 +0100 Subject: [PATCH 05/75] Updated FindWindowsSDK.cmake with new Win10 SDK versions --HG-- branch : Viewer-Build --- indra/cmake/FindWindowsSDK.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/indra/cmake/FindWindowsSDK.cmake b/indra/cmake/FindWindowsSDK.cmake index c536bc7a89..fe20656671 100644 --- a/indra/cmake/FindWindowsSDK.cmake +++ b/indra/cmake/FindWindowsSDK.cmake @@ -73,6 +73,9 @@ macro(_winsdk_announce) endmacro() set(_winsdk_win10vers + 10.0.17133.0 # Redstone 4 aka Win10 1803 "April 1018 Update" + 10.0.16299.0 # Redstone 3 aka Win10 1709 "Fall Creators Update" + 10.0.15063.0 # Redstone 2 aka Win10 1703 "Creators Update" 10.0.14393.0 # Redstone aka Win10 1607 "Anniversary Update" 10.0.10586.0 # TH2 aka Win10 1511 10.0.10240.0 # Win10 RTM From 9d5ee4722e876c42f43f62da1df7769f375db65f Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 23 Dec 2018 15:13:16 +0100 Subject: [PATCH 06/75] [FIXED] Unreachable code compiler warnings --HG-- branch : Viewer-Build --- indra/llimage/llimagejpeg.cpp | 2 +- indra/newview/llweb.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llimage/llimagejpeg.cpp b/indra/llimage/llimagejpeg.cpp index 3b1b060c02..eaccd62462 100644 --- a/indra/llimage/llimagejpeg.cpp +++ b/indra/llimage/llimagejpeg.cpp @@ -386,7 +386,7 @@ boolean LLImageJPEG::encodeEmptyOutputBuffer( j_compress_ptr cinfo ) { self->setLastError("Out of memory in LLImageJPEG::encodeEmptyOutputBuffer( j_compress_ptr cinfo )"); LLTHROW(LLContinueError("Out of memory in LLImageJPEG::encodeEmptyOutputBuffer( j_compress_ptr cinfo )")); - return false; +// return false; } memcpy( new_buffer, self->mOutputBuffer, self->mOutputBufferSize ); /* Flawfinder: ignore */ delete[] self->mOutputBuffer; diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 768db047a4..3ab22d4212 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -274,6 +274,6 @@ bool LLWeb::useExternalBrowser(const std::string &url) boost::match_results matches; return boost::regex_search(url, matches, pattern); } - return false; +// return false; #endif } From 8be8dc903d73da0dde181d61706cad15c4ab910b Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 5 Jan 2019 11:52:58 +0100 Subject: [PATCH 07/75] [FIXED] @setoverlay_alpha causes a diagonal line to appear on the rendered texture -> Rendering order was off FS vs due to the change from quad -> trig there --HG-- branch : RLVa --- indra/newview/rlvhandler.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 838dbbd169..6422e366b8 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -3626,19 +3626,7 @@ void RlvHandler::renderOverlay() const LLVector3 overlayTint = RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_OVERLAY_TINT)->getValue(); gGL.color4f(overlayTint.mV[0], overlayTint.mV[1], overlayTint.mV[2], llclamp(RlvBehaviourDictionary::instance().getModifier(RLV_MODIFIER_OVERLAY_ALPHA)->getValue(), 0.0f, 1.0f)); - gGL.begin(LLRender::QUADS); - gGL.texCoord2f(1.f, 1.f); - gGL.vertex2i(nWidth, nHeight); - - gGL.texCoord2f(0.f, 1.f); - gGL.vertex2i(0, nHeight); - - gGL.texCoord2f(0.f, 0.f); - gGL.vertex2i(0, 0); - - gGL.texCoord2f(1.f, 0.f); - gGL.vertex2i(nWidth, 0); - gGL.end(); + gl_rect_2d_simple_tex(nWidth, nHeight); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); From 82fb5042df8de3b13d1f26620c5d33e00cb3f9bf Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Fri, 11 Jan 2019 23:59:58 +0100 Subject: [PATCH 08/75] Added 'RLVaSplitRedirectChat' debug setting to split long chat lines when @redirchat restricted --HG-- branch : RLVa --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/rlvcommon.cpp | 14 ++++++++++++++ indra/newview/rlvcommon.h | 2 ++ indra/newview/rlvdefines.h | 1 + indra/newview/rlvhandler.cpp | 7 ++++++- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 5786c8c243..bc6a85abe7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -255,6 +255,17 @@ Value 1 + RLVaSplitRedirectChat + + Comment + Splits long nearby chat lines across multiple messages when @redir* restricted. + Persist + 1 + Type + Boolean + Value + 0 + RLVaTopLevelMenu Comment diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index e9c26586d0..582f97d59c 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -634,6 +634,20 @@ bool RlvUtil::sendChatReply(S32 nChannel, const std::string& strUTF8Text) return true; } +bool RlvUtil::sendChatReplySplit(S32 nChannel, const std::string& strMsg, char chSplit) +{ + std::list msgList; + utf8str_split(msgList, strMsg, MAX_MSG_STR_LEN, chSplit); + for (const std::string& strMsg : msgList) + { + if (!sendChatReply(nChannel, strMsg)) + { + return false; + } + } + return true; +} + void RlvUtil::sendIMMessage(const LLUUID& idRecipient, const std::string& strMsg, char chSplit) { const LLUUID idSession = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, idRecipient); diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index 8a36e97aa6..47a8ebf148 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -99,6 +99,7 @@ public: static bool getHideLockedAttach() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDATTACH, false); } static bool getHideLockedInventory() { return rlvGetSetting(RLV_SETTING_HIDELOCKEDINVENTORY, false); } static bool getSharedInvAutoRename() { return rlvGetSetting(RLV_SETTING_SHAREDINVAUTORENAME, true); } + static bool getSplitRedirectChat() { return rlvGetSetting(RLV_SETTING_SPLITREDIRECTCHAT, false); } static bool getLoginLastLocation() { return rlvGetPerUserSetting(RLV_SETTING_LOGINLASTLOCATION, true); } static void updateLoginLastLocation(); @@ -188,6 +189,7 @@ public: static bool isValidReplyChannel(S32 nChannel, bool fLoopback = false); static bool sendChatReply(S32 nChannel, const std::string& strUTF8Text); static bool sendChatReply(const std::string& strChannel, const std::string& strUTF8Text); + static bool sendChatReplySplit(S32 nChannel, const std::string& strUTF8Text, char chSplit = ' '); static void sendIMMessage(const LLUUID& idTo, const std::string& strMsg, char chSplit); protected: static bool m_fForceTp; // @standtp diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index dc552b528d..8c839e8dfb 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -378,6 +378,7 @@ enum ERlvAttachGroupType #define RLV_SETTING_LOGINLASTLOCATION "RLVaLoginLastLocation" #define RLV_SETTING_SHAREDINVAUTORENAME "RLVaSharedInvAutoRename" #define RLV_SETTING_SHOWASSERTIONFAIL "RLVaShowAssertionFailures" +#define RLV_SETTING_SPLITREDIRECTCHAT "RLVaSplitRedirectChat" #define RLV_SETTING_TOPLEVELMENU "RLVaTopLevelMenu" #define RLV_SETTING_WEARREPLACEUNLOCKED "RLVaWearReplaceUnlocked" diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 6422e366b8..dad47f1874 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -1197,7 +1197,12 @@ bool RlvHandler::redirectChatOrEmote(const std::string& strUTF8Text) const { S32 nChannel = boost::get(itRedir->second.varOption); if (RlvActions::canSendChannel(nChannel)) - RlvUtil::sendChatReply(nChannel, strUTF8Text); + { + if (!RlvSettings::getSplitRedirectChat()) + RlvUtil::sendChatReply(nChannel, strUTF8Text); + else + RlvUtil::sendChatReplySplit(nChannel, strUTF8Text); + } } return true; From 1474703e4670e360949d0a70ceb2205aaa224645 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 20 Jan 2019 15:28:50 +0100 Subject: [PATCH 09/75] Added 'Split Long Redirected Chat' to the RLVa (and group chat items together) --HG-- branch : RLVa --- .../skins/default/xui/en/menu_viewer.xml | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index ce6b6fbd6b..4853a13b1b 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1642,6 +1642,27 @@ function="ToggleControl" parameter="RestrainedLoveCanOOC" /> + + + + + + + + + @@ -1662,16 +1683,6 @@ function="ToggleControl" parameter="RestrainedLoveForbidGiveToRLV" /> - - - - From 8d77151da100279352f24aa5cc8eba52e0ee1c7b Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 20 Jan 2019 16:41:32 +0100 Subject: [PATCH 10/75] [FIXED] FIRE-23473: @shownames exceptions should not have their name anonymized in nearby chat --HG-- branch : RLVa --- indra/newview/llviewermessage.cpp | 2 +- indra/newview/rlvactions.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 4734639cfa..234036d340 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2478,7 +2478,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) { RlvUtil::filterNames(chat.mFromName); } - else if (chat.mFromID != gAgent.getID()) + else if (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, chat.mFromID)) { chat.mFromName = RlvStrings::getAnonym(chat.mFromName); chat.mRlvNamesFiltered = TRUE; diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index 83c44583d8..f5c5dc52a6 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -216,7 +216,7 @@ bool RlvActions::canShowName(EShowNamesContext eContext, const LLUUID& idAgent) case SNC_DEFAULT: case SNC_TELEPORTOFFER: case SNC_TELEPORTREQUEST: - return gRlvHandler.isException(RLV_BHVR_SHOWNAMES, idAgent); + return gRlvHandler.isException(RLV_BHVR_SHOWNAMES, idAgent) || (gAgentID == idAgent); } } return false; From beac43a6abc372c044877f152eb9f1c7b6098f60 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 20 Jan 2019 16:48:44 +0100 Subject: [PATCH 11/75] Added tag RLVa-2.2.1 for changeset f6772b7a39fc --HG-- branch : RLVa --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 6f04f7eadd..12a770571c 100755 --- a/.hgtags +++ b/.hgtags @@ -1219,3 +1219,4 @@ a563f7e215c7883c1cfd20908085687a0ed96284 RLVa-1.4.0 7fc0f5d537b46dc1a9f09a1db4ac67752e3462b1 RLVa-2.0.0 9372d6c0a565581d907a8d6d2dda74a5ae05ade5 RLVa-2.1.0 06290281ca53c25721b043fbb1843438402d47ba RLVa-2.2.0 +f6772b7a39fcaa9182a29a981901f47070960e23 RLVa-2.2.1 From 20e38d96c6181da53000f09062d36291ab4c952b Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 30 Mar 2019 15:50:56 +0100 Subject: [PATCH 12/75] [FIXED] Can't run the viewer from within Visual Studio without also building the installer -> Working directory was set to the build folder rather than the source folder --HG-- branch : Viewer-Build --- indra/newview/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8927774b99..d8a302b465 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1872,6 +1872,21 @@ if (WINDOWS) windows-crash-logger ) + # sets the 'working directory' for debugging from visual studio. + if (NOT UNATTENDED) + add_custom_command( + TARGET ${VIEWER_BINARY_NAME} POST_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe + ARGS + --solution + ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln + --workingdir + ${VIEWER_BINARY_NAME} + "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging." + ) + endif (NOT UNATTENDED) + if (PACKAGE) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2 From 1bb955db354d8cbd142e96d57c90d2a0eaed6f05 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 1 Apr 2019 19:57:00 +0200 Subject: [PATCH 13/75] [FIXED] Can't run the viewer from within Visual Studio without also building the installer -> Updater executable isn't copied to the build directory --HG-- branch : Viewer-Build --- indra/newview/llappviewer.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index aefb82ff72..096ff8376f 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1134,6 +1134,9 @@ bool LLAppViewer::init() gGLActive = FALSE; +// [SL:KB] - Patch: Viewer-Build | Checked: Catznip-6.0 +#ifdef LL_RELEASE_FOR_DOWNLOAD +// [/SL:KB] LLProcess::Params updater; updater.desc = "updater process"; // Because it's the updater, it MUST persist beyond the lifespan of the @@ -1161,7 +1164,10 @@ bool LLAppViewer::init() // Run the updater. An exception from launching the updater should bother us. LLLeap::create(updater, true); - +// [SL:KB] - Patch: Viewer-Build | Checked: Catznip-6.0 +#endif // LL_RELEASE_FOR_DOWNLOAD +// [/SL:KB] + // Iterate over --leap command-line options. But this is a bit tricky: if // there's only one, it won't be an array at all. LLSD LeapCommand(gSavedSettings.getLLSD("LeapCommand")); From d7d3fb9596dd3f8f54f2789f3ec9f50d02747b55 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 22 Apr 2019 15:03:06 +0200 Subject: [PATCH 14/75] [FIXED] FindWindowsSDK shouldn't run on Mac builds (merge hickup) --HG-- branch : Appearance-Misc --- indra/cmake/DirectX.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake index d141f0bcd7..083a5a3b03 100644 --- a/indra/cmake/DirectX.cmake +++ b/indra/cmake/DirectX.cmake @@ -1,5 +1,4 @@ # -*- cmake -*- -include(FindWindowsSDK) if (WINDOWS) include(FindWindowsSDK) From d448031edf48d82f7eabda8867b0fab2d2046f15 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 23 Apr 2019 23:29:00 +0200 Subject: [PATCH 15/75] Wrecking ball "fix" for attachment kills during teleport --HG-- branch : RLVa --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llviewermessage.cpp | 15 ++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index bc6a85abe7..7c731ccda2 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1175,6 +1175,17 @@ Value 0 + BlockAttachmentKillsOnTeleport + + Comment + Ignore all attachment object kills during teleport + Persist + 1 + Type + Boolean + Value + 1 + BlockAvatarAppearanceMessages Comment diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 234036d340..37a58ba642 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3654,13 +3654,14 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data) LLViewerObject *objectp = gObjectList.findObject(id); if (objectp) { -//// [SL:KB] - Patch: Appearance-TeleportAttachKill | Checked: Catznip-4.0 -// if ( (objectp->isAttachment()) && (gAgentAvatarp) && (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE) && (objectp->permYouOwner()) ) -// { -// gAgentAvatarp->addPendingDetach(objectp->getRootEdit()->getID()); -// continue; -// } -//// [/SL:KB] +// [SL:KB] - Patch: Appearance-TeleportAttachKill | Checked: Catznip-4.0 + if ( (objectp->isAttachment()) && (!objectp->isTempAttachment()) && (LLAgent::TELEPORT_NONE != gAgent.getTeleportState()) && + (gAgentAvatarp) && (objectp->permYouOwner()) && (gSavedSettings.getBOOL("BlockAttachmentKillsOnTeleport")) ) + { + //gAgentAvatarp->addPendingDetach(objectp->getRootEdit()->getID()); + continue; + } +// [/SL:KB] // Display green bubble on kill if ( gShowObjectUpdates ) From b8b3c23886a0ed41b6ca87c1d3a0b2fa8305018e Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 5 May 2019 12:20:50 +0200 Subject: [PATCH 16/75] Added FMODex package for MacOS --HG-- branch : Viewer-Build --- autobuild.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 6ae11ae394..01188791d6 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -758,9 +758,9 @@ archive hash - 93257fce19120c01751362775a01b925 + cba1feed7f6bb671d791a517fddf205a url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/1545/3481/fmodex-4.44.64.501533-darwin64-501533.tar.bz2 + https://downloads.catznip.com/packages/fmodex-44461-darwin-201601300040-r23.tar.bz2 name darwin64 From 6cd180e4d10c514aa4fbfe9bd31c7d0095e8b6f9 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 5 May 2019 12:32:01 +0200 Subject: [PATCH 17/75] [FIXED] CLang hissy fit errors --HG-- branch : RLVa --- indra/newview/lldrawpooltree.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index ecba1dc75d..a653bbd89f 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -99,7 +99,8 @@ void LLDrawPoolTree::render(S32 pass) LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f); // [SL:KB] - Patch: Render-TextureToggle (Catznip-4.0) - gGL.getTexUnit(sDiffTex)->bind( (LLPipeline::sRenderTextures) ? mTexturep : LLViewerFetchedTexture::sDefaultDiffuseImagep ); + LLViewerTexture* pTexture = (LLPipeline::sRenderTextures) ? mTexturep : LLViewerFetchedTexture::sDefaultDiffuseImagep; + gGL.getTexUnit(sDiffTex)->bind(pTexture); // [/SL:KB] // gGL.getTexUnit(sDiffTex)->bind(mTexturep); From 4fef52d2aa4a5846ec6c6e05bbcc678c9bac2a82 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 18 May 2019 13:04:25 +0200 Subject: [PATCH 18/75] [FIXED] Removed stray LL version tags --HG-- branch : Viewer-Build --- .hgtags | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.hgtags b/.hgtags index bc94478641..9d05dcecad 100755 --- a/.hgtags +++ b/.hgtags @@ -1096,7 +1096,9 @@ a3143db58a0f6b005232bf9018e7fef17ff9ec90 6.1.0-release 0000000000000000000000000000000000000000 6.0.0-release 0000000000000000000000000000000000000000 6.0.1-release 0000000000000000000000000000000000000000 6.1.0-release +0000000000000000000000000000000000000000 6.1.1-release 0000000000000000000000000000000000000000 6.2.0-release +0000000000000000000000000000000000000000 6.2.1-release 4f777ffb99fefdc6497c61385c22688ff149c659 SL-2.0.0 668851b2ef0f8cf8df07a0fba429e4a6c1e70abb SL-2.0.1 b03065d018b8a2e28b7de85b293a4c992cb4c12d SL-2.1.0 From 234f45da8d22e61ddd76296ce21f8d3339c159c0 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 10 Jun 2019 15:22:23 +0200 Subject: [PATCH 19/75] Incremented version to RLVa-2.2.2 --HG-- branch : RLVa --- indra/newview/rlvdefines.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 8c839e8dfb..c9a07c2a15 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -36,7 +36,7 @@ const S32 RLV_VERSION_BUILD_COMPAT = 0; // Implementation version const S32 RLVa_VERSION_MAJOR = 2; const S32 RLVa_VERSION_MINOR = 2; -const S32 RLVa_VERSION_PATCH = 0; +const S32 RLVa_VERSION_PATCH = 2; // Uncomment before a final release //#define RLV_RELEASE From 0c7c6e86ae6c41b16e8790c82512460d1089abdd Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 3 Jun 2019 22:32:55 +0200 Subject: [PATCH 20/75] CATZ-509: [RLV] Add @getheightoffset to get the current offer height (with @adjustheight's scale) --HG-- branch : RLVa --- indra/newview/rlvdefines.h | 1 + indra/newview/rlvhandler.cpp | 13 +++++++++++++ indra/newview/rlvhelper.cpp | 1 + 3 files changed, 15 insertions(+) diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index c9a07c2a15..8026b59b57 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -180,6 +180,7 @@ enum ERlvBehaviour { RLV_BHVR_DETACHTHIS, // "detachthis" RLV_BHVR_DETACHTHISEXCEPT, // "detachthis_except" RLV_BHVR_ADJUSTHEIGHT, // "adjustheight" + RLV_BHVR_GETHEIGHTOFFSET, // "getheightoffset" RLV_BHVR_TPTO, // "tpto" RLV_BHVR_VERSION, // "version" RLV_BHVR_VERSIONNEW, // "versionnew" diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index dad47f1874..63f42e4c2e 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -3366,6 +3366,19 @@ ERlvCmdRet RlvReplyHandler::onCommand(const RlvCommand& rlv return RLV_RET_SUCCESS; } +// Handles: @getheightoffset= +template<> template<> +ERlvCmdRet RlvReplyHandler::onCommand(const RlvCommand& rlvCmd, std::string& strReply) +{ + if (!rlvCmd.getOption().empty()) + return RLV_RET_FAILED_OPTION; + else if (!isAgentAvatarValid()) + return RLV_RET_FAILED_UNKNOWN; + + strReply = llformat("%.2f", gAgentAvatarp->getHoverOffset()[VZ] * 100); + return RLV_RET_SUCCESS; +} + // Checked: 2010-03-09 (RLVa-1.2.0a) | Modified: RLVa-1.1.0f ERlvCmdRet RlvHandler::onGetInv(const RlvCommand& rlvCmd, std::string& strReply) const { diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index b159634c7c..b57676d631 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -288,6 +288,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvReplyProcessor("getcam_textures", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvReplyProcessor("getcommand", RlvBehaviourInfo::BHVR_EXTENDED)); addEntry(new RlvBehaviourInfo("getgroup", RLV_BHVR_GETGROUP, RLV_TYPE_REPLY)); + addEntry(new RlvReplyProcessor("getheightoffset", RlvBehaviourInfo::BHVR_EXTENDED)); addEntry(new RlvBehaviourInfo("getinv", RLV_BHVR_GETINV, RLV_TYPE_REPLY)); addEntry(new RlvBehaviourInfo("getinvworn", RLV_BHVR_GETINVWORN, RLV_TYPE_REPLY)); addEntry(new RlvBehaviourInfo("getoutfit", RLV_BHVR_GETOUTFIT, RLV_TYPE_REPLY)); From a4409b155c21c2c2e83d83a94ef4753448c279c5 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 8 Oct 2019 19:34:09 +0200 Subject: [PATCH 21/75] [FIXED] FIRE-24230: Login crash when RLV @showloc restricted with no teleport history file --HG-- branch : RLVa --- indra/newview/rlvui.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indra/newview/rlvui.cpp b/indra/newview/rlvui.cpp index 5ed9d74dc2..cd6e5831ce 100644 --- a/indra/newview/rlvui.cpp +++ b/indra/newview/rlvui.cpp @@ -137,9 +137,8 @@ void RlvUIEnabler::onToggleShowLoc() // If the last entry in the persistent teleport history matches the current teleport history entry then we should remove it LLTeleportHistory* pTpHistory = LLTeleportHistory::getInstance(); LLTeleportHistoryStorage* pTpHistoryStg = LLTeleportHistoryStorage::getInstance(); - RLV_ASSERT( (pTpHistory) && (pTpHistoryStg) && (pTpHistory->getItems().size() > 0) && (pTpHistory->getCurrentItemIndex() >= 0) ); if ( (pTpHistory) && (pTpHistory->getItems().size() > 0) && (pTpHistory->getCurrentItemIndex() >= 0) && - (pTpHistoryStg) && (pTpHistory->getItems().size() > 0) ) + (pTpHistoryStg) && (pTpHistoryStg->getItems().size() > 0) ) { const LLTeleportHistoryItem& tpItem = pTpHistory->getItems().back(); const LLTeleportHistoryPersistentItem& tpItemStg = pTpHistoryStg->getItems().back(); From 9f02ddd2f529825f79a551d65655bd8a2ae84c90 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 13 Oct 2019 02:48:33 +0200 Subject: [PATCH 22/75] [FIXED] CATZ-539: 'Creator name' on the build floater is always disabled --HG-- branch : RLVa --- indra/newview/llpanelpermissions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 64cef9fc1c..ff949858dd 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -429,7 +429,7 @@ void LLPanelPermissions::refresh() // } // getChild("Creator Icon")->setValue(mCreatorID); // getChild("Creator Icon")->setVisible(TRUE); -// mLabelCreatorName->setEnabled(TRUE); + mLabelCreatorName->setEnabled(TRUE); // Update owner text field getChildView("Owner:")->setEnabled(TRUE); From e532b5a467bbb39bc83323491f75e2d10bdd184a Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 13 Oct 2019 20:09:36 +0200 Subject: [PATCH 23/75] Add new universal layer to the @getoufit list --HG-- branch : RLVa --- indra/newview/rlvhandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 63f42e4c2e..6459948307 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -3507,7 +3507,8 @@ ERlvCmdRet RlvHandler::onGetOutfit(const RlvCommand& rlvCmd, std::string& strRep LLWearableType::WT_GLOVES, LLWearableType::WT_JACKET, LLWearableType::WT_PANTS, LLWearableType::WT_SHIRT, LLWearableType::WT_SHOES, LLWearableType::WT_SKIRT, LLWearableType::WT_SOCKS, LLWearableType::WT_UNDERPANTS, LLWearableType::WT_UNDERSHIRT, LLWearableType::WT_SKIN, LLWearableType::WT_EYES, LLWearableType::WT_HAIR, - LLWearableType::WT_SHAPE, LLWearableType::WT_ALPHA, LLWearableType::WT_TATTOO, LLWearableType::WT_PHYSICS + LLWearableType::WT_SHAPE, LLWearableType::WT_ALPHA, LLWearableType::WT_TATTOO, LLWearableType::WT_PHYSICS, + LLWearableType::WT_UNIVERSAL, }; for (int idxType = 0, cntType = sizeof(wtRlvTypes) / sizeof(LLWearableType::EType); idxType < cntType; idxType++) From d4c4fdf0d95cbbfc06c12dede678bcbc0c93f06a Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 13 Oct 2019 21:21:57 +0200 Subject: [PATCH 24/75] [FIXED] Properly handle RLVa anonym slurls even when it's turned off --HG-- branch : RLVa --- indra/newview/rlvcommon.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 582f97d59c..2dad3a4d00 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -344,6 +344,12 @@ void RlvStrings::saveToFile(const std::string& strFilePath) // Checked: 2009-11-11 (RLVa-1.1.0a) | Modified: RLVa-1.1.0a const std::string& RlvStrings::getAnonym(const std::string& strName) { + static const std::string strUnknown = LLTrans::getString("Unknown"); + if ( (!RlvActions::isRlvEnabled()) || (m_Anonyms.empty()) ) + { + return strUnknown; + } + const char* pszName = strName.c_str(); U32 nHash = 0; // Test with 11,264 SL names showed a 3.33% - 3.82% occurance for each so we *should* get a very even spread From 680765bc9296e418463c693990bb3722a756418f Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Fri, 18 Oct 2019 12:19:41 +0200 Subject: [PATCH 25/75] Add new Windows SDK versions --HG-- branch : Viewer-Build --- indra/cmake/FindWindowsSDK.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/cmake/FindWindowsSDK.cmake b/indra/cmake/FindWindowsSDK.cmake index fe20656671..32991ea66c 100644 --- a/indra/cmake/FindWindowsSDK.cmake +++ b/indra/cmake/FindWindowsSDK.cmake @@ -73,6 +73,8 @@ macro(_winsdk_announce) endmacro() set(_winsdk_win10vers + 10.0.18362.0 # 19H1 aka Win10 1809 "May 2019 Update" + 10.0.17763.0 # Redstone 5 aka Win10 1809 "October 2018 Update" 10.0.17133.0 # Redstone 4 aka Win10 1803 "April 1018 Update" 10.0.16299.0 # Redstone 3 aka Win10 1709 "Fall Creators Update" 10.0.15063.0 # Redstone 2 aka Win10 1703 "Creators Update" From 9e0bbc4e10136d130a4e75143967ae4b374347f0 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 23 Dec 2019 02:08:12 +0100 Subject: [PATCH 26/75] Post-git conversion changes --- .gitattributes | 29 + .hgignore => .gitignore | 33 +- .hgeol | 12 - .hgpatchinfo/Viewer-Build.dep | 1 - .hgpatchinfo/Viewer-Build.desc | 10 - .hgtags | 1262 -------------------------------- 6 files changed, 41 insertions(+), 1306 deletions(-) create mode 100644 .gitattributes rename .hgignore => .gitignore (73%) mode change 100755 => 100644 delete mode 100644 .hgeol delete mode 100644 .hgpatchinfo/Viewer-Build.dep delete mode 100644 .hgpatchinfo/Viewer-Build.desc delete mode 100755 .hgtags diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..849d99dfa3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,29 @@ +* text=auto + +# Sources +*.cpp text diff=cpp +*.h text diff=cpp +*.py text diff=python + +# Documents +*.txt text +*.xml text + +# Graphics +*.png binary diff=exif +*.jpg binary diff=exif +*.jpeg binary diff=exif +*.gif binary diff=exif +*.tif binary +*.tiff binary +*.ico binary +*.svg text +*.eps binary + +# Scripts +*.sh text eol=lf +*.bat text eol=crlf + +# Exclude files from exporting +.gitattributes export-ignore +.gitignore export-ignore diff --git a/.hgignore b/.gitignore old mode 100755 new mode 100644 similarity index 73% rename from .hgignore rename to .gitignore index 0d672e6ebc..8bc8c43adb --- a/.hgignore +++ b/.gitignore @@ -1,5 +1,3 @@ -syntax: glob - # WinMerge temp files *.bak # Compiled python bytecode @@ -58,25 +56,18 @@ debian/secondlife-appearance-utility* debian/files build-stamp configure-stamp -^indra/lib/python/mulib.* -^web/locale.* -^web/secondlife.com.* -^web/config.* -^indra/web/dataservice/locale.* -^indra/web/dataservice/lib/shared/vault.* -^indra/web/dataservice/vendor.* -glob:indra/newview/dbghelp.dll -glob:*.cpp.orig -glob:*.cpp.bak -glob:*.h.bak -glob:*.h.orig -glob:indra/newview/typed_locations.txt -glob:indra/newview/teleport_history.txt -glob:indra/newview/search_history.txt -glob:indra/newview/filters.xml -glob:indra/newview/avatar_icons_cache.txt -glob:indra/newview/avatar_lad.log -glob:*.diff +indra/newview/dbghelp.dll +*.cpp.orig +*.cpp.bak +*.h.bak +*.h.orig +indra/newview/typed_locations.txt +indra/newview/teleport_history.txt +indra/newview/search_history.txt +indra/newview/filters.xml +indra/newview/avatar_icons_cache.txt +indra/newview/avatar_lad.log +*.diff indra/newview/pilot.txt indra/newview/pilot.xml *.rej diff --git a/.hgeol b/.hgeol deleted file mode 100644 index 94205bd3ef..0000000000 --- a/.hgeol +++ /dev/null @@ -1,12 +0,0 @@ -[repository] -native = LF - -[patterns] -path:indra/lscript/lscript_compile/windows/unistd.h = CRLF -path:indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt = CRLF -path:indra/tools/vstool/README.txt = CRLF -**.h = native -**.cpp = native -**.py = native -**.xml = native -**.txt = native diff --git a/.hgpatchinfo/Viewer-Build.dep b/.hgpatchinfo/Viewer-Build.dep deleted file mode 100644 index 7088ea425b..0000000000 --- a/.hgpatchinfo/Viewer-Build.dep +++ /dev/null @@ -1 +0,0 @@ -1e18a3ddad1af651a5f20af19172afa2937baed2 \ No newline at end of file diff --git a/.hgpatchinfo/Viewer-Build.desc b/.hgpatchinfo/Viewer-Build.desc deleted file mode 100644 index 8664994447..0000000000 --- a/.hgpatchinfo/Viewer-Build.desc +++ /dev/null @@ -1,10 +0,0 @@ -[Viewer/Build] -* Enforce EOL consistency through .hgeol -* Removed LL's changeset tags and added new (consistent) SL-X.Y.Z tags for releases -* Break into the debugger rather than forcing the process into an unrecoverable state for "llerrs" on non-release builds - -> Windows only -* Use the current virtualenv's python rather than the system default - -> Windows-only -* CATZ-234: Updated FMOD Ex library to v4.44.61 (Windows) -* CATZ-232: Updated OpenJPEG library to v1.5.2 (Windows) -* [FIXED] Viewer fails to compile with only the Windows 8/10 SDK installed diff --git a/.hgtags b/.hgtags deleted file mode 100755 index 19f98d2beb..0000000000 --- a/.hgtags +++ /dev/null @@ -1,1262 +0,0 @@ -003dd9461bfa479049afcc34545ab3431b147c7c v2start -52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3 -d6781e22543acd7e21b967209f3c6e7003d380e3 fork to viewer-2-0 -7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f alpha-4 -7f16e79826d377f5f9f5b33dc721ab56d0d7dc8f fork to viewer-20qa -d40ac9dd949cba6dab1cc386da6a2027690c2519 alpha-5 -d2382d374139850efa5bb6adfb229e3e656cfc40 howard-demo -b8419565906e4feb434426d8d9b17dd1458e24b2 alpha-6 -17fc2908e9a1ef34a9f53a41a393caf5c3cac390 beta-3-5 -3469d90a115b900f8f250e137bbd9b684130f5d2 beta-4 -12769e547e30067d494a6c01479a18107366ce2f beta-5 -4f777ffb99fefdc6497c61385c22688ff149c659 viewer-2-0-0 -668851b2ef0f8cf8df07a0fba429e4a6c1e70abb viewer-2-0-1 -08398e650c222336bb2b6de0cd3bba944aef11b4 2-1rn1 -80bc6cff515118a36108967af49d3f8105c95bc9 viewer-2-0-2-start -46002088d9a4489e323b8d56131c680eaa21258c viewer-2-1-0-start -3e4b947f79d88c385e8218cbc0731cef0e42cfc4 2-1-beta-1 -0962101bfa7df0643a6e625786025fe7f8a6dc97 2-1-beta-2 -1e2b517adc2ecb342cd3c865f2a6ccf82a3cf8d7 2-1-beta-3 -c6969fe44e58c542bfc6f1bd6c0be2fa860929ac 2-1-beta-4 -b03065d018b8a2e28b7de85b293a4c992cb4c12d 2-1-release -19547b909b404552593be5ec7c18241e062a6d65 2-1-1-beta-1 -6e3b2e13906ba8ff22d3c8490b02d518adb2c907 2-1-1-beta-2 -bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2-1-1-release -bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release -c6e6324f5be1401f077ad18a4a0f6b46451c2f7b last_sprint -7076e22f9f43f479a4ea75eac447a36364bead5a 2.2.0-beta1 -7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1 -7076e22f9f43f479a4ea75eac447a36364bead5a beta_2.1.3 -9822eb3e25f7fe0c28ffd8aba45c507caa383cbc 2.2.0-beta2 -9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2 -b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3 -b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3 -00a831292231faad7e44c69f76cb96f175b8dfad 2.2.0-beta4 -1415e6538d54fd5d568ee88343424d57c6803c2c 2.2.0-release -1415e6538d54fd5d568ee88343424d57c6803c2c DRTVWR-8_2.2.0-release -98e0d6df638429fd2f0476667504bd5a6b298def 2.3.0-start -a3c12342b1af0951b8aa3b828aacef17fcea8178 2.3.0-beta1 -a3c12342b1af0951b8aa3b828aacef17fcea8178 DRTVWR-14_2.3.0-beta1 -db0fe9bb65187f365e58a717dd23d0f4754a9c1d 2.3.0-beta2 -db0fe9bb65187f365e58a717dd23d0f4754a9c1d DRTVWR-17_2.3.0-beta2 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-beta3 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-release -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-13_2.3.0-release -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 DRTVWR-20_2.3.0-beta3 -dbc206fc61d89ff4cfe15aade0bf0c7bc7fee1c9 2.4.0-start -3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e 2.4.0-beta1 -3bc1f50a72e117f4d4ad8d555f0c785ea8cc201e DRTVWR-26_2.4.0-beta1 -25bd6007e3d2fc15db9326ed4b18a24a5969a46a 2.4.0-beta2 -25bd6007e3d2fc15db9326ed4b18a24a5969a46a DRTVWR-27_2.4.0-beta2 -1ed382c6a08ba3850b6ce9061bc551ddece0ea07 2.4.0-release -1ed382c6a08ba3850b6ce9061bc551ddece0ea07 DRTVWR-25_2.4.0-release -a82e5b1e22c7f90e3c7977d146b80588f004ed0d 2.5.0-start -345b17e7cf630db77e840b4fe3451bd476d750a3 2.5.0-beta1 -345b17e7cf630db77e840b4fe3451bd476d750a3 DRTVWR-32_2.5.0-beta1 -54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2 -54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33--2.5.0beta2 -54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f DRTVWR-33_2.5.0-beta2 -b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-beta3 -b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-release -b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-31_2.5.0-release -b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3 -b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base -63a6aedfce785a6c760377bf685b2dae616797d2 2.5.1-start -4dede9ae1ec74d41f6887719f6f1de7340d8578d 2.5.1-release -4dede9ae1ec74d41f6887719f6f1de7340d8578d DRTVWR-37_2.5.1-release -b53a0576eec80614d7767ed72b40ed67aeff27c9 2.5.2-release -b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release -4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start -9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1 -9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1 -461c8c65b5c799ddfe365422f9be9c0095d91e7d 2.6.0-beta1-tip -9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2 -9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2 -42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release -42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release -c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1 -c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start -c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1 -c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release -c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release -56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start -d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1 -d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1 -214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release -214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release -52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py -ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start -d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1 -d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1 -0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2 -0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2 -8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release -8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release -3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work -7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1 -7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1 -800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start -bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1 -bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1 -dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release -dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release -5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start -beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1 -beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1 -be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release -be2000b946f8cb3de5f44b2d419287d4c48ec4eb DRTVWR-54_2.6.8-release -e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start -77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-beta1 -77e5a08344c95738ab879f9671b7758cddd712a3 2.6.9-release -77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-56_2.6.9-release -77e5a08344c95738ab879f9671b7758cddd712a3 DRTVWR-57_2.6.9-beta1 -8835e0e3c0d3a48244c287bc05811dfc2fba43ec 2.7.0-start -43c7ee846b7eed80786acbbf35d03bd016a3e85d 2.7.0-beta1 -43c7ee846b7eed80786acbbf35d03bd016a3e85d DRTVWR-59_2.7.0-beta1 -54fd44ac92e4c61435ea33effe093a3527e18d98 2.7.1-start -0c4d0c24278074f219e5a32e72b449e78301d11b 2.7.1-beta1 -0c4d0c24278074f219e5a32e72b449e78301d11b DRTVWR-61_2.7.1-beta1 -9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start -e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1 -e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1 -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release -fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release -6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start -6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start -be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1 -be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1 -057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release -057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release -19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start -09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1 -09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1 -6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release -6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release -e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1 -e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start -e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1 -493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release -493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release -502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start -2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1 -2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1 -29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release -29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release -4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix -4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix -54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start -ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start -599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1 -599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 -fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release -fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release -6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start -b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1 -b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1 -1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release -1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release -82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start -364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1 -364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1 -f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start -42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1 -42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1 -e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2 -e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2 -b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start -6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 3.0.3-beta1 -6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1 -61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2 -61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2 -0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release -0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release -586907287be581817b2422b5137971b22d54ea48 3.0.4-start -92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start -c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start -2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1 -2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1 -bc01ee26fd0f1866e266429e85f76340523e91f1 3.1.0-beta2 -bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2 -ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 3.1.0-release -ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release -a8230590e28e4f30f5105549e0e43211d9d55711 3.2.0-start -e440cd1dfbd128d7d5467019e497f7f803640ad6 3.2.0-beta1 -e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1 -9bcc2b7176634254e501e3fb4c5b56c1f637852e 3.2.0-beta2 -9bcc2b7176634254e501e3fb4c5b56c1f637852e DRTVWR-97_3.2.0-beta2 -2a13d30ee50ccfed50268238e36bb90d738ccc9e 3.2.0-beta3 -2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3 -3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release -3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release -c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start -9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1 -9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1 -a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release -a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release -40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start -523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1 -523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1 -80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start -3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1 -3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start -3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1 -bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release -bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release -8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start -3d2d5d244c6398a4214c666d5dd3965b0918709a 3.2.5-beta1 -3d2d5d244c6398a4214c666d5dd3965b0918709a DRTVWR-106_3.2.5-beta1 -65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d 3.2.5-beta2 -65a2c1c8d855b88edfbea4e16ef2f27e7cff8b1d DRTVWR-107_3.2.5-beta2 -c6175c955a19e9b9353d242889ec1779b5762522 3.2.5-release -c6175c955a19e9b9353d242889ec1779b5762522 DRTVWR-105_3.2.5-release -2174ed1c7129562428a5cfe8651ed77b8d26ae18 3.2.6-start -286d73ff5c19f6c00e023dc1b60975ed6bbe2872 3.2.6-beta1 -286d73ff5c19f6c00e023dc1b60975ed6bbe2872 DRTVWR-109_3.2.6-beta1 -4891c46a56fed7512c783b9cbe7cb7260727bf0c 3.2.7-start -3d75c836d178c7c7e788f256afe195f6cab764a2 3.2.7-beta1 -3d75c836d178c7c7e788f256afe195f6cab764a2 DRTVWR-111_3.2.7-beta1 -89980333c99dbaf1787fe20784f1d8849e9b5d4f 3.2.8-start -16f8e2915f3f2e4d732fb3125daf229cb0fd1875 3.2.8-beta1 -16f8e2915f3f2e4d732fb3125daf229cb0fd1875 DRTVWR-114_3.2.8-beta1 -987425b1acf4752379b2e1eb20944b4b35d67a85 3.2.8-beta2 -987425b1acf4752379b2e1eb20944b4b35d67a85 DRTVWR-115_3.2.8-beta2 -51b2fd52e36aab8f670e0874e7e1472434ec4b4a 3.2.8-release -51b2fd52e36aab8f670e0874e7e1472434ec4b4a DRTVWR-113_3.2.8-release -37dd400ad721e2a89ee820ffc1e7e433c68f3ca2 3.2.9-start -e9c82fca5ae6fb8a8af29012d78fb194a29323f3 3.2.9-beta1 -e9c82fca5ae6fb8a8af29012d78fb194a29323f3 DRTVWR-117_3.2.9-beta1 -a01ef9bed28627f4ca543fbc1d70c79cc297a90f 3.2.9-beta2 -a01ef9bed28627f4ca543fbc1d70c79cc297a90f DRTVWR-118_3.2.9-beta2 -d5f263687f43f278107363365938f0a214920a4b 3.3.0-beta1 -d5f263687f43f278107363365938f0a214920a4b 3.3.0-start -d5f263687f43f278107363365938f0a214920a4b DRTVWR-119 -5e8d2662f38a66eca6c591295f5880d47afc73f7 3.3.0-release -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 3.3.1-start -3e2fca4ed1a0dc9fe6d8a6664e71098bb035a367 DRTVWR-125 -28b95a6a28dca3338d9a1f4f204b96678df9f6a5 3.3.1-beta1 -1dc545e44617975da2a4a32fe303386c687a6ca1 3.3.1-beta2 -1dc545e44617975da2a4a32fe303386c687a6ca1 DRTVWR-139 -1dc545e44617975da2a4a32fe303386c687a6ca1 viewer-beta-candidate -c623bbc854b6f7ee1b33a3718f76715046aa2937 3.3.1-release -d29a260119f8d5a5d168e25fed0c7ea6b3f40161 3.3.2-beta1 -675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-beta2 -675668bd24d3bea570814f71762a2a806f7e1b8d 3.3.2-release -15e90b52dc0297921b022b90d10d797436b8a1bd viewer-release-candidate -bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156 -6414ecdabc5d89515b08d1f872cf923ed3a5523a DRTVWR-148 -2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155 -24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153 -5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160 -f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1 -f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144 -2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164 -600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 -80b5e5e9775966d3839331ffa7a16a60f9d7c930 DRTVWR-165 -fdcc08a4f20ae9bb060f4693c8980d216534efdf 3.3.3-beta2 -af5f3e43e6e4424b1da19d9e16f6b853a7b822ed DRTVWR-169 -4b3c68199a86cabaa5d9466d7b0f7e141e901d7a 3.3.3-beta3 -6428242e124b523813bfaf4c45b3d422f0298c81 3.3.3-release -a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 -9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157 -089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 -c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163 -b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171 -050e48759337249130f684b4a21080b683f61732 DRTVWR-168 -09ef7fd1b0781f33b8a3a9af6236b7bcb4831910 DRTVWR-170 -f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 DRTVWR-158 -f91d003091a61937a044652c4c674447f7dcbb7a 3.3.4-beta1 -bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173 -cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174 -82b5330bc8b17d0d4b598832e9c5a92e90075682 3.3.4-beta2 -57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176 -eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177 -a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3 -4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180 -5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183 -6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4 -9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184 -ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5 -28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release -6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199 -7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2 -8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207 -351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3 -005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167 -888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175 -a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182 -1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1 -9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 -47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190 -421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192 -33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195 -e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193 -7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196 -ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198 -507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197 -b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2 -37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200 -182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3 -7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201 -84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4 -573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5 -af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212 -015012c2b740ccdec8a8c3d6e5f898449ecfe0b8 DRTVWR-213 -62b07aa81b1957897c3846292bb9412977b0af6c 3.3.4-beta6 -ceed0b65a69f1eac20d523e0203320a32f9a3f3c DRTVWR-215 -733ceac77583874f3626ef7a15c105b83ef0f5bb 3.4.0-beta7 -97977c67245f52db20eb15f1918cc0f24778cabc 3.4.0-release -5adb2b8f96c3cac88ad7c7d996d707f1b29df336 3.4.1-beta1 -b3f74858a1c8720c82d0978f3877a3fc8ba459ec 3.4.1-beta1a -2b779f233ee6f38c89cb921650c773a96e63da92 DRTVWR-220 -0b9d95f4bfb6867cbf56eaec51633b0da2f1262d DRTVWR-221 -e6e553761829dc0270eaaa712b7cb0622535b076 3.4.1-beta3 -f00068a66a2e2f72acbe3f690b98b323e740b289 DRTVWR-222 -305950187c628a5d6743ee9ea711cc5b9177a18e 3.4.1-beta4 -dd23d4da3bcb2ffda58569e759feb7c119982973 DRTVWR-224 -0bd3744ff060452aa13ff4992eafb381df7b1012 3.4.1-beta5 -29075f8c1abed53dcf195a59f61744e27a91108f DRTVWR-226 -fba99f381b8d4ad1b7b42fa4993b29998d95be18 DRTVWR-179 -49ed253c80bed7410e238eeab35a9f14cb034364 3.4.1-beta6 -468ca3268229011a59df99229b24315844b33d34 DRTVWR-227 -524da902713e8b60322640b9825101add4a7c497 3.4.1-beta7 -173c2809f9873499c4b9d6bc044ec941c954d3fb DRTVWR-228 -1dc94555582f52718834081e7659e973ae4521f7 3.4.1-beta8 -52c164c8023a5e65f3dc1b0bbb7fa1dd0c631b6b DRTVWR-231 -464cf7a63a9a2f95bc4972dc022ca765e93de7d3 DRTVWR-233 -637fe8bbee5e24940448198c221d5ee0fa3247b4 3.4.1-beta9 -4e0d84e92132e9e95a1d52a1e49bad69c278ea05 3.4.1-beta10 -f7cbd60a3f57ff1101157eeb79ea21e8898bedae DRTVWR-235 -baf97f06ae17223614c5e31aa42e71d87cff07fe DRTVWR-236 -18498afcdb835d6fc4d36ed935347d3b65307bad 3.4.1-beta11 -b2f21e3442542283a80e7eaebae9f833e5a927b6 DRTVWR-237 -3f9be82de642d468c5fc272cb9d96b46b5498402 3.4.1-beta12 -e59ffd3fe0838ae6b09b242a6e9df71761b88f41 3.4.1-release -81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186 -cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 -c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188 -4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191 -78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194 -248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203 -de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202 -34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag -6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205 -7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206 -b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219 -32896d5e920ca9a29256ff3b747c2e99752aa5ae DRTVWR-217 -704bbae7b182a1f2811a47a054e680522966f54a 3.4.2-beta1 -288539fc0408ed4b69a99665de33bbbc2c3c08fe DRTVWR-216 -e664473c16df1d82ffaff382e7b3e023da202d52 3.4.2-beta2 -0891d7a773a31397dcad48be3fa66531d567a821 DRTVWR-242 -710785535362b3cb801b6a3dc4703be3373bd0cd 3.4.2-beta3 -e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243 -73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4 -16310aabccf315870f7cc9bf966926c0ad6954fa 3.4.2-release -d799593b53ed733862e9a13871e318e886469377 DRTVWR-208 -e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223 -93ab02d83f51e30a3cabad98aff89601befd9413 DRTVWR-240 -2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209 -f7bedce18ad52283e6072814db23318907261487 DRTVWR-238 -7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210 -5e4e4128b256525bafc07a62e35ae8527aaa9c9d DRTVWR-241 -f1d3b3fcab28ed9ea532bf50db0ba96f5c8cc8e9 DRTVWR-232 -4918b150e75df6b516fb6c2616d32043fa6b4cac DRTVWR-245 -94ab2b49458ab372a95d2d6949fdf574f413068d 3.4.3-beta1 -965b9a35e260c0f53be1a25f0db7abc8a67eaf47 DRTVWR-252 -bb10adc4f76cf0067fca7075146f00cdc0740e9d DRTVWR-251 -ab0aa2f6ba22b52fed30a2337197f589156edc75 DRTVWR-253 -48382ec79741671d19ce4cc3e8cd59e9a521e4a7 DRTVWR-254 -937ec902bb9a1cbceff17bd89e3923352b0a5fbc DRTVWR-256 -44e764a6ac9e672a4f3bce821a4b6a218590c374 DRTVWR-258 -c23d734065ed593b2413385aecd8366d8e0ee96b DRTVWR-257 -452ce96d4046dc05a3ecaecc203e2cc8ddd72e76 DRTVWR-259 -daca610d840625b5bebb966a57cb49581852c417 DRTVWR-265 -9afbdc4e24cc04feacfb2b7a10b78a64f780901a DRTVWR-266 -73280db02501f5ad041fc18b1eba68e73a81996c DRTVWR-267 -870e2d79e0063fda87187f17bbc2747766733194 3.4.3-beta3 -0a2ca6546b499239afeb66d17b2fadbcdbe36ab1 3.4.3-release -4c3460cb1fb7c6da9965e09c734d282a8e9c81f0 DRTVWR-229 -f4481df42f9a4a92bf475a80f0c51d1a4bbdfd59 DRTVWR-246 -39c5204b6e800983a41ccac8ad6dc993120197c6 DRTVWR-247 -7c7d57d393e8ae7b61623279de06eb4a62ccae6a DRTVWR-249 -f72b50ef168c159d6e79e97aa2bcafaf8577ab99 DRTVWR-230 -b418be80903520c492e1173f3afbc4021cad5d07 DRTVWR-255 -9aa1aa9f1fe13c194695a0b8f0af298296241dc2 DRTVWR-260 -84fbaf2d4141bd161731430e760949dc787ca206 DRTVWR-244 -083d2d36b5bb1c54fc3dd7caac0e7ac381a9cef0 3.4.4-beta1 -b634dec987c16e8c9c938e11e52591d9ead8fa9b DRTVWR-270 -cd39255bd23330fd30c04105f2811e941d8524fe 3.4.4-beta2 -2c4011bbc2b15b82198fd8b51f3a9fe765a08c4d DRTVWR-271 -2f8a3ef687bc55828abcb17ac1ad7cde70536d7e 3.4.4-beta3 -35cfd4cf5b895fa776592f2e630e330be7f0604e DRTVWR-273 -c374035d459af3c03dea2dd90880dfc25de64706 DRTVWR-275 -05d9f1dd7a954069af2a33abedb7713fa36a04cb 3.4.4-beta4 -e1bb1ae7d8b12faeb37933a737c199cc9b9f89cc 3.4.4-release -391a8c74cec7275c5d26c85ad108d4782a3e3dd9 DRTVWR-268 -a36f1f354b02aa6e448ca13685de167d0a0a3d03 DRTVWR-272 -37dba00ad820de3a808d4039396b162a9c275b3e DRTVWR-269 -7c6dfdc1b7a2ce0d8e3a8f3ce3058547ea065c0f DRTVWR-250 -b9ff9730daa53a541925300cbd02bb14575a5705 DRTVWR-277 -af6b711a97073431953b55ee808aaa09900c27e5 DRTVWR-276 -8302fefde6c8f4a64bfc7f04929f8bc85f5c6c7b DRTVWR-279 -c296133849d1f103c0e2abc41e6599daed00b67b DRTVWR-280 -40a2265058abc9fde4914c10185f916435818621 3.4.5-beta1 -5df4802bec93c8d0a509946d826bb4c50c5442ec DRTVWR-281 -7c1c33ba4cfd2d15ca51cc1ac440eca551331a4a DRTVWR-283 -6b9c7dbebef793230d64e1b452577c8b142d4143 3.4.5-beta2 -ccf991e02dc2f63fb646324230d54832683f4a9b DRTVWR-286 -2d849850558a5a0324b398d1c102d30bcbdfb88f DRTVWR-287 -e06898df8644fe567bee94f817d03abc1c380993 3.4.5-beta3 -a676b4d6c037b39fe5b8e42cf8839a9303936089 DRTVWR-289 -28fa8b944a0c1869636ab00cc400f5aa71f6fa3c DRTVWR-290 -7f09bbc28c297f14b67961be7b6575445fa160e8 DRTVWR-291 -b23419a2748483c98f3b84b630468a21c88feba5 DRTVWR-292 -1567de5700c273b583dac41b64275c223287306e 3.4.5-beta4 -1cce8447f8f574673e3f47d6fe584262e6964fe2 DRTVWR-296 -0a5d409161ef2a89b28c9a741051dd2dedc707d6 DRTVWR-297 -852b69ef0b5fe6b13b69cc2217282cc64de6afab 3.4.5-beta5 -a49c715243a36a8a380504d14cb7416b3039c956 3.4.5-release -37947e4f771f001b551581bf7cd0051c3153beed DRTVWR-282 -6482cceb91cda68b799f3e6cdc66d33bf123547a DRTVWR-284 -092a9effbedd1a0276fa5ced520992ce00f96fbf CHUI-PV-0 -279ef1dfc9b749a6cc499cf190fec0c090b6d682 DRTVWR-288 -9b19edaf1d8ddf435f60fbbb444dd25db8f63953 3.5.0-beta1 -c6b3561c7d7ad365eeba669db54eb57b5149ce75 3.5.0-beta2 -6d91ffd77bf2a20f18a2175eb7579da880ae12ac DRTVWR-302 -f6ca5bb75bca975ff0bc77e71e615f6478c4559c 3.5.0-beta3 -910b5fad950e343b58229f5a0aefa7729b9308b3 DRTVWR-303 -53cffdde0b3cc367ba9bb6abd5c83ae14df5e882 3.5.0-beta4 -4d5f6234dc59a0fb6ead5e02c7d343a0610e0488 DRTVWR-304 -dd058a6093c493120d67c8e02c812c0f7b2d3db0 3.5.0-beta5 -fd6b510e83f56830e45670c428653134899d3e25 DRTVWR-305 -55339537d99afc394d1bb7fdb7d074bf321ca62f 3.5.0-beta6 -902caf2b9fdbdbc5c399c4d5ebcecaf9cb97bab8 DRTVWR-306 -5c6098fd17d40ee3a38ca6b64f6be9db7f61f0a8 3.5.0-beta7 -adc360e6bf21390d2665380951d85937cd29a604 3.5.0-release -1ada73295ed0eaa4a772ef079c29f57069342c32 DRTVWR-310 -20cdf370f5c8be6193bef6fb3a81cc3f81275191 3.5.1-beta1 -2319904200de367646b9a9442239a38d52c1eeb5 DRTVWR-313 -9d8726eca785acad694564516f16dd639faf45c0 3.5.1-beta2 -4b7fa963b80e2056ab648f83a4d61310b3cedb3d DRTVWR-314 -65ae89aeb7ea674a555e439e963f17949322ac94 3.5.1-beta3 -13149a524874b608aeb76325b35faff113a5ea53 3.5.1-release -78a8fe6abf331944d6b6bb1ce1024a6bc08141f4 DRTVWR-298 -50ccc12f38c3c99f03b374e32429cb043b73e2a6 DRTVWR-294 -c2b1066514308dff1eeb91162392dfe08bf1c0fe DRTVWR-309 -e6b8a92acffd693cd1459e4212e3dff1050acf67 DRTVWR-278 -106f19cc011aafdfc9a6d12b641fe8db6e9735a7 3.5.2-beta1 -509b97acc4ca1f2644197f1b555773ac0bb6838c 3.5.2-beta2 -6cb3689d89c13876ce8fa8faefa7b05e4279502d DRTVWR-316 -cfc3e650e5b2063288e7b832e9c9f521bbdacc92 DRTVWR-315 -e6e35501f1fea252ef83080adcf30c3cb7c2f75c DRTVWR-299 -b6a4ac8f1916ede76e8a023e1cf35c045d0ac707 3.5.2-beta3 -a314f1c94374ab1f6633dd2983f7090a68663eb2 3.5.2-beta4 -1cfa86d604909dfdb8b372069ff61f9afaa2aac1 MAINT-2647 -895628bb5e162410cfdf4bca58f0a57d22ccfcde 3.5.2-beta5 -9013c07bfe1c51107233f1924dccdcc5057dd909 3.5.2-beta6 -9b1b6f33aa5394b27bb652b31b5cb81ef6060370 3.5.2-release -a277b841729f2a62ba1e34acacc964bc13c1ad6f 3.5.3-release -fb1630153bac5552046ea914af3f14deabc1def8 3.6.0-materials-beta1 -0a56f33ad6aa112032b14a41dad759ad377bdde9 3.6.0-release -75cf8e855ae1af6895a35da475314c2b5acf1850 3.6.1-release -f6741d5fe8d632651424484df0fe0cb4a01e9fbe 3.6.2-release -fe4f7c5e9fd27e09d03deb1cc9ab3e5093f6309e 3.6.3-release -83357f31d8dbf048a8bfdc323f363bf4d588aca1 CHOP-951-a -91ed595b716f14f07409595b734fda891a59379e 3.6.4-release -bf6d453046011a11de2643fac610cc5258650f82 3.6.5-release -ae457ece77001767ae9613148c495e7b98cc0f4a 3.6.7-release -d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 3.6.8-release -70eda3721d36df3e00730629c42a1304e5bc65b8 3.6.9-release -5b54b36862ff8bc3b6935673c9d1c1f22ee8d521 3.6.10-release -2feb70a4cfde43f2898d95ff8fcae3e67805c7c2 3.6.11-release -88bbfd7a6971033f3aa103f3a3500ceb4c73521b 3.6.12-release -0d9b9e50f1a8880e05f15688a9ec7d09e0e81013 3.6.13-release -5d746de933a98ca17887cde2fece80e9c7ab0b98 3.7.0-release -dcb4981ce255841b6083d8f65444b65d5a733a17 3.7.1-release -b842534cb4d76c9ef87676a62b1d2d19e79c015f 3.7.2-release -962d3f98955bfc7310a7867c8cbc3df075e54aa9 3.7.3-release -d076568ff7883b41c149e6afb421f39c29dbfe2b 3.7.4-release -fc066b82343fca51f9c1b8eda0abc6bee9bb4503 3.7.5-release -d029faf69f20a23007f32420a1ac6a3b89a6d441 3.7.6-release -83959480cb986522d07b151a0c778ab7f920d41b 3.7.7-release -bba9b3722eea08949e4ff69591f736bf0f808434 3.7.8-release -a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release -91dae9494b4d147541c7a01902334ba19a7ec05e 3.7.10-release -64799eb298834073a3e9992cd8d27c3cb9d30b10 3.7.11-release -3b44ea8988cb902f0dda8429e8d5e4569e304532 3.7.12-release -d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release -a7872554f3665588f1e8347d472cec3a299254b3 3.7.14-release -3f11f57f2b4d15a9f987d12bc70ef507eefb5018 3.7.15-release -562e7dace7465060ac9adb2e8eca800b699ff024 3.7.16-release -bcc2770e21c125e0bab59141c51db9145aec068d 3.7.17-release -2729c1daf0257d68a40bdbc4acf1a16184974bbd 3.7.18-release -82973b38a6c9a457333e3519e4f2b16bb5eedf47 3.7.19-release -27094824773b907c2e559396e6f9ec3a963de52d 3.7.20-release -9ecab4b0c7d8614767724a3422d3c1dca6bd4e4f 3.7.21-release -bc61801f614022c920cb5c3df1d7d67a9561ce1f 3.7.22-release -3be800e1afad9615442159e388d6d137be7b951e 3.7.23-release -d3d0101e980ec95043e0af9b7903045d3bc447e4 3.7.24-release -9978a8c3a2ffce4a5e1c186256581c2ac139c9dc 3.7.25-release -000e9dda4162cbf0a83ba88558b19473654a09a9 3.7.26-release -afd8d4756e8eda3c8f760625d1c17a2ad40ad6c8 3.7.27-release -566874eb5ab26c003ef7fb0e22ce40c5fa0013f4 3.7.28-release -d07f76c5b9860fb87924d00ca729f7d4532534d6 3.7.29-release -67edc442c80b8d2fadd2a6c4a7184b469906cdbf 3.7.30-release -797ed69e6134ef48bb922577ab2540fb2d964668 3.8.0-release -3f61ed662347dc7c6941b8266e72746a66d90e2a 3.8.1-release -3a62616f3dd8bd512fcdfd29ef033b2505b11213 3.8.2-release -60572f718879f786f6bc8b5c9373ebebf4693078 3.8.3-release -27e3cf444c4cc645884960a61325a9ee0e9a2d0f 3.8.4-release -e821ef17c6edea4a59997719d8ba416d8c16e143 3.8.5-release -5a5bd148943bfb46cf2ff2ccf376c42dee93d19b 3.8.6-release -ae3297cdd03ab14f19f3811acbc4acd3eb600336 4.0.0-release -759710a9acef61aaf7b69f4bc4a5a913de87ad8a 4.0.1-release -e9d350764dfbf5a46229e627547ef5c1b1eeef00 4.0.2-release -86dfba7ec4332c323025ebeacd8bf343ed0d8cfd 4.0.3-release -0a5de9ec2cb868f367501024d8d6958c20869053 4.0.4-release -450de775fff66a011be1a001acd117cc623c445d 4.0.5-release -4070611edd95eb3a683d1cd97c4c07fe67793812 4.0.6-release -33981d8130f031597b4c7f4c981b18359afb61a0 4.0.7-release -45eaee56883df7a439ed3300c44d3126f7e3a41e 4.0.8-release -b280a1c797a3891e68dbc237e73de9cf19f426e9 4.1.1-release -bfbba2244320dc2ae47758cd7edd8fa3b67dc756 4.1.2-release -b41e1e7c7876f7656c505f552b5888b4e478f92b 5.0.0-release -c9ce2295012995e3cf5c57bcffcb4870b94c649f 5.0.1-release -cea1632c002c065985ebea15eeeb4aac90f50545 5.0.2-release -02c24e9f4f7d8aa0de75f27817dda098582f4936 5.0.3-release -022709ef76a331cac1ba6ef1a6da8a5e9ef63f5a 5.0.4-release -b4d76b5590fdf8bab72c64442353753a527cbc44 5.0.5-release -3e5035dfd8af49bd4c0009f0a76ef46a15991a45 5.0.6-release -abcab37e1b29414ab8c03af9ca2ab489d809788a 5.0.7-release -505a492f30bd925bb48e2e093ae77c3c2b4c740f 5.0.8-release -40ca7118765be85a043b31b011e4ee6bd9e33c95 5.0.9-release -ad0e15543836d64d6399d28b32852510435e344a 5.1.0-release -26d9e9bb166a9a417f35b1863223a597af8185fd 5.1.1-release -2eb917875efdfe920680b9049302d0f03721245d 5.1.2-release -7c00e5b6cb3d95712e9d8e29277c805bca2bda90 5.1.3-release -7b6b020fd5ad9a8dc3670c5c92d1ca92e55fc485 5.1.4-release -2ea47f358b171178eb9a95503a1670d519c2886f 5.1.5-release -04538b8157c1f5cdacd9403f0a395452d4a93689 5.1.6-release -ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release -23ea0fe36fadf009a60c080392ce80e4bf8af8d9 5.1.8-release -52422540bfe54b71155aa455360bee6e3ef1fd96 5.1.9-release -1cfa567caf5088ae299271be08cc2d9f0801ff6a pre-Poseidon -821edfcd14919c0e95c590866171c61fb57e8623 6.0.0-release -21b7604680ef6b6ea67f8bebaaa588d6e263bdc1 6.0.1-release -a3143db58a0f6b005232bf9018e7fef17ff9ec90 6.1.0-release -50f0ece62ddb5a244ecb6d00ef5a89d80ad50efa 6.1.1-release -82a89165e5929a6c3073d6cd60a543cb395f147b 6.2.0-release -706bdc7e25c6e6b8fb56f4a13fcce2936e70a79c 6.2.1-release -ec09daf1899c1c01c4ba0ba950fae572f2a612a8 6.2.2-release -ab2ec5c5423b277d23fd0511ce50c15123ff2e03 6.2.3-release -67297f9902857e357570c44722ad84de3aff974e 6.2.4-release -9777aec6dc4a30a24537297ac040861ce16b82ae 6.3.0-release -ece699718f163921717bb95a6131e94af4c4138f 6.3.1-release -07f5d5bc9faebb45695853d40a9549773db816c0 6.3.2-release -d9a4bd15e2c852953d6c8e84d6f3b7ca442c0e7f 6.3.3-release -4033b3f57e76f087235145a3016886ccdc87ffa3 6.3.4-release -27ca5834bfe9b80e82db5ea42f08b7eb990b722a 6.3.5-release -0000000000000000000000000000000000000000 v2start -0000000000000000000000000000000000000000 alpha-3 -0000000000000000000000000000000000000000 fork to viewer-2-0 -0000000000000000000000000000000000000000 alpha-4 -0000000000000000000000000000000000000000 fork to viewer-20qa -0000000000000000000000000000000000000000 alpha-5 -0000000000000000000000000000000000000000 howard-demo -0000000000000000000000000000000000000000 alpha-6 -0000000000000000000000000000000000000000 beta-3-5 -0000000000000000000000000000000000000000 beta-4 -0000000000000000000000000000000000000000 beta-5 -0000000000000000000000000000000000000000 viewer-2-0-0 -0000000000000000000000000000000000000000 viewer-2-0-1 -0000000000000000000000000000000000000000 2-1rn1 -0000000000000000000000000000000000000000 viewer-2-0-2-start -0000000000000000000000000000000000000000 viewer-2-1-0-start -0000000000000000000000000000000000000000 2-1-beta-1 -0000000000000000000000000000000000000000 2-1-beta-2 -0000000000000000000000000000000000000000 2-1-beta-3 -0000000000000000000000000000000000000000 2-1-beta-4 -0000000000000000000000000000000000000000 2-1-release -0000000000000000000000000000000000000000 2-1-1-beta-1 -0000000000000000000000000000000000000000 2-1-1-beta-2 -0000000000000000000000000000000000000000 2-1-1-release -0000000000000000000000000000000000000000 2.1.1-release -0000000000000000000000000000000000000000 last_sprint -0000000000000000000000000000000000000000 2.2.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-5_2.2.0-beta1 -0000000000000000000000000000000000000000 beta_2.1.3 -0000000000000000000000000000000000000000 2.2.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-3_2.2.0-beta2 -0000000000000000000000000000000000000000 2.2.0-beta3 -0000000000000000000000000000000000000000 DRTVWR-7_2.2.0-beta3 -0000000000000000000000000000000000000000 2.2.0-beta4 -0000000000000000000000000000000000000000 2.2.0-release -0000000000000000000000000000000000000000 DRTVWR-8_2.2.0-release -0000000000000000000000000000000000000000 2.3.0-start -0000000000000000000000000000000000000000 2.3.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-14_2.3.0-beta1 -0000000000000000000000000000000000000000 2.3.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-17_2.3.0-beta2 -0000000000000000000000000000000000000000 2.3.0-beta3 -0000000000000000000000000000000000000000 2.3.0-release -0000000000000000000000000000000000000000 DRTVWR-13_2.3.0-release -0000000000000000000000000000000000000000 DRTVWR-20_2.3.0-beta3 -0000000000000000000000000000000000000000 2.4.0-start -0000000000000000000000000000000000000000 2.4.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-26_2.4.0-beta1 -0000000000000000000000000000000000000000 2.4.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-27_2.4.0-beta2 -0000000000000000000000000000000000000000 2.4.0-release -0000000000000000000000000000000000000000 DRTVWR-25_2.4.0-release -0000000000000000000000000000000000000000 2.5.0-start -0000000000000000000000000000000000000000 2.5.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-32_2.5.0-beta1 -0000000000000000000000000000000000000000 2.5.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-33--2.5.0beta2 -0000000000000000000000000000000000000000 DRTVWR-33_2.5.0-beta2 -0000000000000000000000000000000000000000 2.5.0-beta3 -0000000000000000000000000000000000000000 2.5.0-release -0000000000000000000000000000000000000000 DRTVWR-31_2.5.0-release -0000000000000000000000000000000000000000 DRTVWR-34_2.5.0-beta3 -0000000000000000000000000000000000000000 nat-eventapi2-base -0000000000000000000000000000000000000000 2.5.1-start -0000000000000000000000000000000000000000 2.5.1-release -0000000000000000000000000000000000000000 DRTVWR-37_2.5.1-release -0000000000000000000000000000000000000000 2.5.2-release -0000000000000000000000000000000000000000 DRTVWR-38_2.5.2-release -0000000000000000000000000000000000000000 2.6.0-start -0000000000000000000000000000000000000000 2.6.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-40_2.6.0-beta1 -0000000000000000000000000000000000000000 2.6.0-beta1-tip -0000000000000000000000000000000000000000 2.6.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-41_2.6.0-beta2 -0000000000000000000000000000000000000000 2.6.0-release -0000000000000000000000000000000000000000 DRTVWR-39_2.6.0-release -0000000000000000000000000000000000000000 2.6.1-beta1 -0000000000000000000000000000000000000000 2.6.1-start -0000000000000000000000000000000000000000 DRTVWR-43_2.6.1-beta1 -0000000000000000000000000000000000000000 2.6.1-release -0000000000000000000000000000000000000000 DRTVWR-42_2.6.1-release -0000000000000000000000000000000000000000 2.6.2-start -0000000000000000000000000000000000000000 2.6.2-beta1 -0000000000000000000000000000000000000000 DRTVWR-45_2.6.2-beta1 -0000000000000000000000000000000000000000 2.6.2-release -0000000000000000000000000000000000000000 DRTVWR-44_2.6.2-release -0000000000000000000000000000000000000000 end-of-develop.py -0000000000000000000000000000000000000000 2.6.3-start -0000000000000000000000000000000000000000 2.6.3-beta1 -0000000000000000000000000000000000000000 DRTVWR-47_2.6.3-beta1 -0000000000000000000000000000000000000000 2.6.3-beta2 -0000000000000000000000000000000000000000 DRTVWR-48_2.6.3-beta2 -0000000000000000000000000000000000000000 2.6.3-release -0000000000000000000000000000000000000000 DRTVWR-46_2.6.3-release -0000000000000000000000000000000000000000 dons-headless-hackathon-work -0000000000000000000000000000000000000000 2.6.5-beta1 -0000000000000000000000000000000000000000 DRTVWR-50_2.6.5-beta1 -0000000000000000000000000000000000000000 2.6.6-start -0000000000000000000000000000000000000000 2.6.6-beta1 -0000000000000000000000000000000000000000 DRTVWR-52_2.6.6-beta1 -0000000000000000000000000000000000000000 2.6.6-release -0000000000000000000000000000000000000000 DRTVWR-51_2.6.6-release -0000000000000000000000000000000000000000 2.6.8-start -0000000000000000000000000000000000000000 2.6.8-beta1 -0000000000000000000000000000000000000000 DRTVWR-55_2.6.8-beta1 -0000000000000000000000000000000000000000 2.6.8-release -0000000000000000000000000000000000000000 DRTVWR-54_2.6.8-release -0000000000000000000000000000000000000000 2.6.9-start -0000000000000000000000000000000000000000 2.6.9-beta1 -0000000000000000000000000000000000000000 2.6.9-release -0000000000000000000000000000000000000000 DRTVWR-56_2.6.9-release -0000000000000000000000000000000000000000 DRTVWR-57_2.6.9-beta1 -0000000000000000000000000000000000000000 2.7.0-start -0000000000000000000000000000000000000000 2.7.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-59_2.7.0-beta1 -0000000000000000000000000000000000000000 2.7.1-start -0000000000000000000000000000000000000000 2.7.1-beta1 -0000000000000000000000000000000000000000 DRTVWR-61_2.7.1-beta1 -0000000000000000000000000000000000000000 2.7.2-start -0000000000000000000000000000000000000000 2.7.2-beta1 -0000000000000000000000000000000000000000 DRTVWR-63_2.7.2-beta1 -0000000000000000000000000000000000000000 2.7.1-release -0000000000000000000000000000000000000000 2.7.2-release -0000000000000000000000000000000000000000 DRTVWR-60_2.7.1-release -0000000000000000000000000000000000000000 DRTVWR-62_2.7.2-release -0000000000000000000000000000000000000000 2.7.3-start -0000000000000000000000000000000000000000 2.7.4-start -0000000000000000000000000000000000000000 2.7.4-beta1 -0000000000000000000000000000000000000000 DRTVWR-67_2.7.4-beta1 -0000000000000000000000000000000000000000 2.7.4-release -0000000000000000000000000000000000000000 DRTVWR-66_2.7.4-release -0000000000000000000000000000000000000000 2.7.5-start -0000000000000000000000000000000000000000 2.7.5-beta1 -0000000000000000000000000000000000000000 DRTVWR-69_2.7.5-beta1 -0000000000000000000000000000000000000000 2.7.5-release -0000000000000000000000000000000000000000 DRTVWR-68_2.7.5-release -0000000000000000000000000000000000000000 2.8.0-beta1 -0000000000000000000000000000000000000000 2.8.0-start -0000000000000000000000000000000000000000 DRTVWR-71_2.8.0-beta1 -0000000000000000000000000000000000000000 2.8.0-release -0000000000000000000000000000000000000000 DRTVWR-70_2.8.0-release -0000000000000000000000000000000000000000 2.8.1-start -0000000000000000000000000000000000000000 2.8.1-beta1 -0000000000000000000000000000000000000000 DRTVWR-73_2.8.1-beta1 -0000000000000000000000000000000000000000 2.8.1-release -0000000000000000000000000000000000000000 DRTVWR-72_2.8.1-release -0000000000000000000000000000000000000000 2.8.1-hotfix -0000000000000000000000000000000000000000 DRTVWR-76_2.8.1-hotfix -0000000000000000000000000000000000000000 2.8.2-start -0000000000000000000000000000000000000000 2.8.3-start -0000000000000000000000000000000000000000 2.8.3-beta1 -0000000000000000000000000000000000000000 DRTVWR-75_2.8.3-beta1 -0000000000000000000000000000000000000000 2.8.3-release -0000000000000000000000000000000000000000 DRTVWR-74_2.8.3-release -0000000000000000000000000000000000000000 3.0.0-start -0000000000000000000000000000000000000000 3.0.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-78_3.0.0-beta1 -0000000000000000000000000000000000000000 3.0.0-release -0000000000000000000000000000000000000000 DRTVWR-77_3.0.0-release -0000000000000000000000000000000000000000 3.0.1-start -0000000000000000000000000000000000000000 3.0.1-beta1 -0000000000000000000000000000000000000000 DRTVWR-81_3.0.1-beta1 -0000000000000000000000000000000000000000 3.0.2-start -0000000000000000000000000000000000000000 3.0.2-beta1 -0000000000000000000000000000000000000000 DRTVWR-83_3.0.2-beta1 -0000000000000000000000000000000000000000 3.0.2-beta2 -0000000000000000000000000000000000000000 DRTVWR-86_3.0.2-beta2 -0000000000000000000000000000000000000000 3.0.3-start -0000000000000000000000000000000000000000 3.0.3-beta1 -0000000000000000000000000000000000000000 DRTVWR-85_3.0.3-beta1 -0000000000000000000000000000000000000000 3.0.3-beta2 -0000000000000000000000000000000000000000 DRTVWR-89_3.0.3-beta2 -0000000000000000000000000000000000000000 3.0.3-release -0000000000000000000000000000000000000000 DRTVWR-84_3.0.3-release -0000000000000000000000000000000000000000 3.0.4-start -0000000000000000000000000000000000000000 3.0.5-start -0000000000000000000000000000000000000000 3.1.0-start -0000000000000000000000000000000000000000 3.1.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-93_3.1.0-beta1 -0000000000000000000000000000000000000000 3.1.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-96_3.1.0-beta2 -0000000000000000000000000000000000000000 3.1.0-release -0000000000000000000000000000000000000000 DRTVWR-92_3.1.0-release -0000000000000000000000000000000000000000 3.2.0-start -0000000000000000000000000000000000000000 3.2.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-95_3.2.0-beta1 -0000000000000000000000000000000000000000 3.2.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-97_3.2.0-beta2 -0000000000000000000000000000000000000000 3.2.0-beta3 -0000000000000000000000000000000000000000 DRTVWR-98_3.2.0-beta3 -0000000000000000000000000000000000000000 3.2.0-release -0000000000000000000000000000000000000000 DRTVWR-94_3.2.0-release -0000000000000000000000000000000000000000 3.2.1-start -0000000000000000000000000000000000000000 3.2.1-beta1 -0000000000000000000000000000000000000000 DRTVWR-100_3.2.1-beta1 -0000000000000000000000000000000000000000 3.2.1-release -0000000000000000000000000000000000000000 DRTVWR-99_3.2.1-release -0000000000000000000000000000000000000000 3.2.2-start -0000000000000000000000000000000000000000 3.2.2-beta1 -0000000000000000000000000000000000000000 DRTVWR-102_3.2.2-beta1 -0000000000000000000000000000000000000000 3.2.3-start -0000000000000000000000000000000000000000 3.2.4-beta1 -0000000000000000000000000000000000000000 3.2.4-start -0000000000000000000000000000000000000000 DRTVWR-104_3.2.4-beta1 -0000000000000000000000000000000000000000 3.2.4-release -0000000000000000000000000000000000000000 DRTVWR-103_3.2.4-release -0000000000000000000000000000000000000000 3.2.5-start -0000000000000000000000000000000000000000 3.2.5-beta1 -0000000000000000000000000000000000000000 DRTVWR-106_3.2.5-beta1 -0000000000000000000000000000000000000000 3.2.5-beta2 -0000000000000000000000000000000000000000 DRTVWR-107_3.2.5-beta2 -0000000000000000000000000000000000000000 3.2.5-release -0000000000000000000000000000000000000000 DRTVWR-105_3.2.5-release -0000000000000000000000000000000000000000 3.2.6-start -0000000000000000000000000000000000000000 3.2.6-beta1 -0000000000000000000000000000000000000000 DRTVWR-109_3.2.6-beta1 -0000000000000000000000000000000000000000 3.2.7-start -0000000000000000000000000000000000000000 3.2.7-beta1 -0000000000000000000000000000000000000000 DRTVWR-111_3.2.7-beta1 -0000000000000000000000000000000000000000 3.2.8-start -0000000000000000000000000000000000000000 3.2.8-beta1 -0000000000000000000000000000000000000000 DRTVWR-114_3.2.8-beta1 -0000000000000000000000000000000000000000 3.2.8-beta2 -0000000000000000000000000000000000000000 DRTVWR-115_3.2.8-beta2 -0000000000000000000000000000000000000000 3.2.8-release -0000000000000000000000000000000000000000 DRTVWR-113_3.2.8-release -0000000000000000000000000000000000000000 3.2.9-start -0000000000000000000000000000000000000000 3.2.9-beta1 -0000000000000000000000000000000000000000 DRTVWR-117_3.2.9-beta1 -0000000000000000000000000000000000000000 3.2.9-beta2 -0000000000000000000000000000000000000000 DRTVWR-118_3.2.9-beta2 -0000000000000000000000000000000000000000 3.3.0-beta1 -0000000000000000000000000000000000000000 3.3.0-start -0000000000000000000000000000000000000000 DRTVWR-119 -0000000000000000000000000000000000000000 3.3.0-release -0000000000000000000000000000000000000000 3.3.1-start -0000000000000000000000000000000000000000 DRTVWR-125 -0000000000000000000000000000000000000000 3.3.1-beta1 -0000000000000000000000000000000000000000 3.3.1-beta2 -0000000000000000000000000000000000000000 DRTVWR-139 -0000000000000000000000000000000000000000 viewer-beta-candidate -0000000000000000000000000000000000000000 3.3.1-release -0000000000000000000000000000000000000000 3.3.2-beta1 -0000000000000000000000000000000000000000 3.3.2-beta2 -0000000000000000000000000000000000000000 3.3.2-release -0000000000000000000000000000000000000000 viewer-release-candidate -0000000000000000000000000000000000000000 DRTVWR-156 -0000000000000000000000000000000000000000 DRTVWR-148 -0000000000000000000000000000000000000000 DRTVWR-155 -0000000000000000000000000000000000000000 DRTVWR-153 -0000000000000000000000000000000000000000 DRTVWR-160 -0000000000000000000000000000000000000000 3.3.3-beta1 -0000000000000000000000000000000000000000 DRTVWR-144 -0000000000000000000000000000000000000000 DRTVWR-164 -0000000000000000000000000000000000000000 DRTVWR-162 -0000000000000000000000000000000000000000 DRTVWR-165 -0000000000000000000000000000000000000000 3.3.3-beta2 -0000000000000000000000000000000000000000 DRTVWR-169 -0000000000000000000000000000000000000000 3.3.3-beta3 -0000000000000000000000000000000000000000 3.3.3-release -0000000000000000000000000000000000000000 DRTVWR-159 -0000000000000000000000000000000000000000 DRTVWR-157 -0000000000000000000000000000000000000000 DRTVWR-161 -0000000000000000000000000000000000000000 DRTVWR-163 -0000000000000000000000000000000000000000 DRTVWR-171 -0000000000000000000000000000000000000000 DRTVWR-168 -0000000000000000000000000000000000000000 DRTVWR-170 -0000000000000000000000000000000000000000 DRTVWR-158 -0000000000000000000000000000000000000000 3.3.4-beta1 -0000000000000000000000000000000000000000 DRTVWR-173 -0000000000000000000000000000000000000000 DRTVWR-174 -0000000000000000000000000000000000000000 3.3.4-beta2 -0000000000000000000000000000000000000000 DRTVWR-176 -0000000000000000000000000000000000000000 DRTVWR-177 -0000000000000000000000000000000000000000 3.3.4-beta3 -0000000000000000000000000000000000000000 DRTVWR-180 -0000000000000000000000000000000000000000 DRTVWR-183 -0000000000000000000000000000000000000000 3.3.4-beta4 -0000000000000000000000000000000000000000 DRTVWR-184 -0000000000000000000000000000000000000000 3.3.4-beta5 -0000000000000000000000000000000000000000 3.3.4-release -0000000000000000000000000000000000000000 DRTVWR-199 -0000000000000000000000000000000000000000 3.3.4-release2 -0000000000000000000000000000000000000000 DRTVWR-207 -0000000000000000000000000000000000000000 3.3.4-release3 -0000000000000000000000000000000000000000 DRTVWR-167 -0000000000000000000000000000000000000000 DRTVWR-175 -0000000000000000000000000000000000000000 DRTVWR-182 -0000000000000000000000000000000000000000 3.4.0-beta1 -0000000000000000000000000000000000000000 DRTVWR-189 -0000000000000000000000000000000000000000 DRTVWR-190 -0000000000000000000000000000000000000000 DRTVWR-192 -0000000000000000000000000000000000000000 DRTVWR-195 -0000000000000000000000000000000000000000 DRTVWR-193 -0000000000000000000000000000000000000000 DRTVWR-196 -0000000000000000000000000000000000000000 DRTVWR-198 -0000000000000000000000000000000000000000 DRTVWR-197 -0000000000000000000000000000000000000000 3.4.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-200 -0000000000000000000000000000000000000000 3.4.0-beta3 -0000000000000000000000000000000000000000 DRTVWR-201 -0000000000000000000000000000000000000000 3.4.0-beta4 -0000000000000000000000000000000000000000 3.4.0-beta5 -0000000000000000000000000000000000000000 DRTVWR-212 -0000000000000000000000000000000000000000 DRTVWR-213 -0000000000000000000000000000000000000000 3.3.4-beta6 -0000000000000000000000000000000000000000 DRTVWR-215 -0000000000000000000000000000000000000000 3.4.0-beta7 -0000000000000000000000000000000000000000 3.4.0-release -0000000000000000000000000000000000000000 3.4.1-beta1 -0000000000000000000000000000000000000000 3.4.1-beta1a -0000000000000000000000000000000000000000 DRTVWR-220 -0000000000000000000000000000000000000000 DRTVWR-221 -0000000000000000000000000000000000000000 3.4.1-beta3 -0000000000000000000000000000000000000000 DRTVWR-222 -0000000000000000000000000000000000000000 3.4.1-beta4 -0000000000000000000000000000000000000000 DRTVWR-224 -0000000000000000000000000000000000000000 3.4.1-beta5 -0000000000000000000000000000000000000000 DRTVWR-226 -0000000000000000000000000000000000000000 DRTVWR-179 -0000000000000000000000000000000000000000 3.4.1-beta6 -0000000000000000000000000000000000000000 DRTVWR-227 -0000000000000000000000000000000000000000 3.4.1-beta7 -0000000000000000000000000000000000000000 DRTVWR-228 -0000000000000000000000000000000000000000 3.4.1-beta8 -0000000000000000000000000000000000000000 DRTVWR-231 -0000000000000000000000000000000000000000 DRTVWR-233 -0000000000000000000000000000000000000000 3.4.1-beta9 -0000000000000000000000000000000000000000 3.4.1-beta10 -0000000000000000000000000000000000000000 DRTVWR-235 -0000000000000000000000000000000000000000 DRTVWR-236 -0000000000000000000000000000000000000000 3.4.1-beta11 -0000000000000000000000000000000000000000 DRTVWR-237 -0000000000000000000000000000000000000000 3.4.1-beta12 -0000000000000000000000000000000000000000 3.4.1-release -0000000000000000000000000000000000000000 DRTVWR-186 -0000000000000000000000000000000000000000 DRTVWR-181 -0000000000000000000000000000000000000000 DRTVWR-188 -0000000000000000000000000000000000000000 DRTVWR-191 -0000000000000000000000000000000000000000 DRTVWR-194 -0000000000000000000000000000000000000000 DRTVWR-203 -0000000000000000000000000000000000000000 DRTVWR-202 -0000000000000000000000000000000000000000 oz-build-test-tag -0000000000000000000000000000000000000000 DRTVWR-205 -0000000000000000000000000000000000000000 DRTVWR-206 -0000000000000000000000000000000000000000 DRTVWR-219 -0000000000000000000000000000000000000000 DRTVWR-217 -0000000000000000000000000000000000000000 3.4.2-beta1 -0000000000000000000000000000000000000000 DRTVWR-216 -0000000000000000000000000000000000000000 3.4.2-beta2 -0000000000000000000000000000000000000000 DRTVWR-242 -0000000000000000000000000000000000000000 3.4.2-beta3 -0000000000000000000000000000000000000000 DRTVWR-243 -0000000000000000000000000000000000000000 3.4.2-beta4 -0000000000000000000000000000000000000000 3.4.2-release -0000000000000000000000000000000000000000 DRTVWR-208 -0000000000000000000000000000000000000000 DRTVWR-223 -0000000000000000000000000000000000000000 DRTVWR-240 -0000000000000000000000000000000000000000 DRTVWR-209 -0000000000000000000000000000000000000000 DRTVWR-238 -0000000000000000000000000000000000000000 DRTVWR-210 -0000000000000000000000000000000000000000 DRTVWR-241 -0000000000000000000000000000000000000000 DRTVWR-232 -0000000000000000000000000000000000000000 DRTVWR-245 -0000000000000000000000000000000000000000 3.4.3-beta1 -0000000000000000000000000000000000000000 DRTVWR-252 -0000000000000000000000000000000000000000 DRTVWR-251 -0000000000000000000000000000000000000000 DRTVWR-253 -0000000000000000000000000000000000000000 DRTVWR-254 -0000000000000000000000000000000000000000 DRTVWR-256 -0000000000000000000000000000000000000000 DRTVWR-258 -0000000000000000000000000000000000000000 DRTVWR-257 -0000000000000000000000000000000000000000 DRTVWR-259 -0000000000000000000000000000000000000000 DRTVWR-265 -0000000000000000000000000000000000000000 DRTVWR-266 -0000000000000000000000000000000000000000 DRTVWR-267 -0000000000000000000000000000000000000000 3.4.3-beta3 -0000000000000000000000000000000000000000 3.4.3-release -0000000000000000000000000000000000000000 DRTVWR-229 -0000000000000000000000000000000000000000 DRTVWR-246 -0000000000000000000000000000000000000000 DRTVWR-247 -0000000000000000000000000000000000000000 DRTVWR-249 -0000000000000000000000000000000000000000 DRTVWR-230 -0000000000000000000000000000000000000000 DRTVWR-255 -0000000000000000000000000000000000000000 DRTVWR-260 -0000000000000000000000000000000000000000 DRTVWR-244 -0000000000000000000000000000000000000000 3.4.4-beta1 -0000000000000000000000000000000000000000 DRTVWR-270 -0000000000000000000000000000000000000000 3.4.4-beta2 -0000000000000000000000000000000000000000 DRTVWR-271 -0000000000000000000000000000000000000000 3.4.4-beta3 -0000000000000000000000000000000000000000 DRTVWR-273 -0000000000000000000000000000000000000000 DRTVWR-275 -0000000000000000000000000000000000000000 3.4.4-beta4 -0000000000000000000000000000000000000000 3.4.4-release -0000000000000000000000000000000000000000 DRTVWR-268 -0000000000000000000000000000000000000000 DRTVWR-272 -0000000000000000000000000000000000000000 DRTVWR-269 -0000000000000000000000000000000000000000 DRTVWR-250 -0000000000000000000000000000000000000000 DRTVWR-277 -0000000000000000000000000000000000000000 DRTVWR-276 -0000000000000000000000000000000000000000 DRTVWR-279 -0000000000000000000000000000000000000000 DRTVWR-280 -0000000000000000000000000000000000000000 3.4.5-beta1 -0000000000000000000000000000000000000000 DRTVWR-281 -0000000000000000000000000000000000000000 DRTVWR-283 -0000000000000000000000000000000000000000 3.4.5-beta2 -0000000000000000000000000000000000000000 DRTVWR-286 -0000000000000000000000000000000000000000 DRTVWR-287 -0000000000000000000000000000000000000000 3.4.5-beta3 -0000000000000000000000000000000000000000 DRTVWR-289 -0000000000000000000000000000000000000000 DRTVWR-290 -0000000000000000000000000000000000000000 DRTVWR-291 -0000000000000000000000000000000000000000 DRTVWR-292 -0000000000000000000000000000000000000000 3.4.5-beta4 -0000000000000000000000000000000000000000 DRTVWR-296 -0000000000000000000000000000000000000000 DRTVWR-297 -0000000000000000000000000000000000000000 3.4.5-beta5 -0000000000000000000000000000000000000000 3.4.5-release -0000000000000000000000000000000000000000 DRTVWR-282 -0000000000000000000000000000000000000000 DRTVWR-284 -0000000000000000000000000000000000000000 CHUI-PV-0 -0000000000000000000000000000000000000000 DRTVWR-288 -0000000000000000000000000000000000000000 3.5.0-beta1 -0000000000000000000000000000000000000000 3.5.0-beta2 -0000000000000000000000000000000000000000 DRTVWR-302 -0000000000000000000000000000000000000000 3.5.0-beta3 -0000000000000000000000000000000000000000 DRTVWR-303 -0000000000000000000000000000000000000000 3.5.0-beta4 -0000000000000000000000000000000000000000 DRTVWR-304 -0000000000000000000000000000000000000000 3.5.0-beta5 -0000000000000000000000000000000000000000 DRTVWR-305 -0000000000000000000000000000000000000000 3.5.0-beta6 -0000000000000000000000000000000000000000 DRTVWR-306 -0000000000000000000000000000000000000000 3.5.0-beta7 -0000000000000000000000000000000000000000 3.5.0-release -0000000000000000000000000000000000000000 DRTVWR-310 -0000000000000000000000000000000000000000 3.5.1-beta1 -0000000000000000000000000000000000000000 DRTVWR-313 -0000000000000000000000000000000000000000 3.5.1-beta2 -0000000000000000000000000000000000000000 DRTVWR-314 -0000000000000000000000000000000000000000 3.5.1-beta3 -0000000000000000000000000000000000000000 3.5.1-release -0000000000000000000000000000000000000000 DRTVWR-298 -0000000000000000000000000000000000000000 DRTVWR-294 -0000000000000000000000000000000000000000 DRTVWR-309 -0000000000000000000000000000000000000000 DRTVWR-278 -0000000000000000000000000000000000000000 3.5.2-beta1 -0000000000000000000000000000000000000000 3.5.2-beta2 -0000000000000000000000000000000000000000 DRTVWR-316 -0000000000000000000000000000000000000000 DRTVWR-315 -0000000000000000000000000000000000000000 DRTVWR-299 -0000000000000000000000000000000000000000 3.5.2-beta3 -0000000000000000000000000000000000000000 3.5.2-beta4 -0000000000000000000000000000000000000000 MAINT-2647 -0000000000000000000000000000000000000000 3.5.2-beta5 -0000000000000000000000000000000000000000 3.5.2-beta6 -0000000000000000000000000000000000000000 3.5.2-release -0000000000000000000000000000000000000000 3.5.3-release -0000000000000000000000000000000000000000 3.6.0-materials-beta1 -0000000000000000000000000000000000000000 3.6.0-release -0000000000000000000000000000000000000000 3.6.1-release -0000000000000000000000000000000000000000 3.6.2-release -0000000000000000000000000000000000000000 3.6.3-release -0000000000000000000000000000000000000000 CHOP-951-a -0000000000000000000000000000000000000000 3.6.4-release -0000000000000000000000000000000000000000 3.6.5-release -0000000000000000000000000000000000000000 3.6.7-release -0000000000000000000000000000000000000000 3.6.8-release -0000000000000000000000000000000000000000 3.6.9-release -0000000000000000000000000000000000000000 3.6.10-release -0000000000000000000000000000000000000000 3.6.11-release -0000000000000000000000000000000000000000 3.6.12-release -0000000000000000000000000000000000000000 3.6.13-release -0000000000000000000000000000000000000000 3.7.0-release -0000000000000000000000000000000000000000 3.7.1-release -0000000000000000000000000000000000000000 3.7.2-release -0000000000000000000000000000000000000000 3.7.3-release -0000000000000000000000000000000000000000 3.7.4-release -0000000000000000000000000000000000000000 3.7.5-release -0000000000000000000000000000000000000000 3.7.6-release -0000000000000000000000000000000000000000 3.7.7-release -0000000000000000000000000000000000000000 3.7.8-release -0000000000000000000000000000000000000000 3.7.9-release -0000000000000000000000000000000000000000 3.7.10-release -0000000000000000000000000000000000000000 3.7.11-release -0000000000000000000000000000000000000000 3.7.12-release -0000000000000000000000000000000000000000 3.7.13-release -0000000000000000000000000000000000000000 3.7.14-release -0000000000000000000000000000000000000000 3.7.15-release -0000000000000000000000000000000000000000 3.7.16-release -0000000000000000000000000000000000000000 3.7.17-release -0000000000000000000000000000000000000000 3.7.18-release -0000000000000000000000000000000000000000 3.7.19-release -0000000000000000000000000000000000000000 3.7.20-release -0000000000000000000000000000000000000000 3.7.21-release -0000000000000000000000000000000000000000 3.7.22-release -0000000000000000000000000000000000000000 3.7.23-release -0000000000000000000000000000000000000000 3.7.24-release -0000000000000000000000000000000000000000 3.7.25-release -0000000000000000000000000000000000000000 3.7.26-release -0000000000000000000000000000000000000000 3.7.27-release -0000000000000000000000000000000000000000 3.7.28-release -0000000000000000000000000000000000000000 3.7.29-release -0000000000000000000000000000000000000000 3.7.30-release -0000000000000000000000000000000000000000 3.8.0-release -0000000000000000000000000000000000000000 3.8.1-release -0000000000000000000000000000000000000000 3.8.2-release -0000000000000000000000000000000000000000 3.8.2-release -0000000000000000000000000000000000000000 3.8.3-release -0000000000000000000000000000000000000000 3.8.4-release -0000000000000000000000000000000000000000 3.8.5-release -0000000000000000000000000000000000000000 3.8.6-release -0000000000000000000000000000000000000000 4.0.0-release -0000000000000000000000000000000000000000 4.0.1-release -0000000000000000000000000000000000000000 4.0.2-release -0000000000000000000000000000000000000000 4.0.3-release -0000000000000000000000000000000000000000 4.0.4-release -0000000000000000000000000000000000000000 4.0.5-release -0000000000000000000000000000000000000000 4.0.6-release -0000000000000000000000000000000000000000 4.0.7-release -0000000000000000000000000000000000000000 4.0.8-release -0000000000000000000000000000000000000000 4.1.1-release -0000000000000000000000000000000000000000 4.1.2-release -0000000000000000000000000000000000000000 5.0.0-release -0000000000000000000000000000000000000000 5.0.1-release -0000000000000000000000000000000000000000 5.0.2-release -0000000000000000000000000000000000000000 5.0.3-release -0000000000000000000000000000000000000000 5.0.4-release -0000000000000000000000000000000000000000 5.0.5-release -0000000000000000000000000000000000000000 5.0.6-release -0000000000000000000000000000000000000000 5.0.7-release -0000000000000000000000000000000000000000 5.0.8-release -0000000000000000000000000000000000000000 5.0.9-release -0000000000000000000000000000000000000000 5.1.0-release -0000000000000000000000000000000000000000 5.1.1-release -0000000000000000000000000000000000000000 5.1.2-release -0000000000000000000000000000000000000000 5.1.3-release -0000000000000000000000000000000000000000 5.1.4-release -0000000000000000000000000000000000000000 5.1.5-release -0000000000000000000000000000000000000000 5.1.6-release -0000000000000000000000000000000000000000 5.1.7-release -0000000000000000000000000000000000000000 5.1.8-release -0000000000000000000000000000000000000000 5.1.9-release -0000000000000000000000000000000000000000 pre-Poseidon -0000000000000000000000000000000000000000 6.0.0-release -0000000000000000000000000000000000000000 6.0.1-release -0000000000000000000000000000000000000000 6.1.0-release -0000000000000000000000000000000000000000 6.1.1-release -0000000000000000000000000000000000000000 6.2.0-release -0000000000000000000000000000000000000000 6.2.1-release -0000000000000000000000000000000000000000 6.2.2-release -0000000000000000000000000000000000000000 6.2.3-release -0000000000000000000000000000000000000000 6.2.4-release -0000000000000000000000000000000000000000 6.3.0-release -0000000000000000000000000000000000000000 6.3.1-release -0000000000000000000000000000000000000000 6.3.2-release -0000000000000000000000000000000000000000 6.3.3-release -0000000000000000000000000000000000000000 6.3.4-release -4f777ffb99fefdc6497c61385c22688ff149c659 SL-2.0.0 -668851b2ef0f8cf8df07a0fba429e4a6c1e70abb SL-2.0.1 -b03065d018b8a2e28b7de85b293a4c992cb4c12d SL-2.1.0 -bb38ff1a763738609e1b3cada6d15fa61e5e84b9 SL-2.1.1 -1415e6538d54fd5d568ee88343424d57c6803c2c SL-2.2.0 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 SL-2.3.0 -1ed382c6a08ba3850b6ce9061bc551ddece0ea07 SL-2.4.0 -b723921b5c711bd24dbe77dc76ef488b544dac78 SL-2.5.0 -4dede9ae1ec74d41f6887719f6f1de7340d8578d SL-2.5.1 -b53a0576eec80614d7767ed72b40ed67aeff27c9 SL-2.5.2 -42f32494bac475d0737799346f6831558ae8bf5d SL-2.6.0 -c9182ed77d427c759cfacf49a7b71a2e20d522aa SL-2.6.1 -214180ad5714ce8392b82bbebcc92f4babd98300 SL-2.6.2 -8f2da1701c81a62352df2b8d413d27fb2cade9a6 SL-2.6.3 -dac76a711da5f1489a01c1fa62ec97d99c25736d SL-2.6.6 -be2000b946f8cb3de5f44b2d419287d4c48ec4eb SL-2.6.8 -77e5a08344c95738ab879f9671b7758cddd712a3 SL-2.6.9 -a9abb9633a266c8d2fe62411cfd1c86d32da72bf SL-2.7.1 -fe3a8e7973072ea62043c08b19b66626c1a720eb SL-2.7.2 -057f319dd8eccdf63a54d99686c68cdcb31b6abc SL-2.7.4 -6866d9df6efbd441c66451debd376d21211de39c SL-2.7.5 -493d9127ee50e84ba08a736a65a23ca86f7a5b01 SL-2.8.0 -29e93d7e19991011bd12b5748142b11a5dcb4370 SL-2.8.1 -fb85792b84bf28428889c4cc966469d92e5dac4c SL-2.8.3 -1778f26b6d0ae762dec3ca37140f66620f2485d9 SL-3.0.0 -0496d2f74043cf4e6058e76ac3db03d44cff42ce SL-3.0.3 -ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 SL-3.1.0 -3150219d229d628f0c15e58e8a51511cbd97e58d SL-3.2.0 -a8c7030d6845186fac7c188be4323a0e887b4184 SL-3.2.1 -bd6bcde2584491fd9228f1fa51c4575f4e764e19 SL-3.2.4 -c6175c955a19e9b9353d242889ec1779b5762522 SL-3.2.5 -51b2fd52e36aab8f670e0874e7e1472434ec4b4a SL-3.2.8 -5e8d2662f38a66eca6c591295f5880d47afc73f7 SL-3.3.0 -c623bbc854b6f7ee1b33a3718f76715046aa2937 SL-3.3.1 -675668bd24d3bea570814f71762a2a806f7e1b8d SL-3.3.2 -6428242e124b523813bfaf4c45b3d422f0298c81 SL-3.3.3 -28e100d0379a2b0710c57647a28fc5239d3d7b99 SL-3.3.4 -97977c67245f52db20eb15f1918cc0f24778cabc SL-3.4.0 -e59ffd3fe0838ae6b09b242a6e9df71761b88f41 SL-3.4.1 -16310aabccf315870f7cc9bf966926c0ad6954fa SL-3.4.2 -0a2ca6546b499239afeb66d17b2fadbcdbe36ab1 SL-3.4.3 -e1bb1ae7d8b12faeb37933a737c199cc9b9f89cc SL-3.4.4 -a49c715243a36a8a380504d14cb7416b3039c956 SL-3.4.5 -adc360e6bf21390d2665380951d85937cd29a604 SL-3.5.0 -13149a524874b608aeb76325b35faff113a5ea53 SL-3.5.1 -9b1b6f33aa5394b27bb652b31b5cb81ef6060370 SL-3.5.2 -a277b841729f2a62ba1e34acacc964bc13c1ad6f SL-3.5.3 -0a56f33ad6aa112032b14a41dad759ad377bdde9 SL-3.6.0 -75cf8e855ae1af6895a35da475314c2b5acf1850 SL-3.6.1 -f6741d5fe8d632651424484df0fe0cb4a01e9fbe SL-3.6.2 -fe4f7c5e9fd27e09d03deb1cc9ab3e5093f6309e SL-3.6.3 -91ed595b716f14f07409595b734fda891a59379e SL-3.6.4 -bf6d453046011a11de2643fac610cc5258650f82 SL-3.6.5 -b62e417982d9d4f3ec49d0de3b3c2e37c6d394c1 SL-3.6.6 -d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 SL-3.6.8 -70eda3721d36df3e00730629c42a1304e5bc65b8 SL-3.6.9 -5b54b36862ff8bc3b6935673c9d1c1f22ee8d521 SL-3.6.10 -2feb70a4cfde43f2898d95ff8fcae3e67805c7c2 SL-3.6.11 -88bbfd7a6971033f3aa103f3a3500ceb4c73521b SL-3.6.12 -0d9b9e50f1a8880e05f15688a9ec7d09e0e81013 SL-3.6.13 -5d746de933a98ca17887cde2fece80e9c7ab0b98 SL-3.7.0 -dcb4981ce255841b6083d8f65444b65d5a733a17 SL-3.7.1 -b842534cb4d76c9ef87676a62b1d2d19e79c015f SL-3.7.2 -962d3f98955bfc7310a7867c8cbc3df075e54aa9 SL-3.7.3 -d076568ff7883b41c149e6afb421f39c29dbfe2b SL-3.7.4 -fc066b82343fca51f9c1b8eda0abc6bee9bb4503 SL-3.7.5 -d029faf69f20a23007f32420a1ac6a3b89a6d441 SL-3.7.6 -83959480cb986522d07b151a0c778ab7f920d41b SL-3.7.7 -bba9b3722eea08949e4ff69591f736bf0f808434 SL-3.7.8 -a9f2d0cb11f73b06858e6083bb50083becc3f9cd SL-3.7.9 -91dae9494b4d147541c7a01902334ba19a7ec05e SL-3.7.10 -64799eb298834073a3e9992cd8d27c3cb9d30b10 SL-3.7.11 -3b44ea8988cb902f0dda8429e8d5e4569e304532 SL-3.7.12 -d86a7e1bc96d27b683f951d3701d5b7042158c68 SL-3.7.13 -a7872554f3665588f1e8347d472cec3a299254b3 SL-3.7.14 -3f11f57f2b4d15a9f987d12bc70ef507eefb5018 SL-3.7.15 -562e7dace7465060ac9adb2e8eca800b699ff024 SL-3.7.16 -bcc2770e21c125e0bab59141c51db9145aec068d SL-3.7.17 -2729c1daf0257d68a40bdbc4acf1a16184974bbd SL-3.7.18 -82973b38a6c9a457333e3519e4f2b16bb5eedf47 SL-3.7.19 -27094824773b907c2e559396e6f9ec3a963de52d SL-3.7.20 -9ecab4b0c7d8614767724a3422d3c1dca6bd4e4f SL-3.7.21 -bc61801f614022c920cb5c3df1d7d67a9561ce1f SL-3.7.22 -3be800e1afad9615442159e388d6d137be7b951e SL-3.7.23 -d3d0101e980ec95043e0af9b7903045d3bc447e4 SL-3.7.24 -9978a8c3a2ffce4a5e1c186256581c2ac139c9dc SL-3.7.25 -000e9dda4162cbf0a83ba88558b19473654a09a9 SL-3.7.26 -afd8d4756e8eda3c8f760625d1c17a2ad40ad6c8 SL-3.7.27 -566874eb5ab26c003ef7fb0e22ce40c5fa0013f4 SL-3.7.28 -d07f76c5b9860fb87924d00ca729f7d4532534d6 SL-3.7.29 -67edc442c80b8d2fadd2a6c4a7184b469906cdbf SL-3.7.30 -797ed69e6134ef48bb922577ab2540fb2d964668 SL-3.8.0 -3f61ed662347dc7c6941b8266e72746a66d90e2a SL-3.8.1 -3a62616f3dd8bd512fcdfd29ef033b2505b11213 SL-3.8.2 -3a62616f3dd8bd512fcdfd29ef033b2505b11213 SL-3.8.2 -60572f718879f786f6bc8b5c9373ebebf4693078 SL-3.8.3 -27e3cf444c4cc645884960a61325a9ee0e9a2d0f SL-3.8.4 -e821ef17c6edea4a59997719d8ba416d8c16e143 SL-3.8.5 -5a5bd148943bfb46cf2ff2ccf376c42dee93d19b SL-3.8.6 -ae3297cdd03ab14f19f3811acbc4acd3eb600336 SL-4.0.0 -759710a9acef61aaf7b69f4bc4a5a913de87ad8a SL-4.0.1 -e9d350764dfbf5a46229e627547ef5c1b1eeef00 SL-4.0.2 -86dfba7ec4332c323025ebeacd8bf343ed0d8cfd SL-4.0.3 -0a5de9ec2cb868f367501024d8d6958c20869053 SL-4.0.4 -450de775fff66a011be1a001acd117cc623c445d SL-4.0.5 -4070611edd95eb3a683d1cd97c4c07fe67793812 SL-4.0.6 -33981d8130f031597b4c7f4c981b18359afb61a0 SL-4.0.7 -45eaee56883df7a439ed3300c44d3126f7e3a41e SL-4.0.8 -b280a1c797a3891e68dbc237e73de9cf19f426e9 SL-4.1.1 -bfbba2244320dc2ae47758cd7edd8fa3b67dc756 SL-4.1.2 -b41e1e7c7876f7656c505f552b5888b4e478f92b SL-5.0.0 -c9ce2295012995e3cf5c57bcffcb4870b94c649f SL-5.0.1 -cea1632c002c065985ebea15eeeb4aac90f50545 SL-5.0.2 -02c24e9f4f7d8aa0de75f27817dda098582f4936 SL-5.0.3 -022709ef76a331cac1ba6ef1a6da8a5e9ef63f5a SL-5.0.4 -b4d76b5590fdf8bab72c64442353753a527cbc44 SL-5.0.5 -3e5035dfd8af49bd4c0009f0a76ef46a15991a45 SL-5.0.6 -abcab37e1b29414ab8c03af9ca2ab489d809788a SL-5.0.7 -505a492f30bd925bb48e2e093ae77c3c2b4c740f SL-5.0.8 -40ca7118765be85a043b31b011e4ee6bd9e33c95 SL-5.0.9 -ad0e15543836d64d6399d28b32852510435e344a SL-5.1.0 -26d9e9bb166a9a417f35b1863223a597af8185fd SL-5.1.1 -2eb917875efdfe920680b9049302d0f03721245d SL-5.1.2 -7c00e5b6cb3d95712e9d8e29277c805bca2bda90 SL-5.1.3 -7b6b020fd5ad9a8dc3670c5c92d1ca92e55fc485 SL-5.1.4 -2ea47f358b171178eb9a95503a1670d519c2886f SL-5.1.5 -04538b8157c1f5cdacd9403f0a395452d4a93689 SL-5.1.6 -ac3b1332ad4f55b7182a8cbcc1254535a0069f75 SL-5.1.7 -23ea0fe36fadf009a60c080392ce80e4bf8af8d9 SL-5.1.8 -52422540bfe54b71155aa455360bee6e3ef1fd96 SL-5.1.9 -821edfcd14919c0e95c590866171c61fb57e8623 SL-6.0.0 -21b7604680ef6b6ea67f8bebaaa588d6e263bdc1 SL-6.0.1 -a3143db58a0f6b005232bf9018e7fef17ff9ec90 SL-6.1.0 -50f0ece62ddb5a244ecb6d00ef5a89d80ad50efa SL-6.1.1 -82a89165e5929a6c3073d6cd60a543cb395f147b SL-6.2.0 -706bdc7e25c6e6b8fb56f4a13fcce2936e70a79c SL-6.2.1 -ec09daf1899c1c01c4ba0ba950fae572f2a612a8 SL-6.2.2 -ab2ec5c5423b277d23fd0511ce50c15123ff2e03 SL-6.2.3 -67297f9902857e357570c44722ad84de3aff974e SL-6.2.4 -9777aec6dc4a30a24537297ac040861ce16b82ae SL-6.3.0 -ece699718f163921717bb95a6131e94af4c4138f SL-6.3.1 -07f5d5bc9faebb45695853d40a9549773db816c0 SL-6.3.2 -d9a4bd15e2c852953d6c8e84d6f3b7ca442c0e7f SL-6.3.3 -4033b3f57e76f087235145a3016886ccdc87ffa3 SL-6.3.4 From 9f9afecb26f0b49e3b5e5ddbf30c9a41c507b5e7 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Tue, 10 Mar 2020 20:06:37 +0100 Subject: [PATCH 27/75] Incremented version to RLVa-2.3.0 --- indra/newview/rlvdefines.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 8026b59b57..fb35b3b9e7 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -35,8 +35,8 @@ const S32 RLV_VERSION_BUILD_COMPAT = 0; // Implementation version const S32 RLVa_VERSION_MAJOR = 2; -const S32 RLVa_VERSION_MINOR = 2; -const S32 RLVa_VERSION_PATCH = 2; +const S32 RLVa_VERSION_MINOR = 3; +const S32 RLVa_VERSION_PATCH = 0; // Uncomment before a final release //#define RLV_RELEASE From 980d4183111c8fe32aabc6d25bcb31eda790082a Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Wed, 11 Mar 2020 22:17:29 +0100 Subject: [PATCH 28/75] [FIXED] CATZ-553: Give-to-#RLV with nested subfolders --- indra/newview/llaisapi.cpp | 5 ++ indra/newview/llinventoryfunctions.cpp | 10 ++- indra/newview/llinventoryfunctions.h | 5 +- indra/newview/rlvinventory.cpp | 88 +++++++++++++++++--------- indra/newview/rlvinventory.h | 13 ++-- 5 files changed, 81 insertions(+), 40 deletions(-) diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index d8588528c0..0adc7a703a 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -452,6 +452,11 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht AISUpdate::parseUUIDArray(result, "_created_categories", ids); } break; + case UPDATECATEGORY: + { + AISUpdate::parseUUIDArray(result, "_updated_categories", ids); + } + break; default: break; } diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 4fcbd3aad3..ca6713e8e0 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -381,7 +381,10 @@ void update_all_marketplace_count() return; } -void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name) +//void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name) +// [RLVa:KB] - Checked: RLVa-2.3 (Give-to-#RLV) +void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name, LLPointer cb) +// [/RLVa:KB] { LLViewerInventoryCategory* cat; @@ -395,7 +398,10 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s LLSD updates; updates["name"] = new_name; - update_inventory_category(cat_id, updates, NULL); +// [RLVa:KB] - Checked: RLVa-2.3 (Give-to-#RLV) + update_inventory_category(cat_id, updates, cb); +// [/RLVa:KB] +// update_inventory_category(cat_id, updates, NULL); } void copy_inventory_category(LLInventoryModel* model, diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index fd106bc2d8..cb44d0966d 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -68,7 +68,10 @@ void update_marketplace_category(const LLUUID& cat_id, bool perform_consistency_ // Nudge all listing categories to signal that their marketplace status changed void update_all_marketplace_count(); -void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name); +// [RLVa:KB] - Checked: RLVa-2.3 (Give-to-#RLV) +void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name, LLPointer cb = nullptr); +// [/RLVa:KB] +//void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name); void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null, bool move_no_copy_items = false); diff --git a/indra/newview/rlvinventory.cpp b/indra/newview/rlvinventory.cpp index 082cc6065b..e3d06e2bdc 100644 --- a/indra/newview/rlvinventory.cpp +++ b/indra/newview/rlvinventory.cpp @@ -578,36 +578,56 @@ void RlvGiveToRLVOffer::onCategoryCreateCallback(LLUUID idFolder, RlvGiveToRLVOf pInstance->onDestinationCreated(idFolder, pInstance->m_DestPath.front()); } -// Checked: 2014-01-07 (RLVa-1.4.10) -void RlvGiveToRLVOffer::moveAndRename(const LLUUID& idFolder, const LLUUID& idDestination, const std::string& strName) +// static +void RlvGiveToRLVOffer::moveAndRename(const LLUUID& idFolder, const LLUUID& idDestination, const std::string& strName, const LLPointer cbFinal) { - const LLViewerInventoryCategory* pDest = gInventory.getCategory(idDestination); const LLViewerInventoryCategory* pFolder = gInventory.getCategory(idFolder); - if ( (pDest) && (pFolder) ) + if ( (idDestination.notNull()) && (pFolder) ) { - LLPointer pNewFolder = new LLViewerInventoryCategory(pFolder); - if (pDest->getUUID() != pFolder->getParentUUID()) - { - LLInventoryModel::update_list_t update; - LLInventoryModel::LLCategoryUpdate updOldParent(pFolder->getParentUUID(), -1); - update.push_back(updOldParent); - LLInventoryModel::LLCategoryUpdate updNewParent(pDest->getUUID(), 1); - update.push_back(updNewParent); - gInventory.accountForUpdate(update); + bool needsRename = (pFolder->getName() != strName); - pNewFolder->setParent(pDest->getUUID()); - pNewFolder->updateParentOnServer(FALSE); + LLPointer cbMove; + if (idDestination != pFolder->getParentUUID()) + { + // We have to move *after* the rename operation completes or AIS will drop it + if (!needsRename) + { + LLInventoryModel::update_list_t update; + LLInventoryModel::LLCategoryUpdate updOldParent(pFolder->getParentUUID(), -1); + update.push_back(updOldParent); + LLInventoryModel::LLCategoryUpdate updNewParent(idDestination, 1); + update.push_back(updNewParent); + gInventory.accountForUpdate(update); + + LLPointer pNewFolder = new LLViewerInventoryCategory(pFolder); + pNewFolder->setParent(idDestination); + pNewFolder->updateParentOnServer(FALSE); + + gInventory.updateCategory(pNewFolder); + gInventory.notifyObservers(); + + if (cbFinal) + { + cbFinal.get()->fire(idFolder); + } + } + else + { + cbMove = new LLBoostFuncInventoryCallback(boost::bind(RlvGiveToRLVOffer::moveAndRename, _1, idDestination, strName, cbFinal)); + } } - pNewFolder->rename(strName); - pNewFolder->updateServer(FALSE); - gInventory.updateCategory(pNewFolder); - - gInventory.notifyObservers(); + if (needsRename) + { + rename_category(&gInventory, idFolder, strName, (cbMove) ? cbMove : cbFinal); + } + } + else if (cbFinal) + { + cbFinal.get()->fire(LLUUID::null); } } -// Checked: 2010-04-18 (RLVa-1.2.0) void RlvGiveToRLVTaskOffer::changed(U32 mask) { if (mask & LLInventoryObserver::ADD) @@ -633,7 +653,6 @@ void RlvGiveToRLVTaskOffer::changed(U32 mask) } } -// Checked: 2010-04-18 (RLVa-1.2.0) void RlvGiveToRLVTaskOffer::done() { gInventory.removeObserver(this); @@ -642,22 +661,29 @@ void RlvGiveToRLVTaskOffer::done() doOnIdleOneTime(boost::bind(&RlvGiveToRLVTaskOffer::doneIdle, this)); } -// Checked: 2014-01-07 (RLVa-1.4.10) void RlvGiveToRLVTaskOffer::doneIdle() { - const LLViewerInventoryCategory* pFolder = (m_Folders.size()) ? gInventory.getCategory(m_Folders.front()) : NULL; + const LLViewerInventoryCategory* pFolder = (m_Folders.size()) ? gInventory.getCategory(m_Folders.front()) : nullptr; if ( (!pFolder) || (!createDestinationFolder(pFolder->getName())) ) delete this; } -// Checked: 2010-04-18 (RLVa-1.2.0) -void RlvGiveToRLVTaskOffer::onDestinationCreated(const LLUUID& idFolder, const std::string& strName) +void RlvGiveToRLVTaskOffer::onDestinationCreated(const LLUUID& idDestFolder, const std::string& strName) { - const LLViewerInventoryCategory* pTarget = (idFolder.notNull()) ? gInventory.getCategory(idFolder) : NULL; - if (pTarget) + if (const LLViewerInventoryCategory* pTarget = (idDestFolder.notNull()) ? gInventory.getCategory(idDestFolder) : nullptr) + { + moveAndRename(m_Folders.front(), idDestFolder, strName, new LLBoostFuncInventoryCallback(boost::bind(&RlvGiveToRLVTaskOffer::onOfferCompleted, this, _1))); + } + else + { + onOfferCompleted(LLUUID::null); + } +} + +void RlvGiveToRLVTaskOffer::onOfferCompleted(const LLUUID& idOfferedFolder) +{ + if (idOfferedFolder.notNull()) { - const LLUUID& idOfferedFolder = m_Folders.front(); - moveAndRename(idOfferedFolder, idFolder, strName); RlvBehaviourNotifyHandler::sendNotification("accepted_in_rlv inv_offer " + RlvInventory::instance().getSharedPath(idOfferedFolder)); } delete this; @@ -684,7 +710,7 @@ void RlvGiveToRLVAgentOffer::doneIdle() void RlvGiveToRLVAgentOffer::onDestinationCreated(const LLUUID& idFolder, const std::string& strName) { if ( (idFolder.notNull()) && (mComplete.size()) ) - moveAndRename(mComplete[0], idFolder, strName); + moveAndRename(mComplete[0], idFolder, strName, nullptr); delete this; } diff --git a/indra/newview/rlvinventory.h b/indra/newview/rlvinventory.h index 1279dff2f8..2cb7f8bc8e 100644 --- a/indra/newview/rlvinventory.h +++ b/indra/newview/rlvinventory.h @@ -131,8 +131,8 @@ protected: virtual ~RlvGiveToRLVOffer() {} protected: bool createDestinationFolder(const std::string& strPath); - virtual void onDestinationCreated(const LLUUID& idFolder, const std::string& strName) = 0; - void moveAndRename(const LLUUID& idFolder, const LLUUID& idDestination, const std::string& strName); + virtual void onDestinationCreated(const LLUUID& idDestFolder, const std::string& strName) = 0; + static void moveAndRename(const LLUUID& idFolder, const LLUUID& idDestination, const std::string& strName, LLPointer cb); private: static void onCategoryCreateCallback(LLUUID idFolder, RlvGiveToRLVOffer* pInstance); @@ -147,11 +147,12 @@ class RlvGiveToRLVTaskOffer : public LLInventoryObserver, RlvGiveToRLVOffer { public: RlvGiveToRLVTaskOffer(const LLUUID& idTransaction) : RlvGiveToRLVOffer(), m_idTransaction(idTransaction) {} - /*virtual*/ void changed(U32 mask); + void changed(U32 mask) override; protected: - /*virtual*/ void done(); - void doneIdle(); - /*virtual*/ void onDestinationCreated(const LLUUID& idFolder, const std::string& strName); + void done(); + void doneIdle(); + void onDestinationCreated(const LLUUID& idDestFolder, const std::string& strName) override; + void onOfferCompleted(const LLUUID& idOfferedFolder); protected: typedef std::vector folder_ref_t; From 17687f77012db020fbe18913105120f1c1cafc10 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 21 Mar 2020 16:48:19 +0100 Subject: [PATCH 29/75] Comment out all @setenv related commands to get the viewer up and running again --- indra/newview/llfloaterpreference.cpp | 10 +- indra/newview/rlvextensions.cpp | 680 +++++++++++++------------- indra/newview/rlvhandler.cpp | 58 +-- indra/newview/rlvhelper.cpp | 2 +- 4 files changed, 375 insertions(+), 375 deletions(-) diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 81a19c4197..b1b51f1926 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1395,12 +1395,12 @@ void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState() LLCheckBoxCtrl* ctrl_wind_light = getChild("WindLightUseAtmosShaders"); LLSliderCtrl* sky = getChild("SkyMeshDetail"); LLTextBox* sky_text = getChild("SkyMeshDetailText"); -// ctrl_wind_light->setEnabled(TRUE); + ctrl_wind_light->setEnabled(TRUE); // [RLVa:KB] - Checked: 2010-03-18 (RLVa-1.2.0a) | Modified: RLVa-0.2.0a - // "Atmospheric Shaders" can't be disabled - but can be enabled - under @setenv=n - bool fCtrlWindLightEnable = fCtrlShaderEnable && shaders; - ctrl_wind_light->setEnabled( - fCtrlWindLightEnable && ((!gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) || (!gSavedSettings.getBOOL("WindLightUseAtmosShaders"))) ); +// // "Atmospheric Shaders" can't be disabled - but can be enabled - under @setenv=n +// bool fCtrlWindLightEnable = fCtrlShaderEnable && shaders; +// ctrl_wind_light->setEnabled( +// fCtrlWindLightEnable && ((!gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) || (!gSavedSettings.getBOOL("WindLightUseAtmosShaders"))) ); // [/RLVa:KB] sky->setEnabled(TRUE); sky_text->setEnabled(TRUE); diff --git a/indra/newview/rlvextensions.cpp b/indra/newview/rlvextensions.cpp index baa2be38fc..cabf1891eb 100644 --- a/indra/newview/rlvextensions.cpp +++ b/indra/newview/rlvextensions.cpp @@ -17,9 +17,9 @@ #include "llviewerprecompiledheaders.h" #include "llagent.h" #include "llagentcamera.h" -#include "lldaycyclemanager.h" +//#include "lldaycyclemanager.h" #include "llvoavatarself.h" -#include "llwlparammanager.h" +//#include "llwlparammanager.h" #include "rlvextensions.h" #include "rlvhandler.h" @@ -27,349 +27,349 @@ // ============================================================================ -class RlvWindLightControl -{ -public: - enum EType { TYPE_COLOR, TYPE_COLOR_R, TYPE_FLOAT, TYPE_UNKNOWN }; - enum EColorComponent { COMPONENT_R, COMPONENT_G, COMPONENT_B, COMPONENT_I, COMPONENT_NONE }; -public: - RlvWindLightControl(WLColorControl* pCtrl, bool fColorR) : m_eType((!fColorR) ? TYPE_COLOR: TYPE_COLOR_R), m_pColourCtrl(pCtrl), m_pFloatCtrl(NULL) {} - RlvWindLightControl(WLFloatControl* pCtrl) : m_eType(TYPE_FLOAT), m_pColourCtrl(NULL), m_pFloatCtrl(pCtrl) {} - - EType getControlType() const { return m_eType; } - bool isColorType() const { return (TYPE_COLOR == m_eType) || (TYPE_COLOR_R == m_eType); } - bool isFloatType() const { return (TYPE_FLOAT == m_eType); } - // TYPE_COLOR and TYPE_COLOR_R - F32 getColorComponent(EColorComponent eComponent, bool& fError) const; - LLVector4 getColorVector(bool& fError) const; - bool setColorComponent(EColorComponent eComponent, F32 nValue); - // TYPE_FLOAT - F32 getFloat(bool& fError) const; - bool setFloat(F32 nValue); - - static EColorComponent getComponentFromCharacter(char ch); -protected: - EType m_eType; // Type of the WindLight control - WLColorControl* m_pColourCtrl; - WLFloatControl* m_pFloatCtrl; -}; +//class RlvWindLightControl +//{ +//public: +// enum EType { TYPE_COLOR, TYPE_COLOR_R, TYPE_FLOAT, TYPE_UNKNOWN }; +// enum EColorComponent { COMPONENT_R, COMPONENT_G, COMPONENT_B, COMPONENT_I, COMPONENT_NONE }; +//public: +// RlvWindLightControl(WLColorControl* pCtrl, bool fColorR) : m_eType((!fColorR) ? TYPE_COLOR: TYPE_COLOR_R), m_pColourCtrl(pCtrl), m_pFloatCtrl(NULL) {} +// RlvWindLightControl(WLFloatControl* pCtrl) : m_eType(TYPE_FLOAT), m_pColourCtrl(NULL), m_pFloatCtrl(pCtrl) {} +// +// EType getControlType() const { return m_eType; } +// bool isColorType() const { return (TYPE_COLOR == m_eType) || (TYPE_COLOR_R == m_eType); } +// bool isFloatType() const { return (TYPE_FLOAT == m_eType); } +// // TYPE_COLOR and TYPE_COLOR_R +// F32 getColorComponent(EColorComponent eComponent, bool& fError) const; +// LLVector4 getColorVector(bool& fError) const; +// bool setColorComponent(EColorComponent eComponent, F32 nValue); +// // TYPE_FLOAT +// F32 getFloat(bool& fError) const; +// bool setFloat(F32 nValue); +// +// static EColorComponent getComponentFromCharacter(char ch); +//protected: +// EType m_eType; // Type of the WindLight control +// WLColorControl* m_pColourCtrl; +// WLFloatControl* m_pFloatCtrl; +//}; // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -static F32 get_intensity_from_color(const LLVector4& v) -{ - return llmax(v.mV[0], v.mV[1], v.mV[2]); -} +//static F32 get_intensity_from_color(const LLVector4& v) +//{ +// return llmax(v.mV[0], v.mV[1], v.mV[2]); +//} // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -F32 RlvWindLightControl::getColorComponent(EColorComponent eComponent, bool& fError) const -{ - switch (eComponent) - { - case COMPONENT_R: return getColorVector(fError).mV[0]; - case COMPONENT_G: return getColorVector(fError).mV[1]; - case COMPONENT_B: return getColorVector(fError).mV[2]; - case COMPONENT_I: return get_intensity_from_color(getColorVector(fError)); // SL-2.8: Always seems to be 1.0 so get it manually - default : RLV_ASSERT(false); fError = true; return 0.0; - } -} +//F32 RlvWindLightControl::getColorComponent(EColorComponent eComponent, bool& fError) const +//{ +// switch (eComponent) +// { +// case COMPONENT_R: return getColorVector(fError).mV[0]; +// case COMPONENT_G: return getColorVector(fError).mV[1]; +// case COMPONENT_B: return getColorVector(fError).mV[2]; +// case COMPONENT_I: return get_intensity_from_color(getColorVector(fError)); // SL-2.8: Always seems to be 1.0 so get it manually +// default : RLV_ASSERT(false); fError = true; return 0.0; +// } +//} // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -RlvWindLightControl::EColorComponent RlvWindLightControl::getComponentFromCharacter(char ch) -{ - if (('r' == ch) || ('x' == ch)) - return COMPONENT_R; - else if (('g' == ch) || ('y' == ch)) - return COMPONENT_G; - else if (('b' == ch) || ('d' == ch)) - return COMPONENT_B; - else if ('i' == ch) - return COMPONENT_I; - return COMPONENT_NONE; -} +//RlvWindLightControl::EColorComponent RlvWindLightControl::getComponentFromCharacter(char ch) +//{ +// if (('r' == ch) || ('x' == ch)) +// return COMPONENT_R; +// else if (('g' == ch) || ('y' == ch)) +// return COMPONENT_G; +// else if (('b' == ch) || ('d' == ch)) +// return COMPONENT_B; +// else if ('i' == ch) +// return COMPONENT_I; +// return COMPONENT_NONE; +//} // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -LLVector4 RlvWindLightControl::getColorVector(bool& fError) const -{ - if ((fError = !isColorType())) - return LLVector4(0, 0, 0, 0); - F32 nMult = (m_pColourCtrl->isSunOrAmbientColor) ? 3.0f : ((m_pColourCtrl->isBlueHorizonOrDensity) ? 2.0f : 1.0f); - return LLWLParamManager::getInstance()->mCurParams.getVector(m_pColourCtrl->mName, fError) / nMult; -} +//LLVector4 RlvWindLightControl::getColorVector(bool& fError) const +//{ +// if ((fError = !isColorType())) +// return LLVector4(0, 0, 0, 0); +// F32 nMult = (m_pColourCtrl->isSunOrAmbientColor) ? 3.0f : ((m_pColourCtrl->isBlueHorizonOrDensity) ? 2.0f : 1.0f); +// return LLWLParamManager::getInstance()->mCurParams.getVector(m_pColourCtrl->mName, fError) / nMult; +//} // Checked: 2011-08-28 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -bool RlvWindLightControl::setColorComponent(EColorComponent eComponent, F32 nValue) -{ - if (isColorType()) - { - nValue *= (m_pColourCtrl->isSunOrAmbientColor) ? 3.0f : ((m_pColourCtrl->isBlueHorizonOrDensity) ? 2.0f : 1.0f); - if (COMPONENT_I == eComponent) // (See: LLFloaterWindLight::onColorControlIMoved) - { - if (m_pColourCtrl->hasSliderName) - { - F32 curMax = llmax(m_pColourCtrl->r, m_pColourCtrl->g, m_pColourCtrl->b); - if ( (0.0f == nValue) || (0.0f == curMax) ) - { - m_pColourCtrl->r = m_pColourCtrl->g = m_pColourCtrl->b = m_pColourCtrl->i = nValue; - } - else - { - F32 nDelta = (nValue - curMax) / curMax; - m_pColourCtrl->r *= (1.0f + nDelta); - m_pColourCtrl->g *= (1.0f + nDelta); - m_pColourCtrl->b *= (1.0f + nDelta); - m_pColourCtrl->i = nValue; - } - } - } - else // (See: LLFloaterWindLight::onColorControlRMoved) - { - F32* pnValue = (COMPONENT_R == eComponent) ? &m_pColourCtrl->r : (COMPONENT_G == eComponent) ? &m_pColourCtrl->g : (COMPONENT_B == eComponent) ? &m_pColourCtrl->b : NULL; - if (pnValue) - *pnValue = nValue; - if (m_pColourCtrl->hasSliderName) - m_pColourCtrl->i = llmax(m_pColourCtrl->r, m_pColourCtrl->g, m_pColourCtrl->b); - } - m_pColourCtrl->update(LLWLParamManager::getInstance()->mCurParams); - LLWLParamManager::getInstance()->propagateParameters(); - } - return isColorType(); -} +//bool RlvWindLightControl::setColorComponent(EColorComponent eComponent, F32 nValue) +//{ +// if (isColorType()) +// { +// nValue *= (m_pColourCtrl->isSunOrAmbientColor) ? 3.0f : ((m_pColourCtrl->isBlueHorizonOrDensity) ? 2.0f : 1.0f); +// if (COMPONENT_I == eComponent) // (See: LLFloaterWindLight::onColorControlIMoved) +// { +// if (m_pColourCtrl->hasSliderName) +// { +// F32 curMax = llmax(m_pColourCtrl->r, m_pColourCtrl->g, m_pColourCtrl->b); +// if ( (0.0f == nValue) || (0.0f == curMax) ) +// { +// m_pColourCtrl->r = m_pColourCtrl->g = m_pColourCtrl->b = m_pColourCtrl->i = nValue; +// } +// else +// { +// F32 nDelta = (nValue - curMax) / curMax; +// m_pColourCtrl->r *= (1.0f + nDelta); +// m_pColourCtrl->g *= (1.0f + nDelta); +// m_pColourCtrl->b *= (1.0f + nDelta); +// m_pColourCtrl->i = nValue; +// } +// } +// } +// else // (See: LLFloaterWindLight::onColorControlRMoved) +// { +// F32* pnValue = (COMPONENT_R == eComponent) ? &m_pColourCtrl->r : (COMPONENT_G == eComponent) ? &m_pColourCtrl->g : (COMPONENT_B == eComponent) ? &m_pColourCtrl->b : NULL; +// if (pnValue) +// *pnValue = nValue; +// if (m_pColourCtrl->hasSliderName) +// m_pColourCtrl->i = llmax(m_pColourCtrl->r, m_pColourCtrl->g, m_pColourCtrl->b); +// } +// m_pColourCtrl->update(LLWLParamManager::getInstance()->mCurParams); +// LLWLParamManager::getInstance()->propagateParameters(); +// } +// return isColorType(); +//} // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -F32 RlvWindLightControl::getFloat(bool& fError) const -{ - return (!(fError = (TYPE_FLOAT != m_eType))) ? LLWLParamManager::getInstance()->mCurParams.getVector(m_pFloatCtrl->mName, fError).mV[0] * m_pFloatCtrl->mult : 0.0; -} +// F32 RlvWindLightControl::getFloat(bool& fError) const +// { +// return (!(fError = (TYPE_FLOAT != m_eType))) ? LLWLParamManager::getInstance()->mCurParams.getVector(m_pFloatCtrl->mName, fError).mV[0] * m_pFloatCtrl->mult : 0.0; +// } // Checked: 2011-08-28 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -bool RlvWindLightControl::setFloat(F32 nValue) -{ - if (TYPE_FLOAT == m_eType) - { - m_pFloatCtrl->x = nValue / m_pFloatCtrl->mult; - m_pFloatCtrl->update(LLWLParamManager::getInstance()->mCurParams); - LLWLParamManager::getInstance()->propagateParameters(); - } - return (TYPE_FLOAT == m_eType); -} +//bool RlvWindLightControl::setFloat(F32 nValue) +//{ +// if (TYPE_FLOAT == m_eType) +// { +// m_pFloatCtrl->x = nValue / m_pFloatCtrl->mult; +// m_pFloatCtrl->update(LLWLParamManager::getInstance()->mCurParams); +// LLWLParamManager::getInstance()->propagateParameters(); +// } +// return (TYPE_FLOAT == m_eType); +//} // ============================================================================ -class RlvWindLight : public LLSingleton -{ - LLSINGLETON(RlvWindLight); -public: - std::string getValue(const std::string& strSetting, bool& fError); - bool setValue(const std::string& strRlvName, const std::string& strValue); - -protected: - std::map m_ControlLookupMap; -}; +//class RlvWindLight : public LLSingleton +//{ +// LLSINGLETON(RlvWindLight); +//public: +// std::string getValue(const std::string& strSetting, bool& fError); +// bool setValue(const std::string& strRlvName, const std::string& strValue); +// +//protected: +// std::map m_ControlLookupMap; +//}; // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -RlvWindLight::RlvWindLight() -{ - LLWLParamManager* pWLParamMgr = LLWLParamManager::getInstance(); - - // TYPE_FLOAT - m_ControlLookupMap.insert(std::pair("cloudcoverage", RlvWindLightControl(&pWLParamMgr->mCloudCoverage))); - m_ControlLookupMap.insert(std::pair("cloudscale", RlvWindLightControl(&pWLParamMgr->mCloudScale))); - m_ControlLookupMap.insert(std::pair("densitymultiplier", RlvWindLightControl(&pWLParamMgr->mDensityMult))); - m_ControlLookupMap.insert(std::pair("distancemultiplier", RlvWindLightControl(&pWLParamMgr->mDistanceMult))); - m_ControlLookupMap.insert(std::pair("maxaltitude", RlvWindLightControl(&pWLParamMgr->mMaxAlt))); - m_ControlLookupMap.insert(std::pair("scenegamma", RlvWindLightControl(&pWLParamMgr->mWLGamma))); - m_ControlLookupMap.insert(std::pair("hazedensity", RlvWindLightControl(&pWLParamMgr->mHazeDensity))); - m_ControlLookupMap.insert(std::pair("hazehorizon", RlvWindLightControl(&pWLParamMgr->mHazeHorizon))); - // TYPE_COLOR - m_ControlLookupMap.insert(std::pair("ambient", RlvWindLightControl(&pWLParamMgr->mAmbient, false))); - m_ControlLookupMap.insert(std::pair("bluedensity", RlvWindLightControl(&pWLParamMgr->mBlueDensity, false))); - m_ControlLookupMap.insert(std::pair("bluehorizon", RlvWindLightControl(&pWLParamMgr->mBlueHorizon, false))); - m_ControlLookupMap.insert(std::pair("cloud", RlvWindLightControl(&pWLParamMgr->mCloudMain, false))); - m_ControlLookupMap.insert(std::pair("cloudcolor", RlvWindLightControl(&pWLParamMgr->mCloudColor, false))); - m_ControlLookupMap.insert(std::pair("clouddetail", RlvWindLightControl(&pWLParamMgr->mCloudDetail, false))); - m_ControlLookupMap.insert(std::pair("sunmooncolor", RlvWindLightControl(&pWLParamMgr->mSunlight, false))); -} +//RlvWindLight::RlvWindLight() +//{ +// LLWLParamManager* pWLParamMgr = LLWLParamManager::getInstance(); +// +// // TYPE_FLOAT +// m_ControlLookupMap.insert(std::pair("cloudcoverage", RlvWindLightControl(&pWLParamMgr->mCloudCoverage))); +// m_ControlLookupMap.insert(std::pair("cloudscale", RlvWindLightControl(&pWLParamMgr->mCloudScale))); +// m_ControlLookupMap.insert(std::pair("densitymultiplier", RlvWindLightControl(&pWLParamMgr->mDensityMult))); +// m_ControlLookupMap.insert(std::pair("distancemultiplier", RlvWindLightControl(&pWLParamMgr->mDistanceMult))); +// m_ControlLookupMap.insert(std::pair("maxaltitude", RlvWindLightControl(&pWLParamMgr->mMaxAlt))); +// m_ControlLookupMap.insert(std::pair("scenegamma", RlvWindLightControl(&pWLParamMgr->mWLGamma))); +// m_ControlLookupMap.insert(std::pair("hazedensity", RlvWindLightControl(&pWLParamMgr->mHazeDensity))); +// m_ControlLookupMap.insert(std::pair("hazehorizon", RlvWindLightControl(&pWLParamMgr->mHazeHorizon))); +// // TYPE_COLOR +// m_ControlLookupMap.insert(std::pair("ambient", RlvWindLightControl(&pWLParamMgr->mAmbient, false))); +// m_ControlLookupMap.insert(std::pair("bluedensity", RlvWindLightControl(&pWLParamMgr->mBlueDensity, false))); +// m_ControlLookupMap.insert(std::pair("bluehorizon", RlvWindLightControl(&pWLParamMgr->mBlueHorizon, false))); +// m_ControlLookupMap.insert(std::pair("cloud", RlvWindLightControl(&pWLParamMgr->mCloudMain, false))); +// m_ControlLookupMap.insert(std::pair("cloudcolor", RlvWindLightControl(&pWLParamMgr->mCloudColor, false))); +// m_ControlLookupMap.insert(std::pair("clouddetail", RlvWindLightControl(&pWLParamMgr->mCloudDetail, false))); +// m_ControlLookupMap.insert(std::pair("sunmooncolor", RlvWindLightControl(&pWLParamMgr->mSunlight, false))); +//} // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -std::string RlvWindLight::getValue(const std::string& strSetting, bool& fError) -{ - LLWLParamManager* pWLParams = LLWLParamManager::getInstance(); - LLEnvManagerNew* pEnvMgr = LLEnvManagerNew::getInstance(); - - fError = false; // Assume we won't fail - if ("preset" == strSetting) - return (pEnvMgr->getUseFixedSky()) ? pEnvMgr->getSkyPresetName() : std::string(); - else if ("daycycle" == strSetting) - return (pEnvMgr->getUseDayCycle()) ? pEnvMgr->getDayCycleName() : std::string(); - - F32 nValue = 0.0f; - if ("daytime" == strSetting) - { - nValue = (pEnvMgr->getUseFixedSky()) ? pWLParams->mCurParams.getFloat("sun_angle", fError) / F_TWO_PI : -1.0f; - } - else if (("sunglowfocus" == strSetting) || ("sunglowsize" == strSetting)) - { - pWLParams->mGlow = pWLParams->mCurParams.getVector(pWLParams->mGlow.mName, fError); - RLV_ASSERT_DBG(!fError); - - if ("sunglowfocus" == strSetting) - nValue = -pWLParams->mGlow.b / 5.0f; - else - nValue = 2 - pWLParams->mGlow.r / 20.0f; - } - else if ("starbrightness" == strSetting) nValue = pWLParams->mCurParams.getStarBrightness(); - else if ("eastangle" == strSetting) nValue = pWLParams->mCurParams.getEastAngle() / F_TWO_PI; - else if ("sunmoonposition" == strSetting) nValue = pWLParams->mCurParams.getSunAngle() / F_TWO_PI; - else if ("cloudscrollx" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollX() - 10.0f; - else if ("cloudscrolly" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollY() - 10.0f; - else - { - std::map::const_iterator itControl = m_ControlLookupMap.find(strSetting); - if (m_ControlLookupMap.end() != itControl) - { - switch (itControl->second.getControlType()) - { - case RlvWindLightControl::TYPE_FLOAT: - nValue = itControl->second.getFloat(fError); - break; - case RlvWindLightControl::TYPE_COLOR_R: - nValue = itControl->second.getColorComponent(RlvWindLightControl::COMPONENT_R, fError); - break; - default: - fError = true; - break; - } - } - else - { - // Couldn't find the exact name, check for a color control name - RlvWindLightControl::EColorComponent eComponent = RlvWindLightControl::getComponentFromCharacter(strSetting[strSetting.length() - 1]); - if (RlvWindLightControl::COMPONENT_NONE != eComponent) - itControl = m_ControlLookupMap.find(strSetting.substr(0, strSetting.length() - 1)); - if ( (m_ControlLookupMap.end() != itControl) && (itControl->second.isColorType()) ) - nValue = itControl->second.getColorComponent(eComponent, fError); - else - fError = true; - } - } - return llformat("%f", nValue); -} +//std::string RlvWindLight::getValue(const std::string& strSetting, bool& fError) +//{ +// LLWLParamManager* pWLParams = LLWLParamManager::getInstance(); +// LLEnvManagerNew* pEnvMgr = LLEnvManagerNew::getInstance(); +// +// fError = false; // Assume we won't fail +// if ("preset" == strSetting) +// return (pEnvMgr->getUseFixedSky()) ? pEnvMgr->getSkyPresetName() : std::string(); +// else if ("daycycle" == strSetting) +// return (pEnvMgr->getUseDayCycle()) ? pEnvMgr->getDayCycleName() : std::string(); +// +// F32 nValue = 0.0f; +// if ("daytime" == strSetting) +// { +// nValue = (pEnvMgr->getUseFixedSky()) ? pWLParams->mCurParams.getFloat("sun_angle", fError) / F_TWO_PI : -1.0f; +// } +// else if (("sunglowfocus" == strSetting) || ("sunglowsize" == strSetting)) +// { +// pWLParams->mGlow = pWLParams->mCurParams.getVector(pWLParams->mGlow.mName, fError); +// RLV_ASSERT_DBG(!fError); +// +// if ("sunglowfocus" == strSetting) +// nValue = -pWLParams->mGlow.b / 5.0f; +// else +// nValue = 2 - pWLParams->mGlow.r / 20.0f; +// } +// else if ("starbrightness" == strSetting) nValue = pWLParams->mCurParams.getStarBrightness(); +// else if ("eastangle" == strSetting) nValue = pWLParams->mCurParams.getEastAngle() / F_TWO_PI; +// else if ("sunmoonposition" == strSetting) nValue = pWLParams->mCurParams.getSunAngle() / F_TWO_PI; +// else if ("cloudscrollx" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollX() - 10.0f; +// else if ("cloudscrolly" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollY() - 10.0f; +// else +// { +// std::map::const_iterator itControl = m_ControlLookupMap.find(strSetting); +// if (m_ControlLookupMap.end() != itControl) +// { +// switch (itControl->second.getControlType()) +// { +// case RlvWindLightControl::TYPE_FLOAT: +// nValue = itControl->second.getFloat(fError); +// break; +// case RlvWindLightControl::TYPE_COLOR_R: +// nValue = itControl->second.getColorComponent(RlvWindLightControl::COMPONENT_R, fError); +// break; +// default: +// fError = true; +// break; +// } +// } +// else +// { +// // Couldn't find the exact name, check for a color control name +// RlvWindLightControl::EColorComponent eComponent = RlvWindLightControl::getComponentFromCharacter(strSetting[strSetting.length() - 1]); +// if (RlvWindLightControl::COMPONENT_NONE != eComponent) +// itControl = m_ControlLookupMap.find(strSetting.substr(0, strSetting.length() - 1)); +// if ( (m_ControlLookupMap.end() != itControl) && (itControl->second.isColorType()) ) +// nValue = itControl->second.getColorComponent(eComponent, fError); +// else +// fError = true; +// } +// } +// return llformat("%f", nValue); +//} // Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -bool RlvWindLight::setValue(const std::string& strRlvName, const std::string& strValue) -{ - F32 nValue = 0.0f; - // Sanity check - make sure strValue specifies a number for all settings except "preset" and "daycycle" - if ( (RlvSettings::getNoSetEnv()) || - ( (!LLStringUtil::convertToF32(strValue, nValue)) && (("preset" != strRlvName) && ("daycycle" != strRlvName)) ) ) - { - return false; - } - - LLWLParamManager* pWLParams = LLWLParamManager::getInstance(); - LLEnvManagerNew* pEnvMgr = LLEnvManagerNew::getInstance(); - - if ("daytime" == strRlvName) - { - if (0.0f <= nValue) - { - pWLParams->mAnimator.deactivate(); - pWLParams->mAnimator.setDayTime(nValue); - pWLParams->mAnimator.update(pWLParams->mCurParams); - } - else - { - pEnvMgr->setUserPrefs(pEnvMgr->getWaterPresetName(), pEnvMgr->getSkyPresetName(), pEnvMgr->getDayCycleName(), false, true); - } - return true; - } - else if ("preset" == strRlvName) - { - std::string strPresetName = pWLParams->findPreset(strValue, LLEnvKey::SCOPE_LOCAL); - if (!strPresetName.empty()) - pEnvMgr->useSkyPreset(strPresetName); - return !strPresetName.empty(); - } - else if ("daycycle" == strRlvName) - { - std::string strPresetName = LLDayCycleManager::instance().findPreset(strValue); - if (!strPresetName.empty()) - pEnvMgr->useDayCycle(strValue, LLEnvKey::SCOPE_LOCAL); - return !strPresetName.empty(); - } - - bool fError = false; - pWLParams->mAnimator.deactivate(); - if (("sunglowfocus" == strRlvName) || ("sunglowsize" == strRlvName)) - { - pWLParams->mGlow = pWLParams->mCurParams.getVector(pWLParams->mGlow.mName, fError); - RLV_ASSERT_DBG(!fError); - - if ("sunglowfocus" == strRlvName) - pWLParams->mGlow.b = -nValue * 5; - else - pWLParams->mGlow.r = (2 - nValue) * 20; - - pWLParams->mGlow.update(pWLParams->mCurParams); - pWLParams->propagateParameters(); - return true; - } - else if ("starbrightness" == strRlvName) - { - pWLParams->mCurParams.setStarBrightness(nValue); - return true; - } - else if (("eastangle" == strRlvName) || ("sunmoonposition" == strRlvName)) - { - if ("eastangle" == strRlvName) - pWLParams->mCurParams.setEastAngle(F_TWO_PI * nValue); - else - pWLParams->mCurParams.setSunAngle(F_TWO_PI * nValue); - - // Set the sun vector - pWLParams->mLightnorm.r = -sin(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); - pWLParams->mLightnorm.g = sin(pWLParams->mCurParams.getSunAngle()); - pWLParams->mLightnorm.b = cos(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); - pWLParams->mLightnorm.i = 1.f; - - pWLParams->propagateParameters(); - return true; - } - else if ("cloudscrollx" == strRlvName) - { - pWLParams->mCurParams.setCloudScrollX(nValue + 10.0f); - return true; - } - else if ("cloudscrolly" == strRlvName) - { - pWLParams->mCurParams.setCloudScrollY(nValue + 10.0f); - return true; - } - - std::map::iterator itControl = m_ControlLookupMap.find(strRlvName); - if (m_ControlLookupMap.end() != itControl) - { - switch (itControl->second.getControlType()) - { - case RlvWindLightControl::TYPE_FLOAT: - return itControl->second.setFloat(nValue); - case RlvWindLightControl::TYPE_COLOR_R: - return itControl->second.setColorComponent(RlvWindLightControl::COMPONENT_R, nValue); - default: - RLV_ASSERT(false); - } - } - else - { - // Couldn't find the exact name, check for a color control name - RlvWindLightControl::EColorComponent eComponent = RlvWindLightControl::getComponentFromCharacter(strRlvName[strRlvName.length() - 1]); - if (RlvWindLightControl::COMPONENT_NONE != eComponent) - itControl = m_ControlLookupMap.find(strRlvName.substr(0, strRlvName.length() - 1)); - if ( (m_ControlLookupMap.end() != itControl) && (itControl->second.isColorType()) ) - return itControl->second.setColorComponent(eComponent, nValue); - } - return false; -} +//bool RlvWindLight::setValue(const std::string& strRlvName, const std::string& strValue) +//{ +// F32 nValue = 0.0f; +// // Sanity check - make sure strValue specifies a number for all settings except "preset" and "daycycle" +// if ( (RlvSettings::getNoSetEnv()) || +// ( (!LLStringUtil::convertToF32(strValue, nValue)) && (("preset" != strRlvName) && ("daycycle" != strRlvName)) ) ) +// { +// return false; +// } +// +// LLWLParamManager* pWLParams = LLWLParamManager::getInstance(); +// LLEnvManagerNew* pEnvMgr = LLEnvManagerNew::getInstance(); +// +// if ("daytime" == strRlvName) +// { +// if (0.0f <= nValue) +// { +// pWLParams->mAnimator.deactivate(); +// pWLParams->mAnimator.setDayTime(nValue); +// pWLParams->mAnimator.update(pWLParams->mCurParams); +// } +// else +// { +// pEnvMgr->setUserPrefs(pEnvMgr->getWaterPresetName(), pEnvMgr->getSkyPresetName(), pEnvMgr->getDayCycleName(), false, true); +// } +// return true; +// } +// else if ("preset" == strRlvName) +// { +// std::string strPresetName = pWLParams->findPreset(strValue, LLEnvKey::SCOPE_LOCAL); +// if (!strPresetName.empty()) +// pEnvMgr->useSkyPreset(strPresetName); +// return !strPresetName.empty(); +// } +// else if ("daycycle" == strRlvName) +// { +// std::string strPresetName = LLDayCycleManager::instance().findPreset(strValue); +// if (!strPresetName.empty()) +// pEnvMgr->useDayCycle(strValue, LLEnvKey::SCOPE_LOCAL); +// return !strPresetName.empty(); +// } +// +// bool fError = false; +// pWLParams->mAnimator.deactivate(); +// if (("sunglowfocus" == strRlvName) || ("sunglowsize" == strRlvName)) +// { +// pWLParams->mGlow = pWLParams->mCurParams.getVector(pWLParams->mGlow.mName, fError); +// RLV_ASSERT_DBG(!fError); +// +// if ("sunglowfocus" == strRlvName) +// pWLParams->mGlow.b = -nValue * 5; +// else +// pWLParams->mGlow.r = (2 - nValue) * 20; +// +// pWLParams->mGlow.update(pWLParams->mCurParams); +// pWLParams->propagateParameters(); +// return true; +// } +// else if ("starbrightness" == strRlvName) +// { +// pWLParams->mCurParams.setStarBrightness(nValue); +// return true; +// } +// else if (("eastangle" == strRlvName) || ("sunmoonposition" == strRlvName)) +// { +// if ("eastangle" == strRlvName) +// pWLParams->mCurParams.setEastAngle(F_TWO_PI * nValue); +// else +// pWLParams->mCurParams.setSunAngle(F_TWO_PI * nValue); +// +// // Set the sun vector +// pWLParams->mLightnorm.r = -sin(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); +// pWLParams->mLightnorm.g = sin(pWLParams->mCurParams.getSunAngle()); +// pWLParams->mLightnorm.b = cos(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); +// pWLParams->mLightnorm.i = 1.f; +// +// pWLParams->propagateParameters(); +// return true; +// } +// else if ("cloudscrollx" == strRlvName) +// { +// pWLParams->mCurParams.setCloudScrollX(nValue + 10.0f); +// return true; +// } +// else if ("cloudscrolly" == strRlvName) +// { +// pWLParams->mCurParams.setCloudScrollY(nValue + 10.0f); +// return true; +// } +// +// std::map::iterator itControl = m_ControlLookupMap.find(strRlvName); +// if (m_ControlLookupMap.end() != itControl) +// { +// switch (itControl->second.getControlType()) +// { +// case RlvWindLightControl::TYPE_FLOAT: +// return itControl->second.setFloat(nValue); +// case RlvWindLightControl::TYPE_COLOR_R: +// return itControl->second.setColorComponent(RlvWindLightControl::COMPONENT_R, nValue); +// default: +// RLV_ASSERT(false); +// } +// } +// else +// { +// // Couldn't find the exact name, check for a color control name +// RlvWindLightControl::EColorComponent eComponent = RlvWindLightControl::getComponentFromCharacter(strRlvName[strRlvName.length() - 1]); +// if (RlvWindLightControl::COMPONENT_NONE != eComponent) +// itControl = m_ControlLookupMap.find(strRlvName.substr(0, strRlvName.length() - 1)); +// if ( (m_ControlLookupMap.end() != itControl) && (itControl->second.isColorType()) ) +// return itControl->second.setColorComponent(eComponent, nValue); +// } +// return false; +//} // ============================================================================ @@ -439,24 +439,24 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet) return true; } } - else if ("env" == strBehaviour) - { - bool fError = false; - if ( ("get" == strGetSet) && (RLV_TYPE_REPLY == rlvCmd.getParamType()) ) - { - RlvUtil::sendChatReply(rlvCmd.getParam(), RlvWindLight::instance().getValue(strSetting, fError)); - eRet = (!fError) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN; - return true; - } - else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) ) - { - if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, rlvCmd.getObjectID())) - eRet = (RlvWindLight::instance().setValue(strSetting, rlvCmd.getOption())) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN; - else - eRet = RLV_RET_FAILED_LOCK; - return true; - } - } +// else if ("env" == strBehaviour) +// { +// bool fError = false; +// if ( ("get" == strGetSet) && (RLV_TYPE_REPLY == rlvCmd.getParamType()) ) +// { +// RlvUtil::sendChatReply(rlvCmd.getParam(), RlvWindLight::instance().getValue(strSetting, fError)); +// eRet = (!fError) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN; +// return true; +// } +// else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) ) +// { +// if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, rlvCmd.getObjectID())) +// eRet = (RlvWindLight::instance().setValue(strSetting, rlvCmd.getOption())) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN; +// else +// eRet = RLV_RET_FAILED_LOCK; +// return true; +// } +// } } else if ("setrot" == rlvCmd.getBehaviour()) { diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index db9e182b83..3f4bfaf2cc 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -37,7 +37,7 @@ #include "llavataractions.h" // @stopim IM query #include "llavatarnamecache.h" // @shownames #include "llavatarlist.h" // @shownames -#include "llenvmanager.h" // @setenv +//#include "llenvmanager.h" // @setenv #include "llfloatersidepanelcontainer.h"// @shownames #include "llnotifications.h" // @list IM query #include "llnotificationsutil.h" @@ -2233,34 +2233,34 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour } // Handles: @setenv=n|y toggles -template<> template<> -void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) -{ - const std::string strEnvFloaters[] = { "env_post_process", "env_settings", "env_delete_preset", "env_edit_sky", "env_edit_water", "env_edit_day_cycle" }; - for (int idxFloater = 0, cntFloater = sizeof(strEnvFloaters) / sizeof(std::string); idxFloater < cntFloater; idxFloater++) - { - if (fHasBhvr) - { - // Hide the floater if it's currently visible - LLFloaterReg::const_instance_list_t envFloaters = LLFloaterReg::getFloaterList(strEnvFloaters[idxFloater]); - for (LLFloater* pFloater : envFloaters) - pFloater->closeFloater(); - RlvUIEnabler::instance().addGenericFloaterFilter(strEnvFloaters[idxFloater]); - } - else - { - RlvUIEnabler::instance().removeGenericFloaterFilter(strEnvFloaters[idxFloater]); - } - } - - // Don't allow toggling "Basic Shaders" and/or "Atmopsheric Shaders" through the debug settings under @setenv=n - gSavedSettings.getControl("VertexShaderEnable")->setHiddenFromSettingsEditor(fHasBhvr); - gSavedSettings.getControl("WindLightUseAtmosShaders")->setHiddenFromSettingsEditor(fHasBhvr); - - // Restore the user's WindLight preferences when releasing - if (!fHasBhvr) - LLEnvManagerNew::instance().usePrefs(); -} +//template<> template<> +//void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) +//{ +// const std::string strEnvFloaters[] = { "env_post_process", "env_settings", "env_delete_preset", "env_edit_sky", "env_edit_water", "env_edit_day_cycle" }; +// for (int idxFloater = 0, cntFloater = sizeof(strEnvFloaters) / sizeof(std::string); idxFloater < cntFloater; idxFloater++) +// { +// if (fHasBhvr) +// { +// // Hide the floater if it's currently visible +// LLFloaterReg::const_instance_list_t envFloaters = LLFloaterReg::getFloaterList(strEnvFloaters[idxFloater]); +// for (LLFloater* pFloater : envFloaters) +// pFloater->closeFloater(); +// RlvUIEnabler::instance().addGenericFloaterFilter(strEnvFloaters[idxFloater]); +// } +// else +// { +// RlvUIEnabler::instance().removeGenericFloaterFilter(strEnvFloaters[idxFloater]); +// } +// } +// +// // Don't allow toggling "Basic Shaders" and/or "Atmopsheric Shaders" through the debug settings under @setenv=n +// gSavedSettings.getControl("VertexShaderEnable")->setHiddenFromSettingsEditor(fHasBhvr); +// gSavedSettings.getControl("WindLightUseAtmosShaders")->setHiddenFromSettingsEditor(fHasBhvr); +// +// // Restore the user's WindLight preferences when releasing +// if (!fHasBhvr) +// LLEnvManagerNew::instance().usePrefs(); +//} // Handles: @showhovertext:=n|y template<> template<> diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index 4a4ab3c7c0..6a4375d6cf 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -129,7 +129,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourGenericProcessor("sendimto", RLV_BHVR_SENDIMTO, RlvBehaviourInfo::BHVR_STRICT)); addEntry(new RlvBehaviourGenericProcessor("sendgesture", RLV_BHVR_SENDGESTURE, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvBehaviourGenericToggleProcessor("setdebug")); - addEntry(new RlvBehaviourGenericToggleProcessor("setenv")); +// addEntry(new RlvBehaviourGenericToggleProcessor("setenv")); addEntry(new RlvBehaviourGenericProcessor("setgroup", RLV_BHVR_SETGROUP)); addEntry(new RlvBehaviourInfo("sharedunwear", RLV_BHVR_SHAREDUNWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED)); addEntry(new RlvBehaviourInfo("sharedwear", RLV_BHVR_SHAREDWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED)); From 47ffc300057a35ab87dc9d4572507c118b14bb5d Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 12 Apr 2020 13:16:31 +0200 Subject: [PATCH 30/75] Fix for some origin files showing up as changed due to incorrect line endings --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitattributes b/.gitattributes index 849d99dfa3..575154feaa 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,6 +8,8 @@ # Documents *.txt text *.xml text +indra/tools/vstool/README.txt -text +indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt -text # Graphics *.png binary diff=exif From b7157c157e033338a7ff8188920d428a06c18e90 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 12 Apr 2020 18:13:14 +0100 Subject: [PATCH 31/75] [FIXED] RLVa shutdown crashes due to resources owned by left-over restrictions -> Perform an orderly shutdown and clear RLVa when wearables and the avatar objects are (mostly) still around --- indra/newview/llappviewer.cpp | 4 +++ indra/newview/rlvhandler.cpp | 54 +++++++++++++++++++++++++++++++++-- indra/newview/rlvhandler.h | 2 ++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 5cc53f024b..9117d8da60 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -5446,6 +5446,10 @@ void LLAppViewer::disconnectViewer() LLAppearanceMgr::instance().setAttachmentInvLinkEnable(false); // [/SL:KB] +// [RLVa:KB] - Checked: RLVa-2.3 (Housekeeping) + SUBSYSTEM_CLEANUP(RlvHandler); +// [/RLVa:KB] + gAgentWearables.cleanup(); gAgentCamera.cleanup(); // Also writes cached agent settings to gSavedSettings diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index db9e182b83..83a46f3452 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -145,14 +145,58 @@ RlvHandler::RlvHandler() : m_fCanCancelTp(true), m_posSitSource(), m_pGCTimer(NU RlvHandler::~RlvHandler() { + cleanup(); +} + +void RlvHandler::cleanup() +{ + // Nothing to clean if we're not enabled (or already cleaned up) + if (!m_fEnabled) + return; + + // + // Clean up any restrictions that are still active + // + RLV_ASSERT(LLApp::isQuitting()); // Several commands toggle debug settings but won't if they know the viewer is quitting + + // Assume we have no way to predict how m_Objects will change so make a copy ahead of time + uuid_vec_t idRlvObjects; + idRlvObjects.reserve(m_Objects.size()); + std::transform(m_Objects.begin(), m_Objects.end(), std::back_inserter(idRlvObjects), [](const rlv_object_map_t::value_type& kvPair) {return kvPair.first; }); + for (const LLUUID & idRlvObj : idRlvObjects) + { + processCommand(idRlvObj, "clear", true); + } + + // Sanity check + RLV_ASSERT(m_Objects.empty()); + RLV_ASSERT(m_Exceptions.empty()); + RLV_ASSERT(std::all_of(m_Behaviours, m_Behaviours + RLV_BHVR_COUNT, [](S16 cnt) { return !cnt; })); + RLV_ASSERT(m_CurCommandStack.empty()); + RLV_ASSERT(m_CurObjectStack.empty()); + RLV_ASSERT(m_pOverlayImage.isNull()); + + // + // Clean up what's left + // gAgent.removeListener(this); + m_Retained.clear(); + //delete m_pGCTimer; // <- deletes itself + if (m_PendingGroupChange.first.notNull()) { - LLGroupMgr::instance().removeObserver(m_PendingGroupChange.first, this); + if (LLGroupMgr::instanceExists()) + LLGroupMgr::instance().removeObserver(m_PendingGroupChange.first, this); m_PendingGroupChange = std::make_pair(LLUUID::null, LLStringUtil::null); } - //delete m_pGCTimer; // <- deletes itself + for (RlvExtCommandHandler* pCmdHandler : m_CommandHandlers) + { + delete pCmdHandler; + } + m_CommandHandlers.clear(); + + m_fEnabled = false; } // ============================================================================ @@ -1032,6 +1076,12 @@ bool RlvHandler::onGC() return (0 != m_Objects.size()); // GC will kill itself if it has nothing to do } +// static +void RlvHandler::cleanupClass() +{ + gRlvHandler.cleanup(); +} + // Checked: 2009-11-26 (RLVa-1.1.0f) | Added: RLVa-1.1.0f void RlvHandler::onIdleStartup(void* pParam) { diff --git a/indra/newview/rlvhandler.h b/indra/newview/rlvhandler.h index 85acec1bce..5a6e5508eb 100644 --- a/indra/newview/rlvhandler.h +++ b/indra/newview/rlvhandler.h @@ -173,6 +173,7 @@ protected: // Externally invoked event handlers public: + void cleanup(); void onActiveGroupChanged(); void onAttach(const LLViewerObject* pAttachObj, const LLViewerJointAttachment* pAttachPt); void onDetach(const LLViewerObject* pAttachObj, const LLViewerJointAttachment* pAttachPt); @@ -183,6 +184,7 @@ public: void onSitOrStand(bool fSitting); void onTeleportFailed(); void onTeleportFinished(const LLVector3d& posArrival); + static void cleanupClass(); static void onIdleStartup(void* pParam); protected: void getAttachmentResourcesCoro(const std::string& strUrl); From fbd23878fc718dc443a0861ec6dd46d17d6c2908 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 19 Apr 2020 14:12:00 +0200 Subject: [PATCH 32/75] Rewrite all @setenv related commands against the new atmospherics/environment class --- indra/llinventory/llsettingssky.cpp | 4 +- indra/newview/CMakeLists.txt | 2 + indra/newview/rlvenvironment.cpp | 657 ++++++++++++++++++++++++++++ indra/newview/rlvenvironment.h | 65 +++ indra/newview/rlvextensions.cpp | 382 +--------------- indra/newview/rlvhandler.cpp | 2 + indra/newview/rlvhelper.cpp | 29 ++ 7 files changed, 765 insertions(+), 376 deletions(-) create mode 100644 indra/newview/rlvenvironment.cpp create mode 100644 indra/newview/rlvenvironment.h diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index 306c732920..02dcd47a47 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -40,7 +40,7 @@ namespace const LLUUID IMG_HALO("12149143-f599-91a7-77ac-b52a3c0f59cd"); } -namespace { +//namespace { LLQuaternion convert_azimuth_and_altitude_to_quat(F32 azimuth, F32 altitude) { F32 sinTheta = sin(azimuth); @@ -64,7 +64,7 @@ namespace { return quat; } -} +//} static LLTrace::BlockTimerStatHandle FTM_BLEND_SKYVALUES("Blending Sky Environment"); static LLTrace::BlockTimerStatHandle FTM_RECALCULATE_SKYVALUES("Recalculate Sky"); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a6b98bb457..b04ff8f614 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -726,6 +726,7 @@ set(viewer_SOURCE_FILES noise.cpp pipeline.cpp rlvactions.cpp + rlvenvironment.cpp rlvhandler.cpp rlvhelper.cpp rlvcommon.cpp @@ -1355,6 +1356,7 @@ set(viewer_HEADER_FILES noise.h pipeline.h rlvactions.h + rlvenvironment.h rlvdefines.h rlvhandler.h rlvhelper.h diff --git a/indra/newview/rlvenvironment.cpp b/indra/newview/rlvenvironment.cpp new file mode 100644 index 0000000000..8342399485 --- /dev/null +++ b/indra/newview/rlvenvironment.cpp @@ -0,0 +1,657 @@ +/** + * + * Copyright (c) 2009-2020, Kitty Barnett + * + * The source code in this file is provided to you under the terms of the + * GNU Lesser General Public License, version 2.1, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt + * in this distribution, or online at http://www.gnu.org/licenses/lgpl-2.1.txt + * + * By copying, modifying or distributing this software, you acknowledge that + * you have read and understood your obligations described above, and agree to + * abide by those obligations. + * + */ + +#include "llviewerprecompiledheaders.h" + +#include "llinventoryfunctions.h" +#include "llsettingsvo.h" +#include + +#include "rlvenvironment.h" +#include "rlvhelper.h" + +// ================================================================================================ +// Constants and helper functions +// + +namespace +{ + const F32 SLIDER_SCALE_BLUE_HORIZON_DENSITY(2.0f); + const F32 SLIDER_SCALE_DENSITY_MULTIPLIER(0.001f); + const F32 SLIDER_SCALE_GLOW_R(20.0f); + const F32 SLIDER_SCALE_GLOW_B(-5.0f); + const F32 SLIDER_SCALE_SUN_AMBIENT(3.0f); + + const std::string RLV_GETENV_PREFIX = "getenv_"; + const std::string RLV_SETENV_PREFIX = "setenv_"; + + U32 rlvGetColorComponentFromCharacter(char ch) + { + if ( ('r' == ch) || ('x' == ch) ) return VRED; + else if ( ('g' == ch) || ('y' == ch )) return VGREEN; + else if ( ('b' == ch) || ('d' == ch) ) return VBLUE; + else if ('i' == ch) return VALPHA; + return U32_MAX; + } + + const LLUUID& rlvGetLibraryEnvironmentsFolder() + { + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLNameCategoryCollector f("Environments"); + gInventory.collectDescendentsIf(gInventory.getLibraryRootFolderID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, f); + return (!cats.empty()) ? cats.front()->getUUID() : LLUUID::null; + } + + // Legacy WindLight values we need tend to be expressed as a fraction of the [0, 2PI[ domain + F32 normalize_angle_domain(F32 angle) + { + while (angle < 0) + angle += F_TWO_PI; + while (angle > F_TWO_PI) + angle -= F_TWO_PI; + return angle; + } +} + +/* + * Reasoning (Reference - https://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Azimuth-Altitude_schematic.svg/1024px-Azimuth-Altitude_schematic.svg.png) + * + * Given a(zimuth angle) and e(levation angle) - in the SL axis - we know that it calculates the quaternion as follows: + * + * | cos a sin a 0 | | cos e | | cos a x cos e | = | x | + * | sin a cos a 0 | x | 0 | = | sin a x cos e | = | y | (normalized direction vector identifying the sun position on a unit sphere) + * | 0 0 1 | | sin e | | sin e | = | z | + * + * As a result we can reverse the above by: quaternion -> rotate it around X-axis + * x = cos a x cos e <=> cos a = x / cos e \ + * | (if we divide them we can get rid of cos e) + * | <=> sin a / cos a = y / x <=> tan a = y / x <=> a = atan2(y, x) + * y = sin a x cos e <=> sin a = y / cos e / + * z = sin e <=> e = asin z + * + * If we look at the resulting domain azimuth lies in ]-PI, PI] and elevation lies in [-PI/2, PI/2] which I actually prefer most. Going forward people should get the sun in a wind + * direction by manipulating the azimuth and then deal with the elevation (which ends up mimicking how a camera or an observer behave in real life). + * + * Special cases: + * x = 0 => (1) cos e = 0 -> sin e = 1 so y = 0 and z = 1 => in (0, 0, 1) we loose all information about the azimuth since cos e = 0 + * OR (2) cos a = 0 -> sin a = 1 so y = cos e and z = sin e => tan e = z/y (with y != 0) => in (0, Y, Z) azimuth is PI/2 (or 3PI/2) and elevation can have an extended domain of ]-PI, PI] + * => When x = 0 (and y != 0) return PI/2 for azimuth and atan2(z, y) for elevation + * y = 0 => (1) sin a = 0 -> cos a = 1 so x = cos e and z = sin e => tan e = z/x (with x != 0) => in (X, 0, Z) azimuth is 0 (or PI) and elevation can have an extended domain of ]-PI, PI] + * OR (2) cos e = 0 -> see above + => When y = 0 (and x != 0) return 0 for azimuth and atan2(z, x) for elevation + * z = 0 => sin e = 0 -> cos e = 1 so x = cos a and y = sin a => tan a = y / x => in (X, Y, 0) elevation is 0 (or PI) and azimuth has its normal domain of ]-PI, PI] + * => When z = 0 return 0 for elevation and a = atan2(y, x) for azimuth + * + * We still need to convert all that back/forth between legacy WindLight's odd choices: + * east angle = SL's azimuth rotates from E (1, 0, 0) to N (0, 1, 0) to W (-1, 0, 0) to S (0, -1, O) but the legacy east angle rotates the opposite way from E to S to W to N so invert the angle + * (the resulting number then needs to be positive and reported as a fraction of 2PI) + * sunposition = sun elevation reported as a fraction of 2PI + * moonposition = the moon always has sun's azimuth but its negative elevation + * + * Pre-EEP both azimuth and elevation have a 2PI range which means that two different a and e value combinations could yield the same sun direction which causes us problems now since we + * can't differentiate between the two. Pre-EEP likely favoured elevation over azimuth since people might naturally get the time of day they're thinking of and then try to adjust the + * azimuth to get the sun in the correct wind direction; however I've already decided that we'll favour azimuth going forward (see above). + * + * Comparison of pre-EEP and post-EEP legacy values: + * east angle = 0 (aka azimuth = 0) -> y = 0 so e = atan2(z, x) -> elevation has a range of 2PI so we correctly report pre-EEP values + * sunmoonpos = 0 (aka elevation = 0) -> z = 0 so a = atan2(y, x) -> azimuth has a range of 2PI so we correctly report pre-EEP values + * -PI/2 < sunmoonpos < PI/2 -> general case -> post-EEP ranges match pre-EEP ranges so we correctly report pre-EEP values + * sunmoonpos > PI/2 -> elevation went beyond our new maxium so the post-EEP sunmoonpos will actually be off by PI/2 (or 0.25) + * (and the resulting east angle is off by PI or 0.5 - for example smp 0.375 and ea 0.875 are equivalent with smp 0.125 and ea 0.375) + * + * In reverse this means that when setting values through RLVa: + * sunmoonpos without eastangle (=0) => always correct + * eastangle without sunmoonpos (=0) => always correct + * eastangle before sunmoonpos => always correct + * sunmoonpos before eastangle => correct for -0.25 <= sunmoonpos <= 0.25 + * incorrect for 0.75 > sunmoonpos > 0.25 + */ +F32 rlvGetAzimuthFromDirectionVector(const LLVector3& vecDir) +{ + if (is_zero(vecDir.mV[VY])) + return 0.f; + else if (is_zero(vecDir.mV[VX])) + return F_PI_BY_TWO; + + F32 radAzimuth = atan2f(vecDir.mV[VY], vecDir.mV[VX]); + return (radAzimuth >= 0.f) ? radAzimuth : radAzimuth + F_TWO_PI; +} + +F32 rlvGetElevationFromDirectionVector(const LLVector3& vecDir) +{ + if (is_zero(vecDir.mV[VZ])) + return 0.f; + + F32 radElevation; + if ( (is_zero(vecDir.mV[VX])) && (!is_zero(vecDir.mV[VY])) ) + radElevation = atan2f(vecDir.mV[VZ], vecDir.mV[VY]); + else if ( (!is_zero(vecDir.mV[VX])) && (is_zero(vecDir.mV[VY])) ) + radElevation = atan2f(vecDir.mV[VZ], vecDir.mV[VX]); + else + radElevation = asinf(vecDir.mV[VZ]); + return (radElevation >= 0.f) ? radElevation : radElevation + F_TWO_PI; +} + +// Defined in llsettingssky.cpp +LLQuaternion convert_azimuth_and_altitude_to_quat(F32 azimuth, F32 altitude); + +// ================================================================================================ +// RlvIsOfSettingsType - Inventory collector for settings of a specific subtype +// + +class RlvIsOfSettingsType : public LLInventoryCollectFunctor +{ +public: + RlvIsOfSettingsType(LLSettingsType::type_e eSettingsType, const std::string& strNameMatch = LLStringUtil::null) + : m_eSettingsType(eSettingsType) + , m_strNameMatch(strNameMatch) + { + } + + ~RlvIsOfSettingsType() override + { + } + + bool operator()(LLInventoryCategory*, LLInventoryItem* pItem) override + { + if ( (pItem) && (LLAssetType::AT_SETTINGS == pItem->getActualType()) ) + { + return + (m_eSettingsType == LLSettingsType::fromInventoryFlags(pItem->getFlags())) && + ( (m_strNameMatch.empty()) || (boost::iequals(pItem->getName(), m_strNameMatch)) ); + } + return false; + } + +protected: + LLSettingsType::type_e m_eSettingsType; + std::string m_strNameMatch; +}; + +// ================================================================================================ +// RlvEnvironment +// + +RlvEnvironment::RlvEnvironment() +{ + // + // Presets + // + registerSetEnvFn("asset", [](LLEnvironment::EnvSelection_t env, const LLUUID& idAsset) + { + if (idAsset.isNull()) + return RLV_RET_FAILED_OPTION; + + LLEnvironment::instance().setEnvironment(env, idAsset); + return RLV_RET_SUCCESS; + }); + // Deprecated + auto fnApplyLibraryPreset = [](LLEnvironment::EnvSelection_t env, const std::string& strPreset, LLSettingsType::type_e eSettingsType) + { + LLUUID idAsset(strPreset); + if (idAsset.isNull()) + { + const LLUUID& idLibraryEnv = rlvGetLibraryEnvironmentsFolder(); + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + RlvIsOfSettingsType f(eSettingsType, strPreset); + gInventory.collectDescendentsIf(idLibraryEnv, cats, items, LLInventoryModel::EXCLUDE_TRASH, f); + if (!items.empty()) + idAsset = items.front()->getAssetUUID(); + } + + if (idAsset.isNull()) + return RLV_RET_FAILED_OPTION; + + LLEnvironment::instance().setEnvironment(env, idAsset); + return RLV_RET_SUCCESS; + }; + registerSetEnvFn("preset", [&fnApplyLibraryPreset](LLEnvironment::EnvSelection_t env, const std::string& strPreset) { return fnApplyLibraryPreset(env, strPreset, LLSettingsType::ST_SKY); }); + registerSetEnvFn("daycycle", [&fnApplyLibraryPreset](LLEnvironment::EnvSelection_t env, const std::string& strPreset) { return fnApplyLibraryPreset(env, strPreset, LLSettingsType::ST_DAYCYCLE); }); + + // + // Atmosphere & Lighting tab + // + + // SETTING_AMBIENT + registerSkyFn("ambient", [](LLSettingsSky::ptr_t pSky) { return pSky->getAmbientColor() * (1.f / SLIDER_SCALE_SUN_AMBIENT); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setAmbientColor(clrValue * SLIDER_SCALE_SUN_AMBIENT); }); + registerLegacySkyFn("ambient",[](LLSettingsSky::ptr_t pSky) { return pSky->getAmbientColor() * (1.f / SLIDER_SCALE_SUN_AMBIENT); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setAmbientColor(clrValue * SLIDER_SCALE_SUN_AMBIENT); }); + + // SETTING_BLUE_DENSITY + registerSkyFn("bluedensity", [](LLSettingsSky::ptr_t pSky) { return pSky->getBlueDensity() * (1.f / SLIDER_SCALE_BLUE_HORIZON_DENSITY); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setBlueDensity(clrValue * SLIDER_SCALE_BLUE_HORIZON_DENSITY); }); + registerLegacySkyFn("bluedensity",[](LLSettingsSky::ptr_t pSky) { return pSky->getBlueDensity() * (1.f / SLIDER_SCALE_BLUE_HORIZON_DENSITY); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setBlueDensity(clrValue * SLIDER_SCALE_BLUE_HORIZON_DENSITY); }); + + // SETTING_BLUE_HORIZON + registerSkyFn("bluehorizon", [](LLSettingsSky::ptr_t pSky) { return pSky->getBlueHorizon() * (1.f / SLIDER_SCALE_BLUE_HORIZON_DENSITY); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setBlueHorizon(clrValue * SLIDER_SCALE_BLUE_HORIZON_DENSITY); }); + registerLegacySkyFn("bluehorizon",[](LLSettingsSky::ptr_t pSky) { return pSky->getBlueHorizon() * (1.f / SLIDER_SCALE_BLUE_HORIZON_DENSITY); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setBlueHorizon(clrValue * SLIDER_SCALE_BLUE_HORIZON_DENSITY); }); + + // SETTING_DENSITY_MULTIPLIER + registerSkyFn("densitymultiplier", [](LLSettingsSky::ptr_t pSky) { return pSky->getDensityMultiplier() / SLIDER_SCALE_DENSITY_MULTIPLIER; }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setDensityMultiplier(nValue * SLIDER_SCALE_DENSITY_MULTIPLIER); }); + + // SETTING_DISTANCE_MULTIPLIER + registerSkyFn("distancemultiplier",[](LLSettingsSky::ptr_t pSky) { return pSky->getDistanceMultiplier(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setDistanceMultiplier(nValue); }); + + + // SETTING_SKY_DROPLET_RADIUS + registerSkyFn("dropletradius", [](LLSettingsSky::ptr_t pSky) { return pSky->getSkyDropletRadius(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setSkyDropletRadius(nValue); }); + + // SETTING_HAZE_DENSITY + registerSkyFn("hazedensity", [](LLSettingsSky::ptr_t pSky) { return pSky->getHazeDensity(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setHazeDensity(nValue); }); + + // SETTING_HAZE_HORIZON + registerSkyFn("hazehorizon", [](LLSettingsSky::ptr_t pSky) { return pSky->getHazeHorizon(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setHazeHorizon(nValue); }); + + // SETTING_SKY_ICE_LEVEL + registerSkyFn("icelevel", [](LLSettingsSky::ptr_t pSky) { return pSky->getSkyIceLevel(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setSkyIceLevel(nValue); }); + + // SETTING_MAX_Y + registerSkyFn("maxaltitude", [](LLSettingsSky::ptr_t pSky) { return pSky->getMaxY(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setMaxY(nValue); }); + + // SETTING_SKY_MOISTURE_LEVEL + registerSkyFn("moisturelevel", [](LLSettingsSky::ptr_t pSky) { return pSky->getSkyMoistureLevel(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setSkyMoistureLevel(nValue); }); + + // SETTING_GAMMA + registerSkyFn("scenegamma", [](LLSettingsSky::ptr_t pSky) { return pSky->getGamma(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setGamma(nValue); }); + + // + // Clouds tab + // + + // SETTING_CLOUD_COLOR + registerSkyFn("cloudcolor", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudColor(); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setCloudColor(clrValue); }); + registerLegacySkyFn("cloudcolor", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudColor(); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setCloudColor(clrValue); }); + + // SETTING_CLOUD_SHADOW + registerSkyFn("cloudcoverage", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudShadow(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setCloudShadow(nValue); }); + + // SETTING_CLOUD_POS_DENSITY1 + registerSkyFn("clouddensity", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudPosDensity1(); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setCloudPosDensity1(clrValue); }); + registerLegacySkyFn("cloud", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudPosDensity1(); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setCloudPosDensity1(clrValue); }); + + // SETTING_CLOUD_POS_DENSITY2 + registerSkyFn("clouddetail", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudPosDensity2(); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setCloudPosDensity2(clrValue); }); + registerLegacySkyFn("clouddetail",[](LLSettingsSky::ptr_t pSky) { return pSky->getCloudPosDensity2(); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setCloudPosDensity2(clrValue); }); + + // SETTING_CLOUD_SCALE + registerSkyFn("cloudscale", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudScale(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setCloudScale(nValue); }); + + // SETTING_CLOUD_SCROLL_RATE + registerSkyFn("cloudscroll", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudScrollRate(); }, + [](LLSettingsSky::ptr_t pSky, const LLVector2& vecValue) { pSky->setCloudScrollRate(vecValue); }); + registerLegacySkyFn("cloudscroll", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudScrollRate(); }, + [](LLSettingsSky::ptr_t pSky, const LLVector2& vecValue) { pSky->setCloudScrollRate(vecValue); }); + + // SETTING_CLOUD_TEXTUREID + registerSkyFn("cloudtexture", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudNoiseTextureId(); }, + [](LLSettingsSky::ptr_t pSky, const LLUUID& idTexture) { pSky->setCloudNoiseTextureId(idTexture); }); + + // SETTING_CLOUD_VARIANCE + registerSkyFn("cloudvariance", [](LLSettingsSky::ptr_t pSky) { return pSky->getCloudVariance(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setCloudVariance(nValue); }); + + // + // Sun & Moon + // + + // SETTING_MOON_BRIGHTNESS + registerSkyFn("moonbrightness", [](LLSettingsSky::ptr_t pSky) { return pSky->getMoonBrightness(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setMoonBrightness(nValue); }); + + // SETTING_MOON_SCALE + registerSkyFn("moonscale", [](LLSettingsSky::ptr_t pSky) { return pSky->getMoonScale(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setMoonScale(nValue); }); + + // SETTING_MOON_TEXTUREID + registerSkyFn("moontexture", [](LLSettingsSky::ptr_t pSky) { return pSky->getMoonTextureId(); }, + [](LLSettingsSky::ptr_t pSky, const LLUUID& idTexture) { pSky->setMoonTextureId(idTexture); }); + + // SETTING_GLOW + registerSkyFn("sunglowsize", [](LLSettingsSky::ptr_t pSky) { return 2.0 - (pSky->getGlow().mV[VRED] / SLIDER_SCALE_GLOW_R); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setGlow(LLColor3((2.0f - nValue) * SLIDER_SCALE_GLOW_R, .0f, pSky->getGlow().mV[VBLUE])); }); + registerSkyFn("sunglowfocus", [](LLSettingsSky::ptr_t pSky) { return pSky->getGlow().mV[VBLUE] / SLIDER_SCALE_GLOW_B; }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setGlow(LLColor3(pSky->getGlow().mV[VRED], .0f, nValue * SLIDER_SCALE_GLOW_B)); }); + + // SETTING_SUNLIGHT_COLOR + registerSkyFn("sunlightcolor",[](LLSettingsSky::ptr_t pSky) { return pSky->getSunlightColor() * (1.f / SLIDER_SCALE_SUN_AMBIENT); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setSunlightColor(clrValue * SLIDER_SCALE_SUN_AMBIENT); }); + registerLegacySkyFn("sunmooncolor", [](LLSettingsSky::ptr_t pSky) { return pSky->getSunlightColor() * (1.f / SLIDER_SCALE_SUN_AMBIENT); }, + [](LLSettingsSky::ptr_t pSky, const LLColor3& clrValue) { pSky->setSunlightColor(clrValue * SLIDER_SCALE_SUN_AMBIENT); }); + + // SETTING_SUN_SCALE + registerSkyFn("sunscale", [](LLSettingsSky::ptr_t pSky) { return pSky->getSunScale(); }, + [](LLSettingsSky::ptr_t pSky, F32 nValue) { pSky->setSunScale(nValue); }); + + // SETTING_SUN_TEXTUREID + registerSkyFn("suntexture", [](LLSettingsSky::ptr_t pSky) { return pSky->getSunTextureId(); }, + [](LLSettingsSky::ptr_t pSky, const LLUUID& idTexture) { pSky->setSunTextureId(idTexture); }); + + // SETTING_STAR_BRIGHTNESS + registerSkyFn("starbrightness", [](LLSettingsSky::ptr_t pSky) { return pSky->getStarBrightness(); }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) { pSky->setStarBrightness(nValue); }); + + // SETTING_SUN_ROTATION + registerSkyFn("sunazimuth", [](LLSettingsSky::ptr_t pSky) { return rlvGetAzimuthFromDirectionVector(LLVector3::x_axis * pSky->getSunRotation()); }, + [](LLSettingsSky::ptr_t pSky, const F32& radAzimuth) { + pSky->setSunRotation(convert_azimuth_and_altitude_to_quat(radAzimuth, rlvGetElevationFromDirectionVector(LLVector3::x_axis* pSky->getSunRotation()))); + }); + registerSkyFn("sunelevation", [](LLSettingsSky::ptr_t pSky) { return rlvGetElevationFromDirectionVector(LLVector3::x_axis * pSky->getSunRotation()); }, + [](LLSettingsSky::ptr_t pSky, F32 radElevation) { + radElevation = llclamp(radElevation, -F_PI_BY_TWO, F_PI_BY_TWO); + pSky->setSunRotation(convert_azimuth_and_altitude_to_quat(rlvGetAzimuthFromDirectionVector(LLVector3::x_axis* pSky->getSunRotation()), radElevation)); + }); + + // SETTING_MOON_ROTATION + registerSkyFn("moonazimuth", [](LLSettingsSky::ptr_t pSky) { return rlvGetAzimuthFromDirectionVector(LLVector3::x_axis * pSky->getMoonRotation()); }, + [](LLSettingsSky::ptr_t pSky, const F32& radAzimuth) { + pSky->setMoonRotation(convert_azimuth_and_altitude_to_quat(radAzimuth, rlvGetElevationFromDirectionVector(LLVector3::x_axis* pSky->getMoonRotation()))); + }); + registerSkyFn("moonelevation", [](LLSettingsSky::ptr_t pSky) { return rlvGetElevationFromDirectionVector(LLVector3::x_axis * pSky->getMoonRotation()); }, + [](LLSettingsSky::ptr_t pSky, F32 radElevation) { + radElevation = llclamp(radElevation, -F_PI_BY_TWO, F_PI_BY_TWO); + pSky->setMoonRotation(convert_azimuth_and_altitude_to_quat(rlvGetAzimuthFromDirectionVector(LLVector3::x_axis* pSky->getMoonRotation()), radElevation)); + }); + + // Legacy WindLight support (see remarks at the top of this file) + registerSkyFn("eastangle", [](LLSettingsSky::ptr_t pSky) { return normalize_angle_domain(-rlvGetAzimuthFromDirectionVector(LLVector3::x_axis * pSky->getSunRotation())) / F_TWO_PI; }, + [](LLSettingsSky::ptr_t pSky, const F32& radEastAngle) + { + const F32 radAzimuth = -radEastAngle * F_TWO_PI; + const F32 radElevation = rlvGetElevationFromDirectionVector(LLVector3::x_axis * pSky->getSunRotation()); + pSky->setSunRotation(convert_azimuth_and_altitude_to_quat(radAzimuth, radElevation)); + pSky->setMoonRotation(convert_azimuth_and_altitude_to_quat(radAzimuth + F_PI, -radElevation)); + }); + + registerSkyFn("sunmoonposition", [](LLSettingsSky::ptr_t pSky) { return rlvGetElevationFromDirectionVector(LLVector3::x_axis * pSky->getSunRotation()) / F_TWO_PI; }, + [](LLSettingsSky::ptr_t pSky, const F32& nValue) + { + const F32 radAzimuth = rlvGetAzimuthFromDirectionVector(LLVector3::x_axis * pSky->getSunRotation()); + const F32 radElevation = nValue * F_TWO_PI; + pSky->setSunRotation(convert_azimuth_and_altitude_to_quat(radAzimuth, radElevation)); + pSky->setMoonRotation(convert_azimuth_and_altitude_to_quat(radAzimuth + F_PI, -radElevation)); + }); + + // Create a fixed sky from the nearest daycycle (local > experience > parcel > region) + registerSetEnvFn("daytime", [](LLEnvironment::EnvSelection_t env, const F32& nValue) + { + if ((nValue >= 0.f) && (nValue <= 1.0f)) + { + LLSettingsDay::ptr_t pDay; + LLEnvironment::EnvSelection_t envs[] = { LLEnvironment::ENV_LOCAL, LLEnvironment::ENV_PUSH, LLEnvironment::ENV_PARCEL, LLEnvironment::ENV_REGION }; + for (size_t idxEnv = 0, cntEnv = sizeof(envs) / sizeof(LLEnvironment::EnvSelection_t); idxEnv < cntEnv && !pDay; idxEnv++) + pDay = LLEnvironment::instance().getEnvironmentDay(envs[idxEnv]); + + if (pDay) + { + auto pNewSky = LLSettingsVOSky::buildDefaultSky(); + auto pSkyBlender = std::make_shared(pNewSky, pDay, 1); + pSkyBlender->setPosition(nValue); + + LLEnvironment::instance().setEnvironment(env, pNewSky); + LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT); + } + } + else if (nValue == -1) + { + LLEnvironment::instance().clearEnvironment(env); + LLEnvironment::instance().setSelectedEnvironment(env); + LLEnvironment::instance().updateEnvironment(); +// defocusEnvFloaters(); + } + else + { + return RLV_RET_FAILED_OPTION; + } + + return RLV_RET_SUCCESS; + }); + registerGetEnvFn("daytime", [](LLEnvironment::EnvSelection_t env) + { + // I forgot how much I hate this command... it literally makes no sense since time of day only has any meaning in an + // actively animating day cycle (but in that case we have to return -1). + if (!LLEnvironment::instance().getEnvironmentFixedSky(LLEnvironment::ENV_LOCAL)) { + return std::to_string(-1.f); + } + + // It's invalid input for @setenv_daytime (see above) so it can be fed in without changing the current environment + return std::to_string(2.f); + }); +} + +RlvEnvironment::~RlvEnvironment() +{ +} + +// static +bool RlvEnvironment::onHandleCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet, const std::string& strCmdPrefix, const handler_map_t& fnLookup, const legacy_handler_map_t& legacyFnLookup) +{ + if ( (rlvCmd.getBehaviour().length() > strCmdPrefix.length() + 2) && (boost::starts_with(rlvCmd.getBehaviour(), strCmdPrefix)) ) + { + std::string strEnvCommand = rlvCmd.getBehaviour().substr(strCmdPrefix.length()); + + handler_map_t::const_iterator itFnEntry = fnLookup.find(strEnvCommand); + if (fnLookup.end() != itFnEntry) + { + cmdRet = itFnEntry->second((RLV_TYPE_FORCE == rlvCmd.getParamType()) ? rlvCmd.getOption() : rlvCmd.getParam()); + return true; + } + + // Legacy handling (blargh) + U32 idxComponent = rlvGetColorComponentFromCharacter(strEnvCommand.back()); + if (idxComponent <= VBLUE) + { + strEnvCommand.pop_back(); + + legacy_handler_map_t::const_iterator itLegacyFnEntry = legacyFnLookup.find(strEnvCommand); + if (legacyFnLookup.end() != itLegacyFnEntry) + { + cmdRet = itLegacyFnEntry->second(rlvCmd.getParam(), idxComponent); + return true; + } + } + } + + return false; +} + +bool RlvEnvironment::onReplyCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) +{ + return onHandleCommand(rlvCmd, cmdRet, RLV_GETENV_PREFIX, m_GetFnLookup, m_LegacyGetFnLookup); +} + +bool RlvEnvironment::onForceCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) +{ + return onHandleCommand(rlvCmd, cmdRet, RLV_SETENV_PREFIX, m_SetFnLookup, m_LegacySetFnLookup); +} + +template<> +std::string RlvEnvironment::handleGetFn(const std::function& fn) +{ + LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + return std::to_string(fn(pSky)); +} + +template<> +std::string RlvEnvironment::handleGetFn(const std::function& fn) +{ + LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + return fn(pSky).asString(); +} + +template<> +std::string RlvEnvironment::handleGetFn(const std::function& fn) +{ + LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLVector2 replyVec = fn(pSky); + return llformat("%f/%f", replyVec.mV[VX], replyVec.mV[VY]); +} + +template<> +std::string RlvEnvironment::handleGetFn(const std::function& fn) +{ + LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLColor3 replyColor = fn(pSky); + return llformat("%f/%f/%f", replyColor.mV[VX], replyColor.mV[VY], replyColor.mV[VZ]); +} + +template +ERlvCmdRet RlvEnvironment::handleSetFn(const std::string& strRlvOption, const std::function& fn) +{ + T optionValue; + if (!RlvCommandOptionHelper::parseOption(strRlvOption, optionValue)) + return RLV_RET_FAILED_PARAM; + + LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + fn(pSky, optionValue); + pSky->update(); + return RLV_RET_SUCCESS; +} + +template<> +std::string RlvEnvironment::handleLegacyGetFn(const std::function& getFn, U32 idxComponent) +{ + if (idxComponent > 2) + return LLStringUtil::null; + return std::to_string(getFn(LLEnvironment::instance().getCurrentSky()).mV[idxComponent]); +} + +template<> +std::string RlvEnvironment::handleLegacyGetFn(const std::function& getFn, U32 idxComponent) +{ + if (idxComponent > 3) + return LLStringUtil::null; + return std::to_string(getFn(LLEnvironment::instance().getCurrentSky()).mV[idxComponent]); +} + +template<> +ERlvCmdRet RlvEnvironment::handleLegacySetFn(float optionValue, LLVector2 curValue, const std::function& setFn, U32 idxComponent) +{ + if (idxComponent > 2) + return RLV_RET_FAILED_UNKNOWN; + + LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + curValue.mV[idxComponent] = optionValue; + setFn(pSky, curValue); + pSky->update(); + + return RLV_RET_SUCCESS; +} + +template<> +ERlvCmdRet RlvEnvironment::handleLegacySetFn(float optionValue, LLColor3 curValue, const std::function& setFn, U32 idxComponent) +{ + if (idxComponent > 3) + return RLV_RET_FAILED_UNKNOWN; + + LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + curValue.mV[idxComponent] = optionValue; + setFn(pSky, curValue); + pSky->update(); + + return RLV_RET_SUCCESS; +} + + +template +void RlvEnvironment::registerSkyFn(const std::string& strFnName, const std::function& getFn, const std::function& setFn) +{ + RLV_ASSERT(m_GetFnLookup.end() == m_GetFnLookup.find(strFnName)); + m_GetFnLookup.insert(std::make_pair(strFnName, [this, getFn](const std::string& strRlvParam) + { + if (RlvUtil::sendChatReply(strRlvParam, handleGetFn(getFn))) + return RLV_RET_SUCCESS; + return RLV_RET_FAILED_PARAM; + })); + + RLV_ASSERT(m_SetFnLookup.end() == m_SetFnLookup.find(strFnName)); + m_SetFnLookup.insert(std::make_pair(strFnName, [this, setFn](const std::string& strRlvOption) + { + return handleSetFn(strRlvOption, setFn); + })); +} + +void RlvEnvironment::registerGetEnvFn(const std::string& strFnName, const std::function& getFn) +{ + RLV_ASSERT(m_GetFnLookup.end() == m_GetFnLookup.find(strFnName)); + m_GetFnLookup.insert(std::make_pair(strFnName, [this, getFn](const std::string& strRlvParam) + { + if (RlvUtil::sendChatReply(strRlvParam, getFn(LLEnvironment::ENV_LOCAL))) + return RLV_RET_SUCCESS; + return RLV_RET_FAILED_PARAM; + })); +} + +template +void RlvEnvironment::registerSetEnvFn(const std::string& strFnName, const std::function& setFn) +{ + RLV_ASSERT(m_SetFnLookup.end() == m_SetFnLookup.find(strFnName)); + m_SetFnLookup.insert(std::make_pair(strFnName, [this, setFn](const std::string& strRlvOption) + { + T optionValue; + if (!RlvCommandOptionHelper::parseOption(strRlvOption, optionValue)) + return RLV_RET_FAILED_PARAM; + return setFn(LLEnvironment::ENV_LOCAL, optionValue); + })); +} + +template +void RlvEnvironment::registerLegacySkyFn(const std::string& strFnName, const std::function& getFn, const std::function& setFn) +{ + RLV_ASSERT(m_LegacyGetFnLookup.end() == m_LegacyGetFnLookup.find(strFnName)); + m_LegacyGetFnLookup.insert(std::make_pair(strFnName, [this, getFn](const std::string& strRlvParam, U32 idxComponent) + { + const std::string strReply = handleLegacyGetFn(getFn, idxComponent); + if (strReply.empty()) + return RLV_RET_FAILED_UNKNOWN; + else if (RlvUtil::sendChatReply(strRlvParam, strReply)) + return RLV_RET_SUCCESS; + return RLV_RET_FAILED_PARAM; + })); + + RLV_ASSERT(m_LegacySetFnLookup.end() == m_LegacySetFnLookup.find(strFnName)); + m_LegacySetFnLookup.insert(std::make_pair(strFnName, [this, getFn, setFn](const std::string& strRlvOption, U32 idxComponent) + { + float optionValue; + if (!RlvCommandOptionHelper::parseOption(strRlvOption, optionValue)) + return RLV_RET_FAILED_PARAM; + return handleLegacySetFn(optionValue, getFn(LLEnvironment::instance().getCurrentSky()), setFn, idxComponent);; + })); +} + +// ================================================================================================ diff --git a/indra/newview/rlvenvironment.h b/indra/newview/rlvenvironment.h new file mode 100644 index 0000000000..9ad60f7264 --- /dev/null +++ b/indra/newview/rlvenvironment.h @@ -0,0 +1,65 @@ +/** + * + * Copyright (c) 2009-2020, Kitty Barnett + * + * The source code in this file is provided to you under the terms of the + * GNU Lesser General Public License, version 2.1, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt + * in this distribution, or online at http://www.gnu.org/licenses/lgpl-2.1.txt + * + * By copying, modifying or distributing this software, you acknowledge that + * you have read and understood your obligations described above, and agree to + * abide by those obligations. + * + */ + +#pragma once + +#include "llenvironment.h" + +#include "rlvcommon.h" + +// ============================================================================ +// RlvEnvironment - viewer-side scripted environment changes +// + +class RlvEnvironment : public RlvExtCommandHandler +{ +public: + RlvEnvironment(); + ~RlvEnvironment() override; + + bool onReplyCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) override; + bool onForceCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) override; +protected: + typedef std::map> handler_map_t; + typedef std::map> legacy_handler_map_t; + static bool onHandleCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet, const std::string& strCmdPrefix, const handler_map_t& fnLookup, const legacy_handler_map_t& legacyFnLookup); + + /* + * Command registration + */ +protected: + void registerGetEnvFn(const std::string& strFnName, const std::function& getFn); + template void registerSetEnvFn(const std::string& strFnName, const std::function& setFn); + template void registerSkyFn(const std::string& strFnName, const std::function& getFn, const std::function& setFn); + template void registerLegacySkyFn(const std::string& strFnName, const std::function& getFn, const std::function& setFn); + + // Command handling helpers + template std::string handleGetFn(const std::function& fn); + template ERlvCmdRet handleSetFn(const std::string& strRlvOption, const std::function& fn); + template std::string handleLegacyGetFn(const std::function& getFn, U32 idxComponent); + template ERlvCmdRet handleLegacySetFn(float optionValue, T value, const std::function& setFn, U32 idxComponent); + + /* + * Member variables + */ +protected: + handler_map_t m_GetFnLookup; + handler_map_t m_SetFnLookup; + legacy_handler_map_t m_LegacyGetFnLookup; + legacy_handler_map_t m_LegacySetFnLookup; +}; + +// ============================================================================ diff --git a/indra/newview/rlvextensions.cpp b/indra/newview/rlvextensions.cpp index cabf1891eb..4612331c96 100644 --- a/indra/newview/rlvextensions.cpp +++ b/indra/newview/rlvextensions.cpp @@ -1,25 +1,23 @@ -/** +/** * * Copyright (c) 2009-2011, Kitty Barnett - * - * The source code in this file is provided to you under the terms of the + * + * The source code in this file is provided to you under the terms of the * GNU Lesser General Public License, version 2.1, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. Terms of the LGPL can be found in doc/LGPL-licence.txt * in this distribution, or online at http://www.gnu.org/licenses/lgpl-2.1.txt - * + * * By copying, modifying or distributing this software, you acknowledge that - * you have read and understood your obligations described above, and agree to + * you have read and understood your obligations described above, and agree to * abide by those obligations. - * + * */ #include "llviewerprecompiledheaders.h" #include "llagent.h" #include "llagentcamera.h" -//#include "lldaycyclemanager.h" #include "llvoavatarself.h" -//#include "llwlparammanager.h" #include "rlvextensions.h" #include "rlvhandler.h" @@ -27,352 +25,6 @@ // ============================================================================ -//class RlvWindLightControl -//{ -//public: -// enum EType { TYPE_COLOR, TYPE_COLOR_R, TYPE_FLOAT, TYPE_UNKNOWN }; -// enum EColorComponent { COMPONENT_R, COMPONENT_G, COMPONENT_B, COMPONENT_I, COMPONENT_NONE }; -//public: -// RlvWindLightControl(WLColorControl* pCtrl, bool fColorR) : m_eType((!fColorR) ? TYPE_COLOR: TYPE_COLOR_R), m_pColourCtrl(pCtrl), m_pFloatCtrl(NULL) {} -// RlvWindLightControl(WLFloatControl* pCtrl) : m_eType(TYPE_FLOAT), m_pColourCtrl(NULL), m_pFloatCtrl(pCtrl) {} -// -// EType getControlType() const { return m_eType; } -// bool isColorType() const { return (TYPE_COLOR == m_eType) || (TYPE_COLOR_R == m_eType); } -// bool isFloatType() const { return (TYPE_FLOAT == m_eType); } -// // TYPE_COLOR and TYPE_COLOR_R -// F32 getColorComponent(EColorComponent eComponent, bool& fError) const; -// LLVector4 getColorVector(bool& fError) const; -// bool setColorComponent(EColorComponent eComponent, F32 nValue); -// // TYPE_FLOAT -// F32 getFloat(bool& fError) const; -// bool setFloat(F32 nValue); -// -// static EColorComponent getComponentFromCharacter(char ch); -//protected: -// EType m_eType; // Type of the WindLight control -// WLColorControl* m_pColourCtrl; -// WLFloatControl* m_pFloatCtrl; -//}; - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//static F32 get_intensity_from_color(const LLVector4& v) -//{ -// return llmax(v.mV[0], v.mV[1], v.mV[2]); -//} - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//F32 RlvWindLightControl::getColorComponent(EColorComponent eComponent, bool& fError) const -//{ -// switch (eComponent) -// { -// case COMPONENT_R: return getColorVector(fError).mV[0]; -// case COMPONENT_G: return getColorVector(fError).mV[1]; -// case COMPONENT_B: return getColorVector(fError).mV[2]; -// case COMPONENT_I: return get_intensity_from_color(getColorVector(fError)); // SL-2.8: Always seems to be 1.0 so get it manually -// default : RLV_ASSERT(false); fError = true; return 0.0; -// } -//} - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//RlvWindLightControl::EColorComponent RlvWindLightControl::getComponentFromCharacter(char ch) -//{ -// if (('r' == ch) || ('x' == ch)) -// return COMPONENT_R; -// else if (('g' == ch) || ('y' == ch)) -// return COMPONENT_G; -// else if (('b' == ch) || ('d' == ch)) -// return COMPONENT_B; -// else if ('i' == ch) -// return COMPONENT_I; -// return COMPONENT_NONE; -//} - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//LLVector4 RlvWindLightControl::getColorVector(bool& fError) const -//{ -// if ((fError = !isColorType())) -// return LLVector4(0, 0, 0, 0); -// F32 nMult = (m_pColourCtrl->isSunOrAmbientColor) ? 3.0f : ((m_pColourCtrl->isBlueHorizonOrDensity) ? 2.0f : 1.0f); -// return LLWLParamManager::getInstance()->mCurParams.getVector(m_pColourCtrl->mName, fError) / nMult; -//} - -// Checked: 2011-08-28 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//bool RlvWindLightControl::setColorComponent(EColorComponent eComponent, F32 nValue) -//{ -// if (isColorType()) -// { -// nValue *= (m_pColourCtrl->isSunOrAmbientColor) ? 3.0f : ((m_pColourCtrl->isBlueHorizonOrDensity) ? 2.0f : 1.0f); -// if (COMPONENT_I == eComponent) // (See: LLFloaterWindLight::onColorControlIMoved) -// { -// if (m_pColourCtrl->hasSliderName) -// { -// F32 curMax = llmax(m_pColourCtrl->r, m_pColourCtrl->g, m_pColourCtrl->b); -// if ( (0.0f == nValue) || (0.0f == curMax) ) -// { -// m_pColourCtrl->r = m_pColourCtrl->g = m_pColourCtrl->b = m_pColourCtrl->i = nValue; -// } -// else -// { -// F32 nDelta = (nValue - curMax) / curMax; -// m_pColourCtrl->r *= (1.0f + nDelta); -// m_pColourCtrl->g *= (1.0f + nDelta); -// m_pColourCtrl->b *= (1.0f + nDelta); -// m_pColourCtrl->i = nValue; -// } -// } -// } -// else // (See: LLFloaterWindLight::onColorControlRMoved) -// { -// F32* pnValue = (COMPONENT_R == eComponent) ? &m_pColourCtrl->r : (COMPONENT_G == eComponent) ? &m_pColourCtrl->g : (COMPONENT_B == eComponent) ? &m_pColourCtrl->b : NULL; -// if (pnValue) -// *pnValue = nValue; -// if (m_pColourCtrl->hasSliderName) -// m_pColourCtrl->i = llmax(m_pColourCtrl->r, m_pColourCtrl->g, m_pColourCtrl->b); -// } -// m_pColourCtrl->update(LLWLParamManager::getInstance()->mCurParams); -// LLWLParamManager::getInstance()->propagateParameters(); -// } -// return isColorType(); -//} - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -// F32 RlvWindLightControl::getFloat(bool& fError) const -// { -// return (!(fError = (TYPE_FLOAT != m_eType))) ? LLWLParamManager::getInstance()->mCurParams.getVector(m_pFloatCtrl->mName, fError).mV[0] * m_pFloatCtrl->mult : 0.0; -// } - -// Checked: 2011-08-28 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//bool RlvWindLightControl::setFloat(F32 nValue) -//{ -// if (TYPE_FLOAT == m_eType) -// { -// m_pFloatCtrl->x = nValue / m_pFloatCtrl->mult; -// m_pFloatCtrl->update(LLWLParamManager::getInstance()->mCurParams); -// LLWLParamManager::getInstance()->propagateParameters(); -// } -// return (TYPE_FLOAT == m_eType); -//} - -// ============================================================================ - -//class RlvWindLight : public LLSingleton -//{ -// LLSINGLETON(RlvWindLight); -//public: -// std::string getValue(const std::string& strSetting, bool& fError); -// bool setValue(const std::string& strRlvName, const std::string& strValue); -// -//protected: -// std::map m_ControlLookupMap; -//}; - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//RlvWindLight::RlvWindLight() -//{ -// LLWLParamManager* pWLParamMgr = LLWLParamManager::getInstance(); -// -// // TYPE_FLOAT -// m_ControlLookupMap.insert(std::pair("cloudcoverage", RlvWindLightControl(&pWLParamMgr->mCloudCoverage))); -// m_ControlLookupMap.insert(std::pair("cloudscale", RlvWindLightControl(&pWLParamMgr->mCloudScale))); -// m_ControlLookupMap.insert(std::pair("densitymultiplier", RlvWindLightControl(&pWLParamMgr->mDensityMult))); -// m_ControlLookupMap.insert(std::pair("distancemultiplier", RlvWindLightControl(&pWLParamMgr->mDistanceMult))); -// m_ControlLookupMap.insert(std::pair("maxaltitude", RlvWindLightControl(&pWLParamMgr->mMaxAlt))); -// m_ControlLookupMap.insert(std::pair("scenegamma", RlvWindLightControl(&pWLParamMgr->mWLGamma))); -// m_ControlLookupMap.insert(std::pair("hazedensity", RlvWindLightControl(&pWLParamMgr->mHazeDensity))); -// m_ControlLookupMap.insert(std::pair("hazehorizon", RlvWindLightControl(&pWLParamMgr->mHazeHorizon))); -// // TYPE_COLOR -// m_ControlLookupMap.insert(std::pair("ambient", RlvWindLightControl(&pWLParamMgr->mAmbient, false))); -// m_ControlLookupMap.insert(std::pair("bluedensity", RlvWindLightControl(&pWLParamMgr->mBlueDensity, false))); -// m_ControlLookupMap.insert(std::pair("bluehorizon", RlvWindLightControl(&pWLParamMgr->mBlueHorizon, false))); -// m_ControlLookupMap.insert(std::pair("cloud", RlvWindLightControl(&pWLParamMgr->mCloudMain, false))); -// m_ControlLookupMap.insert(std::pair("cloudcolor", RlvWindLightControl(&pWLParamMgr->mCloudColor, false))); -// m_ControlLookupMap.insert(std::pair("clouddetail", RlvWindLightControl(&pWLParamMgr->mCloudDetail, false))); -// m_ControlLookupMap.insert(std::pair("sunmooncolor", RlvWindLightControl(&pWLParamMgr->mSunlight, false))); -//} - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//std::string RlvWindLight::getValue(const std::string& strSetting, bool& fError) -//{ -// LLWLParamManager* pWLParams = LLWLParamManager::getInstance(); -// LLEnvManagerNew* pEnvMgr = LLEnvManagerNew::getInstance(); -// -// fError = false; // Assume we won't fail -// if ("preset" == strSetting) -// return (pEnvMgr->getUseFixedSky()) ? pEnvMgr->getSkyPresetName() : std::string(); -// else if ("daycycle" == strSetting) -// return (pEnvMgr->getUseDayCycle()) ? pEnvMgr->getDayCycleName() : std::string(); -// -// F32 nValue = 0.0f; -// if ("daytime" == strSetting) -// { -// nValue = (pEnvMgr->getUseFixedSky()) ? pWLParams->mCurParams.getFloat("sun_angle", fError) / F_TWO_PI : -1.0f; -// } -// else if (("sunglowfocus" == strSetting) || ("sunglowsize" == strSetting)) -// { -// pWLParams->mGlow = pWLParams->mCurParams.getVector(pWLParams->mGlow.mName, fError); -// RLV_ASSERT_DBG(!fError); -// -// if ("sunglowfocus" == strSetting) -// nValue = -pWLParams->mGlow.b / 5.0f; -// else -// nValue = 2 - pWLParams->mGlow.r / 20.0f; -// } -// else if ("starbrightness" == strSetting) nValue = pWLParams->mCurParams.getStarBrightness(); -// else if ("eastangle" == strSetting) nValue = pWLParams->mCurParams.getEastAngle() / F_TWO_PI; -// else if ("sunmoonposition" == strSetting) nValue = pWLParams->mCurParams.getSunAngle() / F_TWO_PI; -// else if ("cloudscrollx" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollX() - 10.0f; -// else if ("cloudscrolly" == strSetting) nValue = pWLParams->mCurParams.getCloudScrollY() - 10.0f; -// else -// { -// std::map::const_iterator itControl = m_ControlLookupMap.find(strSetting); -// if (m_ControlLookupMap.end() != itControl) -// { -// switch (itControl->second.getControlType()) -// { -// case RlvWindLightControl::TYPE_FLOAT: -// nValue = itControl->second.getFloat(fError); -// break; -// case RlvWindLightControl::TYPE_COLOR_R: -// nValue = itControl->second.getColorComponent(RlvWindLightControl::COMPONENT_R, fError); -// break; -// default: -// fError = true; -// break; -// } -// } -// else -// { -// // Couldn't find the exact name, check for a color control name -// RlvWindLightControl::EColorComponent eComponent = RlvWindLightControl::getComponentFromCharacter(strSetting[strSetting.length() - 1]); -// if (RlvWindLightControl::COMPONENT_NONE != eComponent) -// itControl = m_ControlLookupMap.find(strSetting.substr(0, strSetting.length() - 1)); -// if ( (m_ControlLookupMap.end() != itControl) && (itControl->second.isColorType()) ) -// nValue = itControl->second.getColorComponent(eComponent, fError); -// else -// fError = true; -// } -// } -// return llformat("%f", nValue); -//} - -// Checked: 2011-08-29 (RLVa-1.4.1a) | Added: RLVa-1.4.1a -//bool RlvWindLight::setValue(const std::string& strRlvName, const std::string& strValue) -//{ -// F32 nValue = 0.0f; -// // Sanity check - make sure strValue specifies a number for all settings except "preset" and "daycycle" -// if ( (RlvSettings::getNoSetEnv()) || -// ( (!LLStringUtil::convertToF32(strValue, nValue)) && (("preset" != strRlvName) && ("daycycle" != strRlvName)) ) ) -// { -// return false; -// } -// -// LLWLParamManager* pWLParams = LLWLParamManager::getInstance(); -// LLEnvManagerNew* pEnvMgr = LLEnvManagerNew::getInstance(); -// -// if ("daytime" == strRlvName) -// { -// if (0.0f <= nValue) -// { -// pWLParams->mAnimator.deactivate(); -// pWLParams->mAnimator.setDayTime(nValue); -// pWLParams->mAnimator.update(pWLParams->mCurParams); -// } -// else -// { -// pEnvMgr->setUserPrefs(pEnvMgr->getWaterPresetName(), pEnvMgr->getSkyPresetName(), pEnvMgr->getDayCycleName(), false, true); -// } -// return true; -// } -// else if ("preset" == strRlvName) -// { -// std::string strPresetName = pWLParams->findPreset(strValue, LLEnvKey::SCOPE_LOCAL); -// if (!strPresetName.empty()) -// pEnvMgr->useSkyPreset(strPresetName); -// return !strPresetName.empty(); -// } -// else if ("daycycle" == strRlvName) -// { -// std::string strPresetName = LLDayCycleManager::instance().findPreset(strValue); -// if (!strPresetName.empty()) -// pEnvMgr->useDayCycle(strValue, LLEnvKey::SCOPE_LOCAL); -// return !strPresetName.empty(); -// } -// -// bool fError = false; -// pWLParams->mAnimator.deactivate(); -// if (("sunglowfocus" == strRlvName) || ("sunglowsize" == strRlvName)) -// { -// pWLParams->mGlow = pWLParams->mCurParams.getVector(pWLParams->mGlow.mName, fError); -// RLV_ASSERT_DBG(!fError); -// -// if ("sunglowfocus" == strRlvName) -// pWLParams->mGlow.b = -nValue * 5; -// else -// pWLParams->mGlow.r = (2 - nValue) * 20; -// -// pWLParams->mGlow.update(pWLParams->mCurParams); -// pWLParams->propagateParameters(); -// return true; -// } -// else if ("starbrightness" == strRlvName) -// { -// pWLParams->mCurParams.setStarBrightness(nValue); -// return true; -// } -// else if (("eastangle" == strRlvName) || ("sunmoonposition" == strRlvName)) -// { -// if ("eastangle" == strRlvName) -// pWLParams->mCurParams.setEastAngle(F_TWO_PI * nValue); -// else -// pWLParams->mCurParams.setSunAngle(F_TWO_PI * nValue); -// -// // Set the sun vector -// pWLParams->mLightnorm.r = -sin(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); -// pWLParams->mLightnorm.g = sin(pWLParams->mCurParams.getSunAngle()); -// pWLParams->mLightnorm.b = cos(pWLParams->mCurParams.getEastAngle()) * cos(pWLParams->mCurParams.getSunAngle()); -// pWLParams->mLightnorm.i = 1.f; -// -// pWLParams->propagateParameters(); -// return true; -// } -// else if ("cloudscrollx" == strRlvName) -// { -// pWLParams->mCurParams.setCloudScrollX(nValue + 10.0f); -// return true; -// } -// else if ("cloudscrolly" == strRlvName) -// { -// pWLParams->mCurParams.setCloudScrollY(nValue + 10.0f); -// return true; -// } -// -// std::map::iterator itControl = m_ControlLookupMap.find(strRlvName); -// if (m_ControlLookupMap.end() != itControl) -// { -// switch (itControl->second.getControlType()) -// { -// case RlvWindLightControl::TYPE_FLOAT: -// return itControl->second.setFloat(nValue); -// case RlvWindLightControl::TYPE_COLOR_R: -// return itControl->second.setColorComponent(RlvWindLightControl::COMPONENT_R, nValue); -// default: -// RLV_ASSERT(false); -// } -// } -// else -// { -// // Couldn't find the exact name, check for a color control name -// RlvWindLightControl::EColorComponent eComponent = RlvWindLightControl::getComponentFromCharacter(strRlvName[strRlvName.length() - 1]); -// if (RlvWindLightControl::COMPONENT_NONE != eComponent) -// itControl = m_ControlLookupMap.find(strRlvName.substr(0, strRlvName.length() - 1)); -// if ( (m_ControlLookupMap.end() != itControl) && (itControl->second.isColorType()) ) -// return itControl->second.setColorComponent(eComponent, nValue); -// } -// return false; -//} - -// ============================================================================ - std::map RlvExtGetSet::m_DbgAllowed; std::map RlvExtGetSet::m_PseudoDebug; @@ -439,24 +91,6 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet) return true; } } -// else if ("env" == strBehaviour) -// { -// bool fError = false; -// if ( ("get" == strGetSet) && (RLV_TYPE_REPLY == rlvCmd.getParamType()) ) -// { -// RlvUtil::sendChatReply(rlvCmd.getParam(), RlvWindLight::instance().getValue(strSetting, fError)); -// eRet = (!fError) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN; -// return true; -// } -// else if ( ("set" == strGetSet) && (RLV_TYPE_FORCE == rlvCmd.getParamType()) ) -// { -// if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, rlvCmd.getObjectID())) -// eRet = (RlvWindLight::instance().setValue(strSetting, rlvCmd.getOption())) ? RLV_RET_SUCCESS : RLV_RET_FAILED_UNKNOWN; -// else -// eRet = RLV_RET_FAILED_LOCK; -// return true; -// } -// } } else if ("setrot" == rlvCmd.getBehaviour()) { diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 3f4bfaf2cc..71a6b51b15 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -56,6 +56,7 @@ // RLVa includes #include "rlvactions.h" +#include "rlvenvironment.h" #include "rlvfloaters.h" #include "rlvactions.h" #include "rlvhandler.h" @@ -1433,6 +1434,7 @@ bool RlvHandler::setEnabled(bool fEnable) RlvSettings::initClass(); RlvStrings::initClass(); + RlvHandler::instance().addCommandHandler(new RlvEnvironment()); RlvHandler::instance().addCommandHandler(new RlvExtGetSet()); // Make sure we get notified when login is successful diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index 6a4375d6cf..a58c5b7abd 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -685,6 +685,13 @@ bool RlvCommand::parseCommand(const std::string& strCommand, std::string& strBeh // Command option parsing utility classes // +template<> +bool RlvCommandOptionHelper::parseOption(const std::string& strOption, std::string& valueOption) +{ + valueOption = strOption; + return true; +} + template<> bool RlvCommandOptionHelper::parseOption(const std::string& strOption, LLUUID& idOption) { @@ -766,6 +773,17 @@ bool RlvCommandOptionHelper::parseOption(const std:: return pFolder != NULL; } +template<> +bool RlvCommandOptionHelper::parseOption(const std::string& strOption, LLVector2& vecOption) +{ + if (!strOption.empty()) + { + S32 cntToken = sscanf(strOption.c_str(), "%f/%f", vecOption.mV + 0, vecOption.mV + 1); + return (2 == cntToken); + } + return false; +} + template<> bool RlvCommandOptionHelper::parseOption(const std::string& strOption, LLVector3& vecOption) { @@ -788,6 +806,17 @@ bool RlvCommandOptionHelper::parseOption(const std::string& strOptio return false; } +template<> +bool RlvCommandOptionHelper::parseOption(const std::string& strOption, LLColor3& clrOption) +{ + if (!strOption.empty()) + { + S32 cntToken = sscanf(strOption.c_str(), "%f/%f/%f", clrOption.mV + 0, clrOption.mV + 1, clrOption.mV + 2); + return (3 == cntToken); + } + return false; +} + template<> bool RlvCommandOptionHelper::parseOption(const std::string& strOption, RlvCommandOptionGeneric& genericOption) { From a7e5b8ecc953d5e8da27970b1d94e79bce8b2d2a Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Mon, 27 Apr 2020 00:07:19 +0200 Subject: [PATCH 33/75] Restore the @setenv restriction --- indra/newview/llenvironment.cpp | 11 +++++ indra/newview/rlvactions.cpp | 9 ++++ indra/newview/rlvactions.h | 11 +++++ indra/newview/rlvenvironment.cpp | 26 +++++++++--- indra/newview/rlvenvironment.h | 1 + indra/newview/rlvhandler.cpp | 70 +++++++++++++++++++------------- indra/newview/rlvhelper.cpp | 2 +- 7 files changed, 94 insertions(+), 36 deletions(-) diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 0e1c4f9434..8f17e563d5 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -65,6 +65,10 @@ #include "llviewergenericmessage.h" #include "llexperiencelog.h" +// [RLVa:KB] - Checked: RLVa-2.4 (@setenv) +#include "rlvactions.h" +// [/RLVa:KB] + //========================================================================= namespace { @@ -1057,6 +1061,13 @@ bool LLEnvironment::getIsMoonUp() const //------------------------------------------------------------------------- void LLEnvironment::setSelectedEnvironment(LLEnvironment::EnvSelection_t env, LLSettingsBase::Seconds transition, bool forced) { +// [RLVa:KB] - Checked: RLVa-2.4 (@setenv) + if ( (!RlvActions::canChangeEnvironment()) && (LLEnvironment::ENV_EDIT != env) ) + { + return; + } +// [/RLVa:KB] + mSelectedEnvironment = env; updateEnvironment(transition, forced); } diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index f5c5dc52a6..9acbb47ea1 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -351,6 +351,15 @@ bool RlvActions::isLocalTp(const LLVector3d& posGlobal) return nDistSq < RLV_MODIFIER_TPLOCAL_DEFAULT * RLV_MODIFIER_TPLOCAL_DEFAULT; } +// ============================================================================ +// WindLight +// + +bool RlvActions::canChangeEnvironment() +{ + return !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV); +} + // ============================================================================ // World interaction // diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h index 90b1069f6b..be22f4ce6a 100644 --- a/indra/newview/rlvactions.h +++ b/indra/newview/rlvactions.h @@ -26,6 +26,7 @@ class LLInventoryCategory; class LLInventoryItem; +class LLViewerObject; // ============================================================================ // RlvActions class declaration - developer-friendly non-RLVa code facing class, use in lieu of RlvHandler whenever possible @@ -207,6 +208,16 @@ public: */ static bool isLocalTp(const LLVector3d& posGlobal); + // ========= + // WindLight + // ========= +public: + /* + * Returns true if the user can make changes to their WindLight environment + */ + static bool canChangeEnvironment(); + + // ================= // World interaction // ================= diff --git a/indra/newview/rlvenvironment.cpp b/indra/newview/rlvenvironment.cpp index 8342399485..b4e1c6fbea 100644 --- a/indra/newview/rlvenvironment.cpp +++ b/indra/newview/rlvenvironment.cpp @@ -20,6 +20,7 @@ #include "llsettingsvo.h" #include +#include "rlvactions.h" #include "rlvenvironment.h" #include "rlvhelper.h" @@ -413,9 +414,16 @@ RlvEnvironment::RlvEnvironment() if ((nValue >= 0.f) && (nValue <= 1.0f)) { LLSettingsDay::ptr_t pDay; - LLEnvironment::EnvSelection_t envs[] = { LLEnvironment::ENV_LOCAL, LLEnvironment::ENV_PUSH, LLEnvironment::ENV_PARCEL, LLEnvironment::ENV_REGION }; - for (size_t idxEnv = 0, cntEnv = sizeof(envs) / sizeof(LLEnvironment::EnvSelection_t); idxEnv < cntEnv && !pDay; idxEnv++) - pDay = LLEnvironment::instance().getEnvironmentDay(envs[idxEnv]); + if (LLEnvironment::ENV_EDIT != env) + { + LLEnvironment::EnvSelection_t envs[] = { LLEnvironment::ENV_LOCAL, LLEnvironment::ENV_PUSH, LLEnvironment::ENV_PARCEL, LLEnvironment::ENV_REGION }; + for (size_t idxEnv = 0, cntEnv = sizeof(envs) / sizeof(LLEnvironment::EnvSelection_t); idxEnv < cntEnv && !pDay; idxEnv++) + pDay = LLEnvironment::instance().getEnvironmentDay(envs[idxEnv]); + } + else + { + pDay = LLEnvironment::instance().getEnvironmentDay(LLEnvironment::ENV_EDIT); + } if (pDay) { @@ -445,7 +453,7 @@ RlvEnvironment::RlvEnvironment() { // I forgot how much I hate this command... it literally makes no sense since time of day only has any meaning in an // actively animating day cycle (but in that case we have to return -1). - if (!LLEnvironment::instance().getEnvironmentFixedSky(LLEnvironment::ENV_LOCAL)) { + if (!LLEnvironment::instance().getEnvironmentFixedSky(env)) { return std::to_string(-1.f); } @@ -458,6 +466,12 @@ RlvEnvironment::~RlvEnvironment() { } +// static +LLEnvironment::EnvSelection_t RlvEnvironment::getTargetEnvironment() +{ + return RlvActions::canChangeEnvironment() ? LLEnvironment::ENV_LOCAL : LLEnvironment::ENV_EDIT; +} + // static bool RlvEnvironment::onHandleCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet, const std::string& strCmdPrefix, const handler_map_t& fnLookup, const legacy_handler_map_t& legacyFnLookup) { @@ -611,7 +625,7 @@ void RlvEnvironment::registerGetEnvFn(const std::string& strFnName, const std::f RLV_ASSERT(m_GetFnLookup.end() == m_GetFnLookup.find(strFnName)); m_GetFnLookup.insert(std::make_pair(strFnName, [this, getFn](const std::string& strRlvParam) { - if (RlvUtil::sendChatReply(strRlvParam, getFn(LLEnvironment::ENV_LOCAL))) + if (RlvUtil::sendChatReply(strRlvParam, getFn(getTargetEnvironment()))) return RLV_RET_SUCCESS; return RLV_RET_FAILED_PARAM; })); @@ -626,7 +640,7 @@ void RlvEnvironment::registerSetEnvFn(const std::string& strFnName, const std::f T optionValue; if (!RlvCommandOptionHelper::parseOption(strRlvOption, optionValue)) return RLV_RET_FAILED_PARAM; - return setFn(LLEnvironment::ENV_LOCAL, optionValue); + return setFn(getTargetEnvironment(), optionValue); })); } diff --git a/indra/newview/rlvenvironment.h b/indra/newview/rlvenvironment.h index 9ad60f7264..0f70e24cae 100644 --- a/indra/newview/rlvenvironment.h +++ b/indra/newview/rlvenvironment.h @@ -33,6 +33,7 @@ public: bool onReplyCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) override; bool onForceCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) override; protected: + static LLEnvironment::EnvSelection_t getTargetEnvironment(); typedef std::map> handler_map_t; typedef std::map> legacy_handler_map_t; static bool onHandleCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet, const std::string& strCmdPrefix, const handler_map_t& fnLookup, const legacy_handler_map_t& legacyFnLookup); diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 71a6b51b15..21c48421a6 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -37,7 +37,6 @@ #include "llavataractions.h" // @stopim IM query #include "llavatarnamecache.h" // @shownames #include "llavatarlist.h" // @shownames -//#include "llenvmanager.h" // @setenv #include "llfloatersidepanelcontainer.h"// @shownames #include "llnotifications.h" // @list IM query #include "llnotificationsutil.h" @@ -2235,34 +2234,47 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour } // Handles: @setenv=n|y toggles -//template<> template<> -//void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) -//{ -// const std::string strEnvFloaters[] = { "env_post_process", "env_settings", "env_delete_preset", "env_edit_sky", "env_edit_water", "env_edit_day_cycle" }; -// for (int idxFloater = 0, cntFloater = sizeof(strEnvFloaters) / sizeof(std::string); idxFloater < cntFloater; idxFloater++) -// { -// if (fHasBhvr) -// { -// // Hide the floater if it's currently visible -// LLFloaterReg::const_instance_list_t envFloaters = LLFloaterReg::getFloaterList(strEnvFloaters[idxFloater]); -// for (LLFloater* pFloater : envFloaters) -// pFloater->closeFloater(); -// RlvUIEnabler::instance().addGenericFloaterFilter(strEnvFloaters[idxFloater]); -// } -// else -// { -// RlvUIEnabler::instance().removeGenericFloaterFilter(strEnvFloaters[idxFloater]); -// } -// } -// -// // Don't allow toggling "Basic Shaders" and/or "Atmopsheric Shaders" through the debug settings under @setenv=n -// gSavedSettings.getControl("VertexShaderEnable")->setHiddenFromSettingsEditor(fHasBhvr); -// gSavedSettings.getControl("WindLightUseAtmosShaders")->setHiddenFromSettingsEditor(fHasBhvr); -// -// // Restore the user's WindLight preferences when releasing -// if (!fHasBhvr) -// LLEnvManagerNew::instance().usePrefs(); -//} +template<> template<> +void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) +{ + const std::string strEnvFloaters[] = { "env_adjust_snapshot", "env_edit_extdaycycle", "env_fixed_environmentent_sky", "env_fixed_environmentent_water", "my_environments" }; + for (int idxFloater = 0, cntFloater = sizeof(strEnvFloaters) / sizeof(std::string); idxFloater < cntFloater; idxFloater++) + { + if (fHasBhvr) + { + // Hide the floater if it's currently visible + LLFloaterReg::const_instance_list_t envFloaters = LLFloaterReg::getFloaterList(strEnvFloaters[idxFloater]); + for (LLFloater* pFloater : envFloaters) + pFloater->closeFloater(); + RlvUIEnabler::instance().addGenericFloaterFilter(strEnvFloaters[idxFloater]); + } + else + { + RlvUIEnabler::instance().removeGenericFloaterFilter(strEnvFloaters[idxFloater]); + } + } + + // Don't allow toggling "Atmopsheric Shaders" through the debug settings under @setenv=n + gSavedSettings.getControl("WindLightUseAtmosShaders")->setHiddenFromSettingsEditor(fHasBhvr); + + if (fHasBhvr) + { + // Usurp the 'edit' environment for RLVa locking so TPV tools like quick prefs and phototools are automatically locked out as well + // (these needed per-feature awareness of RLV in the previous implementation which often wasn't implemented) + LLEnvironment* pEnv = LLEnvironment::getInstance(); + LLSettingsSky::ptr_t pRlvSky = pEnv->getEnvironmentFixedSky(LLEnvironment::ENV_LOCAL, true)->buildClone(); + pEnv->setEnvironment(LLEnvironment::ENV_EDIT, pRlvSky); + pEnv->setSelectedEnvironment(LLEnvironment::ENV_EDIT, LLEnvironment::TRANSITION_INSTANT); + pEnv->updateEnvironment(LLEnvironment::TRANSITION_INSTANT); + } + else + { + // Restore the user's WindLight preferences when releasing + LLEnvironment::instance().clearEnvironment(LLEnvironment::ENV_EDIT); + LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); + LLEnvironment::instance().updateEnvironment(); + } +} // Handles: @showhovertext:=n|y template<> template<> diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index a58c5b7abd..5482f4b51e 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -129,7 +129,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourGenericProcessor("sendimto", RLV_BHVR_SENDIMTO, RlvBehaviourInfo::BHVR_STRICT)); addEntry(new RlvBehaviourGenericProcessor("sendgesture", RLV_BHVR_SENDGESTURE, RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvBehaviourGenericToggleProcessor("setdebug")); -// addEntry(new RlvBehaviourGenericToggleProcessor("setenv")); + addEntry(new RlvBehaviourGenericToggleProcessor("setenv")); addEntry(new RlvBehaviourGenericProcessor("setgroup", RLV_BHVR_SETGROUP)); addEntry(new RlvBehaviourInfo("sharedunwear", RLV_BHVR_SHAREDUNWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED)); addEntry(new RlvBehaviourInfo("sharedwear", RLV_BHVR_SHAREDWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED)); From 00f561ec80d49545565910636c7f61920e6e20aa Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 2 May 2020 22:28:12 +0200 Subject: [PATCH 34/75] [FIXED] Toolbar and menu items no longer disable when their matching restrictions are active --- indra/newview/app_settings/commands.xml | 2 ++ indra/newview/llviewermenu.cpp | 11 ++++------- indra/newview/rlvcommon.cpp | 9 +++++++-- indra/newview/skins/default/xui/en/menu_viewer.xml | 9 +++++++++ 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index c2d96a682e..6d36795568 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -279,6 +279,8 @@ tooltip_ref="Command_Environments_Tooltip" execute_function="Floater.ToggleOrBringToFront" execute_parameters="my_environments" + is_enabled_function="RLV.EnableIfNot" + is_enabled_parameters="setenv" is_running_function="Floater.IsOpen" is_running_parameters="my_environments" /> diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index c3438e2ab0..0535cea5b1 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -8979,8 +8979,8 @@ class LLWorldEnvSettings : public view_listener_t bool handleEvent(const LLSD& userdata) { -// [RLVa:KB] - Checked: 2010-03-18 (RLVa-1.2.0a) | Modified: RLVa-1.0.0g - if (gRlvHandler.hasBehaviour(RLV_BHVR_SETENV)) +// [RLVa:KB] - @setenv + if (!RlvActions::canChangeEnvironment()) return true; // [/RLVa:KB] @@ -9807,10 +9807,7 @@ void initialize_menus() // [RLVa:KB] - Checked: RLVa-2.0.0 enable.add("RLV.MainToggleVisible", boost::bind(&rlvMenuMainToggleVisible, _1)); - if (RlvActions::isRlvEnabled()) - { - enable.add("RLV.CanShowName", boost::bind(&rlvMenuCanShowName)); - enable.add("RLV.EnableIfNot", boost::bind(&rlvMenuEnableIfNot, _2)); - } + enable.add("RLV.CanShowName", boost::bind(&rlvMenuCanShowName)); + enable.add("RLV.EnableIfNot", boost::bind(&rlvMenuEnableIfNot, _2)); // [/RLVa:KB] } diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 2dad3a4d00..7880ce5321 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -728,8 +728,13 @@ void rlvMenuToggleVisible() bool rlvMenuCanShowName() { - const LLVOAvatar* pAvatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); - return (pAvatar) && (RlvActions::canShowName(RlvActions::SNC_DEFAULT, pAvatar->getID())); + bool fEnable = true; + if (rlv_handler_t::isEnabled()) + { + const LLVOAvatar* pAvatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()); + fEnable = (pAvatar) && (RlvActions::canShowName(RlvActions::SNC_DEFAULT, pAvatar->getID())); + } + return fEnable; } // Checked: 2010-04-23 (RLVa-1.2.0g) | Modified: RLVa-1.2.0g diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index efbc953507..420e75437d 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -727,6 +727,9 @@ + + + From 1d4b173ee4f2121ecc206c47afa9dfe5268b8f1c Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 2 May 2020 23:06:55 +0200 Subject: [PATCH 35/75] [FIXED] Re-add missing legacy @[get|set]env_i commands --- indra/newview/rlvenvironment.cpp | 45 +++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/indra/newview/rlvenvironment.cpp b/indra/newview/rlvenvironment.cpp index b4e1c6fbea..f305309e0c 100644 --- a/indra/newview/rlvenvironment.cpp +++ b/indra/newview/rlvenvironment.cpp @@ -488,14 +488,14 @@ bool RlvEnvironment::onHandleCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRe // Legacy handling (blargh) U32 idxComponent = rlvGetColorComponentFromCharacter(strEnvCommand.back()); - if (idxComponent <= VBLUE) + if (idxComponent <= VALPHA) { strEnvCommand.pop_back(); legacy_handler_map_t::const_iterator itLegacyFnEntry = legacyFnLookup.find(strEnvCommand); if (legacyFnLookup.end() != itLegacyFnEntry) { - cmdRet = itLegacyFnEntry->second(rlvCmd.getParam(), idxComponent); + cmdRet = itLegacyFnEntry->second((RLV_TYPE_FORCE == rlvCmd.getParamType()) ? rlvCmd.getOption() : rlvCmd.getParam(), idxComponent); return true; } } @@ -568,9 +568,16 @@ std::string RlvEnvironment::handleLegacyGetFn(const std::function std::string RlvEnvironment::handleLegacyGetFn(const std::function& getFn, U32 idxComponent) { - if (idxComponent > 3) - return LLStringUtil::null; - return std::to_string(getFn(LLEnvironment::instance().getCurrentSky()).mV[idxComponent]); + if ( (idxComponent >= VRED) && (idxComponent <= VBLUE) ) + { + return std::to_string(getFn(LLEnvironment::instance().getCurrentSky()).mV[idxComponent]); + } + else if (idxComponent == VALPHA) + { + const LLColor3& clr = getFn(LLEnvironment::instance().getCurrentSky()); + return std::to_string(llmax(clr.mV[VRED], clr.mV[VGREEN], clr.mV[VBLUE])); + } + return LLStringUtil::null; } template<> @@ -590,11 +597,31 @@ ERlvCmdRet RlvEnvironment::handleLegacySetFn(float optionValue, LLVec template<> ERlvCmdRet RlvEnvironment::handleLegacySetFn(float optionValue, LLColor3 curValue, const std::function& setFn, U32 idxComponent) { - if (idxComponent > 3) - return RLV_RET_FAILED_UNKNOWN; - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); - curValue.mV[idxComponent] = optionValue; + if ( (idxComponent >= VRED) && (idxComponent <= VBLUE) ) + { + curValue.mV[idxComponent] = optionValue; + } + else if (idxComponent == VALPHA) + { + const F32 curMax = llmax(curValue.mV[VRED], curValue.mV[VGREEN], curValue.mV[VBLUE]); + if ( (0.0f == optionValue) || (0.0f == curMax) ) + { + curValue.mV[VRED] = curValue.mV[VGREEN] = curValue.mV[VBLUE] = optionValue; + } + else + { + const F32 nDelta = (optionValue - curMax) / curMax; + curValue.mV[VRED] *= (1.0f + nDelta); + curValue.mV[VGREEN] *= (1.0f + nDelta); + curValue.mV[VBLUE] *= (1.0f + nDelta); + } + } + else + { + return RLV_RET_FAILED_UNKNOWN; + } + setFn(pSky, curValue); pSky->update(); From e7e0ae63bd2d88e442101cf5a299b66dca2b89a1 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 16 May 2020 15:40:51 +0200 Subject: [PATCH 36/75] CATZ-561: Move /MP compiler switch to the build-variables variables file --- indra/cmake/00-Common.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index fb75ff86bc..4bb4cd1b83 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -63,7 +63,8 @@ if (WINDOWS) # http://www.cmake.org/pipermail/cmake/2009-September/032143.html string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") + # Moved to variables for the convenience of people who are not Kitty + #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Zo" From 06ecf80323e1ae98a021f0ffbcd512e801f41ceb Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 3 Jun 2020 08:13:57 +0200 Subject: [PATCH 37/75] FIRE-29661: Fix build when compiling with OpenAL --- indra/llaudio/llaudioengine_openal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp index e271f8e06d..66e56e4c70 100644 --- a/indra/llaudio/llaudioengine_openal.cpp +++ b/indra/llaudio/llaudioengine_openal.cpp @@ -55,7 +55,7 @@ LLAudioEngine_OpenAL::~LLAudioEngine_OpenAL() bool LLAudioEngine_OpenAL::init(const S32 num_channels, void* userdata, const std::string &app_title) { mWindGen = NULL; - LLAudioEngine::init(num_channels, userdata); + LLAudioEngine::init(num_channels, userdata, app_title); if(!alutInit(NULL, NULL)) { From 0bad9728cd4e729cefc21240083ca51af770e7df Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 3 Jun 2020 16:48:03 +0200 Subject: [PATCH 38/75] Fix build when not building with FMOD Studio --- indra/newview/llprogressview.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index be242afaf6..23528ffd9d 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -478,12 +478,14 @@ void LLProgressView::initLogos() temp_str += gDirUtilp->getDirDelimiter(); + S32 pad_y = 0; // Build fix + #ifdef LL_FMODSTUDIO // original image size is 264x96, it is on longer side but // with no internal paddings so it gets additional padding icon_width = 77; icon_height = 21; - S32 pad_y = 4; + /*S32*/ pad_y = 4; // Build fix texture_start_x++; loadLogo(temp_str + "fmod_logo.png", image_codec, From f3286c3f5d5a02ae3d7288f25a63ec1b9aebbbb2 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Wed, 3 Jun 2020 17:20:43 +0200 Subject: [PATCH 39/75] Updated Polish translation --- .../default/xui/pl/floater_phototools.xml | 10 ---------- .../skins/default/xui/pl/panel_progress.xml | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 indra/newview/skins/default/xui/pl/panel_progress.xml diff --git a/indra/newview/skins/default/xui/pl/floater_phototools.xml b/indra/newview/skins/default/xui/pl/floater_phototools.xml index 220f8667ef..cf97fbf2c3 100644 --- a/indra/newview/skins/default/xui/pl/floater_phototools.xml +++ b/indra/newview/skins/default/xui/pl/floater_phototools.xml @@ -156,16 +156,6 @@