diff options
| -rwxr-xr-x | indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 12 | ||||
| -rwxr-xr-x | indra/llimage/llimage.cpp | 21 | ||||
| -rwxr-xr-x | indra/llimage/llimage.h | 9 | ||||
| -rwxr-xr-x | indra/newview/app_settings/filters/Brightscan.xml | 23 | 
4 files changed, 55 insertions, 10 deletions
| diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 90a7c09442..2447e00028 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -158,11 +158,15 @@ void execute_filter(const LLSD& filter_data, LLPointer<LLImageRaw> raw_image)          // Execute the filter described on this line          if (filter_name == "blend")          { -            raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); +            raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_CENTER,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal()));          }          else if (filter_name == "fade")          { -            raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); +            raw_image->setVignette(VIGNETTE_MODE_FADE,VIGNETTE_TYPE_CENTER,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); +        } +        else if (filter_name == "lines") +        { +            raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_LINES,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal()));          }          else if (filter_name == "sepia")          { @@ -780,11 +784,11 @@ int main(int argc, char** argv)          // Set the vignette if any          if (vignette_name == "blend")          { -            raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(vignette_param_1),(float)(vignette_param_2)); +            raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_CENTER,(float)(vignette_param_1),(float)(vignette_param_2));          }          else if (vignette_name == "fade")          { -            raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(vignette_param_1),(float)(vignette_param_2)); +            raw_image->setVignette(VIGNETTE_MODE_FADE,VIGNETTE_TYPE_CENTER,(float)(vignette_param_1),(float)(vignette_param_2));          }          // Apply filter if any diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 14fa71d828..3105fe3746 100755 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -1372,9 +1372,10 @@ void LLImageRaw::filterScreen(EScreenMode mode, const S32 wave_length, const F32  	}  } -void LLImageRaw::setVignette(EVignetteMode mode, F32 gamma, F32 min) +void LLImageRaw::setVignette(EVignetteMode mode, EVignetteType type, F32 gamma, F32 min)  {      mVignetteMode = mode; +    mVignetteType = type;      mVignetteGamma = gamma;      mVignetteMin = llclampf(min);      // We always center the vignette on the image and fits it in the image smallest dimension @@ -1385,10 +1386,20 @@ void LLImageRaw::setVignette(EVignetteMode mode, F32 gamma, F32 min)  F32 LLImageRaw::getVignetteAlpha(S32 i, S32 j)  { -    // alpha is a modified gaussian value, with a center and fading in a circular pattern toward the edges -    // The gamma parameter controls the intensity of the drop down from alpha 1.0 (center) to 0.0 -    F32 d_center_square = (i - mVignetteCenterX)*(i - mVignetteCenterX) + (j - mVignetteCenterY)*(j - mVignetteCenterY); -    F32 alpha = powf(F_E, -(powf((d_center_square/(mVignetteWidth*mVignetteWidth)),mVignetteGamma)/2.0f)); +    F32 alpha = 1.0; +    if (mVignetteType == VIGNETTE_TYPE_CENTER) +    { +        // alpha is a modified gaussian value, with a center and fading in a circular pattern toward the edges +        // The gamma parameter controls the intensity of the drop down from alpha 1.0 (center) to 0.0 +        F32 d_center_square = (i - mVignetteCenterX)*(i - mVignetteCenterX) + (j - mVignetteCenterY)*(j - mVignetteCenterY); +        alpha = powf(F_E, -(powf((d_center_square/(mVignetteWidth*mVignetteWidth)),mVignetteGamma)/2.0f)); +    } +    else if (mVignetteType == VIGNETTE_TYPE_LINES) +    { +        // alpha varies according to a squared sine function vertically. +        // gamma is interpreted as the wavelength (in pixels) of the sine in that case. +        alpha = (sinf(2*F_PI*j/mVignetteGamma) > 0.0 ? 1.0 : 0.0); +    }      // We rescale alpha between min and 1.0 so to avoid complete fading if so desired.      return (mVignetteMin + alpha * (1.0 - mVignetteMin));  } diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index f2bb91a329..a600f2e4a6 100755 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -95,6 +95,12 @@ typedef enum e_vignette_mode  	VIGNETTE_MODE_FADE  = 2  } EVignetteMode; +typedef enum e_vignette_type +{ +	VIGNETTE_TYPE_CENTER = 0, +	VIGNETTE_TYPE_LINES  = 1 +} EVignetteType; +  typedef enum e_screen_mode  {  	SCREEN_MODE_2DSINE   = 0, @@ -173,6 +179,7 @@ protected:      // Vignette filtering      EVignetteMode mVignetteMode; +    EVignetteType mVignetteType;      S32 mVignetteCenterX;      S32 mVignetteCenterY;      S32 mVignetteWidth; @@ -306,7 +313,7 @@ public:      void colorTransform(const LLMatrix3 &transform);      void colorCorrect(const U8* lut_red, const U8* lut_green, const U8* lut_blue);      void filterScreen(EScreenMode mode, const S32 wave_length, const F32 angle); -    void setVignette(EVignetteMode mode, F32 gamma, F32 min); +    void setVignette(EVignetteMode mode, EVignetteType type, F32 gamma, F32 min);      U32* getBrightnessHistogram();  protected: diff --git a/indra/newview/app_settings/filters/Brightscan.xml b/indra/newview/app_settings/filters/Brightscan.xml new file mode 100755 index 0000000000..8b10687ef5 --- /dev/null +++ b/indra/newview/app_settings/filters/Brightscan.xml @@ -0,0 +1,23 @@ +<llsd> +    <array> +        <array> +            <string>linearize</string> +            <real>0.01</real> +            <real>1.0</real> +            <real>1.0</real> +            <real>1.0</real> +        </array> +        <array> +            <string>lines</string> +            <real>10.0</real> +            <real>0.0</real> +        </array> +        <array> +            <string>brighten</string> +            <real>100.0</real> +            <real>1.0</real> +            <real>1.0</real> +            <real>1.0</real> +        </array> +    </array> +</llsd> | 
