From 0ef11cf31364456ec247b0fc7ad8f6d1de408400 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Wed, 28 Jan 2009 20:04:52 -0600 Subject: Second Life viewer sources 1.22.6-RC --- linden/indra/newview/app_settings/settings.xml | 2 +- linden/indra/newview/llappviewer.cpp | 9 +- linden/indra/newview/llappviewer.h | 1 + linden/indra/newview/llappviewerwin32.cpp | 2 +- linden/indra/newview/lldrawable.cpp | 12 +- linden/indra/newview/lldrawpoolbump.cpp | 7 +- linden/indra/newview/lldrawpoolbump.h | 3 +- linden/indra/newview/lleventpoll.cpp | 17 +- linden/indra/newview/llfloaterinspect.cpp | 6 + linden/indra/newview/llfloaterlagmeter.cpp | 2 +- .../indra/newview/llfloatervoicedevicesettings.cpp | 34 ++- linden/indra/newview/llfloaterworldmap.cpp | 2 +- linden/indra/newview/llhudeffectpointat.cpp | 4 +- linden/indra/newview/llhudicon.cpp | 2 +- linden/indra/newview/lllogchat.cpp | 3 +- linden/indra/newview/llmutelist.cpp | 49 ++-- linden/indra/newview/llnotify.cpp | 38 +++- linden/indra/newview/llnotify.h | 3 + linden/indra/newview/llpaneldisplay.cpp | 10 +- linden/indra/newview/llprefsim.cpp | 4 +- linden/indra/newview/llprefsvoice.cpp | 11 + linden/indra/newview/llselectmgr.cpp | 2 + linden/indra/newview/lltexturefetch.cpp | 23 +- linden/indra/newview/lltextureview.cpp | 3 +- linden/indra/newview/llviewercontrol.cpp | 1 + linden/indra/newview/llviewerdisplay.cpp | 1 + linden/indra/newview/llviewerimage.cpp | 48 ++-- linden/indra/newview/llviewerimage.h | 23 +- linden/indra/newview/llviewerimagelist.cpp | 13 +- linden/indra/newview/llviewermenu.cpp | 7 + linden/indra/newview/llviewerpartsim.cpp | 30 ++- linden/indra/newview/llviewerpartsim.h | 6 + linden/indra/newview/llviewerstats.cpp | 21 +- linden/indra/newview/llviewerwindow.cpp | 203 +++++++---------- linden/indra/newview/llviewerwindow.h | 3 +- linden/indra/newview/llvoavatar.cpp | 20 +- linden/indra/newview/llvoavatar.h | 2 + linden/indra/newview/llvoiceclient.cpp | 2 + linden/indra/newview/llvopartgroup.cpp | 2 + linden/indra/newview/llvotextbubble.cpp | 20 +- linden/indra/newview/llvovolume.cpp | 17 +- linden/indra/newview/llwindebug.cpp | 250 ++++++++++++++------- linden/indra/newview/pipeline.cpp | 79 ++++--- .../newview/skins/default/xui/de/floater_about.xml | 4 +- .../skins/default/xui/de/panel_preferences_im.xml | 6 +- .../newview/skins/default/xui/de/role_actions.xml | 114 +++++----- .../skins/default/xui/en-us/floater_about.xml | 6 +- .../indra/newview/skins/default/xui/fr/alerts.xml | 2 +- .../newview/skins/default/xui/fr/floater_about.xml | 4 +- .../indra/newview/skins/default/xui/ja/alerts.xml | 4 +- .../newview/skins/default/xui/ja/floater_about.xml | 4 +- .../skins/default/xui/ja/floater_about_land.xml | 2 +- .../skins/default/xui/ja/floater_buy_currency.xml | 4 +- .../skins/default/xui/ja/floater_inspect.xml | 2 +- .../skins/default/xui/ja/floater_inventory.xml | 4 +- .../xui/ja/floater_inventory_item_properties.xml | 2 +- .../skins/default/xui/ja/floater_media_browser.xml | 6 +- .../newview/skins/default/xui/ja/menu_viewer.xml | 4 +- .../indra/newview/skins/default/xui/ja/notify.xml | 32 +-- .../newview/skins/default/xui/ja/panel_audio.xml | 2 +- .../skins/default/xui/ja/panel_group_general.xml | 29 ++- .../default/xui/ja/panel_preferences_audio.xml | 2 +- .../default/xui/ja/panel_preferences_graphics1.xml | 2 +- .../skins/default/xui/ja/panel_preferences_im.xml | 2 +- .../default/xui/ja/panel_preferences_input.xml | 5 +- .../skins/default/xui/ja/panel_status_bar.xml | 4 +- .../newview/skins/default/xui/ko/floater_about.xml | 4 +- .../newview/skins/default/xui/pt/mime_types.xml | 2 +- .../newview/skins/default/xui/zh/floater_about.xml | 4 +- 69 files changed, 714 insertions(+), 539 deletions(-) (limited to 'linden/indra/newview') diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index 688dcab..d3519da 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -2577,7 +2577,7 @@ Type Boolean Value - 0 + 1 FloaterActiveSpeakersSortColumn diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 63711ba..e1a0fe2 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp @@ -3206,8 +3206,6 @@ void LLAppViewer::idle() return; } - gViewerWindow->handlePerFrameHover(); - /////////////////////////////////////// // Agent and camera movement // @@ -3485,12 +3483,12 @@ void LLAppViewer::sendLogoutRequest() if (mLogoutMarkerFile) { llinfos << "Created logout marker file " << mLogoutMarkerFileName << llendl; + apr_file_close(mLogoutMarkerFile); } else { llwarns << "Cannot create logout marker file " << mLogoutMarkerFileName << llendl; } - apr_file_close(mLogoutMarkerFile); } } @@ -3711,6 +3709,11 @@ void LLAppViewer::forceErrorSoftwareException() throw; } +void LLAppViewer::forceErrorDriverCrash() +{ + glDeleteTextures(1, NULL); +} + void LLAppViewer::initMainloopTimeout(const std::string& state, F32 secs) { if(!mMainloopTimeout) diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h index 98612ef..d1f7b13 100644 --- a/linden/indra/newview/llappviewer.h +++ b/linden/indra/newview/llappviewer.h @@ -114,6 +114,7 @@ public: virtual void forceErrorBadMemoryAccess(); virtual void forceErrorInifiniteLoop(); virtual void forceErrorSoftwareException(); + virtual void forceErrorDriverCrash(); // *NOTE: There are currently 3 settings files: // "Global", "PerAccount" and "CrashSettings" diff --git a/linden/indra/newview/llappviewerwin32.cpp b/linden/indra/newview/llappviewerwin32.cpp index c0ef1a9..b68cad6 100644 --- a/linden/indra/newview/llappviewerwin32.cpp +++ b/linden/indra/newview/llappviewerwin32.cpp @@ -82,7 +82,7 @@ const std::string LLAppViewerWin32::sWindowClass = "Second Life"; LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop) { // *NOTE:Mani - this code is stolen from LLApp, where its never actually used. - + //OSMessageBox("Attach Debugger Now", "Error", OSMB_OK); // Translate the signals/exceptions into cross-platform stuff // Windows implementation _tprintf( _T("Entering Windows Exception Handler...\n") ); diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp index 6a7ff16..16b282b 100644 --- a/linden/indra/newview/lldrawable.cpp +++ b/linden/indra/newview/lldrawable.cpp @@ -498,7 +498,7 @@ F32 LLDrawable::updateXform(BOOL undamped) F32 dist_squared = 0.f; F32 camdist2 = (mDistanceWRTCamera * mDistanceWRTCamera); - if (damped && mDistanceWRTCamera > 0.0f) + if (damped && isVisible()) { F32 lerp_amt = llclamp(LLCriticalDamp::getInterpolant(OBJECT_DAMPING_TIME_CONSTANT), 0.f, 1.f); LLVector3 new_pos = lerp(old_pos, target_pos, lerp_amt); @@ -522,11 +522,19 @@ F32 LLDrawable::updateXform(BOOL undamped) { // snap to final position dist_squared = 0.0f; + if (!isRoot()) + { //child prim snapping to some position, needs a rebuild + gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); + } } } if ((mCurrentScale != target_scale) || - (!isRoot() && (dist_squared >= MIN_INTERPOLATE_DISTANCE_SQUARED) || !mVObjp->getAngularVelocity().isExactlyZero())) + (!isRoot() && + (dist_squared >= MIN_INTERPOLATE_DISTANCE_SQUARED) || + !mVObjp->getAngularVelocity().isExactlyZero() || + target_pos != mXform.getPosition() || + target_rot != mXform.getRotation())) { //child prim moving or scale change requires immediate rebuild gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); } diff --git a/linden/indra/newview/lldrawpoolbump.cpp b/linden/indra/newview/lldrawpoolbump.cpp index 6221bc8..56f1e4d 100644 --- a/linden/indra/newview/lldrawpoolbump.cpp +++ b/linden/indra/newview/lldrawpoolbump.cpp @@ -592,7 +592,7 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params) if( bump_code < LLStandardBumpmap::sStandardBumpmapCount ) { bump = gStandardBumpmapList[bump_code].mImage; - gBumpImageList.addTextureStats(bump_code, tex->getID(), params.mVSize, 1, 1); + gBumpImageList.addTextureStats(bump_code, tex->getID(), params.mVSize); } break; } @@ -734,14 +734,13 @@ LLBumpImageList::~LLBumpImageList() // Note: Does nothing for entries in gStandardBumpmapList that are not actually standard bump images (e.g. none, brightness, and darkness) -void LLBumpImageList::addTextureStats(U8 bump, const LLUUID& base_image_id, - F32 pixel_area, F32 texel_area_ratio, F32 cos_center_angle) +void LLBumpImageList::addTextureStats(U8 bump, const LLUUID& base_image_id, F32 virtual_size) { bump &= TEM_BUMP_MASK; LLViewerImage* bump_image = gStandardBumpmapList[bump].mImage; if( bump_image ) { - bump_image->addTextureStats(pixel_area, texel_area_ratio, cos_center_angle); + bump_image->addTextureStats(virtual_size); } } diff --git a/linden/indra/newview/lldrawpoolbump.h b/linden/indra/newview/lldrawpoolbump.h index 16d26ed..7e82f7f 100644 --- a/linden/indra/newview/lldrawpoolbump.h +++ b/linden/indra/newview/lldrawpoolbump.h @@ -131,8 +131,7 @@ public: LLImageGL* getBrightnessDarknessImage(LLViewerImage* src_image, U8 bump_code); // LLImageGL* getTestImage(); - void addTextureStats(U8 bump, const LLUUID& base_image_id, - F32 pixel_area, F32 texel_area_ratio, F32 cos_center_angle); + void addTextureStats(U8 bump, const LLUUID& base_image_id, F32 virtual_size); static void onSourceBrightnessLoaded( BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata ); static void onSourceDarknessLoaded( BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata ); diff --git a/linden/indra/newview/lleventpoll.cpp b/linden/indra/newview/lleventpoll.cpp index 845ae97..995c4e4 100644 --- a/linden/indra/newview/lleventpoll.cpp +++ b/linden/indra/newview/lleventpoll.cpp @@ -31,9 +31,9 @@ #include "llviewerprecompiledheaders.h" +#include "lleventpoll.h" #include "llappviewer.h" #include "llagent.h" -#include "lleventpoll.h" #include "llhttpclient.h" #include "llhttpstatuscodes.h" @@ -41,6 +41,7 @@ #include "lltimer.h" #include "llviewerregion.h" #include "message.h" +#include "lltrans.h" namespace { @@ -225,11 +226,15 @@ namespace // They are essentially disconnected from the region even though some things may still work. // Since things won't get better until they relog we force a disconnect now. - // *NOTE:Mani - This force disconnect was causing logouts even when disconnected - // from neighboring regions. - // *FIX:Mani We may want to re enable forceDisconnect for the agents main region. - // *FIX:Mani If reimplemting Translate!!!! - // LLAppViewer::instance()->forceDisconnect("You have been disconnected from the region you were in."); + // *NOTE:Mani - The following condition check to see if this failing event poll + // is attached to the Agent's main region. If so we disconnect the viewer. + // Else... its a child region and we just leave the dead event poll stopped and + // continue running. + if(gAgent.getRegion() && gAgent.getRegion()->getHost().getIPandPort() == mSender) + { + llwarns << "Forcing disconnect due to stalled main region event poll." << llendl; + LLAppViewer::instance()->forceDisconnect(LLTrans::getString("AgentLostConnection")); + } } } diff --git a/linden/indra/newview/llfloaterinspect.cpp b/linden/indra/newview/llfloaterinspect.cpp index 7839729..b94efb9 100644 --- a/linden/indra/newview/llfloaterinspect.cpp +++ b/linden/indra/newview/llfloaterinspect.cpp @@ -213,6 +213,12 @@ void LLFloaterInspect::refresh() LLSD row; char time[MAX_STRING]; std::string owner_name, creator_name; + + if (obj->mCreationDate == 0) + { // Don't have valid information from the server, so skip this one + continue; + } + time_t timestamp = (time_t) (obj->mCreationDate/1000000); LLStringUtil::copy(time, ctime(×tamp), MAX_STRING); time[24] = '\0'; diff --git a/linden/indra/newview/llfloaterlagmeter.cpp b/linden/indra/newview/llfloaterlagmeter.cpp index 33647ec..2367c4d 100644 --- a/linden/indra/newview/llfloaterlagmeter.cpp +++ b/linden/indra/newview/llfloaterlagmeter.cpp @@ -183,7 +183,7 @@ void LLFloaterLagMeter::determineClient() { mClientCause->setText( getString("client_texture_loading_cause_msg", mStringArgs) ); } - else if(LLViewerImage::sBoundTextureMemory > LLViewerImage::sMaxBoundTextureMem) + else if((LLViewerImage::sBoundTextureMemory >> 20) > LLViewerImage::sMaxBoundTextureMem) { mClientCause->setText( getString("client_texture_memory_cause_msg", mStringArgs) ); } diff --git a/linden/indra/newview/llfloatervoicedevicesettings.cpp b/linden/indra/newview/llfloatervoicedevicesettings.cpp index 7192c4f..ad9d776 100644 --- a/linden/indra/newview/llfloatervoicedevicesettings.cpp +++ b/linden/indra/newview/llfloatervoicedevicesettings.cpp @@ -85,14 +85,15 @@ BOOL LLPanelVoiceDeviceSettings::postBuild() void LLPanelVoiceDeviceSettings::draw() { // let user know that volume indicator is not yet available - childSetVisible("wait_text", !gVoiceClient->inTuningMode()); + bool is_in_tuning_mode = gVoiceClient->inTuningMode(); + childSetVisible("wait_text", !is_in_tuning_mode); LLPanel::draw(); F32 voice_power = gVoiceClient->tuningGetEnergy(); S32 discrete_power = 0; - if (!gVoiceClient->inTuningMode()) + if (!is_in_tuning_mode) { discrete_power = 0; } @@ -101,7 +102,7 @@ void LLPanelVoiceDeviceSettings::draw() discrete_power = llmin(4, llfloor((voice_power / LLVoiceClient::OVERDRIVEN_POWER_LEVEL) * 4.f)); } - if (gVoiceClient->inTuningMode()) + if (is_in_tuning_mode) { for(S32 power_bar_idx = 0; power_bar_idx < 5; power_bar_idx++) { @@ -136,7 +137,11 @@ void LLPanelVoiceDeviceSettings::apply() } // assume we are being destroyed by closing our embedding window - gSavedSettings.setF32("AudioLevelMic", mMicVolume); + LLSlider* volume_slider = getChild("mic_volume_slider"); + if(volume_slider) + { + gSavedSettings.setF32("AudioLevelMic", (F32)volume_slider->getValue().asReal()); + } } void LLPanelVoiceDeviceSettings::cancel() @@ -149,6 +154,13 @@ void LLPanelVoiceDeviceSettings::cancel() if(mCtrlOutputDevices) mCtrlOutputDevices->setSimple(mOutputDevice); + + gSavedSettings.setF32("AudioLevelMic", mMicVolume); + LLSlider* volume_slider = getChild("mic_volume_slider"); + if(volume_slider) + { + volume_slider->setValue(mMicVolume); + } } void LLPanelVoiceDeviceSettings::refresh() @@ -156,8 +168,8 @@ void LLPanelVoiceDeviceSettings::refresh() //grab current volume LLSlider* volume_slider = getChild("mic_volume_slider"); // set mic volume tuning slider based on last mic volume setting - mMicVolume = (F32)volume_slider->getValue().asReal(); - gVoiceClient->tuningSetMicVolume(mMicVolume); + F32 current_volume = (F32)volume_slider->getValue().asReal(); + gVoiceClient->tuningSetMicVolume(current_volume); // Fill in popup menus mCtrlInputDevices = getChild("voice_input_device"); @@ -247,13 +259,19 @@ void LLPanelVoiceDeviceSettings::onClose(bool app_quitting) // static void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data) { - gSavedSettings.setString("VoiceInputAudioDevice", ctrl->getValue().asString()); + if(gVoiceClient) + { + gVoiceClient->setCaptureDevice(ctrl->getValue().asString()); + } } // static void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data) { - gSavedSettings.setString("VoiceOutputAudioDevice", ctrl->getValue().asString()); + if(gVoiceClient) + { + gVoiceClient->setRenderDevice(ctrl->getValue().asString()); + } } // diff --git a/linden/indra/newview/llfloaterworldmap.cpp b/linden/indra/newview/llfloaterworldmap.cpp index 815282c..3e35151 100644 --- a/linden/indra/newview/llfloaterworldmap.cpp +++ b/linden/indra/newview/llfloaterworldmap.cpp @@ -743,7 +743,7 @@ void LLFloaterWorldMap::updateLocation() void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S32 y_coord, S32 z_coord) { LLSimInfo* sim_info = LLWorldMap::getInstance()->simInfoFromName(region_name); - z_coord = llclamp(z_coord, 0, 1000); + z_coord = llclamp(z_coord, 0, 4096); if (sim_info) { LLVector3 local_pos; diff --git a/linden/indra/newview/llhudeffectpointat.cpp b/linden/indra/newview/llhudeffectpointat.cpp index d4fc57d..35131cc 100644 --- a/linden/indra/newview/llhudeffectpointat.cpp +++ b/linden/indra/newview/llhudeffectpointat.cpp @@ -441,8 +441,10 @@ bool LLHUDEffectPointAt::calcTargetPosition() mTargetPos -= mSourceObject->getRenderPosition(); - if (!mTargetPos.isFinite()) + if (!llfinite(mTargetPos.lengthSquared())) + { return false; + } if (mSourceObject->isAvatar()) { diff --git a/linden/indra/newview/llhudicon.cpp b/linden/indra/newview/llhudicon.cpp index 3658b8e..bfc88de 100644 --- a/linden/indra/newview/llhudicon.cpp +++ b/linden/indra/newview/llhudicon.cpp @@ -273,7 +273,7 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en LLVector3 dir = end-start; if (LLTriangleRayIntersect(upper_right, upper_left, lower_right, start, dir, NULL, NULL, &t, FALSE) || - LLTriangleRayIntersect(lower_left, lower_right, upper_left, start, dir, NULL, NULL, &t, FALSE)) + LLTriangleRayIntersect(upper_left, lower_left, lower_right, start, dir, NULL, NULL, &t, FALSE)) { if (intersection) { diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp index 0c2c1be..95b626b 100644 --- a/linden/indra/newview/lllogchat.cpp +++ b/linden/indra/newview/lllogchat.cpp @@ -106,7 +106,8 @@ void LLLogChat::loadHistory(std::string filename , void (*callback)(ELogLineType { if(!filename.size()) { - llerrs << "Filename is Empty!" << llendl; + llwarns << "Filename is Empty!" << llendl; + return ; } LLFILE* fptr = LLFile::fopen(makeLogFileName(filename), "r"); /*Flawfinder: ignore*/ diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp index d00a8c8..a9bf4b3 100644 --- a/linden/indra/newview/llmutelist.cpp +++ b/linden/indra/newview/llmutelist.cpp @@ -71,6 +71,24 @@ #include "llviewerobject.h" #include "llviewerobjectlist.h" +namespace +{ + // This method is used to return an object to mute given an object id. + // Its used by the LLMute constructor and LLMuteList::isMuted. + LLViewerObject* get_object_to_mute_from_id(LLUUID object_id) + { + LLViewerObject *objectp = gObjectList.findObject(object_id); + if ((objectp) && (!objectp->isAvatar())) + { + LLViewerObject *parentp = (LLViewerObject *)objectp->getParent(); + if (parentp && parentp->getID() != gAgent.getID()) + { + objectp = parentp; + } + } + return objectp; + } +} // "emptymutelist" class LLDispatchEmptyMuteList : public LLDispatchHandler @@ -105,15 +123,21 @@ LLMute::LLMute(const LLUUID& id, const std::string& name, EType type, U32 flags) mFlags(flags) { // muting is done by root objects only - try to find this objects root - LLViewerObject *objectp = gObjectList.findObject(mID); - if ((objectp) && (!objectp->isAvatar())) + LLViewerObject* mute_object = get_object_to_mute_from_id(id); + if(mute_object && mute_object->getID() != id) { - LLViewerObject *parentp = (LLViewerObject *)objectp->getParent(); - if (parentp) + mID = mute_object->getID(); + LLNameValue* firstname = mute_object->getNVPair("FirstName"); + LLNameValue* lastname = mute_object->getNVPair("LastName"); + if (firstname && lastname) { - mID = parentp->getID(); + mName.assign( firstname->getString() ); + mName.append(" "); + mName.append( lastname->getString() ); } + mType = mute_object->isAvatar() ? AGENT : OBJECT; } + } @@ -662,19 +686,10 @@ BOOL LLMuteList::saveToFile(const std::string& filename) BOOL LLMuteList::isMuted(const LLUUID& id, const std::string& name, U32 flags) const { - LLUUID id_to_check = id; - // for objects, check for muting on their parent prim - LLViewerObject *objectp = gObjectList.findObject(id); - if ((objectp) && (!objectp->isAvatar())) - { - LLViewerObject *parentp = (LLViewerObject *)objectp->getParent(); - if (parentp) - { - id_to_check = parentp->getID(); - } - } - + LLViewerObject* mute_object = get_object_to_mute_from_id(id); + LLUUID id_to_check = (mute_object) ? mute_object->getID() : id; + // don't need name or type for lookup LLMute mute(id_to_check); mute_set_t::const_iterator mute_it = mMutes.find(mute); diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp index d584120..9e837a6 100644 --- a/linden/indra/newview/llnotify.cpp +++ b/linden/indra/newview/llnotify.cpp @@ -971,10 +971,12 @@ LLNotifyBox * LLNotifyBoxView::getFirstNontipBox() const iter++) { // hack! *TODO: Integrate llnotify and llgroupnotify - LLView* view = *iter; - if (view->getName() == "groupnotify") + if(isGroupNotifyBox(*iter)) + { continue; - LLNotifyBox* box = static_cast(view); + } + + LLNotifyBox* box = (LLNotifyBox*)(*iter); if(!box->isTip() && !box->isDead()) { return box; @@ -988,13 +990,23 @@ void LLNotifyBoxView::showOnly(LLView * view) if(view) { // assumes that the argument is actually a child - LLNotifyBox * shown = static_cast(view); + LLNotifyBox * shown = dynamic_cast(view); + if(!shown) + { + return ; + } + // make every other notification invisible for(child_list_const_iter_t iter = getChildList()->begin(); iter != getChildList()->end(); iter++) { - LLNotifyBox * box = static_cast(*iter); + if(isGroupNotifyBox(*iter)) + { + continue; + } + + LLNotifyBox * box = (LLNotifyBox*)(*iter); if(box != view && box->getVisible() && !box->isTip()) { box->setVisible(FALSE); @@ -1014,6 +1026,11 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) iter != notification_queue.end(); iter++) { + if(isGroupNotifyBox(*iter)) + { + continue; + } + LLNotifyBox* notification = (LLNotifyBox*)*iter; if(matcher.matches(notification->getNotifyCallback(), notification->getUserData())) { @@ -1021,3 +1038,14 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) } } } + +bool LLNotifyBoxView::isGroupNotifyBox(const LLView* view) const +{ + if (view->getName() == "groupnotify") + { + return TRUE ; + } + + return FALSE ; +} + diff --git a/linden/indra/newview/llnotify.h b/linden/indra/newview/llnotify.h index 6c598e1..a653d19 100644 --- a/linden/indra/newview/llnotify.h +++ b/linden/indra/newview/llnotify.h @@ -179,6 +179,9 @@ public: // Walks the list and removes any stacked messages for which the given matcher returns TRUE. // Useful when muting people and things in order to clear out any similar previously queued messages. void purgeMessagesMatching(const Matcher& matcher); + +private: + bool isGroupNotifyBox(const LLView* view) const ; }; // This view contains the stack of notification windows. diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp index 0d7caac..d510775 100644 --- a/linden/indra/newview/llpaneldisplay.cpp +++ b/linden/indra/newview/llpaneldisplay.cpp @@ -797,7 +797,15 @@ void LLPanelDisplay::applyResolution() gSavedSettings.setF32("FullScreenAspectRatio", mAspectRatio); } - gViewerWindow->requestResolutionUpdate(!mCtrlWindowed->get(), mCtrlFullScreen->getCurrentIndex()); + // Screen resolution + S32 num_resolutions; + LLWindow::LLWindowResolution* supported_resolutions = + gViewerWindow->getWindow()->getSupportedResolutions(num_resolutions); + U32 resIndex = mCtrlFullScreen->getCurrentIndex(); + gSavedSettings.setS32("FullScreenWidth", supported_resolutions[resIndex].mWidth); + gSavedSettings.setS32("FullScreenHeight", supported_resolutions[resIndex].mHeight); + + gViewerWindow->requestResolutionUpdate(!mCtrlWindowed->get()); send_agent_update(TRUE); diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp index 35a3b47..1af6e86 100644 --- a/linden/indra/newview/llprefsim.cpp +++ b/linden/indra/newview/llprefsim.cpp @@ -73,7 +73,9 @@ protected: LLPrefsIMImpl::LLPrefsIMImpl() - : LLPanel(std::string("IM Prefs Panel")) + : LLPanel(std::string("IM Prefs Panel")), + mGotPersonalInfo(false), + mOriginalIMViaEmail(false) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_im.xml"); } diff --git a/linden/indra/newview/llprefsvoice.cpp b/linden/indra/newview/llprefsvoice.cpp index 568e1be..ae7c921 100644 --- a/linden/indra/newview/llprefsvoice.cpp +++ b/linden/indra/newview/llprefsvoice.cpp @@ -139,10 +139,21 @@ void LLPrefsVoice::apply() gSavedSettings.setBOOL("VoiceCallsFriendsOnly", childGetValue("voice_call_friends_only_check")); gSavedSettings.setBOOL("PushToTalkToggle", childGetValue("push_to_talk_toggle_check")); gSavedSettings.setS32("VoiceEarLocation", childGetValue("ear_location")); + + LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterVoiceDeviceSettings::getInstance(); + if(voice_device_settings) + { + voice_device_settings->apply(); + } } void LLPrefsVoice::cancel() { + LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterVoiceDeviceSettings::getInstance(); + if(voice_device_settings) + { + voice_device_settings->cancel(); + } } void LLPrefsVoice::setKey(KEY key) diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index e891599..0f5a98a 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp @@ -4968,6 +4968,7 @@ LLSelectNode::LLSelectNode(LLViewerObject* object, BOOL glow) mSitName = LLStringUtil::null; mSilhouetteExists = FALSE; mDuplicated = FALSE; + mCreationDate = 0; saveColors(); } @@ -5005,6 +5006,7 @@ LLSelectNode::LLSelectNode(const LLSelectNode& nodep) mFromTaskID = nodep.mFromTaskID; mTouchName = nodep.mTouchName; mSitName = nodep.mSitName; + mCreationDate = nodep.mCreationDate; mSilhouetteVertices = nodep.mSilhouetteVertices; mSilhouetteNormals = nodep.mSilhouetteNormals; diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp index 11882b2..a7c43ce 100644 --- a/linden/indra/newview/lltexturefetch.cpp +++ b/linden/indra/newview/lltexturefetch.cpp @@ -562,6 +562,14 @@ bool LLTextureFetchWorker::doWork(S32 param) { mFetchTimer.reset(); } + + if (mImagePriority <= 0.0f) + { + if (mState < WRITE_TO_CACHE) + { + return true; // cancel request + } + } if (mState == INIT) { @@ -708,7 +716,7 @@ bool LLTextureFetchWorker::doWork(S32 param) mFetcher->lockQueue(); mFetcher->removeFromNetworkQueue(this); mFetcher->unlockQueue(); - if (!mFormattedImage->getDataSize()) + if (mFormattedImage.isNull() || !mFormattedImage->getDataSize()) { // processSimulatorPackets() failed // llwarns << "processSimulatorPackets() failed to load buffer" << llendl; @@ -1050,17 +1058,22 @@ void LLTextureFetchWorker::removeFromCache() bool LLTextureFetchWorker::processSimulatorPackets() { + if (mFormattedImage.isNull() || mRequestedSize < 0) + { + // not sure how we got here, but not a valid state, abort! + mFormattedImage = NULL; + return true; + } + if (mLastPacket >= mFirstPacket) { - llassert_always(mFormattedImage) ; S32 buffer_size = mFormattedImage->getDataSize(); for (S32 i = mFirstPacket; i<=mLastPacket; i++) { - llassert_always(mPackets[i]) ; + llassert_always(mPackets[i]); buffer_size += mPackets[i]->mSize; } bool have_all_data = mLastPacket >= mTotalPackets-1; - llassert_always(mRequestedSize > 0); if (buffer_size >= mRequestedSize || have_all_data) { /// We have enough (or all) data @@ -1641,7 +1654,7 @@ void LLTextureFetch::sendRequestListToSimulators() S32 packet = req->mLastPacket + 1; gMessageSystem->nextBlockFast(_PREHASH_RequestImage); gMessageSystem->addUUIDFast(_PREHASH_Image, req->mID); - gMessageSystem->addS8Fast(_PREHASH_DiscardLevel, (S8)req->mSimRequestedDiscard); + gMessageSystem->addS8Fast(_PREHASH_DiscardLevel, (S8)req->mDesiredDiscard); gMessageSystem->addF32Fast(_PREHASH_DownloadPriority, req->mImagePriority); gMessageSystem->addU32Fast(_PREHASH_Packet, packet); gMessageSystem->addU8Fast(_PREHASH_Type, req->mType); diff --git a/linden/indra/newview/lltextureview.cpp b/linden/indra/newview/lltextureview.cpp index 10a8950..14f62dd 100644 --- a/linden/indra/newview/lltextureview.cpp +++ b/linden/indra/newview/lltextureview.cpp @@ -162,7 +162,7 @@ void LLTextureBar::draw() { color = LLColor4::magenta; } - else if (mImagep->getDecodePriority() == 0.0f) + else if (mImagep->getDecodePriority() <= 0.0f) { color = LLColor4::grey; color[VALPHA] = .7f; } @@ -612,6 +612,7 @@ void LLTextureView::draw() { pri = imagep->getDecodePriority(); } + pri = llclamp(pri, 0.0f, HIGH_PRIORITY-1.f); if (sDebugImages.find(imagep) != sDebugImages.end()) { diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp index cd9afeb..210fca4 100644 --- a/linden/indra/newview/llviewercontrol.cpp +++ b/linden/indra/newview/llviewercontrol.cpp @@ -555,6 +555,7 @@ void settings_setup_listeners() gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); + gSavedSettings.getControl("AudioLevelMic")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); } diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp index f552e63..a4438a5 100644 --- a/linden/indra/newview/llviewerdisplay.cpp +++ b/linden/indra/newview/llviewerdisplay.cpp @@ -253,6 +253,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gViewerWindow->performPick(); } + gViewerWindow->handlePerFrameHover(); LLAppViewer::instance()->pingMainloopTimeout("Display:CheckStates"); LLGLState::checkStates(); diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp index 926de7d..33210cf 100644 --- a/linden/indra/newview/llviewerimage.cpp +++ b/linden/indra/newview/llviewerimage.cpp @@ -238,7 +238,6 @@ void LLViewerImage::init(bool firstinit) mTexelsPerImage = 64.f*64.f; mMaxVirtualSize = 0.f; mDiscardVirtualSize = 0.f; - mMaxCosAngle = -1.f; mRequestedDiscardLevel = -1; mRequestedDownloadPriority = 0.f; mFullyLoaded = FALSE; @@ -422,20 +421,12 @@ BOOL LLViewerImage::createTexture(S32 usename/*= 0*/) //============================================================================ -void LLViewerImage::addTextureStats(F32 pixel_area, - F32 texel_area_ratio, // = 1.0 - F32 cos_center_angle) const // = 1.0 +void LLViewerImage::addTextureStats(F32 virtual_size) const // = 1.0 { - F32 virtual_size = pixel_area / texel_area_ratio; if (virtual_size > mMaxVirtualSize) { mMaxVirtualSize = virtual_size; } - cos_center_angle = llclamp(cos_center_angle, -1.f, 1.f); - if (cos_center_angle > mMaxCosAngle) - { - mMaxCosAngle = cos_center_angle; - } } void LLViewerImage::resetTextureStats(BOOL zero) @@ -443,12 +434,10 @@ void LLViewerImage::resetTextureStats(BOOL zero) if (zero) { mMaxVirtualSize = 0.0f; - mMaxCosAngle = -1.0f; } - else if (getBoostLevel() != LLViewerImage::BOOST_SCULPTED) //don't decay sculpted prim textures + else { mMaxVirtualSize -= mMaxVirtualSize * .10f; // decay by 5%/update - mMaxCosAngle = -1.0f; } } @@ -548,7 +537,7 @@ void LLViewerImage::processTextureStats() if ((sDesiredDiscardBias > 0.0f) && (current_discard >= 0 && mDesiredDiscardLevel >= current_discard)) { - if ( sBoundTextureMemory > sMaxBoundTextureMem*texmem_middle_bound_scale) + if ( (sBoundTextureMemory >> 20) > sMaxBoundTextureMem*texmem_middle_bound_scale) { // Limit the amount of GL memory bound each frame if (mDesiredDiscardLevel > current_discard) @@ -556,7 +545,7 @@ void LLViewerImage::processTextureStats() increase_discard = TRUE; } } - if ( sTotalTextureMemory > sMaxTotalTextureMem*texmem_middle_bound_scale) + if ( (sTotalTextureMemory >> 20) > sMaxTotalTextureMem*texmem_middle_bound_scale) { // Only allow GL to have 2x the video card memory if (!getBoundRecently()) @@ -598,7 +587,7 @@ F32 LLViewerImage::calcDecodePriority() F32 priority; S32 cur_discard = getDiscardLevel(); bool have_all_data = (cur_discard >= 0 && (cur_discard <= mDesiredDiscardLevel)); - F32 pixel_priority = fsqrtf(mMaxVirtualSize) * (1.f + mMaxCosAngle); + F32 pixel_priority = fsqrtf(mMaxVirtualSize); const S32 MIN_NOT_VISIBLE_FRAMES = 30; // NOTE: this function is not called every frame mDecodeFrame++; if (pixel_priority > 0.f) @@ -638,17 +627,12 @@ F32 LLViewerImage::calcDecodePriority() return mDecodePriority; } } - else if ((mBoostLevel == LLViewerImage::BOOST_SCULPTED) && !have_all_data) - { - // Sculpted images are small, treat them like they always have no data. - priority = 900000.f; - } else if (cur_discard < 0) { - // We don't have any data yet, so we don't know the size of the image, treat as 1024x1024 + // We don't have any data yet, so we don't know the size of the image, treat as 32x32 // priority = 900000.f; static const F64 log_2 = log(2.0); - F32 desired = (F32)(log(1024.0/pixel_priority) / log_2); + F32 desired = (F32)(log(32.0/pixel_priority) / log_2); S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired + 1; ddiscard = llclamp(ddiscard, 1, 9); priority = ddiscard*100000.f; @@ -702,14 +686,7 @@ F32 LLViewerImage::maxDecodePriority() void LLViewerImage::setDecodePriority(F32 priority) { llassert(!mInImageList); - if (priority < 0.0f) - { - mDecodePriority = calcDecodePriority(); - } - else - { - mDecodePriority = priority; - } + mDecodePriority = priority; } void LLViewerImage::setBoostLevel(S32 level) @@ -766,6 +743,7 @@ bool LLViewerImage::updateFetch() S32 current_discard = getDiscardLevel(); S32 desired_discard = getDesiredDiscardLevel(); F32 decode_priority = getDecodePriority(); + decode_priority = llmax(decode_priority, 0.0f); if (mIsFetching) { @@ -783,7 +761,7 @@ bool LLViewerImage::updateFetch() else { mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority, - mFetchPriority, mFetchDeltaTime, mRequestDeltaTime); + mFetchPriority, mFetchDeltaTime, mRequestDeltaTime); } // We may have data ready regardless of whether or not we are finished (e.g. waiting on write) @@ -817,7 +795,7 @@ bool LLViewerImage::updateFetch() if (!mIsFetching) { - if (mRawDiscardLevel < 0 || mRawDiscardLevel == INVALID_DISCARD_LEVEL) + if ((decode_priority > 0) && (mRawDiscardLevel < 0 || mRawDiscardLevel == INVALID_DISCARD_LEVEL)) { // We finished but received no data if (current_discard < 0) @@ -840,9 +818,9 @@ bool LLViewerImage::updateFetch() destroyRawImage(); } } - else if (mDecodePriority >= 0.f) + else { - LLAppViewer::getTextureFetch()->updateRequestPriority(mID, mDecodePriority); + LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority); } } diff --git a/linden/indra/newview/llviewerimage.h b/linden/indra/newview/llviewerimage.h index 82da8d2..c735cb0 100644 --- a/linden/indra/newview/llviewerimage.h +++ b/linden/indra/newview/llviewerimage.h @@ -187,27 +187,7 @@ public: // New methods for determining image quality/priority // texel_area_ratio is ("scaled" texel area)/(original texel area), approximately. - void addTextureStats(F32 pixel_area) const - { - mMaxCosAngle = 1.0f; - if (pixel_area > mMaxVirtualSize) - { - mMaxVirtualSize = pixel_area; - } - } - void addTextureStats(F32 pixel_area, - F32 texel_area_ratio) const - { - mMaxCosAngle = 1.0f; - F32 virtual_size = pixel_area / texel_area_ratio; - if (virtual_size > mMaxVirtualSize) - { - mMaxVirtualSize = virtual_size; - } - } - void addTextureStats(F32 pixel_area, - F32 texel_area_ratio, - F32 cos_center_angle) const; + void addTextureStats(F32 virtual_size) const; void resetTextureStats(BOOL zero = FALSE); // Process image stats to determine priority/quality requirements. @@ -304,7 +284,6 @@ public: // Data used for calculating required image priority/quality level/decimation mutable F32 mMaxVirtualSize; // The largest virtual size of the image, in pixels - how much data to we need? - mutable F32 mMaxCosAngle; // The largest cos of the angle between camera X vector and the object F32 mTexelsPerImage; // Texels per image. F32 mDiscardVirtualSize; // Virtual size used to calculate desired discard diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp index 5dbfab0..e48f6ae 100644 --- a/linden/indra/newview/llviewerimagelist.cpp +++ b/linden/indra/newview/llviewerimagelist.cpp @@ -500,10 +500,10 @@ void LLViewerImageList::updateImages(F32 max_time) { sNumImagesStat.addValue(sNumImages); sNumRawImagesStat.addValue(LLImageRaw::sRawImageCount); - sGLTexMemStat.addValue(LLImageGL::sGlobalTextureMemory/(1024.f*1024.f)); - sGLBoundMemStat.addValue(LLImageGL::sBoundTextureMemory/(1024.f*1024.f)); - sRawMemStat.addValue(LLImageRaw::sGlobalRawMemory/(1024.f*1024.f)); - sFormattedMemStat.addValue(LLImageFormatted::sGlobalFormattedMemory/(1024.f*1024.f)); + sGLTexMemStat.addValue((F32)(LLImageGL::sGlobalTextureMemory >> 20)); + sGLBoundMemStat.addValue((F32)(LLImageGL::sBoundTextureMemory >> 20)); + sRawMemStat.addValue((F32)(LLImageRaw::sGlobalRawMemory >> 20)); + sFormattedMemStat.addValue((F32)(LLImageFormatted::sGlobalFormattedMemory >> 20)); updateImagesDecodePriorities(); max_time -= updateImagesFetchTextures(max_time); @@ -588,9 +588,12 @@ void LLViewerImageList::updateImagesDecodePriorities() imagep->processTextureStats(); F32 old_priority = imagep->getDecodePriority(); + F32 old_priority_test = llmax(old_priority, 0.0f); F32 decode_priority = imagep->calcDecodePriority(); + F32 decode_priority_test = llmax(decode_priority, 0.0f); // Ignore < 20% difference - if ((decode_priority < old_priority * .8f || decode_priority > old_priority * 1.25f)) + if ((decode_priority_test < old_priority_test * .8f) || + (decode_priority_test > old_priority_test * 1.25f)) { removeImageFromList(imagep); imagep->setDecodePriority(decode_priority); diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index 2d64712..023c758 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -403,6 +403,7 @@ void force_error_llerror(void *); void force_error_bad_memory_access(void *); void force_error_infinite_loop(void *); void force_error_software_exception(void *); +void force_error_driver_crash(void *); void handle_stopall(void*); //void handle_hinge(void*); @@ -936,6 +937,7 @@ void init_client_menu(LLMenuGL* menu) sub->append(new LLMenuItemCallGL("Force LLError And Crash", &force_error_llerror)); sub->append(new LLMenuItemCallGL("Force Bad Memory Access", &force_error_bad_memory_access)); sub->append(new LLMenuItemCallGL("Force Infinite Loop", &force_error_infinite_loop)); + sub->append(new LLMenuItemCallGL("Force Driver Crash", &force_error_driver_crash)); sub->append(new LLMenuItemCallGL("Force Disconnect Viewer", &handle_disconnect_viewer)); // *NOTE:Mani this isn't handled yet... sub->append(new LLMenuItemCallGL("Force Software Exception", &force_error_unhandled_exception)); sub->createJumpKeys(); @@ -6921,6 +6923,11 @@ void force_error_software_exception(void *) LLAppViewer::instance()->forceErrorSoftwareException(); } +void force_error_driver_crash(void *) +{ + LLAppViewer::instance()->forceErrorDriverCrash(); +} + class LLToolsUseSelectionForGrid : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) diff --git a/linden/indra/newview/llviewerpartsim.cpp b/linden/indra/newview/llviewerpartsim.cpp index 529ec4d..c303fc5 100644 --- a/linden/indra/newview/llviewerpartsim.cpp +++ b/linden/indra/newview/llviewerpartsim.cpp @@ -53,6 +53,7 @@ const F32 PART_SIM_BOX_RAD = 0.5f*F_SQRT3*PART_SIM_BOX_SIDE; //static S32 LLViewerPartSim::sMaxParticleCount = 0; S32 LLViewerPartSim::sParticleCount = 0; +S32 LLViewerPartSim::sParticleCount2 = 0; // This controls how greedy individual particle burst sources are allowed to be, and adapts according to how near the particle-count limit we are. F32 LLViewerPartSim::sParticleAdaptiveRate = 0.0625f; F32 LLViewerPartSim::sParticleBurstRate = 0.5f; @@ -84,12 +85,16 @@ LLViewerPart::LLViewerPart() : { LLMemType mt(LLMemType::MTYPE_PARTICLES); mPartSourcep = NULL; + + ++LLViewerPartSim::sParticleCount2 ; } LLViewerPart::~LLViewerPart() { LLMemType mt(LLMemType::MTYPE_PARTICLES); mPartSourcep = NULL; + + --LLViewerPartSim::sParticleCount2 ; } void LLViewerPart::init(LLPointer sourcep, LLViewerImage *imagep, LLVPCallback cb) @@ -263,6 +268,8 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt) LLVector3 gravity(0.f, 0.f, GRAVITY); + LLViewerPartSim::checkParticleCount(mParticles.size()); + LLViewerRegion *regionp = getRegion(); S32 end = (S32) mParticles.size(); for (S32 i = 0 ; i < (S32)mParticles.size();) @@ -416,6 +423,8 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt) gObjectList.killObject(mVOPartGroupp); mVOPartGroupp = NULL; } + + LLViewerPartSim::checkParticleCount() ; } @@ -451,6 +460,19 @@ void LLViewerPartGroup::removeParticlesByID(const U32 source_id) // // +//static +void LLViewerPartSim::checkParticleCount(U32 size) +{ + if(LLViewerPartSim::sParticleCount2 != LLViewerPartSim::sParticleCount) + { + llerrs << "sParticleCount: " << LLViewerPartSim::sParticleCount << " ; sParticleCount2: " << LLViewerPartSim::sParticleCount2 << llendl ; + } + + if(size > (U32)LLViewerPartSim::sParticleCount2) + { + llerrs << "curren particle size: " << LLViewerPartSim::sParticleCount2 << " array size: " << size << llendl ; + } +} LLViewerPartSim::LLViewerPartSim() { @@ -509,6 +531,12 @@ void LLViewerPartSim::addPart(LLViewerPart* part) { put(part); } + else + { + //delete the particle if can not add it in + delete part ; + part = NULL ; + } } @@ -544,7 +572,7 @@ LLViewerPartGroup *LLViewerPartSim::put(LLViewerPart* part) if(!return_group) { llassert_always(part->mPosAgent.isFinite()); - LLViewerPartGroup *groupp = createViewerPartGroup(part->mPosAgent, desired_size, part->mFlags & LLPartData::LL_PART_HUD); + LLViewerPartGroup *groupp = createViewerPartGroup(part->mPosAgent, desired_size, part->mFlags & LLPartData::LL_PART_HUD); groupp->mUniformParticles = (part->mScale.mV[0] == part->mScale.mV[1] && !(part->mFlags & LLPartData::LL_PART_FOLLOW_VELOCITY_MASK)); if (!groupp->addPart(part)) diff --git a/linden/indra/newview/llviewerpartsim.h b/linden/indra/newview/llviewerpartsim.h index 2524d6b..81394e6 100644 --- a/linden/indra/newview/llviewerpartsim.h +++ b/linden/indra/newview/llviewerpartsim.h @@ -197,6 +197,12 @@ protected: static const F32 PART_THROTTLE_RESCALE; static const F32 PART_ADAPT_RATE_MULT; static const F32 PART_ADAPT_RATE_MULT_RECIP; + +//debug use only +public: + static S32 sParticleCount2; + + static void checkParticleCount(U32 size = 0) ; }; #endif // LL_LLVIEWERPARTSIM_H diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp index 111fc14..0b4c0f3 100644 --- a/linden/indra/newview/llviewerstats.cpp +++ b/linden/indra/newview/llviewerstats.cpp @@ -40,6 +40,7 @@ #include "llappviewer.h" #include "pipeline.h" +#include "lltexturefetch.h" #include "llviewerobjectlist.h" #include "llviewerimagelist.h" #include "lltexlayer.h" @@ -562,15 +563,12 @@ void update_statistics(U32 frame_count) LLViewerStats::getInstance()->mAssetKBitStat.addValue(gTransferManager.getTransferBitsIn(LLTCT_ASSET)/1024.f); gTransferManager.resetTransferBitsIn(LLTCT_ASSET); - static S32 tex_bits_idle_count = 0; - if (LLViewerImageList::sTextureBits == 0) + if (LLAppViewer::getTextureFetch()->getNumRequests() == 0) { - if (++tex_bits_idle_count >= 30) - gDebugTimers[0].pause(); + gDebugTimers[0].pause(); } else { - tex_bits_idle_count = 0; gDebugTimers[0].unpause(); } @@ -761,12 +759,15 @@ void send_stats() // misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6 // misc["int_1"] = LLSD::Integer(gSavedSettings.getU32("RenderQualityPerformance")); // Steve: 1.21 // misc["int_2"] = LLSD::Integer(gFrameStalls); // Steve: 1.21 - F32 unbaked_time = LLVOAvatar::sUnbakedTime / gFrameTime; - misc["int_1"] = LLSD::Integer(unbaked_time * 1000.f); // Steve: 1.22 - F32 grey_time = LLVOAvatar::sGreyTime / gFrameTime; - misc["int_2"] = LLSD::Integer(grey_time * 1000.f); // Steve: 1.22 + + F32 unbaked_time = LLVOAvatar::sUnbakedTime * 1000.f / gFrameTimeSeconds; + misc["int_1"] = LLSD::Integer(unbaked_time); // Steve: 1.22 + F32 grey_time = LLVOAvatar::sGreyTime * 1000.f / gFrameTimeSeconds; + misc["int_2"] = LLSD::Integer(grey_time); // Steve: 1.22 + + llinfos << "Misc Stats: int_1: " << misc["int_1"] << " int_2: " << misc["int_2"] << llendl; + llinfos << "Misc Stats: string_1: " << misc["string_1"] << " string_2: " << misc["string_2"] << llendl; LLViewerStats::getInstance()->addToMessage(body); - LLHTTPClient::post(url, body, new ViewerStatsResponder()); } diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index 2f49b67..1a9a208 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp @@ -918,7 +918,7 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK // *HACK: this should be rolled into the composite tool logic, not // hardcoded at the top level. - if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode()) + if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance()) { // If the current tool didn't process the click, we should show // the pie menu. This can be done by passing the event to the pie @@ -2098,12 +2098,7 @@ void LLViewerWindow::reshape(S32 width, S32 height) gSavedSettings.setBOOL("FullScreen", mWantFullscreen); // store new settings for the mode we are in, regardless - if (mWindow->getFullscreen()) - { - gSavedSettings.setS32("FullScreenWidth", width); - gSavedSettings.setS32("FullScreenHeight", height); - } - else + if (!mWindow->getFullscreen()) { // Only save size if not maximized BOOL maximized = mWindow->getMaximized(); @@ -3586,6 +3581,16 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de // world coordinates of mouse LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y); LLVector3 mouse_point_global = LLViewerCamera::getInstance()->getOrigin(); + + //get near clip plane + LLVector3 n = LLViewerCamera::getInstance()->getAtAxis(); + LLVector3 p = mouse_point_global + n * LLViewerCamera::getInstance()->getNear(); + + //project mouse point onto plane + LLVector3 pos; + line_plane(mouse_point_global, mouse_direction_global, p, n, pos); + mouse_point_global = pos; + LLVector3 mouse_world_start = mouse_point_global; LLVector3 mouse_world_end = mouse_point_global + mouse_direction_global * depth; @@ -4695,79 +4700,13 @@ void LLViewerWindow::getTargetWindow(BOOL& fullscreen, S32& width, S32& height) } } -bool LLViewerWindow::updateResolution() -{ - if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio")) - { - getWindow()->setNativeAspectRatio(0.f); - } - else - { - getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio")); - } - - reshape(getWindowDisplayWidth(), getWindowDisplayHeight()); - - // Screen resolution - S32 num_resolutions; - LLWindow::LLWindowResolution* supported_resolutions = getWindow()->getSupportedResolutions(num_resolutions); - - // check if resolution has changed - BOOL targetFullscreen; - S32 targetWidth; - S32 targetHeight; - - getTargetWindow(targetFullscreen, targetWidth, targetHeight); - - if ((mIsFullscreenChecked != (bool) targetFullscreen) || - (mIsFullscreenChecked && - (supported_resolutions[mCurrResolutionIndex].mWidth != targetWidth || - supported_resolutions[mCurrResolutionIndex].mHeight != targetHeight) - )) - { - // change fullscreen resolution or switch in/out of windowed mode - BOOL result; - - BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED); - if (mIsFullscreenChecked) - { - result = changeDisplaySettings(TRUE, - LLCoordScreen( supported_resolutions[mCurrResolutionIndex].mWidth, - supported_resolutions[mCurrResolutionIndex].mHeight), - gSavedSettings.getBOOL("DisableVerticalSync"), - logged_in); - } - else - { - result = changeDisplaySettings(FALSE, - LLCoordScreen(gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight")), - TRUE, - logged_in); - } - if (!result) - { - - // GL is non-existent at this point, so we can't continue. - llerrs << "LLPanelDisplay::apply() failed" << llendl; - } - } - - // force aspect ratio - if (mIsFullscreenChecked) - { - LLViewerCamera::getInstance()->setAspect( getDisplayAspectRatio() ); - } - return true; -} - -void LLViewerWindow::requestResolutionUpdate(bool fullscreen_checked, U32 resolution_index) +void LLViewerWindow::requestResolutionUpdate(bool fullscreen_checked) { mResDirty = true; + mWantFullscreen = fullscreen_checked; mIsFullscreenChecked = fullscreen_checked; - mCurrResolutionIndex = resolution_index; } - BOOL LLViewerWindow::checkSettings() { if (mStatesDirty) @@ -4780,42 +4719,70 @@ BOOL LLViewerWindow::checkSettings() // We want to update the resolution AFTER the states getting refreshed not before. if (mResDirty) { - updateResolution(); + if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio")) + { + getWindow()->setNativeAspectRatio(0.f); + } + else + { + getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio")); + } + + reshape(getWindowDisplayWidth(), getWindowDisplayHeight()); + + // force aspect ratio + if (mIsFullscreenChecked) + { + LLViewerCamera::getInstance()->setAspect( getDisplayAspectRatio() ); + } + mResDirty = false; // This will force a state update the next frame. mStatesDirty = true; } BOOL is_fullscreen = mWindow->getFullscreen(); - if (is_fullscreen && !mWantFullscreen) - { - changeDisplaySettings(FALSE, - LLCoordScreen(gSavedSettings.getS32("WindowWidth"), - gSavedSettings.getS32("WindowHeight")), - TRUE, - mShowFullscreenProgress); - mStatesDirty = true; - return TRUE; + if(mWantFullscreen) + { + LLCoordScreen screen_size; + LLCoordScreen desired_screen_size(gSavedSettings.getS32("FullScreenWidth"), + gSavedSettings.getS32("FullScreenHeight")); + getWindow()->getSize(&screen_size); + if(!is_fullscreen || + screen_size.mX != desired_screen_size.mX + || screen_size.mY != desired_screen_size.mY) + { + if (!LLStartUp::canGoFullscreen()) + { + return FALSE; + } + + LLGLState::checkStates(); + LLGLState::checkTextureChannels(); + changeDisplaySettings(TRUE, + desired_screen_size, + gSavedSettings.getBOOL("DisableVerticalSync"), + mShowFullscreenProgress); + + LLGLState::checkStates(); + LLGLState::checkTextureChannels(); + mStatesDirty = true; + return TRUE; + } } - else if (!is_fullscreen && mWantFullscreen) + else { - if (!LLStartUp::canGoFullscreen()) + if(is_fullscreen) { - return FALSE; + // Changing to windowed mode. + changeDisplaySettings(FALSE, + LLCoordScreen(gSavedSettings.getS32("WindowWidth"), + gSavedSettings.getS32("WindowHeight")), + TRUE, + mShowFullscreenProgress); + mStatesDirty = true; + return TRUE; } - - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - changeDisplaySettings(TRUE, - LLCoordScreen(gSavedSettings.getS32("FullScreenWidth"), - gSavedSettings.getS32("FullScreenHeight")), - gSavedSettings.getBOOL("DisableVerticalSync"), - mShowFullscreenProgress); - - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - mStatesDirty = true; - return TRUE; } return FALSE; } @@ -4846,13 +4813,9 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size, BOOL old_fullscreen = mWindow->getFullscreen(); if (!old_fullscreen && fullscreen && !LLStartUp::canGoFullscreen()) { - // we can't do this now, so do it later - - gSavedSettings.setS32("FullScreenWidth", size.mX); - gSavedSettings.setS32("FullScreenHeight", size.mY); - //gSavedSettings.setBOOL("DisableVerticalSync", disable_vsync); - - return TRUE; // a lie..., because we'll get to it later + // Not allowed to switch to fullscreen now, so exit early. + // *NOTE: This case should never be reached, but just-in-case. + return TRUE; } U32 fsaa = gSavedSettings.getU32("RenderFSAASamples"); @@ -4939,7 +4902,7 @@ BOOL LLViewerWindow::changeDisplaySettings(BOOL fullscreen, LLCoordScreen size, #if LL_WINDOWS // Only trigger a reshape after switching to fullscreen; otherwise rely on the windows callback // (otherwise size is wrong; this is the entire window size, reshape wants the visible window size) - if (fullscreen) + if (fullscreen && result_first_try) #endif { reshape(size.mX, size.mY); @@ -5310,7 +5273,16 @@ void LLPickInfo::fetchResults() //{ // mPickType = PICK_PARCEL_WALL; //} - if (objectp) + if (hit_icon && + (!objectp || + icon_dist < (LLViewerCamera::getInstance()->getOrigin()-intersection).magVec())) + { + // was this name referring to a hud icon? + mHUDIcon = hit_icon; + mPickType = PICK_ICON; + mPosGlobal = mHUDIcon->getPositionGlobal(); + } + else if (objectp) { if( objectp->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH ) { @@ -5362,16 +5334,7 @@ void LLPickInfo::fetchResults() } } } - if (hit_icon && - (!objectp || - icon_dist < (LLViewerCamera::getInstance()->getOrigin()-intersection).magVec())) - { - // was this name referring to a hud icon? - mHUDIcon = hit_icon; - mPickType = PICK_ICON; - mPosGlobal = mHUDIcon->getPositionGlobal(); - } - + if (mPickCallback) { mPickCallback(*this); diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h index 49fa3c4..c83c57b 100644 --- a/linden/indra/newview/llviewerwindow.h +++ b/linden/indra/newview/llviewerwindow.h @@ -344,8 +344,7 @@ public: void toggleFullscreen(BOOL show_progress); // handle shutting down GL and bringing it back up - bool updateResolution(void); - void requestResolutionUpdate(bool fullscreen_checked, U32 resolution_index); + void requestResolutionUpdate(bool fullscreen_checked); BOOL checkSettings(); void restartDisplay(BOOL show_progress_bar); BOOL changeDisplaySettings(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync, BOOL show_progress_bar); diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp index 42976ed..e29ea78 100644 --- a/linden/indra/newview/llvoavatar.cpp +++ b/linden/indra/newview/llvoavatar.cpp @@ -288,7 +288,9 @@ BOOL LLVOAvatar::sJointDebug = FALSE; S32 LLVOAvatar::sCurJoint = 0; S32 LLVOAvatar::sCurVolume = 0; F32 LLVOAvatar::sUnbakedTime = 0.f; +F32 LLVOAvatar::sUnbakedUpdateTime = 0.f; F32 LLVOAvatar::sGreyTime = 0.f; +F32 LLVOAvatar::sGreyUpdateTime = 0.f; struct LLAvatarTexData { @@ -4721,7 +4723,7 @@ void LLVOAvatar::addLocalTextureStats( LLVOAvatar::ELocTexIndex idx, LLViewerIma desired_pixels = llmin(mPixelArea, (F32)LOCTEX_IMAGE_AREA_OTHER ); imagep->setBoostLevel(LLViewerImage::BOOST_AVATAR); } - imagep->addTextureStats( desired_pixels, texel_area_ratio ); + imagep->addTextureStats( desired_pixels / texel_area_ratio ); if (imagep->getDiscardLevel() < 0) { mHasGrey = TRUE; // for statistics gathering @@ -4743,7 +4745,7 @@ void LLVOAvatar::addBakedTextureStats( LLViewerImage* imagep, F32 pixel_area, F3 { mMaxPixelArea = llmax(pixel_area, mMaxPixelArea); mMinPixelArea = llmin(pixel_area, mMinPixelArea); - imagep->addTextureStats(pixel_area, texel_area_ratio); + imagep->addTextureStats(pixel_area / texel_area_ratio); imagep->setBoostLevel(boost_level); } @@ -9171,9 +9173,19 @@ void LLVOAvatar::cullAvatarsByPixelArea() } else { - sUnbakedTime += gFrameTimeSeconds; + if (gFrameTimeSeconds != sUnbakedUpdateTime) // only update once per frame + { + sUnbakedUpdateTime = gFrameTimeSeconds; + sUnbakedTime += gFrameIntervalSeconds; + } if (grey_avatars > 0) - sGreyTime += gFrameTimeSeconds; + { + if (gFrameTimeSeconds != sGreyUpdateTime) // only update once per frame + { + sGreyUpdateTime = gFrameTimeSeconds; + sGreyTime += gFrameIntervalSeconds; + } + } } } diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h index 81cfc6f..9806ceb 100644 --- a/linden/indra/newview/llvoavatar.h +++ b/linden/indra/newview/llvoavatar.h @@ -914,7 +914,9 @@ public: static ETextureIndex sBakedTextureIndices[BAKED_TEXTURE_COUNT]; static F32 sUnbakedTime; // Total seconds with >=1 unbaked avatars + static F32 sUnbakedUpdateTime; // Last time stats were updated (to prevent multiple updates per frame) static F32 sGreyTime; // Total seconds with >=1 grey avatars + static F32 sGreyUpdateTime; // Last time stats were updated (to prevent multiple updates per frame) //-------------------------------------------------------------------- // Texture Layer Sets and Global Colors diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp index b1bf989..3bec16f 100644 --- a/linden/indra/newview/llvoiceclient.cpp +++ b/linden/indra/newview/llvoiceclient.cpp @@ -932,6 +932,8 @@ void LLVoiceClient::updateSettings() setCaptureDevice(inputDevice); std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); setRenderDevice(outputDevice); + F32 mic_level = gSavedSettings.getF32("AudioLevelMic"); + setMicGain(mic_level); setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled")); } diff --git a/linden/indra/newview/llvopartgroup.cpp b/linden/indra/newview/llvopartgroup.cpp index e5e5c2e..a91b59f 100644 --- a/linden/indra/newview/llvopartgroup.cpp +++ b/linden/indra/newview/llvopartgroup.cpp @@ -180,6 +180,8 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable) F32 pixel_meter_ratio = LLViewerCamera::getInstance()->getPixelMeterRatio(); pixel_meter_ratio *= pixel_meter_ratio; + LLViewerPartSim::checkParticleCount(mViewerPartGroupp->mParticles.size()) ; + S32 count=0; mDepth = 0.f; S32 i = 0 ; diff --git a/linden/indra/newview/llvotextbubble.cpp b/linden/indra/newview/llvotextbubble.cpp index f9a12a4..ba53bd3 100644 --- a/linden/indra/newview/llvotextbubble.cpp +++ b/linden/indra/newview/llvotextbubble.cpp @@ -118,30 +118,16 @@ BOOL LLVOTextBubble::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) void LLVOTextBubble::updateTextures(LLAgent &agent) { // Update the image levels of all textures... - // First we do some quick checks. - U32 i; - // This doesn't take into account whether the object is in front - // or behind... - - LLVector3 position_local = getPositionAgent() - agent.getCameraPositionAgent(); - F32 dot_product = position_local * agent.getFrameAgent().getAtAxis(); - F32 cos_angle = dot_product / position_local.length(); - - if (cos_angle > 1.f) - { - cos_angle = 1.f; - } - - for (i = 0; i < getNumTEs(); i++) + for (U32 i = 0; i < getNumTEs(); i++) { const LLTextureEntry *te = getTE(i); F32 texel_area_ratio = fabs(te->mScaleS * te->mScaleT); - + texel_area_ratio = llclamp(texel_area_ratio, .125f, 16.f); LLViewerImage *imagep = getTEImage(i); if (imagep) { - imagep->addTextureStats(mPixelArea, texel_area_ratio, cos_angle); + imagep->addTextureStats(mPixelArea / texel_area_ratio); } } } diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp index 46af322..6baff85 100644 --- a/linden/indra/newview/llvovolume.cpp +++ b/linden/indra/newview/llvovolume.cpp @@ -68,8 +68,7 @@ const S32 MIN_QUIET_FRAMES_COALESCE = 30; const F32 FORCE_SIMPLE_RENDER_AREA = 512.f; const F32 FORCE_CULL_AREA = 8.f; -// sadly - we can't lower sculptie rez below b/c residents have a LOT of content that depends on the 128 -const S32 SCULPT_REZ = 128; +const S32 MAX_SCULPT_REZ = 128; BOOL gAnimateTextures = TRUE; extern BOOL gHideSelectedObjects; @@ -498,6 +497,7 @@ void LLVOVolume::updateTextures() else if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY)) { F32 pri = imagep->getDecodePriority(); + pri = llmax(pri, 0.0f); if (pri < min_vsize) min_vsize = pri; if (pri > max_vsize) max_vsize = pri; } @@ -516,7 +516,10 @@ void LLVOVolume::updateTextures() mSculptTexture = gImageList.getImage(id); if (mSculptTexture.notNull()) { - mSculptTexture->addTextureStats(SCULPT_REZ * SCULPT_REZ); + S32 lod = llmin(mLOD, 3); + F32 lodf = ((F32)(4-lod)/4.f); // 0 -> 1.0, 3 -> .25 + F32 tex_size = lodf * MAX_SCULPT_REZ; + mSculptTexture->addTextureStats(2.f * tex_size * tex_size); mSculptTexture->setBoostLevel(llmax((S32)mSculptTexture->getBoostLevel(), (S32)LLViewerImage::BOOST_SCULPTED)); } @@ -1946,6 +1949,8 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e return FALSE; } + BOOL ret = FALSE; + LLVolume* volume = getVolume(); if (volume) { @@ -2001,6 +2006,8 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e if (face_hit >= 0 && mDrawable->getNumFaces() > face_hit) { LLFace* face = mDrawable->getFace(face_hit); + v_end = p; + if (pick_transparent || !face->getTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n))) { if (face_hitp != NULL) @@ -2030,13 +2037,13 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e *tex_coord = tc; } - return TRUE; + ret = TRUE; } } } } - return FALSE; + return ret; } U32 LLVOVolume::getPartitionType() const diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp index 7d44fcd..b595073 100644 --- a/linden/indra/newview/llwindebug.cpp +++ b/linden/indra/newview/llwindebug.cpp @@ -122,7 +122,9 @@ MODULE32_NEST Module32Next_; #define NL L"\r\n" //new line BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, LPWSTR Module_Name, PBYTE & Module_Addr); - +void WINAPI Get_Call_Stack(const EXCEPTION_RECORD* exception_record, + const CONTEXT* context_record, + LLSD& info); void printError( CHAR* msg ) { @@ -185,69 +187,6 @@ BOOL GetProcessThreadIDs(DWORD process_id, std::vector& thread_ids) return( TRUE ); } -void WINAPI GetCallStackData(const CONTEXT* context_struct, LLSD& info) -{ - // Fill Str with call stack info. - // pException can be either GetExceptionInformation() or NULL. - // If pException = NULL - get current call stack. - - LPWSTR Module_Name = new WCHAR[MAX_PATH]; - PBYTE Module_Addr = 0; - - typedef struct STACK - { - STACK * Ebp; - PBYTE Ret_Addr; - DWORD Param[0]; - } STACK, * PSTACK; - - PSTACK Ebp; - - if(context_struct) - { - Ebp = (PSTACK)context_struct->Ebp; - } - else - { - // The context struct is NULL, - // so we will use the current stack. - Ebp = (PSTACK)&context_struct - 1; - - // Skip frame of GetCallStackData(). - if (!IsBadReadPtr(Ebp, sizeof(PSTACK))) - Ebp = Ebp->Ebp; //caller ebp - } - - // Trace CALL_TRACE_MAX calls maximum - not to exceed DUMP_SIZE_MAX. - // Break trace on wrong stack frame. - for (int Ret_Addr_I = 0, i = 0; - (Ret_Addr_I < CALL_TRACE_MAX) && !IsBadReadPtr(Ebp, sizeof(PSTACK)) && !IsBadCodePtr(FARPROC(Ebp->Ret_Addr)); - Ret_Addr_I++, Ebp = Ebp->Ebp, ++i) - { - // If module with Ebp->Ret_Addr found. - - if (Get_Module_By_Ret_Addr(Ebp->Ret_Addr, Module_Name, Module_Addr)) - { - // Save module's address and full path. - info["CallStack"][i]["ModuleName"] = ll_convert_wide_to_string(Module_Name); - info["CallStack"][i]["ModuleAddress"] = (int)Module_Addr; - info["CallStack"][i]["CallOffset"] = (int)(Ebp->Ret_Addr - Module_Addr); - - LLSD params; - // Save 5 params of the call. We don't know the real number of params. - if (!IsBadReadPtr(Ebp, sizeof(PSTACK) + 5 * sizeof(DWORD))) - { - for(int j = 0; j < 5; ++j) - { - params[j] = (int)Ebp->Param[j]; - } - } - info["CallStack"][i]["Parameters"] = params; - } - info["CallStack"][i]["ReturnAddress"] = (int)Ebp->Ret_Addr; - } -} - BOOL GetThreadCallStack(DWORD thread_id, LLSD& info) { if(GetCurrentThreadId() == thread_id) @@ -272,7 +211,7 @@ BOOL GetThreadCallStack(DWORD thread_id, LLSD& info) context_struct.ContextFlags = CONTEXT_FULL; if(GetThreadContext(thread_handle, &context_struct)) { - GetCallStackData(&context_struct, info); + Get_Call_Stack(NULL, &context_struct, info); result = true; } ResumeThread(thread_handle); @@ -327,16 +266,98 @@ BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, LPWSTR Module_Name, PBYTE & M return found; } //Get_Module_By_Ret_Addr +bool has_valid_call_before(PDWORD cur_stack_loc) +{ + PBYTE p_first_byte = (PBYTE)(*cur_stack_loc - 1); + PBYTE p_second_byte = (PBYTE)(*cur_stack_loc -2); + PBYTE p_fifth_byte = (PBYTE)(*cur_stack_loc - 5); + PBYTE p_sixth_byte = (PBYTE)(*cur_stack_loc - 6); + + // make sure we can read it + if(IsBadReadPtr(p_sixth_byte, 6 * sizeof(BYTE))) + { + return false; + } + + // check for 9a + 4 bytes + if(*p_fifth_byte == 0x9A) + { + return true; + } + + // Check for E8 + 4 bytes and last byte is 00 or FF + if(*p_fifth_byte == 0xE8 && (*p_first_byte == 0x00 || *p_first_byte == 0xFF)) + { + return true; + } + + // the other is six bytes + if(*p_sixth_byte == 0xFF || *p_second_byte == 0xFF) + { + return true; + } + + return false; +} + +PBYTE get_valid_frame(PBYTE esp) +{ + PDWORD cur_stack_loc = NULL; + const int max_search = 400; + WCHAR module_name[MAX_PATH]; + PBYTE module_addr = 0; + + // round to highest multiple of four + esp = (esp + (4 - ((int)esp % 4)) % 4); + + // scroll through stack a few hundred places. + for (cur_stack_loc = (PDWORD) esp; cur_stack_loc < (PDWORD)esp + max_search; cur_stack_loc += 1) + { + // if you can read the pointer, + if (IsBadReadPtr(cur_stack_loc, sizeof(PDWORD))) + { + continue; + } + + // check if it's in a module + if (!Get_Module_By_Ret_Addr((PBYTE)*cur_stack_loc, module_name, module_addr)) + { + continue; + } + + // check if the code before the instruction ptr is a call + if(!has_valid_call_before(cur_stack_loc)) + { + continue; + } + + // if these all pass, return that ebp, otherwise continue till we're dead + return (PBYTE)(cur_stack_loc - 1); + } + + return NULL; +} //****************************************************************** -void WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, LLSD& info) +void WINAPI Get_Call_Stack(const EXCEPTION_RECORD* exception_record, + const CONTEXT* context_record, + LLSD& info) //****************************************************************** // Fill Str with call stack info. // pException can be either GetExceptionInformation() or NULL. // If pException = NULL - get current call stack. -{ +{ LPWSTR Module_Name = new WCHAR[MAX_PATH]; PBYTE Module_Addr = 0; - + LLSD params; + PBYTE Esp = NULL; + LLSD tmp_info; + + bool fake_frame = false; + bool ebp_used = false; + const int HEURISTIC_MAX_WALK = 10; + int heuristic_walk_i = 0; + int Ret_Addr_I = 0; + typedef struct STACK { STACK * Ebp; @@ -347,15 +368,23 @@ void WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, LLSD& info) STACK Stack = {0, 0}; PSTACK Ebp; - if (pException) //fake frame for exception address + if (exception_record && context_record) //fake frame for exception address { - Stack.Ebp = (PSTACK)pException->ContextRecord->Ebp; - Stack.Ret_Addr = (PBYTE)pException->ExceptionRecord->ExceptionAddress; + Stack.Ebp = (PSTACK)(context_record->Ebp); + Stack.Ret_Addr = (PBYTE)exception_record->ExceptionAddress; Ebp = &Stack; + Esp = (PBYTE) context_record->Esp; + fake_frame = true; + } + else if(context_record) + { + Ebp = (PSTACK)(context_record->Ebp); + Esp = (PBYTE)(context_record->Esp); } else { - Ebp = (PSTACK)&pException - 1; //frame addr of Get_Call_Stack() + Ebp = (PSTACK)&exception_record - 1; //frame addr of Get_Call_Stack() + Esp = (PBYTE)&exception_record; // Skip frame of Get_Call_Stack(). if (!IsBadReadPtr(Ebp, sizeof(PSTACK))) @@ -364,22 +393,21 @@ void WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, LLSD& info) // Trace CALL_TRACE_MAX calls maximum - not to exceed DUMP_SIZE_MAX. // Break trace on wrong stack frame. - for (int Ret_Addr_I = 0, i = 0; - (Ret_Addr_I < CALL_TRACE_MAX) && !IsBadReadPtr(Ebp, sizeof(PSTACK)) && !IsBadCodePtr(FARPROC(Ebp->Ret_Addr)); - Ret_Addr_I++, Ebp = Ebp->Ebp, ++i) + for (Ret_Addr_I = 0; + heuristic_walk_i < HEURISTIC_MAX_WALK && + Ret_Addr_I < CALL_TRACE_MAX && !IsBadReadPtr(Ebp, sizeof(PSTACK)) && !IsBadCodePtr(FARPROC(Ebp->Ret_Addr)); + Ret_Addr_I++) { // If module with Ebp->Ret_Addr found. - if (Get_Module_By_Ret_Addr(Ebp->Ret_Addr, Module_Name, Module_Addr)) { // Save module's address and full path. - info["CallStack"][i]["ModuleName"] = ll_convert_wide_to_string(Module_Name); - info["CallStack"][i]["ModuleAddress"] = (int)Module_Addr; - info["CallStack"][i]["CallOffset"] = (int)(Ebp->Ret_Addr - Module_Addr); + tmp_info["CallStack"][Ret_Addr_I]["ModuleName"] = ll_convert_wide_to_string(Module_Name); + tmp_info["CallStack"][Ret_Addr_I]["ModuleAddress"] = (int)Module_Addr; + tmp_info["CallStack"][Ret_Addr_I]["CallOffset"] = (int)(Ebp->Ret_Addr - Module_Addr); - LLSD params; // Save 5 params of the call. We don't know the real number of params. - if (pException && !Ret_Addr_I) //fake frame for exception address + if (fake_frame && !Ret_Addr_I) //fake frame for exception address params[0] = "Exception Offset"; else if (!IsBadReadPtr(Ebp, sizeof(PSTACK) + 5 * sizeof(DWORD))) { @@ -388,10 +416,62 @@ void WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, LLSD& info) params[j] = (int)Ebp->Param[j]; } } - info["CallStack"][i]["Parameters"] = params; + tmp_info["CallStack"][Ret_Addr_I]["Parameters"] = params; + } + + tmp_info["CallStack"][Ret_Addr_I]["ReturnAddress"] = (int)Ebp->Ret_Addr; + + // get ready for next frame + // Set ESP to just after return address. Not the real esp, but just enough after the return address + if(!fake_frame) { + Esp = (PBYTE)Ebp + 8; + } + else + { + fake_frame = false; + } + + // is next ebp valid? + // only run if we've never found a good ebp + if( !ebp_used && + (IsBadReadPtr(Ebp->Ebp, sizeof(PSTACK)) || + IsBadCodePtr(FARPROC(Ebp->Ebp->Ret_Addr)) || + !Get_Module_By_Ret_Addr(Ebp->Ebp->Ret_Addr, Module_Name, Module_Addr))) + { + heuristic_walk_i++; + PBYTE new_ebp = get_valid_frame(Esp); + if (new_ebp != NULL) + { + Ebp = (PSTACK)new_ebp; + } + } + else + { + ebp_used = true; + Ebp = Ebp->Ebp; } - info["CallStack"][i]["ReturnAddress"] = (int)Ebp->Ret_Addr; } + + // Now go back through and edit out heuristic stacks that could very well be bogus. + // Leave the top and the last stack chosen by the heuristic, however. + if(heuristic_walk_i > 2) + { + info["CallStack"][0] = tmp_info["CallStack"][0]; + std::string ttest = info["CallStack"][0]["ModuleName"]; + for(int cur_frame = 1; + (cur_frame + heuristic_walk_i - 2 < Ret_Addr_I); + ++cur_frame) + { + // edit out the middle heuristic found frames + info["CallStack"][cur_frame] = tmp_info["CallStack"][cur_frame + heuristic_walk_i - 2]; + } + } + else + { + info = tmp_info; + } + + } //Get_Call_Stack //*********************************** @@ -508,7 +588,7 @@ LLSD WINAPI Get_Exception_Info(PEXCEPTION_POINTERS pException) } //if (pException) // Save call stack info. - Get_Call_Stack(pException, info); + Get_Call_Stack(pException->ExceptionRecord, pException->ContextRecord, info); return info; } //Get_Exception_Info @@ -565,7 +645,7 @@ LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter( llinfos << "Someone tried to set the exception filter. Listing call stack modules" << llendl; LLSD cs_info; - GetCallStackData(NULL, cs_info); + Get_Call_Stack(NULL, NULL, cs_info); if(cs_info.has("CallStack") && cs_info["CallStack"].isArray()) { diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp index 3fa9098..13d8d09 100644 --- a/linden/indra/newview/pipeline.cpp +++ b/linden/indra/newview/pipeline.cpp @@ -4092,55 +4092,52 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start, const F32 ATTACHMENT_OVERRIDE_DIST = 0.1f; - if (!drawable || !drawable->getVObj()->isAttachment()) - { //check against avatars - sPickAvatar = TRUE; - for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); - iter != LLWorld::getInstance()->getRegionList().end(); ++iter) + //check against avatars + sPickAvatar = TRUE; + for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); + iter != LLWorld::getInstance()->getRegionList().end(); ++iter) + { + LLViewerRegion* region = *iter; + + LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_BRIDGE); + if (part && hasRenderType(part->mDrawableType)) + { + LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, bi_normal); + if (hit) { - LLViewerRegion* region = *iter; + if (!drawable || + !drawable->getVObj()->isAttachment() || + (position-local_end).magVec() > ATTACHMENT_OVERRIDE_DIST) + { //avatar overrides if previously hit drawable is not an attachment or + //attachment is far enough away from detected intersection + drawable = hit; + local_end = position; + } + else + { //prioritize attachments over avatars + position = local_end; - LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_BRIDGE); - if (part && hasRenderType(part->mDrawableType)) - { - LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, bi_normal); - if (hit) + if (face_hit) { - if (!drawable || - !drawable->getVObj()->isAttachment() || - (position-local_end).magVec() > ATTACHMENT_OVERRIDE_DIST) - { //avatar overrides if previously hit drawable is not an attachment or - //attachment is far enough away from detected intersection - drawable = hit; - local_end = position; - } - else - { //prioritize attachments over avatars - position = local_end; - - if (face_hit) - { - *face_hit = local_face_hit; - } - if (tex_coord) - { - *tex_coord = local_texcoord; - } - if (bi_normal) - { - *bi_normal = local_binormal; - } - if (normal) - { - *normal = local_normal; - } - } + *face_hit = local_face_hit; + } + if (tex_coord) + { + *tex_coord = local_texcoord; + } + if (bi_normal) + { + *bi_normal = local_binormal; + } + if (normal) + { + *normal = local_normal; } } } } } - + } //check all avatar nametags (silly, isn't it?) for (std::vector< LLCharacter* >::iterator iter = LLCharacter::sInstances.begin(); diff --git a/linden/indra/newview/skins/default/xui/de/floater_about.xml b/linden/indra/newview/skins/default/xui/de/floater_about.xml index 7c9b242..1b7722f 100644 --- a/linden/indra/newview/skins/default/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/de/floater_about.xml @@ -1,9 +1,9 @@ - Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ und vielen anderen. + Second Life wird Ihnen präsentiert von Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les und vielen anderen. -Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: Aminom Marvin, ava ganache, Balthazar Fouroux, CrystalShard Foo, Davec Horsforth, Drew Dwi, Ellla McMahon, Gellan Glenelg, Harleen Gretzky, istephanija munro, Iustinian Tomsen, JC Glimmer, Joeseph Albanese, kelly young, Latif Khalifa, Lex Neva, McCabe Maxsted, Michi Lumin, moni duettmann, Moon Metty, motor loon, Opensource Obscure, Sky Hye, Soap Clawtooth, velveeta biedermann, zeebster colasanti +Vielen Dank den folgenden Einwohnern, die uns geholfen haben, dies zur bisher besten Version zu machen: afon shepherd, Aimee Trescothick, Alexandrea Fride, Alissa Sabre, Amber DeCuir, Asuka Neely, Auron Forcella, Blue Revolution, Bocan Undercroft, Boroondas Gupte, Brandon Shinobu, Bri Gufler, Buckaroo Mu, Celierra Darling, Christos Atlantis, Coder Kas, Cummere Mayo, dakota schwade, Dirk Talamasca, Dizzy Banjo, Drew Dwi, Duckling Kwak, Ellla McMahon, Erikah Jameson, Erinyse Planer, Eyana Yohkoh, Ezian Ecksol, Faron Karu, Fenoe Lowey, Fox Hwasung, Francisca Biedermann, Gally Young, Gellan Glenelg, Geneko Nemeth, Glenn Rotaru, Hagar Qinan, Harleen Gretzky, Holger Gilruth, hotrodjohnny gears, IAm Zabelin, Inigo Catteneo, Iustinian Tomsen, Jacek Antonell, James Benedek, Jim Kupferberg, Joeseph Albanese, JPT62089 Agnon, Kardargo Adamczyk, Kirstenlee Cinquetti, Latif Khalifa, lea Parnall, Lex Neva, Lillith Anatine, Lilly Zenovka, Lim Catteneo, Lindal Kidd, Mark Rosenbaum, MasterJ Chaplin, McCabe Maxsted, Melvin Starbrook, Meni Kaiousei, Mero Collas, Minakothegothicgeisha Kamachi, Moon Metty, neofilo aabye, Neutron Chesnokov, Nomad Ingwer, norritt Xi, Opensource Obscure, Oracle Weatherwax, Ourasi Ferraris, Pabl0 Roffo, Peyton Aleixandre, Phli Foxchase, Psi Merlin, r2d2 Wunderlich, Regi Yifu, Saijanai Kuhn, Sandor Balczo, Sarkan Dreamscape, Scree Raymaker, Sedona Mills, Selena Beale, Sheet Spotter, Shibari Twine, Silver Key, Simon Kline, SLB Wirefly, Stacy Wombat, Sugarcult Dagger, Tayra Dagostino, Tetsuryu Vlodovic, ThaBiGGDoGG Richez, Timo Gufler, tx Oh, wayfinder wishbringer, Wizzytoe McCullough, Wundur Primbee, Yann Dufaux, Yuu Nakamichi 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion APR Copyright (C) 2000-2004 The Apache Software Foundation diff --git a/linden/indra/newview/skins/default/xui/de/panel_preferences_im.xml b/linden/indra/newview/skins/default/xui/de/panel_preferences_im.xml index 0744495..0e760e6 100644 --- a/linden/indra/newview/skins/default/xui/de/panel_preferences_im.xml +++ b/linden/indra/newview/skins/default/xui/de/panel_preferences_im.xml @@ -15,10 +15,8 @@ - Protokolloptionen: - - - Protokolloptionen: + Antwort für +Beschäftigt-Modus: Protokolloptionen: diff --git a/linden/indra/newview/skins/default/xui/de/role_actions.xml b/linden/indra/newview/skins/default/xui/de/role_actions.xml index 26042bd..95eb6c5 100644 --- a/linden/indra/newview/skins/default/xui/de/role_actions.xml +++ b/linden/indra/newview/skins/default/xui/de/role_actions.xml @@ -4,157 +4,157 @@ description="Diese Fähigkeiten ermöglichen das Hinzufügen und Entfernen von Mitgliedern sowie den Beitritt ohne Einladung." name="Membership"> - - - - - - - - Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ and many others. + Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others. - Thank you to the following residents for helping to ensure that this is the best version yet: Aimee Trescothick, Alexandrea Fride, Amber DeCuir, Bocan Undercroft, Boroondas Gupte, Brandon Shinobu, Bri Gufler, Buckaroo Mu, Celierra Darling, Christos Atlantis, Coder Kas, Cummere mayo, Dirk Talamasca, Drew Dwi, Ellla McMahon, Erinyse Planer, Eyana Yohkoh, Ezian Ecksol, faron karu, fenoe low, Gellan Glenelg, Harleen Gretzky, Holger Gilruth, Iustinian Tomsen, Jacek Antonell, Jim Kupferberg, Joeseph Albanese, Kirstenlee Cinquetti, lea Parnall, Lex Neva, Lilly Zenovka, Lim Catteneo, McCabe Maxsted, Minakothegothicgeisha Kamachi, Moon Metty, neofilo aabye, Neutron Chesnokov, Nomad Ingwer, norritt Xi, Opensource Obscure, Oracle Weatherwax, Pabl0 Roffo, Peyton Aleixandre, Phli Foxchase, Psi Merlin, Selena Beale, Sheet Spotter, Shibari Twine, Silver Key, Simon Kline, Stacy Wombat, Sugarcult Dagger, Tayra dagostino, ThaBiGGDoGG Richez, tx Oh, Wundur Primbee, Yuu Nakamichi + Thank you to the following residents for helping to ensure that this is the best version yet: afon shepherd, Aimee Trescothick, Alexandrea Fride, Alissa Sabre, Amber DeCuir, Asuka Neely, Auron Forcella, Blue Revolution, Bocan Undercroft, Boroondas Gupte, Brandon Shinobu, Bri Gufler, Buckaroo Mu, Celierra Darling, Christos Atlantis, Coder Kas, Cummere Mayo, dakota schwade, Dirk Talamasca, Dizzy Banjo, Drew Dwi, Duckling Kwak, Ellla McMahon, Erikah Jameson, Erinyse Planer, Eyana Yohkoh, Ezian Ecksol, Faron Karu, Fenoe Lowey, Fox Hwasung, Francisca Biedermann, Gally Young, Gellan Glenelg, Geneko Nemeth, Glenn Rotaru, Hagar Qinan, Harleen Gretzky, Holger Gilruth, hotrodjohnny gears, IAm Zabelin, Inigo Catteneo, Iustinian Tomsen, Jacek Antonell, James Benedek, Jim Kupferberg, Joeseph Albanese, JPT62089 Agnon, Kardargo Adamczyk, Kirstenlee Cinquetti, Latif Khalifa, lea Parnall, Lex Neva, Lillith Anatine, Lilly Zenovka, Lim Catteneo, Lindal Kidd, Mark Rosenbaum, MasterJ Chaplin, McCabe Maxsted, Melvin Starbrook, Meni Kaiousei, Mero Collas, Minakothegothicgeisha Kamachi, Moon Metty, neofilo aabye, Neutron Chesnokov, Nomad Ingwer, norritt Xi, Opensource Obscure, Oracle Weatherwax, Ourasi Ferraris, Pabl0 Roffo, Peyton Aleixandre, Phli Foxchase, Psi Merlin, r2d2 Wunderlich, Regi Yifu, Saijanai Kuhn, Sandor Balczo, Sarkan Dreamscape, Scree Raymaker, Sedona Mills, Selena Beale, Sheet Spotter, Shibari Twine, Silver Key, Simon Kline, SLB Wirefly, Stacy Wombat, Sugarcult Dagger, Tayra Dagostino, Tetsuryu Vlodovic, ThaBiGGDoGG Richez, Timo Gufler, tx Oh, wayfinder wishbringer, Wizzytoe McCullough, Wundur Primbee, Yann Dufaux, Yuu Nakamichi 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion APR Copyright (C) 2000-2004 The Apache Software Foundation @@ -33,7 +33,7 @@ Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) - We can only see a short distance ahead, but we can see plenty there that needs to be done. --Alan Turing + I get by with a little help from my friends. --Richard Starkey - Le niveau de sécurité de vos paramètres d'affichage dépend de votre configuration système. + Vos paramètres d'affichage ont été réglés avec une marge de sécurité en fonction de votre configuration système. diff --git a/linden/indra/newview/skins/default/xui/fr/floater_about.xml b/linden/indra/newview/skins/default/xui/fr/floater_about.xml index 3f6d47c..716ce10 100644 --- a/linden/indra/newview/skins/default/xui/fr/floater_about.xml +++ b/linden/indra/newview/skins/default/xui/fr/floater_about.xml @@ -1,9 +1,9 @@ - Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ et de nombreuses autres personnes. + Second Life existe grâce aux efforts de Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les et de nombreuses autres personnes. - Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu'à présent) : Aminom Marvin, ava ganache, Balthazar Fouroux, CrystalShard Foo, Davec Horsforth, Drew Dwi, Ellla McMahon, Gellan Glenelg, Harleen Gretzky, istephanija munro, Iustinian Tomsen, JC Glimmer, Joeseph Albanese, kelly young, Latif Khalifa, Lex Neva, McCabe Maxsted, Michi Lumin, moni duettmann, Moon Metty, motor loon, Opensource Obscure, Sky Hye, Soap Clawtooth, velveeta biedermann, zeebster colasanti + Tous nos remerciements aux résidents suivants pour avoir testé cette version (la meilleure qui soit jusqu'à présent) : afon shepherd, Aimee Trescothick, Alexandrea Fride, Alissa Sabre, Amber DeCuir, Asuka Neely, Auron Forcella, Blue Revolution, Bocan Undercroft, Boroondas Gupte, Brandon Shinobu, Bri Gufler, Buckaroo Mu, Celierra Darling, Christos Atlantis, Coder Kas, Cummere Mayo, dakota schwade, Dirk Talamasca, Dizzy Banjo, Drew Dwi, Duckling Kwak, Ellla McMahon, Erikah Jameson, Erinyse Planer, Eyana Yohkoh, Ezian Ecksol, Faron Karu, Fenoe Lowey, Fox Hwasung, Francisca Biedermann, Gally Young, Gellan Glenelg, Geneko Nemeth, Glenn Rotaru, Hagar Qinan, Harleen Gretzky, Holger Gilruth, hotrodjohnny gears, IAm Zabelin, Inigo Catteneo, Iustinian Tomsen, Jacek Antonell, James Benedek, Jim Kupferberg, Joeseph Albanese, JPT62089 Agnon, Kardargo Adamczyk, Kirstenlee Cinquetti, Latif Khalifa, lea Parnall, Lex Neva, Lillith Anatine, Lilly Zenovka, Lim Catteneo, Lindal Kidd, Mark Rosenbaum, MasterJ Chaplin, McCabe Maxsted, Melvin Starbrook, Meni Kaiousei, Mero Collas, Minakothegothicgeisha Kamachi, Moon Metty, neofilo aabye, Neutron Chesnokov, Nomad Ingwer, norritt Xi, Opensource Obscure, Oracle Weatherwax, Ourasi Ferraris, Pabl0 Roffo, Peyton Aleixandre, Phli Foxchase, Psi Merlin, r2d2 Wunderlich, Regi Yifu, Saijanai Kuhn, Sandor Balczo, Sarkan Dreamscape, Scree Raymaker, Sedona Mills, Selena Beale, Sheet Spotter, Shibari Twine, Silver Key, Simon Kline, SLB Wirefly, Stacy Wombat, Sugarcult Dagger, Tayra Dagostino, Tetsuryu Vlodovic, ThaBiGGDoGG Richez, Timo Gufler, tx Oh, wayfinder wishbringer, Wizzytoe McCullough, Wundur Primbee, Yann Dufaux, Yuu Nakamichi 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion APR Copyright (C) 2000-2004 The Apache Software Foundation diff --git a/linden/indra/newview/skins/default/xui/ja/alerts.xml b/linden/indra/newview/skins/default/xui/ja/alerts.xml index 48b7a64..4fe99b6 100644 --- a/linden/indra/newview/skins/default/xui/ja/alerts.xml +++ b/linden/indra/newview/skins/default/xui/ja/alerts.xml @@ -200,7 +200,7 @@ Studio exhibitのウェブ・ページで確認してください。 - グループの作成が正常に終了しました。 + グループの作成が正常に行われました。 @@ -878,7 +878,7 @@ L$が不足しているのでこのグループに参加することができま - [SECOND_LIFE]ウェブ・ページに移動し、入札あるいはオークションの詳細を確認しますか? + [SECOND_LIFE]ウェブ・ページに移動し、 入札あるいはオークションの詳細を確認しますか?