Merge branch 'DRTVWR-548-maint-N' of https://bitbucket.org/lindenlab/viewer
# Conflicts: # indra/llmath/lloctree.h # indra/llmath/llvolume.cpp # indra/llrender/llgl.cpp # indra/newview/installers/windows/installer_template.nsi # indra/newview/installers/windows/lang_da.nsi # indra/newview/installers/windows/lang_de.nsi # indra/newview/installers/windows/lang_en-us.nsi # indra/newview/installers/windows/lang_es.nsi # indra/newview/installers/windows/lang_fr.nsi # indra/newview/installers/windows/lang_it.nsi # indra/newview/installers/windows/lang_ja.nsi # indra/newview/installers/windows/lang_pl.nsi # indra/newview/installers/windows/lang_pt-br.nsi # indra/newview/installers/windows/lang_ru.nsi # indra/newview/installers/windows/lang_tr.nsi # indra/newview/installers/windows/lang_zh.nsi # indra/newview/lldynamictexture.cpp # indra/newview/llfloaterpreference.cpp # indra/newview/llviewercontrol.cpp # indra/newview/llviewermenu.cpp # indra/newview/llvovolume.cppmaster
commit
6259666be0
|
|
@ -1125,6 +1125,7 @@ Nicky Dasmijn
|
|||
SL-13141
|
||||
SL-13642
|
||||
SL-16438
|
||||
SL-17585
|
||||
Nicky Perian
|
||||
OPEN-1
|
||||
STORM-1087
|
||||
|
|
|
|||
|
|
@ -50,52 +50,59 @@ extern float gOctreeMinSize;
|
|||
#define LL_OCTREE_MAX_CAPACITY 128
|
||||
#endif*/
|
||||
|
||||
template <class T> class LLOctreeNode;
|
||||
// T is the type of the element referenced by the octree node.
|
||||
// T_PTR determines how pointers to elements are stored internally.
|
||||
// LLOctreeNode<T, LLPointer<T>> assumes ownership of inserted elements and
|
||||
// deletes elements removed from the tree.
|
||||
// LLOctreeNode<T, T*> doesn't take ownership of inserted elements, so the API
|
||||
// user is responsible for managing the storage lifecycle of elements added to
|
||||
// the tree.
|
||||
template <class T, typename T_PTR> class LLOctreeNode;
|
||||
|
||||
template <class T>
|
||||
template <class T, typename T_PTR>
|
||||
class LLOctreeListener: public LLTreeListener<T>
|
||||
{
|
||||
public:
|
||||
typedef LLTreeListener<T> BaseType;
|
||||
typedef LLOctreeNode<T> oct_node;
|
||||
typedef LLOctreeNode<T, T_PTR> oct_node;
|
||||
|
||||
virtual void handleChildAddition(const oct_node* parent, oct_node* child) = 0;
|
||||
virtual void handleChildRemoval(const oct_node* parent, const oct_node* child) = 0;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
template <class T, typename T_PTR>
|
||||
class LLOctreeTraveler
|
||||
{
|
||||
public:
|
||||
virtual void traverse(const LLOctreeNode<T>* node);
|
||||
virtual void visit(const LLOctreeNode<T>* branch) = 0;
|
||||
virtual void traverse(const LLOctreeNode<T, T_PTR>* node);
|
||||
virtual void visit(const LLOctreeNode<T, T_PTR>* branch) = 0;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class LLOctreeTravelerDepthFirst : public LLOctreeTraveler<T>
|
||||
template <class T, typename T_PTR>
|
||||
class LLOctreeTravelerDepthFirst : public LLOctreeTraveler<T, T_PTR>
|
||||
{
|
||||
public:
|
||||
virtual void traverse(const LLOctreeNode<T>* node) override;
|
||||
virtual void traverse(const LLOctreeNode<T, T_PTR>* node) override;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
template <class T, typename T_PTR>
|
||||
class alignas(16) LLOctreeNode : public LLTreeNode<T>
|
||||
{
|
||||
LL_ALIGN_NEW
|
||||
public:
|
||||
|
||||
typedef LLOctreeTraveler<T> oct_traveler;
|
||||
typedef LLTreeTraveler<T> tree_traveler;
|
||||
typedef std::vector< LLPointer<T> > element_list; // note: don't remove the whitespace between "> >"
|
||||
typedef LLPointer<T>* element_iter;
|
||||
typedef const LLPointer<T>* const_element_iter;
|
||||
typedef LLOctreeTraveler<T, T_PTR> oct_traveler;
|
||||
typedef LLTreeTraveler<T> tree_traveler;
|
||||
typedef std::vector<T_PTR> element_list;
|
||||
typedef typename element_list::iterator element_iter;
|
||||
typedef typename element_list::const_iterator const_element_iter;
|
||||
typedef typename std::vector<LLTreeListener<T>*>::iterator tree_listener_iter;
|
||||
typedef LLOctreeNode<T>** child_list;
|
||||
typedef LLOctreeNode<T>** child_iter;
|
||||
typedef LLOctreeNode<T, T_PTR>** child_list;
|
||||
typedef LLOctreeNode<T, T_PTR>** child_iter;
|
||||
|
||||
typedef LLTreeNode<T> BaseType;
|
||||
typedef LLOctreeNode<T> oct_node;
|
||||
typedef LLOctreeListener<T> oct_listener;
|
||||
typedef LLTreeNode<T> BaseType;
|
||||
typedef LLOctreeNode<T, T_PTR> oct_node;
|
||||
typedef LLOctreeListener<T, T_PTR> oct_listener;
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
@ -110,9 +117,6 @@ public:
|
|||
mOctant(octant)
|
||||
{
|
||||
llassert(size[0] >= gOctreeMinSize*0.5f);
|
||||
//always keep a NULL terminated list to avoid out of bounds exceptions in debug builds
|
||||
mData.push_back(NULL);
|
||||
mDataEnd = &mData[0];
|
||||
|
||||
mCenter = center;
|
||||
mSize = size;
|
||||
|
|
@ -124,8 +128,6 @@ public:
|
|||
ND_OCTREE_LOG << "set octant to " << (U32)mOctant << " mCenter " << mCenter << " mParent->mCenter " << mParent->mCenter << ND_OCTREE_LOG_END;
|
||||
}
|
||||
|
||||
mElementCount = 0;
|
||||
|
||||
clearChildren();
|
||||
}
|
||||
|
||||
|
|
@ -133,15 +135,14 @@ public:
|
|||
{
|
||||
BaseType::destroyListeners();
|
||||
|
||||
for (U32 i = 0; i < mElementCount; ++i)
|
||||
const U32 element_count = getElementCount();
|
||||
for (U32 i = 0; i < element_count; ++i)
|
||||
{
|
||||
mData[i]->setBinIndex(-1);
|
||||
mData[i] = NULL;
|
||||
}
|
||||
|
||||
mData.clear();
|
||||
mData.push_back(NULL);
|
||||
mDataEnd = &mData[0];
|
||||
|
||||
for (U32 i = 0; i < getChildCount(); i++)
|
||||
{
|
||||
|
|
@ -241,14 +242,12 @@ public:
|
|||
void accept(oct_traveler* visitor) { visitor->visit(this); }
|
||||
virtual bool isLeaf() const { return mChildCount == 0; }
|
||||
|
||||
U32 getElementCount() const { return mElementCount; }
|
||||
bool isEmpty() const { return mElementCount == 0; }
|
||||
element_list& getData() { return mData; }
|
||||
const element_list& getData() const { return mData; }
|
||||
element_iter getDataBegin() { return &mData[0]; }
|
||||
element_iter getDataEnd() { return mDataEnd; }
|
||||
const_element_iter getDataBegin() const { return &mData[0]; }
|
||||
const_element_iter getDataEnd() const { return mDataEnd; }
|
||||
U32 getElementCount() const { return (U32)mData.size(); }
|
||||
bool isEmpty() const { return mData.empty(); }
|
||||
element_iter getDataBegin() { return mData.begin(); }
|
||||
element_iter getDataEnd() { return mData.end(); }
|
||||
const_element_iter getDataBegin() const { return mData.cbegin(); }
|
||||
const_element_iter getDataEnd() const { return mData.cend(); }
|
||||
|
||||
U32 getChildCount() const { return mChildCount; }
|
||||
oct_node* getChild(U32 index) { return mChild[index]; }
|
||||
|
|
@ -266,7 +265,7 @@ public:
|
|||
U8 idx = mChildMap[i];
|
||||
if (idx != NO_CHILD_NODES)
|
||||
{
|
||||
LLOctreeNode<T>* child = mChild[idx];
|
||||
oct_node* child = mChild[idx];
|
||||
|
||||
if (child->getOctant() != i)
|
||||
{
|
||||
|
|
@ -284,7 +283,7 @@ public:
|
|||
|
||||
oct_node* getNodeAt(const LLVector4a& pos, const F32& rad)
|
||||
{
|
||||
LLOctreeNode<T>* node = this;
|
||||
oct_node* node = this;
|
||||
|
||||
if (node->isInside(pos, rad))
|
||||
{
|
||||
|
|
@ -306,7 +305,7 @@ public:
|
|||
}
|
||||
else if (!node->contains(rad) && node->getParent())
|
||||
{ //if we got here, data does not exist in this node
|
||||
return ((LLOctreeNode<T>*) node->getParent())->getNodeAt(pos, rad);
|
||||
return ((oct_node*) node->getParent())->getNodeAt(pos, rad);
|
||||
}
|
||||
|
||||
return node;
|
||||
|
|
@ -321,7 +320,7 @@ public:
|
|||
OCT_ERRS << "!!! INVALID ELEMENT ADDED TO OCTREE BRANCH !!!" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
LLOctreeNode<T>* parent = getOctParent();
|
||||
oct_node* parent = getOctParent();
|
||||
|
||||
ND_OCTREE_LOG << "Inserting data, this->getSize " << this->getSize() << " this->getElementCount() " << this->getElementCount() << " this->getChildCount() " << this->getChildCount() << std::endl
|
||||
<< " this->mMin " << this->mMin << " this->mMax " << this->mMax << std::endl
|
||||
|
|
@ -338,12 +337,8 @@ public:
|
|||
(data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity)))
|
||||
{ //it belongs here
|
||||
ND_OCTREE_LOG << "Inserting data into this" << ND_OCTREE_LOG_END;
|
||||
|
||||
mData.push_back(NULL);
|
||||
mData[mElementCount] = data;
|
||||
mElementCount++;
|
||||
mDataEnd = &mData[mElementCount];
|
||||
data->setBinIndex(mElementCount-1);
|
||||
mData.push_back(data);
|
||||
data->setBinIndex(getElementCount() - 1);
|
||||
BaseType::insert(data);
|
||||
return true;
|
||||
}
|
||||
|
|
@ -376,7 +371,7 @@ public:
|
|||
size.mul(0.5f);
|
||||
|
||||
//push center in direction of data
|
||||
LLOctreeNode<T>::pushCenter(center, size, data);
|
||||
oct_node::pushCenter(center, size, data);
|
||||
|
||||
// handle case where floating point number gets too small
|
||||
LLVector4a val;
|
||||
|
|
@ -394,12 +389,8 @@ public:
|
|||
// </FS:ND>
|
||||
{
|
||||
ND_OCTREE_LOG << "Adding to parent and exit" << ND_OCTREE_LOG_END;
|
||||
|
||||
mData.push_back(NULL);
|
||||
mData[mElementCount] = data;
|
||||
mElementCount++;
|
||||
mDataEnd = &mData[mElementCount];
|
||||
data->setBinIndex(mElementCount-1);
|
||||
mData.push_back(data);
|
||||
data->setBinIndex(getElementCount() - 1);
|
||||
BaseType::insert(data);
|
||||
return true;
|
||||
}
|
||||
|
|
@ -427,7 +418,7 @@ public:
|
|||
|
||||
llassert(size[0] >= gOctreeMinSize*0.5f);
|
||||
//make the new kid
|
||||
child = new LLOctreeNode<T>(center, size, this);
|
||||
child = new oct_node(center, size, this);
|
||||
addChild(child);
|
||||
|
||||
child->insert(data);
|
||||
|
|
@ -462,28 +453,25 @@ public:
|
|||
}
|
||||
|
||||
void _remove(T* data, S32 i)
|
||||
{ //precondition -- mElementCount > 0, idx is in range [0, mElementCount)
|
||||
{ //precondition -- getElementCount() > 0, idx is in range [0, getElementCount())
|
||||
|
||||
mElementCount--;
|
||||
data->setBinIndex(-1);
|
||||
|
||||
if (mElementCount > 0)
|
||||
const U32 new_element_count = getElementCount() - 1;
|
||||
if (new_element_count > 0)
|
||||
{
|
||||
if (mElementCount != i)
|
||||
if (new_element_count != i)
|
||||
{
|
||||
mData[i] = mData[mElementCount]; //might unref data, do not access data after this point
|
||||
mData[i] = mData[new_element_count]; //might unref data, do not access data after this point
|
||||
mData[i]->setBinIndex(i);
|
||||
}
|
||||
|
||||
mData[mElementCount] = NULL;
|
||||
mData[new_element_count] = NULL;
|
||||
mData.pop_back();
|
||||
mDataEnd = &mData[mElementCount];
|
||||
}
|
||||
else
|
||||
{
|
||||
mData.clear();
|
||||
mData.push_back(NULL);
|
||||
mDataEnd = &mData[0];
|
||||
}
|
||||
|
||||
this->notifyRemoval(data);
|
||||
|
|
@ -496,7 +484,7 @@ public:
|
|||
|
||||
S32 i = data->getBinIndex();
|
||||
|
||||
if (i >= 0 && i < mElementCount)
|
||||
if (i >= 0 && i < getElementCount())
|
||||
{
|
||||
if (mData[i] == data)
|
||||
{ //found it
|
||||
|
|
@ -539,7 +527,8 @@ public:
|
|||
|
||||
void removeByAddress(T* data)
|
||||
{
|
||||
for (U32 i = 0; i < mElementCount; ++i)
|
||||
const U32 element_count = getElementCount();
|
||||
for (U32 i = 0; i < element_count; ++i)
|
||||
{
|
||||
if (mData[i] == data)
|
||||
{ //we have data
|
||||
|
|
@ -551,7 +540,7 @@ public:
|
|||
|
||||
for (U32 i = 0; i < getChildCount(); i++)
|
||||
{ //we don't contain data, so pass this guy down
|
||||
LLOctreeNode<T>* child = (LLOctreeNode<T>*) getChild(i);
|
||||
oct_node* child = (oct_node*) getChild(i);
|
||||
child->removeByAddress(data);
|
||||
}
|
||||
}
|
||||
|
|
@ -709,22 +698,20 @@ protected:
|
|||
oct_node* mParent;
|
||||
U8 mOctant;
|
||||
|
||||
LLOctreeNode<T>* mChild[8];
|
||||
oct_node* mChild[8];
|
||||
U8 mChildMap[8];
|
||||
U32 mChildCount;
|
||||
|
||||
element_list mData;
|
||||
element_iter mDataEnd;
|
||||
U32 mElementCount;
|
||||
};
|
||||
|
||||
//just like a regular node, except it might expand on insert and compress on balance
|
||||
template <class T>
|
||||
class LLOctreeRoot : public LLOctreeNode<T>
|
||||
template <class T, typename T_PTR>
|
||||
class LLOctreeRoot : public LLOctreeNode<T, T_PTR>
|
||||
{
|
||||
public:
|
||||
typedef LLOctreeNode<T> BaseType;
|
||||
typedef LLOctreeNode<T> oct_node;
|
||||
typedef LLOctreeNode<T, T_PTR> BaseType;
|
||||
typedef LLOctreeNode<T, T_PTR> oct_node;
|
||||
|
||||
LLOctreeRoot(const LLVector4a& center,
|
||||
const LLVector4a& size,
|
||||
|
|
@ -805,7 +792,7 @@ public:
|
|||
oct_node* node = this->getNodeAt(data);
|
||||
if (node == this)
|
||||
{
|
||||
LLOctreeNode<T>::insert(data);
|
||||
oct_node::insert(data);
|
||||
}
|
||||
else if (node->isInside(data->getPositionGroup()))
|
||||
{
|
||||
|
|
@ -825,13 +812,13 @@ public:
|
|||
LLVector4a center, size;
|
||||
center = this->getCenter();
|
||||
size = this->getSize();
|
||||
LLOctreeNode<T>::pushCenter(center, size, data);
|
||||
oct_node::pushCenter(center, size, data);
|
||||
this->setCenter(center);
|
||||
size.mul(2.f);
|
||||
this->setSize(size);
|
||||
this->updateMinMax();
|
||||
}
|
||||
LLOctreeNode<T>::insert(data);
|
||||
oct_node::insert(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -843,7 +830,7 @@ public:
|
|||
|
||||
//expand this node
|
||||
LLVector4a newcenter(center);
|
||||
LLOctreeNode<T>::pushCenter(newcenter, size, data);
|
||||
oct_node::pushCenter(newcenter, size, data);
|
||||
this->setCenter(newcenter);
|
||||
LLVector4a size2 = size;
|
||||
size2.mul(2.f);
|
||||
|
|
@ -855,11 +842,11 @@ public:
|
|||
llassert(size[0] >= gOctreeMinSize);
|
||||
|
||||
//copy our children to a new branch
|
||||
LLOctreeNode<T>* newnode = new LLOctreeNode<T>(center, size, this);
|
||||
oct_node* newnode = new oct_node(center, size, this);
|
||||
|
||||
for (U32 i = 0; i < this->getChildCount(); i++)
|
||||
{
|
||||
LLOctreeNode<T>* child = this->getChild(i);
|
||||
oct_node* child = this->getChild(i);
|
||||
newnode->addChild(child);
|
||||
}
|
||||
|
||||
|
|
@ -885,8 +872,8 @@ public:
|
|||
//========================
|
||||
// LLOctreeTraveler
|
||||
//========================
|
||||
template <class T>
|
||||
void LLOctreeTraveler<T>::traverse(const LLOctreeNode<T>* node)
|
||||
template <class T, typename T_PTR>
|
||||
void LLOctreeTraveler<T, T_PTR>::traverse(const LLOctreeNode<T, T_PTR>* node)
|
||||
{
|
||||
node->accept(this);
|
||||
for (U32 i = 0; i < node->getChildCount(); i++)
|
||||
|
|
@ -895,8 +882,8 @@ void LLOctreeTraveler<T>::traverse(const LLOctreeNode<T>* node)
|
|||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void LLOctreeTravelerDepthFirst<T>::traverse(const LLOctreeNode<T>* node)
|
||||
template <class T, typename T_PTR>
|
||||
void LLOctreeTravelerDepthFirst<T, T_PTR>::traverse(const LLOctreeNode<T, T_PTR>* node)
|
||||
{
|
||||
for (U32 i = 0; i < node->getChildCount(); i++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -387,7 +387,7 @@ BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, cons
|
|||
}
|
||||
}
|
||||
|
||||
class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst<LLVolumeTriangle>
|
||||
class LLVolumeOctreeRebound : public LLOctreeTravelerDepthFirst<LLVolumeTriangle, LLVolumeTriangle*>
|
||||
{
|
||||
public:
|
||||
const LLVolumeFace* mFace;
|
||||
|
|
@ -397,7 +397,7 @@ public:
|
|||
mFace = face;
|
||||
}
|
||||
|
||||
virtual void visit(const LLOctreeNode<LLVolumeTriangle>* branch)
|
||||
virtual void visit(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* branch)
|
||||
{ //this is a depth first traversal, so it's safe to assum all children have complete
|
||||
//bounding data
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME
|
||||
|
|
@ -415,8 +415,7 @@ public:
|
|||
min = *(tri->mV[0]);
|
||||
max = *(tri->mV[0]);
|
||||
|
||||
for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter =
|
||||
branch->getDataBegin(); iter != branch->getDataEnd(); ++iter)
|
||||
for (LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>::const_element_iter iter = branch->getDataBegin(); iter != branch->getDataEnd(); ++iter)
|
||||
{ //for each triangle in node
|
||||
|
||||
//stretch by triangles in node
|
||||
|
|
@ -1641,9 +1640,6 @@ BOOL LLPath::generate(const LLPathParams& params, F32 detail, S32 split,
|
|||
//genNGon(params, llfloor(MIN_DETAIL_FACES * detail), 4.f, 0.f);
|
||||
genNGon(params, llfloor(MIN_DETAIL_FACES * detail));
|
||||
|
||||
F32 t = 0.f;
|
||||
F32 tStep = 1.0f / mPath.size();
|
||||
|
||||
F32 toggle = 0.5f;
|
||||
for (S32 i=0;i<(S32)mPath.size();i++)
|
||||
{
|
||||
|
|
@ -1652,7 +1648,6 @@ BOOL LLPath::generate(const LLPathParams& params, F32 detail, S32 split,
|
|||
toggle = -0.5f;
|
||||
else
|
||||
toggle = 0.5f;
|
||||
t += tStep;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4947,6 +4942,8 @@ void LLVolumeFace::freeData()
|
|||
|
||||
delete mOctree;
|
||||
mOctree = NULL;
|
||||
mOctreeTriangles.clear();
|
||||
mOctreeTriangles.shrink_to_fit();
|
||||
}
|
||||
|
||||
BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)
|
||||
|
|
@ -4956,6 +4953,8 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)
|
|||
//tree for this face is no longer valid
|
||||
delete mOctree;
|
||||
mOctree = NULL;
|
||||
mOctreeTriangles.clear();
|
||||
mOctreeTriangles.shrink_to_fit();
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
BOOL ret = FALSE ;
|
||||
|
|
@ -5640,13 +5639,18 @@ void LLVolumeFace::createOctree(F32 scaler, const LLVector4a& center, const LLVe
|
|||
}
|
||||
|
||||
ND_OCTREE_LOG << "Creating octree with scale " << scaler << " mNumIndices " << mNumIndices << ND_OCTREE_LOG_END;
|
||||
|
||||
mOctree = new LLOctreeRoot<LLVolumeTriangle>(center, size, NULL);
|
||||
mOctree = new LLOctreeRoot<LLVolumeTriangle, LLVolumeTriangle*>(center, size, NULL);
|
||||
new LLVolumeOctreeListener(mOctree);
|
||||
// Clear old triangles, but keep the underlying storage pointer
|
||||
mOctreeTriangles.clear();
|
||||
const U32 num_triangles = mNumIndices / 3;
|
||||
// Initialize all the triangles we need
|
||||
mOctreeTriangles.resize(num_triangles);
|
||||
|
||||
for (U32 i = 0; i < mNumIndices; i+= 3)
|
||||
{ //for each triangle
|
||||
LLPointer<LLVolumeTriangle> tri = new LLVolumeTriangle();
|
||||
const U32 triangle_index = i / 3;
|
||||
LLVolumeTriangle* tri = &mOctreeTriangles[triangle_index];
|
||||
|
||||
const LLVector4a& v0 = mPositions[mIndices[i]];
|
||||
const LLVector4a& v1 = mPositions[mIndices[i+1]];
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ class LLVolumeParams;
|
|||
class LLProfile;
|
||||
class LLPath;
|
||||
|
||||
template <class T> class LLOctreeNode;
|
||||
template<class T> class LLPointer;
|
||||
template <class T, typename T_PTR> class LLOctreeNode;
|
||||
|
||||
class LLVolumeFace;
|
||||
class LLVolume;
|
||||
|
|
@ -977,7 +978,9 @@ public:
|
|||
// vertices per joint.
|
||||
LLJointRiggingInfoTab mJointRiggingInfoTab;
|
||||
|
||||
LLOctreeNode<LLVolumeTriangle>* mOctree;
|
||||
// This octree stores raw pointer references to triangles in mOctreeTriangles
|
||||
LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* mOctree;
|
||||
std::vector<LLVolumeTriangle> mOctreeTriangles;
|
||||
|
||||
//whether or not face has been cache optimized
|
||||
BOOL mOptimized;
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ BOOL LLLineSegmentBoxIntersect(const LLVector4a& start, const LLVector4a& end, c
|
|||
}
|
||||
|
||||
|
||||
LLVolumeOctreeListener::LLVolumeOctreeListener(LLOctreeNode<LLVolumeTriangle>* node)
|
||||
LLVolumeOctreeListener::LLVolumeOctreeListener(LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* node)
|
||||
{
|
||||
node->addListener(this);
|
||||
}
|
||||
|
|
@ -85,13 +85,12 @@ LLVolumeOctreeListener::~LLVolumeOctreeListener()
|
|||
|
||||
}
|
||||
|
||||
void LLVolumeOctreeListener::handleChildAddition(const LLOctreeNode<LLVolumeTriangle>* parent,
|
||||
LLOctreeNode<LLVolumeTriangle>* child)
|
||||
void LLVolumeOctreeListener::handleChildAddition(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* parent,
|
||||
LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* child)
|
||||
{
|
||||
new LLVolumeOctreeListener(child);
|
||||
}
|
||||
|
||||
|
||||
LLOctreeTriangleRayIntersect::LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir,
|
||||
const LLVolumeFace* face, F32* closest_t,
|
||||
LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
|
||||
|
|
@ -108,7 +107,7 @@ LLOctreeTriangleRayIntersect::LLOctreeTriangleRayIntersect(const LLVector4a& sta
|
|||
mEnd.setAdd(mStart, mDir);
|
||||
}
|
||||
|
||||
void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode<LLVolumeTriangle>* node)
|
||||
void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* node)
|
||||
{
|
||||
LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) node->getListener(0);
|
||||
|
||||
|
|
@ -122,9 +121,9 @@ void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode<LLVolumeTriangle>
|
|||
}
|
||||
}
|
||||
|
||||
void LLOctreeTriangleRayIntersect::visit(const LLOctreeNode<LLVolumeTriangle>* node)
|
||||
void LLOctreeTriangleRayIntersect::visit(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* node)
|
||||
{
|
||||
for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter =
|
||||
for (typename LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>::const_element_iter iter =
|
||||
node->getDataBegin(); iter != node->getDataEnd(); ++iter)
|
||||
{
|
||||
const LLVolumeTriangle* tri = *iter;
|
||||
|
|
@ -219,7 +218,7 @@ const F32& LLVolumeTriangle::getBinRadius() const
|
|||
|
||||
//TEST CODE
|
||||
|
||||
void LLVolumeOctreeValidate::visit(const LLOctreeNode<LLVolumeTriangle>* branch)
|
||||
void LLVolumeOctreeValidate::visit(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* branch)
|
||||
{
|
||||
LLVolumeOctreeListener* node = (LLVolumeOctreeListener*) branch->getListener(0);
|
||||
|
||||
|
|
@ -256,7 +255,7 @@ void LLVolumeOctreeValidate::visit(const LLOctreeNode<LLVolumeTriangle>* branch)
|
|||
}
|
||||
|
||||
//children fit, check data
|
||||
for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getDataBegin();
|
||||
for (typename LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>::const_element_iter iter = branch->getDataBegin();
|
||||
iter != branch->getDataEnd(); ++iter)
|
||||
{
|
||||
const LLVolumeTriangle* tri = *iter;
|
||||
|
|
@ -273,4 +272,3 @@ void LLVolumeOctreeValidate::visit(const LLOctreeNode<LLVolumeTriangle>* branch)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -77,11 +77,11 @@ public:
|
|||
|
||||
};
|
||||
|
||||
class alignas(16) LLVolumeOctreeListener : public LLOctreeListener<LLVolumeTriangle>
|
||||
class alignas(16) LLVolumeOctreeListener : public LLOctreeListener<LLVolumeTriangle, LLVolumeTriangle*>
|
||||
{
|
||||
LL_ALIGN_NEW
|
||||
public:
|
||||
LLVolumeOctreeListener(LLOctreeNode<LLVolumeTriangle>* node);
|
||||
LLVolumeOctreeListener(LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* node);
|
||||
~LLVolumeOctreeListener();
|
||||
|
||||
LLVolumeOctreeListener(const LLVolumeOctreeListener& rhs)
|
||||
|
|
@ -96,11 +96,9 @@ public:
|
|||
}
|
||||
|
||||
//LISTENER FUNCTIONS
|
||||
virtual void handleChildAddition(const LLOctreeNode<LLVolumeTriangle>* parent,
|
||||
LLOctreeNode<LLVolumeTriangle>* child);
|
||||
virtual void handleChildAddition(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* parent, LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* child);
|
||||
virtual void handleStateChange(const LLTreeNode<LLVolumeTriangle>* node) { }
|
||||
virtual void handleChildRemoval(const LLOctreeNode<LLVolumeTriangle>* parent,
|
||||
const LLOctreeNode<LLVolumeTriangle>* child) { }
|
||||
virtual void handleChildRemoval(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* parent, const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* child) { }
|
||||
virtual void handleInsertion(const LLTreeNode<LLVolumeTriangle>* node, LLVolumeTriangle* tri) { }
|
||||
virtual void handleRemoval(const LLTreeNode<LLVolumeTriangle>* node, LLVolumeTriangle* tri) { }
|
||||
virtual void handleDestruction(const LLTreeNode<LLVolumeTriangle>* node) { }
|
||||
|
|
@ -111,7 +109,7 @@ public:
|
|||
LL_ALIGN_16(LLVector4a mExtents[2]); // extents (min, max) of this node and all its children
|
||||
};
|
||||
|
||||
class LLOctreeTriangleRayIntersect : public LLOctreeTraveler<LLVolumeTriangle>
|
||||
class LLOctreeTriangleRayIntersect : public LLOctreeTraveler<LLVolumeTriangle, LLVolumeTriangle*>
|
||||
{
|
||||
public:
|
||||
const LLVolumeFace* mFace;
|
||||
|
|
@ -129,14 +127,14 @@ public:
|
|||
const LLVolumeFace* face, F32* closest_t,
|
||||
LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent);
|
||||
|
||||
void traverse(const LLOctreeNode<LLVolumeTriangle>* node);
|
||||
void traverse(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* node);
|
||||
|
||||
virtual void visit(const LLOctreeNode<LLVolumeTriangle>* node);
|
||||
virtual void visit(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* node);
|
||||
};
|
||||
|
||||
class LLVolumeOctreeValidate : public LLOctreeTraveler<LLVolumeTriangle>
|
||||
class LLVolumeOctreeValidate : public LLOctreeTraveler<LLVolumeTriangle, LLVolumeTriangle*>
|
||||
{
|
||||
virtual void visit(const LLOctreeNode<LLVolumeTriangle>* branch);
|
||||
virtual void visit(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* branch);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -126,13 +126,7 @@ BOOL LLDataPacker::unpackFixed(F32 &value, const char *name,
|
|||
total_bits++;
|
||||
}
|
||||
|
||||
S32 min_val;
|
||||
U32 max_val;
|
||||
if (is_signed)
|
||||
{
|
||||
min_val = 1 << int_bits;
|
||||
min_val *= -1;
|
||||
}
|
||||
max_val = 1 << int_bits;
|
||||
|
||||
F32 fixed_val;
|
||||
|
|
|
|||
|
|
@ -374,7 +374,6 @@ BOOL LLThrottleGroup::dynamicAdjust()
|
|||
}
|
||||
mDynamicAdjustTime = mt_sec;
|
||||
|
||||
S32 total = 0;
|
||||
// Update historical information
|
||||
for (i = 0; i < TC_EOF; i++)
|
||||
{
|
||||
|
|
@ -391,7 +390,6 @@ BOOL LLThrottleGroup::dynamicAdjust()
|
|||
}
|
||||
|
||||
mBitsSentThisPeriod[i] = 0;
|
||||
total += ll_round(mBitsSentHistory[i]);
|
||||
}
|
||||
|
||||
// Look for busy channels
|
||||
|
|
|
|||
|
|
@ -896,8 +896,6 @@ LLSD LLModel::writeModel(
|
|||
|
||||
LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BOOL as_slm)
|
||||
{
|
||||
U32 bytes = 0;
|
||||
|
||||
std::string::size_type cur_offset = 0;
|
||||
|
||||
LLSD header;
|
||||
|
|
@ -919,7 +917,6 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BO
|
|||
header["skin"]["offset"] = (LLSD::Integer) cur_offset;
|
||||
header["skin"]["size"] = (LLSD::Integer) size;
|
||||
cur_offset += size;
|
||||
bytes += size;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -935,7 +932,6 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BO
|
|||
header["physics_convex"]["offset"] = (LLSD::Integer) cur_offset;
|
||||
header["physics_convex"]["size"] = (LLSD::Integer) size;
|
||||
cur_offset += size;
|
||||
bytes += size;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -957,7 +953,6 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BO
|
|||
header[model_names[i]]["offset"] = (LLSD::Integer) cur_offset;
|
||||
header[model_names[i]]["size"] = (LLSD::Integer) size;
|
||||
cur_offset += size;
|
||||
bytes += size;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -750,6 +750,14 @@ bool LLGLManager::initGL()
|
|||
LL_WARNS("RenderInit") << "GL Drivers do not support GL_ARB_multitexture" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!mHasFramebufferObject)
|
||||
{
|
||||
mHasRequirements = FALSE;
|
||||
|
||||
LL_WARNS("RenderInit") << "GL Drivers do not support GL_ARB_framebuffer_object" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
stop_glerror();
|
||||
|
||||
|
|
@ -765,14 +773,6 @@ bool LLGLManager::initGL()
|
|||
|
||||
//HACK always disable texture multisample, use FXAA instead
|
||||
mHasTextureMultisample = FALSE;
|
||||
#if LL_WINDOWS
|
||||
// <FS:CR> FIRE-7603: Revert MAINT-804 because FBO's and shadows appear to be working now!
|
||||
//if (mIsIntel && mGLVersion <= 3.f)
|
||||
//{ //never try to use framebuffer objects on older intel drivers (crashy)
|
||||
// mHasFramebufferObject = FALSE;
|
||||
//}
|
||||
// </FS:CR>
|
||||
#endif
|
||||
|
||||
if (mHasFramebufferObject)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, boo
|
|||
mUsage = usage;
|
||||
mUseDepth = depth;
|
||||
|
||||
if ((sUseFBO || use_fbo) && gGLManager.mHasFramebufferObject)
|
||||
if (sUseFBO || use_fbo)
|
||||
{
|
||||
if (depth)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -671,7 +671,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
|
|||
|
||||
if (file == NULL)
|
||||
{
|
||||
LL_SHADER_LOADING_WARNS() << "GLSL Shader file not found: " << open_file_name << LL_ENDL;
|
||||
LL_WARNS("ShaderLoading") << "GLSL Shader file not found: " << open_file_name << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -462,7 +462,6 @@ void LLLayoutStack::updateLayout()
|
|||
space_to_distribute += panelp ? ll_round((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0;
|
||||
|
||||
S32 remaining_space = space_to_distribute;
|
||||
F32 fraction_distributed = 0.f;
|
||||
if (space_to_distribute > 0 && total_visible_fraction > 0.f)
|
||||
{ // give space proportionally to visible auto resize panels
|
||||
BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
|
||||
|
|
@ -471,7 +470,6 @@ void LLLayoutStack::updateLayout()
|
|||
{
|
||||
F32 fraction_to_distribute = (panelp->mFractionalSize * panelp->getAutoResizeFactor()) / (total_visible_fraction);
|
||||
S32 delta = ll_round((F32)space_to_distribute * fraction_to_distribute);
|
||||
fraction_distributed += fraction_to_distribute;
|
||||
panelp->mTargetDim += delta;
|
||||
remaining_space -= delta;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -630,8 +630,6 @@ void LLWindowMacOSX::getMouseDeltas(float* delta)
|
|||
|
||||
BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL enable_vsync)
|
||||
{
|
||||
BOOL glNeedsInit = FALSE;
|
||||
|
||||
mFullscreen = fullscreen;
|
||||
|
||||
if (mWindow == NULL)
|
||||
|
|
@ -646,9 +644,6 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
|
|||
mGLView = createOpenGLView(mWindow, mFSAASamples, enable_vsync);
|
||||
mContext = getCGLContextObj(mGLView);
|
||||
|
||||
// Since we just created the context, it needs to be set up.
|
||||
glNeedsInit = TRUE;
|
||||
|
||||
gGLManager.mVRAM = getVramSize(mGLView);
|
||||
}
|
||||
|
||||
|
|
@ -1761,9 +1756,7 @@ void LLSplashScreenMacOSX::updateImpl(const std::string& mesg)
|
|||
#if 0 // [FS:CR] This isn't used for anything at all...
|
||||
if(mWindow != NULL)
|
||||
{
|
||||
CFStringRef string = NULL;
|
||||
|
||||
string = CFStringCreateWithCString(NULL, mesg.c_str(), kCFStringEncodingUTF8);
|
||||
CFStringCreateWithCString(NULL, mesg.c_str(), kCFStringEncodingUTF8);
|
||||
}
|
||||
#endif // [FS:CR]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -385,11 +385,29 @@ DeleteRegValue HKEY_CLASSES_ROOT "Applications\$VIEWER_EXE" "IsHostApp"
|
|||
DeleteRegValue HKEY_CLASSES_ROOT "Applications\$VIEWER_EXE" "NoStartPage"
|
||||
ClearErrors
|
||||
|
||||
INSTALL_FILES_START:
|
||||
|
||||
Call RemoveProgFilesOnInst # Remove existing files to prevent certain errors when running the new version of the viewer
|
||||
|
||||
# This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
|
||||
%%INSTALL_FILES%%
|
||||
|
||||
IfErrors 0 INSTALL_FILES_DONE
|
||||
StrCmp $SKIP_DIALOGS "true" INSTALL_FILES_DONE
|
||||
MessageBox MB_ABORTRETRYIGNORE $(ErrorSecondLifeInstallRetry) IDABORT INSTALL_FILES_CANCEL IDRETRY INSTALL_FILES_START
|
||||
# MB_ABORTRETRYIGNORE does not accept IDIGNORE
|
||||
Goto INSTALL_FILES_DONE
|
||||
|
||||
INSTALL_FILES_CANCEL:
|
||||
# We are quiting, cleanup.
|
||||
# Silence warnings from RemoveProgFilesOnInst.
|
||||
StrCpy $SKIP_DIALOGS "true"
|
||||
Call RemoveProgFilesOnInst
|
||||
MessageBox MB_OK $(ErrorSecondLifeInstallSupport)
|
||||
Quit
|
||||
|
||||
INSTALL_FILES_DONE:
|
||||
|
||||
# Pass the installer's language to the client to use as a default
|
||||
StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
|
||||
|
||||
|
|
@ -721,7 +739,9 @@ Function RemoveProgFilesOnInst
|
|||
Push $0
|
||||
StrCpy $0 0
|
||||
|
||||
PREINSTALLREMOVE:
|
||||
ClearErrors
|
||||
|
||||
PREINSTALL_REMOVE:
|
||||
|
||||
# Remove old SecondLife.exe to invalidate any old shortcuts to it that may be in non-standard locations. See MAINT-3575
|
||||
# <FS:Ansariel> Remove VMP
|
||||
|
|
@ -742,17 +762,17 @@ RMDir /r "$INSTDIR\llplugin"
|
|||
|
||||
IntOp $0 $0 + 1
|
||||
|
||||
IfErrors 0 PREINSTALLDONE
|
||||
IntCmp $0 1 PREINSTALLREMOVE #try again once
|
||||
StrCmp $SKIP_DIALOGS "true" PREINSTALLDONE
|
||||
MessageBox MB_ABORTRETRYIGNORE $(CloseSecondLifeInstRM) IDABORT PREINSTALLFAIL IDRETRY PREINSTALLREMOVE
|
||||
IfErrors 0 PREINSTALL_DONE
|
||||
IntCmp $0 1 PREINSTALL_REMOVE #try again once
|
||||
StrCmp $SKIP_DIALOGS "true" PREINSTALL_DONE
|
||||
MessageBox MB_ABORTRETRYIGNORE $(CloseSecondLifeInstRM) IDABORT PREINSTALL_FAIL IDRETRY PREINSTALL_REMOVE
|
||||
# MB_ABORTRETRYIGNORE does not accept IDIGNORE
|
||||
Goto PREINSTALLDONE
|
||||
Goto PREINSTALL_DONE
|
||||
|
||||
PREINSTALLFAIL:
|
||||
PREINSTALL_FAIL:
|
||||
Quit
|
||||
|
||||
PREINSTALLDONE:
|
||||
PREINSTALL_DONE:
|
||||
|
||||
# We are no longer including release notes with the viewer, so remove them.
|
||||
;Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -70,6 +70,10 @@ LangString CloseSecondLifeUnInstMB ${LANG_GERMAN} "Firestorm kann nicht entfernt
|
|||
; CheckNetworkConnection
|
||||
LangString CheckNetworkConnectionDP ${LANG_GERMAN} "Prüfe Netzwerkverbindung..."
|
||||
|
||||
; error during installation
|
||||
LangString ErrorSecondLifeInstallRetry ${LANG_GERMAN} "Firestorm konnte nicht korrekt installiert werden, einige Dateien wurden eventuell nicht korrekt von der Installationroutine kopiert."
|
||||
LangString ErrorSecondLifeInstallSupport ${LANG_GERMAN} "Bitte laden Sie den Viewer erneut von https://www.firestormviewer.org/downloads/ und versuchen Sie die Installation erneut. Sollte das Problem weiterhin bestehen, dann kontaktieren Sie unseren Support unter https://www.firestormviewer.org/support/."
|
||||
|
||||
; ask to remove user's data files
|
||||
LangString RemoveDataFilesMB ${LANG_GERMAN} "Einstellungs- und Cache-Dateien in Dokumente und Einstellungen löschen?"
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -2922,10 +2922,24 @@ bool LLAppViewer::initConfiguration()
|
|||
//Load settings files list
|
||||
std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
|
||||
LLXMLNodePtr root;
|
||||
BOOL success = LLXMLNode::parseFile(settings_file_list, root, NULL);
|
||||
BOOL success = LLXMLNode::parseFile(settings_file_list, root, NULL);
|
||||
if (!success)
|
||||
{
|
||||
LL_ERRS() << "Cannot load default configuration file " << settings_file_list << LL_ENDL;
|
||||
LL_WARNS() << "Cannot load default configuration file " << settings_file_list << LL_ENDL;
|
||||
if (gDirUtilp->fileExists(settings_file_list))
|
||||
{
|
||||
LL_ERRS() << "Cannot load default configuration file settings_files.xml. "
|
||||
<< "Please reinstall viewer from https://secondlife.com/support/downloads/ "
|
||||
<< "and contact https://support.secondlife.com if issue persists after reinstall."
|
||||
<< LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "Default configuration file settings_files.xml not found. "
|
||||
<< "Please reinstall viewer from https://secondlife.com/support/downloads/ "
|
||||
<< "and contact https://support.secondlife.com if issue persists after reinstall."
|
||||
<< LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
mSettingsLocationList = new SettingsFiles();
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth)
|
|||
// </FS:Beq>
|
||||
}
|
||||
|
||||
if (gGLManager.mHasFramebufferObject && gPipeline.mBake.isComplete())
|
||||
if (gPipeline.mBake.isComplete())
|
||||
{ //using offscreen render target, just use the bottom left corner
|
||||
mOrigin.set(0, 0);
|
||||
}
|
||||
|
|
@ -216,7 +216,7 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mBake.isComplete();
|
||||
bool use_fbo = gPipeline.mBake.isComplete();
|
||||
|
||||
if (use_fbo)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -528,20 +528,6 @@ void LLFastTimerView::exportCharts(const std::string& base, const std::string& t
|
|||
is.close();
|
||||
}
|
||||
|
||||
//get time domain
|
||||
LLSD::Real cur_total_time = 0.0;
|
||||
|
||||
for (U32 i = 0; i < cur_data.size(); ++i)
|
||||
{
|
||||
cur_total_time += cur_data[i]["Total"]["Time"].asReal();
|
||||
}
|
||||
|
||||
LLSD::Real base_total_time = 0.0;
|
||||
for (U32 i = 0; i < base_data.size(); ++i)
|
||||
{
|
||||
base_total_time += base_data[i]["Total"]["Time"].asReal();
|
||||
}
|
||||
|
||||
//allocate raw scratch space
|
||||
LLPointer<LLImageRaw> scratch = new LLImageRaw(1024, 512, 3);
|
||||
|
||||
|
|
|
|||
|
|
@ -2107,7 +2107,6 @@ void LLFloaterPreference::refreshEnabledState()
|
|||
//BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
// bumpshiny &&
|
||||
// shaders &&
|
||||
// gGLManager.mHasFramebufferObject &&
|
||||
// (ctrl_wind_light->get()) ? TRUE : FALSE;
|
||||
|
||||
//ctrl_deferred->setEnabled(enabled);
|
||||
|
|
@ -2221,7 +2220,6 @@ void LLFloaterPreference::refreshEnabledState()
|
|||
|
||||
BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
((bumpshiny_ctrl && bumpshiny_ctrl->get()) ? TRUE : FALSE) &&
|
||||
gGLManager.mHasFramebufferObject &&
|
||||
(ctrl_wind_light->get()) ? TRUE : FALSE;
|
||||
|
||||
ctrl_deferred->setEnabled(enabled);
|
||||
|
|
@ -2360,8 +2358,7 @@ void LLFloaterPreference::disableUnavailableSettings()
|
|||
}
|
||||
|
||||
// disabled deferred
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") ||
|
||||
!gGLManager.mHasFramebufferObject)
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred"))
|
||||
{
|
||||
ctrl_shadows->setEnabled(FALSE);
|
||||
ctrl_shadows->setValue(0);
|
||||
|
|
|
|||
|
|
@ -3419,7 +3419,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32
|
|||
gInventory.accountForUpdate(update);
|
||||
}
|
||||
|
||||
U32 changes = 0x0;
|
||||
if (account)
|
||||
{
|
||||
mask |= LLInventoryObserver::CREATE;
|
||||
|
|
@ -3427,7 +3426,7 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32
|
|||
//as above, this loop never seems to loop more than once per call
|
||||
for (item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
||||
{
|
||||
changes |= gInventory.updateItem(*it, mask);
|
||||
gInventory.updateItem(*it, mask);
|
||||
}
|
||||
gInventory.notifyObservers();
|
||||
gViewerWindow->getWindow()->decBusyCount();
|
||||
|
|
@ -5199,12 +5198,10 @@ void LLInventoryModel::FetchItemHttpHandler::processData(LLSD & content, LLCore:
|
|||
}
|
||||
|
||||
// as above, this loop never seems to loop more than once per call
|
||||
U32 changes(0U);
|
||||
for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
|
||||
{
|
||||
changes |= gInventory.updateItem(*it);
|
||||
gInventory.updateItem(*it);
|
||||
}
|
||||
// *HUH: Have computed 'changes', nothing uses it.
|
||||
|
||||
gInventory.notifyObservers();
|
||||
gViewerWindow->getWindow()->decBusyCount();
|
||||
|
|
|
|||
|
|
@ -386,7 +386,6 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)
|
|||
return;
|
||||
}
|
||||
|
||||
const BOOL hide_clip_plane = TRUE;
|
||||
LLColor4 target_fog(0.f, 0.2f, 0.5f, 0.f);
|
||||
|
||||
const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
|
||||
|
|
@ -472,33 +471,17 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)
|
|||
|
||||
render_fog_color = sky_fog_color;
|
||||
|
||||
F32 fog_density = 0.f;
|
||||
fog_distance = mFogRatio * distance;
|
||||
|
||||
if (camera_height > water_height)
|
||||
{
|
||||
LLColor4 fog(render_fog_color);
|
||||
mGLFogCol = fog;
|
||||
|
||||
if (hide_clip_plane)
|
||||
{
|
||||
// For now, set the density to extend to the cull distance.
|
||||
const F32 f_log = 2.14596602628934723963618357029f; // sqrt(fabs(log(0.01f)))
|
||||
fog_density = f_log/fog_distance;
|
||||
}
|
||||
else
|
||||
{
|
||||
const F32 f_log = 4.6051701859880913680359829093687f; // fabs(log(0.01f))
|
||||
fog_density = (f_log)/fog_distance;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LLSettingsWater::ptr_t pwater = LLEnvironment::instance().getCurrentWater();
|
||||
F32 depth = water_height - camera_height;
|
||||
|
||||
// get the water param manager variables
|
||||
float water_fog_density = pwater->getModifiedWaterFogDensity(depth <= 0.0f);
|
||||
|
||||
LLColor4 water_fog_color(pwater->getWaterFogColor());
|
||||
|
||||
|
|
@ -512,9 +495,6 @@ void LLAtmospherics::updateFog(const F32 distance, const LLVector3& tosun_in)
|
|||
|
||||
// set the gl fog color
|
||||
mGLFogCol = fogCol;
|
||||
|
||||
// set the density based on what the shaders use
|
||||
fog_density = water_fog_density * gSavedSettings.getF32("WaterGLFogDensityScale");
|
||||
}
|
||||
|
||||
mFogColor = sky_fog_color;
|
||||
|
|
|
|||
|
|
@ -2178,17 +2178,6 @@ EMeshProcessingResult LLMeshRepoThread::physicsShapeReceived(const LLUUID& mesh_
|
|||
// if (volume->unpackVolumeFaces(stream, data_size))
|
||||
if (volume->unpackVolumeFaces(data, data_size))
|
||||
{
|
||||
//load volume faces into decomposition buffer
|
||||
S32 vertex_count = 0;
|
||||
S32 index_count = 0;
|
||||
|
||||
for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i)
|
||||
{
|
||||
const LLVolumeFace& face = volume->getVolumeFace(i);
|
||||
vertex_count += face.mNumVertices;
|
||||
index_count += face.mNumIndices;
|
||||
}
|
||||
|
||||
d->mPhysicsShapeMesh.clear();
|
||||
|
||||
std::vector<LLVector3>& pos = d->mPhysicsShapeMesh.mPositions;
|
||||
|
|
|
|||
|
|
@ -3072,8 +3072,6 @@ void LLModelPreview::clearBuffers()
|
|||
|
||||
void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
|
||||
{
|
||||
U32 tri_count = 0;
|
||||
U32 vertex_count = 0;
|
||||
U32 mesh_count = 0;
|
||||
|
||||
|
||||
|
|
@ -3213,10 +3211,7 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
|
|||
|
||||
mVertexBuffer[lod][mdl].push_back(vb);
|
||||
|
||||
vertex_count += num_vertices;
|
||||
tri_count += num_indices / 3;
|
||||
++mesh_count;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,11 +69,9 @@ void LLPatchVertexArray::create(U32 surface_width, U32 patch_width, F32 meters_p
|
|||
// (The -1 is there because an LLSurface has a buffer of 1 on
|
||||
// its East and North edges).
|
||||
U32 power_of_two = 1;
|
||||
U32 surface_order = 0;
|
||||
while (power_of_two < (surface_width-1))
|
||||
{
|
||||
power_of_two *= 2;
|
||||
surface_order += 1;
|
||||
}
|
||||
// <FS:CR> FIRE-8063 - Aurora non power of two regions
|
||||
//if (power_of_two == (surface_width-1))
|
||||
|
|
|
|||
|
|
@ -389,7 +389,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
|
|||
else
|
||||
{
|
||||
ECameraPreset new_camera_preset = (ECameraPreset)gSavedSettings.getU32("CameraPresetType");
|
||||
bool new_camera_offsets = false;
|
||||
if (IS_CAMERA)
|
||||
{
|
||||
if (isDefaultCameraPreset(name))
|
||||
|
|
@ -411,7 +410,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
|
|||
{
|
||||
new_camera_preset = CAMERA_PRESET_CUSTOM;
|
||||
}
|
||||
new_camera_offsets = (!isDefaultCameraPreset(name) || (ECameraPreset)gSavedSettings.getU32("CameraPresetType") != new_camera_preset);
|
||||
}
|
||||
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -271,14 +271,11 @@ void LLSceneView::draw()
|
|||
|
||||
U32 count = triangles[idx].size();
|
||||
|
||||
U32 total = 0;
|
||||
|
||||
gGL.begin(LLRender::LINE_STRIP);
|
||||
//plot triangles
|
||||
for (U32 i = 0; i < count; ++i)
|
||||
{
|
||||
U32 tri_count = triangles[idx][i];
|
||||
total += tri_count;
|
||||
F32 y = (F32) (tri_count-tri_domain[0])/triangle_range*tri_rect.getHeight()+tri_rect.mBottom;
|
||||
F32 x = (F32) i / count * tri_rect.getWidth() + tri_rect.mLeft;
|
||||
|
||||
|
|
@ -295,15 +292,8 @@ void LLSceneView::draw()
|
|||
gGL.end();
|
||||
gGL.flush();
|
||||
|
||||
U32 total_visible = 0;
|
||||
count = visible_triangles[idx].size();
|
||||
|
||||
for (U32 i = 0; i < count; ++i)
|
||||
{
|
||||
U32 tri_count = visible_triangles[idx][i];
|
||||
total_visible += tri_count;
|
||||
}
|
||||
|
||||
std::string label = llformat("%s Object Triangle Counts (Ktris) -- Visible: %.2f/%.2f (%.2f KB Visible)",
|
||||
category[idx], total_visible_triangles[idx]/1024.f, total_triangles[idx]/1024.f, total_visible_bytes[idx]/1024.f);
|
||||
|
||||
|
|
|
|||
|
|
@ -3148,7 +3148,7 @@ public:
|
|||
|
||||
}
|
||||
|
||||
void visit(const LLOctreeNode<LLVolumeTriangle>* branch)
|
||||
void visit(const LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>* branch)
|
||||
{
|
||||
LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) branch->getListener(0);
|
||||
|
||||
|
|
@ -3190,7 +3190,7 @@ public:
|
|||
}
|
||||
|
||||
gGL.begin(LLRender::TRIANGLES);
|
||||
for (LLOctreeNode<LLVolumeTriangle>::const_element_iter iter = branch->getDataBegin();
|
||||
for (LLOctreeNode<LLVolumeTriangle, LLVolumeTriangle*>::const_element_iter iter = branch->getDataBegin();
|
||||
iter != branch->getDataEnd();
|
||||
++iter)
|
||||
{
|
||||
|
|
@ -3913,9 +3913,9 @@ BOOL LLSpatialPartition::isVisible(const LLVector3& v)
|
|||
// <FS:ND> Class to watch for any octree changes while iterating. Will catch child insertion/removal as well as data insertion/removal.
|
||||
// Template so it can be used for than LLOctreeNode< LLDrawable > if needed
|
||||
|
||||
template< typename T > class ndOctreeListener: public LLOctreeListener< T >
|
||||
template< typename T, typename T_PTR > class ndOctreeListener: public LLOctreeListener< T, T_PTR >
|
||||
{
|
||||
typedef LLOctreeNode< T > tNode;
|
||||
typedef LLOctreeNode< T, T_PTR > tNode;
|
||||
typedef std::vector< LLPointer< LLTreeListener< T > > > tListener;
|
||||
|
||||
tNode *mNode;
|
||||
|
|
@ -3987,13 +3987,13 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
typedef ndOctreeListener< LLViewerOctreeEntry > ndDrawableOctreeListener;
|
||||
typedef ndOctreeListener< LLViewerOctreeEntry, LLPointer<LLViewerOctreeEntry> > ndDrawableOctreeListener;
|
||||
typedef LLPointer< ndDrawableOctreeListener > ndDrawableOctreeListenerPtr;
|
||||
|
||||
// </FS:ND>
|
||||
|
||||
LL_ALIGN_PREFIX(16)
|
||||
class LLOctreeIntersect : public LLOctreeTraveler<LLViewerOctreeEntry>
|
||||
class LLOctreeIntersect : public LLOctreeTraveler<LLViewerOctreeEntry, LLPointer<LLViewerOctreeEntry>>
|
||||
{
|
||||
public:
|
||||
LL_ALIGN_16(LLVector4a mStart);
|
||||
|
|
|
|||
|
|
@ -1136,272 +1136,304 @@ void handleFPSTuningStrategyChanged(const LLSD& newValue)
|
|||
const auto newval = gSavedSettings.getU32("FSTuningFPSStrategy");
|
||||
FSPerfStats::tunables.userFPSTuningStrategy = newval;
|
||||
}
|
||||
|
||||
// </FS:Beq>
|
||||
|
||||
// <FS:Ansariel> FIRE-6809: Quickly moving the bandwidth slider has no effect
|
||||
void handleBandwidthChanged(const LLSD& newValue)
|
||||
{
|
||||
sBandwidthUpdater.update(newValue);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLPointer<LLControlVariable> setting_get_control(LLControlGroup& group, const std::string& setting)
|
||||
{
|
||||
LLPointer<LLControlVariable> cntrl_ptr = group.getControl(setting);
|
||||
if (cntrl_ptr.isNull())
|
||||
{
|
||||
LL_ERRS() << "Unable to set up setting listener for " << setting
|
||||
<< ". Please reinstall viewer from https ://secondlife.com/support/downloads/ and contact https://support.secondlife.com if issue persists after reinstall."
|
||||
<< LL_ENDL;
|
||||
}
|
||||
return cntrl_ptr;
|
||||
}
|
||||
|
||||
void setting_setup_signal_listener(LLControlGroup& group, const std::string& setting, std::function<void(const LLSD& newvalue)> callback)
|
||||
{
|
||||
setting_get_control(group, setting)->getSignal()->connect([callback](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val)
|
||||
{
|
||||
callback(new_val);
|
||||
});
|
||||
}
|
||||
|
||||
void setting_setup_signal_listener(LLControlGroup& group, const std::string& setting, std::function<void()> callback)
|
||||
{
|
||||
setting_get_control(group, setting)->getSignal()->connect([callback](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val)
|
||||
{
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
void settings_setup_listeners()
|
||||
{
|
||||
gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _2));
|
||||
gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _2));
|
||||
gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _2));
|
||||
gSavedSettings.getControl("OctreeStaticObjectSizeFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2));
|
||||
gSavedSettings.getControl("OctreeDistanceFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2));
|
||||
gSavedSettings.getControl("OctreeMaxNodeCapacity")->getSignal()->connect(boost::bind(&handleRepartition, _2));
|
||||
gSavedSettings.getControl("OctreeAlphaDistanceFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2));
|
||||
gSavedSettings.getControl("OctreeAttachmentSizeFactor")->getSignal()->connect(boost::bind(&handleRepartition, _2));
|
||||
gSavedSettings.getControl("RenderMaxTextureIndex")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderUseTriStrips")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderUIBuffer")->getSignal()->connect(boost::bind(&handleWindowResized, _2));
|
||||
gSavedSettings.getControl("RenderDepthOfField")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderFSAASamples")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularResX")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularResY")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderSpecularExponent")->getSignal()->connect(boost::bind(&handleLUTBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderAnisotropic")->getSignal()->connect(boost::bind(&handleAnisotropicChanged, _2));
|
||||
gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleShadowsResized, _2));
|
||||
gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _2));
|
||||
gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _2));
|
||||
gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _2));
|
||||
gSavedSettings.getControl("RenderDynamicLOD")->getSignal()->connect(boost::bind(&handleRenderDynamicLODChanged, _2));
|
||||
gSavedSettings.getControl("RenderLocalLights")->getSignal()->connect(boost::bind(&handleRenderLocalLightsChanged, _2));
|
||||
gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderAutoMaskAlphaDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderAutoMaskAlphaNonDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));
|
||||
gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderVSyncEnable")->getSignal()->connect(boost::bind(&handleVSyncChanged, _2));
|
||||
gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
|
||||
gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));
|
||||
gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));
|
||||
gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FirstPersonAvatarVisible", handleRenderAvatarMouselookChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderFarClip", handleRenderFarClipChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderTerrainDetail", handleTerrainDetailChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "OctreeStaticObjectSizeFactor", handleRepartition);
|
||||
setting_setup_signal_listener(gSavedSettings, "OctreeDistanceFactor", handleRepartition);
|
||||
setting_setup_signal_listener(gSavedSettings, "OctreeMaxNodeCapacity", handleRepartition);
|
||||
setting_setup_signal_listener(gSavedSettings, "OctreeAlphaDistanceFactor", handleRepartition);
|
||||
setting_setup_signal_listener(gSavedSettings, "OctreeAttachmentSizeFactor", handleRepartition);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderMaxTextureIndex", handleSetShaderChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderUseTriStrips", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderUIBuffer", handleWindowResized);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDepthOfField", handleReleaseGLBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderFSAASamples", handleReleaseGLBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderSpecularResX", handleLUTBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderSpecularResY", handleLUTBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderSpecularExponent", handleLUTBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderAnisotropic", handleAnisotropicChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderShadowResolutionScale", handleShadowsResized);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderGlow", handleReleaseGLBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderGlow", handleSetShaderChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderGlowResolutionPow", handleReleaseGLBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderAvatarCloth", handleSetShaderChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "WindLightUseAtmosShaders", handleSetShaderChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderGammaFull", handleSetShaderChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderVolumeLODFactor", handleVolumeLODChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderAvatarLODFactor", handleAvatarLODChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderAvatarPhysicsLODFactor", handleAvatarPhysicsLODChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderTerrainLODFactor", handleTerrainLODChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderTreeLODFactor", handleTreeLODChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderFlexTimeFactor", handleFlexLODChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderGamma", handleGammaChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderFogRatio", handleFogRatioChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderMaxPartCount", handleMaxPartCountChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDynamicLOD", handleRenderDynamicLODChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderLocalLights", handleRenderLocalLightsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDebugTextureBind", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderAutoMaskAlphaDeferred", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderAutoMaskAlphaNonDeferred", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderObjectBump", handleRenderBumpChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderMaxVBOSize", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderVSyncEnable", handleVSyncChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDeferredNoise", handleReleaseGLBufferChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDebugGL", handleRenderDebugGLChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDebugPipeline", handleRenderDebugPipelineChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderResolutionDivisor", handleRenderResolutionDivisorChanged);
|
||||
// [SL:KB] - Patch: Settings-RenderResolutionMultiplier | Checked: Catznip-5.4
|
||||
gSavedSettings.getControl("RenderResolutionMultiplier")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderResolutionMultiplier", handleRenderResolutionDivisorChanged);
|
||||
// [/SL:KB]
|
||||
gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2));
|
||||
gSavedSettings.getControl("RenderShadowDetail")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderDeferredSSAO")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));
|
||||
gSavedSettings.getControl("RenderPerformanceTest")->getSignal()->connect(boost::bind(&handleRenderPerfTestChanged, _2));
|
||||
gSavedSettings.getControl("RenderHiDPI")->getSignal()->connect(boost::bind(&handleRenderHiDPIChanged, _2));
|
||||
gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _2));
|
||||
gSavedSettings.getControl("ChatConsoleFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _2));
|
||||
gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _2));
|
||||
gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _2));
|
||||
gSavedSettings.getControl("UploadBakedTexOld")->getSignal()->connect(boost::bind(&handleUploadBakedTexOldChanged, _2));
|
||||
gSavedSettings.getControl("UseOcclusion")->getSignal()->connect(boost::bind(&handleUseOcclusionChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelMaster")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelSFX")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelUnderwaterRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
|
||||
gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderUseVAO")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderVBOMappingDisable")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderUseStreamVBO")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderPreferStreamDraw")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisScale6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("FlycamAxisDeadZone6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("AvatarAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("BuildAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("DebugViews")->getSignal()->connect(boost::bind(&handleDebugViewsChanged, _2));
|
||||
gSavedSettings.getControl("UserLogFile")->getSignal()->connect(boost::bind(&handleLogFileChanged, _2));
|
||||
gSavedSettings.getControl("RenderHideGroupTitle")->getSignal()->connect(boost::bind(handleHideGroupTitleChanged, _2));
|
||||
gSavedSettings.getControl("HighResSnapshot")->getSignal()->connect(boost::bind(handleHighResSnapshotChanged, _2));
|
||||
gSavedSettings.getControl("EnableVoiceChat")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("PTTCurrentlyEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("PushToTalkButton")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("PushToTalkToggle")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("VoiceEarLocation")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("AudioLevelMic")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _2));
|
||||
gSavedSettings.getControl("VelocityInterpolate")->getSignal()->connect(boost::bind(&handleVelocityInterpolate, _2));
|
||||
gSavedSettings.getControl("QAMode")->getSignal()->connect(boost::bind(&show_debug_menus));
|
||||
gSavedSettings.getControl("UseDebugMenus")->getSignal()->connect(boost::bind(&show_debug_menus));
|
||||
gSavedSettings.getControl("AgentPause")->getSignal()->connect(boost::bind(&toggle_agent_pause, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDeferred", handleRenderDeferredChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderShadowDetail", handleSetShaderChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderDeferredSSAO", handleSetShaderChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderPerformanceTest", handleRenderPerfTestChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "TextureMemory", handleVideoMemoryChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "ChatFontSize", handleChatFontSizeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "ChatPersistTime", handleChatPersistTimeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "ConsoleMaxLines", handleConsoleMaxLinesChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "UploadBakedTexOld", handleUploadBakedTexOldChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "UseOcclusion", handleUseOcclusionChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelMaster", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelSFX", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelUI", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelAmbient", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelMusic", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelMedia", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelVoice", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelDoppler", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelRolloff", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelUnderwaterRolloff", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "MuteAudio", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "MuteMusic", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "MuteMedia", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "MuteVoice", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "MuteAmbient", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "MuteUI", handleAudioVolumeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderVBOEnable", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderUseVAO", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderVBOMappingDisable", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderUseStreamVBO", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderPreferStreamDraw", handleResetVertexBuffersChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "WLSkyDetail", handleWLSkyDetailChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "JoystickAxis0", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "JoystickAxis1", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "JoystickAxis2", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "JoystickAxis3", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "JoystickAxis4", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "JoystickAxis5", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "JoystickAxis6", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisScale0", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisScale1", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisScale2", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisScale3", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisScale4", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisScale5", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisScale6", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisDeadZone0", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisDeadZone1", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisDeadZone2", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisDeadZone3", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisDeadZone4", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisDeadZone5", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FlycamAxisDeadZone6", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisScale0", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisScale1", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisScale2", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisScale3", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisScale4", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisScale5", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisDeadZone0", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisDeadZone1", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisDeadZone2", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisDeadZone3", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisDeadZone4", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AvatarAxisDeadZone5", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisScale0", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisScale1", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisScale2", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisScale3", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisScale4", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisScale5", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisDeadZone0", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisDeadZone1", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisDeadZone2", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisDeadZone3", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisDeadZone4", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "BuildAxisDeadZone5", handleJoystickChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "DebugViews", handleDebugViewsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "UserLogFile", handleLogFileChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderHideGroupTitle", handleHideGroupTitleChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "HighResSnapshot", handleHighResSnapshotChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "EnableVoiceChat", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "PTTCurrentlyEnabled", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "PushToTalkButton", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "PushToTalkToggle", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "VoiceEarLocation", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "VoiceInputAudioDevice", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "VoiceOutputAudioDevice", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "AudioLevelMic", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "LipSyncEnabled", handleVoiceClientPrefsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "VelocityInterpolate", handleVelocityInterpolate);
|
||||
setting_setup_signal_listener(gSavedSettings, "QAMode", show_debug_menus);
|
||||
setting_setup_signal_listener(gSavedSettings, "UseDebugMenus", show_debug_menus);
|
||||
setting_setup_signal_listener(gSavedSettings, "AgentPause", toggle_agent_pause);
|
||||
// <FS:Zi> Is done inside XUI now, using visibility_control
|
||||
// gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&toggle_show_navigation_panel, _2));
|
||||
// setting_setup_signal_listener(gSavedSettings, "ShowNavbarNavigationPanel", toggle_show_navigation_panel);
|
||||
// </FS:Zi>
|
||||
// <FS:Zi> We don't have the mini location bar
|
||||
// gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2));
|
||||
// setting_setup_signal_listener(gSavedSettings, "ShowMiniLocationPanel", toggle_show_mini_location_panel);
|
||||
// </FS: Zi>
|
||||
gSavedSettings.getControl("ShowMenuBarLocation")->getSignal()->connect(boost::bind(&toggle_show_menubar_location_panel, _2));
|
||||
gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));
|
||||
gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));
|
||||
gSavedSettings.getControl("ShowStartLocation")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2)); // <FS:Ansariel> Show start location setting has no effect on login
|
||||
gSavedSettings.getControl("RenderTransparentWater")->getSignal()->connect(boost::bind(&handleRenderTransparentWaterChanged, _2));
|
||||
gSavedSettings.getControl("SpellCheck")->getSignal()->connect(boost::bind(&handleSpellCheckChanged));
|
||||
gSavedSettings.getControl("SpellCheckDictionary")->getSignal()->connect(boost::bind(&handleSpellCheckChanged));
|
||||
gSavedSettings.getControl("LoginLocation")->getSignal()->connect(boost::bind(&handleLoginLocationChanged));
|
||||
gSavedSettings.getControl("DebugAvatarJoints")->getCommitSignal()->connect(boost::bind(&handleDebugAvatarJointsChanged, _2));
|
||||
gSavedSettings.getControl("RenderAutoMuteByteLimit")->getSignal()->connect(boost::bind(&handleRenderAutoMuteByteLimitChanged, _2));
|
||||
gSavedPerAccountSettings.getControl("AvatarHoverOffsetZ")->getCommitSignal()->connect(boost::bind(&handleAvatarHoverOffsetChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "ShowMenuBarLocation", toggle_show_menubar_location_panel);
|
||||
setting_setup_signal_listener(gSavedSettings, "ShowObjectRenderingCost", toggle_show_object_render_cost);
|
||||
setting_setup_signal_listener(gSavedSettings, "ForceShowGrid", handleForceShowGrid);
|
||||
// <FS:Ansariel> Show start location setting has no effect on login
|
||||
setting_setup_signal_listener(gSavedSettings, "ShowStartLocation", handleForceShowGrid);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderTransparentWater", handleRenderTransparentWaterChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "SpellCheck", handleSpellCheckChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "SpellCheckDictionary", handleSpellCheckChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "LoginLocation", handleLoginLocationChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "DebugAvatarJoints", handleDebugAvatarJointsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "RenderAutoMuteByteLimit", handleRenderAutoMuteByteLimitChanged);
|
||||
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "AvatarHoverOffsetZ", handleAvatarHoverOffsetChanged);
|
||||
|
||||
// [RLVa:KB] - Checked: 2015-12-27 (RLVa-1.5.0)
|
||||
gSavedSettings.getControl(RlvSettingNames::Main)->getSignal()->connect(boost::bind(&RlvSettings::onChangedSettingMain, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, RlvSettingNames::Main, RlvSettings::onChangedSettingMain);
|
||||
// [/RLVa:KB]
|
||||
// <FS:Zi> Is done inside XUI now, using visibility_control
|
||||
// gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2));
|
||||
// </FS:Zi>
|
||||
// NaCl - Antispam Registry
|
||||
gSavedSettings.getControl("_NACL_AntiSpamGlobalQueue")->getSignal()->connect(boost::bind(&handleNaclAntiSpamGlobalQueueChanged, _2));
|
||||
gSavedSettings.getControl("_NACL_AntiSpamTime")->getSignal()->connect(boost::bind(&handleNaclAntiSpamTimeChanged, _2));
|
||||
gSavedSettings.getControl("_NACL_AntiSpamAmount")->getSignal()->connect(boost::bind(&handleNaclAntiSpamAmountChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "_NACL_AntiSpamGlobalQueue", handleNaclAntiSpamGlobalQueueChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "_NACL_AntiSpamTime", handleNaclAntiSpamTimeChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "_NACL_AntiSpamAmount", handleNaclAntiSpamAmountChanged);
|
||||
// NaCl End
|
||||
gSavedSettings.getControl("AutohideChatBar")->getSignal()->connect(boost::bind(&handleAutohideChatbarChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "AutohideChatBar", handleAutohideChatbarChanged);
|
||||
|
||||
// <FS:Ansariel> Clear places / teleport history search filter
|
||||
gSavedSettings.getControl("FSUseStandaloneTeleportHistoryFloater")->getSignal()->connect(boost::bind(&handleUseStandaloneTeleportHistoryFloaterChanged));
|
||||
|
||||
// <FS:CR> Pose stand ground lock
|
||||
gSavedSettings.getControl("FSPoseStandLock")->getSignal()->connect(boost::bind(&handleSetPoseStandLock, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSUseStandaloneTeleportHistoryFloater", handleUseStandaloneTeleportHistoryFloaterChanged);
|
||||
|
||||
gSavedPerAccountSettings.getControl("UseLSLFlightAssist")->getCommitSignal()->connect(boost::bind(&handleFlightAssistOptionChanged, _2));
|
||||
gSavedPerAccountSettings.getControl("UseMoveLock")->getCommitSignal()->connect(boost::bind(&handleMovelockOptionChanged, _2));
|
||||
gSavedPerAccountSettings.getControl("RelockMoveLockAfterMovement")->getCommitSignal()->connect(boost::bind(&handleMovelockAfterMoveOptionChanged, _2));
|
||||
gSavedSettings.getControl("FSBuildToolDecimalPrecision")->getCommitSignal()->connect(boost::bind(&handleDecimalPrecisionChanged, _2));
|
||||
// <FS:CR> Pose stand ground lock
|
||||
setting_setup_signal_listener(gSavedSettings, "FSPoseStandLock", handleSetPoseStandLock);
|
||||
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "UseLSLFlightAssist", handleFlightAssistOptionChanged);
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "UseMoveLock", handleMovelockOptionChanged);
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "RelockMoveLockAfterMovement", handleMovelockAfterMoveOptionChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSBuildToolDecimalPrecision", handleDecimalPrecisionChanged);
|
||||
|
||||
// <FS:PP> External integrations (OC, LM etc.) for Bridge
|
||||
gSavedPerAccountSettings.getControl("BridgeIntegrationOC")->getCommitSignal()->connect(boost::bind(&handleExternalIntegrationsOptionChanged));
|
||||
gSavedPerAccountSettings.getControl("BridgeIntegrationLM")->getCommitSignal()->connect(boost::bind(&handleExternalIntegrationsOptionChanged));
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "BridgeIntegrationOC", handleExternalIntegrationsOptionChanged);
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "BridgeIntegrationLM", handleExternalIntegrationsOptionChanged);
|
||||
|
||||
gSavedSettings.getControl("FSNameTagShowLegacyUsernames")->getCommitSignal()->connect(boost::bind(&handleUsernameFormatOptionChanged, _2));
|
||||
gSavedSettings.getControl("FSTrimLegacyNames")->getCommitSignal()->connect(boost::bind(&handleLegacyTrimOptionChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSNameTagShowLegacyUsernames", handleUsernameFormatOptionChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSTrimLegacyNames", handleLegacyTrimOptionChanged);
|
||||
|
||||
// <FS:Ansariel> [FS communication UI]
|
||||
gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&FSFloaterIM::processChatHistoryStyleUpdate, _2));
|
||||
gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&FSFloaterNearbyChat::processChatHistoryStyleUpdate, _2));
|
||||
gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&FSFloaterIM::processChatHistoryStyleUpdate, _2));
|
||||
gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&FSFloaterNearbyChat::processChatHistoryStyleUpdate, _2));
|
||||
gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLViewerChat::signalChatFontChanged));
|
||||
setting_setup_signal_listener(gSavedSettings, "PlainTextChatHistory", FSFloaterIM::processChatHistoryStyleUpdate);
|
||||
setting_setup_signal_listener(gSavedSettings, "PlainTextChatHistory", FSFloaterNearbyChat::processChatHistoryStyleUpdate);
|
||||
setting_setup_signal_listener(gSavedSettings, "ChatFontSize", FSFloaterIM::processChatHistoryStyleUpdate);
|
||||
setting_setup_signal_listener(gSavedSettings, "ChatFontSize", FSFloaterNearbyChat::processChatHistoryStyleUpdate);
|
||||
setting_setup_signal_listener(gSavedSettings, "ChatFontSize", LLViewerChat::signalChatFontChanged);
|
||||
// </FS:Ansariel> [FS communication UI]
|
||||
|
||||
gSavedPerAccountSettings.getControl("GlobalOnlineStatusToggle")->getSignal()->connect(boost::bind(&handleGlobalOnlineStatusChanged, _2));
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "GlobalOnlineStatusToggle", handleGlobalOnlineStatusChanged);
|
||||
|
||||
// <FS:Ansariel> FIRE-17393: Control HUD text fading by options
|
||||
gSavedSettings.getControl("FSHudTextFadeDistance")->getSignal()->connect(boost::bind(&LLHUDText::onFadeSettingsChanged));
|
||||
gSavedSettings.getControl("FSHudTextFadeRange")->getSignal()->connect(boost::bind(&LLHUDText::onFadeSettingsChanged));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSHudTextFadeDistance", LLHUDText::onFadeSettingsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSHudTextFadeRange", LLHUDText::onFadeSettingsChanged);
|
||||
|
||||
//<FS:HG> FIRE-6340, FIRE-6567, FIRE-6809 - Setting Bandwidth issues
|
||||
gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&BandwidthUpdater::update, sBandwidthUpdater, _2));
|
||||
gSavedSettings.getControl("FSContactListShowSearch")->getSignal()->connect(boost::bind(&handleContactListShowSearchChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "ThrottleBandwidthKBPS", handleBandwidthChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSContactListShowSearch", handleContactListShowSearchChanged);
|
||||
|
||||
// <FS:Ansariel> Debug setting to disable log throttle
|
||||
gSavedSettings.getControl("FSEnableLogThrottle")->getSignal()->connect(boost::bind(&handleLogThrottleChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSEnableLogThrottle", handleLogThrottleChanged);
|
||||
|
||||
// <FS:Ansariel> FIRE-18250: Option to disable default eye movement
|
||||
gSavedSettings.getControl("FSStaticEyesUUID")->getSignal()->connect(boost::bind(&handleStaticEyesChanged));
|
||||
gSavedPerAccountSettings.getControl("FSStaticEyes")->getSignal()->connect(boost::bind(&handleStaticEyesChanged));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSStaticEyesUUID", handleStaticEyesChanged);
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "FSStaticEyes", handleStaticEyesChanged);
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:Ansariel> FIRE-20288: Option to render friends only
|
||||
gSavedPerAccountSettings.getControl("FSRenderFriendsOnly")->getSignal()->connect(boost::bind(&handleRenderFriendsOnlyChanged, _2));
|
||||
setting_setup_signal_listener(gSavedPerAccountSettings, "FSRenderFriendsOnly", handleRenderFriendsOnlyChanged);
|
||||
|
||||
// <FS:Ansariel> Notification not showing if hiding the UI
|
||||
gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged));
|
||||
gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged));
|
||||
setting_setup_signal_listener(gSavedSettings, "ShowNavbarFavoritesPanel", handleNavbarSettingsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "ShowNavbarNavigationPanel", handleNavbarSettingsChanged);
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:LO> Add ability for the statistics window to not be able to receive focus
|
||||
gSavedSettings.getControl("FSStatisticsNoFocus")->getSignal()->connect(boost::bind(&handleFSStatisticsNoFocusChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSStatisticsNoFocus", handleFSStatisticsNoFocusChanged);
|
||||
// </FS:LO>
|
||||
|
||||
// <FS:Ansariel> Output device selection
|
||||
gSavedSettings.getControl("FSOutputDeviceUUID")->getSignal()->connect(boost::bind(&handleOutputDeviceChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSOutputDeviceUUID", handleOutputDeviceChanged);
|
||||
|
||||
// <FS:Ansariel> Dynamic texture memory calculation
|
||||
gSavedSettings.getControl("FSDynamicTextureMemory")->getSignal()->connect(boost::bind(&handleDynamicTextureMemoryChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSDynamicTextureMemory", handleDynamicTextureMemoryChanged);
|
||||
|
||||
// <FS:Ansariel> Optional small camera floater
|
||||
gSavedSettings.getControl("FSUseSmallCameraFloater")->getSignal()->connect(boost::bind(&handleSmallCameraFloaterChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSUseSmallCameraFloater", handleSmallCameraFloaterChanged);
|
||||
|
||||
// <FS:Zi> FIRE-20390, FIRE-4269 - Option for 12/24 hour clock and seconds display
|
||||
gSavedSettings.getControl("FSStatusBarTimeFormat")->getSignal()->connect(boost::bind(&handleStatusbarTimeformatChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSStatusBarTimeFormat", handleStatusbarTimeformatChanged);
|
||||
|
||||
// <FS:Zi> Run Prio 0 default bento pose in the background to fix splayed hands, open mouths, etc.
|
||||
gSavedSettings.getControl("FSPlayDefaultBentoAnimation")->getSignal()->connect(boost::bind(&handlePlayBentoIdleAnimationChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSPlayDefaultBentoAnimation", handlePlayBentoIdleAnimationChanged);
|
||||
|
||||
// <FS:Ansariel> Better asset cache size control
|
||||
gSavedSettings.getControl("FSDiskCacheSize")->getSignal()->connect(boost::bind(&handleDiskCacheSizeChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSDiskCacheSize", handleDiskCacheSizeChanged);
|
||||
|
||||
// <FS:Beq> perf floater controls
|
||||
gSavedSettings.getControl("FSTargetFPS")->getSignal()->connect(boost::bind(&handleTargetFPSChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneFPS")->getSignal()->connect(boost::bind(&handleAutoTuneFPSChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneLock")->getSignal()->connect(boost::bind(&handleAutoTuneLockChanged, _2));
|
||||
gSavedSettings.getControl("FSRenderAvatarMaxART")->getSignal()->connect(boost::bind(&handleRenderAvatarMaxARTChanged, _2));
|
||||
gSavedSettings.getControl("FSPerfStatsCaptureEnabled")->getSignal()->connect(boost::bind(&handlePerformanceStatsEnabledChanged, _2));
|
||||
gSavedSettings.getControl("FSUserTargetReflections")->getSignal()->connect(boost::bind(&handleUserTargetReflectionsChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneRenderFarClipTarget")->getSignal()->connect(boost::bind(&handleUserTargetDrawDistanceChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneImpostorFarAwayDistance")->getSignal()->connect(boost::bind(&handleUserImpostorDistanceChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneImpostorByDistEnabled")->getSignal()->connect(boost::bind(&handleUserImpostorByDistEnabledChanged, _2));
|
||||
gSavedSettings.getControl("FSTuningFPSStrategy")->getSignal()->connect(boost::bind(&handleFPSTuningStrategyChanged, _2));
|
||||
setting_setup_signal_listener(gSavedSettings, "FSTargetFPS", handleTargetFPSChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSAutoTuneFPS", handleAutoTuneFPSChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSAutoTuneLock", handleAutoTuneLockChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSRenderAvatarMaxART", handleRenderAvatarMaxARTChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSPerfStatsCaptureEnabled", handlePerformanceStatsEnabledChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSUserTargetReflections", handleUserTargetReflectionsChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSAutoTuneRenderFarClipTarget", handleUserTargetDrawDistanceChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSAutoTuneImpostorFarAwayDistance", handleUserImpostorDistanceChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSAutoTuneImpostorByDistEnabled", handleUserImpostorByDistEnabledChanged);
|
||||
setting_setup_signal_listener(gSavedSettings, "FSTuningFPSStrategy", handleFPSTuningStrategyChanged);
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2623,18 +2623,6 @@ class LLAdvancedEnableObjectObjectOcclusion: public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
/////////////////////////////////////
|
||||
// Enable Framebuffer Objects ///
|
||||
/////////////////////////////////////
|
||||
class LLAdvancedEnableRenderFBO: public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
bool new_value = gGLManager.mHasFramebufferObject;
|
||||
return new_value;
|
||||
}
|
||||
};
|
||||
|
||||
/////////////////////////////////////
|
||||
// Enable Advanced Lighting Model ///
|
||||
/////////////////////////////////////
|
||||
|
|
@ -2642,7 +2630,7 @@ class LLAdvancedEnableRenderDeferred: public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
bool new_value = gGLManager.mHasFramebufferObject && LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT) > 1 &&
|
||||
bool new_value = LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT) > 1 &&
|
||||
LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0;
|
||||
return new_value;
|
||||
}
|
||||
|
|
@ -2655,7 +2643,7 @@ class LLAdvancedEnableRenderDeferredOptions: public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
bool new_value = gGLManager.mHasFramebufferObject && LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT) > 1 &&
|
||||
bool new_value = LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT) > 1 &&
|
||||
LLViewerShaderMgr::instance()->getShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0 && gSavedSettings.getBOOL("RenderDeferred");
|
||||
return new_value;
|
||||
}
|
||||
|
|
@ -11981,7 +11969,6 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe");
|
||||
// Develop > Render
|
||||
view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion");
|
||||
view_listener_t::addMenu(new LLAdvancedEnableRenderFBO(), "Advanced.EnableRenderFBO");
|
||||
view_listener_t::addMenu(new LLAdvancedEnableRenderDeferred(), "Advanced.EnableRenderDeferred");
|
||||
view_listener_t::addMenu(new LLAdvancedEnableRenderDeferredOptions(), "Advanced.EnableRenderDeferredOptions");
|
||||
view_listener_t::addMenu(new LLAdvancedToggleRandomizeFramerate(), "Advanced.ToggleRandomizeFramerate");
|
||||
|
|
|
|||
|
|
@ -45,11 +45,11 @@ class LLViewerOctreeGroup;
|
|||
class LLViewerOctreeEntry;
|
||||
class LLViewerOctreePartition;
|
||||
|
||||
typedef LLOctreeListener<LLViewerOctreeEntry> OctreeListener;
|
||||
typedef LLTreeNode<LLViewerOctreeEntry> TreeNode;
|
||||
typedef LLOctreeNode<LLViewerOctreeEntry> OctreeNode;
|
||||
typedef LLOctreeRoot<LLViewerOctreeEntry> OctreeRoot;
|
||||
typedef LLOctreeTraveler<LLViewerOctreeEntry> OctreeTraveler;
|
||||
typedef LLOctreeListener<LLViewerOctreeEntry, LLPointer<LLViewerOctreeEntry>> OctreeListener;
|
||||
typedef LLTreeNode<LLViewerOctreeEntry> TreeNode;
|
||||
typedef LLOctreeNode<LLViewerOctreeEntry, LLPointer<LLViewerOctreeEntry>> OctreeNode;
|
||||
typedef LLOctreeRoot<LLViewerOctreeEntry, LLPointer<LLViewerOctreeEntry>> OctreeRoot;
|
||||
typedef LLOctreeTraveler<LLViewerOctreeEntry, LLPointer<LLViewerOctreeEntry>> OctreeTraveler;
|
||||
|
||||
#if LL_OCTREE_PARANOIA_CHECK
|
||||
#define assert_octree_valid(x) x->validate()
|
||||
|
|
@ -179,7 +179,7 @@ protected:
|
|||
//defines an octree group for an octree node, which contains multiple entries.
|
||||
//LL_ALIGN_PREFIX(16)
|
||||
class LLViewerOctreeGroup
|
||||
: public LLOctreeListener<LLViewerOctreeEntry>
|
||||
: public OctreeListener
|
||||
{
|
||||
LL_ALIGN_NEW
|
||||
friend class LLViewerOctreeCull;
|
||||
|
|
@ -198,8 +198,8 @@ public:
|
|||
};
|
||||
|
||||
public:
|
||||
typedef LLOctreeNode<LLViewerOctreeEntry>::element_iter element_iter;
|
||||
typedef LLOctreeNode<LLViewerOctreeEntry>::element_list element_list;
|
||||
typedef OctreeNode::element_iter element_iter;
|
||||
typedef OctreeNode::element_list element_list;
|
||||
|
||||
LLViewerOctreeGroup(OctreeNode* node);
|
||||
LLViewerOctreeGroup(const LLViewerOctreeGroup& rhs)
|
||||
|
|
@ -245,7 +245,6 @@ public:
|
|||
const LLVector4a* getObjectExtents() const {return mObjectExtents;}
|
||||
|
||||
//octree wrappers to make code more readable
|
||||
element_list& getData() { return mOctreeNode->getData(); }
|
||||
element_iter getDataBegin() { return mOctreeNode->getDataBegin(); }
|
||||
element_iter getDataEnd() { return mOctreeNode->getDataEnd(); }
|
||||
U32 getElementCount() const { return mOctreeNode->getElementCount(); }
|
||||
|
|
|
|||
|
|
@ -563,15 +563,14 @@ void LLViewerShaderMgr::setShaders()
|
|||
mShaderLevel[SHADER_DEFERRED] = deferred_class;
|
||||
mShaderLevel[SHADER_TRANSFORM] = transform_class;
|
||||
|
||||
BOOL loaded = loadBasicShaders();
|
||||
if (loaded)
|
||||
std::string shader_name = loadBasicShaders();
|
||||
if (shader_name.empty())
|
||||
{
|
||||
LL_INFOS() << "Loaded basic shaders." << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS() << "Unable to load basic shaders, verify graphics driver installed and current." << LL_ENDL;
|
||||
llassert(loaded);
|
||||
LL_ERRS() << "Unable to load basic shader " << shader_name << ", verify graphics driver installed and current." << LL_ENDL;
|
||||
reentrance = false; // For hygiene only, re-try probably helps nothing
|
||||
return;
|
||||
}
|
||||
|
|
@ -579,7 +578,7 @@ void LLViewerShaderMgr::setShaders()
|
|||
gPipeline.mShadersLoaded = true;
|
||||
|
||||
// Load all shaders to set max levels
|
||||
loaded = loadShadersEnvironment();
|
||||
BOOL loaded = loadShadersEnvironment();
|
||||
|
||||
if (loaded)
|
||||
{
|
||||
|
|
@ -867,7 +866,7 @@ void LLViewerShaderMgr::unloadShaders()
|
|||
gPipeline.mShadersLoaded = false;
|
||||
}
|
||||
|
||||
BOOL LLViewerShaderMgr::loadBasicShaders()
|
||||
std::string LLViewerShaderMgr::loadBasicShaders()
|
||||
{
|
||||
// Load basic dependency shaders first
|
||||
// All of these have to load for any shaders to function
|
||||
|
|
@ -953,8 +952,8 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
|
|||
// Note usage of GL_VERTEX_SHADER_ARB
|
||||
if (loadShaderFile(shaders[i].first, shaders[i].second, GL_VERTEX_SHADER_ARB, &attribs) == 0)
|
||||
{
|
||||
LL_SHADER_LOADING_WARNS() << "Failed to load vertex shader " << shaders[i].first << LL_ENDL;
|
||||
return FALSE;
|
||||
LL_WARNS("Shader") << "Failed to load vertex shader " << shaders[i].first << LL_ENDL;
|
||||
return shaders[i].first;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1013,12 +1012,12 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
|
|||
// Note usage of GL_FRAGMENT_SHADER_ARB
|
||||
if (loadShaderFile(shaders[i].first, shaders[i].second, GL_FRAGMENT_SHADER_ARB, &attribs, index_channels[i]) == 0)
|
||||
{
|
||||
LL_SHADER_LOADING_WARNS() << "Failed to load fragment shader " << shaders[i].first << LL_ENDL;
|
||||
return FALSE;
|
||||
LL_WARNS("Shader") << "Failed to load fragment shader " << shaders[i].first << LL_ENDL;
|
||||
return shaders[i].first;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return std::string();
|
||||
}
|
||||
|
||||
BOOL LLViewerShaderMgr::loadShadersEnvironment()
|
||||
|
|
|
|||
|
|
@ -49,7 +49,11 @@ public:
|
|||
void setShaders();
|
||||
void unloadShaders();
|
||||
S32 getShaderLevel(S32 type);
|
||||
BOOL loadBasicShaders();
|
||||
|
||||
// loadBasicShaders in case of a failure returns
|
||||
// name of a file error happened at, otherwise
|
||||
// returns an empty string
|
||||
std::string loadBasicShaders();
|
||||
BOOL loadShadersEffects();
|
||||
BOOL loadShadersDeferred();
|
||||
BOOL loadShadersObject();
|
||||
|
|
|
|||
|
|
@ -1288,15 +1288,14 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
|
|||
total_update_count--;
|
||||
}
|
||||
}
|
||||
|
||||
S32 fetch_count = 0;
|
||||
|
||||
size_t min_update_count = llmin(MIN_UPDATE_COUNT,(S32)(entries.size()-max_priority_count));
|
||||
S32 min_count = max_priority_count + min_update_count;
|
||||
for (entries_list_t::iterator iter3 = entries.begin();
|
||||
iter3 != entries.end(); )
|
||||
{
|
||||
LLViewerFetchedTexture* imagep = *iter3++;
|
||||
fetch_count += (imagep->updateFetch() ? 1 : 0);
|
||||
imagep->updateFetch();
|
||||
if (min_count <= min_update_count)
|
||||
{
|
||||
mLastFetchKey = LLTextureKey(imagep->getID(), (ETexListType)imagep->getTextureListType());
|
||||
|
|
|
|||
|
|
@ -859,9 +859,6 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
|
|||
|
||||
std::sort(mFaceList.begin(), mFaceList.end(), LLFace::CompareDistanceGreater());
|
||||
|
||||
U32 index_count = 0;
|
||||
U32 vertex_count = 0;
|
||||
|
||||
group->clearDrawMap();
|
||||
|
||||
LLVertexBuffer* buffer = group->mVertexBuffer;
|
||||
|
|
@ -927,9 +924,6 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
|
|||
llassert(facep->getIndicesCount() == 6);
|
||||
|
||||
|
||||
vertex_count += facep->getGeomCount();
|
||||
index_count += facep->getIndicesCount();
|
||||
|
||||
S32 idx = draw_vec.size()-1;
|
||||
|
||||
BOOL fullbright = facep->isState(LLFace::FULLBRIGHT);
|
||||
|
|
|
|||
|
|
@ -1865,7 +1865,7 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global)
|
|||
// updates needed, set REBUILD_RIGGED accordingly.
|
||||
|
||||
// Without the flag, this will remove unused rigged volumes, which we are not currently very aggressive about.
|
||||
updateRiggedVolume();
|
||||
updateRiggedVolume(false);
|
||||
}
|
||||
|
||||
LLVolume* volume = mRiggedVolume;
|
||||
|
|
@ -1927,16 +1927,6 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global)
|
|||
}
|
||||
}
|
||||
|
||||
bool rigged = false;
|
||||
|
||||
if (!isAnimatedObject())
|
||||
{
|
||||
rigged = isRiggedMesh() && isAttachment();
|
||||
}
|
||||
else
|
||||
{
|
||||
rigged = isRiggedMesh() && getControlAvatar() && getControlAvatar()->mPlaying;
|
||||
}
|
||||
|
||||
if (any_valid_boxes)
|
||||
{
|
||||
|
|
@ -2172,7 +2162,7 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)
|
|||
|
||||
if (mDrawable->isState(LLDrawable::REBUILD_RIGGED))
|
||||
{
|
||||
updateRiggedVolume();
|
||||
updateRiggedVolume(false);
|
||||
genBBoxes(FALSE);
|
||||
mDrawable->clearState(LLDrawable::REBUILD_RIGGED);
|
||||
}
|
||||
|
|
@ -4830,7 +4820,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a&
|
|||
{
|
||||
if ((pick_rigged) || (getAvatar() && (getAvatar()->isSelf()) && (LLFloater::isVisible(gFloaterTools))))
|
||||
{
|
||||
updateRiggedVolume(true);
|
||||
updateRiggedVolume(true, LLRiggedVolume::DO_NOT_UPDATE_FACES);
|
||||
volume = mRiggedVolume;
|
||||
transform = false;
|
||||
}
|
||||
|
|
@ -4905,6 +4895,9 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a&
|
|||
continue;
|
||||
}
|
||||
|
||||
// This calculates the bounding box of the skinned mesh from scratch. It's actually quite expensive, but not nearly as expensive as building a full octree.
|
||||
// rebuild_face_octrees = false because an octree for this face will be built later only if needed for narrow phase picking.
|
||||
updateRiggedVolume(true, i, false);
|
||||
face_hit = volume->lineSegmentIntersect(local_start, local_end, i,
|
||||
&p, &tc, &n, &tn);
|
||||
|
||||
|
|
@ -5028,13 +5021,13 @@ void LLVOVolume::clearRiggedVolume()
|
|||
}
|
||||
}
|
||||
|
||||
void LLVOVolume::updateRiggedVolume(bool force_update)
|
||||
void LLVOVolume::updateRiggedVolume(bool force_treat_as_rigged, LLRiggedVolume::FaceIndex face_index, bool rebuild_face_octrees)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME;
|
||||
//Update mRiggedVolume to match current animation frame of avatar.
|
||||
//Also update position/size in octree.
|
||||
|
||||
if ((!force_update) && (!treatAsRigged()))
|
||||
if ((!force_treat_as_rigged) && (!treatAsRigged()))
|
||||
{
|
||||
clearRiggedVolume();
|
||||
|
||||
|
|
@ -5063,10 +5056,10 @@ void LLVOVolume::updateRiggedVolume(bool force_update)
|
|||
updateRelativeXform();
|
||||
}
|
||||
|
||||
mRiggedVolume->update(skin, avatar, volume);
|
||||
mRiggedVolume->update(skin, avatar, volume, face_index, rebuild_face_octrees);
|
||||
}
|
||||
|
||||
void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* volume)
|
||||
void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* volume, FaceIndex face_index, bool rebuild_face_octrees)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME;
|
||||
bool copy = false;
|
||||
|
|
@ -5097,7 +5090,7 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
|
|||
if (is_paused)
|
||||
{
|
||||
S32 frames_paused = LLFrameTimer::getFrameCount() - avatar->getMotionController().getPausedFrame();
|
||||
if (frames_paused > 2)
|
||||
if (frames_paused > 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -5116,7 +5109,24 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
|
|||
S32 rigged_vert_count = 0;
|
||||
S32 rigged_face_count = 0;
|
||||
LLVector4a box_min, box_max;
|
||||
for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i)
|
||||
S32 face_begin;
|
||||
S32 face_end;
|
||||
if (face_index == DO_NOT_UPDATE_FACES)
|
||||
{
|
||||
face_begin = 0;
|
||||
face_end = 0;
|
||||
}
|
||||
else if (face_index == UPDATE_ALL_FACES)
|
||||
{
|
||||
face_begin = 0;
|
||||
face_end = volume->getNumVolumeFaces();
|
||||
}
|
||||
else
|
||||
{
|
||||
face_begin = face_index;
|
||||
face_end = face_begin + 1;
|
||||
}
|
||||
for (S32 i = face_begin; i < face_end; ++i)
|
||||
{
|
||||
const LLVolumeFace& vol_face = volume->getVolumeFace(i);
|
||||
|
||||
|
|
@ -5204,27 +5214,20 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
|
|||
|
||||
}
|
||||
|
||||
// <FS:ND> Crashfix if mExtents is 0
|
||||
if( dst_face.mExtents )
|
||||
// </FS:ND>
|
||||
|
||||
if (rebuild_face_octrees)
|
||||
{
|
||||
delete dst_face.mOctree;
|
||||
dst_face.mOctree = NULL;
|
||||
|
||||
LLVector4a size;
|
||||
size.setSub(dst_face.mExtents[1], dst_face.mExtents[0]);
|
||||
size.splat(size.getLength3().getF32()*0.5f);
|
||||
|
||||
// <FS:ND> Create a debug log for octree insertions if requested.
|
||||
static LLCachedControl<bool> debugOctree(gSavedSettings,"FSCreateOctreeLog");
|
||||
bool _debugOT( debugOctree );
|
||||
if( _debugOT )
|
||||
nd::octree::debug::gOctreeDebug += 1;
|
||||
// </FS:ND>
|
||||
|
||||
dst_face.createOctree(1.f);
|
||||
|
||||
|
||||
dst_face.createOctree();
|
||||
|
||||
// <FS:ND> Reset octree log
|
||||
if( _debugOT )
|
||||
nd::octree::debug::gOctreeDebug -= 1;
|
||||
|
|
@ -6239,7 +6242,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
else
|
||||
{
|
||||
drawablep->clearState(LLDrawable::RIGGED);
|
||||
vobj->updateRiggedVolume();
|
||||
vobj->updateRiggedVolume(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,7 +67,10 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
void update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* src_volume);
|
||||
using FaceIndex = S32;
|
||||
static const FaceIndex UPDATE_ALL_FACES = -1;
|
||||
static const FaceIndex DO_NOT_UPDATE_FACES = -2;
|
||||
void update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* src_volume, FaceIndex face_index = UPDATE_ALL_FACES, bool rebuild_face_octrees = true);
|
||||
|
||||
std::string mExtraDebugText;
|
||||
};
|
||||
|
|
@ -367,8 +370,9 @@ public:
|
|||
S32 getMDCImplCount() { return mMDCImplCount; }
|
||||
|
||||
|
||||
//rigged volume update (for raycasting)
|
||||
void updateRiggedVolume(bool force_update = false);
|
||||
// Rigged volume update (for raycasting)
|
||||
// By default, this updates the bounding boxes of all the faces and builds an octree for precise per-triangle raycasting
|
||||
void updateRiggedVolume(bool force_treat_as_rigged, LLRiggedVolume::FaceIndex face_index = LLRiggedVolume::UPDATE_ALL_FACES, bool rebuild_face_octrees = true);
|
||||
LLRiggedVolume* getRiggedVolume();
|
||||
|
||||
//returns true if volume should be treated as a rigged volume
|
||||
|
|
|
|||
|
|
@ -1205,14 +1205,13 @@ void LLWorld::updateParticles()
|
|||
void LLWorld::renderPropertyLines()
|
||||
{
|
||||
S32 region_count = 0;
|
||||
S32 vertex_count = 0;
|
||||
|
||||
for (region_list_t::iterator iter = mVisibleRegionList.begin();
|
||||
iter != mVisibleRegionList.end(); ++iter)
|
||||
{
|
||||
LLViewerRegion* regionp = *iter;
|
||||
region_count++;
|
||||
vertex_count += regionp->renderPropertyLines();
|
||||
regionp->renderPropertyLines();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1220,7 +1219,6 @@ void LLWorld::renderPropertyLines()
|
|||
void LLWorld::updateNetStats()
|
||||
{
|
||||
F64Bits bits;
|
||||
U32 packets = 0;
|
||||
|
||||
for (region_list_t::iterator iter = mActiveRegionList.begin();
|
||||
iter != mActiveRegionList.end(); ++iter)
|
||||
|
|
@ -1228,7 +1226,6 @@ void LLWorld::updateNetStats()
|
|||
LLViewerRegion* regionp = *iter;
|
||||
regionp->updateNetStats();
|
||||
bits += regionp->mBitsReceived;
|
||||
packets += llfloor( regionp->mPacketsReceived );
|
||||
regionp->mBitsReceived = (F32Bits)0.f;
|
||||
regionp->mPacketsReceived = 0.f;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1042,7 +1042,6 @@ void FloaterQuickPrefs::refreshSettings()
|
|||
BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
bumpshiny &&
|
||||
shaders &&
|
||||
gGLManager.mHasFramebufferObject &&
|
||||
(mCtrlWindLight->get()) ? TRUE : FALSE;
|
||||
|
||||
mCtrlDeferred->setEnabled(enabled);
|
||||
|
|
@ -1082,8 +1081,7 @@ void FloaterQuickPrefs::refreshSettings()
|
|||
}
|
||||
|
||||
// disabled deferred
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") ||
|
||||
!gGLManager.mHasFramebufferObject)
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred"))
|
||||
{
|
||||
mCtrlShadowDetail->setEnabled(FALSE);
|
||||
mCtrlShadowDetail->setValue(0);
|
||||
|
|
|
|||
Loading…
Reference in New Issue