Tarek Sherif
BioDigital
// App manages global GL state
var app = PicoGL.createApp(canvas)
.clearColor(0.0, 0.0, 0.0, 1.0);
// Program, VBO, VAO
var program = app.createProgram(vertexShaderSource, fragmentShaderSource);
var positions = app.createVertexBuffer(PicoGL.FLOAT, 2, positionData);
var vertexArray = app.createVertexArray()
.vertexAttributeBuffer(0, positions);
// Draw call manages per-draw state
var drawCall = app.createDrawCall(program, vertexArray);
app.clear();
drawCall.draw();
var uniformsLocation = gl.getUniformBlockIndex(program, "myUniforms");
gl.uniformBlockBinding(program, uniformsLocation, 0);
// HAVE TO KNOW STD140 LAYOUT!!!
var uboData = new Float32Array(24);
uboData.set(viewProjMatrix);
uboData.set(eyePosition, 16);
uboData.set(lightPosition, 20);
var uniformBuffer = gl.createBuffer();
gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, uniformBuffer);
gl.bufferData(gl.UNIFORM_BUFFER, uboData, gl.STATIC_DRAW);
// PicoGL.js handles layout.
var uniformBuffer = app.createUniformBuffer([
PicoGL.FLOAT_MAT4,
PicoGL.FLOAT_VEC4,
PicoGL.FLOAT_VEC4
])
.set(0, viewProjMatrix)
.set(1, eyePosition)
.set(2, lightPosition)
.update();
drawCall.uniformBlock("myUniforms", uniformBuffer);