diff options
| author | Jonathan "Geenz" Goodman <geenz@geenzo.com> | 2024-01-31 15:54:14 -0800 | 
|---|---|---|
| committer | Jonathan "Geenz" Goodman <geenz@geenzo.com> | 2024-01-31 15:54:14 -0800 | 
| commit | 476cbaed6a876c308baa057b50af2631668f7293 (patch) | |
| tree | 0699bf3a2efcb7185ff13827794a0b9a506b0f4b | |
| parent | 80ce790d2e952c7fb41cea69071fc026ac82f691 (diff) | |
#677 Some clipping WIP
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/materialV.glsl | 2 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class3/deferred/materialF.glsl | 12 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl | 1 | ||||
| -rw-r--r-- | indra/newview/lldrawpoolmaterials.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llheroprobemanager.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llheroprobemanager.h | 5 | ||||
| -rw-r--r-- | indra/newview/llsettingsvo.cpp | 12 | 
7 files changed, 31 insertions, 27 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl index 65706e2c3f..41112bce30 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl @@ -127,7 +127,7 @@ void main()  	vertex_color = diffuse_color;  #if !defined(HAS_SKIN) -	vary_position = (projection_matrix*vec4(position.xyz, 1.0)).xyz; +	vary_position = (modelview_matrix*vec4(position.xyz, 1.0)).xyz;  #endif  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl index b3b1aaed56..8fe0e1cec8 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl @@ -48,15 +48,18 @@ vec3 linear_to_srgb(vec3 cs);  uniform vec4 clipPlane;  uniform float clipSign;  uniform float mirror_flag; +uniform mat4 modelview_matrix; +uniform mat3 normal_matrix;  void applyClip(vec3 pos)  { -    float funnyClip = 0; +      if (mirror_flag > 0)      { -            if ((dot(pos.xyz, clipPlane.xyz) + clipPlane.w) > 0.0) -            { +        if ((dot(pos.xyz, clipPlane.xyz) + clipPlane.w) < 0.0) +        {                  discard; -            } +        } +             }  } @@ -308,7 +311,6 @@ void main()      // diffcol == diffuse map combined with vertex color      vec4 diffcol = texture(diffuseMap, vary_texcoord0.xy);  	diffcol.rgb *= vertex_color.rgb; -      alphaMask(diffcol.a);      // spec == specular map combined with specular color diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index f1de0b88d6..b49c3386db 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -201,7 +201,6 @@ void main()          #ifdef HERO_PROBES          vec3 refnormpersp = reflect(pos.xyz, norm.xyz); -        if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_MIRROR))              color = textureLod(heroProbes, vec4(env_mat * refnormpersp, 0), (1.0 - gloss) * 11).xyz * specularColor;          #endif      } diff --git a/indra/newview/lldrawpoolmaterials.cpp b/indra/newview/lldrawpoolmaterials.cpp index 063dd948f7..15033160d5 100644 --- a/indra/newview/lldrawpoolmaterials.cpp +++ b/indra/newview/lldrawpoolmaterials.cpp @@ -192,10 +192,10 @@ void LLDrawPoolMaterials::renderDeferred(S32 pass)          mShader->uniform1f(LLShaderMgr::MIRROR_FLAG, 0);      } -    LLVector4 clipPlane = LLVector4(gPipeline.mHeroProbeManager.currentMirrorClip()[0], -                                    gPipeline.mHeroProbeManager.currentMirrorClip()[1], -                                    gPipeline.mHeroProbeManager.currentMirrorClip()[2], -                                    gPipeline.mHeroProbeManager.currentMirrorClip()[3]); +    LLVector4 clipPlane = LLVector4(gPipeline.mHeroProbeManager.mMirrorPosition[0], +                                    gPipeline.mHeroProbeManager.mMirrorPosition[1], +                                    gPipeline.mHeroProbeManager.mMirrorPosition[2], +                                    1);      mShader->uniform4fv(LLShaderMgr::CLIP_PLANE,                   1, clipPlane.mV); diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp index 1ecafd4f54..bbe493f6a9 100644 --- a/indra/newview/llheroprobemanager.cpp +++ b/indra/newview/llheroprobemanager.cpp @@ -165,20 +165,10 @@ void LLHeroProbeManager::update()              LLVector3 reject  = offset - project;              LLVector3 point   = (reject - project) + hero_pos; -            glh::matrix4f mat     = copy_matrix(gGLModelView); -            glh::vec4f    tc(face_normal.mV); -            mat.mult_matrix_vec(tc); - -            LLVector3 mirror_normal; -            mirror_normal.set(tc.v); - -            LLVector3 hero_pos_render; -            tc = glh::vec4f(hero_pos.mV); - -            mat.mult_matrix_vec(tc); -            hero_pos_render.set(tc.v); - -            mCurrentClipPlane.setVec(hero_pos_render, mirror_normal); +            mCurrentClipPlane.setVec(hero_pos, face_normal); +            mMirrorPosition = hero_pos; +            mMirrorNormal   = LLVector3(0, 0, 1); +                      probe_pos.load3(point.mV);          } diff --git a/indra/newview/llheroprobemanager.h b/indra/newview/llheroprobemanager.h index 68cfdbfd99..0b32768bb1 100644 --- a/indra/newview/llheroprobemanager.h +++ b/indra/newview/llheroprobemanager.h @@ -75,7 +75,9 @@ public:      bool isMirrorPass() const { return mRenderingMirror; } -    LLPlane currentMirrorClip() const { return mCurrentClipPlane; } +    LLPlane   currentMirrorClip() const { return mCurrentClipPlane; } +    LLVector3 mMirrorPosition; +    LLVector3 mMirrorNormal;  private:      friend class LLPipeline; @@ -102,6 +104,7 @@ private:      LLPlane mCurrentClipPlane; +      // update the specified face of the specified probe      void updateProbeFace(LLReflectionMap* probe, U32 face, F32 near_clip); diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index c07c939862..9cfb774a90 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -1017,10 +1017,20 @@ void LLSettingsVOWater::applySpecial(void *ptarget, bool force)          LLVector4 waterPlane(enorm.v[0], enorm.v[1], enorm.v[2], -ep.dot(enorm)); +        norm = glh::vec3f(gPipeline.mHeroProbeManager.mMirrorNormal.mV[0], gPipeline.mHeroProbeManager.mMirrorNormal.mV[1], +                          gPipeline.mHeroProbeManager.mMirrorNormal.mV[2]); +        p    = glh::vec3f(gPipeline.mHeroProbeManager.mMirrorPosition.mV[0], gPipeline.mHeroProbeManager.mMirrorPosition.mV[1], +                          gPipeline.mHeroProbeManager.mMirrorPosition.mV[2]); +        invtrans.mult_matrix_vec(norm, enorm); +        enorm.normalize(); +        mat.mult_matrix_vec(p, ep); + +        LLVector4 mirrorPlane(enorm.v[0], enorm.v[1], enorm.v[2], -ep.dot(enorm)); +          LLDrawPoolAlpha::sWaterPlane = waterPlane;          shader->uniform4fv(LLShaderMgr::WATER_WATERPLANE, waterPlane.mV); - +        shader->uniform4fv(LLShaderMgr::CLIP_PLANE, mirrorPlane.mV);          LLVector4 light_direction = env.getClampedLightNorm();          F32 waterFogKS = 1.f / llmax(light_direction.mV[2], WATER_FOG_LIGHT_CLAMP); | 
