kaleidoscopeShader top-level property

ShaderObject kaleidoscopeShader
final

Implementation

final ShaderObject kaleidoscopeShader = ShaderObject("KaleidoscopeF")
  ..AddUniformVars([uScale, uCenter2, uTexture])
  ..SetBody([
    """
vec2 kaleidoscope( vec2 uv, float n) {
   float PI = 3.1415926;
    float angle = PI / n;
    float r = length(uv);
	  float a = atan( uv.y, uv.x ) / angle;
	  a = mix( fract( a ), 1.0 - fract( a ), mod( floor( a ), 2.0 ) ) * angle;
	return vec2( cos( a ), sin( a ) ) * r;
}

void main() {
    vec2 dim = vec2(textureSize(${uTexture}, 0));
    vec2 p = gl_FragCoord.xy / dim;
    vec2 uv = ${uCenter2} + kaleidoscope(p - ${uCenter2}, ${uScale});
    ${oFragColor} = texelFetch(${uTexture}, ivec2(uv * dim), 0);
}
"""
  ]);