Pixel-Composer/shaders/sh_pb_shade/sh_pb_shade.fsh
2023-07-21 12:40:20 +02:00

58 lines
1.1 KiB
GLSL

//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform vec2 dimension;
uniform vec4 padding;
vec4 sample ( vec2 position ) {
if(position.x < 0.) return vec4(0.);
if(position.y < 0.) return vec4(0.);
if(position.x > 1.) return vec4(0.);
if(position.y > 1.) return vec4(0.);
return texture2D( gm_BaseTexture, position );
}
void main() {
vec2 tx = 1. / dimension;
vec2 pos;
gl_FragColor = sample( v_vTexcoord );
if(gl_FragColor.a == 0.) return;
for(float i = 1.; i <= padding[0]; i++) {
pos = v_vTexcoord + vec2( tx.x, 0. ) * i;
if(sample(pos).a == 0.) {
gl_FragColor = v_vColour;
return;
}
}
for(float i = 1.; i <= padding[1]; i++) {
pos = v_vTexcoord + vec2( 0.,-tx.y ) * i;
if(sample(pos).a == 0.) {
gl_FragColor = v_vColour;
return;
}
}
for(float i = 1.; i <= padding[2]; i++) {
pos = v_vTexcoord + vec2(-tx.x, 0. ) * i;
if(sample(pos).a == 0.) {
gl_FragColor = v_vColour;
return;
}
}
for(float i = 1.; i <= padding[3]; i++) {
pos = v_vTexcoord + vec2( 0., tx.y ) * i;
if(sample(pos).a == 0.) {
gl_FragColor = v_vColour;
return;
}
}
}