diff options
| author | Ptolemy <ptolemy@lindenlab.com> | 2021-10-21 16:46:06 -0700 | 
|---|---|---|
| committer | Ptolemy <ptolemy@lindenlab.com> | 2021-10-21 16:46:06 -0700 | 
| commit | a172c9d9cf358c3d9329a1777e30f627f50d5aaa (patch) | |
| tree | b19f7aadc61f73d173d071fbe9503bea80ab8f87 /indra | |
| parent | 851767b808c3cb05d718538389ccc1ed3c95d1a1 (diff) | |
SL-16127: Replace slow getLightTransmittance with faster version
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llinventory/llsettingssky.cpp | 8 | ||||
| -rw-r--r-- | indra/llinventory/llsettingssky.h | 1 | ||||
| -rw-r--r-- | indra/newview/lllegacyatmospherics.cpp | 2 | 
3 files changed, 10 insertions, 1 deletions
| diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index 81937dbda5..69b4a4929d 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -1206,6 +1206,14 @@ LLColor3 LLSettingsSky::getLightTransmittance(F32 distance) const      return transmittance;  } +// SL-16127: getTotalDensity() and getDensityMultiplier() call LLSettingsSky::getColor() and LLSettingsSky::getFloat() respectively which are S-L-O-W +LLColor3 LLSettingsSky::getLightTransmittanceFast( const LLColor3& total_density, const F32 density_multiplier, const F32 distance ) const +{ +    // Transparency (-> density) from Beer's law +    LLColor3 transmittance = componentExp(total_density * -(density_multiplier * distance)); +    return transmittance; +} +  // performs soft scale clip and gamma correction ala the shader implementation  // scales colors down to 0 - 1 range preserving relative ratios  LLColor3 LLSettingsSky::gammaCorrect(const LLColor3& in) const diff --git a/indra/llinventory/llsettingssky.h b/indra/llinventory/llsettingssky.h index 4127911643..77d9d8e87c 100644 --- a/indra/llinventory/llsettingssky.h +++ b/indra/llinventory/llsettingssky.h @@ -252,6 +252,7 @@ public:      LLColor3 getLightAttenuation(F32 distance) const;      LLColor3 getLightTransmittance(F32 distance) const; +    LLColor3 getLightTransmittanceFast(const LLColor3& total_density, const F32 density_multiplier, const F32 distance) const;      LLColor3 getTotalDensity() const;      LLColor3 gammaCorrect(const LLColor3& in) const; diff --git a/indra/newview/lllegacyatmospherics.cpp b/indra/newview/lllegacyatmospherics.cpp index a2acb3efe2..71482c3261 100644 --- a/indra/newview/lllegacyatmospherics.cpp +++ b/indra/newview/lllegacyatmospherics.cpp @@ -313,7 +313,7 @@ void LLAtmospherics::calcSkyColorWLVert(const LLSettingsSky::ptr_t &psky, LLVect  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes  	LLColor3 light_atten = vars.light_atten; -    LLColor3 light_transmittance = psky->getLightTransmittance(Plen); +    LLColor3 light_transmittance = psky->getLightTransmittanceFast(vars.total_density, vars.density_multiplier, Plen);      (void)light_transmittance; // silence Clang warn-error  	// Calculate relative weights | 
