62 lines
1.6 KiB
TypeScript
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);
|
|
}
|