Spaces:
Running
Running
File size: 1,234 Bytes
2b7aae2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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);
}
attributes.update(object.instanceMatrix, gl.ARRAY_BUFFER);
if (object.instanceColor !== null) {
attributes.update(object.instanceColor, gl.ARRAY_BUFFER);
}
}
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,
};
}
export { WebGLObjects };
|