function initializeShader()

in src/Layer/NativeMetaballs/NativeMetaballs.js [200:253]


      function initializeShader() {

        const vertexShaderSource = compileShader(vertexShader, gl.VERTEX_SHADER);
        const fragmentShaderSource = compileShader(fragmentShader, gl.FRAGMENT_SHADER);

        program = gl.createProgram();
        gl.attachShader(program, vertexShaderSource);
        gl.attachShader(program, fragmentShaderSource);
        gl.linkProgram(program);
        gl.useProgram(program);

        const vertexData = new Float32Array([
          -1.0, 1.0,
          -1.0, -1.0,
          1.0, 1.0,
          1.0, -1.0,
        ]);
        const vertexDataBuffer = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, vertexDataBuffer);
        gl.bufferData(gl.ARRAY_BUFFER, vertexData, gl.STATIC_DRAW);

        var positionHandle = getAttribLocation(program, 'position');

        gl.enableVertexAttribArray(positionHandle);
        gl.vertexAttribPointer(positionHandle,
          2,
          gl.FLOAT,
          gl.FALSE,
          2 * 4,
          0
        );

        metaballsObjectsHandle = getUniformLocation(program, 'metaballs');

        colorTexture = gl.createTexture();
        gl.bindTexture(gl.TEXTURE_2D, colorTexture);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, config.texture);
        gl.generateMipmap(gl.TEXTURE_2D);
        gl.bindTexture(gl.TEXTURE_2D, null);
        gl.activeTexture(gl.TEXTURE0);
        gl.bindTexture(gl.TEXTURE_2D, colorTexture);
        gl.uniform1i(gl.getUniformLocation(program, 'uColorSampler'), 0);

        resolutionUniform = getUniformLocation(program, 'uResolution');
        gl.uniform2f(resolutionUniform, gl.canvas.width, gl.canvas.height);

        gl.uniform1f(gl.getUniformLocation(program, 'uBlur'), blur);
        gl.uniform1f(gl.getUniformLocation(program, 'uFat'), fat);
        gl.uniform1f(gl.getUniformLocation(program, 'uRing'), ring);
      }