diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-09-17 15:48:57 +0300 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-09-17 19:40:53 +0300 | 
| commit | 921c3f5f69c90b5924d2f4bbbd32455f8c9c8173 (patch) | |
| tree | 74d4a19ee3b0c3644ecb7aee283cdd17922ca277 /indra/newview | |
| parent | 9b5b2eac82b1f423daec463b3d55d0f3d3979bbc (diff) | |
SL-13561 When ALM is enabled, disabling water rendering breaks the sky.
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/pipeline.cpp | 30 | 
1 files changed, 29 insertions, 1 deletions
| diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3670272411..391d2472a6 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -9259,7 +9259,12 @@ inline float sgn(float a)  void LLPipeline::generateWaterReflection(LLCamera& camera_in)  { -    if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate) +    if (!assertInitialized()) +    { +        return; +    } + +    if (LLPipeline::sWaterReflections && LLDrawPoolWater::sNeedsReflectionUpdate)      {          bool skip_avatar_update = false;          if (!isAgentAvatarValid() || gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK || !LLVOAvatar::sVisibleInFirstPerson) @@ -9552,6 +9557,29 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)          LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;      } +    else +    { +        // Initial sky pass is still needed even if water reflection is not rendering +        bool camera_is_underwater = LLViewerCamera::getInstance()->cameraUnderWater(); +        if (!camera_is_underwater) +        { +            gPipeline.pushRenderTypeMask(); +            { +                gPipeline.andRenderTypeMask( +                    LLPipeline::RENDER_TYPE_SKY, +                    LLPipeline::RENDER_TYPE_WL_SKY, +                    LLPipeline::END_RENDER_TYPES); + +                LLCamera camera = camera_in; +                camera.setFar(camera_in.getFar() * 0.75f); + +                updateCull(camera, mSky); +                stateSort(camera, mSky); +                renderGeom(camera, TRUE); +            } +            gPipeline.popRenderTypeMask(); +        } +    }  }  glh::matrix4f look(const LLVector3 pos, const LLVector3 dir, const LLVector3 up) | 
