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);
}