webgl/public/gl/core/Material.js
Tyler Murphy 30cf48cd70 cube
2023-01-18 22:43:02 -05:00

46 lines
No EOL
1.2 KiB
JavaScript

export class Material {
static #id = 0
constructor(shader, data = {}) {
this.shader = shader
this.data = data
this.id = Material.#id
Material.#id++
}
set(data) {
this.data = data
return this
}
bind() {
this.shader.start()
for (const key in this.data) {
const value = this.data[key]
if (typeof value == 'number' && !isNaN(x)) {
if (Number.isInteger(value)) {
this.shader.loadInt(key, value)
} else {
this.shader.loadFloat(key, value)
}
} else if (typeof value == 'boolean') {
this.shader.loadBool(key, value)
} else if (typeof value == 'object') {
const name = value.constructor.name
if (name == 'Vec2') {
this.shader.loadVec2(key, value)
} else if (name == 'Vec3') {
this.shader.loadVec3(key,value)
} else if (name == 'Mat4') {
this.shader.loadMat4(key, value)
}
}
}
}
unbind() {
this.shader.stop()
}
}