Skip to content

Commit fe5a1fd

Browse files
author
Mike Bond
committed
Fix dynamic loading of materials in glTF loader
1 parent b9382ac commit fe5a1fd

13 files changed

+66
-60
lines changed

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_anisotropy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ export class KHR_materials_anisotropy implements IGLTFLoaderExtension {
6565
// eslint-disable-next-line no-restricted-syntax
6666
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
6767
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsAnisotropy>(context, material, this.name, async (extensionContext, extension) => {
68+
const promises = new Array<Promise<any>>();
69+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
6870
if (useOpenPBR) {
6971
const mod = await import("core/Materials/PBR/openPbrMaterial");
7072
PBRMaterialClass = mod.OpenPBRMaterial;
7173
} else {
7274
const mod = await import("core/Materials/PBR/pbrMaterial");
7375
PBRMaterialClass = mod.PBRMaterial;
7476
}
75-
const promises = new Array<Promise<any>>();
76-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7777
promises.push(this._loadIridescencePropertiesAsync(extensionContext, extension, babylonMaterial));
7878
await Promise.all(promises);
7979
});

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_clearcoat.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ export class KHR_materials_clearcoat implements IGLTFLoaderExtension {
6767
// eslint-disable-next-line no-restricted-syntax
6868
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
6969
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsClearcoat>(context, material, this.name, async (extensionContext, extension) => {
70+
const promises = new Array<Promise<any>>();
71+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7072
if (useOpenPBR) {
7173
const mod = await import("core/Materials/PBR/openPbrMaterial");
7274
PBRMaterialClass = mod.OpenPBRMaterial;
@@ -77,8 +79,6 @@ export class KHR_materials_clearcoat implements IGLTFLoaderExtension {
7779
if (!(babylonMaterial instanceof PBRMaterialClass)) {
7880
throw new Error(`${context}: Material type not supported`);
7981
}
80-
const promises = new Array<Promise<any>>();
81-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
8282
promises.push(this._loadClearCoatPropertiesAsync(extensionContext, extension, babylonMaterial, useOpenPBR));
8383
await Promise.all(promises);
8484
});

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,15 @@ export class KHR_materials_diffuse_transmission implements IGLTFLoaderExtension
7171
// eslint-disable-next-line no-restricted-syntax
7272
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
7373
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsDiffuseTransmission>(context, material, this.name, async (extensionContext, extension) => {
74+
const promises = new Array<Promise<any>>();
75+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7476
if (useOpenPBR) {
7577
const mod = await import("core/Materials/PBR/openPbrMaterial");
7678
PBRMaterialClass = mod.OpenPBRMaterial;
7779
} else {
7880
const mod = await import("core/Materials/PBR/pbrMaterial");
7981
PBRMaterialClass = mod.PBRMaterial;
8082
}
81-
const promises = new Array<Promise<any>>();
82-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
8383
promises.push(this._loadTranslucentPropertiesAsync(extensionContext, material, babylonMaterial, extension));
8484
return await Promise.all(promises).then(() => {});
8585
});

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_dispersion.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@ export class KHR_materials_dispersion implements IGLTFLoaderExtension {
6666
// eslint-disable-next-line no-restricted-syntax
6767
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: false): Nullable<Promise<void>> {
6868
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsDispersion>(context, material, this.name, async (extensionContext, extension) => {
69+
const promises = new Array<Promise<any>>();
70+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
6971
if (useOpenPBR) {
7072
const mod = await import("core/Materials/PBR/openPbrMaterial");
7173
PBRMaterialClass = mod.OpenPBRMaterial;
7274
} else {
7375
const mod = await import("core/Materials/PBR/pbrMaterial");
7476
PBRMaterialClass = mod.PBRMaterial;
7577
}
76-
const promises = new Array<Promise<any>>();
77-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7878
promises.push(this._loadDispersionPropertiesAsync(extensionContext, material, babylonMaterial, extension, useOpenPBR));
7979
// eslint-disable-next-line github/no-then
8080
return await Promise.all(promises).then(() => {});

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_emissive_strength.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,16 @@ export class KHR_materials_emissive_strength implements IGLTFLoaderExtension {
6565
// eslint-disable-next-line no-restricted-syntax
6666
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
6767
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsEmissiveStrength>(context, material, this.name, async (extensionContext, extension) => {
68+
await this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial);
6869
if (useOpenPBR) {
6970
const mod = await import("core/Materials/PBR/openPbrMaterial");
7071
PBRMaterialClass = mod.OpenPBRMaterial;
7172
} else {
7273
const mod = await import("core/Materials/PBR/pbrMaterial");
7374
PBRMaterialClass = mod.PBRMaterial;
7475
}
75-
// eslint-disable-next-line github/no-then
76-
return await this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial).then(() => {
77-
this._loadEmissiveProperties(extensionContext, extension, babylonMaterial);
78-
});
76+
this._loadEmissiveProperties(extensionContext, extension, babylonMaterial);
77+
return await Promise.resolve();
7978
});
8079
}
8180

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_ior.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,15 @@ export class KHR_materials_ior implements IGLTFLoaderExtension {
7070
// eslint-disable-next-line no-restricted-syntax
7171
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
7272
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsIor>(context, material, this.name, async (extensionContext, extension) => {
73+
const promises = new Array<Promise<any>>();
74+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7375
if (useOpenPBR) {
7476
const mod = await import("core/Materials/PBR/openPbrMaterial");
7577
PBRMaterialClass = mod.OpenPBRMaterial;
7678
} else {
7779
const mod = await import("core/Materials/PBR/pbrMaterial");
7880
PBRMaterialClass = mod.PBRMaterial;
7981
}
80-
const promises = new Array<Promise<any>>();
81-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
8282
promises.push(this._loadIorPropertiesAsync(extensionContext, extension, babylonMaterial, useOpenPBR));
8383
// eslint-disable-next-line github/no-then
8484
return await Promise.all(promises).then(() => {});

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_iridescence.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@ export class KHR_materials_iridescence implements IGLTFLoaderExtension {
6666
// eslint-disable-next-line no-restricted-syntax
6767
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
6868
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsIridescence>(context, material, this.name, async (extensionContext, extension) => {
69+
const promises = new Array<Promise<any>>();
70+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
6971
if (useOpenPBR) {
7072
const mod = await import("core/Materials/PBR/openPbrMaterial");
7173
PBRMaterialClass = mod.OpenPBRMaterial;
7274
} else {
7375
const mod = await import("core/Materials/PBR/pbrMaterial");
7476
PBRMaterialClass = mod.PBRMaterial;
7577
}
76-
const promises = new Array<Promise<any>>();
77-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7878
promises.push(this._loadIridescencePropertiesAsync(extensionContext, extension, babylonMaterial, useOpenPBR));
7979
// eslint-disable-next-line github/no-then
8080
return await Promise.all(promises).then(() => {});

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_sheen.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ export class KHR_materials_sheen implements IGLTFLoaderExtension {
6868
// eslint-disable-next-line no-restricted-syntax
6969
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
7070
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsSheen>(context, material, this.name, async (extensionContext, extension) => {
71+
const promises = new Array<Promise<any>>();
72+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7173
if (useOpenPBR) {
7274
const mod = await import("core/Materials/PBR/openPbrMaterial");
7375
PBRMaterialClass = mod.OpenPBRMaterial;
7476
} else {
7577
const mod = await import("core/Materials/PBR/pbrMaterial");
7678
PBRMaterialClass = mod.PBRMaterial;
7779
}
78-
const promises = new Array<Promise<any>>();
79-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
8080
promises.push(this._loadSheenPropertiesAsync(extensionContext, extension, babylonMaterial, useOpenPBR));
8181
// eslint-disable-next-line github/no-then
8282
return await Promise.all(promises).then(() => {});

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_specular.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,15 @@ export class KHR_materials_specular implements IGLTFLoaderExtension {
6767
// eslint-disable-next-line no-restricted-syntax
6868
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
6969
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsSpecular>(context, material, this.name, async (extensionContext, extension) => {
70+
const promises = new Array<Promise<any>>();
71+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7072
if (useOpenPBR) {
7173
const mod = await import("core/Materials/PBR/openPbrMaterial");
7274
PBRMaterialClass = mod.OpenPBRMaterial;
7375
} else {
7476
const mod = await import("core/Materials/PBR/pbrMaterial");
7577
PBRMaterialClass = mod.PBRMaterial;
7678
}
77-
const promises = new Array<Promise<any>>();
78-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
7979
promises.push(this._loadSpecularPropertiesAsync(extensionContext, extension, babylonMaterial, useOpenPBR));
8080
// Handle the EXT_materials_specular_edge_color sub-extension
8181
// https://github.com/KhronosGroup/glTF/blob/2a1111b88f052cbd3e2d82abb9faee56e7494904/extensions/2.0/Vendor/EXT_materials_specular_edge_color/README.md
@@ -99,22 +99,22 @@ export class KHR_materials_specular implements IGLTFLoaderExtension {
9999

100100
const promises = new Array<Promise<any>>();
101101

102-
if (babylonMaterial instanceof OpenPBRMaterial) {
102+
if (useOpenPBR) {
103103
if (properties.specularFactor !== undefined) {
104-
babylonMaterial.specularWeight = properties.specularFactor;
104+
(babylonMaterial as OpenPBRMaterial).specularWeight = properties.specularFactor;
105105
}
106106

107107
if (properties.specularColorFactor !== undefined) {
108-
babylonMaterial.specularColor = Color3.FromArray(properties.specularColorFactor);
108+
(babylonMaterial as OpenPBRMaterial).specularColor = Color3.FromArray(properties.specularColorFactor);
109109
}
110110

111111
if (properties.specularTexture) {
112112
(properties.specularTexture as ITextureInfo).nonColorData = true;
113113
promises.push(
114114
this._loader.loadTextureInfoAsync(`${context}/specularTexture`, properties.specularTexture, (texture) => {
115115
texture.name = `${babylonMaterial.name} (Specular)`;
116-
babylonMaterial.specularWeightTexture = texture;
117-
babylonMaterial.useSpecularWeightFromTextureAlpha = true;
116+
(babylonMaterial as OpenPBRMaterial).specularWeightTexture = texture;
117+
(babylonMaterial as OpenPBRMaterial).useSpecularWeightFromTextureAlpha = true;
118118
})
119119
);
120120
}
@@ -123,26 +123,26 @@ export class KHR_materials_specular implements IGLTFLoaderExtension {
123123
promises.push(
124124
this._loader.loadTextureInfoAsync(`${context}/specularColorTexture`, properties.specularColorTexture, (texture) => {
125125
texture.name = `${babylonMaterial.name} (Specular Color)`;
126-
babylonMaterial.specularColorTexture = texture;
126+
(babylonMaterial as OpenPBRMaterial).specularColorTexture = texture;
127127
})
128128
);
129129
}
130130
} else {
131131
if (properties.specularFactor !== undefined) {
132-
babylonMaterial.metallicF0Factor = properties.specularFactor;
132+
(babylonMaterial as PBRMaterial).metallicF0Factor = properties.specularFactor;
133133
}
134134

135135
if (properties.specularColorFactor !== undefined) {
136-
babylonMaterial.metallicReflectanceColor = Color3.FromArray(properties.specularColorFactor);
136+
(babylonMaterial as PBRMaterial).metallicReflectanceColor = Color3.FromArray(properties.specularColorFactor);
137137
}
138138

139139
if (properties.specularTexture) {
140140
(properties.specularTexture as ITextureInfo).nonColorData = true;
141141
promises.push(
142142
this._loader.loadTextureInfoAsync(`${context}/specularTexture`, properties.specularTexture, (texture) => {
143143
texture.name = `${babylonMaterial.name} (Specular)`;
144-
babylonMaterial.metallicReflectanceTexture = texture;
145-
babylonMaterial.useOnlyMetallicFromMetallicReflectanceTexture = true;
144+
(babylonMaterial as PBRMaterial).metallicReflectanceTexture = texture;
145+
(babylonMaterial as PBRMaterial).useOnlyMetallicFromMetallicReflectanceTexture = true;
146146
})
147147
);
148148
}
@@ -151,7 +151,7 @@ export class KHR_materials_specular implements IGLTFLoaderExtension {
151151
promises.push(
152152
this._loader.loadTextureInfoAsync(`${context}/specularColorTexture`, properties.specularColorTexture, (texture) => {
153153
texture.name = `${babylonMaterial.name} (Specular Color)`;
154-
babylonMaterial.reflectanceTexture = texture;
154+
(babylonMaterial as PBRMaterial).reflectionTexture = texture;
155155
})
156156
);
157157
}

packages/dev/loaders/src/glTF/2.0/Extensions/KHR_materials_transmission.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,15 +371,15 @@ export class KHR_materials_transmission implements IGLTFLoaderExtension {
371371
// eslint-disable-next-line no-restricted-syntax
372372
public loadMaterialPropertiesAsync(context: string, material: IMaterial, babylonMaterial: Material, useOpenPBR: boolean = false): Nullable<Promise<void>> {
373373
return GLTFLoader.LoadExtensionAsync<IKHRMaterialsTransmission>(context, material, this.name, async (extensionContext, extension) => {
374+
const promises = new Array<Promise<any>>();
375+
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
374376
if (useOpenPBR) {
375377
const mod = await import("core/Materials/PBR/openPbrMaterial");
376378
PBRMaterialClass = mod.OpenPBRMaterial;
377379
} else {
378380
const mod = await import("core/Materials/PBR/pbrMaterial");
379381
PBRMaterialClass = mod.PBRMaterial;
380382
}
381-
const promises = new Array<Promise<any>>();
382-
promises.push(this._loader.loadMaterialPropertiesAsync(context, material, babylonMaterial));
383383
promises.push(this._loadTransparentPropertiesAsync(extensionContext, material, babylonMaterial, extension, useOpenPBR));
384384
// eslint-disable-next-line github/no-then
385385
return await Promise.all(promises).then(() => {});

0 commit comments

Comments
 (0)