webgl/public/gl/core/Mesh.js
2023-01-19 21:21:17 -05:00

69 lines
No EOL
1.6 KiB
JavaScript

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)
}
}
}