diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 751336a05fac0a15dd0dd7d5e94cd6fe0a3d20f0..4244703f400d1b7333f91209baae1d258f3031bc 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11779,6 +11779,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>RenderParcelSelectionToMaxHeight</key> + <map> + <key>Comment</key> + <string>Display selected parcel outline to max build height</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>RenderShaderCacheEnabled</key> <map> <key>Comment</key> diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 3ea3bcbe1473990a180da9ea2a3b87eec594cd5e..822b982bfc37292946714c44e0a2991e3595fea6 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -492,7 +492,7 @@ void LLViewerParcelMgr::renderParcel(LLParcel* parcel ) // north = a wall going north/south. Need that info to set up texture // coordinates correctly. -void LLViewerParcelMgr::renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 height, U8 direction, LLViewerRegion* regionp) +void LLViewerParcelMgr::renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 height, U8 direction, LLViewerRegion* regionp, bool absolute_height /* = false */) { // HACK: At edge of last region of world, we need to make sure the region // resolves correctly so we can get a height value. @@ -524,16 +524,19 @@ void LLViewerParcelMgr::renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 hei if (height < 1.f) { - z = z1+height; + z = absolute_height ? height : z1+height; gGL.vertex3f(x1, y1, z); gGL.vertex3f(x1, y1, z1); - z = z2 + height; - gGL.vertex3f(x2, y2, z); - gGL.vertex3f(x2, y2, z); - gGL.vertex3f(x1, y1, z1); gGL.vertex3f(x2, y2, z2); + + gGL.vertex3f(x1, y1, z); + gGL.vertex3f(x2, y2, z2); + + z = absolute_height ? height : z2+height; + + gGL.vertex3f(x2, y2, z); } else { @@ -569,15 +572,16 @@ void LLViewerParcelMgr::renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 hei gGL.vertex3f(x2, y2, z2); // top edge stairsteps - z = llmax(z2+height, z1+height); - gGL.texCoord2f(tex_coord1*0.5f + 0.5f, z*0.5f); - gGL.vertex3f(x1, y1, z); - gGL.texCoord2f(tex_coord1*0.5f + 0.5f, z*0.5f); - gGL.vertex3f(x1, y1, z); + z = absolute_height ? height : llmax(z2+height, z1+height); + gGL.texCoord2f(tex_coord2*0.5f+0.5f, z*0.5f); gGL.vertex3f(x2, y2, z); gGL.texCoord2f(tex_coord1*0.5f + 0.5f, z1*0.5f); gGL.vertex3f(x1, y1, z1); + gGL.texCoord2f(tex_coord2*0.5f+0.5f, z*0.5f); + gGL.vertex3f(x2, y2, z); + gGL.texCoord2f(tex_coord1*0.5f + 0.5f, z*0.5f); + gGL.vertex3f(x1, y1, z); } } @@ -591,7 +595,10 @@ void LLViewerParcelMgr::renderHighlightSegments(const U8* segments, LLViewerRegi LLGLSUIDefault gls_ui; gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - LLGLDepthTest gls_depth(GL_TRUE); + LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); + + static LLCachedControl<bool> RenderParcelSelectionToMaxBuildHeight(gSavedSettings, "RenderParcelSelectionToMaxHeight", false); + F32 height = RenderParcelSelectionToMaxBuildHeight ? LLWorld::instance().getRegionMaxHeight() : PARCEL_POST_HEIGHT; gGL.color4f(1.f, 1.f, 0.f, 0.2f); @@ -619,7 +626,7 @@ void LLViewerParcelMgr::renderHighlightSegments(const U8* segments, LLViewerRegi has_segments = true; gGL.begin(LLRender::TRIANGLES); } - renderOneSegment(x1, y1, x2, y2, PARCEL_POST_HEIGHT, SOUTH_MASK, regionp); + renderOneSegment(x1, y1, x2, y2, height, SOUTH_MASK, regionp, RenderParcelSelectionToMaxBuildHeight); } if (segment_mask & WEST_MASK) @@ -635,7 +642,7 @@ void LLViewerParcelMgr::renderHighlightSegments(const U8* segments, LLViewerRegi has_segments = true; gGL.begin(LLRender::TRIANGLES); } - renderOneSegment(x1, y1, x2, y2, PARCEL_POST_HEIGHT, WEST_MASK, regionp); + renderOneSegment(x1, y1, x2, y2, height, WEST_MASK, regionp, RenderParcelSelectionToMaxBuildHeight); } } } diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp index 34704ed4e19cb4bbdc6cbf4a17e773bfbd182f7c..e3bffb9c0f0ff0760a93f18674ee04f7b72674c2 100644 --- a/indra/newview/llviewerfoldertype.cpp +++ b/indra/newview/llviewerfoldertype.cpp @@ -145,14 +145,15 @@ LLViewerFolderDictionary::LLViewerFolderDictionary() addEntry(LLFolderType::FT_MARKETPLACE_LISTINGS, new ViewerFolderEntry("Marketplace Listings", "Inv_SysOpen", "Inv_SysClosed", FALSE, boxes_invisible)); addEntry(LLFolderType::FT_MARKETPLACE_STOCK, new ViewerFolderEntry("New Stock", "Inv_StockFolderOpen", "Inv_StockFolderClosed", FALSE, false, "default")); addEntry(LLFolderType::FT_MARKETPLACE_VERSION, new ViewerFolderEntry("New Version", "Inv_VersionFolderOpen","Inv_VersionFolderClosed", FALSE, false, "default")); - addEntry(LLFolderType::FT_SUITCASE, new ViewerFolderEntry("My Suitcase", "Inv_SysOpen", "Inv_SysClosed", FALSE, false)); - addEntry(LLFolderType::FT_ANIM_OVERRIDES, new ViewerFolderEntry("Animation Overrides", "Inv_SysOpen", "Inv_SysClosed", FALSE, false)); addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "Inv_FolderOpen", "Inv_FolderClosed", FALSE, false, "default")); - addEntry(LLFolderType::FT_TOXIC, new ViewerFolderEntry("Firstorm", "Inv_FolderOpenToxic", "Inv_FolderClosedToxic", FALSE, false)); - addEntry(LLFolderType::FT_RLV, new ViewerFolderEntry("RlvRoot", "Inv_SysOpen", "Inv_SysClosed", FALSE, false)); - addEntry(LLFolderType::FT_LOCAL, new ViewerFolderEntry("Local Inventory", "Inv_SysOpen", "Inv_SysClosed", FALSE, true)); + addEntry(LLFolderType::FT_ANIM_OVERRIDES, new ViewerFolderEntry("Animation Overrides", "Inv_SysOpen", "Inv_SysClosed", FALSE, false)); + addEntry(LLFolderType::FT_TOXIC, new ViewerFolderEntry("Firestorm", "Inv_FolderOpenToxic", "Inv_FolderClosedToxic", FALSE, true)); + addEntry(LLFolderType::FT_RLV, new ViewerFolderEntry("RlvRoot", "Inv_SysOpen", "Inv_SysClosed", FALSE, true)); + addEntry(LLFolderType::FT_LOCAL, new ViewerFolderEntry("Local Inventory", "Inv_SysOpen", "Inv_SysClosed", FALSE, true)); + + addEntry(LLFolderType::FT_SUITCASE, new ViewerFolderEntry("My Suitcase", "Inv_SysOpen", "Inv_SysClosed", FALSE, true)); for (U32 type = (U32)LLFolderType::FT_ENSEMBLE_START; type <= (U32)LLFolderType::FT_ENSEMBLE_END; ++type) { diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 888e448b81c4fe51b7730cc23decdee80e4dcb0e..1f40c5f27d9388c7afb3c1e81dc33cae5ebc4f00 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -81,6 +81,7 @@ void no_op_llsd_func(const LLSD&) {} void no_op() {} static const char * const LOG_INV("Inventory"); +static const char * const LOG_LOCAL("InventoryLocalize"); static const char * const LOG_NOTECARD("copy_inventory_from_notecard"); static const std::string INV_OWNER_ID("owner_id"); @@ -117,7 +118,7 @@ class LLLocalizedInventoryItemsDictionary final : public LLSingleton<LLLocalized bool localizeInventoryObjectName(std::string& object_name) { #ifdef SHOW_DEBUG - LL_DEBUGS("InventoryLocalize") << "Searching for localization: " << object_name << LL_ENDL; + LL_DEBUGS(LOG_LOCAL) << "Searching for localization: " << object_name << LL_ENDL; #endif std::map<std::string, std::string>::const_iterator dictionary_iter = mInventoryItemsDict.find(object_name); @@ -127,7 +128,7 @@ class LLLocalizedInventoryItemsDictionary final : public LLSingleton<LLLocalized { object_name = dictionary_iter->second; #ifdef SHOW_DEBUG - LL_DEBUGS("InventoryLocalize") << "Found, new name is: " << object_name << LL_ENDL; + LL_DEBUGS(LOG_LOCAL) << "Found, new name is: " << object_name << LL_ENDL; #endif } return found; diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 6d0e9822416671af7c69effedc339c2da2c3ce13..3dde65c5347ebbb2518c38818d2d275b71d86d83 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -213,7 +213,7 @@ class LLViewerParcelMgr final : public LLSingleton<LLViewerParcelMgr> void renderRect( const LLVector3d &west_south_bottom, const LLVector3d &east_north_top ); - void renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 height, U8 direction, LLViewerRegion* regionp); + void renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 height, U8 direction, LLViewerRegion* regionp, bool absolute_height = false); void renderHighlightSegments(const U8* segments, LLViewerRegion* regionp); void renderCollisionSegments(U8* segments, BOOL use_pass, LLViewerRegion* regionp); diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index b3d230cb5173f1c1a914eee4656374597dccacc5..51ae654825f6e98666050c74aa5815b7e42bf4b4 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -550,13 +550,17 @@ bool viewerChoosesConnectionHandles() void LLVivoxVoiceClient::connectorCreate() { std::ostringstream stream; - std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); + // Transition to stateConnectorStarted when the connector handle comes back. + std::string logdir = gSavedSettings.getString("VivoxLogDirectory"); + if (logdir.empty()) + { + logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); + } if (LLStringUtil::endsWith(logdir, gDirUtilp->getDirDelimiter())) { logdir = logdir.substr(0, logdir.size() - gDirUtilp->getDirDelimiter().size()); } - // Transition to stateConnectorStarted when the connector handle comes back. std::string vivoxLogLevel = gSavedSettings.getString("VivoxDebugLevel"); if ( vivoxLogLevel.empty() ) { @@ -1061,7 +1065,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() { voice_port->setValue(LLSD(port_nr), false); params.args.add("-i"); - params.args.add(llformat("127.0.0.1:%u", gSavedSettings.getU32("VivoxVoicePort"))); + params.args.add(llformat("%s:%u", gSavedSettings.getString("VivoxVoiceHost").c_str(), gSavedSettings.getU32("VivoxVoicePort"))); } } @@ -1087,7 +1091,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() sGatewayPtr = LLProcess::create(params); - mDaemonHost = LLHost(gSavedSettings.getString("VivoxVoiceHost").c_str(), gSavedSettings.getU32("VivoxVoicePort")); + mDaemonHost = LLHost(gSavedSettings.getString("VivoxVoiceHost"), gSavedSettings.getU32("VivoxVoicePort")); } else { @@ -5005,7 +5009,6 @@ bool LLVivoxVoiceClient::checkParcelChanged(bool update) { mCurrentParcelLocalID = parcelLocalID; mCurrentRegionName = regionName; - mAreaVoiceDisabled = false; } return true; } @@ -5359,7 +5362,12 @@ bool LLVivoxVoiceClient::inProximalChannel() std::string LLVivoxVoiceClient::sipURIFromID(const LLUUID &id) { - std::string result = fmt::format(FMT_COMPILE("sip:{}@{}"), nameFromID(id), mVoiceSIPURIHostName); + std::string result; + result = "sip:"; + result += nameFromID(id); + result += "@"; + result += mVoiceSIPURIHostName; + return result; } @@ -5368,8 +5376,12 @@ std::string LLVivoxVoiceClient::sipURIFromAvatar(LLVOAvatar *avatar) std::string result; if(avatar) { - result = fmt::format(FMT_COMPILE("sip:{}@{}"), nameFromID(avatar->getID()), mVoiceSIPURIHostName); + result = "sip:"; + result += nameFromID(avatar->getID()); + result += "@"; + result += mVoiceSIPURIHostName; } + return result; } @@ -5464,8 +5476,14 @@ std::string LLVivoxVoiceClient::displayNameFromAvatar(LLVOAvatar *avatar) std::string LLVivoxVoiceClient::sipURIFromName(std::string_view name) { - std::string result = fmt::format(FMT_COMPILE("sip:{}@{}"), name, mVoiceSIPURIHostName); + std::string result; + result = "sip:"; + result += name; + result += "@"; + result += mVoiceSIPURIHostName; + // LLStringUtil::toLower(result); + return result; } @@ -6077,7 +6095,7 @@ LLVivoxVoiceClient::sessionState::~sessionState() if (mMyIterator != mSession.end()) mSession.erase(mMyIterator); - removeAllParticipants(); + removeAllParticipants(); } bool LLVivoxVoiceClient::sessionState::isCallBackPossible() diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 0bf297f518743f293da6d7769d32c22a92d90aea..9d087919ef111bc534da2bfd58f94e723b1baa93 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1674,6 +1674,29 @@ function="World.EnvPreset" function="ToggleControl" parameter="ShowSelectionBeam" /> </menu_item_check> + <menu_item_check + label="Show Parcel Boundary Outline" + name="RenderParcelSelection"> + <menu_item_check.on_check + function="CheckControl" + parameter="RenderParcelSelection" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="RenderParcelSelection" /> + </menu_item_check> + <menu_item_check + label="Show Boundary up to maximum build height" + name="RenderParcelSelectionToMaxHeight"> + <menu_item_check.on_check + function="CheckControl" + parameter="RenderParcelSelectionToMaxHeight" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="RenderParcelSelectionToMaxHeight" /> + <menu_item_check.on_enable + function="CheckControl" + parameter="RenderParcelSelection" /> + </menu_item_check> <menu_item_check label="Highlight Transparent" name="Highlight Transparent" @@ -1684,6 +1707,7 @@ function="World.EnvPreset" <menu_item_check.on_click function="View.HighlightTransparent" /> </menu_item_check> + <menu_item_separator/> <menu_item_check label="Grab objects with Ctrl-Drag" name="EnableCtrlDragMovement">