From 636da0168c5e443b202520e7203d3895576d6c6b Mon Sep 17 00:00:00 2001 From: sbosse Date: Wed, 28 Aug 2024 21:41:34 +0200 Subject: [PATCH] Wed 28 Aug 21:38:52 CEST 2024 --- src/SimNDT/gui/resources/data/filter.frag | 104 ++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/SimNDT/gui/resources/data/filter.frag diff --git a/src/SimNDT/gui/resources/data/filter.frag b/src/SimNDT/gui/resources/data/filter.frag new file mode 100644 index 0000000..7ce70c1 --- /dev/null +++ b/src/SimNDT/gui/resources/data/filter.frag @@ -0,0 +1,104 @@ +/* + * glumpy is an OpenGL framework for the fast visualization of numpy arrays. + * Copyright (C) 2009-2011 Nicolas P. Rougier. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY NICOLAS P. ROUGIER ''AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL NICOLAS P. ROUGIER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are + * those of the authors and should not be interpreted as representing official + * policies, either expressed or implied, of Nicolas P. Rougier. + */ +/* #define GRID */ +/* #define ELEVATION */ +/* #define COLORIZATION */ +/* #define INTERPOLATION */ +/* #define GAMMA_CORRECTION */ + + +uniform vec2 pixel; +uniform sampler2D texture; /* default location 0 */ + +#ifdef ELEVATION +uniform float elevation; +#endif + +#ifdef GRID +uniform vec4 grid_color; +uniform vec3 grid_size; +uniform vec3 grid_offset; +uniform vec3 grid_thickness; +#endif + +#ifdef INTERPOLATION +uniform sampler1D kernel_lut; /* default location 1 */ +#endif + +#ifdef COLORIZATION +uniform sampler1D color_lut; /* default location 2 */ +#endif + +#ifdef GAMMA_CORRECTION +uniform float gamma; +#endif + +varying vec4 vertex; +varying float altitude; +void main() +{ + vec2 uv = gl_TexCoord[0].xy; + vec4 color = texture2D(texture, uv); + float a = altitude; + +#ifdef INTERPOLATION + color = interpolate(texture, kernel_lut, uv, pixel); +#ifndef NEAREST_INTERPOLATION + a = color.a; +#endif +#endif + + +#ifdef COLORIZATION + color = texture1D(color_lut,color.a); +#else +//#ifdef INTERPOLATION +// color = vec4(color.a,color.a,color.a,1.0); +//#endif +#endif + + +#ifdef GRID + vec3 v = vec3(vertex.xy,a) * grid_size - 0.0*grid_offset; + vec3 f = abs(fract(v)-0.5); + vec3 df = fwidth(v); + vec3 g = smoothstep(-grid_thickness * df, +grid_thickness * df, f); + float c = (1.0-g.x * g.y * g.z) * grid_color.a; + color = mix(color, vec4(grid_color.rgb,color.a), c); +#endif + + color *= gl_Color; + +#ifdef GAMMA_CORRECTION + color = pow(color, vec4(1.0/gamma,1.0/gamma,1.0/gamma,1)); +#endif + + gl_FragColor = color; +}