|
@@ -697,7 +697,22 @@ export class GLTFLoader implements IGLTFLoader {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private _loadMeshPrimitiveAsync(context: string, name: string, node: INode, mesh: IMesh, primitive: IMeshPrimitive, assign: (babylonMesh: AbstractMesh) => void): Promise<AbstractMesh> {
|
|
|
+ /**
|
|
|
+ * @hidden Define this method to modify the default behavior when loading data for mesh primitives.
|
|
|
+ * @param context The context when loading the asset
|
|
|
+ * @param name The mesh name when loading the asset
|
|
|
+ * @param node The glTF node when loading the asset
|
|
|
+ * @param mesh The glTF mesh when loading the asset
|
|
|
+ * @param primitive The glTF mesh primitive property
|
|
|
+ * @param assign A function called synchronously after parsing the glTF properties
|
|
|
+ * @returns A promise that resolves with the loaded mesh when the load is complete or null if not handled
|
|
|
+ */
|
|
|
+ public _loadMeshPrimitiveAsync(context: string, name: string, node: INode, mesh: IMesh, primitive: IMeshPrimitive, assign: (babylonMesh: AbstractMesh) => void): Promise<AbstractMesh> {
|
|
|
+ const extensionPromise = this._extensionsLoadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign);
|
|
|
+ if (extensionPromise) {
|
|
|
+ return extensionPromise;
|
|
|
+ }
|
|
|
+
|
|
|
this.logOpen(`${context}`);
|
|
|
|
|
|
const canInstance = (node.skin == undefined && !mesh.primitives[0].targets);
|
|
@@ -2166,6 +2181,10 @@ export class GLTFLoader implements IGLTFLoader {
|
|
|
return this._applyExtensions(primitive, "loadVertexData", (extension) => extension._loadVertexDataAsync && extension._loadVertexDataAsync(context, primitive, babylonMesh));
|
|
|
}
|
|
|
|
|
|
+ private _extensionsLoadMeshPrimitiveAsync(context: string, name: string, node: INode, mesh: IMesh, primitive: IMeshPrimitive, assign: (babylonMesh: AbstractMesh) => void): Nullable<Promise<AbstractMesh>> {
|
|
|
+ return this._applyExtensions(primitive, "loadMeshPrimitive", (extension) => extension._loadMeshPrimitiveAsync && extension._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign));
|
|
|
+ }
|
|
|
+
|
|
|
private _extensionsLoadMaterialAsync(context: string, material: IMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<Material>> {
|
|
|
return this._applyExtensions(material, "loadMaterial", (extension) => extension._loadMaterialAsync && extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign));
|
|
|
}
|