X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=padding_effect.frag;h=32ae84067503b395ecf6d27d9e90bcf75e5e091f;hp=4f1adc1fd257f54318f38a7ada6c3e296d29089f;hb=82071a94aaff95d2d29d077338085a8fb27e76d1;hpb=fbb1247a1996c6dbe54114eb5cc23dc79e17099c diff --git a/padding_effect.frag b/padding_effect.frag index 4f1adc1..32ae840 100644 --- a/padding_effect.frag +++ b/padding_effect.frag @@ -1,16 +1,24 @@ uniform vec2 PREFIX(offset); uniform vec2 PREFIX(scale); -uniform vec2 PREFIX(texcoord_min); -uniform vec2 PREFIX(texcoord_max); + +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 coverare_topright = clamp(PREFIX(offset_topright) - tc_texels, 0.0f, 1.0f); + vec2 coverage_both = coverage_bottomleft * coverare_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); }