playcanvas
Version:
PlayCanvas WebGL game engine
48 lines (45 loc) • 1.14 kB
JavaScript
import { BUFFER_GPUDYNAMIC, BUFFER_STREAM, BUFFER_DYNAMIC, BUFFER_STATIC } from '../constants.js';
class WebglBuffer {
destroy(device) {
if (this.bufferId) {
device.gl.deleteBuffer(this.bufferId);
this.bufferId = null;
}
}
get initialized() {
return !!this.bufferId;
}
loseContext() {
this.bufferId = null;
}
unlock(device, usage, target, storage) {
const gl = device.gl;
if (!this.bufferId) {
let glUsage;
switch(usage){
case BUFFER_STATIC:
glUsage = gl.STATIC_DRAW;
break;
case BUFFER_DYNAMIC:
glUsage = gl.DYNAMIC_DRAW;
break;
case BUFFER_STREAM:
glUsage = gl.STREAM_DRAW;
break;
case BUFFER_GPUDYNAMIC:
glUsage = gl.DYNAMIC_COPY;
break;
}
this.bufferId = gl.createBuffer();
gl.bindBuffer(target, this.bufferId);
gl.bufferData(target, storage, glUsage);
} else {
gl.bindBuffer(target, this.bufferId);
gl.bufferSubData(target, 0, storage);
}
}
constructor(){
this.bufferId = null;
}
}
export { WebglBuffer };