diff options
| author | Maxim Nikolenko <maximnproductengine@lindenlab.com> | 2026-04-13 12:40:05 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-13 12:40:05 +0300 |
| commit | b0f4a147aa27ea256bd042043f0211b827f7b8df (patch) | |
| tree | 81800087bd35eb28b77805eacfed2291ca5b4d54 | |
| parent | 5f91a3faf3ef0b9d0a6c3424fff119992dc0822a (diff) | |
#2888 show underwater nametags when camera is above the water
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/llhudnametag.cpp | 19 |
2 files changed, 28 insertions, 2 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index a4a9323892..045308c743 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9019,6 +9019,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>NametagOverWater</key> + <map> + <key>Comment</key> + <string>Render name tag over the transparent water while camera is above the water</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>RenderInitError</key> <map> <key>Comment</key> diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp index 4327d281e5..5d20e722de 100644 --- a/indra/newview/llhudnametag.cpp +++ b/indra/newview/llhudnametag.cpp @@ -41,9 +41,9 @@ #include "llhudrender.h" #include "llui.h" #include "llviewercamera.h" +#include "llviewerregion.h" #include "llviewertexturelist.h" #include "llviewerobject.h" -#include "llvovolume.h" #include "llviewerwindow.h" #include "llstatusbar.h" #include "llmenugl.h" @@ -291,7 +291,22 @@ void LLHUDNameTag::renderText() + (x_pixel_vec * screen_offset.mV[VX]) + (y_pixel_vec * screen_offset.mV[VY]); - LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); + // Check if an underwater name tag should be rendered over the water (while camera is above the water) + bool render_over_water = false; + static LLCachedControl<bool> nametag_over_water(gSavedSettings, "NametagOverWater", true); + if (nametag_over_water && + mSourceObject && + mSourceObject->getRegion() && + LLPipeline::sRenderTransparentWater && + !LLViewerCamera::getInstance()->cameraUnderWater()) + { + if (mSourceObject->getPositionAgent().mV[VZ] < mSourceObject->getRegion()->getWaterHeight()) + { + render_over_water = true; + } + } + LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, render_over_water ? GL_ALWAYS : GL_LEQUAL); + LLRect screen_rect; screen_rect.setCenterAndSize(0, static_cast<S32>(lltrunc(-mHeight / 2 + mOffsetY)), static_cast<S32>(lltrunc(mWidth)), static_cast<S32>(lltrunc(mHeight))); mRoundedRectImgp->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color); |
