X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=padding_effect.frag;h=2dc2d30ffc40efcdf297c9c3016c8c9d9eb2fcd3;hp=4f1adc1fd257f54318f38a7ada6c3e296d29089f;hb=3b9957afac0555a126d1941d7027fb52e29b309a;hpb=207384d5c7b8ce40e57decb0160c91da70d54ee6 diff --git a/padding_effect.frag b/padding_effect.frag index 4f1adc1..2dc2d30 100644 --- a/padding_effect.frag +++ b/padding_effect.frag @@ -1,16 +1,25 @@ -uniform vec2 PREFIX(offset); -uniform vec2 PREFIX(scale); -uniform vec2 PREFIX(texcoord_min); -uniform vec2 PREFIX(texcoord_max); +// Implicit uniforms: +// uniform vec2 PREFIX(offset); +// uniform vec2 PREFIX(scale); +// +// uniform vec2 PREFIX(normalized_coords_to_texels); +// uniform vec2 PREFIX(offset_bottomleft); +// uniform vec2 PREFIX(offset_topright); vec4 FUNCNAME(vec2 tc) { tc -= PREFIX(offset); tc *= PREFIX(scale); - if (any(lessThan(tc, PREFIX(texcoord_min))) || - any(greaterThan(tc, PREFIX(texcoord_max)))) { + vec2 tc_texels = tc * PREFIX(normalized_coords_to_texels); + vec2 coverage_bottomleft = clamp(tc_texels + PREFIX(offset_bottomleft), 0.0f, 1.0f); + vec2 coverage_topright = clamp(PREFIX(offset_topright) - tc_texels, 0.0f, 1.0f); + vec2 coverage_both = coverage_bottomleft * coverage_topright; + float coverage = coverage_both.x * coverage_both.y; + + if (coverage <= 0.0f) { + // Short-circuit in case the underlying function is expensive to call. return PREFIX(border_color); + } else { + return mix(PREFIX(border_color), INPUT(tc), coverage); } - - return INPUT(tc); }