float x = mod(aIndex, 2.0);
float y = floor(aIndex/2.0);
vec2 uv = (vec2(x,y)+0.5)/2.0;
gl_Position = vec4(uv, 0.0, 1.0);
createCanvas(600, 600, WEBGL);
const _gl = this._renderer;
buf0 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf0);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
gl.bindBuffer(gl.ARRAY_BUFFER, null);
buf1 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf1);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
-1,1,2,-2, -2,2,3,-3, -3,3,4,-4, -4,4,5,-5
gl.bindBuffer(gl.ARRAY_BUFFER, null);
sh = createShader(vert, frag);
fbo = createFramebuffer({
width:2, height:2, format:FLOAT, textureFiltering:NEAREST
_gl._setPointUniforms(sh);
gl.bindBuffer(gl.ARRAY_BUFFER, buf0);
sh.enableAttrib(sh.attributes.aIndex, 1);
gl.bindBuffer(gl.ARRAY_BUFFER, buf1);
sh.enableAttrib(sh.attributes.aData, 4);
gl.drawArrays(gl.POINTS, 0, 4);
mainSh = baseMaterialShader().modify({
'vec3 getLocalPosition':`(vec3 p){
vec4 v = texture(uData, uUv);
const uvs = [0.25, 0.25, 0.75, 0.25, 0.25, 0.75, 0.75, 0.75];
mainSh.setUniform("uData", fbo.color);
mainSh.setUniform("uUv", uvs.slice(k*2, (k+1)*2));