@openhps/core
Version:
Open Hybrid Positioning System - Core component
54 lines (51 loc) • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.WebGLObjects = WebGLObjects;
function WebGLObjects(gl, geometries, attributes, info) {
let updateMap = new WeakMap();
function update(object) {
const frame = info.render.frame;
const geometry = object.geometry;
const buffergeometry = geometries.get(object, geometry);
// Update once per frame
if (updateMap.get(buffergeometry) !== frame) {
geometries.update(buffergeometry);
updateMap.set(buffergeometry, frame);
}
if (object.isInstancedMesh) {
if (object.hasEventListener('dispose', onInstancedMeshDispose) === false) {
object.addEventListener('dispose', onInstancedMeshDispose);
}
if (updateMap.get(object) !== frame) {
attributes.update(object.instanceMatrix, gl.ARRAY_BUFFER);
if (object.instanceColor !== null) {
attributes.update(object.instanceColor, gl.ARRAY_BUFFER);
}
updateMap.set(object, frame);
}
}
if (object.isSkinnedMesh) {
const skeleton = object.skeleton;
if (updateMap.get(skeleton) !== frame) {
skeleton.update();
updateMap.set(skeleton, frame);
}
}
return buffergeometry;
}
function dispose() {
updateMap = new WeakMap();
}
function onInstancedMeshDispose(event) {
const instancedMesh = event.target;
instancedMesh.removeEventListener('dispose', onInstancedMeshDispose);
attributes.remove(instancedMesh.instanceMatrix);
if (instancedMesh.instanceColor !== null) attributes.remove(instancedMesh.instanceColor);
}
return {
update: update,
dispose: dispose
};
}