@babylonjs/core 5.1.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/Audio/audioSceneComponent.d.ts +2 -0
  2. package/Audio/audioSceneComponent.js +9 -7
  3. package/Audio/audioSceneComponent.js.map +1 -1
  4. package/Cameras/arcRotateCamera.d.ts +5 -0
  5. package/Cameras/arcRotateCamera.js +5 -0
  6. package/Cameras/arcRotateCamera.js.map +1 -1
  7. package/Cameras/camera.d.ts +5 -1
  8. package/Cameras/camera.js +7 -7
  9. package/Cameras/camera.js.map +1 -1
  10. package/Debug/debugLayer.d.ts +5 -0
  11. package/Debug/debugLayer.js +24 -0
  12. package/Debug/debugLayer.js.map +1 -1
  13. package/Engines/Processors/shaderCodeCursor.js +5 -0
  14. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  15. package/Engines/constants.d.ts +25 -1
  16. package/Engines/constants.js +25 -1
  17. package/Engines/constants.js.map +1 -1
  18. package/Engines/engine.d.ts +1 -1
  19. package/Engines/engine.js +1 -1
  20. package/Engines/engine.js.map +1 -1
  21. package/Engines/nativeEngine.d.ts +1 -1
  22. package/Engines/nativeEngine.js +7 -8
  23. package/Engines/nativeEngine.js.map +1 -1
  24. package/Engines/thinEngine.js +2 -2
  25. package/Engines/thinEngine.js.map +1 -1
  26. package/Engines/webgpuEngine.d.ts +4 -0
  27. package/Engines/webgpuEngine.js +2 -0
  28. package/Engines/webgpuEngine.js.map +1 -1
  29. package/Gizmos/boundingBoxGizmo.js +6 -6
  30. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  31. package/Gizmos/gizmo.d.ts +5 -0
  32. package/Gizmos/gizmo.js +8 -2
  33. package/Gizmos/gizmo.js.map +1 -1
  34. package/Inputs/scene.inputManager.js +7 -1
  35. package/Inputs/scene.inputManager.js.map +1 -1
  36. package/Lights/Shadows/shadowGenerator.d.ts +5 -0
  37. package/Lights/Shadows/shadowGenerator.js +20 -2
  38. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  39. package/Loading/Plugins/babylonFileLoader.js +8 -6
  40. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  41. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +4 -0
  42. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +19 -1
  43. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  44. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +54 -0
  45. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +135 -0
  46. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -0
  47. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +4 -0
  48. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +42 -24
  49. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  50. package/Materials/PBR/index.d.ts +1 -0
  51. package/Materials/PBR/index.js +1 -0
  52. package/Materials/PBR/index.js.map +1 -1
  53. package/Materials/PBR/pbrBaseMaterial.d.ts +5 -0
  54. package/Materials/PBR/pbrBaseMaterial.js +2 -0
  55. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  56. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +102 -0
  57. package/Materials/PBR/pbrIridescenceConfiguration.js +257 -0
  58. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -0
  59. package/Materials/Textures/Loaders/ktxTextureLoader.js +31 -0
  60. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  61. package/Materials/Textures/videoTexture.js +12 -12
  62. package/Materials/Textures/videoTexture.js.map +1 -1
  63. package/Materials/materialFlags.d.ts +6 -0
  64. package/Materials/materialFlags.js +18 -0
  65. package/Materials/materialFlags.js.map +1 -1
  66. package/Materials/materialPluginFactoryExport.d.ts +6 -0
  67. package/Materials/materialPluginFactoryExport.js +12 -0
  68. package/Materials/materialPluginFactoryExport.js.map +1 -1
  69. package/Meshes/abstractMesh.d.ts +1 -1
  70. package/Meshes/abstractMesh.js +5 -2
  71. package/Meshes/abstractMesh.js.map +1 -1
  72. package/Meshes/mesh.d.ts +2 -2
  73. package/Meshes/mesh.js +11 -3
  74. package/Meshes/mesh.js.map +1 -1
  75. package/Misc/khronosTextureContainer.js +1 -1
  76. package/Misc/khronosTextureContainer.js.map +1 -1
  77. package/Physics/physicsImpostor.js +1 -1
  78. package/Physics/physicsImpostor.js.map +1 -1
  79. package/Rendering/boundingBoxRenderer.js +4 -4
  80. package/Rendering/boundingBoxRenderer.js.map +1 -1
  81. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +1 -1
  82. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
  83. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  84. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  85. package/Shaders/ShadersInclude/lightFragment.js +1 -1
  86. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  87. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  88. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  89. package/Shaders/ShadersInclude/pbrBlockIridescence.d.ts +5 -0
  90. package/Shaders/ShadersInclude/pbrBlockIridescence.js +9 -0
  91. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -0
  92. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  93. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  94. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  95. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  96. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  97. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  98. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -1
  99. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  100. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  101. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  102. package/Shaders/pbr.fragment.d.ts +1 -0
  103. package/Shaders/pbr.fragment.js +2 -1
  104. package/Shaders/pbr.fragment.js.map +1 -1
  105. package/Shaders/pbr.vertex.js +1 -1
  106. package/Shaders/pbr.vertex.js.map +1 -1
  107. package/XR/features/WebXRImageTracking.d.ts +0 -5
  108. package/XR/features/WebXRImageTracking.js +5 -8
  109. package/XR/features/WebXRImageTracking.js.map +1 -1
  110. package/XR/native/nativeXRFrame.d.ts +2 -1
  111. package/XR/native/nativeXRFrame.js +5 -1
  112. package/XR/native/nativeXRFrame.js.map +1 -1
  113. package/package.json +1 -1
  114. package/scene.d.ts +4 -0
  115. package/scene.js +4 -0
  116. package/scene.js.map +1 -1
@@ -0,0 +1,102 @@
1
+ import type { Nullable } from "../../types";
2
+ import type { BaseTexture } from "../../Materials/Textures/baseTexture";
3
+ import type { UniformBuffer } from "../../Materials/uniformBuffer";
4
+ import type { IAnimatable } from "../../Animations/animatable.interface";
5
+ import type { EffectFallbacks } from "../effectFallbacks";
6
+ import type { SubMesh } from "../../Meshes/subMesh";
7
+ import { MaterialPluginBase } from "../materialPluginBase";
8
+ import { MaterialDefines } from "../materialDefines";
9
+ declare type Engine = import("../../Engines/engine").Engine;
10
+ declare type Scene = import("../../scene").Scene;
11
+ declare type PBRBaseMaterial = import("./pbrBaseMaterial").PBRBaseMaterial;
12
+ /**
13
+ * @hidden
14
+ */
15
+ export declare class MaterialIridescenceDefines extends MaterialDefines {
16
+ IRIDESCENCE: boolean;
17
+ IRIDESCENCE_TEXTURE: boolean;
18
+ IRIDESCENCE_TEXTUREDIRECTUV: number;
19
+ IRIDESCENCE_THICKNESS_TEXTURE: boolean;
20
+ IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV: number;
21
+ IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE: boolean;
22
+ }
23
+ /**
24
+ * Plugin that implements the iridescence (thin film) component of the PBR material
25
+ */
26
+ export declare class PBRIridescenceConfiguration extends MaterialPluginBase {
27
+ protected _material: PBRBaseMaterial;
28
+ /**
29
+ * The default minimum thickness of the thin-film layer given in nanometers (nm).
30
+ * Defaults to 100 nm.
31
+ * @hidden
32
+ */
33
+ static readonly _DefaultMinimumThickness = 100;
34
+ /**
35
+ * The default maximum thickness of the thin-film layer given in nanometers (nm).
36
+ * Defaults to 400 nm.
37
+ * @hidden
38
+ */
39
+ static readonly _DefaultMaximumThickness = 400;
40
+ /**
41
+ * The default index of refraction of the thin-film layer.
42
+ * Defaults to 1.3
43
+ * @hidden
44
+ */
45
+ static readonly _DefaultIndexOfRefraction = 1.3;
46
+ private _isEnabled;
47
+ /**
48
+ * Defines if the iridescence is enabled in the material.
49
+ */
50
+ isEnabled: boolean;
51
+ /**
52
+ * Defines the iridescence layer strength (between 0 and 1) it defaults to 1.
53
+ */
54
+ intensity: number;
55
+ /**
56
+ * Defines the minimum thickness of the thin-film layer given in nanometers (nm).
57
+ */
58
+ minimumThickness: number;
59
+ /**
60
+ * Defines the maximum thickness of the thin-film layer given in nanometers (nm). This will be the thickness used if not thickness texture has been set.
61
+ */
62
+ maximumThickness: number;
63
+ /**
64
+ * Defines the maximum thickness of the thin-film layer given in nanometers (nm).
65
+ */
66
+ indexOfRefraction: number;
67
+ private _texture;
68
+ /**
69
+ * Stores the iridescence intensity in a texture (red channel)
70
+ */
71
+ texture: Nullable<BaseTexture>;
72
+ private _thicknessTexture;
73
+ /**
74
+ * Stores the iridescence thickness in a texture (green channel)
75
+ */
76
+ thicknessTexture: Nullable<BaseTexture>;
77
+ /** @hidden */
78
+ private _internalMarkAllSubMeshesAsTexturesDirty;
79
+ /** @hidden */
80
+ _markAllSubMeshesAsTexturesDirty(): void;
81
+ constructor(material: PBRBaseMaterial, addToPluginList?: boolean);
82
+ isReadyForSubMesh(defines: MaterialIridescenceDefines, scene: Scene): boolean;
83
+ prepareDefines(defines: MaterialIridescenceDefines, scene: Scene): void;
84
+ bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void;
85
+ hasTexture(texture: BaseTexture): boolean;
86
+ getActiveTextures(activeTextures: BaseTexture[]): void;
87
+ getAnimatables(animatables: IAnimatable[]): void;
88
+ dispose(forceDisposeTextures?: boolean): void;
89
+ getClassName(): string;
90
+ addFallbacks(defines: MaterialIridescenceDefines, fallbacks: EffectFallbacks, currentRank: number): number;
91
+ getSamplers(samplers: string[]): void;
92
+ getUniforms(): {
93
+ ubo?: Array<{
94
+ name: string;
95
+ size: number;
96
+ type: string;
97
+ }>;
98
+ vertex?: string;
99
+ fragment?: string;
100
+ };
101
+ }
102
+ export {};
@@ -0,0 +1,257 @@
1
+ import { __decorate, __extends } from "tslib";
2
+ import { serialize, serializeAsTexture, expandToProperty } from "../../Misc/decorators.js";
3
+ import { MaterialFlags } from "../materialFlags.js";
4
+ import { MaterialHelper } from "../../Materials/materialHelper.js";
5
+
6
+ import { MaterialPluginBase } from "../materialPluginBase.js";
7
+ import { MaterialDefines } from "../materialDefines.js";
8
+ /**
9
+ * @hidden
10
+ */
11
+ var MaterialIridescenceDefines = /** @class */ (function (_super) {
12
+ __extends(MaterialIridescenceDefines, _super);
13
+ function MaterialIridescenceDefines() {
14
+ var _this = _super !== null && _super.apply(this, arguments) || this;
15
+ _this.IRIDESCENCE = false;
16
+ _this.IRIDESCENCE_TEXTURE = false;
17
+ _this.IRIDESCENCE_TEXTUREDIRECTUV = 0;
18
+ _this.IRIDESCENCE_THICKNESS_TEXTURE = false;
19
+ _this.IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV = 0;
20
+ _this.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE = false;
21
+ return _this;
22
+ }
23
+ return MaterialIridescenceDefines;
24
+ }(MaterialDefines));
25
+ export { MaterialIridescenceDefines };
26
+ /**
27
+ * Plugin that implements the iridescence (thin film) component of the PBR material
28
+ */
29
+ var PBRIridescenceConfiguration = /** @class */ (function (_super) {
30
+ __extends(PBRIridescenceConfiguration, _super);
31
+ function PBRIridescenceConfiguration(material, addToPluginList) {
32
+ if (addToPluginList === void 0) { addToPluginList = true; }
33
+ var _this = _super.call(this, material, "PBRIridescence", 110, new MaterialIridescenceDefines(), addToPluginList) || this;
34
+ _this._isEnabled = false;
35
+ /**
36
+ * Defines if the iridescence is enabled in the material.
37
+ */
38
+ _this.isEnabled = false;
39
+ /**
40
+ * Defines the iridescence layer strength (between 0 and 1) it defaults to 1.
41
+ */
42
+ _this.intensity = 1;
43
+ /**
44
+ * Defines the minimum thickness of the thin-film layer given in nanometers (nm).
45
+ */
46
+ _this.minimumThickness = PBRIridescenceConfiguration._DefaultMinimumThickness;
47
+ /**
48
+ * Defines the maximum thickness of the thin-film layer given in nanometers (nm). This will be the thickness used if not thickness texture has been set.
49
+ */
50
+ _this.maximumThickness = PBRIridescenceConfiguration._DefaultMaximumThickness;
51
+ /**
52
+ * Defines the maximum thickness of the thin-film layer given in nanometers (nm).
53
+ */
54
+ _this.indexOfRefraction = PBRIridescenceConfiguration._DefaultIndexOfRefraction;
55
+ _this._texture = null;
56
+ /**
57
+ * Stores the iridescence intensity in a texture (red channel)
58
+ */
59
+ _this.texture = null;
60
+ _this._thicknessTexture = null;
61
+ /**
62
+ * Stores the iridescence thickness in a texture (green channel)
63
+ */
64
+ _this.thicknessTexture = null;
65
+ _this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[1];
66
+ return _this;
67
+ }
68
+ /** @hidden */
69
+ PBRIridescenceConfiguration.prototype._markAllSubMeshesAsTexturesDirty = function () {
70
+ this._enable(this._isEnabled);
71
+ this._internalMarkAllSubMeshesAsTexturesDirty();
72
+ };
73
+ PBRIridescenceConfiguration.prototype.isReadyForSubMesh = function (defines, scene) {
74
+ if (!this._isEnabled) {
75
+ return true;
76
+ }
77
+ if (defines._areTexturesDirty) {
78
+ if (scene.texturesEnabled) {
79
+ if (this._texture && MaterialFlags.IridescenceTextureEnabled) {
80
+ if (!this._texture.isReadyOrNotBlocking()) {
81
+ return false;
82
+ }
83
+ }
84
+ if (this._thicknessTexture && MaterialFlags.IridescenceTextureEnabled) {
85
+ if (!this._thicknessTexture.isReadyOrNotBlocking()) {
86
+ return false;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return true;
92
+ };
93
+ PBRIridescenceConfiguration.prototype.prepareDefines = function (defines, scene) {
94
+ var _a;
95
+ if (this._isEnabled) {
96
+ defines.IRIDESCENCE = true;
97
+ defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE =
98
+ this._texture !== null && this._texture._texture === ((_a = this._thicknessTexture) === null || _a === void 0 ? void 0 : _a._texture) && this._texture.checkTransformsAreIdentical(this._thicknessTexture);
99
+ if (defines._areTexturesDirty) {
100
+ if (scene.texturesEnabled) {
101
+ if (this._texture && MaterialFlags.IridescenceTextureEnabled) {
102
+ MaterialHelper.PrepareDefinesForMergedUV(this._texture, defines, "IRIDESCENCE_TEXTURE");
103
+ }
104
+ else {
105
+ defines.IRIDESCENCE_TEXTURE = false;
106
+ }
107
+ if (!defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE && this._thicknessTexture && MaterialFlags.IridescenceTextureEnabled) {
108
+ MaterialHelper.PrepareDefinesForMergedUV(this._thicknessTexture, defines, "IRIDESCENCE_THICKNESS_TEXTURE");
109
+ }
110
+ else {
111
+ defines.IRIDESCENCE_THICKNESS_TEXTURE = false;
112
+ }
113
+ }
114
+ }
115
+ }
116
+ else {
117
+ defines.IRIDESCENCE = false;
118
+ defines.IRIDESCENCE_TEXTURE = false;
119
+ defines.IRIDESCENCE_THICKNESS_TEXTURE = false;
120
+ defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE = false;
121
+ }
122
+ };
123
+ PBRIridescenceConfiguration.prototype.bindForSubMesh = function (uniformBuffer, scene, engine, subMesh) {
124
+ var _a, _b, _c, _d, _e, _f, _g, _h;
125
+ if (!this._isEnabled) {
126
+ return;
127
+ }
128
+ var defines = subMesh.materialDefines;
129
+ var isFrozen = this._material.isFrozen;
130
+ var identicalTextures = defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE;
131
+ if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {
132
+ if (identicalTextures && MaterialFlags.IridescenceTextureEnabled) {
133
+ uniformBuffer.updateFloat4("vIridescenceInfos", this._texture.coordinatesIndex, this._texture.level, -1, -1);
134
+ MaterialHelper.BindTextureMatrix(this._texture, uniformBuffer, "iridescence");
135
+ }
136
+ else if ((this._texture || this._thicknessTexture) && MaterialFlags.IridescenceTextureEnabled) {
137
+ uniformBuffer.updateFloat4("vIridescenceInfos", (_b = (_a = this._texture) === null || _a === void 0 ? void 0 : _a.coordinatesIndex) !== null && _b !== void 0 ? _b : 0, (_d = (_c = this._texture) === null || _c === void 0 ? void 0 : _c.level) !== null && _d !== void 0 ? _d : 0, (_f = (_e = this._thicknessTexture) === null || _e === void 0 ? void 0 : _e.coordinatesIndex) !== null && _f !== void 0 ? _f : 0, (_h = (_g = this._thicknessTexture) === null || _g === void 0 ? void 0 : _g.level) !== null && _h !== void 0 ? _h : 0);
138
+ if (this._texture) {
139
+ MaterialHelper.BindTextureMatrix(this._texture, uniformBuffer, "iridescence");
140
+ }
141
+ if (this._thicknessTexture && !identicalTextures && !defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE) {
142
+ MaterialHelper.BindTextureMatrix(this._thicknessTexture, uniformBuffer, "iridescenceThickness");
143
+ }
144
+ }
145
+ // Clear Coat General params
146
+ uniformBuffer.updateFloat4("vIridescenceParams", this.intensity, this.indexOfRefraction, this.minimumThickness, this.maximumThickness);
147
+ }
148
+ // Textures
149
+ if (scene.texturesEnabled) {
150
+ if (this._texture && MaterialFlags.IridescenceTextureEnabled) {
151
+ uniformBuffer.setTexture("iridescenceSampler", this._texture);
152
+ }
153
+ if (this._thicknessTexture && !identicalTextures && !defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE && MaterialFlags.IridescenceTextureEnabled) {
154
+ uniformBuffer.setTexture("iridescenceThicknessSampler", this._thicknessTexture);
155
+ }
156
+ }
157
+ };
158
+ PBRIridescenceConfiguration.prototype.hasTexture = function (texture) {
159
+ if (this._texture === texture) {
160
+ return true;
161
+ }
162
+ if (this._thicknessTexture === texture) {
163
+ return true;
164
+ }
165
+ return false;
166
+ };
167
+ PBRIridescenceConfiguration.prototype.getActiveTextures = function (activeTextures) {
168
+ if (this._texture) {
169
+ activeTextures.push(this._texture);
170
+ }
171
+ if (this._thicknessTexture) {
172
+ activeTextures.push(this._thicknessTexture);
173
+ }
174
+ };
175
+ PBRIridescenceConfiguration.prototype.getAnimatables = function (animatables) {
176
+ if (this._texture && this._texture.animations && this._texture.animations.length > 0) {
177
+ animatables.push(this._texture);
178
+ }
179
+ if (this._thicknessTexture && this._thicknessTexture.animations && this._thicknessTexture.animations.length > 0) {
180
+ animatables.push(this._thicknessTexture);
181
+ }
182
+ };
183
+ PBRIridescenceConfiguration.prototype.dispose = function (forceDisposeTextures) {
184
+ var _a, _b;
185
+ if (forceDisposeTextures) {
186
+ (_a = this._texture) === null || _a === void 0 ? void 0 : _a.dispose();
187
+ (_b = this._thicknessTexture) === null || _b === void 0 ? void 0 : _b.dispose();
188
+ }
189
+ };
190
+ PBRIridescenceConfiguration.prototype.getClassName = function () {
191
+ return "PBRIridescenceConfiguration";
192
+ };
193
+ PBRIridescenceConfiguration.prototype.addFallbacks = function (defines, fallbacks, currentRank) {
194
+ if (defines.IRIDESCENCE) {
195
+ fallbacks.addFallback(currentRank++, "IRIDESCENCE");
196
+ }
197
+ return currentRank;
198
+ };
199
+ PBRIridescenceConfiguration.prototype.getSamplers = function (samplers) {
200
+ samplers.push("iridescenceSampler", "iridescenceThicknessSampler");
201
+ };
202
+ PBRIridescenceConfiguration.prototype.getUniforms = function () {
203
+ return {
204
+ ubo: [
205
+ { name: "vIridescenceParams", size: 4, type: "vec4" },
206
+ { name: "vIridescenceInfos", size: 4, type: "vec4" },
207
+ { name: "iridescenceMatrix", size: 16, type: "mat4" },
208
+ { name: "iridescenceThicknessMatrix", size: 16, type: "mat4" },
209
+ ],
210
+ };
211
+ };
212
+ /**
213
+ * The default minimum thickness of the thin-film layer given in nanometers (nm).
214
+ * Defaults to 100 nm.
215
+ * @hidden
216
+ */
217
+ PBRIridescenceConfiguration._DefaultMinimumThickness = 100;
218
+ /**
219
+ * The default maximum thickness of the thin-film layer given in nanometers (nm).
220
+ * Defaults to 400 nm.
221
+ * @hidden
222
+ */
223
+ PBRIridescenceConfiguration._DefaultMaximumThickness = 400;
224
+ /**
225
+ * The default index of refraction of the thin-film layer.
226
+ * Defaults to 1.3
227
+ * @hidden
228
+ */
229
+ PBRIridescenceConfiguration._DefaultIndexOfRefraction = 1.3;
230
+ __decorate([
231
+ serialize(),
232
+ expandToProperty("_markAllSubMeshesAsTexturesDirty")
233
+ ], PBRIridescenceConfiguration.prototype, "isEnabled", void 0);
234
+ __decorate([
235
+ serialize()
236
+ ], PBRIridescenceConfiguration.prototype, "intensity", void 0);
237
+ __decorate([
238
+ serialize()
239
+ ], PBRIridescenceConfiguration.prototype, "minimumThickness", void 0);
240
+ __decorate([
241
+ serialize()
242
+ ], PBRIridescenceConfiguration.prototype, "maximumThickness", void 0);
243
+ __decorate([
244
+ serialize()
245
+ ], PBRIridescenceConfiguration.prototype, "indexOfRefraction", void 0);
246
+ __decorate([
247
+ serializeAsTexture(),
248
+ expandToProperty("_markAllSubMeshesAsTexturesDirty")
249
+ ], PBRIridescenceConfiguration.prototype, "texture", void 0);
250
+ __decorate([
251
+ serializeAsTexture(),
252
+ expandToProperty("_markAllSubMeshesAsTexturesDirty")
253
+ ], PBRIridescenceConfiguration.prototype, "thicknessTexture", void 0);
254
+ return PBRIridescenceConfiguration;
255
+ }(MaterialPluginBase));
256
+ export { PBRIridescenceConfiguration };
257
+ //# sourceMappingURL=pbrIridescenceConfiguration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbrIridescenceConfiguration.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Materials/PBR/pbrIridescenceConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../types\";\r\nimport { serialize, serializeAsTexture, expandToProperty } from \"../../Misc/decorators\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { MaterialHelper } from \"../../Materials/materialHelper\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\nimport type { EffectFallbacks } from \"../effectFallbacks\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\n\r\ndeclare type Engine = import(\"../../Engines/engine\").Engine;\r\ndeclare type Scene = import(\"../../scene\").Scene;\r\ndeclare type PBRBaseMaterial = import(\"./pbrBaseMaterial\").PBRBaseMaterial;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class MaterialIridescenceDefines extends MaterialDefines {\r\n public IRIDESCENCE = false;\r\n public IRIDESCENCE_TEXTURE = false;\r\n public IRIDESCENCE_TEXTUREDIRECTUV = 0;\r\n public IRIDESCENCE_THICKNESS_TEXTURE = false;\r\n public IRIDESCENCE_THICKNESS_TEXTUREDIRECTUV = 0;\r\n public IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the iridescence (thin film) component of the PBR material\r\n */\r\nexport class PBRIridescenceConfiguration extends MaterialPluginBase {\r\n protected _material: PBRBaseMaterial;\r\n\r\n /**\r\n * The default minimum thickness of the thin-film layer given in nanometers (nm).\r\n * Defaults to 100 nm.\r\n * @hidden\r\n */\r\n public static readonly _DefaultMinimumThickness = 100;\r\n\r\n /**\r\n * The default maximum thickness of the thin-film layer given in nanometers (nm).\r\n * Defaults to 400 nm.\r\n * @hidden\r\n */\r\n public static readonly _DefaultMaximumThickness = 400;\r\n\r\n /**\r\n * The default index of refraction of the thin-film layer.\r\n * Defaults to 1.3\r\n * @hidden\r\n */\r\n public static readonly _DefaultIndexOfRefraction = 1.3;\r\n\r\n private _isEnabled = false;\r\n /**\r\n * Defines if the iridescence is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isEnabled = false;\r\n\r\n /**\r\n * Defines the iridescence layer strength (between 0 and 1) it defaults to 1.\r\n */\r\n @serialize()\r\n public intensity: number = 1;\r\n\r\n /**\r\n * Defines the minimum thickness of the thin-film layer given in nanometers (nm).\r\n */\r\n @serialize()\r\n public minimumThickness: number = PBRIridescenceConfiguration._DefaultMinimumThickness;\r\n\r\n /**\r\n * Defines the maximum thickness of the thin-film layer given in nanometers (nm). This will be the thickness used if not thickness texture has been set.\r\n */\r\n @serialize()\r\n public maximumThickness: number = PBRIridescenceConfiguration._DefaultMaximumThickness;\r\n\r\n /**\r\n * Defines the maximum thickness of the thin-film layer given in nanometers (nm).\r\n */\r\n @serialize()\r\n public indexOfRefraction: number = PBRIridescenceConfiguration._DefaultIndexOfRefraction;\r\n\r\n private _texture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the iridescence intensity in a texture (red channel)\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public texture: Nullable<BaseTexture> = null;\r\n\r\n private _thicknessTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the iridescence thickness in a texture (green channel)\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public thicknessTexture: Nullable<BaseTexture> = null;\r\n\r\n /** @hidden */\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n\r\n /** @hidden */\r\n public _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n\r\n constructor(material: PBRBaseMaterial, addToPluginList = true) {\r\n super(material, \"PBRIridescence\", 110, new MaterialIridescenceDefines(), addToPluginList);\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[Constants.MATERIAL_TextureDirtyFlag];\r\n }\r\n\r\n public isReadyForSubMesh(defines: MaterialIridescenceDefines, scene: Scene): boolean {\r\n if (!this._isEnabled) {\r\n return true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.IridescenceTextureEnabled) {\r\n if (!this._texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._thicknessTexture && MaterialFlags.IridescenceTextureEnabled) {\r\n if (!this._thicknessTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public prepareDefines(defines: MaterialIridescenceDefines, scene: Scene): void {\r\n if (this._isEnabled) {\r\n defines.IRIDESCENCE = true;\r\n defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE =\r\n this._texture !== null && this._texture._texture === this._thicknessTexture?._texture && this._texture.checkTransformsAreIdentical(this._thicknessTexture);\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.IridescenceTextureEnabled) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._texture, defines, \"IRIDESCENCE_TEXTURE\");\r\n } else {\r\n defines.IRIDESCENCE_TEXTURE = false;\r\n }\r\n\r\n if (!defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE && this._thicknessTexture && MaterialFlags.IridescenceTextureEnabled) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._thicknessTexture, defines, \"IRIDESCENCE_THICKNESS_TEXTURE\");\r\n } else {\r\n defines.IRIDESCENCE_THICKNESS_TEXTURE = false;\r\n }\r\n }\r\n }\r\n } else {\r\n defines.IRIDESCENCE = false;\r\n defines.IRIDESCENCE_TEXTURE = false;\r\n defines.IRIDESCENCE_THICKNESS_TEXTURE = false;\r\n defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE = false;\r\n }\r\n }\r\n\r\n public bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n\r\n const defines = subMesh!.materialDefines as unknown as MaterialIridescenceDefines;\r\n\r\n const isFrozen = this._material.isFrozen;\r\n\r\n const identicalTextures = defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE;\r\n\r\n if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {\r\n if (identicalTextures && MaterialFlags.IridescenceTextureEnabled) {\r\n uniformBuffer.updateFloat4(\"vIridescenceInfos\", this._texture!.coordinatesIndex, this._texture!.level, -1, -1);\r\n MaterialHelper.BindTextureMatrix(this._texture!, uniformBuffer, \"iridescence\");\r\n } else if ((this._texture || this._thicknessTexture) && MaterialFlags.IridescenceTextureEnabled) {\r\n uniformBuffer.updateFloat4(\r\n \"vIridescenceInfos\",\r\n this._texture?.coordinatesIndex ?? 0,\r\n this._texture?.level ?? 0,\r\n this._thicknessTexture?.coordinatesIndex ?? 0,\r\n this._thicknessTexture?.level ?? 0\r\n );\r\n if (this._texture) {\r\n MaterialHelper.BindTextureMatrix(this._texture, uniformBuffer, \"iridescence\");\r\n }\r\n if (this._thicknessTexture && !identicalTextures && !defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE) {\r\n MaterialHelper.BindTextureMatrix(this._thicknessTexture, uniformBuffer, \"iridescenceThickness\");\r\n }\r\n }\r\n\r\n // Clear Coat General params\r\n uniformBuffer.updateFloat4(\"vIridescenceParams\", this.intensity, this.indexOfRefraction, this.minimumThickness, this.maximumThickness);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._texture && MaterialFlags.IridescenceTextureEnabled) {\r\n uniformBuffer.setTexture(\"iridescenceSampler\", this._texture);\r\n }\r\n\r\n if (this._thicknessTexture && !identicalTextures && !defines.IRIDESCENCE_USE_THICKNESS_FROM_MAINTEXTURE && MaterialFlags.IridescenceTextureEnabled) {\r\n uniformBuffer.setTexture(\"iridescenceThicknessSampler\", this._thicknessTexture);\r\n }\r\n }\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (this._texture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._thicknessTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this._texture) {\r\n activeTextures.push(this._texture);\r\n }\r\n\r\n if (this._thicknessTexture) {\r\n activeTextures.push(this._thicknessTexture);\r\n }\r\n }\r\n\r\n public getAnimatables(animatables: IAnimatable[]): void {\r\n if (this._texture && this._texture.animations && this._texture.animations.length > 0) {\r\n animatables.push(this._texture);\r\n }\r\n\r\n if (this._thicknessTexture && this._thicknessTexture.animations && this._thicknessTexture.animations.length > 0) {\r\n animatables.push(this._thicknessTexture);\r\n }\r\n }\r\n\r\n public dispose(forceDisposeTextures?: boolean): void {\r\n if (forceDisposeTextures) {\r\n this._texture?.dispose();\r\n this._thicknessTexture?.dispose();\r\n }\r\n }\r\n\r\n public getClassName(): string {\r\n return \"PBRIridescenceConfiguration\";\r\n }\r\n\r\n public addFallbacks(defines: MaterialIridescenceDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n if (defines.IRIDESCENCE) {\r\n fallbacks.addFallback(currentRank++, \"IRIDESCENCE\");\r\n }\r\n return currentRank;\r\n }\r\n\r\n public getSamplers(samplers: string[]): void {\r\n samplers.push(\"iridescenceSampler\", \"iridescenceThicknessSampler\");\r\n }\r\n\r\n public getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {\r\n ubo: [\r\n { name: \"vIridescenceParams\", size: 4, type: \"vec4\" },\r\n { name: \"vIridescenceInfos\", size: 4, type: \"vec4\" },\r\n { name: \"iridescenceMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"iridescenceThicknessMatrix\", size: 16, type: \"mat4\" },\r\n ],\r\n };\r\n }\r\n}\r\n"]}
@@ -3,6 +3,28 @@ import { KhronosTextureContainer2 } from "../../../Misc/khronosTextureContainer2
3
3
  import { Engine } from "../../../Engines/engine.js";
4
4
  import { EndsWith } from "../../../Misc/stringTools.js";
5
5
  import { Logger } from "../../../Misc/logger.js";
6
+
7
+ function mapSRGBToLinear(format) {
8
+ switch (format) {
9
+ case 35916:
10
+ return 33776;
11
+ case 35918:
12
+ return 33778;
13
+ case 35919:
14
+ return 33779;
15
+ case 37493:
16
+ return 37492;
17
+ case 37497:
18
+ return 37496;
19
+ case 37495:
20
+ return 37494;
21
+ case 37840:
22
+ return 37808;
23
+ case 36493:
24
+ return 36492;
25
+ }
26
+ return null;
27
+ }
6
28
  /**
7
29
  * Implementation of the KTX Texture Loader.
8
30
  * @hidden
@@ -65,6 +87,15 @@ var _KTXTextureLoader = /** @class */ (function () {
65
87
  // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture
66
88
  texture._invertVScale = !texture.invertY;
67
89
  var ktx_1 = new KhronosTextureContainer(data, 1);
90
+ var mappedFormat = mapSRGBToLinear(ktx_1.glInternalFormat);
91
+ if (mappedFormat) {
92
+ texture.format = mappedFormat;
93
+ texture._useSRGBBuffer = texture.getEngine()._getUseSRGBBuffer(true, texture.generateMipMaps);
94
+ texture._gammaSpace = true;
95
+ }
96
+ else {
97
+ texture.format = ktx_1.glInternalFormat;
98
+ }
68
99
  callback(ktx_1.pixelWidth, ktx_1.pixelHeight, texture.generateMipMaps, true, function () {
69
100
  ktx_1.uploadLevels(texture, texture.generateMipMaps);
70
101
  }, ktx_1.isInvalid);
@@ -1 +1 @@
1
- {"version":3,"file":"ktxTextureLoader.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Textures/Loaders/ktxTextureLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { KhronosTextureContainer } from \"../../../Misc/khronosTextureContainer\";\r\nimport { KhronosTextureContainer2 } from \"../../../Misc/khronosTextureContainer2\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Engine } from \"../../../Engines/engine\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../../../Materials/Textures/internalTextureLoader\";\r\nimport { EndsWith } from \"../../../Misc/stringTools\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\n\r\n/**\r\n * Implementation of the KTX Texture Loader.\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _KTXTextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * This returns if the loader support the current file information.\r\n * @param extension defines the file extension of the file being loaded\r\n * @param mimeType defines the optional mime type of the file being loaded\r\n * @returns true if the loader can load the specified file\r\n */\r\n public canLoad(extension: string, mimeType?: string): boolean {\r\n // The \".ktx2\" file extension is still up for debate: https://github.com/KhronosGroup/KTX-Specification/issues/18\r\n return EndsWith(extension, \".ktx\") || EndsWith(extension, \".ktx2\") || mimeType === \"image/ktx\" || mimeType === \"image/ktx2\";\r\n }\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param createPolynomials will be true if polynomials have been requested\r\n * @param onLoad defines the callback to trigger once the texture is ready\r\n */\r\n public loadCubeData(data: ArrayBufferView | ArrayBufferView[], texture: InternalTexture, createPolynomials: boolean, onLoad: Nullable<(data?: any) => void>): void {\r\n if (Array.isArray(data)) {\r\n return;\r\n }\r\n\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const engine = texture.getEngine() as Engine;\r\n const ktx = new KhronosTextureContainer(data, 6);\r\n\r\n const loadMipmap = ktx.numberOfMipmapLevels > 1 && texture.generateMipMaps;\r\n\r\n engine._unpackFlipY(true);\r\n\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n\r\n texture.width = ktx.pixelWidth;\r\n texture.height = ktx.pixelHeight;\r\n\r\n engine._setCubeMapTextureParams(texture, loadMipmap, ktx.numberOfMipmapLevels - 1);\r\n texture.isReady = true;\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n * @param options\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void, loadFailed: boolean) => void,\r\n options?: any\r\n ): void {\r\n if (KhronosTextureContainer.IsValid(data)) {\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const ktx = new KhronosTextureContainer(data, 1);\r\n callback(\r\n ktx.pixelWidth,\r\n ktx.pixelHeight,\r\n texture.generateMipMaps,\r\n true,\r\n () => {\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n },\r\n ktx.isInvalid\r\n );\r\n } else if (KhronosTextureContainer2.IsValid(data)) {\r\n const ktx2 = new KhronosTextureContainer2(texture.getEngine());\r\n ktx2.uploadAsync(data, texture, options).then(\r\n () => {\r\n callback(texture.width, texture.height, texture.generateMipMaps, true, () => {}, false);\r\n },\r\n (error) => {\r\n Logger.Warn(`Failed to load KTX2 texture data: ${error.message}`);\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n );\r\n } else {\r\n Logger.Error(\"texture missing KTX identifier\");\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n }\r\n}\r\n\r\n// Register the loader.\r\nEngine._TextureLoaders.unshift(new _KTXTextureLoader());\r\n"]}
1
+ {"version":3,"file":"ktxTextureLoader.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Textures/Loaders/ktxTextureLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { KhronosTextureContainer } from \"../../../Misc/khronosTextureContainer\";\r\nimport { KhronosTextureContainer2 } from \"../../../Misc/khronosTextureContainer2\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Engine } from \"../../../Engines/engine\";\r\nimport type { InternalTexture } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../../../Materials/Textures/internalTextureLoader\";\r\nimport { EndsWith } from \"../../../Misc/stringTools\";\r\nimport { Logger } from \"../../../Misc/logger\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\n\r\nfunction mapSRGBToLinear(format: number): Nullable<number> {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_S3TC_DXT1_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n case Constants.TEXTUREFORMAT_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\r\n return Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Implementation of the KTX Texture Loader.\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _KTXTextureLoader implements IInternalTextureLoader {\r\n /**\r\n * Defines whether the loader supports cascade loading the different faces.\r\n */\r\n public readonly supportCascades = false;\r\n\r\n /**\r\n * This returns if the loader support the current file information.\r\n * @param extension defines the file extension of the file being loaded\r\n * @param mimeType defines the optional mime type of the file being loaded\r\n * @returns true if the loader can load the specified file\r\n */\r\n public canLoad(extension: string, mimeType?: string): boolean {\r\n // The \".ktx2\" file extension is still up for debate: https://github.com/KhronosGroup/KTX-Specification/issues/18\r\n return EndsWith(extension, \".ktx\") || EndsWith(extension, \".ktx2\") || mimeType === \"image/ktx\" || mimeType === \"image/ktx2\";\r\n }\r\n\r\n /**\r\n * Uploads the cube texture data to the WebGL texture. It has already been bound.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param createPolynomials will be true if polynomials have been requested\r\n * @param onLoad defines the callback to trigger once the texture is ready\r\n */\r\n public loadCubeData(data: ArrayBufferView | ArrayBufferView[], texture: InternalTexture, createPolynomials: boolean, onLoad: Nullable<(data?: any) => void>): void {\r\n if (Array.isArray(data)) {\r\n return;\r\n }\r\n\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const engine = texture.getEngine() as Engine;\r\n const ktx = new KhronosTextureContainer(data, 6);\r\n\r\n const loadMipmap = ktx.numberOfMipmapLevels > 1 && texture.generateMipMaps;\r\n\r\n engine._unpackFlipY(true);\r\n\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n\r\n texture.width = ktx.pixelWidth;\r\n texture.height = ktx.pixelHeight;\r\n\r\n engine._setCubeMapTextureParams(texture, loadMipmap, ktx.numberOfMipmapLevels - 1);\r\n texture.isReady = true;\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n }\r\n\r\n /**\r\n * Uploads the 2D texture data to the WebGL texture. It has already been bound once in the callback.\r\n * @param data contains the texture data\r\n * @param texture defines the BabylonJS internal texture\r\n * @param callback defines the method to call once ready to upload\r\n * @param options\r\n */\r\n public loadData(\r\n data: ArrayBufferView,\r\n texture: InternalTexture,\r\n callback: (width: number, height: number, loadMipmap: boolean, isCompressed: boolean, done: () => void, loadFailed: boolean) => void,\r\n options?: any\r\n ): void {\r\n if (KhronosTextureContainer.IsValid(data)) {\r\n // Need to invert vScale as invertY via UNPACK_FLIP_Y_WEBGL is not supported by compressed texture\r\n texture._invertVScale = !texture.invertY;\r\n const ktx = new KhronosTextureContainer(data, 1);\r\n\r\n const mappedFormat = mapSRGBToLinear(ktx.glInternalFormat);\r\n if (mappedFormat) {\r\n texture.format = mappedFormat;\r\n texture._useSRGBBuffer = texture.getEngine()._getUseSRGBBuffer(true, texture.generateMipMaps);\r\n texture._gammaSpace = true;\r\n } else {\r\n texture.format = ktx.glInternalFormat;\r\n }\r\n\r\n callback(\r\n ktx.pixelWidth,\r\n ktx.pixelHeight,\r\n texture.generateMipMaps,\r\n true,\r\n () => {\r\n ktx.uploadLevels(texture, texture.generateMipMaps);\r\n },\r\n ktx.isInvalid\r\n );\r\n } else if (KhronosTextureContainer2.IsValid(data)) {\r\n const ktx2 = new KhronosTextureContainer2(texture.getEngine());\r\n ktx2.uploadAsync(data, texture, options).then(\r\n () => {\r\n callback(texture.width, texture.height, texture.generateMipMaps, true, () => {}, false);\r\n },\r\n (error) => {\r\n Logger.Warn(`Failed to load KTX2 texture data: ${error.message}`);\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n );\r\n } else {\r\n Logger.Error(\"texture missing KTX identifier\");\r\n callback(0, 0, false, false, () => {}, true);\r\n }\r\n }\r\n}\r\n\r\n// Register the loader.\r\nEngine._TextureLoaders.unshift(new _KTXTextureLoader());\r\n"]}
@@ -128,30 +128,30 @@ var VideoTexture = /** @class */ (function (_super) {
128
128
  _this._currentSrc = src;
129
129
  _this.name = name || _this._getName(src);
130
130
  _this.video = _this._getVideo(src);
131
- if (settings.poster) {
132
- _this.video.poster = settings.poster;
131
+ if (_this._settings.poster) {
132
+ _this.video.poster = _this._settings.poster;
133
133
  }
134
- if (settings.autoPlay !== undefined) {
135
- _this.video.autoplay = settings.autoPlay;
134
+ if (_this._settings.autoPlay !== undefined) {
135
+ _this.video.autoplay = _this._settings.autoPlay;
136
136
  }
137
- if (settings.loop !== undefined) {
138
- _this.video.loop = settings.loop;
137
+ if (_this._settings.loop !== undefined) {
138
+ _this.video.loop = _this._settings.loop;
139
139
  }
140
- if (settings.muted !== undefined) {
141
- _this.video.muted = settings.muted;
140
+ if (_this._settings.muted !== undefined) {
141
+ _this.video.muted = _this._settings.muted;
142
142
  }
143
143
  _this.video.setAttribute("playsinline", "");
144
144
  _this.video.addEventListener("paused", _this._updateInternalTexture);
145
145
  _this.video.addEventListener("seeked", _this._updateInternalTexture);
146
146
  _this.video.addEventListener("emptied", _this._reset);
147
- _this._createInternalTextureOnEvent = settings.poster && !settings.autoPlay ? "play" : "canplay";
147
+ _this._createInternalTextureOnEvent = _this._settings.poster && !_this._settings.autoPlay ? "play" : "canplay";
148
148
  _this.video.addEventListener(_this._createInternalTextureOnEvent, _this._createInternalTexture);
149
- if (settings.autoPlay) {
149
+ if (_this._settings.autoPlay) {
150
150
  _this._handlePlay();
151
151
  }
152
152
  var videoHasEnoughData = _this.video.readyState >= _this.video.HAVE_CURRENT_DATA;
153
- if (settings.poster && (!settings.autoPlay || !videoHasEnoughData)) {
154
- _this._texture = _this._getEngine().createTexture(settings.poster, false, !_this.invertY, scene);
153
+ if (_this._settings.poster && (!_this._settings.autoPlay || !videoHasEnoughData)) {
154
+ _this._texture = _this._getEngine().createTexture(_this._settings.poster, false, !_this.invertY, scene);
155
155
  _this._displayingPosterTexture = true;
156
156
  }
157
157
  else if (videoHasEnoughData) {