diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index aced9c35d..9490b9d1e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12692,5 +12692,16 @@ Value 0 + UseLLWind + + Comment + Disables LLWind's methods and returns nothing if enabled (saves FPS) + Persist + 1 + Type + Boolean + Value + 0 + diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 0ed5663ec..05d55dce9 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -394,6 +394,17 @@ max_attachment_offset="2.0" visible_in_first_person="true" /> + + = 1.0) - { - LLVector3 pos_region_scaled(pos_region * temp_dim); - r_val += getVelocity(pos_region_scaled) * (1.0f/temp_dim); - temp_dim /= 2.0; + F32 temp_dim = dim; + while (temp_dim >= 1.0) + { + LLVector3 pos_region_scaled(pos_region * temp_dim); + r_val += getVelocity(pos_region_scaled) * (1.0f/temp_dim); + temp_dim /= 2.0; + } + + return r_val * (1.0f/norm) * WIND_SCALE_HACK; + } + else + { + return LLVector3(0, 0, 0); } - - return r_val * (1.0f/norm) * WIND_SCALE_HACK; } LLVector3 LLWind::getVelocity(const LLVector3 &pos_region) { - llassert(mSize == 16); - // Resolves value of wind at a location relative to SW corner of region - // - // Returns wind magnitude in X,Y components of vector3 - LLVector3 r_val; - F32 dx,dy; - S32 k; + if(gUseLLWind) + { + llassert(mSize == 16); + // Resolves value of wind at a location relative to SW corner of region + // + // Returns wind magnitude in X,Y components of vector3 + LLVector3 r_val; + F32 dx,dy; + S32 k; - LLVector3 pos_clamped_region(pos_region); - - F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters(); + LLVector3 pos_clamped_region(pos_region); + + F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters(); - if (pos_clamped_region.mV[VX] < 0.f) - { - pos_clamped_region.mV[VX] = 0.f; - } - else if (pos_clamped_region.mV[VX] >= region_width_meters) - { - pos_clamped_region.mV[VX] = (F32) fmod(pos_clamped_region.mV[VX], region_width_meters); - } + if (pos_clamped_region.mV[VX] < 0.f) + { + pos_clamped_region.mV[VX] = 0.f; + } + else if (pos_clamped_region.mV[VX] >= region_width_meters) + { + pos_clamped_region.mV[VX] = (F32) fmod(pos_clamped_region.mV[VX], region_width_meters); + } - if (pos_clamped_region.mV[VY] < 0.f) - { - pos_clamped_region.mV[VY] = 0.f; - } - else if (pos_clamped_region.mV[VY] >= region_width_meters) - { - pos_clamped_region.mV[VY] = (F32) fmod(pos_clamped_region.mV[VY], region_width_meters); - } - - - S32 i = llfloor(pos_clamped_region.mV[VX] * mSize / region_width_meters); - S32 j = llfloor(pos_clamped_region.mV[VY] * mSize / region_width_meters); - k = i + j*mSize; - dx = ((pos_clamped_region.mV[VX] * mSize / region_width_meters) - (F32) i); - dy = ((pos_clamped_region.mV[VY] * mSize / region_width_meters) - (F32) j); + if (pos_clamped_region.mV[VY] < 0.f) + { + pos_clamped_region.mV[VY] = 0.f; + } + else if (pos_clamped_region.mV[VY] >= region_width_meters) + { + pos_clamped_region.mV[VY] = (F32) fmod(pos_clamped_region.mV[VY], region_width_meters); + } + + + S32 i = llfloor(pos_clamped_region.mV[VX] * mSize / region_width_meters); + S32 j = llfloor(pos_clamped_region.mV[VY] * mSize / region_width_meters); + k = i + j*mSize; + dx = ((pos_clamped_region.mV[VX] * mSize / region_width_meters) - (F32) i); + dy = ((pos_clamped_region.mV[VY] * mSize / region_width_meters) - (F32) j); - if ((i < mSize-1) && (j < mSize-1)) - { - // Interior points, no edges - r_val.mV[VX] = mVelX[k]*(1.0f - dx)*(1.0f - dy) + - mVelX[k + 1]*dx*(1.0f - dy) + - mVelX[k + mSize]*dy*(1.0f - dx) + - mVelX[k + mSize + 1]*dx*dy; - r_val.mV[VY] = mVelY[k]*(1.0f - dx)*(1.0f - dy) + - mVelY[k + 1]*dx*(1.0f - dy) + - mVelY[k + mSize]*dy*(1.0f - dx) + - mVelY[k + mSize + 1]*dx*dy; - } - else - { - r_val.mV[VX] = mVelX[k]; - r_val.mV[VY] = mVelY[k]; - } + if ((i < mSize-1) && (j < mSize-1)) + { + // Interior points, no edges + r_val.mV[VX] = mVelX[k]*(1.0f - dx)*(1.0f - dy) + + mVelX[k + 1]*dx*(1.0f - dy) + + mVelX[k + mSize]*dy*(1.0f - dx) + + mVelX[k + mSize + 1]*dx*dy; + r_val.mV[VY] = mVelY[k]*(1.0f - dx)*(1.0f - dy) + + mVelY[k + 1]*dx*(1.0f - dy) + + mVelY[k + mSize]*dy*(1.0f - dx) + + mVelY[k + mSize + 1]*dx*dy; + } + else + { + r_val.mV[VX] = mVelX[k]; + r_val.mV[VY] = mVelY[k]; + } - r_val.mV[VZ] = 0.f; - return r_val * WIND_SCALE_HACK; + r_val.mV[VZ] = 0.f; + return r_val * WIND_SCALE_HACK; + } + else + { + return LLVector3(0, 0, 0); + } } LLVector3 LLWind::getCloudVelocity(const LLVector3 &pos_region) { - llassert(mSize == 16); - // Resolves value of wind at a location relative to SW corner of region - // - // Returns wind magnitude in X,Y components of vector3 - LLVector3 r_val; - F32 dx,dy; - S32 k; + if(gUseLLWind) + { + llassert(mSize == 16); + // Resolves value of wind at a location relative to SW corner of region + // + // Returns wind magnitude in X,Y components of vector3 + LLVector3 r_val; + F32 dx,dy; + S32 k; - LLVector3 pos_clamped_region(pos_region); - - F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters(); + LLVector3 pos_clamped_region(pos_region); + + F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters(); - if (pos_clamped_region.mV[VX] < 0.f) - { - pos_clamped_region.mV[VX] = 0.f; - } - else if (pos_clamped_region.mV[VX] >= region_width_meters) - { - pos_clamped_region.mV[VX] = (F32) fmod(pos_clamped_region.mV[VX], region_width_meters); - } + if (pos_clamped_region.mV[VX] < 0.f) + { + pos_clamped_region.mV[VX] = 0.f; + } + else if (pos_clamped_region.mV[VX] >= region_width_meters) + { + pos_clamped_region.mV[VX] = (F32) fmod(pos_clamped_region.mV[VX], region_width_meters); + } - if (pos_clamped_region.mV[VY] < 0.f) - { - pos_clamped_region.mV[VY] = 0.f; - } - else if (pos_clamped_region.mV[VY] >= region_width_meters) - { - pos_clamped_region.mV[VY] = (F32) fmod(pos_clamped_region.mV[VY], region_width_meters); - } - - - S32 i = llfloor(pos_clamped_region.mV[VX] * mSize / region_width_meters); - S32 j = llfloor(pos_clamped_region.mV[VY] * mSize / region_width_meters); - k = i + j*mSize; - dx = ((pos_clamped_region.mV[VX] * mSize / region_width_meters) - (F32) i); - dy = ((pos_clamped_region.mV[VY] * mSize / region_width_meters) - (F32) j); + if (pos_clamped_region.mV[VY] < 0.f) + { + pos_clamped_region.mV[VY] = 0.f; + } + else if (pos_clamped_region.mV[VY] >= region_width_meters) + { + pos_clamped_region.mV[VY] = (F32) fmod(pos_clamped_region.mV[VY], region_width_meters); + } + + + S32 i = llfloor(pos_clamped_region.mV[VX] * mSize / region_width_meters); + S32 j = llfloor(pos_clamped_region.mV[VY] * mSize / region_width_meters); + k = i + j*mSize; + dx = ((pos_clamped_region.mV[VX] * mSize / region_width_meters) - (F32) i); + dy = ((pos_clamped_region.mV[VY] * mSize / region_width_meters) - (F32) j); - if ((i < mSize-1) && (j < mSize-1)) - { - // Interior points, no edges - r_val.mV[VX] = mCloudVelX[k]*(1.0f - dx)*(1.0f - dy) + - mCloudVelX[k + 1]*dx*(1.0f - dy) + - mCloudVelX[k + mSize]*dy*(1.0f - dx) + - mCloudVelX[k + mSize + 1]*dx*dy; - r_val.mV[VY] = mCloudVelY[k]*(1.0f - dx)*(1.0f - dy) + - mCloudVelY[k + 1]*dx*(1.0f - dy) + - mCloudVelY[k + mSize]*dy*(1.0f - dx) + - mCloudVelY[k + mSize + 1]*dx*dy; - } - else - { - r_val.mV[VX] = mCloudVelX[k]; - r_val.mV[VY] = mCloudVelY[k]; - } + if ((i < mSize-1) && (j < mSize-1)) + { + // Interior points, no edges + r_val.mV[VX] = mCloudVelX[k]*(1.0f - dx)*(1.0f - dy) + + mCloudVelX[k + 1]*dx*(1.0f - dy) + + mCloudVelX[k + mSize]*dy*(1.0f - dx) + + mCloudVelX[k + mSize + 1]*dx*dy; + r_val.mV[VY] = mCloudVelY[k]*(1.0f - dx)*(1.0f - dy) + + mCloudVelY[k + 1]*dx*(1.0f - dy) + + mCloudVelY[k + mSize]*dy*(1.0f - dx) + + mCloudVelY[k + mSize + 1]*dx*dy; + } + else + { + r_val.mV[VX] = mCloudVelX[k]; + r_val.mV[VY] = mCloudVelY[k]; + } - r_val.mV[VZ] = 0.f; - return r_val * WIND_SCALE_HACK; + r_val.mV[VZ] = 0.f; + return r_val * WIND_SCALE_HACK; + } + else + { + return LLVector3(0, 0, 0); + } } diff --git a/indra/newview/llwind.h b/indra/newview/llwind.h index 7a4582d9d..83b04f0b2 100644 --- a/indra/newview/llwind.h +++ b/indra/newview/llwind.h @@ -42,6 +42,7 @@ class LLVector3; class LLBitPack; class LLGroupHeader; +extern BOOL gUseLLWind; class LLWind { @@ -58,6 +59,7 @@ public: void setCloudDensityPointer(F32 *densityp); void setOriginGlobal(const LLVector3d &origin_global); + private: S32 mSize; F32 * mVelX; diff --git a/indra/newview/skins/default/textures/icn_toolbar_radar.tga b/indra/newview/skins/default/textures/icn_toolbar_radar.tga new file mode 100644 index 000000000..e1a814b1e Binary files /dev/null and b/indra/newview/skins/default/textures/icn_toolbar_radar.tga differ diff --git a/indra/newview/skins/default/xui/en-us/panel_toolbar.xml b/indra/newview/skins/default/xui/en-us/panel_toolbar.xml index df00ca0b6..726f30369 100644 --- a/indra/newview/skins/default/xui/en-us/panel_toolbar.xml +++ b/indra/newview/skins/default/xui/en-us/panel_toolbar.xml @@ -26,12 +26,13 @@ label_selected="Radar" left="0" name="radar_list_btn" tool_tip="View a list of nearby avatars." width="50" follows="left|right" user_resize="false"/> -