- three.js场景中每个实体都会被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);
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, 34962);
if (object.instanceColor !== null) {
attributes.update(object.instanceColor, 34962);
}
}
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,
};
}