#pragma language glsl3 extern ivec2 texSize; extern float time; vec4 effect(vec4 color, Image tex, vec2 texCoord, vec2 screenCoord) { float modY = (0.75 + sin(time) * 0.25) * (0.5 + cos(texCoord.y + 10 * sin(0.1 * time)) * 0.5); vec4 outlineColor = vec4(modY, 0.2 * sin(time) + 0.5, 0.5, 1.0); float outlineSize = 1.0; float alpha = Texel(tex, texCoord).a; if (alpha > 0.0) return Texel(tex, texCoord) * color; // Если среди соседей есть хоть один прозрачный пиксель, то это граница, обводим её float outline = 0.0; for (float x = -outlineSize; x <= outlineSize; x++) { for (float y = -outlineSize; y <= outlineSize; y++) { vec2 offset = vec2(x, y) / texSize; float neighborAlpha = Texel(tex, texCoord + offset).a; outline = max(outline, neighborAlpha); } } if (outline > 0.0) return outlineColor; return vec4(0.0); }