{"version":3,"file":"DitheringShader.COaLP0ZX.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/C6A4SRbqGnM4kKGiSw7M/c4Q3ADOx0Y5I8zNfOAQg/DitheringShader.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,Color}from\"framer\";// GLSL utility functions\nconst declarePI=`\n#define TWO_PI 6.28318530718\n#define PI 3.14159265358979323846\n`;const proceduralHash11=`\n  float hash11(float p) {\n    p = fract(p * 0.3183099) + 0.1;\n    p *= p + 19.19;\n    return fract(p * p);\n  }\n`;const proceduralHash21=`\n  float hash21(vec2 p) {\n    p = fract(p * vec2(0.3183099, 0.3678794)) + 0.1;\n    p += dot(p, p + 19.19);\n    return fract(p.x * p.y);\n  }\n`;const simplexNoise=`\nvec3 permute(vec3 x) { return mod(((x * 34.0) + 1.0) * x, 289.0); }\nfloat snoise(vec2 v) {\n  const vec4 C = vec4(0.211324865405187, 0.366025403784439,\n    -0.577350269189626, 0.024390243902439);\n  vec2 i = floor(v + dot(v, C.yy));\n  vec2 x0 = v - i + dot(i, C.xx);\n  vec2 i1;\n  i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n  vec4 x12 = x0.xyxy + C.xxzz;\n  x12.xy -= i1;\n  i = mod(i, 289.0);\n  vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0))\n    + i.x + vec3(0.0, i1.x, 1.0));\n  vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy),\n      dot(x12.zw, x12.zw)), 0.0);\n  m = m * m;\n  m = m * m;\n  vec3 x = 2.0 * fract(p * C.www) - 1.0;\n  vec3 h = abs(x) - 0.5;\n  vec3 ox = floor(x + 0.5);\n  vec3 a0 = x - ox;\n  m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);\n  vec3 g;\n  g.x = a0.x * x0.x + h.x * x0.y;\n  g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n  return 130.0 * dot(m, g);\n}\n`;// Vertex shader\nconst vertexShaderSource=`#version 300 es\nprecision mediump float;\n\nlayout(location = 0) in vec4 a_position;\n\nvoid main() {\n  gl_Position = a_position;\n}\n`;// Fragment shader\nconst fragmentShaderSource=`#version 300 es\nprecision mediump float;\n\nuniform float u_time;\nuniform vec2 u_resolution;\nuniform vec4 u_colorBack;\nuniform vec4 u_colorFront;\nuniform float u_shape;\nuniform float u_type;\nuniform float u_pxSize;\n\nout vec4 fragColor;\n\n${simplexNoise}\n${declarePI}\n${proceduralHash11}\n${proceduralHash21}\n\nfloat getSimplexNoise(vec2 uv, float t) {\n  float noise = .5 * snoise(uv - vec2(0., .3 * t));\n  noise += .5 * snoise(2. * uv + vec2(0., .32 * t));\n  return noise;\n}\n\nconst int bayer2x2[4] = int[4](0, 2, 3, 1);\nconst int bayer4x4[16] = int[16](\n  0,  8,  2, 10,\n 12,  4, 14,  6,\n  3, 11,  1,  9,\n 15,  7, 13,  5\n);\n\nconst int bayer8x8[64] = int[64](\n   0, 32,  8, 40,  2, 34, 10, 42,\n  48, 16, 56, 24, 50, 18, 58, 26,\n  12, 44,  4, 36, 14, 46,  6, 38,\n  60, 28, 52, 20, 62, 30, 54, 22,\n   3, 35, 11, 43,  1, 33,  9, 41,\n  51, 19, 59, 27, 49, 17, 57, 25,\n  15, 47,  7, 39, 13, 45,  5, 37,\n  63, 31, 55, 23, 61, 29, 53, 21\n);\n\nfloat getBayerValue(vec2 uv, int size) {\n  ivec2 pos = ivec2(mod(uv, float(size)));\n  int index = pos.y * size + pos.x;\n\n  if (size == 2) {\n    return float(bayer2x2[index]) / 4.0;\n  } else if (size == 4) {\n    return float(bayer4x4[index]) / 16.0;\n  } else if (size == 8) {\n    return float(bayer8x8[index]) / 64.0;\n  }\n  return 0.0;\n}\n\nvoid main() {\n  float t = .5 * u_time;\n  vec2 uv = gl_FragCoord.xy / u_resolution.xy;\n  uv -= .5;\n  \n  // Apply pixelization\n  float pxSize = u_pxSize;\n  vec2 pxSizeUv = gl_FragCoord.xy;\n  pxSizeUv -= .5 * u_resolution;\n  pxSizeUv /= pxSize;\n  vec2 pixelizedUv = floor(pxSizeUv) * pxSize / u_resolution.xy;\n  pixelizedUv += .5;\n  pixelizedUv -= .5;\n  \n  vec2 shape_uv = pixelizedUv;\n  vec2 dithering_uv = pxSizeUv;\n  vec2 ditheringNoise_uv = uv * u_resolution;\n\n  float shape = 0.;\n  if (u_shape < 1.5) {\n    // Warp\n    shape_uv *= .003;\n    for (float i = 1.0; i < 6.0; i++) {\n      shape_uv.x += 0.6 / i * cos(i * 2.5 * shape_uv.y + t);\n      shape_uv.y += 0.6 / i * cos(i * 1.5 * shape_uv.x + t);\n    }\n    shape = .15 / abs(sin(t - shape_uv.y - shape_uv.x));\n    shape = smoothstep(0.02, 1., shape);\n\n  } else if (u_shape < 2.5) {\n    // Sine wave\n    shape_uv *= 4.;\n    float wave = cos(.5 * shape_uv.x - 2. * t) * sin(1.5 * shape_uv.x + t) * (.75 + .25 * cos(3. * t));\n    shape = 1. - smoothstep(-1., 1., shape_uv.y + wave);\n\n  } else if (u_shape < 3.5) {\n    // Ripple\n    float dist = length(shape_uv);\n    float waves = sin(pow(dist, 1.7) * 7. - 3. * t) * .5 + .5;\n    shape = waves;\n\n  } else if (u_shape < 4.5) {\n    // Swirl\n    float l = length(shape_uv);\n    float angle = 6. * atan(shape_uv.y, shape_uv.x) + 4. * t;\n    float twist = 1.2;\n    float offset = pow(l, -twist) + angle / TWO_PI;\n    float mid = smoothstep(0., 1., pow(l, twist));\n    shape = mix(0., fract(offset), mid);\n\n  } else if (u_shape < 5.5) {\n    // Flow\n    shape_uv *= 1.5;\n    vec2 q = vec2(0.);\n    q.x = snoise(shape_uv + vec2(0.0, 1.0));\n    q.y = snoise(shape_uv + vec2(5.2, 1.3));\n    vec2 r = vec2(0.);\n    r.x = snoise(shape_uv + 1.0*q + vec2(1.7, 9.2) + 0.15*t);\n    r.y = snoise(shape_uv + 1.0*q + vec2(8.3, 2.8) + 0.126*t);\n    shape = snoise(shape_uv + r);\n    shape = smoothstep(0.2, 0.8, shape * 0.5 + 0.5);\n\n  } else if (u_shape < 6.5) {\n    // Glitch\n    vec2 g_uv = shape_uv;\n    float noise_wave = snoise(vec2(0., g_uv.y * 10. + t * 5.));\n    g_uv.x += noise_wave * 0.1 * step(0.8, fract(g_uv.y * 5. + t));\n    float block = snoise(floor(g_uv * 8.) + t);\n    shape = smoothstep(0.4, 0.6, block);\n\n  } else if (u_shape < 7.5) {\n    // Kaleidoscope\n    vec2 k_uv = shape_uv;\n    float angle = atan(k_uv.y, k_uv.x);\n    float radius = length(k_uv);\n    angle = mod(angle, PI / 3.0);\n    angle = abs(angle - PI / 6.0);\n    vec2 mapped_uv = vec2(cos(angle), sin(angle)) * radius;\n    shape = snoise(mapped_uv * 5.0 - t);\n    shape = smoothstep(0.3, 0.7, shape * 0.5 + 0.5);\n\n  } else {\n    // Liquid\n    vec2 l_uv = shape_uv * 2.0;\n    float v = 0.0;\n    v += sin(l_uv.x * 4.0 + t);\n    v += sin(l_uv.y * 4.0 + t * 0.5);\n    v += sin((l_uv.x + l_uv.y) * 4.0 + t);\n    vec2 c = l_uv + vec2(sin(t), cos(t));\n    v += sin(length(c) * 4.0);\n    shape = 0.5 + 0.5 * sin(v);\n  }\n\n  int type = int(floor(u_type));\n  float dithering = 0.0;\n\n  switch (type) {\n    case 1: {\n      dithering = step(hash21(ditheringNoise_uv), shape);\n    } break;\n    case 2:\n      dithering = getBayerValue(dithering_uv, 2);\n      break;\n    case 3:\n      dithering = getBayerValue(dithering_uv, 4);\n      break;\n    default:\n      dithering = getBayerValue(dithering_uv, 8);\n      break;\n  }\n\n  dithering -= .5;\n  float res = step(.5, shape + dithering);\n\n  vec3 fgColor = u_colorFront.rgb * u_colorFront.a;\n  float fgOpacity = u_colorFront.a;\n  vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n  float bgOpacity = u_colorBack.a;\n\n  vec3 color = fgColor * res;\n  float opacity = fgOpacity * res;\n\n  color += bgColor * (1. - opacity);\n  opacity += bgOpacity * (1. - opacity);\n\n  fragColor = vec4(color, opacity);\n}\n`;// Shape and type enums\nconst DitheringShapes={warp:1,wave:2,ripple:3,swirl:4,flow:5,glitch:6,kaleidoscope:7,liquid:8};const DitheringTypes={random:1,\"2x2\":2,\"4x4\":3,\"8x8\":4};function toRgba(color){const c=Color(color);return[c.r/255,c.g/255,c.b/255,c.a];}function createShader(gl,type,source){const shader=gl.createShader(type);if(!shader)return null;gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error(\"An error occurred compiling the shaders: \"+gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;}function createProgram(gl,vertexShaderSource,fragmentShaderSource){const vertexShader=createShader(gl,gl.VERTEX_SHADER,vertexShaderSource);const fragmentShader=createShader(gl,gl.FRAGMENT_SHADER,fragmentShaderSource);if(!vertexShader||!fragmentShader)return null;const program=gl.createProgram();if(!program)return null;gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error(\"Unable to initialize the shader program: \"+gl.getProgramInfoLog(program));gl.deleteProgram(program);return null;}return program;}/**\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 400\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function DitheringShader(props){const{colorBack=\"#000000\",colorFront=\"#ffffff\",shape=\"warp\",type=\"8x8\",pxSize=4,speed=1}=props;const canvasRef=useRef(null);const animationRef=useRef();const programRef=useRef(null);const glRef=useRef(null);const uniformLocationsRef=useRef({});const startTimeRef=useRef(Date.now());const containerRef=useRef(null);useEffect(()=>{const canvas=canvasRef.current;const container=containerRef.current;if(!canvas||!container)return;const gl=canvas.getContext(\"webgl2\");if(!gl){console.error(\"WebGL2 not supported\");return;}glRef.current=gl;// Create shader program\nconst program=createProgram(gl,vertexShaderSource,fragmentShaderSource);if(!program)return;programRef.current=program;// Get uniform locations\nuniformLocationsRef.current={u_time:gl.getUniformLocation(program,\"u_time\"),u_resolution:gl.getUniformLocation(program,\"u_resolution\"),u_colorBack:gl.getUniformLocation(program,\"u_colorBack\"),u_colorFront:gl.getUniformLocation(program,\"u_colorFront\"),u_shape:gl.getUniformLocation(program,\"u_shape\"),u_type:gl.getUniformLocation(program,\"u_type\"),u_pxSize:gl.getUniformLocation(program,\"u_pxSize\")};// Set up position attribute\nconst positionAttributeLocation=gl.getAttribLocation(program,\"a_position\");const positionBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);const positions=[-1,-1,1,-1,-1,1,-1,1,1,-1,1,1];gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(positions),gl.STATIC_DRAW);gl.enableVertexAttribArray(positionAttributeLocation);gl.vertexAttribPointer(positionAttributeLocation,2,gl.FLOAT,false,0,0);// Animation loop\nconst render=()=>{const currentTime=(Date.now()-startTimeRef.current)*.001*speed;const context=glRef.current;const shaderProgram=programRef.current;if(!context||!shaderProgram)return;context.clear(context.COLOR_BUFFER_BIT);context.useProgram(shaderProgram);// Set uniforms\nconst locations=uniformLocationsRef.current;if(locations.u_time)context.uniform1f(locations.u_time,currentTime);if(locations.u_resolution)context.uniform2f(locations.u_resolution,canvas.width,canvas.height);if(locations.u_colorBack)context.uniform4fv(locations.u_colorBack,toRgba(colorBack));if(locations.u_colorFront)context.uniform4fv(locations.u_colorFront,toRgba(colorFront));if(locations.u_shape)context.uniform1f(locations.u_shape,DitheringShapes[shape]);if(locations.u_type)context.uniform1f(locations.u_type,DitheringTypes[type]);if(locations.u_pxSize)context.uniform1f(locations.u_pxSize,pxSize);context.drawArrays(context.TRIANGLES,0,6);if(speed!==0){animationRef.current=requestAnimationFrame(render);}};// Resize observer to handle canvas resizing\nconst resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const{width,height}=entry.contentRect;canvas.width=width;canvas.height=height;gl.viewport(0,0,width,height);if(speed===0)render();}});resizeObserver.observe(container);const startAnimation=()=>{animationRef.current=requestAnimationFrame(render);};startAnimation();return()=>{resizeObserver.disconnect();if(animationRef.current){cancelAnimationFrame(animationRef.current);}if(glRef.current&&programRef.current){glRef.current.deleteProgram(programRef.current);}};},[colorBack,colorFront,shape,type,pxSize,speed]);return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{display:\"block\",width:\"100%\",height:\"100%\"}})});}addPropertyControls(DitheringShader,{colorBack:{type:ControlType.Color,title:\"Background\",defaultValue:\"#000000\"},colorFront:{type:ControlType.Color,title:\"Foreground\",defaultValue:\"#ffffff\"},shape:{type:ControlType.Enum,title:\"Shape\",options:Object.keys(DitheringShapes),optionTitles:Object.keys(DitheringShapes).map(key=>key.charAt(0).toUpperCase()+key.slice(1)),defaultValue:\"warp\"},type:{type:ControlType.Enum,title:\"Dither Type\",options:Object.keys(DitheringTypes),defaultValue:\"8x8\"},pxSize:{type:ControlType.Number,title:\"Pixel Size\",defaultValue:4,min:1,max:20,step:1},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:1,min:0,max:5,step:.1}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DitheringShader\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"400\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"400\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DitheringShader.map"],"mappings":"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"}