mirror of
https://github.com/libretro/glsl-shaders.git
synced 2025-03-02 20:06:03 +00:00
add fast-bilateral manual conversion
This commit is contained in:
parent
fe0cebc87e
commit
0f7fb460b0
5
denoisers/fast-bilateral.glslp
Normal file
5
denoisers/fast-bilateral.glslp
Normal file
@ -0,0 +1,5 @@
|
||||
shaders = 1
|
||||
|
||||
shader0 = shaders/fast-bilateral.glsl
|
||||
filter_linear0 = false
|
||||
scale_type_0 = source
|
194
denoisers/shaders/fast-bilateral.glsl
Normal file
194
denoisers/shaders/fast-bilateral.glsl
Normal file
@ -0,0 +1,194 @@
|
||||
/*
|
||||
Hyllian's Fast Bilateral Shader
|
||||
|
||||
Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
// Compatibility #ifdefs needed for parameters
|
||||
#ifdef GL_ES
|
||||
#define COMPAT_PRECISION mediump
|
||||
#else
|
||||
#define COMPAT_PRECISION
|
||||
#endif
|
||||
|
||||
// Parameter lines go here:
|
||||
#pragma parameter SIGMA_R "Bilateral Blur" 0.4 0.0 1.0 0.1
|
||||
#ifdef PARAMETER_UNIFORM
|
||||
// All parameter floats need to have COMPAT_PRECISION in front of them
|
||||
uniform COMPAT_PRECISION float SIGMA_R;
|
||||
#else
|
||||
#define SIGMA_R 0.4
|
||||
#endif
|
||||
|
||||
#define saturate(c) clamp(c, 0.0, 1.0)
|
||||
#define lerp(c) mix(c)
|
||||
#define mul(a,b) (b*a)
|
||||
#define fmod(c) mod(c)
|
||||
#define frac(c) fract(c)
|
||||
#define tex2D(c,d) texture(c,d)
|
||||
#define float2 vec2
|
||||
#define float3 vec3
|
||||
#define float4 vec4
|
||||
#define int2 ivec2
|
||||
#define int3 ivec3
|
||||
#define int4 ivec4
|
||||
#define bool2 bvec2
|
||||
#define bool3 bvec3
|
||||
#define bool4 bvec4
|
||||
#define float2x2 mat2x2
|
||||
#define float3x3 mat3x3
|
||||
#define float4x4 mat4x4
|
||||
|
||||
#define decal Source
|
||||
|
||||
#define BIL(M,K) {col=GET(M,K);ds=M*M+K*K;weight=exp(-ds/sd2)*exp(-(col-center)*(col-center)/si2);color+=(weight*col);wsum+=weight;}
|
||||
|
||||
#if defined(VERTEX)
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
#define COMPAT_VARYING out
|
||||
#define COMPAT_ATTRIBUTE in
|
||||
#define COMPAT_TEXTURE texture
|
||||
#else
|
||||
#define COMPAT_VARYING varying
|
||||
#define COMPAT_ATTRIBUTE attribute
|
||||
#define COMPAT_TEXTURE texture2D
|
||||
#endif
|
||||
|
||||
#ifdef GL_ES
|
||||
#define COMPAT_PRECISION mediump
|
||||
#else
|
||||
#define COMPAT_PRECISION
|
||||
#endif
|
||||
|
||||
COMPAT_ATTRIBUTE vec4 VertexCoord;
|
||||
COMPAT_ATTRIBUTE vec4 COLOR;
|
||||
COMPAT_ATTRIBUTE vec4 TexCoord;
|
||||
COMPAT_VARYING vec4 COL0;
|
||||
COMPAT_VARYING vec4 TEX0;
|
||||
|
||||
uniform mat4 MVPMatrix;
|
||||
uniform int FrameDirection;
|
||||
uniform int FrameCount;
|
||||
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||
uniform COMPAT_PRECISION vec2 InputSize;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = MVPMatrix * VertexCoord;
|
||||
COL0 = COLOR;
|
||||
TEX0.xy = TexCoord.xy;
|
||||
}
|
||||
|
||||
#elif defined(FRAGMENT)
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
#define COMPAT_VARYING in
|
||||
#define COMPAT_TEXTURE texture
|
||||
out vec4 FragColor;
|
||||
#else
|
||||
#define COMPAT_VARYING varying
|
||||
#define FragColor gl_FragColor
|
||||
#define COMPAT_TEXTURE texture2D
|
||||
#endif
|
||||
|
||||
#ifdef GL_ES
|
||||
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||
precision highp float;
|
||||
#else
|
||||
precision mediump float;
|
||||
#endif
|
||||
#define COMPAT_PRECISION mediump
|
||||
#else
|
||||
#define COMPAT_PRECISION
|
||||
#endif
|
||||
|
||||
uniform int FrameDirection;
|
||||
uniform int FrameCount;
|
||||
uniform COMPAT_PRECISION vec2 OutputSize;
|
||||
uniform COMPAT_PRECISION vec2 TextureSize;
|
||||
uniform COMPAT_PRECISION vec2 InputSize;
|
||||
uniform sampler2D Texture;
|
||||
COMPAT_VARYING vec4 TEX0;
|
||||
|
||||
// compatibility #defines
|
||||
#define Source Texture
|
||||
#define vTexCoord TEX0.xy
|
||||
#define texture(c, d) COMPAT_TEXTURE(c, d)
|
||||
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
|
||||
#define OutputSize vec4(OutputSize, 1.0 / OutputSize)
|
||||
|
||||
#define GET(M,K) (tex2D(decal,tc+M*dx+K*dy).xyz)
|
||||
|
||||
void main()
|
||||
{
|
||||
float ds, sd2, si2;
|
||||
float sigma_d = 3.0;
|
||||
float sigma_r = SIGMA_R*0.04;
|
||||
|
||||
float3 color = float3(0.0, 0.0, 0.0);
|
||||
float3 wsum = float3(0.0, 0.0, 0.0);
|
||||
float3 weight;
|
||||
|
||||
float2 dx = float2(1.0, 0.0) * SourceSize.zw;
|
||||
float2 dy = float2(0.0, 1.0) * SourceSize.zw;
|
||||
|
||||
sd2 = 2.0 * sigma_d * sigma_d;
|
||||
si2 = 2.0 * sigma_r * sigma_r;
|
||||
|
||||
float2 tc = vTexCoord;
|
||||
|
||||
float3 col;
|
||||
float3 center = GET(0,0);
|
||||
|
||||
BIL(-2,-2)
|
||||
BIL(-1,-2)
|
||||
BIL( 0,-2)
|
||||
BIL( 1,-2)
|
||||
BIL( 2,-2)
|
||||
BIL(-2,-1)
|
||||
BIL(-1,-1)
|
||||
BIL( 0,-1)
|
||||
BIL( 1,-1)
|
||||
BIL( 2,-1)
|
||||
BIL(-2, 0)
|
||||
BIL(-1, 0)
|
||||
BIL( 0, 0)
|
||||
BIL( 1, 0)
|
||||
BIL( 2, 0)
|
||||
BIL(-2, 1)
|
||||
BIL(-1, 1)
|
||||
BIL( 0, 1)
|
||||
BIL( 1, 1)
|
||||
BIL( 2, 1)
|
||||
BIL(-2, 2)
|
||||
BIL(-1, 2)
|
||||
BIL( 0, 2)
|
||||
BIL( 1, 2)
|
||||
BIL( 2, 2)
|
||||
|
||||
// Weight normalization
|
||||
color /= wsum;
|
||||
FragColor = vec4(color, 1.0);
|
||||
}
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user