From 8fdfda9b50e0dcee50652c502825783e8794815f Mon Sep 17 00:00:00 2001 From: thickbrick Date: Wed, 24 Nov 2010 23:48:10 +0200 Subject: Fix #729: Some PNG images lose alpha channel Ignore the background color specified in PNG's bKGD chunk, since it's only there as a fallback. --- linden/indra/llimage/llpngwrapper.cpp | 18 ++++-------------- linden/indra/llimage/llpngwrapper.h | 3 --- 2 files changed, 4 insertions(+), 17 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/llimage/llpngwrapper.cpp b/linden/indra/llimage/llpngwrapper.cpp index 0dd991a..2274a38 100644 --- a/linden/indra/llimage/llpngwrapper.cpp +++ b/linden/indra/llimage/llpngwrapper.cpp @@ -56,8 +56,6 @@ LLPngWrapper::LLPngWrapper() mCompressionType( 0 ), mFilterMethod( 0 ), mFinalSize( 0 ), - mHasBKGD(false), - mBackgroundColor(), mGamma(0.f) { } @@ -117,9 +115,9 @@ void LLPngWrapper::writeFlush(png_structp png_ptr) } // Read the PNG file using the libpng. The low-level interface is used here -// because we want to do various transformations (including setting the -// matte background if any, and applying gama) which can't be done with -// the high-level interface. The scanline also begins at the bottom of +// because we want to do various transformations (including applying gama) +// which can't be done with the high-level interface. +// The scanline also begins at the bottom of // the image (per SecondLife conventions) instead of at the top, so we // must assign row-pointers in "reverse" order. BOOL LLPngWrapper::readPng(U8* src, LLImageRaw* rawImage, ImageInfo *infop) @@ -207,8 +205,7 @@ void LLPngWrapper::normalizeImage() // 2. Convert grayscales to RGB // 3. Create alpha layer from transparency // 4. Ensure 8-bpp for all images - // 5. Apply background matte if any - // 6. Set (or guess) gamma + // 5. Set (or guess) gamma if (mColorType == PNG_COLOR_TYPE_PALETTE) { @@ -235,12 +232,6 @@ void LLPngWrapper::normalizeImage() { png_set_strip_16(mReadPngPtr); } - mHasBKGD = png_get_bKGD(mReadPngPtr, mReadInfoPtr, &mBackgroundColor); - if (mHasBKGD) - { - png_set_background(mReadPngPtr, mBackgroundColor, - PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); - } #if LL_DARWIN const F64 SCREEN_GAMMA = 1.8; @@ -267,7 +258,6 @@ void LLPngWrapper::updateMetaData() mBitDepth = png_get_bit_depth(mReadPngPtr, mReadInfoPtr); mColorType = png_get_color_type(mReadPngPtr, mReadInfoPtr); mChannels = png_get_channels(mReadPngPtr, mReadInfoPtr); - mHasBKGD = png_get_bKGD(mReadPngPtr, mReadInfoPtr, &mBackgroundColor); } // Method to write raw image into PNG at dest. The raw scanline begins diff --git a/linden/indra/llimage/llpngwrapper.h b/linden/indra/llimage/llpngwrapper.h index 2e6c1dc..0c3168c 100644 --- a/linden/indra/llimage/llpngwrapper.h +++ b/linden/indra/llimage/llpngwrapper.h @@ -94,9 +94,6 @@ private: U32 mFinalSize; - bool mHasBKGD; - png_color_16p mBackgroundColor; - F64 mGamma; std::string mErrorMessage; -- cgit v1.1 From a6ada6652524fc2b708bdae82ca3b5cb44bbbb2d Mon Sep 17 00:00:00 2001 From: thickbrick Date: Tue, 30 Nov 2010 16:53:55 +0200 Subject: Fix #673: IMs & Logging prefs don't persist Enable per-account settings only after we have an account. Also, make settings that are saved locally not depend on UserInfoReply being received. --- linden/indra/newview/llfloaterpreference.cpp | 14 ++ linden/indra/newview/llfloaterpreference.h | 3 + linden/indra/newview/llprefsim.cpp | 166 ++++++++++++--------- linden/indra/newview/llprefsim.h | 1 + linden/indra/newview/llstartup.cpp | 3 + .../default/xui/en-us/panel_preferences_im.xml | 3 + 6 files changed, 117 insertions(+), 73 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/llfloaterpreference.cpp b/linden/indra/newview/llfloaterpreference.cpp index 2fe4b4d..0f81be6 100644 --- a/linden/indra/newview/llfloaterpreference.cpp +++ b/linden/indra/newview/llfloaterpreference.cpp @@ -362,6 +362,11 @@ void LLPreferenceCore::setPersonalInfo(const std::string& visibility, bool im_vi mPrefsIM->setPersonalInfo(visibility, im_via_email, email); } +void LLPreferenceCore::updateIsLoggedIn(bool enable) +{ + mPrefsIM->preparePerAccountPrefs(enable); +} + void LLPreferenceCore::refreshEnabledGraphics() { LLFloaterHardwareSettings::instance()->refreshEnabledState(); @@ -537,6 +542,15 @@ void LLFloaterPreference::updateUserInfo(const std::string& visibility, bool im_ } } +// static +void LLFloaterPreference::updateIsLoggedIn(bool enable) +{ + if(sInstance && sInstance->mPreferenceCore) + { + sInstance->mPreferenceCore->updateIsLoggedIn(enable); + } +} + void LLFloaterPreference::refreshEnabledGraphics() { sInstance->mPreferenceCore->refreshEnabledGraphics(); diff --git a/linden/indra/newview/llfloaterpreference.h b/linden/indra/newview/llfloaterpreference.h index c52f541..931c8b6 100644 --- a/linden/indra/newview/llfloaterpreference.h +++ b/linden/indra/newview/llfloaterpreference.h @@ -73,6 +73,7 @@ public: LLTabContainer* getTabContainer() { return mTabContainer; } void setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email); + void updateIsLoggedIn(bool enable); static void onTabChanged(void* user_data, bool from_click); @@ -113,6 +114,8 @@ public: // static data update, called from message handler static void updateUserInfo(const std::string& visibility, bool im_via_email, const std::string& email); + // static data update, called after login + static void updateIsLoggedIn(bool enable); // refresh all the graphics preferences menus static void refreshEnabledGraphics(); diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp index 9e86cd3..5ac2bb2 100644 --- a/linden/indra/newview/llprefsim.cpp +++ b/linden/indra/newview/llprefsim.cpp @@ -66,6 +66,7 @@ public: void apply(); void cancel(); void setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email); + void preparePerAccountPrefs(bool enable); void enableHistory(); static void onClickLogPath(void* user_data); @@ -76,6 +77,7 @@ public: protected: bool mGotPersonalInfo; + bool mGotPerAccountSettings; bool mOriginalIMViaEmail; bool mOriginalHideOnlineStatus; @@ -86,7 +88,9 @@ protected: LLPrefsIMImpl::LLPrefsIMImpl() : LLPanel(std::string("IM Prefs Panel")), mGotPersonalInfo(false), - mOriginalIMViaEmail(false) + mGotPerAccountSettings(false), + mOriginalIMViaEmail(false), + mOriginalHideOnlineStatus(false) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_im.xml"); } @@ -106,55 +110,38 @@ BOOL LLPrefsIMImpl::postBuild() childSetLabelArg("send_im_to_email", "[EMAIL]", getString("log_in_to_change")); - // Don't enable this until we get personal data - // Unless we're already logged in. Some non-SL grids won't send us the data we need -- MC - childSetEnabled("include_im_in_chat_console", LLStartUp::isLoggedIn()); - childSetEnabled("include_im_in_chat_history", LLStartUp::isLoggedIn()); - childSetEnabled("show_timestamps_check", LLStartUp::isLoggedIn()); - childSetEnabled("friends_online_notify_checkbox", LLStartUp::isLoggedIn()); - - childSetEnabled("online_visibility", LLStartUp::isLoggedIn()); - childSetEnabled("send_im_to_email", LLStartUp::isLoggedIn()); - childSetEnabled("log_instant_messages", LLStartUp::isLoggedIn()); - childSetEnabled("log_chat", LLStartUp::isLoggedIn()); - childSetEnabled("log_show_history", LLStartUp::isLoggedIn()); - childSetEnabled("log_path_button", LLStartUp::isLoggedIn()); - childSetEnabled("busy_response", LLStartUp::isLoggedIn()); - childSetEnabled("log_instant_messages_timestamp", LLStartUp::isLoggedIn()); - childSetEnabled("log_chat_timestamp", LLStartUp::isLoggedIn()); - childSetEnabled("log_chat_IM", LLStartUp::isLoggedIn()); - childSetEnabled("log_date_timestamp", LLStartUp::isLoggedIn()); - - childSetText("busy_response", getString("log_in_to_change")); + // Don't enable these until we get personal data + childSetEnabled("online_visibility", false); + childSetEnabled("send_im_to_email", false); + // These are safe to enable + childSetEnabled("include_im_in_chat_console", true); + childSetEnabled("include_im_in_chat_history", true); + childSetEnabled("show_timestamps_check", true); + childSetEnabled("friends_online_notify_checkbox", true); + childSetEnabled("vertical-imtabs-toggle", true); childSetValue("include_im_in_chat_console", gSavedSettings.getBOOL("IMInChatConsole")); childSetValue("include_im_in_chat_history", gSavedSettings.getBOOL("IMInChatHistory")); childSetValue("show_timestamps_check", gSavedSettings.getBOOL("IMShowTimestamps")); childSetValue("friends_online_notify_checkbox", gSavedSettings.getBOOL("ChatOnlineNotification")); childSetValue("vertical-imtabs-toggle", gSavedSettings.getBOOL("VerticalIMTabs")); - childSetText("log_path_string", gSavedPerAccountSettings.getString("InstantMessageLogPath")); - childSetValue("log_instant_messages", gSavedPerAccountSettings.getBOOL("LogInstantMessages")); - childSetValue("log_chat", gSavedPerAccountSettings.getBOOL("LogChat")); - childSetValue("log_show_history", gSavedPerAccountSettings.getBOOL("LogShowHistory")); - childSetValue("log_instant_messages_timestamp", gSavedPerAccountSettings.getBOOL("IMLogTimestamp")); - childSetValue("log_chat_timestamp", gSavedPerAccountSettings.getBOOL("LogChatTimestamp")); - childSetValue("log_chat_IM", gSavedPerAccountSettings.getBOOL("LogChatIM")); - childSetValue("log_date_timestamp", gSavedPerAccountSettings.getBOOL("LogTimestampDate")); - childSetAction("log_path_button", onClickLogPath, this); childSetCommitCallback("log_chat",onCommitLogging,this); childSetCommitCallback("log_instant_messages",onCommitLogging,this); childSetAction("busy_adv_btn", onClickBusyAdvanced, this); + preparePerAccountPrefs(LLStartUp::isLoggedIn()); + return TRUE; } void LLPrefsIMImpl::enableHistory() { - if (childGetValue("log_instant_messages").asBoolean() || childGetValue("log_chat").asBoolean()) + if (mGotPerAccountSettings && + (childGetValue("log_instant_messages").asBoolean() || childGetValue("log_chat").asBoolean())) { childEnable("log_show_history"); childEnable("log_path_button"); @@ -168,23 +155,16 @@ void LLPrefsIMImpl::enableHistory() void LLPrefsIMImpl::apply() { - LLTextEditor* busy = getChild("busy_response"); - LLWString busy_response; - if (busy) busy_response = busy->getWText(); - LLWStringUtil::replaceTabsWithSpaces(busy_response, 4); - LLWStringUtil::replaceChar(busy_response, '\n', '^'); - LLWStringUtil::replaceChar(busy_response, ' ', '%'); - - if(mGotPersonalInfo) + if (mGotPerAccountSettings) { - + LLTextEditor* busy = getChild("busy_response"); + LLWString busy_response; + if (busy) busy_response = busy->getWText(); + LLWStringUtil::replaceTabsWithSpaces(busy_response, 4); + LLWStringUtil::replaceChar(busy_response, '\n', '^'); + LLWStringUtil::replaceChar(busy_response, ' ', '%'); gSavedPerAccountSettings.setString("BusyModeResponse", std::string(wstring_to_utf8str(busy_response))); - gSavedSettings.setBOOL("IMInChatConsole", childGetValue("include_im_in_chat_console").asBoolean()); - gSavedSettings.setBOOL("IMInChatHistory", childGetValue("include_im_in_chat_history").asBoolean()); - gSavedSettings.setBOOL("IMShowTimestamps", childGetValue("show_timestamps_check").asBoolean()); - gSavedSettings.setBOOL("ChatOnlineNotification", childGetValue("friends_online_notify_checkbox").asBoolean()); - gSavedPerAccountSettings.setString("InstantMessageLogPath", childGetText("log_path_string")); gSavedPerAccountSettings.setBOOL("LogInstantMessages",childGetValue("log_instant_messages").asBoolean()); gSavedPerAccountSettings.setBOOL("LogChat",childGetValue("log_chat").asBoolean()); @@ -207,7 +187,10 @@ void LLPrefsIMImpl::apply() gSavedSettings.getString("FirstName"), gSavedSettings.getString("LastName") ); } LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir()); - + } + + if (mGotPersonalInfo) + { bool new_im_via_email = childGetValue("send_im_to_email").asBoolean(); bool new_hide_online = childGetValue("online_visibility").asBoolean(); @@ -237,9 +220,15 @@ void LLPrefsIMImpl::apply() gAgent.sendReliableMessage(); } } + gSavedSettings.setBOOL("VerticalIMTabs", childGetValue("vertical-imtabs-toggle").asBoolean()); + gSavedSettings.setBOOL("IMInChatConsole", childGetValue("include_im_in_chat_console").asBoolean()); + gSavedSettings.setBOOL("IMInChatHistory", childGetValue("include_im_in_chat_history").asBoolean()); + gSavedSettings.setBOOL("IMShowTimestamps", childGetValue("show_timestamps_check").asBoolean()); + gSavedSettings.setBOOL("ChatOnlineNotification", childGetValue("friends_online_notify_checkbox").asBoolean()); } +// Enable and set the value of settings recieved from the sim in AgentInfoReply void LLPrefsIMImpl::setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email) { mGotPersonalInfo = true; @@ -261,36 +250,10 @@ void LLPrefsIMImpl::setPersonalInfo(const std::string& visibility, bool im_via_e mOriginalHideOnlineStatus = true; } - childEnable("include_im_in_chat_console"); - childEnable("include_im_in_chat_history"); - childEnable("show_timestamps_check"); - childEnable("friends_online_notify_checkbox"); - childSetValue("online_visibility", mOriginalHideOnlineStatus); childSetLabelArg("online_visibility", "[DIR_VIS]", mDirectoryVisibility); childEnable("send_im_to_email"); childSetValue("send_im_to_email", im_via_email); - childEnable("log_instant_messages"); - childEnable("log_chat"); - childEnable("busy_response"); - childEnable("log_instant_messages_timestamp"); - childEnable("log_chat_timestamp"); - childEnable("log_chat_IM"); - childEnable("log_date_timestamp"); - - //RN: get wide string so replace char can work (requires fixed-width encoding) - LLWString busy_response = utf8str_to_wstring( gSavedPerAccountSettings.getString("BusyModeResponse") ); - LLWStringUtil::replaceChar(busy_response, '^', '\n'); - LLWStringUtil::replaceChar(busy_response, '%', ' '); - childSetText("busy_response", wstring_to_utf8str(busy_response)); -// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) - if (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) - { - childDisable("busy_response"); - } -// [/RLVa:KB] - - enableHistory(); // Truncate the e-mail address if it's too long (to prevent going off // the edge of the dialog). @@ -300,10 +263,62 @@ void LLPrefsIMImpl::setPersonalInfo(const std::string& visibility, bool im_via_e display_email.resize(30); display_email += "..."; } - + else if (display_email.empty()) + { + display_email = getString("default_email_used"); + } childSetLabelArg("send_im_to_email", "[EMAIL]", display_email); } +// Enable and set the value of settings that need an account name +void LLPrefsIMImpl::preparePerAccountPrefs(bool enable) +{ + if (mGotPerAccountSettings && enable) + { + return; // prevent overwriting unsaved changes. + } + mGotPerAccountSettings = enable; + + childSetEnabled("log_chat", enable); + childSetEnabled("log_chat_timestamp", enable); + childSetEnabled("log_chat_IM", enable); + childSetEnabled("log_instant_messages_timestamp", enable); + childSetEnabled("log_instant_messages", enable); + childSetEnabled("log_date_timestamp", enable); + + childSetValue("log_chat", gSavedPerAccountSettings.getBOOL("LogChat")); + childSetValue("log_chat_timestamp", gSavedPerAccountSettings.getBOOL("LogChatTimestamp")); + childSetValue("log_chat_IM", gSavedPerAccountSettings.getBOOL("LogChatIM")); + childSetValue("log_instant_messages_timestamp", gSavedPerAccountSettings.getBOOL("IMLogTimestamp")); + childSetValue("log_instant_messages", gSavedPerAccountSettings.getBOOL("LogInstantMessages")); + childSetValue("log_date_timestamp", gSavedPerAccountSettings.getBOOL("LogTimestampDate")); + + childSetValue("log_show_history", gSavedPerAccountSettings.getBOOL("LogShowHistory")); + enableHistory(); + childSetText("log_path_string", gSavedPerAccountSettings.getString("InstantMessageLogPath")); + + childSetEnabled("busy_response", enable); + if (enable) + { + //RN: get wide string so replace char can work (requires fixed-width encoding) + LLWString busy_response = utf8str_to_wstring( gSavedPerAccountSettings.getString("BusyModeResponse") ); + LLWStringUtil::replaceChar(busy_response, '^', '\n'); + LLWStringUtil::replaceChar(busy_response, '%', ' '); + childSetText("busy_response", wstring_to_utf8str(busy_response)); + } + else + { + childSetText("busy_response", getString("log_in_to_change")); + } +// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) + if (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) + { + childDisable("busy_response"); + } +// [/RLVa:KB] + + childSetEnabled("busy_adv_btn", enable); +} // static void LLPrefsIMImpl::onClickBusyAdvanced(void* user_data) @@ -363,6 +378,11 @@ void LLPrefsIM::setPersonalInfo(const std::string& visibility, bool im_via_email impl.setPersonalInfo(visibility, im_via_email, email); } +void LLPrefsIM::preparePerAccountPrefs(bool enable) +{ + impl.preparePerAccountPrefs(enable); +} + LLPanel* LLPrefsIM::getPanel() { return &impl; diff --git a/linden/indra/newview/llprefsim.h b/linden/indra/newview/llprefsim.h index 90bf465..acf9b0f 100644 --- a/linden/indra/newview/llprefsim.h +++ b/linden/indra/newview/llprefsim.h @@ -46,6 +46,7 @@ public: void apply(); void cancel(); void setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email); + void preparePerAccountPrefs(bool enable); LLPanel* getPanel(); diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index b744961..aba9bb6 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -101,6 +101,7 @@ #include "llfloatergesture.h" #include "llfloaterhud.h" #include "llfloaterland.h" +#include "llfloaterpreference.h" #include "llfloaterteleporthistory.h" #include "llfloatertopobjects.h" #include "llfloatertos.h" @@ -2876,6 +2877,8 @@ bool idle_startup() gDebugView->mFastTimerView->setVisible(TRUE); #endif + LLFloaterPreference::updateIsLoggedIn(true); + return TRUE; } diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml index e64f6c7..fe17e7a 100644 --- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml +++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml @@ -22,6 +22,9 @@ log in to change + + using default address + getDataSize() > 0); + mLoadedDiscard = mDesiredDiscard; mState = DECODE_IMAGE; mWriteToCacheState = NOT_WRITE ; LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize() -- cgit v1.1 From 9f13705eb64c74184a67bb5eba24f3e8c6531e89 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Sat, 15 Jan 2011 00:06:28 +0200 Subject: Fix small potential leak of CacheReadResponder objects Taken from V2/Henry. --- linden/indra/newview/lltexturefetch.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp index 6ab4d24..83a54e4 100644 --- a/linden/indra/newview/lltexturefetch.cpp +++ b/linden/indra/newview/lltexturefetch.cpp @@ -665,16 +665,17 @@ bool LLTextureFetchWorker::doWork(S32 param) mLoaded = FALSE; setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it - CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage); if (mUrl.compare(0, 7, "file://") == 0) { // read file from local disk std::string filename = mUrl.substr(7, std::string::npos); + CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage); mCacheReadHandle = mFetcher->mTextureCache->readFromCache(filename, mID, cache_priority, offset, size, responder); } else if (mUrl.empty()) { + CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage); mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority, offset, size, responder); } -- cgit v1.1 From fe9a3fe4bfb5589332a21fd07ce4966aaf38117e Mon Sep 17 00:00:00 2001 From: thickbrick Date: Sat, 15 Jan 2011 01:11:46 +0200 Subject: Fix offset reading from local files Fix offset reading from local files (non-cached.) This is a bug, so needs fixing, even though the offset is always 0 here, currently. Taken from Cool Viewer (patch orginally by Max Fox.) --- linden/indra/newview/lltexturecache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp index a1a9a39..4efd10c 100644 --- a/linden/indra/newview/lltexturecache.cpp +++ b/linden/indra/newview/lltexturecache.cpp @@ -250,9 +250,9 @@ bool LLTextureCacheLocalFileWorker::doRead() } } #else - if (!mDataSize || mDataSize > local_size) + if (!mDataSize || mDataSize + mOffset > local_size) { - mDataSize = local_size; + mDataSize = local_size - mOffset; } mReadData = new U8[mDataSize]; -- cgit v1.1 From 77883aef4bb8531c83bdeac45a5463a76e1158d7 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Sun, 16 Jan 2011 02:03:16 +0200 Subject: Fix #756: Link button in build floater can crash Prevent null dereference when the selection has no primary object, e.g. rubber band selection. --- linden/indra/newview/llfloatertools.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp index 683ebd4..cc205ee 100644 --- a/linden/indra/newview/llfloatertools.cpp +++ b/linden/indra/newview/llfloatertools.cpp @@ -1256,7 +1256,8 @@ void LLFloaterTools::onClickLink(void* data) } S32 max_linked_prims = 0; - if(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()->usePhysics()) + LLViewerObject* first_rootp = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(); + if(first_rootp && first_rootp->usePhysics()) { //Physical - use phys prim limit max_linked_prims = gHippoLimits->getMaxPhysLinkedPrims(); -- cgit v1.1 From 817c12436ed1c4a1500cb2e836625c4f3e9b32b7 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Thu, 20 Jan 2011 01:28:55 +0200 Subject: Fix #773: Crash in Advanced -> Rendering -> Debug GL Missing “POOL_VOIDWATER” item in pool names array caused crash. --- linden/indra/newview/pipeline.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'linden/indra') diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp index 9da0da0..36ffb05 100644 --- a/linden/indra/newview/pipeline.cpp +++ b/linden/indra/newview/pipeline.cpp @@ -157,6 +157,7 @@ std::string gPoolNames[] = "POOL_GROUND", "POOL_INVISIBLE", "POOL_AVATAR", + "POOL_VOIDWATER", "POOL_WATER", "POOL_GRASS", "POOL_FULLBRIGHT", -- cgit v1.1 From 02d06e7cf7c15ddd427197dbe177ea58ffc91319 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Thu, 20 Jan 2011 01:34:15 +0200 Subject: Add menu option for sculpt debugging in Advanced menu. The new option is Advanced -> Rendering -> Info Displays -> Sculpt. The code for displaying this debug info is old, but the menu option was lost when the Advanced menu was converted to xml. --- linden/indra/newview/llviewermenu.cpp | 4 ++++ linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml | 6 ++++++ 2 files changed, 10 insertions(+) (limited to 'linden/indra') diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index b81a2a2..da7d815 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -9192,6 +9192,10 @@ U32 info_display_from_string(std::string info_display) { return LLPipeline::RENDER_DEBUG_GLOW; } + else if ("sculpt" == info_display) + { + return LLPipeline::RENDER_DEBUG_SCULPTED; + } else { return 0; diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml index 53e9e2d..9ff5048 100644 --- a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml +++ b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml @@ -1279,6 +1279,12 @@ + + + + + + + + -- cgit v1.1 From 4e577785ba1417cd9ef6742a33e818016697b508 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Fri, 21 Jan 2011 15:10:56 +0200 Subject: Partial fix #772: Large sculpt maps are deformed This is a partial fix for cases where the sculpt map is larger than 128x128, like in some old sculpted trees. This was done by content creators to beat bugs in old viewers. The sculpties still need a lod change to trigger a rebuild once they are fully decoded, and that doesn't always happen, because we abuse RenderVolumeLODFactor. Ported from Snowglobe2 (GPL) --- linden/indra/newview/llviewerimage.cpp | 13 ++++++++++--- linden/indra/newview/llvovolume.cpp | 6 +++--- 2 files changed, 13 insertions(+), 6 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp index 671a359..a600dc5 100644 --- a/linden/indra/newview/llviewerimage.cpp +++ b/linden/indra/newview/llviewerimage.cpp @@ -1759,13 +1759,19 @@ void LLViewerImage::setCachedRawImage() if(mForSculpt) { max_size = MAX_CACHED_RAW_SCULPT_IMAGE_AREA ; + // Even though we don't use the full pixel size, we want to decode up to discard 0, + // because some legacy sculpts are weird like that. + mCachedRawImageReady = !mRawDiscardLevel ; + } + else + { + mCachedRawImageReady = (!mRawDiscardLevel || ((w * h) >= max_size)) ; } while(((w >> i) * (h >> i)) > max_size) { ++i ; } - mCachedRawImageReady = (!mRawDiscardLevel || ((w * h) >= max_size)) ; if(i) { @@ -1776,7 +1782,8 @@ void LLViewerImage::setCachedRawImage() mRawImage->scale(w >> i, h >> i) ; } mCachedRawImage = mRawImage ; - mCachedRawDiscardLevel = mRawDiscardLevel + i ; + mRawDiscardLevel += i ; + mCachedRawDiscardLevel = mRawDiscardLevel ; } } @@ -1784,7 +1791,7 @@ void LLViewerImage::checkCachedRawSculptImage() { if(mCachedRawImageReady && mCachedRawDiscardLevel > 0) { - if(mCachedRawImage->getWidth() * mCachedRawImage->getHeight() < MAX_CACHED_RAW_SCULPT_IMAGE_AREA) + if(getDiscardLevel() != 0) { mCachedRawImageReady = FALSE ; } diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp index 73ff860..632bca2 100644 --- a/linden/indra/newview/llvovolume.cpp +++ b/linden/indra/newview/llvovolume.cpp @@ -527,8 +527,8 @@ void LLVOVolume::updateTextureVirtualSize() } } - S32 texture_discard = mSculptTexture->getCachedRawImageLevel(); //try to match the texture - S32 current_discard = mSculptLevel; + S32 texture_discard = mSculptTexture->getDiscardLevel(); //try to match the texture + S32 current_discard = getVolume() ? getVolume()->getSculptLevel() : -2 ; if (texture_discard >= 0 && //texture has some data available (texture_discard < current_discard || //texture has more data than last rebuild @@ -711,7 +711,7 @@ void LLVOVolume::sculpt() S8 sculpt_components = 0; const U8* sculpt_data = NULL; - S32 discard_level = mSculptTexture->getCachedRawImageLevel() ; + S32 discard_level = mSculptTexture->getDiscardLevel(); LLImageRaw* raw_image = mSculptTexture->getCachedRawImage() ; S32 max_discard = mSculptTexture->getMaxDiscardLevel(); -- cgit v1.1 From 981e88b92549cae661a077490df693f1d207c808 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Mon, 24 Jan 2011 19:40:13 +0200 Subject: Additional Fix #772 and other sculpt problems Port from V2 (Snowglobe2) that adds to each texture a list of faces and sculpt volumes that use that texture, and rebuild all sculpts when the texture is decoded. This is needed so that we don't depend on LOD changes which may never/rarely happen for some megaprim sculpts. --- linden/indra/newview/llface.h | 4 + linden/indra/newview/llviewerimage.cpp | 131 ++++++++++++++++++++++++++++++--- linden/indra/newview/llviewerimage.h | 26 ++++++- linden/indra/newview/llvovolume.cpp | 56 +++++++++++--- linden/indra/newview/llvovolume.h | 6 +- 5 files changed, 195 insertions(+), 28 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/llface.h b/linden/indra/newview/llface.h index 4893e82..e31b93f 100644 --- a/linden/indra/newview/llface.h +++ b/linden/indra/newview/llface.h @@ -106,6 +106,9 @@ public: F32 getVirtualSize() const { return mVSize; } F32 getPixelArea() const { return mPixelArea; } + S32 getIndexInTex() const {return mIndexInTex ;} + void setIndexInTex(S32 index) { mIndexInTex = index ;} + void renderSetColor() const; S32 renderElements(const U16 *index_array) const; S32 renderIndexed (); @@ -225,6 +228,7 @@ private: U16 mGeomIndex; // index into draw pool U32 mIndicesCount; U32 mIndicesIndex; // index into draw pool for indices (yeah, I know!) + S32 mIndexInTex ; //previous rebuild's geometry info U16 mLastGeomCount; diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp index a600dc5..28561ed 100644 --- a/linden/indra/newview/llviewerimage.cpp +++ b/linden/indra/newview/llviewerimage.cpp @@ -61,6 +61,7 @@ #include "llappviewer.h" #include "llface.h" #include "llviewercamera.h" +#include "llvovolume.h" /////////////////////////////////////////////////////////////////////////////// // statics @@ -352,6 +353,11 @@ void LLViewerImage::init(bool firstinit) mDesiredSavedRawDiscardLevel = -1 ; mCanUseHTTP = true; //default on if cap/settings allows us + + mNumFaces = 0 ; + mNumVolumes = 0; + mFaceList.clear() ; + mVolumeList.clear(); } // virtual @@ -388,6 +394,7 @@ LLViewerImage::~LLViewerImage() void LLViewerImage::cleanup() { mFaceList.clear() ; + mVolumeList.clear(); for(callback_list_t::iterator iter = mLoadedCallbackList.begin(); iter != mLoadedCallbackList.end(); ) { @@ -754,19 +761,19 @@ void LLViewerImage::updateVirtualSize() { addTextureStats(0.f, FALSE) ;//reset } - if(mFaceList.size() > 0) + for(U32 i = 0 ; i < mNumFaces ; i++) { - for(std::list::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) + LLFace* facep = mFaceList[i] ; + if(facep->getDrawable()->isRecentlyVisible()) { - LLFace* facep = *iter ; - if(facep->getDrawable()->isRecentlyVisible()) - { - addTextureStats(facep->getVirtualSize()) ; - setAdditionalDecodePriority(facep->getImportanceToCamera()) ; - } - } + addTextureStats(facep->getVirtualSize()) ; + setAdditionalDecodePriority(facep->getImportanceToCamera()) ; + } } + mNeedsResetMaxVirtualSize = TRUE ; + reorganizeFaceList(); + reorganizeVolumeList(); #endif } void LLViewerImage::scaleDown() @@ -1817,11 +1824,111 @@ void LLViewerImage::setForSculpt() checkCachedRawSculptImage() ; } +//virtual void LLViewerImage::addFace(LLFace* facep) { - mFaceList.push_back(facep) ; + if(mNumFaces >= mFaceList.size()) + { + mFaceList.resize(2 * mNumFaces + 1) ; + } + mFaceList[mNumFaces] = facep ; + facep->setIndexInTex(mNumFaces) ; + mNumFaces++ ; + mLastFaceListUpdateTimer.reset() ; +} + +//virtual +void LLViewerImage::removeFace(LLFace* facep) +{ + if(mNumFaces > 1) + { + S32 index = facep->getIndexInTex() ; + mFaceList[index] = mFaceList[--mNumFaces] ; + mFaceList[index]->setIndexInTex(index) ; + } + else + { + mFaceList.clear() ; + mNumFaces = 0 ; + } + mLastFaceListUpdateTimer.reset() ; +} + +S32 LLViewerImage::getNumFaces() const +{ + return mNumFaces ; +} + + +//virtual +void LLViewerImage::addVolume(LLVOVolume* volumep) +{ + if( mNumVolumes >= mVolumeList.size()) + { + mVolumeList.resize(2 * mNumVolumes + 1) ; + } + mVolumeList[mNumVolumes] = volumep ; + volumep->setIndexInTex(mNumVolumes) ; + mNumVolumes++ ; + mLastVolumeListUpdateTimer.reset() ; } -void LLViewerImage::removeFace(LLFace* facep) + +//virtual +void LLViewerImage::removeVolume(LLVOVolume* volumep) { - mFaceList.remove(facep) ; + if(mNumVolumes > 1) + { + S32 index = volumep->getIndexInTex() ; + mVolumeList[index] = mVolumeList[--mNumVolumes] ; + mVolumeList[index]->setIndexInTex(index) ; + } + else + { + mVolumeList.clear() ; + mNumVolumes = 0 ; + } + mLastVolumeListUpdateTimer.reset() ; +} + +S32 LLViewerImage::getNumVolumes() const +{ + return mNumVolumes ; +} + +void LLViewerImage::reorganizeFaceList() +{ + static const F32 MAX_WAIT_TIME = 20.f; // seconds + static const U32 MAX_EXTRA_BUFFER_SIZE = 4 ; + + if(mNumFaces + MAX_EXTRA_BUFFER_SIZE > mFaceList.size()) + { + return ; + } + + if(mLastFaceListUpdateTimer.getElapsedTimeF32() < MAX_WAIT_TIME) + { + return ; + } + + mLastFaceListUpdateTimer.reset() ; + mFaceList.erase(mFaceList.begin() + mNumFaces, mFaceList.end()); +} + +void LLViewerImage::reorganizeVolumeList() +{ + static const F32 MAX_WAIT_TIME = 20.f; // seconds + static const U32 MAX_EXTRA_BUFFER_SIZE = 4 ; + + if(mNumVolumes + MAX_EXTRA_BUFFER_SIZE > mVolumeList.size()) + { + return ; + } + + if(mLastVolumeListUpdateTimer.getElapsedTimeF32() < MAX_WAIT_TIME) + { + return ; + } + + mLastVolumeListUpdateTimer.reset() ; + mVolumeList.erase(mVolumeList.begin() + mNumVolumes, mVolumeList.end()); } diff --git a/linden/indra/newview/llviewerimage.h b/linden/indra/newview/llviewerimage.h index 3bee51c..c2e3303 100644 --- a/linden/indra/newview/llviewerimage.h +++ b/linden/indra/newview/llviewerimage.h @@ -51,6 +51,7 @@ typedef void (*loaded_callback_func)( BOOL success, LLViewerImage *src_vi, LLIma class LLVFile; class LLMessageSystem; +class LLVOVolume; class LLLoadedCallbackEntry { @@ -209,6 +210,9 @@ public: INVALID_DISCARD_LEVEL = 0x7fff }; + typedef std::vector ll_face_list_t; + typedef std::vector ll_volume_list_t; + protected: /*virtual*/ ~LLViewerImage(); @@ -311,8 +315,17 @@ public: BOOL isSameTexture(const LLViewerImage* tex) const ; - void addFace(LLFace* facep) ; - void removeFace(LLFace* facep) ; + virtual void addFace(LLFace* facep) ; + virtual void removeFace(LLFace* facep) ; + S32 getNumFaces() const; + const ll_face_list_t* getFaceList() const {return &mFaceList;} + void reorganizeFaceList() ; + + virtual void addVolume(LLVOVolume* volumep); + virtual void removeVolume(LLVOVolume* volumep); + S32 getNumVolumes() const; + const ll_volume_list_t* getVolumeList() const { return &mVolumeList; } + void reorganizeVolumeList() ; void setCanUseHTTP(bool can_use_http) {mCanUseHTTP = can_use_http;}; @@ -417,8 +430,13 @@ private: BOOL mForSculpt ; //a flag if the texture is used for a sculpt data. mutable BOOL mNeedsResetMaxVirtualSize ; - typedef std::list ll_face_list_t ; - ll_face_list_t mFaceList ; //reverse pointer pointing to the faces using this image as texture + ll_face_list_t mFaceList ; //reverse pointer pointing to the faces using this image as texture + U32 mNumFaces ; + LLFrameTimer mLastFaceListUpdateTimer ; + + ll_volume_list_t mVolumeList; + U32 mNumVolumes; + LLFrameTimer mLastVolumeListUpdateTimer; bool mCanUseHTTP; // can this image be fetched by http diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp index 632bca2..e4a0d0c 100644 --- a/linden/indra/newview/llvovolume.cpp +++ b/linden/indra/newview/llvovolume.cpp @@ -89,12 +89,12 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re mRelativeXformInvTrans.setIdentity(); mLOD = MIN_LOD; - mSculptLevel = -2; mTextureAnimp = NULL; mVObjRadius = LLVector3(1,1,0.5f).length(); mNumFaces = 0; mLODChanged = FALSE; mSculptChanged = FALSE; + mIndexInTex = 0; } LLVOVolume::~LLVOVolume() @@ -502,9 +502,8 @@ void LLVOVolume::updateTextureVirtualSize() if (isSculpted()) { - LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); - LLUUID id = sculpt_params->getSculptTexture(); - mSculptTexture = gImageList.getImage(id); + updateSculptTexture(); + if (mSculptTexture.notNull()) { mSculptTexture->setBoostLevel(llmax((S32)mSculptTexture->getBoostLevel(), @@ -682,25 +681,52 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &volume_params, const S32 detail mVolumeImpl->onSetVolume(volume_params, detail); } + updateSculptTexture(); + if (isSculpted()) { - mSculptTexture = gImageList.getImage(volume_params.getSculptID()); if (mSculptTexture.notNull()) { sculpt(); - mSculptLevel = getVolume()->getSculptLevel(); } } - else - { - mSculptTexture = NULL; - } return TRUE; } return FALSE; } +void LLVOVolume::updateSculptTexture() +{ + LLPointer old_sculpt = mSculptTexture; + + if (isSculpted()) + { + LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); + LLUUID id = sculpt_params->getSculptTexture(); + if (id.notNull()) + { + mSculptTexture = gImageList::getImage(id); + } + } + else + { + mSculptTexture = NULL; + } + + if (mSculptTexture != old_sculpt) + { + if (old_sculpt.notNull()) + { + old_sculpt->removeVolume(this); + } + if (mSculptTexture.notNull()) + { + mSculptTexture->addVolume(this); + } + } +} + // sculpt replaces generate() for sculpted surfaces void LLVOVolume::sculpt() { @@ -754,6 +780,16 @@ void LLVOVolume::sculpt() sculpt_data = raw_image->getData(); } getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level); + + //notify rebuild any other VOVolumes that reference this sculpty volume + for (S32 i = 0; i < mSculptTexture->getNumVolumes(); ++i) + { + LLVOVolume* volume = (*(mSculptTexture->getVolumeList()))[i]; + if (volume != this && volume->getVolume() == getVolume()) + { + gPipeline.markRebuild(volume->mDrawable, LLDrawable::REBUILD_GEOMETRY, FALSE); + } + } } } diff --git a/linden/indra/newview/llvovolume.h b/linden/indra/newview/llvovolume.h index a78aa37..7c8a68d 100644 --- a/linden/indra/newview/llvovolume.h +++ b/linden/indra/newview/llvovolume.h @@ -169,8 +169,10 @@ public: /*virtual*/ BOOL setMaterial(const U8 material); void setTexture(const S32 face); - + S32 getIndexInTex() const {return mIndexInTex ;} /*virtual*/ BOOL setVolume(const LLVolumeParams &volume_params, const S32 detail, bool unique_volume = false); + void updateSculptTexture(); + void setIndexInTex(S32 index) { mIndexInTex = index ;} void sculpt(); void updateRelativeXform(); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); @@ -231,7 +233,6 @@ private: LLFrameTimer mTextureUpdateTimer; S32 mLOD; BOOL mLODChanged; - S32 mSculptLevel; BOOL mSculptChanged; LLMatrix4 mRelativeXform; LLMatrix3 mRelativeXformInvTrans; @@ -239,6 +240,7 @@ private: F32 mVObjRadius; LLVolumeInterface *mVolumeImpl; LLPointer mSculptTexture; + S32 mIndexInTex; // statics public: -- cgit v1.1 From 2de3325acadcb3a67978ae27ad69981c8c47aa29 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Mon, 24 Jan 2011 23:15:49 +0200 Subject: Fix a brain fart in 981e88b925 --- linden/indra/newview/llvovolume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp index e4a0d0c..204d641 100644 --- a/linden/indra/newview/llvovolume.cpp +++ b/linden/indra/newview/llvovolume.cpp @@ -706,7 +706,7 @@ void LLVOVolume::updateSculptTexture() LLUUID id = sculpt_params->getSculptTexture(); if (id.notNull()) { - mSculptTexture = gImageList::getImage(id); + mSculptTexture = gImageList.getImage(id); } } else -- cgit v1.1 From 21d0848f94c64b20fb7ceedd4ae7b71012a834d7 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Sun, 6 Feb 2011 23:42:37 +0200 Subject: Fix #778: Textures get stuck half fetched. Make sure partial textures are cached as partial, so that they will finish fetching in consequent sessions. This is a rare case, but does happen. Backported from viewer2. --- linden/indra/newview/lltexturefetch.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'linden/indra') diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp index 83a54e4..4b1a9cb 100644 --- a/linden/indra/newview/lltexturefetch.cpp +++ b/linden/indra/newview/lltexturefetch.cpp @@ -1116,6 +1116,17 @@ bool LLTextureFetchWorker::doWork(S32 param) return false; } S32 datasize = mFormattedImage->getDataSize(); + if(mFileSize < datasize)//This could happen when http fetching and sim fetching mixed. + { + if(mHaveAllData) + { + mFileSize = datasize ; + } + else + { + mFileSize = datasize + 1 ; //flag not fully loaded. + } + } llassert_always(datasize); setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it U32 cache_priority = mWorkPriority; -- cgit v1.1 From cff413945bdf7423797ad82220a20aad65587671 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Thu, 24 Feb 2011 19:09:20 +0200 Subject: Workaround #726: SIGSEGV in memcpy in LLImageRaw::LLImageRaw with data=0 Not sure why this happens, but is related to mForceToSaveRawImage=TRUE (e.g. in the texture preview floater.) This workaround seems to work for Singularity, as suggested by Siana Gears. --- linden/indra/llimage/llimage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'linden/indra') diff --git a/linden/indra/llimage/llimage.cpp b/linden/indra/llimage/llimage.cpp index 776c481..1df3793 100644 --- a/linden/indra/llimage/llimage.cpp +++ b/linden/indra/llimage/llimage.cpp @@ -269,7 +269,7 @@ LLImageRaw::LLImageRaw(U8 *data, U16 width, U16 height, S8 components) : LLImageBase() { mMemType = LLMemType::MTYPE_IMAGERAW; - if(allocateDataSize(width, height, components)) + if(allocateDataSize(width, height, components) && data) { memcpy(getData(), data, width*height*components); } -- cgit v1.1 From 6c6c66ea4d76fc5282fd03baf1112fbc44014cb9 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Sun, 27 Feb 2011 18:07:08 -0700 Subject: Fixed login menu bar not resizing with the window --- linden/indra/newview/skins/default/xui/en-us/menu_login.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_login.xml b/linden/indra/newview/skins/default/xui/en-us/menu_login.xml index 18fb8e6..c65a737 100644 --- a/linden/indra/newview/skins/default/xui/en-us/menu_login.xml +++ b/linden/indra/newview/skins/default/xui/en-us/menu_login.xml @@ -1,5 +1,5 @@ - + -- cgit v1.1 From 5f9f7f5b75debf0b93e7857838edc434e5beb444 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Fri, 4 Mar 2011 17:05:56 -0700 Subject: Recommented out plugin log info in logcontrol.xml --- linden/indra/newview/app_settings/logcontrol.xml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/app_settings/logcontrol.xml b/linden/indra/newview/app_settings/logcontrol.xml index cdc837d..2c6c6a4 100644 --- a/linden/indra/newview/app_settings/logcontrol.xml +++ b/linden/indra/newview/app_settings/logcontrol.xml @@ -66,14 +66,15 @@ - Plugin - PluginClassMedia - PluginInstance - PluginPipe - PluginChild - - PluginParent - PluginViewerMedia + + + + + + + + + -- cgit v1.1 From 9aebca3bd830fce9b0ee0adadf372be293ad0bf5 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Fri, 4 Mar 2011 17:21:57 -0700 Subject: Updated default_grids.xml to include Aurora-Grid --- linden/indra/newview/app_settings/default_grids.xml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'linden/indra') diff --git a/linden/indra/newview/app_settings/default_grids.xml b/linden/indra/newview/app_settings/default_grids.xml index 802558a..cdf99e5 100644 --- a/linden/indra/newview/app_settings/default_grids.xml +++ b/linden/indra/newview/app_settings/default_grids.xml @@ -1,7 +1,7 @@ - default_grids_version31 + default_grids_version32 @@ -60,6 +60,21 @@ version2 + + + gridname Aurora-Grid + gridnick auroragrid + platform OpenSim + loginuri http://login.aurora-sim.org:8002/ + loginpage http://login.aurora-sim.org/splash/ + helperuri http://grid.aurora-sim.org/ + password + register + support http://forum.aurora-sim.org/ + website http://aurora-sim.org + version 0 + + gridnickworldsimterra -- cgit v1.1 From 242a3c5290ef3aa2ce9655fdc780692734b068a4 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Thu, 24 Feb 2011 19:09:20 +0200 Subject: Workaround #726: SIGSEGV in memcpy in LLImageRaw::LLImageRaw with data=0 Not sure why this happens, but is related to mForceToSaveRawImage=TRUE (e.g. in the texture preview floater.) This workaround seems to work for Singularity, as suggested by Siana Gears. --- linden/indra/llimage/llimage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'linden/indra') diff --git a/linden/indra/llimage/llimage.cpp b/linden/indra/llimage/llimage.cpp index e933750..3a8dc3b 100644 --- a/linden/indra/llimage/llimage.cpp +++ b/linden/indra/llimage/llimage.cpp @@ -269,7 +269,7 @@ LLImageRaw::LLImageRaw(U8 *data, U16 width, U16 height, S8 components) : LLImageBase() { mMemType = LLMemType::MTYPE_IMAGERAW; - if(allocateDataSize(width, height, components)) + if(allocateDataSize(width, height, components) && data) { memcpy(getData(), data, width*height*components); } -- cgit v1.1 From 923d486f58a105c9eb7404e3601ef17d2d7c0240 Mon Sep 17 00:00:00 2001 From: thickbrick Date: Sun, 6 Feb 2011 23:42:37 +0200 Subject: Fix #778: Textures get stuck half fetched. Make sure partial textures are cached as partial, so that they will finish fetching in consequent sessions. This is a rare case, but does happen. Backported from viewer2. --- linden/indra/newview/lltexturefetch.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'linden/indra') diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp index 072af25..878c2fa 100644 --- a/linden/indra/newview/lltexturefetch.cpp +++ b/linden/indra/newview/lltexturefetch.cpp @@ -1113,6 +1113,17 @@ bool LLTextureFetchWorker::doWork(S32 param) return false; } S32 datasize = mFormattedImage->getDataSize(); + if(mFileSize < datasize)//This could happen when http fetching and sim fetching mixed. + { + if(mHaveAllData) + { + mFileSize = datasize ; + } + else + { + mFileSize = datasize + 1 ; //flag not fully loaded. + } + } llassert_always(datasize); setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it U32 cache_priority = mWorkPriority; -- cgit v1.1