Merge Firestorm tip
commit
fbbc02003d
|
|
@ -2209,8 +2209,7 @@ void* ll_aligned_malloc_fallback( size_t size, int align )
|
|||
SYSTEM_INFO sysinfo;
|
||||
GetSystemInfo(&sysinfo);
|
||||
|
||||
unsigned int for_alloc = sysinfo.dwPageSize;
|
||||
while(for_alloc < size) for_alloc += sysinfo.dwPageSize;
|
||||
unsigned int for_alloc = (size/sysinfo.dwPageSize + !!(size%sysinfo.dwPageSize)) * sysinfo.dwPageSize;
|
||||
|
||||
void *p = VirtualAlloc(NULL, for_alloc+sysinfo.dwPageSize, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
|
||||
if(NULL == p) {
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address)
|
|||
//------------------------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------------------------
|
||||
// for enable buffer overrun detection predefine LL_DEBUG_BUFFER_OVERRUN in current library
|
||||
// change preprocessro code to: #if 1 && defined(LL_WINDOWS)
|
||||
// change preprocessor code to: #if 1 && defined(LL_WINDOWS)
|
||||
|
||||
#if 0 && defined(LL_WINDOWS)
|
||||
void* ll_aligned_malloc_fallback( size_t size, int align );
|
||||
|
|
|
|||
|
|
@ -5664,7 +5664,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
|
|||
{
|
||||
resizeVertices(num_vertices+1);
|
||||
|
||||
if (!partial_build)
|
||||
//if (!partial_build)
|
||||
{
|
||||
resizeIndices(num_indices+3);
|
||||
}
|
||||
|
|
@ -5672,7 +5672,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
|
|||
else
|
||||
{
|
||||
resizeVertices(num_vertices);
|
||||
if (!partial_build)
|
||||
//if (!partial_build)
|
||||
{
|
||||
resizeIndices(num_indices);
|
||||
}
|
||||
|
|
@ -5794,10 +5794,10 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
|
|||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
if (partial_build)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
//if (partial_build)
|
||||
//{
|
||||
// return TRUE;
|
||||
//}
|
||||
|
||||
if (mTypeMask & HOLLOW_MASK)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -725,10 +725,77 @@ BOOL LLGLSLShader::mapUniforms(const vector<LLStaticHashedString> * uniforms)
|
|||
GLint activeCount;
|
||||
glGetObjectParameterivARB(mProgramObject, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &activeCount);
|
||||
|
||||
//........................................................................................................................................
|
||||
//........................................................................................
|
||||
|
||||
/*
|
||||
EXPLANATION:
|
||||
This is part of code is temporary because as the final result the mapUniform() should be rewrited.
|
||||
But it's a huge a volume of work which is need to be a more carefully performed for avoid possible
|
||||
regression's (i.e. it should be formalized a separate ticket in JIRA).
|
||||
|
||||
RESON:
|
||||
The reason of this code is that SL engine is very sensitive to fact that "diffuseMap" should be appear
|
||||
first as uniform parameter which is should get 0-"texture channel" index (see mapUniformTextureChannel() and mActiveTextureChannels)
|
||||
it influence to which is texture matrix will be updated during rendering.
|
||||
|
||||
But, order of indexe's of uniform variables is not defined and GLSL compiler can change it as want
|
||||
, even if the "diffuseMap" will be appear and use first in shader code.
|
||||
|
||||
As example where this situation appear see: "Deferred Material Shader 28/29/30/31"
|
||||
And tickets: MAINT-4165, MAINT-4839
|
||||
*/
|
||||
|
||||
|
||||
S32 diffuseMap = glGetUniformLocationARB(mProgramObject, "diffuseMap");
|
||||
S32 bumpMap = glGetUniformLocationARB(mProgramObject, "bumpMap");
|
||||
|
||||
std::set<S32> skip_index;
|
||||
|
||||
if(diffuseMap != -1 && bumpMap != -1)
|
||||
{
|
||||
GLenum type;
|
||||
GLsizei length;
|
||||
GLint size = -1;
|
||||
char name[1024];
|
||||
|
||||
//diffuse map
|
||||
for (S32 i = 0; i < activeCount; i++)
|
||||
{
|
||||
name[0] = 0;
|
||||
|
||||
glGetActiveUniformARB(mProgramObject, i, 1024, &length, &size, &type, (GLcharARB *)name);
|
||||
|
||||
if(std::string(name) == "diffuseMap") {
|
||||
diffuseMap = i;
|
||||
}
|
||||
|
||||
if(std::string(name) == "bumpMap") {
|
||||
bumpMap = i;
|
||||
}
|
||||
}
|
||||
|
||||
if(bumpMap < diffuseMap)
|
||||
{
|
||||
mapUniform(diffuseMap, uniforms);
|
||||
mapUniform(bumpMap, uniforms);
|
||||
|
||||
skip_index.insert(diffuseMap);
|
||||
skip_index.insert(bumpMap);
|
||||
}
|
||||
}
|
||||
|
||||
//........................................................................................
|
||||
|
||||
for (S32 i = 0; i < activeCount; i++)
|
||||
{
|
||||
//........................................................................................
|
||||
if(skip_index.end() != skip_index.find(i)) continue;
|
||||
//........................................................................................
|
||||
|
||||
mapUniform(i, uniforms);
|
||||
}
|
||||
//........................................................................................................................................
|
||||
|
||||
unbind();
|
||||
|
||||
|
|
|
|||
|
|
@ -104,10 +104,10 @@ LLTexUnit::LLTexUnit(S32 index)
|
|||
mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR),
|
||||
mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA),
|
||||
mCurrColorScale(1), mCurrAlphaScale(1), mCurrTexture(0),
|
||||
mHasMipMaps(false)
|
||||
mHasMipMaps(false),
|
||||
mIndex(index)
|
||||
{
|
||||
llassert_always(index < (S32)LL_NUM_TEXTURE_LAYERS);
|
||||
mIndex = index;
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
@ -227,33 +227,34 @@ bool LLTexUnit::bind(LLTexture* texture, bool for_rendering, bool forceBind)
|
|||
stop_glerror();
|
||||
if (mIndex >= 0)
|
||||
{
|
||||
gGL.flush();
|
||||
gGL.flush();
|
||||
|
||||
LLImageGL* gl_tex = NULL ;
|
||||
|
||||
LLImageGL* gl_tex = NULL ;
|
||||
if (texture != NULL && (gl_tex = texture->getGLTexture()))
|
||||
{
|
||||
{
|
||||
if (gl_tex->getTexName()) //if texture exists
|
||||
{
|
||||
//in audit, replace the selected texture by the default one.
|
||||
if ((mCurrTexture != gl_tex->getTexName()) || forceBind)
|
||||
{
|
||||
activate();
|
||||
enable(gl_tex->getTarget());
|
||||
mCurrTexture = gl_tex->getTexName();
|
||||
glBindTexture(sGLTextureType[gl_tex->getTarget()], mCurrTexture);
|
||||
if(gl_tex->updateBindStats(gl_tex->mTextureMemory))
|
||||
{
|
||||
texture->setActive() ;
|
||||
texture->updateBindStatsForTester() ;
|
||||
}
|
||||
mHasMipMaps = gl_tex->mHasMipMaps;
|
||||
if (gl_tex->mTexOptionsDirty)
|
||||
{
|
||||
gl_tex->mTexOptionsDirty = false;
|
||||
setTextureAddressMode(gl_tex->mAddressMode);
|
||||
setTextureFilteringOption(gl_tex->mFilterOption);
|
||||
}
|
||||
}
|
||||
{
|
||||
//in audit, replace the selected texture by the default one.
|
||||
if ((mCurrTexture != gl_tex->getTexName()) || forceBind)
|
||||
{
|
||||
activate();
|
||||
enable(gl_tex->getTarget());
|
||||
mCurrTexture = gl_tex->getTexName();
|
||||
glBindTexture(sGLTextureType[gl_tex->getTarget()], mCurrTexture);
|
||||
if(gl_tex->updateBindStats(gl_tex->mTextureMemory))
|
||||
{
|
||||
texture->setActive() ;
|
||||
texture->updateBindStatsForTester() ;
|
||||
}
|
||||
mHasMipMaps = gl_tex->mHasMipMaps;
|
||||
if (gl_tex->mTexOptionsDirty)
|
||||
{
|
||||
gl_tex->mTexOptionsDirty = false;
|
||||
setTextureAddressMode(gl_tex->mAddressMode);
|
||||
setTextureFilteringOption(gl_tex->mFilterOption);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ public:
|
|||
void setHasMipMaps(bool hasMips) { mHasMipMaps = hasMips; }
|
||||
|
||||
protected:
|
||||
S32 mIndex;
|
||||
const S32 mIndex;
|
||||
U32 mCurrTexture;
|
||||
eTextureType mCurrTexType;
|
||||
eTextureBlendType mCurrBlendType;
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
|
|||
mSelectPending(FALSE),
|
||||
mLabelStyle( LLFontGL::NORMAL ),
|
||||
mHasVisibleChildren(FALSE),
|
||||
mIsFolderComplete(true),
|
||||
mLocalIndentation(p.folder_indentation),
|
||||
mIndentation(0),
|
||||
mItemHeight(p.item_height),
|
||||
|
|
@ -741,7 +742,7 @@ void LLFolderViewItem::drawOpenFolderArrow(const Params& default_params, const L
|
|||
//
|
||||
const S32 TOP_PAD = default_params.item_top_pad;
|
||||
|
||||
if (hasVisibleChildren())
|
||||
if (hasVisibleChildren() || !isFolderComplete())
|
||||
{
|
||||
LLUIImage* arrow_image = default_params.folder_arrow_image;
|
||||
gl_draw_scaled_rotated_image(
|
||||
|
|
@ -1043,6 +1044,8 @@ LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ):
|
|||
mLastArrangeGeneration( -1 ),
|
||||
mLastCalculatedWidth(0)
|
||||
{
|
||||
// folder might have children that are not loaded yet. Mark it as incomplete until chance to check it.
|
||||
mIsFolderComplete = false;
|
||||
}
|
||||
|
||||
void LLFolderViewFolder::updateLabelRotation()
|
||||
|
|
@ -1125,6 +1128,12 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )
|
|||
|
||||
mHasVisibleChildren = found;
|
||||
}
|
||||
if (!mIsFolderComplete)
|
||||
{
|
||||
mIsFolderComplete = getFolderViewModel()->isFolderComplete(this);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// calculate height as a single item (without any children), and reshapes rectangle to match
|
||||
LLFolderViewItem::arrange( width, height );
|
||||
|
|
@ -1786,7 +1795,9 @@ void LLFolderViewFolder::setOpenArrangeRecursively(BOOL openitem, ERecurseType r
|
|||
mIsOpen = openitem;
|
||||
if(!was_open && openitem)
|
||||
{
|
||||
getViewModelItem()->openItem();
|
||||
getViewModelItem()->openItem();
|
||||
// openItem() will request content, it won't be incomplete
|
||||
mIsFolderComplete = true;
|
||||
}
|
||||
else if(was_open && !openitem)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ protected:
|
|||
F32 mControlLabelRotation;
|
||||
LLFolderView* mRoot;
|
||||
bool mHasVisibleChildren,
|
||||
mIsFolderComplete, // indicates that some children were not loaded/added yet
|
||||
mIsCurSelection,
|
||||
mDragAndDropTarget,
|
||||
mIsMouseOverTitle,
|
||||
|
|
@ -221,6 +222,9 @@ public:
|
|||
|
||||
BOOL hasVisibleChildren() { return mHasVisibleChildren; }
|
||||
|
||||
// true if object can't have children
|
||||
BOOL isFolderComplete() { return mIsFolderComplete; }
|
||||
|
||||
// Call through to the viewed object and return true if it can be
|
||||
// removed. Returns true if it's removed.
|
||||
//virtual BOOL removeRecursively(BOOL single_item);
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ public:
|
|||
virtual void filter() = 0;
|
||||
|
||||
virtual bool contentsReady() = 0;
|
||||
virtual bool isFolderComplete(class LLFolderViewFolder*) = 0;
|
||||
virtual void setFolderView(LLFolderView* folder_view) = 0;
|
||||
virtual LLFolderViewFilter& getFilter() = 0;
|
||||
virtual const LLFolderViewFilter& getFilter() const = 0;
|
||||
|
|
@ -480,6 +481,7 @@ public:
|
|||
// By default, we assume the content is available. If a network fetch mechanism is implemented for the model,
|
||||
// this method needs to be overloaded and return the relevant fetch status.
|
||||
virtual bool contentsReady() { return true; }
|
||||
virtual bool isFolderComplete(LLFolderViewFolder* folder) { return true; }
|
||||
|
||||
struct ViewModelCompare
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1944,6 +1944,11 @@ void LLTabContainer::onNextBtn( const LLSD& data )
|
|||
scrollNext();
|
||||
}
|
||||
mScrolled = FALSE;
|
||||
|
||||
if(mCurrentTabIdx < mTabList.size()-1)
|
||||
{
|
||||
selectNextTab();
|
||||
}
|
||||
}
|
||||
|
||||
void LLTabContainer::onNextBtnHeld( const LLSD& data )
|
||||
|
|
@ -1952,6 +1957,11 @@ void LLTabContainer::onNextBtnHeld( const LLSD& data )
|
|||
{
|
||||
mScrollTimer.reset();
|
||||
scrollNext();
|
||||
|
||||
if(mCurrentTabIdx < mTabList.size()-1)
|
||||
{
|
||||
selectNextTab();
|
||||
}
|
||||
mScrolled = TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1963,6 +1973,11 @@ void LLTabContainer::onPrevBtn( const LLSD& data )
|
|||
scrollPrev();
|
||||
}
|
||||
mScrolled = FALSE;
|
||||
|
||||
if(mCurrentTabIdx > 0)
|
||||
{
|
||||
selectPrevTab();
|
||||
}
|
||||
}
|
||||
|
||||
void LLTabContainer::onJumpFirstBtn( const LLSD& data )
|
||||
|
|
@ -1981,6 +1996,11 @@ void LLTabContainer::onPrevBtnHeld( const LLSD& data )
|
|||
{
|
||||
mScrollTimer.reset();
|
||||
scrollPrev();
|
||||
|
||||
if(mCurrentTabIdx > 0)
|
||||
{
|
||||
selectPrevTab();
|
||||
}
|
||||
mScrolled = TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -2330,7 +2350,10 @@ void LLTabContainer::commitHoveredButton(S32 x, S32 y)
|
|||
LLTabTuple* tuple = *iter;
|
||||
S32 local_x = x - tuple->mButton->getRect().mLeft;
|
||||
S32 local_y = y - tuple->mButton->getRect().mBottom;
|
||||
if (tuple->mButton->pointInView(local_x, local_y) && tuple->mButton->getEnabled() && !tuple->mTabPanel->getVisible())
|
||||
// <FS:Ansariel> FIRE-16498: Only commit visible button
|
||||
//if (tuple->mButton->pointInView(local_x, local_y) && tuple->mButton->getEnabled() && !tuple->mTabPanel->getVisible())
|
||||
if (tuple->mButton->pointInView(local_x, local_y) && tuple->mButton->getEnabled() && tuple->mButton->getVisible() && !tuple->mTabPanel->getVisible())
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
// tuple->mButton->onCommit();
|
||||
// [SL:KB] - Patch: UI-TabRearrange | Checked: 2010-06-05 (Catznip-2.5)
|
||||
|
|
|
|||
|
|
@ -1968,9 +1968,12 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
|
|||
|
||||
if (mat)
|
||||
{
|
||||
gGL.getTexUnit(sDiffuseChannel)->bind(face->getTexture(LLRender::DIFFUSE_MAP));
|
||||
gGL.getTexUnit(normal_channel)->bind(face->getTexture(LLRender::NORMAL_MAP));
|
||||
//order is important here LLRender::DIFFUSE_MAP should be last, becouse it change
|
||||
//(gGL).mCurrTextureUnitIndex
|
||||
gGL.getTexUnit(specular_channel)->bind(face->getTexture(LLRender::SPECULAR_MAP));
|
||||
gGL.getTexUnit(normal_channel)->bind(face->getTexture(LLRender::NORMAL_MAP));
|
||||
gGL.getTexUnit(sDiffuseChannel)->bind(face->getTexture(LLRender::DIFFUSE_MAP), false, true);
|
||||
|
||||
|
||||
LLColor4 col = mat->getSpecularLightColor();
|
||||
F32 spec = mat->getSpecularLightExponent()/255.f;
|
||||
|
|
|
|||
|
|
@ -109,6 +109,29 @@ bool LLFolderViewModelInventory::contentsReady()
|
|||
return !LLInventoryModelBackgroundFetch::instance().folderFetchActive();
|
||||
}
|
||||
|
||||
bool LLFolderViewModelInventory::isFolderComplete(LLFolderViewFolder* folder)
|
||||
{
|
||||
LLFolderViewModelItemInventory* modelp = static_cast<LLFolderViewModelItemInventory*>(folder->getViewModelItem());
|
||||
LLUUID cat_id = modelp->getUUID();
|
||||
if (cat_id.isNull())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
|
||||
if (cat)
|
||||
{
|
||||
// don't need to check version - descendents_server == -1 if we have no data
|
||||
S32 descendents_server = cat->getDescendentCount();
|
||||
S32 descendents_actual = cat->getViewerDescendentCount();
|
||||
if (descendents_server == descendents_actual
|
||||
|| (descendents_actual > 0 && descendents_server == -1)) // content was loaded in previous session
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLFolderViewModelItemInventory::requestSort()
|
||||
{
|
||||
LLFolderViewModelItemCommon::requestSort();
|
||||
|
|
|
|||
|
|
@ -115,6 +115,7 @@ public:
|
|||
|
||||
void sort(LLFolderViewFolder* folder);
|
||||
bool contentsReady();
|
||||
bool isFolderComplete(LLFolderViewFolder* folder);
|
||||
bool startDrag(std::vector<LLFolderViewModelItem*>& items);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -2797,8 +2797,14 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
|
|||
}
|
||||
if (is_movable && move_is_into_outfit)
|
||||
{
|
||||
is_movable = FALSE;
|
||||
// tooltip?
|
||||
if((mUUID == my_outifts_id) || (getCategory() && getCategory()->getPreferredType() == LLFolderType::FT_NONE))
|
||||
{
|
||||
is_movable = ((inv_cat->getPreferredType() == LLFolderType::FT_NONE) || (inv_cat->getPreferredType() == LLFolderType::FT_OUTFIT));
|
||||
}
|
||||
else
|
||||
{
|
||||
is_movable = false;
|
||||
}
|
||||
}
|
||||
if (is_movable && (mUUID == model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE)))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1697,12 +1697,12 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
|
|||
F32 alpha = (1.f - (1.f * ((F32)llabs(i) / (F32)num_ticks_per_side1)));
|
||||
LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple1 + i) * smallest_subdivision1);
|
||||
|
||||
F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit1, mTickPixelSpacing1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
|
||||
|
||||
if (fmodf((F32)(i + sub_div_offset_1), (sGridMaxSubdivisionLevel / cur_subdivisions)) != 0.f)
|
||||
//No need check this condition to prevent tick position scaling (FIX MAINT-5207/5208)
|
||||
//F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit1, mTickPixelSpacing1), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
|
||||
/*if (fmodf((F32)(i + sub_div_offset_1), (sGridMaxSubdivisionLevel / cur_subdivisions)) != 0.f)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}*/
|
||||
|
||||
F32 tick_scale = 1.f;
|
||||
for (F32 division_level = sGridMaxSubdivisionLevel; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)
|
||||
|
|
@ -1730,12 +1730,12 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
|
|||
F32 alpha = (1.f - (1.f * ((F32)llabs(i) / (F32)num_ticks_per_side2)));
|
||||
LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple2 + i) * smallest_subdivision2);
|
||||
|
||||
F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit2, mTickPixelSpacing2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
|
||||
|
||||
if (fmodf((F32)(i + sub_div_offset_2), (sGridMaxSubdivisionLevel / cur_subdivisions)) != 0.f)
|
||||
//No need check this condition to prevent tick position scaling (FIX MAINT-5207/5208)
|
||||
//F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit2, mTickPixelSpacing2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
|
||||
/*if (fmodf((F32)(i + sub_div_offset_2), (sGridMaxSubdivisionLevel / cur_subdivisions)) != 0.f)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}*/
|
||||
|
||||
F32 tick_scale = 1.f;
|
||||
for (F32 division_level = sGridMaxSubdivisionLevel; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)
|
||||
|
|
|
|||
|
|
@ -1312,12 +1312,12 @@ void LLManipTranslate::renderSnapGuides()
|
|||
{
|
||||
tick_start = selection_center + (translate_axis * (smallest_grid_unit_scale * (F32)i - offset_nearest_grid_unit));
|
||||
|
||||
F32 cur_subdivisions = getSubdivisionLevel(tick_start, translate_axis, getMinGridScale());
|
||||
|
||||
if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / cur_subdivisions)) != 0.f)
|
||||
//No need check this condition to prevent tick position scaling (FIX MAINT-5207/5208)
|
||||
//F32 cur_subdivisions = getSubdivisionLevel(tick_start, translate_axis, getMinGridScale());
|
||||
/*if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / cur_subdivisions)) != 0.f)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}*/
|
||||
|
||||
// add in off-axis offset
|
||||
tick_start += (mSnapOffsetAxis * mSnapOffsetMeters);
|
||||
|
|
|
|||
|
|
@ -689,6 +689,22 @@ BOOL LLMuteList::isMuted(const LLUUID& id, const std::string& name, U32 flags) c
|
|||
return legacy_it != mLegacyMutes.end();
|
||||
}
|
||||
|
||||
BOOL LLMuteList::isMuted(const std::string& username, U32 flags) const
|
||||
{
|
||||
mute_set_t::const_iterator mute_iter = mMutes.begin();
|
||||
while(mute_iter != mMutes.end())
|
||||
{
|
||||
// can't convert "leha.test" into "LeHa TesT" so username comparison is more reliable
|
||||
if (mute_iter->mType == LLMute::AGENT
|
||||
&& LLCacheName::buildUsername(mute_iter->mName) == username)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
mute_iter++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// requestFromServer()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -101,7 +101,10 @@ public:
|
|||
|
||||
// Name is required to test against legacy text-only mutes.
|
||||
BOOL isMuted(const LLUUID& id, const std::string& name = LLStringUtil::null, U32 flags = 0) const;
|
||||
|
||||
|
||||
// Workaround for username-based mute search, a lot of string conversions so use cautiously
|
||||
BOOL isMuted(const std::string& username, U32 flags = 0) const;
|
||||
|
||||
// Alternate (convenience) form for places we don't need to pass the name, but do need flags
|
||||
BOOL isMuted(const LLUUID& id, U32 flags) const { return isMuted(id, LLStringUtil::null, flags); };
|
||||
|
||||
|
|
|
|||
|
|
@ -3320,6 +3320,13 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
break;
|
||||
case IM_GROUP_INVITATION:
|
||||
{
|
||||
if (!is_muted)
|
||||
{
|
||||
// group is not blocked, but we still need to check agent that sent the invitation
|
||||
// and we have no agent's id
|
||||
// Note: server sends username "first.last".
|
||||
is_muted |= LLMuteList::getInstance()->isMuted(name);
|
||||
}
|
||||
if (is_do_not_disturb || is_muted)
|
||||
{
|
||||
send_do_not_disturb_message(msg, from_id);
|
||||
|
|
|
|||
|
|
@ -1667,8 +1667,14 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
|
|||
}
|
||||
else if (local_id == parcel_mgr.mAgentParcel->getLocalID())
|
||||
{
|
||||
// updated agent parcel
|
||||
parcel_mgr.mAgentParcel->unpackMessage(msg);
|
||||
// Parcels in different regions can have same ids.
|
||||
LLViewerRegion* parcel_region = LLWorld::getInstance()->getRegion( msg->getSender() );
|
||||
LLViewerRegion* agent_region = gAgent.getRegion();
|
||||
if (parcel_region && agent_region && parcel_region->getRegionID() == agent_region->getRegionID())
|
||||
{
|
||||
// updated agent parcel
|
||||
parcel_mgr.mAgentParcel->unpackMessage(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -322,6 +322,10 @@ if [ \( $WANTS_CLEAN -eq $TRUE \) -a \( $WANTS_BUILD -eq $FALSE \) ] ; then
|
|||
elif [ $PLATFORM == "win32" ] ; then
|
||||
if [ "${ND_AUTOBUILD_ARCH}" == "x64" ]
|
||||
then
|
||||
rm -rf build-vc120_x64/ipch
|
||||
rm -rf build-vc120_x64/llcommon
|
||||
rm -rf build-vc120_x64/newview/firestorm-bin.dir
|
||||
rm -rf build-vc120_x64/packages/include
|
||||
rm -rf build-vc120_x64/*
|
||||
mkdir -p build-vc120_x64/logs
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue