forked from OctaForge/OctaCore
69 lines
2.4 KiB
INI
69 lines
2.4 KiB
INI
////////////////////////////////////////////////
|
|
//
|
|
// separable blur with up to 7 taps
|
|
//
|
|
////////////////////////////////////////////////
|
|
|
|
blurshader = [
|
|
shader 0 $arg1 [
|
|
attribute vec4 vvertex;
|
|
@(screentexcoord 0)
|
|
uniform float offsets[8];
|
|
varying vec2 texcoord0, texcoordp1, texcoordn1;
|
|
@(loopconcat+ i 2 (min (- $arg2 1) 2) [result [
|
|
varying vec2 texcoordp@i, texcoordn@i;
|
|
]])
|
|
void main(void)
|
|
{
|
|
gl_Position = vvertex;
|
|
texcoord0 = vtexcoord0;
|
|
vec2 tcp = vtexcoord0, tcn = vtexcoord0;
|
|
tcp.@arg3 += offsets[1];
|
|
tcn.@arg3 -= offsets[1];
|
|
texcoordp1 = tcp;
|
|
texcoordn1 = tcn;
|
|
@(loopconcat+ i 2 (min (- $arg2 1) 2) [result [
|
|
tcp.@arg3 = vtexcoord0.@arg3 + offsets[@@i];
|
|
tcn.@arg3 = vtexcoord0.@arg3 - offsets[@@i];
|
|
texcoordp@i = tcp;
|
|
texcoordn@i = tcn;
|
|
]])
|
|
}
|
|
] [
|
|
uniform float weights[8];
|
|
uniform float offsets[8];
|
|
uniform sampler@[arg4] tex0;
|
|
varying vec2 texcoord0, texcoordp1, texcoordn1;
|
|
@(loopconcat+ i 2 (min (- $arg2 1) 2) [result [
|
|
varying vec2 texcoordp@i, texcoordn@i;
|
|
]])
|
|
fragdata(0) vec4 fragcolor;
|
|
void main(void)
|
|
{
|
|
#define texval(coords) texture@[arg4](tex0, (coords))
|
|
vec4 val = texval(texcoord0) * weights[0];
|
|
@(loopconcat+ i 1 $arg2 [
|
|
if (< $i 4) [result [
|
|
val += weights[@@i] * (texval(texcoordp@i) + texval(texcoordn@i));
|
|
]] [result [
|
|
val += weights[@@i] *
|
|
@(if (=s $arg3 "x") [result [
|
|
(texval(vec2(texcoord0.x + offsets[@@i], texcoord0.y)) + texval(vec2(texcoord0.x - offsets[@@i], texcoord0.y)));
|
|
]] [result [
|
|
(texval(vec2(texcoord0.x, texcoord0.y + offsets[@@i])) + texval(vec2(texcoord0.x, texcoord0.y - offsets[@@i])));
|
|
]])
|
|
]]
|
|
])
|
|
fragcolor = val;
|
|
}
|
|
]
|
|
]
|
|
|
|
loop+ i 1 7 [
|
|
blurshader (format "blurx%1" $i) $i x 2D
|
|
blurshader (format "blury%1" $i) $i y 2D
|
|
blurshader (format "blurx%1rect" $i) $i x 2DRect
|
|
blurshader (format "blury%1rect" $i) $i y 2DRect
|
|
]
|
|
|