OctaCore/config/glsl/postfx.cfg

184 lines
5.1 KiB
INI

////////////////////////////////////////////////
//
// post effects
//
////////////////////////////////////////////////
fsvs = [result [
in vec4 vvertex;
@(screentexcoord 0)
out vec2 texcoord0;
@arg2
void main(void)
{
gl_Position = vvertex; // woohoo, no mvp :)
texcoord0 = vtexcoord0;
@arg1
}
]]
fsps = [result [
uniform sampler2DRect tex0;
in vec2 texcoord0;
layout(location = 0) out vec4 fragcolor;
@arg2
void main(void)
{
vec4 color = textureRect(tex0, texcoord0);
@arg1
}
]]
fsvs4 = [
fsvs [
texcoord1 = vtexcoord0 + vec2(-1.5, -1.5);
texcoord2 = vtexcoord0 + vec2( 1.5, -1.5);
texcoord3 = vtexcoord0 + vec2(-1.5, 1.5);
texcoord4 = vtexcoord0 + vec2( 1.5, 1.5);
@arg1
] [
out vec2 texcoord1, texcoord2, texcoord3, texcoord4;
]
]
fsps4 = [
fsps [
vec4 s00 = textureRect(tex0, texcoord1);
vec4 s02 = textureRect(tex0, texcoord2);
vec4 s20 = textureRect(tex0, texcoord3);
vec4 s22 = textureRect(tex0, texcoord4);
@arg1
] [
in vec2 texcoord1, texcoord2, texcoord3, texcoord4;
]
]
// some simple ones that just do an effect on the RGB value...
lazyshader 0 "invert" (fsvs) (fsps [fragcolor = 1.0 - color;])
lazyshader 0 "gbr" (fsvs) (fsps [fragcolor = color.yzxw;])
lazyshader 0 "bw" (fsvs) (fsps [fragcolor = vec4(dot(color.xyz, vec3(0.333)));])
// sobel
lazyshader 0 "sobel" (fsvs4) (fsps4 [
vec4 t = s00 + s20 - s02 - s22;
vec4 u = s00 + s02 - s20 - s22;
fragcolor = color + t*t + u*u;
])
// rotoscope
lazyshader 0 "rotoscope" [
in vec4 vvertex;
@(screentexcoord 0)
uniform vec4 params;
out vec2 t11, t00, t12, t01, t20, t02, t21, t10, t22;
void main(void)
{
gl_Position = vvertex;
t11 = vtexcoord0;
t00 = vec2(-1.0, -1.0)*params.x + vtexcoord0;
t12 = vec2( 0.0, 1.0)*params.x + vtexcoord0;
t01 = vec2(-1.0, 0.0)*params.x + vtexcoord0;
t20 = vec2( 1.0, -1.0)*params.x + vtexcoord0;
t02 = vec2(-1.0, 1.0)*params.x + vtexcoord0;
t21 = vec2( 1.0, 0.0)*params.x + vtexcoord0;
t10 = vec2( 0.0, -1.0)*params.x + vtexcoord0;
t22 = vec2( 1.0, 1.0)*params.x + vtexcoord0;
}
] [
uniform sampler2DRect tex0;
in vec2 t11, t00, t12, t01, t20, t02, t21, t10, t22;
layout(location = 0) out vec4 fragcolor;
void main(void)
{
vec4 c00 = textureRect(tex0, t00);
vec4 c01 = textureRect(tex0, t01);
vec4 c02 = textureRect(tex0, t02);
vec4 c10 = textureRect(tex0, t10);
vec4 c11 = textureRect(tex0, t11);
vec4 c12 = textureRect(tex0, t12);
vec4 c20 = textureRect(tex0, t20);
vec4 c21 = textureRect(tex0, t21);
vec4 c22 = textureRect(tex0, t22);
vec4 diag1 = c00 - c22;
vec4 diag2 = c02 - c20;
vec4 xedge = (c01 - c21)*2.0 + diag1 + diag2;
vec4 yedge = (c10 - c12)*2.0 + diag1 - diag2;
xedge *= xedge;
yedge *= yedge;
vec4 xyedge = xedge + yedge;
float sobel = step(max(xyedge.x, max(xyedge.y, xyedge.z)), 0.1);
float hue = dot(c11.xyz, vec3(1.0));
c11 /= hue;
vec3 cc = step(vec3(0.2, 0.8, 1.5), vec3(hue));
c11 *= dot(cc, vec3(0.5, 0.5, 1.5));
fragcolor = c11 * max(cc.z, sobel);
}
]
blur3shader = [
lazyshader 0 $arg1 [
in vec4 vvertex;
@(screentexcoord 0)
out vec2 texcoord0, texcoord1;
void main(void)
{
gl_Position = vvertex;
texcoord0 = vtexcoord0 + vec2(@(? $arg2 -0.5 0.0), @(? $arg3 -0.5 0.0));
texcoord1 = vtexcoord0 + vec2(@(? $arg2 0.5 0.0), @(? $arg3 0.5 0.0));
}
] [
uniform sampler2DRect tex0;
in vec2 texcoord0, texcoord1;
layout(location = 0) out vec4 fragcolor;
void main(void)
{
fragcolor = 0.5*(textureRect(tex0, texcoord0) + textureRect(tex0, texcoord1));
}
]
]
blur3shader hblur3 1 0
blur3shader vblur3 0 1
blur5shader = [
lazyshader 0 $arg1 [
in vec4 vvertex;
@(screentexcoord 0)
out vec2 texcoord0, texcoord1, texcoord2;
void main(void)
{
gl_Position = vvertex;
texcoord0 = vtexcoord0;
texcoord1 = vtexcoord0 + vec2(@(? $arg2 -1.333 0.0), @(? $arg3 -1.333 0.0));
texcoord2 = vtexcoord0 + vec2(@(? $arg2 1.333 0.0), @(? $arg3 1.333 0.0));
}
] [
uniform sampler2DRect tex0;
in vec2 texcoord0, texcoord1, texcoord2;
layout(location = 0) out vec4 fragcolor;
void main(void)
{
fragcolor = 0.4*textureRect(tex0, texcoord0) + 0.3*(textureRect(tex0, texcoord1) + textureRect(tex0, texcoord2));
}
]
]
blur5shader hblur5 1 0
blur5shader vblur5 0 1
rotoscope = [
clearpostfx
if (>= $numargs 1) [addpostfx rotoscope 0 0 0 $arg1]
if (>= $numargs 2) [
if (= $arg2 1) [addpostfx hblur3; addpostfx vblur3]
if (= $arg2 2) [addpostfx hblur5; addpostfx vblur5]
]
]