diff --git a/.hgtags b/.hgtags index 43c50d422d..171502899b 100755 --- a/.hgtags +++ b/.hgtags @@ -590,3 +590,4 @@ a3143db58a0f6b005232bf9018e7fef17ff9ec90 6.1.0-release 82a89165e5929a6c3073d6cd60a543cb395f147b 6.2.0-release 706bdc7e25c6e6b8fb56f4a13fcce2936e70a79c 6.2.1-release ec09daf1899c1c01c4ba0ba950fae572f2a612a8 6.2.2-release +ab2ec5c5423b277d23fd0511ce50c15123ff2e03 6.2.3-release diff --git a/doc/contributions.txt b/doc/contributions.txt index dafe84b707..c98ac3bc94 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1330,6 +1330,7 @@ Sovereign Engineer STORM-2143 STORM-2148 MAINT-7343 + SL-11079 SpacedOut Frye VWR-34 VWR-45 diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index bf4dc17197..b8898ee038 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -3046,6 +3046,7 @@ BOOL LLWindowWin32::restoreGamma() { if (mCustomGammaSet != FALSE) { + LL_DEBUGS("Window") << "Restoring gamma" << LL_ENDL; mCustomGammaSet = FALSE; return SetDeviceGammaRamp(mhDC, mPrevGammaRamp); } @@ -3059,8 +3060,15 @@ BOOL LLWindowWin32::setGamma(const F32 gamma) //Get the previous gamma ramp to restore later. if (mCustomGammaSet == FALSE) { - if (GetDeviceGammaRamp(mhDC, mPrevGammaRamp) == FALSE) - return FALSE; + if (!gGLManager.mIsIntel) // skip for Intel GPUs (see SL-11341) + { + LL_DEBUGS("Window") << "Getting the previous gamma ramp to restore later" << LL_ENDL; + if(GetDeviceGammaRamp(mhDC, mPrevGammaRamp) == FALSE) + { + LL_WARNS("Window") << "Failed to get the previous gamma ramp" << LL_ENDL; + return FALSE; + } + } mCustomGammaSet = TRUE; } diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index bee9433817..42cc526d6c 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.2.3 +6.2.4 diff --git a/indra/newview/fsfloaterim.cpp b/indra/newview/fsfloaterim.cpp index 577a11dbb4..288292860e 100644 --- a/indra/newview/fsfloaterim.cpp +++ b/indra/newview/fsfloaterim.cpp @@ -919,7 +919,7 @@ BOOL FSFloaterIM::postBuild() bool isFSSupportGroup = FSData::getInstance()->isFirestormGroup(mSessionID); childSetVisible("testing_panel", FSData::getInstance()->isTestingGroup(mSessionID)); - childSetVisible("support_panel", FSData::getInstance()->isSupportGroup(mSessionID)); + childSetVisible("support_panel", isFSSupportGroup); // Viewer version popup if (isFSSupportGroup) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index ec3e3301c6..1143e3db9e 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2992,7 +2992,7 @@ bool LLAgentCamera::isfollowCamLocked() BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position) { - // Ansariel: Remember the current object point pointed at - we might need it later + // Remember the current object point pointed at - we might need it later mPointAtObject = object; // disallow pointing at attachments and avatars @@ -3000,6 +3000,14 @@ BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, static LLCachedControl private_pointat(gSavedSettings, "PrivatePointAtTarget", false); if (object && (object->isAttachment() || object->isAvatar() || private_pointat)) { + // Remove HUD effect if it still exists + if (mPointAt && !mPointAt->isDead()) + { + mPointAt->clearPointAtTarget(); + mPointAt->markDead(); + } + // + return FALSE; } if (!mPointAt || mPointAt->isDead()) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 86e20dbb5b..c09ae35319 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -6925,6 +6925,37 @@ void handle_attachment_touch(const LLUUID& idItem) } // +// Texture Refresh on worn attachments +void handle_attachment_texture_refresh(const LLUUID& idItem) +{ + // get the associated worn attachment's UUID + const LLInventoryItem* pItem = gInventory.getItem(idItem); + if ( (!isAgentAvatarValid()) || (!pItem) ) + { + return; + } + + LLViewerObject* pAttachObj = gAgentAvatarp->getWornAttachment(pItem->getLinkedUUID()); + if (!pAttachObj) + return; + + // iterate through the list of child prims, call texture refresh on each one of them + LLViewerObject::const_child_list_t& children = pAttachObj->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = children.begin(); + iter != children.end(); iter++) + { + LLViewerObject* child = *iter; + + // NULL means, we don't have individual texture faces selected, + // so refresh them all + handle_object_tex_refresh(child, NULL); + } + + // texture refresh the root prim, too + handle_object_tex_refresh(pAttachObj, NULL); +} +// + // virtual void LLObjectBridge::performAction(LLInventoryModel* model, std::string action) { @@ -6971,6 +7002,12 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action) handle_attachment_touch(mUUID); } // + // Texture Refresh on worn attachments + else if ("texture_refresh_attachment" == action) + { + handle_attachment_texture_refresh(mUUID); + } + // else if (isRemoveAction(action)) { LLAppearanceMgr::instance().removeItemFromAvatar(mUUID); @@ -7161,6 +7198,13 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if ( ((flags & FIRST_SELECTED_ITEM) == 0) || (!enable_attachment_touch(mUUID)) ) disabled_items.push_back(std::string("Touch Attachment")); + // Texture Refresh on worn attachments + if (item->getType() == LLAssetType::AT_OBJECT) + { + items.push_back(std::string("Texture Refresh Attachment")); + } + // + items.push_back(std::string("Detach From Yourself")); // [RLVa:KB] - Checked: 2010-02-27 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a if ( (rlv_handler_t::isEnabled()) && (!gRlvAttachmentLocks.canDetach(item)) ) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 62d3ed3408..f3d29c3c9a 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3119,6 +3119,67 @@ void destroy_texture(const LLUUID& id) // will be used by the texture refresh f LLAppViewer::getTextureCache()->removeFromCache(id); } +void handle_object_tex_refresh(LLViewerObject* object, LLSelectNode* node) +{ + U8 te_count = object->getNumTEs(); + // map from texture ID to list of faces using it + typedef std::map< LLUUID, std::vector > map_t; + map_t faces_per_texture; + for (U8 i = 0; i < te_count; ++i) + { + // "node" will be NULL when invoked from inventory menu, + // otherwise it will hold the root node of the selection and we + // need to make sure only to refresh the selected faces + if (node && !node->isTESelected(i)) continue; + + LLViewerTexture* img = object->getTEImage(i); + faces_per_texture[img->getID()].push_back(i); + + if (object->getTE(i)->getMaterialParams().notNull()) + { + LLViewerTexture* norm_img = object->getTENormalMap(i); + faces_per_texture[norm_img->getID()].push_back(i); + + LLViewerTexture* spec_img = object->getTESpecularMap(i); + faces_per_texture[spec_img->getID()].push_back(i); + } + } + + map_t::iterator it; + for (it = faces_per_texture.begin(); it != faces_per_texture.end(); ++it) + { + destroy_texture(it->first); + } + + // Refresh sculpt texture + if (object->isSculpted()) + { + LLSculptParams *sculpt_params = (LLSculptParams *)object->getParameterEntry(LLNetworkData::PARAMS_SCULPT); + if (sculpt_params) + { + LLUUID sculpt_uuid = sculpt_params->getSculptTexture(); + + LLViewerFetchedTexture* tx = LLViewerTextureManager::getFetchedTexture(sculpt_uuid); + if (tx) + { + S32 num_volumes = tx->getNumVolumes(LLRender::SCULPT_TEX); + const LLViewerTexture::ll_volume_list_t* pVolumeList = tx->getVolumeList(LLRender::SCULPT_TEX); + + destroy_texture(sculpt_uuid); + + for (S32 idxVolume = 0; idxVolume < num_volumes; ++idxVolume) + { + LLVOVolume* pVolume = pVolumeList->at(idxVolume); + if (pVolume) + { + pVolume->notifyMeshLoaded(); + } + } + } + } + } +} + class LLObjectTexRefresh : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -3128,61 +3189,7 @@ class LLObjectTexRefresh : public view_listener_t iter != LLSelectMgr::getInstance()->getSelection()->valid_end(); iter++) { LLSelectNode* node = *iter; - - U8 te_count = node->getObject()->getNumTEs(); - // map from texture ID to list of faces using it - typedef std::map< LLUUID, std::vector > map_t; - map_t faces_per_texture; - for (U8 i = 0; i < te_count; ++i) - { - if (!node->isTESelected(i)) continue; - - LLViewerTexture* img = node->getObject()->getTEImage(i); - faces_per_texture[img->getID()].push_back(i); - - if (node->getObject()->getTE(i)->getMaterialParams().notNull()) - { - LLViewerTexture* norm_img = node->getObject()->getTENormalMap(i); - faces_per_texture[norm_img->getID()].push_back(i); - - LLViewerTexture* spec_img = node->getObject()->getTESpecularMap(i); - faces_per_texture[spec_img->getID()].push_back(i); - } - } - - map_t::iterator it; - for (it = faces_per_texture.begin(); it != faces_per_texture.end(); ++it) - { - destroy_texture(it->first); - } - - // Refresh sculpt texture - if (node->getObject()->isSculpted()) - { - LLSculptParams *sculpt_params = (LLSculptParams *)node->getObject()->getParameterEntry(LLNetworkData::PARAMS_SCULPT); - if (sculpt_params) - { - LLUUID sculpt_uuid = sculpt_params->getSculptTexture(); - - LLViewerFetchedTexture* tx = LLViewerTextureManager::getFetchedTexture(sculpt_uuid); - if (tx) - { - S32 num_volumes = tx->getNumVolumes(LLRender::SCULPT_TEX); - const LLViewerTexture::ll_volume_list_t* pVolumeList = tx->getVolumeList(LLRender::SCULPT_TEX); - - destroy_texture(sculpt_uuid); - - for (S32 idxVolume = 0; idxVolume < num_volumes; ++idxVolume) - { - LLVOVolume* pVolume = pVolumeList->at(idxVolume); - if (pVolume) - { - pVolume->notifyMeshLoaded(); - } - } - } - } - } + handle_object_tex_refresh(node->getObject(),node); } return true; diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index d40dcdfce4..b84d55ff83 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -38,6 +38,7 @@ class LLView; class LLParcelSelection; class LLObjectSelection; class LLSelectNode; +class LLViewerObject; // [RLVa:KB] - Checked: RLVa-2.0.0 void set_use_wireframe(bool useWireframe); @@ -103,6 +104,7 @@ void handle_object_build(void*); void handle_object_touch(); bool enable_object_open(); void handle_object_open(); +void handle_object_tex_refresh(LLViewerObject* object, LLSelectNode* node); bool visible_take_object(); bool tools_visible_take_object(); diff --git a/indra/newview/sanitycheck.cpp b/indra/newview/sanitycheck.cpp index 18c9f20701..547503d7b0 100644 --- a/indra/newview/sanitycheck.cpp +++ b/indra/newview/sanitycheck.cpp @@ -71,5 +71,18 @@ void SanityCheck::onSanity(LLControlVariable* controlp) args["SANITY_MESSAGE"] = LLTrans::getString(checkType, map); args["SANITY_COMMENT"] = controlp->getSanityComment(); args["CURRENT_VALUE"] = controlp->getValue().asString(); - LLNotificationsUtil::add("SanityCheck", args); + LLNotificationsUtil::add("SanityCheck", args, LLSD(), boost::bind(SanityCheck::onFixIt, _1, _2, controlp)); +} + +void SanityCheck::onFixIt(const LLSD& notification, const LLSD& response, LLControlVariable* controlp) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) // Fix it + { + if (controlp) + { + controlp->resetToDefault(true); + return; + } + } } diff --git a/indra/newview/sanitycheck.h b/indra/newview/sanitycheck.h index f9c5177e25..d2faf23ea8 100644 --- a/indra/newview/sanitycheck.h +++ b/indra/newview/sanitycheck.h @@ -35,6 +35,7 @@ public: void init(); static void onSanity(LLControlVariable* controlp); + static void onFixIt(const LLSD& notification, const LLSD& response, LLControlVariable* controlp); }; #endif // SANITYCHECK_H diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml index fa9ddbca2d..a3dba2c65d 100644 --- a/indra/newview/skins/default/xui/de/menu_inventory.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory.xml @@ -110,6 +110,7 @@ + diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index c75b73be8f..e3d4ed9e90 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -4854,6 +4854,14 @@ Grund: [SANITY_COMMENT] Aktueller Wert: [CURRENT_VALUE]
+