import { gl, ext } from './Renderer.js' export class Mesh { static #vaos = [] static #vbos = [] #vertexCount #count #id #indicies constructor(vertexCount) { this.#id = ext.createVertexArrayOES() ext.bindVertexArrayOES(this.#id) Mesh.#vaos.push(this.#id) this.#vertexCount = vertexCount this.#count = 0 this.#indicies = 0 } store(data, dim) { let id = gl.createBuffer() Mesh.#vbos.push(id) gl.bindBuffer(gl.ARRAY_BUFFER, id) gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW) gl.vertexAttribPointer(this.#count, dim, gl.FLOAT, gl.FALSE, 0, 0) gl.enableVertexAttribArray(this.#count) this.#count++; return this } indicies(data) { let id = gl.createBuffer() Mesh.#vbos.push(id) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, id) gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), gl.STATIC_DRAW) this.#indicies = data.length return this } finish() { this.unbind() return this } bind() { ext.bindVertexArrayOES(this.#id) for(let i = 0; i < this.#count; i++) { gl.enableVertexAttribArray(i) } } unbind() { ext.bindVertexArrayOES(null) for(let i = 0; i < this.#count; i++) { gl.disableVertexAttribArray(i) } } draw() { if(this.#indicies > 0) { gl.drawElements(gl.TRIANGLES, this.#indicies, gl.UNSIGNED_SHORT, 0) } else { gl.drawArrays(gl.TRIANGLES, 0, this.#vertexCount) } } }