Merge branch 'develop' of https://github.com/secondlife/viewer
# Conflicts: # indra/llrender/llrendertarget.cpp # indra/newview/gltf/asset.cpp # indra/newview/llagentcamera.cpp # indra/newview/lldrawpoolwater.cpp # indra/newview/llstartup.cpp # indra/newview/llviewertexture.cpp # indra/newview/llvoavatar.cpp # indra/newview/llvoicewebrtc.cpp # indra/newview/viewer_manifest.pymaster
commit
b0b8328c5c
|
|
@ -43,7 +43,11 @@ jobs:
|
||||||
artifact: Windows-installer
|
artifact: Windows-installer
|
||||||
install-path: 'C:\viewer-automation-main'
|
install-path: 'C:\viewer-automation-main'
|
||||||
- os: windows
|
- os: windows
|
||||||
runner: qa-dan-asus
|
runner: qa-windows-asus-dan
|
||||||
|
artifact: Windows-installer
|
||||||
|
install-path: 'C:\viewer-automation-main'
|
||||||
|
- os: windows
|
||||||
|
runner: qa-windows-z600-dan
|
||||||
artifact: Windows-installer
|
artifact: Windows-installer
|
||||||
install-path: 'C:\viewer-automation-main'
|
install-path: 'C:\viewer-automation-main'
|
||||||
- os: mac
|
- os: mac
|
||||||
|
|
|
||||||
|
|
@ -497,24 +497,6 @@ U32 LLRenderTarget::getNumTextures() const
|
||||||
void LLRenderTarget::bindTexture(U32 index, S32 channel, LLTexUnit::eTextureFilterOptions filter_options)
|
void LLRenderTarget::bindTexture(U32 index, S32 channel, LLTexUnit::eTextureFilterOptions filter_options)
|
||||||
{
|
{
|
||||||
gGL.getTexUnit(channel)->bindManual(mUsage, getTexture(index), filter_options == LLTexUnit::TFO_TRILINEAR || filter_options == LLTexUnit::TFO_ANISOTROPIC);
|
gGL.getTexUnit(channel)->bindManual(mUsage, getTexture(index), filter_options == LLTexUnit::TFO_TRILINEAR || filter_options == LLTexUnit::TFO_ANISOTROPIC);
|
||||||
|
|
||||||
// <FS:Beq> Unused variable warning fix (Macos) none of this code is needed.
|
|
||||||
// bool isSRGB = false;
|
|
||||||
// llassert(mInternalFormat.size() > index);
|
|
||||||
// switch (mInternalFormat[index])
|
|
||||||
// {
|
|
||||||
// case GL_SRGB:
|
|
||||||
// case GL_SRGB8:
|
|
||||||
// case GL_SRGB_ALPHA:
|
|
||||||
// case GL_SRGB8_ALPHA8:
|
|
||||||
// isSRGB = true;
|
|
||||||
// break;
|
|
||||||
|
|
||||||
// default:
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// </FS:Beq>
|
|
||||||
|
|
||||||
gGL.getTexUnit(channel)->setTextureFilteringOption(filter_options);
|
gGL.getTexUnit(channel)->setTextureFilteringOption(filter_options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2148,7 +2148,7 @@ set(viewer_APPSETTINGS_FILES
|
||||||
#app_settings/toolbars.xml FS:AO moved to skins
|
#app_settings/toolbars.xml FS:AO moved to skins
|
||||||
app_settings/trees.xml
|
app_settings/trees.xml
|
||||||
app_settings/viewerart.xml
|
app_settings/viewerart.xml
|
||||||
${CMAKE_SOURCE_DIR}/../etc/message.xml
|
app_settings/message.xml
|
||||||
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
|
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
|
||||||
packages-info.txt
|
packages-info.txt
|
||||||
featuretable.txt
|
featuretable.txt
|
||||||
|
|
@ -2284,7 +2284,7 @@ if (WINDOWS)
|
||||||
|
|
||||||
set(COPY_INPUT_DEPENDENCIES
|
set(COPY_INPUT_DEPENDENCIES
|
||||||
# The following commented dependencies are determined at variably at build time. Can't do this here.
|
# The following commented dependencies are determined at variably at build time. Can't do this here.
|
||||||
${CMAKE_SOURCE_DIR}/../etc/message.xml
|
app_settings/message.xml
|
||||||
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
|
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
|
||||||
#${SHARED_LIB_STAGING_DIR}/openjp2.dll # <FS:Ansariel> Only copy OpenJPEG dll if needed
|
#${SHARED_LIB_STAGING_DIR}/openjp2.dll # <FS:Ansariel> Only copy OpenJPEG dll if needed
|
||||||
${SHARED_LIB_STAGING_DIR}/llwebrtc.dll
|
${SHARED_LIB_STAGING_DIR}/llwebrtc.dll
|
||||||
|
|
|
||||||
|
|
@ -2776,7 +2776,7 @@
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>Boolean</string>
|
<string>Boolean</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>ShowDiscordActivityDetails</key>
|
<key>ShowDiscordActivityDetails</key>
|
||||||
<map>
|
<map>
|
||||||
|
|
|
||||||
|
|
@ -589,7 +589,7 @@ bool Asset::prep()
|
||||||
|
|
||||||
for (U32 variant = 0; variant < LLGLSLShader::NUM_GLTF_VARIANTS; ++variant)
|
for (U32 variant = 0; variant < LLGLSLShader::NUM_GLTF_VARIANTS; ++variant)
|
||||||
{
|
{
|
||||||
#if SHOW_ASSERT
|
#ifdef SHOW_ASSERT
|
||||||
U32 attribute_mask = 0;
|
U32 attribute_mask = 0;
|
||||||
#endif
|
#endif
|
||||||
// for each mesh
|
// for each mesh
|
||||||
|
|
@ -609,7 +609,7 @@ bool Asset::prep()
|
||||||
|
|
||||||
// all primitives of a given variant and material should all have the same attribute mask
|
// all primitives of a given variant and material should all have the same attribute mask
|
||||||
llassert(attribute_mask == 0 || primitive.mAttributeMask == attribute_mask);
|
llassert(attribute_mask == 0 || primitive.mAttributeMask == attribute_mask);
|
||||||
#if SHOW_ASSERT
|
#ifdef SHOW_ASSERT
|
||||||
attribute_mask |= primitive.mAttributeMask;
|
attribute_mask |= primitive.mAttributeMask;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1903,7 +1903,6 @@ F32 LLAgentCamera::calcCameraFOVZoomFactor()
|
||||||
LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(bool *hit_limit)
|
LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(bool *hit_limit)
|
||||||
{
|
{
|
||||||
// Compute base camera position and look-at points.
|
// Compute base camera position and look-at points.
|
||||||
F32 camera_land_height;
|
|
||||||
LLVector3d frame_center_global = !isAgentAvatarValid() ?
|
LLVector3d frame_center_global = !isAgentAvatarValid() ?
|
||||||
gAgent.getPositionGlobal() :
|
gAgent.getPositionGlobal() :
|
||||||
gAgent.getPosGlobalFromAgent(getAvatarRootPosition());
|
gAgent.getPosGlobalFromAgent(getAvatarRootPosition());
|
||||||
|
|
@ -2184,19 +2183,11 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(bool *hit_limit)
|
||||||
}
|
}
|
||||||
// [/RLVa:KB]
|
// [/RLVa:KB]
|
||||||
|
|
||||||
// <FS:humbletim> FIRE-33613: [OpenSim] [PBR] Camera cannot be located at negative Z
|
// Don't let camera go underground if constrained
|
||||||
F32 camera_ground_plane{ F_ALMOST_ZERO };
|
// If not constrained, permit going 1000m below 0, use case: retrieving objects
|
||||||
// integrate OpenSimExtras.MinSimHeight into the camera ground plane calculation
|
F32 camera_min_off_ground = getCameraMinOffGround(); // checks isDisableCameraConstraints
|
||||||
if (auto regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global))
|
F32 camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
|
||||||
{
|
F32 minZ = camera_land_height + camera_min_off_ground;
|
||||||
camera_ground_plane += regionp->getMinSimHeight();
|
|
||||||
}
|
|
||||||
// </FS:humbletim>
|
|
||||||
|
|
||||||
// Don't let camera go underground
|
|
||||||
F32 camera_min_off_ground = getCameraMinOffGround();
|
|
||||||
camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
|
|
||||||
F32 minZ = llmax(camera_ground_plane, camera_land_height + camera_min_off_ground); // <FS:humbletim/> FIRE-33613: [OpenSim] [PBR] Camera cannot be located at negative Z
|
|
||||||
if (camera_position_global.mdV[VZ] < minZ)
|
if (camera_position_global.mdV[VZ] < minZ)
|
||||||
{
|
{
|
||||||
camera_position_global.mdV[VZ] = minZ;
|
camera_position_global.mdV[VZ] = minZ;
|
||||||
|
|
|
||||||
|
|
@ -6914,100 +6914,21 @@ void LLAppViewer::initDiscordSocial()
|
||||||
gDiscordPartyMaxSize = 0;
|
gDiscordPartyMaxSize = 0;
|
||||||
gDiscordTimestampsStart = time(nullptr);
|
gDiscordTimestampsStart = time(nullptr);
|
||||||
gDiscordClient = std::make_shared<discordpp::Client>();
|
gDiscordClient = std::make_shared<discordpp::Client>();
|
||||||
gDiscordClient->SetStatusChangedCallback([](discordpp::Client::Status status, discordpp::Client::Error, int32_t) {
|
gDiscordClient->SetApplicationId(1394782217405862001);
|
||||||
if (status == discordpp::Client::Status::Ready)
|
updateDiscordActivity();
|
||||||
{
|
|
||||||
updateDiscordActivity();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (gSavedSettings.getBOOL("EnableDiscord"))
|
|
||||||
{
|
|
||||||
auto credential = gSecAPIHandler->loadCredential("Discord");
|
|
||||||
if (credential.notNull())
|
|
||||||
{
|
|
||||||
gDiscordClient->UpdateToken(discordpp::AuthorizationTokenType::Bearer, credential->getAuthenticator()["token"].asString(), [](discordpp::ClientResult result) {
|
|
||||||
if (result.Successful())
|
|
||||||
gDiscordClient->Connect();
|
|
||||||
else
|
|
||||||
LL_WARNS("Discord") << result.Error() << LL_ENDL;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LL_WARNS("Discord") << "Integration was enabled, but no credentials. Disabling integration." << LL_ENDL;
|
|
||||||
gSavedSettings.setBOOL("EnableDiscord", false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LLAppViewer::toggleDiscordIntegration(const LLSD& value)
|
|
||||||
{
|
|
||||||
static const uint64_t APPLICATION_ID = 1394782217405862001;
|
|
||||||
if (value.asBoolean())
|
|
||||||
{
|
|
||||||
discordpp::AuthorizationArgs args{};
|
|
||||||
args.SetClientId(APPLICATION_ID);
|
|
||||||
args.SetScopes(discordpp::Client::GetDefaultPresenceScopes());
|
|
||||||
auto codeVerifier = gDiscordClient->CreateAuthorizationCodeVerifier();
|
|
||||||
args.SetCodeChallenge(codeVerifier.Challenge());
|
|
||||||
gDiscordClient->Authorize(args, [codeVerifier](auto result, auto code, auto redirectUri) {
|
|
||||||
if (result.Successful())
|
|
||||||
{
|
|
||||||
gDiscordClient->GetToken(APPLICATION_ID, code, codeVerifier.Verifier(), redirectUri, [](discordpp::ClientResult result, std::string accessToken, std::string, discordpp::AuthorizationTokenType, int32_t, std::string) {
|
|
||||||
if (result.Successful())
|
|
||||||
{
|
|
||||||
gDiscordClient->UpdateToken(discordpp::AuthorizationTokenType::Bearer, accessToken, [accessToken](discordpp::ClientResult result) {
|
|
||||||
if (result.Successful())
|
|
||||||
{
|
|
||||||
LLSD authenticator = LLSD::emptyMap();
|
|
||||||
authenticator["token"] = accessToken;
|
|
||||||
gSecAPIHandler->saveCredential(gSecAPIHandler->createCredential("Discord", LLSD::emptyMap(), authenticator), true);
|
|
||||||
gDiscordClient->Connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LL_WARNS("Discord") << result.Error() << LL_ENDL;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LL_WARNS("Discord") << result.Error() << LL_ENDL;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LL_WARNS("Discord") << result.Error() << LL_ENDL;
|
|
||||||
gSavedSettings.setBOOL("EnableDiscord", false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gDiscordClient->Disconnect();
|
|
||||||
auto credential = gSecAPIHandler->loadCredential("Discord");
|
|
||||||
if (credential.notNull())
|
|
||||||
{
|
|
||||||
gDiscordClient->RevokeToken(APPLICATION_ID, credential->getAuthenticator()["token"].asString(), [](discordpp::ClientResult result) {
|
|
||||||
if (result.Successful())
|
|
||||||
LL_INFOS("Discord") << "Access token successfully revoked." << LL_ENDL;
|
|
||||||
else
|
|
||||||
LL_WARNS("Discord") << "No access token to revoke." << LL_ENDL;
|
|
||||||
});
|
|
||||||
auto cred = new LLCredential("Discord");
|
|
||||||
gSecAPIHandler->deleteCredential(cred);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LL_WARNS("Discord") << "Credentials are already nonexistent." << LL_ENDL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLAppViewer::updateDiscordActivity()
|
void LLAppViewer::updateDiscordActivity()
|
||||||
{
|
{
|
||||||
LL_PROFILE_ZONE_SCOPED;
|
LL_PROFILE_ZONE_SCOPED;
|
||||||
|
|
||||||
|
static LLCachedControl<bool> integration_enabled(gSavedSettings, "EnableDiscord", true);
|
||||||
|
if (!integration_enabled)
|
||||||
|
{
|
||||||
|
gDiscordClient->ClearRichPresence();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
discordpp::Activity activity;
|
discordpp::Activity activity;
|
||||||
activity.SetType(discordpp::ActivityTypes::Playing);
|
activity.SetType(discordpp::ActivityTypes::Playing);
|
||||||
discordpp::ActivityTimestamps timestamps;
|
discordpp::ActivityTimestamps timestamps;
|
||||||
|
|
@ -7035,37 +6956,39 @@ void LLAppViewer::updateDiscordActivity()
|
||||||
activity.SetDetails(gDiscordActivityDetails);
|
activity.SetDetails(gDiscordActivityDetails);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto agent_pos_region = gAgent.getPositionAgent();
|
||||||
|
S32 pos_x = S32(agent_pos_region.mV[VX] + 0.5f);
|
||||||
|
S32 pos_y = S32(agent_pos_region.mV[VY] + 0.5f);
|
||||||
|
S32 pos_z = S32(agent_pos_region.mV[VZ] + 0.5f);
|
||||||
|
F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared();
|
||||||
|
const F32 FLY_CUTOFF = 6.f;
|
||||||
|
const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF;
|
||||||
|
const F32 WALK_CUTOFF = 1.5f;
|
||||||
|
const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF;
|
||||||
|
if (velocity_mag_sq > FLY_CUTOFF_SQ)
|
||||||
|
{
|
||||||
|
pos_x -= pos_x % 4;
|
||||||
|
pos_y -= pos_y % 4;
|
||||||
|
}
|
||||||
|
else if (velocity_mag_sq > WALK_CUTOFF_SQ)
|
||||||
|
{
|
||||||
|
pos_x -= pos_x % 2;
|
||||||
|
pos_y -= pos_y % 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string location = "Hidden Region";
|
||||||
static LLCachedControl<bool> show_state(gSavedSettings, "ShowDiscordActivityState", false);
|
static LLCachedControl<bool> show_state(gSavedSettings, "ShowDiscordActivityState", false);
|
||||||
if (show_state)
|
if (show_state)
|
||||||
{
|
{
|
||||||
auto agent_pos_region = gAgent.getPositionAgent();
|
location = llformat("%s (%d, %d, %d)", gAgent.getRegion()->getName().c_str(), pos_x, pos_y, pos_z);
|
||||||
S32 pos_x = S32(agent_pos_region.mV[VX] + 0.5f);
|
|
||||||
S32 pos_y = S32(agent_pos_region.mV[VY] + 0.5f);
|
|
||||||
S32 pos_z = S32(agent_pos_region.mV[VZ] + 0.5f);
|
|
||||||
F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared();
|
|
||||||
const F32 FLY_CUTOFF = 6.f;
|
|
||||||
const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF;
|
|
||||||
const F32 WALK_CUTOFF = 1.5f;
|
|
||||||
const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF;
|
|
||||||
if (velocity_mag_sq > FLY_CUTOFF_SQ)
|
|
||||||
{
|
|
||||||
pos_x -= pos_x % 4;
|
|
||||||
pos_y -= pos_y % 4;
|
|
||||||
}
|
|
||||||
else if (velocity_mag_sq > WALK_CUTOFF_SQ)
|
|
||||||
{
|
|
||||||
pos_x -= pos_x % 2;
|
|
||||||
pos_y -= pos_y % 2;
|
|
||||||
}
|
|
||||||
auto location = llformat("%s (%d, %d, %d)", gAgent.getRegion()->getName().c_str(), pos_x, pos_y, pos_z);
|
|
||||||
activity.SetState(location);
|
|
||||||
|
|
||||||
discordpp::ActivityParty party;
|
|
||||||
party.SetId(location);
|
|
||||||
party.SetCurrentSize(gDiscordPartyCurrentSize);
|
|
||||||
party.SetMaxSize(gDiscordPartyMaxSize);
|
|
||||||
activity.SetParty(party);
|
|
||||||
}
|
}
|
||||||
|
activity.SetState(location);
|
||||||
|
|
||||||
|
discordpp::ActivityParty party;
|
||||||
|
party.SetId(location);
|
||||||
|
party.SetCurrentSize(gDiscordPartyCurrentSize);
|
||||||
|
party.SetMaxSize(gDiscordPartyMaxSize);
|
||||||
|
activity.SetParty(party);
|
||||||
|
|
||||||
gDiscordClient->UpdateRichPresence(activity, [](discordpp::ClientResult) {});
|
gDiscordClient->UpdateRichPresence(activity, [](discordpp::ClientResult) {});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,6 @@ public:
|
||||||
|
|
||||||
#ifdef LL_DISCORD
|
#ifdef LL_DISCORD
|
||||||
static void initDiscordSocial();
|
static void initDiscordSocial();
|
||||||
static void toggleDiscordIntegration(const LLSD& value);
|
|
||||||
static void updateDiscordActivity();
|
static void updateDiscordActivity();
|
||||||
static void updateDiscordPartyCurrentSize(int32_t size);
|
static void updateDiscordPartyCurrentSize(int32_t size);
|
||||||
static void updateDiscordPartyMaxSize(int32_t size);
|
static void updateDiscordPartyMaxSize(int32_t size);
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,6 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass)
|
||||||
gGL.setColorMask(true, true);
|
gGL.setColorMask(true, true);
|
||||||
|
|
||||||
LLColor3 light_diffuse(0, 0, 0);
|
LLColor3 light_diffuse(0, 0, 0);
|
||||||
//F32 light_exp = 0.0f; // <FS:Ansariel> Remove unused variable
|
|
||||||
|
|
||||||
LLEnvironment& environment = LLEnvironment::instance();
|
LLEnvironment& environment = LLEnvironment::instance();
|
||||||
LLSettingsWater::ptr_t pwater = environment.getCurrentWater();
|
LLSettingsWater::ptr_t pwater = environment.getCurrentWater();
|
||||||
|
|
@ -183,7 +182,6 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass)
|
||||||
// Apply magic numbers translating light direction into intensities
|
// Apply magic numbers translating light direction into intensities
|
||||||
light_dir.normalize();
|
light_dir.normalize();
|
||||||
F32 ground_proj_sq = light_dir.mV[0] * light_dir.mV[0] + light_dir.mV[1] * light_dir.mV[1];
|
F32 ground_proj_sq = light_dir.mV[0] * light_dir.mV[0] + light_dir.mV[1] * light_dir.mV[1];
|
||||||
//light_exp = llmax(32.f, 256.f * powf(ground_proj_sq, 16.0f)); // <FS:Ansariel> Remove unused variable
|
|
||||||
if (0.f < light_diffuse.normalize()) // Normalizing a color? Puzzling...
|
if (0.f < light_diffuse.normalize()) // Normalizing a color? Puzzling...
|
||||||
{
|
{
|
||||||
light_diffuse *= (1.5f + (6.f * ground_proj_sq));
|
light_diffuse *= (1.5f + (6.f * ground_proj_sq));
|
||||||
|
|
|
||||||
|
|
@ -551,7 +551,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
|
||||||
mCommitCallbackRegistrar.add("Pref.DeleteTranscripts", boost::bind(&LLFloaterPreference::onDeleteTranscripts, this));
|
mCommitCallbackRegistrar.add("Pref.DeleteTranscripts", boost::bind(&LLFloaterPreference::onDeleteTranscripts, this));
|
||||||
mCommitCallbackRegistrar.add("UpdateFilter", boost::bind(&LLFloaterPreference::onUpdateFilterTerm, this, false)); // <FS:ND/> Hook up for filtering
|
mCommitCallbackRegistrar.add("UpdateFilter", boost::bind(&LLFloaterPreference::onUpdateFilterTerm, this, false)); // <FS:ND/> Hook up for filtering
|
||||||
#ifdef LL_DISCORD
|
#ifdef LL_DISCORD
|
||||||
gSavedSettings.getControl("EnableDiscord")->getCommitSignal()->connect(boost::bind(&LLAppViewer::toggleDiscordIntegration, _2));
|
gSavedSettings.getControl("EnableDiscord")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
|
||||||
gSavedSettings.getControl("ShowDiscordActivityDetails")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
|
gSavedSettings.getControl("ShowDiscordActivityDetails")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
|
||||||
gSavedSettings.getControl("ShowDiscordActivityState")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
|
gSavedSettings.getControl("ShowDiscordActivityState")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -396,13 +396,11 @@ void pump_idle_startup_network(void)
|
||||||
{
|
{
|
||||||
// while there are message to process:
|
// while there are message to process:
|
||||||
// process one then call display_startup()
|
// process one then call display_startup()
|
||||||
// S32 num_messages = 0; // <FS:Beq/> Avoid set-but-unused in Clang
|
|
||||||
{
|
{
|
||||||
LockMessageChecker lmc(gMessageSystem);
|
LockMessageChecker lmc(gMessageSystem);
|
||||||
while (lmc.checkAllMessages(gFrameCount, gServicePump))
|
while (lmc.checkAllMessages(gFrameCount, gServicePump))
|
||||||
{
|
{
|
||||||
display_startup();
|
display_startup();
|
||||||
// ++num_messages; // <FS:Beq/> Avoid set-but-unused in Clang
|
|
||||||
}
|
}
|
||||||
lmc.processAcks();
|
lmc.processAcks();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -544,7 +544,6 @@ void LLViewerTexture::updateClass()
|
||||||
bool is_low = is_sys_low || over_pct > 0.f;
|
bool is_low = is_sys_low || over_pct > 0.f;
|
||||||
|
|
||||||
static bool was_low = false;
|
static bool was_low = false;
|
||||||
//static bool was_sys_low = false; // <FS:Ansariel> Remove unused variable
|
|
||||||
|
|
||||||
if (is_low && !was_low)
|
if (is_low && !was_low)
|
||||||
{
|
{
|
||||||
|
|
@ -562,7 +561,6 @@ void LLViewerTexture::updateClass()
|
||||||
}
|
}
|
||||||
|
|
||||||
was_low = is_low;
|
was_low = is_low;
|
||||||
//was_sys_low = is_sys_low; // <FS:Ansariel> Remove unused variable
|
|
||||||
|
|
||||||
if (is_low)
|
if (is_low)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5674,16 +5674,6 @@ bool LLVOAvatar::updateCharacter(LLAgent &agent)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool visible = isVisible();
|
bool visible = isVisible();
|
||||||
// <FS:Beq> Set but not used
|
|
||||||
// bool is_control_avatar = isControlAvatar(); // capture state to simplify tracing
|
|
||||||
// bool is_attachment = false;
|
|
||||||
|
|
||||||
// if (is_control_avatar)
|
|
||||||
// {
|
|
||||||
// LLControlAvatar *cav = dynamic_cast<LLControlAvatar*>(this);
|
|
||||||
// is_attachment = cav && cav->mRootVolp && cav->mRootVolp->isAttachment(); // For attached animated objects
|
|
||||||
// }
|
|
||||||
// </FS:Beq>
|
|
||||||
|
|
||||||
// For fading out the names above heads, only let the timer
|
// For fading out the names above heads, only let the timer
|
||||||
// run if we're visible.
|
// run if we're visible.
|
||||||
|
|
|
||||||
|
|
@ -2264,7 +2264,6 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro(connectionPtr_t connection)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bool iceCompleted = false; // <FS:Beq/> Set but not used
|
|
||||||
LLSD body;
|
LLSD body;
|
||||||
if (!connection->mIceCandidates.empty() || connection->mIceCompleted)
|
if (!connection->mIceCandidates.empty() || connection->mIceCompleted)
|
||||||
{
|
{
|
||||||
|
|
@ -2303,7 +2302,6 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro(connectionPtr_t connection)
|
||||||
LLSD body_candidate;
|
LLSD body_candidate;
|
||||||
body_candidate["completed"] = true;
|
body_candidate["completed"] = true;
|
||||||
body["candidate"] = body_candidate;
|
body["candidate"] = body_candidate;
|
||||||
// iceCompleted = connection->mIceCompleted; // <FS:Beq/> Set but not used
|
|
||||||
connection->mIceCompleted = false;
|
connection->mIceCompleted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2928,7 +2926,6 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boost::json::object voice_data = voice_data_parsed.as_object();
|
boost::json::object voice_data = voice_data_parsed.as_object();
|
||||||
// bool new_participant = false; // <FS:Beq/> Set but not used
|
|
||||||
boost::json::object mute;
|
boost::json::object mute;
|
||||||
boost::json::object user_gain;
|
boost::json::object user_gain;
|
||||||
for (auto &participant_elem : voice_data)
|
for (auto &participant_elem : voice_data)
|
||||||
|
|
@ -2981,7 +2978,6 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// new_participant |= joined; // <FS:Beq/> Set but not used
|
|
||||||
if (!participant && joined && (primary || !isSpatial()))
|
if (!participant && joined && (primary || !isSpatial()))
|
||||||
{
|
{
|
||||||
participant = LLWebRTCVoiceClient::getInstance()->addParticipantByID(mChannelID, agent_id, mRegionID);
|
participant = LLWebRTCVoiceClient::getInstance()->addParticipantByID(mChannelID, agent_id, mRegionID);
|
||||||
|
|
|
||||||
|
|
@ -199,6 +199,25 @@ Learn about [https://community.secondlife.com/knowledgebase/joining-and-particip
|
||||||
function="People.DelFriend" />
|
function="People.DelFriend" />
|
||||||
</dnd_button>
|
</dnd_button>
|
||||||
</panel>
|
</panel>
|
||||||
|
<slider
|
||||||
|
control_name="NearMeRange"
|
||||||
|
decimal_digits="0"
|
||||||
|
increment="1"
|
||||||
|
follows="left|top"
|
||||||
|
left="5"
|
||||||
|
min_val="0"
|
||||||
|
max_val="4096"
|
||||||
|
label="Range:"
|
||||||
|
name="near_me_range"
|
||||||
|
tool_tip="Nearby people range"
|
||||||
|
width="230"/>
|
||||||
|
<text
|
||||||
|
type="string"
|
||||||
|
follows="left|top"
|
||||||
|
left_delta="225"
|
||||||
|
name="near_me_range_text2">
|
||||||
|
m
|
||||||
|
</text>
|
||||||
<layout_stack
|
<layout_stack
|
||||||
clip="false"
|
clip="false"
|
||||||
follows="all"
|
follows="all"
|
||||||
|
|
@ -239,7 +258,7 @@ Learn about [https://community.secondlife.com/knowledgebase/joining-and-particip
|
||||||
<avatar_list
|
<avatar_list
|
||||||
allow_select="true"
|
allow_select="true"
|
||||||
follows="all"
|
follows="all"
|
||||||
height="211"
|
height="197"
|
||||||
ignore_online_status="true"
|
ignore_online_status="true"
|
||||||
layout="topleft"
|
layout="topleft"
|
||||||
left="3"
|
left="3"
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,6 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
||||||
def construct(self):
|
def construct(self):
|
||||||
super(ViewerManifest, self).construct()
|
super(ViewerManifest, self).construct()
|
||||||
self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
|
self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
|
||||||
self.path(src="../../etc/message.xml", dst="app_settings/message.xml")
|
|
||||||
|
|
||||||
# <FS:LO> Copy dictionaries to a place where the viewer can find them if ran from visual studio
|
# <FS:LO> Copy dictionaries to a place where the viewer can find them if ran from visual studio
|
||||||
pkgdir = os.path.join(self.args['build'], os.pardir, 'packages')
|
pkgdir = os.path.join(self.args['build'], os.pardir, 'packages')
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue