webgl/src/client/buffers.ts

62 lines
1.6 KiB
TypeScript

/**
* init buffers to create a square
* @param {any} gl the web gl context
* @param {Array<number>} positions the position buffer to be loaded
* @param {Array<number>} indices the index buffer to be loaded
* @param {Array<number>} normals the normal buffer to be loaded
* @param {Array<number>} uvs the texture buffer to be loaded
* @return {any} the buffers
*/
export function initBuffers(
gl: any,
positions: Array<number>,
indices: Array<number>,
normals: Array<number>,
uvs: Array<number>) {
const positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array(positions),
gl.STATIC_DRAW);
const normalBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, normalBuffer);
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array(normals),
gl.STATIC_DRAW);
const indexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
new Uint16Array(indices), gl.STATIC_DRAW);
// Now send the element array to GL
const uvBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, uvBuffer);
gl.bufferData(gl.ARRAY_BUFFER,
new Float32Array(uvs),
gl.STATIC_DRAW);
return {
positions: positionBuffer,
indices: indexBuffer,
normals: normalBuffer,
uvs: uvBuffer,
};
}
/**
* init buffers to create a square
* @param {any} gl the web gl context
* @param {any} buffers the buffers to delete
*/
export function deleteBuffers(gl: any, buffers: any) {
gl.deleteBuffer(buffers.uvs);
gl.deleteBuffer(buffers.positions);
gl.deleteBuffer(buffers.normals);
gl.deleteBuffer(buffers.indices);
}