1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #define SAMPLES 8
- uniform float delta;
- uniform float sigma;
- uniform float direction; // 0.0 for x direction, 1.0 for y direction
- uniform sampler2D colorTexture;
- #ifdef USE_STEP_SIZE
- uniform float stepSize;
- #else
- uniform vec2 step;
- #endif
- varying vec2 v_textureCoordinates;
- // Incremental Computation of the Gaussian:
- // https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html
- void main()
- {
- vec2 st = v_textureCoordinates;
- vec2 dir = vec2(1.0 - direction, direction);
- #ifdef USE_STEP_SIZE
- vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw));
- #else
- vec2 step = step;
- #endif
- vec3 g;
- g.x = 1.0 / (sqrt(czm_twoPi) * sigma);
- g.y = exp((-0.5 * delta * delta) / (sigma * sigma));
- g.z = g.y * g.y;
- vec4 result = texture2D(colorTexture, st) * g.x;
- for (int i = 1; i < SAMPLES; ++i)
- {
- g.xy *= g.yz;
- vec2 offset = float(i) * dir * step;
- result += texture2D(colorTexture, st - offset) * g.x;
- result += texture2D(colorTexture, st + offset) * g.x;
- }
- gl_FragColor = result;
- }
|