loadGeometries method
Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry
Creates BufferGeometries from primitives.
@param {Array<GLTF.Primitive>} primitives @return {Promise<Array
Implementation
Future<List<BufferGeometry>> loadGeometries(primitives) async {
final parser = this;
final extensions = this.extensions;
final cache = primitiveCache;
createDracoPrimitive(primitive) async {
final geometry = await extensions[gltfExtensions["KHR_DRACO_MESH_COMPRESSION"]]
.decodePrimitive(primitive, parser);
return await addPrimitiveAttributes(geometry, primitive, parser);
}
List<BufferGeometry> pending = [];
for (int i = 0, il = primitives.length; i < il; i++) {
Map<String, dynamic> primitive = primitives[i];
final cacheKey = createPrimitiveKey(primitive);
// See if we've already created this geometry
final cached = cache[cacheKey];
if (cached != null) {
// Use the cached geometry if it exists
pending.add(cached.promise);
}
else {
dynamic geometryPromise;
if (primitive["extensions"] != null && primitive["extensions"][gltfExtensions["KHR_DRACO_MESH_COMPRESSION"]] != null) {
// Use DRACO geometry if available
geometryPromise = await createDracoPrimitive(primitive);
}
else {
// Otherwise create a geometry
geometryPromise = await addPrimitiveAttributes(BufferGeometry(), primitive, parser);
}
// Cache this geometry
cache[cacheKey] = {"primitive": primitive, "promise": geometryPromise};
pending.add(geometryPromise);
}
}
return pending;
}