Merge branch 'develop' of https://github.com/secondlife/viewer
# Conflicts: # indra/newview/llfloaterspellchecksettings.h # indra/newview/llpaneleditwearable.cpp # indra/newview/llviewertexture.cpp # indra/newview/llviewertexture.hmaster
commit
76f2b1f48c
|
|
@ -1743,11 +1743,11 @@
|
||||||
<key>creds</key>
|
<key>creds</key>
|
||||||
<string>github</string>
|
<string>github</string>
|
||||||
<key>hash</key>
|
<key>hash</key>
|
||||||
<string>755a3de464149ae88b048f976828a8c0c46e3bdb</string>
|
<string>9e59c93c7110e87b4ff3db330f11a23c50e5000f</string>
|
||||||
<key>hash_algorithm</key>
|
<key>hash_algorithm</key>
|
||||||
<string>sha1</string>
|
<string>sha1</string>
|
||||||
<key>url</key>
|
<key>url</key>
|
||||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/172966323</string>
|
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/178910560</string>
|
||||||
</map>
|
</map>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>darwin64</string>
|
<string>darwin64</string>
|
||||||
|
|
@ -1759,11 +1759,11 @@
|
||||||
<key>creds</key>
|
<key>creds</key>
|
||||||
<string>github</string>
|
<string>github</string>
|
||||||
<key>hash</key>
|
<key>hash</key>
|
||||||
<string>813e7b5e294d7958e3d69e2252752ff346953b0c</string>
|
<string>7ed994db5bafa9a7ad09a1b53da850a84715c65e</string>
|
||||||
<key>hash_algorithm</key>
|
<key>hash_algorithm</key>
|
||||||
<string>sha1</string>
|
<string>sha1</string>
|
||||||
<key>url</key>
|
<key>url</key>
|
||||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/172966322</string>
|
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/178910561</string>
|
||||||
</map>
|
</map>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>linux64</string>
|
<string>linux64</string>
|
||||||
|
|
@ -1775,18 +1775,18 @@
|
||||||
<key>creds</key>
|
<key>creds</key>
|
||||||
<string>github</string>
|
<string>github</string>
|
||||||
<key>hash</key>
|
<key>hash</key>
|
||||||
<string>67f647538b1b49d0152fd9d03cfb9bdf978e33d1</string>
|
<string>66824c02e0e5eabbfbe37bfb173360195f89697c</string>
|
||||||
<key>hash_algorithm</key>
|
<key>hash_algorithm</key>
|
||||||
<string>sha1</string>
|
<string>sha1</string>
|
||||||
<key>url</key>
|
<key>url</key>
|
||||||
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/172966328</string>
|
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/178910562</string>
|
||||||
</map>
|
</map>
|
||||||
<key>name</key>
|
<key>name</key>
|
||||||
<string>windows64</string>
|
<string>windows64</string>
|
||||||
</map>
|
</map>
|
||||||
</map>
|
</map>
|
||||||
<key>version</key>
|
<key>version</key>
|
||||||
<string>1.0.b8b1f73</string>
|
<string>1.0.66e6919</string>
|
||||||
</map>
|
</map>
|
||||||
<key>llphysicsextensions_stub</key>
|
<key>llphysicsextensions_stub</key>
|
||||||
<map>
|
<map>
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,8 @@ The PBR terrain texture transform flag should be set automatically when logging
|
||||||
|
|
||||||
When the PBR terrain texture transform feature is enabled, the UI of the Terrain tab should be overhauled. Availability of features depends on the type of terrain.
|
When the PBR terrain texture transform feature is enabled, the UI of the Terrain tab should be overhauled. Availability of features depends on the type of terrain.
|
||||||
|
|
||||||
|
**Known issue:** The Region/Estate floater may have to be closed/reopened a second time in order for the UI overhaul to take effect, after teleporting between regions that do and do not have the feature flag set.
|
||||||
|
|
||||||
When "PBR Metallic Roughness" is checked:
|
When "PBR Metallic Roughness" is checked:
|
||||||
|
|
||||||
- There should be a way for the user to change the texture transforms for the terrain in the current region
|
- There should be a way for the user to change the texture transforms for the terrain in the current region
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,9 @@
|
||||||
|
|
||||||
#include "llexception.h"
|
#include "llexception.h"
|
||||||
#include <boost/fiber/fss.hpp>
|
#include <boost/fiber/fss.hpp>
|
||||||
#include <boost/fiber/future/promise.hpp>
|
|
||||||
#include <boost/fiber/future/future.hpp>
|
#include <boost/fiber/future/future.hpp>
|
||||||
|
#include <boost/fiber/future/promise.hpp>
|
||||||
|
#include <boost/fiber/recursive_mutex.hpp>
|
||||||
#include "mutex.h"
|
#include "mutex.h"
|
||||||
#include "llsingleton.h"
|
#include "llsingleton.h"
|
||||||
#include "llinstancetracker.h"
|
#include "llinstancetracker.h"
|
||||||
|
|
@ -307,6 +308,12 @@ public:
|
||||||
|
|
||||||
// use mutex, lock, condition_variable suitable for coroutines
|
// use mutex, lock, condition_variable suitable for coroutines
|
||||||
using Mutex = boost::fibers::mutex;
|
using Mutex = boost::fibers::mutex;
|
||||||
|
using RMutex = boost::fibers::recursive_mutex;
|
||||||
|
// With C++17, LockType is deprecated: at this point we can directly
|
||||||
|
// declare 'std::unique_lock lk(some_mutex)' without explicitly stating
|
||||||
|
// the mutex type. Sadly, making LockType an alias template for
|
||||||
|
// std::unique_lock doesn't work the same way: Class Template Argument
|
||||||
|
// Deduction only works for class templates, not alias templates.
|
||||||
using LockType = std::unique_lock<Mutex>;
|
using LockType = std::unique_lock<Mutex>;
|
||||||
using cv_status = boost::fibers::cv_status;
|
using cv_status = boost::fibers::cv_status;
|
||||||
using ConditionVariable = boost::fibers::condition_variable;
|
using ConditionVariable = boost::fibers::condition_variable;
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,6 @@
|
||||||
#include "llsingleton.h"
|
#include "llsingleton.h"
|
||||||
#include "llstl.h"
|
#include "llstl.h"
|
||||||
#include "lltimer.h"
|
#include "lltimer.h"
|
||||||
#include <boost/fiber/recursive_mutex.hpp>
|
|
||||||
|
|
||||||
// On Mac, got:
|
// On Mac, got:
|
||||||
// #error "Boost.Stacktrace requires `_Unwind_Backtrace` function. Define
|
// #error "Boost.Stacktrace requires `_Unwind_Backtrace` function. Define
|
||||||
|
|
@ -512,7 +511,7 @@ namespace
|
||||||
LLError::TimeFunction mTimeFunction;
|
LLError::TimeFunction mTimeFunction;
|
||||||
|
|
||||||
Recorders mRecorders;
|
Recorders mRecorders;
|
||||||
boost::fibers::recursive_mutex mRecorderMutex;
|
LLCoros::RMutex mRecorderMutex;
|
||||||
|
|
||||||
int mShouldLogCallCounter;
|
int mShouldLogCallCounter;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5511,7 +5511,11 @@ bool LLVolumeFace::cacheOptimize(bool gen_tangents)
|
||||||
|
|
||||||
U32 stream_count = data.w.empty() ? 4 : 5;
|
U32 stream_count = data.w.empty() ? 4 : 5;
|
||||||
|
|
||||||
S32 vert_count = static_cast<S32>(meshopt_generateVertexRemapMulti(&remap[0], nullptr, data.p.size(), data.p.size(), mos, stream_count));
|
S32 vert_count = 0;
|
||||||
|
if (!data.p.empty())
|
||||||
|
{
|
||||||
|
vert_count = static_cast<S32>(meshopt_generateVertexRemapMulti(&remap[0], nullptr, data.p.size(), data.p.size(), mos, stream_count));
|
||||||
|
}
|
||||||
|
|
||||||
if (vert_count < 65535 && vert_count != 0)
|
if (vert_count < 65535 && vert_count != 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1385,7 +1385,7 @@ bool LLWindowWin32::switchContext(bool fullscreen, const LLCoordScreen& size, bo
|
||||||
|
|
||||||
gGLManager.initWGL();
|
gGLManager.initWGL();
|
||||||
|
|
||||||
if (wglChoosePixelFormatARB)
|
if (wglChoosePixelFormatARB && wglGetPixelFormatAttribivARB)
|
||||||
{
|
{
|
||||||
// OK, at this point, use the ARB wglChoosePixelFormatsARB function to see if we
|
// OK, at this point, use the ARB wglChoosePixelFormatsARB function to see if we
|
||||||
// can get exactly what we want.
|
// can get exactly what we want.
|
||||||
|
|
|
||||||
|
|
@ -12830,7 +12830,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
||||||
<key>RenderTerrainPBREnabled</key>
|
<key>RenderTerrainPBREnabled</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
<string>EXPERIMENTAL: Enable PBR Terrain features.</string>
|
<string>Enable PBR Terrain features.</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
|
|
|
||||||
|
|
@ -991,6 +991,12 @@ bool Image::prep(Asset& asset)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!asset.mFilename.empty())
|
||||||
|
{ // local preview, boost image so it doesn't discard and force to save raw image in case we save out or upload
|
||||||
|
mTexture->setBoostLevel(LLViewerTexture::BOOST_PREVIEW);
|
||||||
|
mTexture->forceToSaveRawImage(0, F32_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ struct MikktMesh
|
||||||
|
|
||||||
for (U32 tri_idx = 0; tri_idx < U32(triangle_count); ++tri_idx)
|
for (U32 tri_idx = 0; tri_idx < U32(triangle_count); ++tri_idx)
|
||||||
{
|
{
|
||||||
U32 idx[3];
|
U32 idx[3] = {0, 0, 0};
|
||||||
|
|
||||||
if (prim->mMode == Primitive::Mode::TRIANGLES)
|
if (prim->mMode == Primitive::Mode::TRIANGLES)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,16 @@ void GLTFSceneManager::uploadSelection()
|
||||||
raw = image.mTexture->getRawImage();
|
raw = image.mTexture->getRawImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (raw.isNull())
|
||||||
|
{
|
||||||
|
raw = image.mTexture->getSavedRawImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (raw.isNull())
|
||||||
|
{
|
||||||
|
image.mTexture->readbackRawImage();
|
||||||
|
}
|
||||||
|
|
||||||
if (raw.notNull())
|
if (raw.notNull())
|
||||||
{
|
{
|
||||||
LLPointer<LLImageJ2C> j2c = LLViewerTextureList::convertToUploadFile(raw);
|
LLPointer<LLImageJ2C> j2c = LLViewerTextureList::convertToUploadFile(raw);
|
||||||
|
|
|
||||||
|
|
@ -543,7 +543,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
|
||||||
panel->getChild<LLUICtrl>("block_fly_over_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_BLOCK_FLYOVER));
|
panel->getChild<LLUICtrl>("block_fly_over_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_BLOCK_FLYOVER));
|
||||||
panel->getChild<LLUICtrl>("allow_damage_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_ALLOW_DAMAGE));
|
panel->getChild<LLUICtrl>("allow_damage_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_ALLOW_DAMAGE));
|
||||||
panel->getChild<LLUICtrl>("restrict_pushobject")->setValue(is_flag_set(region_flags, REGION_FLAGS_RESTRICT_PUSHOBJECT));
|
panel->getChild<LLUICtrl>("restrict_pushobject")->setValue(is_flag_set(region_flags, REGION_FLAGS_RESTRICT_PUSHOBJECT));
|
||||||
panel->getChild<LLUICtrl>("allow_land_resell_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_BLOCK_LAND_RESELL));
|
panel->getChild<LLUICtrl>("allow_land_resell_check")->setValue(!is_flag_set(region_flags, REGION_FLAGS_BLOCK_LAND_RESELL));
|
||||||
panel->getChild<LLUICtrl>("allow_parcel_changes_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_ALLOW_PARCEL_CHANGES));
|
panel->getChild<LLUICtrl>("allow_parcel_changes_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_ALLOW_PARCEL_CHANGES));
|
||||||
panel->getChild<LLUICtrl>("block_parcel_search_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_BLOCK_PARCEL_SEARCH));
|
panel->getChild<LLUICtrl>("block_parcel_search_check")->setValue(is_flag_set(region_flags, REGION_FLAGS_BLOCK_PARCEL_SEARCH));
|
||||||
panel->getChild<LLUICtrl>("agent_limit_spin")->setValue(LLSD((F32)agent_limit));
|
panel->getChild<LLUICtrl>("agent_limit_spin")->setValue(LLSD((F32)agent_limit));
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,11 @@ bool LLFloaterSpellCheckerSettings::postBuild(void)
|
||||||
LLSpellChecker::setSettingsChangeCallback(boost::bind(&LLFloaterSpellCheckerSettings::onSpellCheckSettingsChange, this));
|
LLSpellChecker::setSettingsChangeCallback(boost::bind(&LLFloaterSpellCheckerSettings::onSpellCheckSettingsChange, this));
|
||||||
getChild<LLUICtrl>("spellcheck_remove_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnRemove, this));
|
getChild<LLUICtrl>("spellcheck_remove_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnRemove, this));
|
||||||
getChild<LLUICtrl>("spellcheck_import_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnImport, this));
|
getChild<LLUICtrl>("spellcheck_import_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnImport, this));
|
||||||
getChild<LLUICtrl>("spellcheck_main_combo")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::refreshDictionaries, this, false));
|
getChild<LLUICtrl>("spellcheck_main_combo")->setCommitCallback([this](LLUICtrl* ctrl, const LLSD& data)
|
||||||
|
{
|
||||||
|
mMainSelectionChanged = true;
|
||||||
|
refreshDictionaries(false);
|
||||||
|
});
|
||||||
getChild<LLUICtrl>("spellcheck_moveleft_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnMove, this, "spellcheck_active_list", "spellcheck_available_list"));
|
getChild<LLUICtrl>("spellcheck_moveleft_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnMove, this, "spellcheck_active_list", "spellcheck_available_list"));
|
||||||
getChild<LLUICtrl>("spellcheck_moveright_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnMove, this, "spellcheck_available_list", "spellcheck_active_list"));
|
getChild<LLUICtrl>("spellcheck_moveright_btn")->setCommitCallback(boost::bind(&LLFloaterSpellCheckerSettings::onBtnMove, this, "spellcheck_available_list", "spellcheck_active_list"));
|
||||||
center();
|
center();
|
||||||
|
|
@ -129,7 +133,7 @@ void LLFloaterSpellCheckerSettings::onBtnRemove()
|
||||||
|
|
||||||
void LLFloaterSpellCheckerSettings::onSpellCheckSettingsChange()
|
void LLFloaterSpellCheckerSettings::onSpellCheckSettingsChange()
|
||||||
{
|
{
|
||||||
refreshDictionaries(true);
|
refreshDictionaries(!mMainSelectionChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFloaterSpellCheckerSettings::refreshDictionaries(bool from_settings)
|
void LLFloaterSpellCheckerSettings::refreshDictionaries(bool from_settings)
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ protected:
|
||||||
void onSpellCheckSettingsChange();
|
void onSpellCheckSettingsChange();
|
||||||
void refreshDictionaries(bool from_settings);
|
void refreshDictionaries(bool from_settings);
|
||||||
|
|
||||||
|
bool mMainSelectionChanged{ false };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void commitChanges();
|
void commitChanges();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -411,8 +411,10 @@ void notify_of_message(const LLSD& msg, bool is_dnd_msg)
|
||||||
// 4. Toast
|
// 4. Toast
|
||||||
if ((("toast" == user_preferences) &&
|
if ((("toast" == user_preferences) &&
|
||||||
(ON_TOP_AND_ITEM_IS_SELECTED != conversations_floater_status) &&
|
(ON_TOP_AND_ITEM_IS_SELECTED != conversations_floater_status) &&
|
||||||
(!session_floater->isTornOff() || !LLFloater::isVisible(session_floater)))
|
(!session_floater->isTornOff()
|
||||||
|| !session_floater->isMessagePaneExpanded())
|
|| session_floater->isMinimized()
|
||||||
|
|| !LLFloater::isVisible(session_floater)))
|
||||||
|
|| !session_floater->isMessagePaneExpanded())
|
||||||
|
|
||||||
{
|
{
|
||||||
//Show IM toasts (upper right toasts)
|
//Show IM toasts (upper right toasts)
|
||||||
|
|
|
||||||
|
|
@ -304,14 +304,9 @@ LLEditWearableDictionary::Subparts::Subparts()
|
||||||
addEntry(SUBPART_UNDERSHIRT, new SubpartEntry(SUBPART_UNDERSHIRT, "mTorso", "undershirt", "undershirt_main_param_list", "undershirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
|
addEntry(SUBPART_UNDERSHIRT, new SubpartEntry(SUBPART_UNDERSHIRT, "mTorso", "undershirt", "undershirt_main_param_list", "undershirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
|
||||||
addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants", "underpants_main_param_list", "underpants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
|
addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants", "underpants_main_param_list", "underpants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
|
||||||
addEntry(SUBPART_SKIRT, new SubpartEntry(SUBPART_SKIRT, "mPelvis", "skirt", "skirt_main_param_list", "skirt_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
|
addEntry(SUBPART_SKIRT, new SubpartEntry(SUBPART_SKIRT, "mPelvis", "skirt", "skirt_main_param_list", "skirt_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
|
||||||
// <FS:Ansariel> Alpha, tattoo and universal don't adhere to the usual panel layout and don't have a param list and main tab
|
|
||||||
//addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha", "alpha_main_param_list", "alpha_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
|
|
||||||
//addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", "tattoo_main_param_list", "tattoo_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
|
|
||||||
//addEntry(SUBPART_UNIVERSAL, new SubpartEntry(SUBPART_UNIVERSAL, "mPelvis", "universal", "universal_main_param_list", "universal_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f), SEX_BOTH));
|
|
||||||
addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha", "", "", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
|
addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha", "", "", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
|
||||||
addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", "", "", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
|
addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", "", "", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
|
||||||
addEntry(SUBPART_UNIVERSAL, new SubpartEntry(SUBPART_UNIVERSAL, "mPelvis", "universal", "", "", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f), SEX_BOTH));
|
addEntry(SUBPART_UNIVERSAL, new SubpartEntry(SUBPART_UNIVERSAL, "mPelvis", "universal", "", "", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f), SEX_BOTH));
|
||||||
// </FS:Ansariel>
|
|
||||||
|
|
||||||
// WT_PHYSIC
|
// WT_PHYSIC
|
||||||
addEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, "mTorso", "physics_breasts_updown", "physics_breasts_updown_param_list", "physics_breasts_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE));
|
addEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, "mTorso", "physics_breasts_updown", "physics_breasts_updown_param_list", "physics_breasts_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE));
|
||||||
|
|
@ -821,19 +816,12 @@ bool LLPanelEditWearable::postBuild()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string accordion_tab = subpart_entry->mAccordionTab;
|
const std::string& accordion_tab = subpart_entry->mAccordionTab;
|
||||||
|
|
||||||
// <FS:Ansariel> Alpha and tattoo don't adhere to the usual panel layout and don't have a param list and main tab
|
|
||||||
// We can safely skip here as the wearables having no accordion tabs only have one sub-part,
|
|
||||||
// so no camera switch is needed
|
|
||||||
//LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
|
|
||||||
if (accordion_tab.empty())
|
if (accordion_tab.empty())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
LLAccordionCtrlTab *tab = findChild<LLAccordionCtrlTab>(accordion_tab);
|
LLAccordionCtrlTab *tab = findChild<LLAccordionCtrlTab>(accordion_tab);
|
||||||
// </FS:Ansariel>
|
|
||||||
|
|
||||||
if (!tab)
|
if (!tab)
|
||||||
{
|
{
|
||||||
LL_WARNS() << "could not get llaccordionctrltab from UI with name: " << accordion_tab << LL_ENDL;
|
LL_WARNS() << "could not get llaccordionctrltab from UI with name: " << accordion_tab << LL_ENDL;
|
||||||
|
|
@ -1271,20 +1259,16 @@ void LLPanelEditWearable::showWearable(LLViewerWearable* wearable, bool show, bo
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string scrolling_panel = subpart_entry->mParamList;
|
const std::string& scrolling_panel = subpart_entry->mParamList;
|
||||||
const std::string accordion_tab = subpart_entry->mAccordionTab;
|
const std::string& accordion_tab = subpart_entry->mAccordionTab;
|
||||||
|
|
||||||
// <FS:Ansariel> Alpha and tattoo don't adhere to the usual panel layout and don't have a param list and main tab
|
|
||||||
// Since there are no sex-based differences, we can skip here
|
|
||||||
if (scrolling_panel.empty() || accordion_tab.empty())
|
if (scrolling_panel.empty() || accordion_tab.empty())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// </FS:Ansariel>
|
|
||||||
|
|
||||||
LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
|
|
||||||
LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
|
|
||||||
|
|
||||||
|
LLScrollingPanelList *panel_list = findChild<LLScrollingPanelList>(scrolling_panel);
|
||||||
|
LLAccordionCtrlTab *tab = findChild<LLAccordionCtrlTab>(accordion_tab);
|
||||||
if (!panel_list)
|
if (!panel_list)
|
||||||
{
|
{
|
||||||
LL_WARNS() << "could not get scrolling panel list: " << scrolling_panel << LL_ENDL;
|
LL_WARNS() << "could not get scrolling panel list: " << scrolling_panel << LL_ENDL;
|
||||||
|
|
|
||||||
|
|
@ -337,8 +337,8 @@ void LLSetKeyBindDialog::onCancel(void* user_data)
|
||||||
void LLSetKeyBindDialog::onBlank(void* user_data)
|
void LLSetKeyBindDialog::onBlank(void* user_data)
|
||||||
{
|
{
|
||||||
LLSetKeyBindDialog* self = (LLSetKeyBindDialog*)user_data;
|
LLSetKeyBindDialog* self = (LLSetKeyBindDialog*)user_data;
|
||||||
// tmp needs 'no key' button
|
|
||||||
self->setKeyBind(CLICK_NONE, KEY_NONE, MASK_NONE, false);
|
self->setKeyBind(CLICK_NONE, KEY_NONE, MASK_NONE, self->pCheckBox->getValue().asBoolean());
|
||||||
self->closeFloater();
|
self->closeFloater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1683,6 +1683,11 @@ void render_ui_3d()
|
||||||
gObjectList.resetObjectBeacons();
|
gObjectList.resetObjectBeacons();
|
||||||
gSky.addSunMoonBeacons();
|
gSky.addSunMoonBeacons();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Make sure particle effects disappear
|
||||||
|
LLHUDObject::renderAllForTimer();
|
||||||
|
}
|
||||||
|
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3382,16 +3382,24 @@ void LLViewerRegion::unpackRegionHandshake()
|
||||||
compp->setParamsReady();
|
compp->setParamsReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
LLPBRTerrainFeatures::queueQuery(*this, [](LLUUID region_id, bool success, const LLModifyRegion& composition_changes)
|
std::string cap = getCapability("ModifyRegion"); // needed for queueQuery
|
||||||
|
if (cap.empty())
|
||||||
{
|
{
|
||||||
if (!success) { return; }
|
LLFloaterRegionInfo::sRefreshFromRegion(this);
|
||||||
LLViewerRegion* region = LLWorld::getInstance()->getRegionFromID(region_id);
|
}
|
||||||
if (!region) { return; }
|
else
|
||||||
LLVLComposition* compp = region->getComposition();
|
{
|
||||||
if (!compp) { return; }
|
LLPBRTerrainFeatures::queueQuery(*this, [](LLUUID region_id, bool success, const LLModifyRegion& composition_changes)
|
||||||
compp->apply(composition_changes);
|
{
|
||||||
LLFloaterRegionInfo::sRefreshFromRegion(region);
|
if (!success) { return; }
|
||||||
});
|
LLViewerRegion* region = LLWorld::getInstance()->getRegionFromID(region_id);
|
||||||
|
if (!region) { return; }
|
||||||
|
LLVLComposition* compp = region->getComposition();
|
||||||
|
if (!compp) { return; }
|
||||||
|
compp->apply(composition_changes);
|
||||||
|
LLFloaterRegionInfo::sRefreshFromRegion(region);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,31 +63,21 @@
|
||||||
#include "llwindow.h"
|
#include "llwindow.h"
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "llmimetypes.h"
|
|
||||||
|
|
||||||
// extern
|
|
||||||
const S32Megabytes gMinVideoRam(32);
|
|
||||||
// <FS:Ansariel> Texture memory management
|
|
||||||
//const S32Megabytes gMaxVideoRam(512);
|
|
||||||
S32Megabytes gMaxVideoRam(512);
|
|
||||||
// </FS:Ansariel>
|
|
||||||
|
|
||||||
|
|
||||||
// statics
|
// statics
|
||||||
LLPointer<LLViewerTexture> LLViewerTexture::sNullImagep = NULL;
|
LLPointer<LLViewerTexture> LLViewerTexture::sNullImagep = nullptr;
|
||||||
LLPointer<LLViewerTexture> LLViewerTexture::sBlackImagep = NULL;
|
LLPointer<LLViewerTexture> LLViewerTexture::sBlackImagep = nullptr;
|
||||||
LLPointer<LLViewerTexture> LLViewerTexture::sCheckerBoardImagep = NULL;
|
LLPointer<LLViewerTexture> LLViewerTexture::sCheckerBoardImagep = nullptr;
|
||||||
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sMissingAssetImagep = NULL;
|
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sMissingAssetImagep = nullptr;
|
||||||
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sWhiteImagep = NULL;
|
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sWhiteImagep = nullptr;
|
||||||
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultImagep = NULL;
|
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultImagep = nullptr;
|
||||||
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sSmokeImagep = NULL;
|
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sSmokeImagep = nullptr;
|
||||||
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sFlatNormalImagep = NULL;
|
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sFlatNormalImagep = nullptr;
|
||||||
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultIrradiancePBRp;
|
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultIrradiancePBRp;
|
||||||
// [SL:KB] - Patch: Render-TextureToggle (Catznip-4.0)
|
// [SL:KB] - Patch: Render-TextureToggle (Catznip-4.0)
|
||||||
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultDiffuseImagep = NULL;
|
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultDiffuseImagep = NULL;
|
||||||
// [/SL:KB]
|
// [/SL:KB]
|
||||||
LLViewerMediaTexture::media_map_t LLViewerMediaTexture::sMediaMap;
|
LLViewerMediaTexture::media_map_t LLViewerMediaTexture::sMediaMap;
|
||||||
LLTexturePipelineTester* LLViewerTextureManager::sTesterp = NULL;
|
LLTexturePipelineTester* LLViewerTextureManager::sTesterp = nullptr;
|
||||||
F32 LLViewerFetchedTexture::sMaxVirtualSize = 8192.f*8192.f;
|
F32 LLViewerFetchedTexture::sMaxVirtualSize = 8192.f*8192.f;
|
||||||
|
|
||||||
const std::string sTesterName("TextureTester");
|
const std::string sTesterName("TextureTester");
|
||||||
|
|
@ -99,11 +89,11 @@ LLFrameTimer LLViewerTexture::sEvaluationTimer;
|
||||||
F32 LLViewerTexture::sDesiredDiscardBias = 0.f;
|
F32 LLViewerTexture::sDesiredDiscardBias = 0.f;
|
||||||
|
|
||||||
S32 LLViewerTexture::sMaxSculptRez = 128; //max sculpt image size
|
S32 LLViewerTexture::sMaxSculptRez = 128; //max sculpt image size
|
||||||
const S32 MAX_CACHED_RAW_IMAGE_AREA = 64 * 64;
|
constexpr S32 MAX_CACHED_RAW_IMAGE_AREA = 64 * 64;
|
||||||
const S32 MAX_CACHED_RAW_SCULPT_IMAGE_AREA = LLViewerTexture::sMaxSculptRez * LLViewerTexture::sMaxSculptRez;
|
const S32 MAX_CACHED_RAW_SCULPT_IMAGE_AREA = LLViewerTexture::sMaxSculptRez * LLViewerTexture::sMaxSculptRez;
|
||||||
const S32 MAX_CACHED_RAW_TERRAIN_IMAGE_AREA = 128 * 128;
|
constexpr S32 MAX_CACHED_RAW_TERRAIN_IMAGE_AREA = 128 * 128;
|
||||||
const S32 DEFAULT_ICON_DIMENSIONS = 32;
|
constexpr S32 DEFAULT_ICON_DIMENSIONS = 32;
|
||||||
const S32 DEFAULT_THUMBNAIL_DIMENSIONS = 256;
|
constexpr S32 DEFAULT_THUMBNAIL_DIMENSIONS = 256;
|
||||||
U32 LLViewerTexture::sMinLargeImageSize = 65536; //256 * 256.
|
U32 LLViewerTexture::sMinLargeImageSize = 65536; //256 * 256.
|
||||||
U32 LLViewerTexture::sMaxSmallImageSize = MAX_CACHED_RAW_IMAGE_AREA;
|
U32 LLViewerTexture::sMaxSmallImageSize = MAX_CACHED_RAW_IMAGE_AREA;
|
||||||
bool LLViewerTexture::sFreezeImageUpdates = false;
|
bool LLViewerTexture::sFreezeImageUpdates = false;
|
||||||
|
|
|
||||||
|
|
@ -42,12 +42,6 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
extern const S32Megabytes gMinVideoRam;
|
|
||||||
// <FS:Ansariel> Texture memory management
|
|
||||||
//extern const S32Megabytes gMaxVideoRam;
|
|
||||||
extern S32Megabytes gMaxVideoRam;
|
|
||||||
// </FS:Ansariel>
|
|
||||||
|
|
||||||
// <FS:Ansariel> Max texture resolution
|
// <FS:Ansariel> Max texture resolution
|
||||||
extern U32 DESIRED_NORMAL_TEXTURE_SIZE;
|
extern U32 DESIRED_NORMAL_TEXTURE_SIZE;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -939,6 +939,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
||||||
}
|
}
|
||||||
|
|
||||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
|
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
|
||||||
|
bool onFace = false;
|
||||||
for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
|
for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
|
||||||
{
|
{
|
||||||
for (S32 fi = 0; fi < imagep->getNumFaces(i); ++fi)
|
for (S32 fi = 0; fi < imagep->getNumFaces(i); ++fi)
|
||||||
|
|
@ -947,6 +948,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
||||||
|
|
||||||
if (face && face->getViewerObject())
|
if (face && face->getViewerObject())
|
||||||
{
|
{
|
||||||
|
onFace = true;
|
||||||
F32 radius;
|
F32 radius;
|
||||||
F32 cos_angle_to_view_dir;
|
F32 cos_angle_to_view_dir;
|
||||||
bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
|
bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
|
||||||
|
|
@ -1044,7 +1046,8 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
||||||
imagep->getLastReferencedTimer()->reset();
|
imagep->getLastReferencedTimer()->reset();
|
||||||
|
|
||||||
//reset texture state.
|
//reset texture state.
|
||||||
imagep->setInactive();
|
if(!onFace)
|
||||||
|
imagep->setInactive();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -235,8 +235,8 @@ public:
|
||||||
bool mForceResetTextureStats;
|
bool mForceResetTextureStats;
|
||||||
|
|
||||||
// to make "for (auto& imagep : gTextureList)" work
|
// to make "for (auto& imagep : gTextureList)" work
|
||||||
const image_list_t::iterator begin() const { return mImageList.begin(); }
|
const image_list_t::const_iterator begin() const { return mImageList.cbegin(); }
|
||||||
const image_list_t::iterator end() const { return mImageList.end(); }
|
const image_list_t::const_iterator end() const { return mImageList.cend(); }
|
||||||
|
|
||||||
// <FS:Ansariel> Fast cache stats
|
// <FS:Ansariel> Fast cache stats
|
||||||
static U32 sNumFastCacheReads;
|
static U32 sNumFastCacheReads;
|
||||||
|
|
|
||||||
|
|
@ -1024,7 +1024,7 @@ bool LLVOAvatarSelf::isValid() const
|
||||||
// virtual
|
// virtual
|
||||||
void LLVOAvatarSelf::idleUpdate(LLAgent &agent, const F64 &time)
|
void LLVOAvatarSelf::idleUpdate(LLAgent &agent, const F64 &time)
|
||||||
{
|
{
|
||||||
if (isValid())
|
if (isAgentAvatarValid())
|
||||||
{
|
{
|
||||||
LLVOAvatar::idleUpdate(agent, time);
|
LLVOAvatar::idleUpdate(agent, time);
|
||||||
idleUpdateTractorBeam();
|
idleUpdateTractorBeam();
|
||||||
|
|
@ -1771,7 +1771,7 @@ bool LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
|
||||||
// Make sure the inventory is in sync with the avatar.
|
// Make sure the inventory is in sync with the avatar.
|
||||||
|
|
||||||
// Update COF contents, don't trigger appearance update.
|
// Update COF contents, don't trigger appearance update.
|
||||||
if (!isValid())
|
if (!isAgentAvatarValid())
|
||||||
{
|
{
|
||||||
LL_INFOS() << "removeItemLinks skipped, avatar is under destruction" << LL_ENDL;
|
LL_INFOS() << "removeItemLinks skipped, avatar is under destruction" << LL_ENDL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ private:
|
||||||
public:
|
public:
|
||||||
/*virtual*/ bool isSelf() const { return true; }
|
/*virtual*/ bool isSelf() const { return true; }
|
||||||
virtual bool isBuddy() const { return false; }
|
virtual bool isBuddy() const { return false; }
|
||||||
/*virtual*/ bool isValid() const;
|
/*virtual*/ bool isValid() const; // use isAgentAvatarValid, it's fuller
|
||||||
|
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
// Updates
|
// Updates
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue