UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

48 lines (45 loc) 1.14 kB
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 };