Bläddra i källkod

Merge remote-tracking branch 'BabylonJS/master'

MackeyK24 7 år sedan
förälder
incheckning
d0a6d9e628
100 ändrade filer med 44657 tillägg och 42492 borttagningar
  1. 17371 17345
      Playground/babylon.d.txt
  2. 4 1
      Tools/Gulp/gulpfile.js
  3. 18945 18919
      dist/preview release/babylon.d.ts
  4. 55 55
      dist/preview release/babylon.js
  5. 420 78
      dist/preview release/babylon.max.js
  6. 56 56
      dist/preview release/babylon.worker.js
  7. 4925 4899
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts
  8. 56 56
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js
  9. 543 172
      dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js
  10. 542 171
      dist/preview release/customConfigurations/minimalGLTFViewer/es6.js
  11. 419 77
      dist/preview release/es6.js
  12. 20 1
      dist/preview release/gui/babylon.gui.js
  13. 3 3
      dist/preview release/gui/babylon.gui.min.js
  14. 4 4
      dist/preview release/inspector/babylon.inspector.bundle.js
  15. 55 0
      dist/preview release/inspector/babylon.inspector.js
  16. 3 3
      dist/preview release/inspector/babylon.inspector.min.js
  17. 10 10
      dist/preview release/loaders/babylon.glTF1FileLoader.d.ts
  18. 25 3
      dist/preview release/loaders/babylon.glTF1FileLoader.js
  19. 2 2
      dist/preview release/loaders/babylon.glTF1FileLoader.min.js
  20. 26 17
      dist/preview release/loaders/babylon.glTF2FileLoader.d.ts
  21. 103 92
      dist/preview release/loaders/babylon.glTF2FileLoader.js
  22. 2 2
      dist/preview release/loaders/babylon.glTF2FileLoader.min.js
  23. 36 27
      dist/preview release/loaders/babylon.glTFFileLoader.d.ts
  24. 127 95
      dist/preview release/loaders/babylon.glTFFileLoader.js
  25. 3 3
      dist/preview release/loaders/babylon.glTFFileLoader.min.js
  26. 1 1
      dist/preview release/loaders/babylon.objFileLoader.d.ts
  27. 4 0
      dist/preview release/loaders/babylon.objFileLoader.js
  28. 1 1
      dist/preview release/loaders/babylon.objFileLoader.min.js
  29. 1 0
      dist/preview release/loaders/babylon.stlFileLoader.js
  30. 1 1
      dist/preview release/loaders/babylon.stlFileLoader.min.js
  31. 133 96
      dist/preview release/loaders/babylonjs.loaders.js
  32. 3 3
      dist/preview release/loaders/babylonjs.loaders.min.js
  33. 37 28
      dist/preview release/loaders/babylonjs.loaders.module.d.ts
  34. 1 0
      dist/preview release/materialsLibrary/babylon.cellMaterial.js
  35. 1 1
      dist/preview release/materialsLibrary/babylon.cellMaterial.min.js
  36. 1 0
      dist/preview release/materialsLibrary/babylon.customMaterial.js
  37. 1 1
      dist/preview release/materialsLibrary/babylon.customMaterial.min.js
  38. 1 0
      dist/preview release/materialsLibrary/babylon.fireMaterial.js
  39. 1 1
      dist/preview release/materialsLibrary/babylon.fireMaterial.min.js
  40. 1 0
      dist/preview release/materialsLibrary/babylon.furMaterial.js
  41. 1 1
      dist/preview release/materialsLibrary/babylon.furMaterial.min.js
  42. 1 0
      dist/preview release/materialsLibrary/babylon.gradientMaterial.js
  43. 1 1
      dist/preview release/materialsLibrary/babylon.gradientMaterial.min.js
  44. 1 0
      dist/preview release/materialsLibrary/babylon.gridMaterial.js
  45. 1 1
      dist/preview release/materialsLibrary/babylon.gridMaterial.min.js
  46. 1 0
      dist/preview release/materialsLibrary/babylon.lavaMaterial.js
  47. 1 1
      dist/preview release/materialsLibrary/babylon.lavaMaterial.min.js
  48. 1 0
      dist/preview release/materialsLibrary/babylon.normalMaterial.js
  49. 1 1
      dist/preview release/materialsLibrary/babylon.normalMaterial.min.js
  50. 1 0
      dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.js
  51. 1 1
      dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js
  52. 1 0
      dist/preview release/materialsLibrary/babylon.simpleMaterial.js
  53. 1 1
      dist/preview release/materialsLibrary/babylon.simpleMaterial.min.js
  54. 1 0
      dist/preview release/materialsLibrary/babylon.skyMaterial.js
  55. 1 1
      dist/preview release/materialsLibrary/babylon.skyMaterial.min.js
  56. 1 0
      dist/preview release/materialsLibrary/babylon.terrainMaterial.js
  57. 1 1
      dist/preview release/materialsLibrary/babylon.terrainMaterial.min.js
  58. 1 0
      dist/preview release/materialsLibrary/babylon.triPlanarMaterial.js
  59. 1 1
      dist/preview release/materialsLibrary/babylon.triPlanarMaterial.min.js
  60. 1 0
      dist/preview release/materialsLibrary/babylon.waterMaterial.js
  61. 1 1
      dist/preview release/materialsLibrary/babylon.waterMaterial.min.js
  62. 15 1
      dist/preview release/materialsLibrary/babylonjs.materials.js
  63. 3 3
      dist/preview release/materialsLibrary/babylonjs.materials.min.js
  64. 1 0
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js
  65. 1 1
      dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js
  66. 1 0
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js
  67. 1 1
      dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js
  68. 3 1
      dist/preview release/postProcessesLibrary/babylonjs.postProcess.js
  69. 1 1
      dist/preview release/postProcessesLibrary/babylonjs.postProcess.min.js
  70. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.brickProceduralTexture.js
  71. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.brickProceduralTexture.min.js
  72. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.cloudProceduralTexture.js
  73. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.cloudProceduralTexture.min.js
  74. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.fireProceduralTexture.js
  75. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.fireProceduralTexture.min.js
  76. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.grassProceduralTexture.js
  77. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.grassProceduralTexture.min.js
  78. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.marbleProceduralTexture.js
  79. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.marbleProceduralTexture.min.js
  80. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.normalMapProceduralTexture.js
  81. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.normalMapProceduralTexture.min.js
  82. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.perlinNoiseProceduralTexture.js
  83. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.perlinNoiseProceduralTexture.min.js
  84. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.roadProceduralTexture.js
  85. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.roadProceduralTexture.min.js
  86. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.starfieldProceduralTexture.js
  87. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.starfieldProceduralTexture.min.js
  88. 1 0
      dist/preview release/proceduralTexturesLibrary/babylon.woodProceduralTexture.js
  89. 1 1
      dist/preview release/proceduralTexturesLibrary/babylon.woodProceduralTexture.min.js
  90. 11 1
      dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.js
  91. 1 1
      dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.min.js
  92. 4 0
      dist/preview release/serializers/babylon.glTF2Serializer.js
  93. 1 1
      dist/preview release/serializers/babylon.glTF2Serializer.min.js
  94. 1 0
      dist/preview release/serializers/babylon.objSerializer.js
  95. 1 1
      dist/preview release/serializers/babylon.objSerializer.min.js
  96. 6 1
      dist/preview release/serializers/babylonjs.serializers.js
  97. 1 1
      dist/preview release/serializers/babylonjs.serializers.min.js
  98. 68 68
      dist/preview release/viewer/babylon.viewer.js
  99. 553 165
      dist/preview release/viewer/babylon.viewer.max.js
  100. 0 0
      dist/preview release/what's new.md

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 17371 - 17345
Playground/babylon.d.txt


+ 4 - 1
Tools/Gulp/gulpfile.js

@@ -60,6 +60,7 @@ var tsConfig = {
     noUnusedLocals: true,
     strictNullChecks: true,
     strictFunctionTypes: true,
+    strict: true,
     types: [],
     lib: [
         "dom",
@@ -81,6 +82,7 @@ var externalTsConfig = {
     noImplicitThis: true,
     noUnusedLocals: true,
     strictNullChecks: true,
+    strict: true,
     types: [],
     lib: [
         "dom",
@@ -622,7 +624,8 @@ gulp.task("deployLocalDev", function () {
 gulp.task("webserver", function () {
     var options = {
         port: 1338,
-        livereload: false
+        livereload: false,
+        
     };
 
     if (commandLineOptions.public) {

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 18945 - 18919
dist/preview release/babylon.d.ts


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 55 - 55
dist/preview release/babylon.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 420 - 78
dist/preview release/babylon.max.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 56 - 56
dist/preview release/babylon.worker.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 4925 - 4899
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.d.ts


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 56 - 56
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 543 - 172
dist/preview release/customConfigurations/minimalGLTFViewer/babylon.max.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 542 - 171
dist/preview release/customConfigurations/minimalGLTFViewer/es6.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 419 - 77
dist/preview release/es6.js


+ 20 - 1
dist/preview release/gui/babylon.gui.js

@@ -27,7 +27,8 @@ var __extends = (this && this.__extends) || (function () {
         root["BABYLON"]["GUI"] = factory(root["BABYLON"]);
     }
 })(this, function(BABYLON) {
-    /// <reference path="../../dist/preview release/babylon.d.ts"/>
+    "use strict";
+/// <reference path="../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
 (function (BABYLON) {
@@ -544,6 +545,7 @@ var BABYLON;
 
 //# sourceMappingURL=advancedDynamicTexture.js.map
 
+"use strict";
 /// <reference path="../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -588,6 +590,7 @@ var BABYLON;
 
 //# sourceMappingURL=measure.js.map
 
+"use strict";
 /// <reference path="../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -721,6 +724,7 @@ var BABYLON;
 
 //# sourceMappingURL=math2D.js.map
 
+"use strict";
 /// <reference path="../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -850,6 +854,7 @@ var BABYLON;
 
 //# sourceMappingURL=valueAndUnit.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -1975,6 +1980,7 @@ var BABYLON;
 
 //# sourceMappingURL=control.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -2170,6 +2176,7 @@ var BABYLON;
 
 //# sourceMappingURL=container.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -2312,6 +2319,7 @@ var BABYLON;
 
 //# sourceMappingURL=stackPanel.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -2439,6 +2447,7 @@ var BABYLON;
 
 //# sourceMappingURL=rectangle.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -2516,6 +2525,7 @@ var BABYLON;
 
 //# sourceMappingURL=ellipse.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -2759,6 +2769,7 @@ var BABYLON;
 
 //# sourceMappingURL=line.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -3047,6 +3058,7 @@ var BABYLON;
 
 //# sourceMappingURL=slider.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -3174,6 +3186,7 @@ var BABYLON;
 
 //# sourceMappingURL=checkbox.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -3322,6 +3335,7 @@ var BABYLON;
 
 //# sourceMappingURL=radioButton.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -3671,6 +3685,7 @@ var BABYLON;
 
 //# sourceMappingURL=textBlock.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var DOMImage = Image;
@@ -3982,6 +3997,7 @@ var BABYLON;
 
 //# sourceMappingURL=image.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -4111,6 +4127,7 @@ var BABYLON;
 
 //# sourceMappingURL=button.js.map
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -4469,6 +4486,7 @@ var BABYLON;
     })(GUI = BABYLON.GUI || (BABYLON.GUI = {}));
 })(BABYLON || (BABYLON = {}));
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;
@@ -4912,6 +4930,7 @@ var BABYLON;
     })(GUI = BABYLON.GUI || (BABYLON.GUI = {}));
 })(BABYLON || (BABYLON = {}));
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 
 var BABYLON;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 3
dist/preview release/gui/babylon.gui.min.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 4 - 4
dist/preview release/inspector/babylon.inspector.bundle.js


+ 55 - 0
dist/preview release/inspector/babylon.inspector.js

@@ -1,3 +1,4 @@
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     var Inspector = /** @class */ (function () {
@@ -353,6 +354,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=Inspector.js.map
 
+"use strict";
 /// <reference path="../../dist/preview release/babylon.d.ts"/>
 var INSPECTOR;
 (function (INSPECTOR) {
@@ -481,6 +483,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=properties.js.map
 
+"use strict";
 /// <reference path="../../dist/preview release/gui/babylon.gui.d.ts"/>
 var INSPECTOR;
 (function (INSPECTOR) {
@@ -601,6 +604,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=properties_gui.js.map
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     /**
@@ -632,6 +636,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=BasicElement.js.map
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     var Adapter = /** @class */ (function () {
@@ -669,6 +674,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=Adapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -718,6 +724,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=CameraAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -779,6 +786,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=PhysicsImpostorAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -830,6 +838,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=GUIAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -886,6 +895,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=SoundAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -932,6 +942,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=TextureAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -983,6 +994,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=LightAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -1027,6 +1039,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=MaterialAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -1134,6 +1147,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=MeshAdapter.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -1339,6 +1353,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=DetailPanel.js.map
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     /**
@@ -1390,6 +1405,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=Property.js.map
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     var PropertyFormatter = /** @class */ (function () {
@@ -1934,6 +1950,7 @@ var INSPECTOR;
 
 //# sourceMappingURL=PropertyLine.js.map
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -1983,6 +2000,7 @@ var INSPECTOR;
     INSPECTOR.ColorElement = ColorElement;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2053,6 +2071,7 @@ var INSPECTOR;
     INSPECTOR.ColorPickerElement = ColorPickerElement;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2170,6 +2189,7 @@ var INSPECTOR;
     INSPECTOR.CubeTextureElement = CubeTextureElement;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2214,6 +2234,7 @@ var INSPECTOR;
     INSPECTOR.HDRCubeTextureElement = HDRCubeTextureElement;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2290,6 +2311,7 @@ var INSPECTOR;
     INSPECTOR.SearchBarDetails = SearchBarDetails;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2336,6 +2358,7 @@ var INSPECTOR;
     INSPECTOR.TextureElement = TextureElement;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     /**
@@ -2361,6 +2384,7 @@ var INSPECTOR;
     INSPECTOR.Tooltip = Tooltip;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     var Helpers = /** @class */ (function () {
@@ -2575,6 +2599,7 @@ var INSPECTOR;
     INSPECTOR.Helpers = Helpers;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     var Scheduler = /** @class */ (function () {
@@ -2621,6 +2646,7 @@ var INSPECTOR;
     INSPECTOR.Scheduler = Scheduler;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2697,6 +2723,7 @@ var INSPECTOR;
     INSPECTOR.Tab = Tab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2847,6 +2874,7 @@ var INSPECTOR;
     INSPECTOR.PropertyTab = PropertyTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2880,6 +2908,7 @@ var INSPECTOR;
     INSPECTOR.CameraTab = CameraTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2935,6 +2964,7 @@ var INSPECTOR;
     INSPECTOR.GUITab = GUITab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -2975,6 +3005,7 @@ var INSPECTOR;
     INSPECTOR.PhysicsTab = PhysicsTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -3012,6 +3043,7 @@ var INSPECTOR;
     INSPECTOR.SoundTab = SoundTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -3185,6 +3217,7 @@ var INSPECTOR;
     INSPECTOR.TextureTab = TextureTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -3218,6 +3251,7 @@ var INSPECTOR;
     INSPECTOR.LightTab = LightTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -3251,6 +3285,7 @@ var INSPECTOR;
     INSPECTOR.MaterialTab = MaterialTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -3341,6 +3376,7 @@ var INSPECTOR;
     INSPECTOR.MeshTab = MeshTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -3527,6 +3563,7 @@ var INSPECTOR;
     INSPECTOR.SceneTab = SceneTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -3666,6 +3703,7 @@ var INSPECTOR;
     INSPECTOR.ConsoleTab = ConsoleTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4010,6 +4048,7 @@ var INSPECTOR;
     INSPECTOR.StatsTab = StatsTab;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4231,6 +4270,7 @@ var INSPECTOR;
     INSPECTOR.TabBar = TabBar;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     var AbstractTool = /** @class */ (function () {
@@ -4271,6 +4311,7 @@ var INSPECTOR;
     INSPECTOR.AbstractTool = AbstractTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4307,6 +4348,7 @@ var INSPECTOR;
     INSPECTOR.PauseScheduleTool = PauseScheduleTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4370,6 +4412,7 @@ var INSPECTOR;
     INSPECTOR.PickTool = PickTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4396,6 +4439,7 @@ var INSPECTOR;
     INSPECTOR.PopupTool = PopupTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4422,6 +4466,7 @@ var INSPECTOR;
     INSPECTOR.RefreshTool = RefreshTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4542,6 +4587,7 @@ var INSPECTOR;
     INSPECTOR.LabelTool = LabelTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4605,6 +4651,7 @@ var INSPECTOR;
     INSPECTOR.Toolbar = Toolbar;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4634,6 +4681,7 @@ var INSPECTOR;
     INSPECTOR.DisposeTool = DisposeTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4819,6 +4867,7 @@ var INSPECTOR;
     INSPECTOR.TreeItem = TreeItem;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var INSPECTOR;
 (function (INSPECTOR) {
     var AbstractTreeTool = /** @class */ (function () {
@@ -4851,6 +4900,7 @@ var INSPECTOR;
     INSPECTOR.AbstractTreeTool = AbstractTreeTool;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4898,6 +4948,7 @@ var INSPECTOR;
     INSPECTOR.BoundingBox = BoundingBox;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4942,6 +4993,7 @@ var INSPECTOR;
     INSPECTOR.CameraPOV = CameraPOV;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -4989,6 +5041,7 @@ var INSPECTOR;
     INSPECTOR.SoundInteractions = SoundInteractions;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -5042,6 +5095,7 @@ var INSPECTOR;
     INSPECTOR.Checkbox = Checkbox;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
@@ -5079,6 +5133,7 @@ var INSPECTOR;
     INSPECTOR.DebugArea = DebugArea;
 })(INSPECTOR || (INSPECTOR = {}));
 
+"use strict";
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
         ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 3
dist/preview release/inspector/babylon.inspector.min.js


+ 10 - 10
dist/preview release/loaders/babylon.glTF1FileLoader.d.ts

@@ -561,7 +561,7 @@ declare module BABYLON.GLTF1 {
         static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
         static LoadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: Nullable<ArrayBufferView>) => void, onError: (message: string) => void): void;
         static CreateTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: Nullable<ArrayBufferView>, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
-        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): void;
+        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string | ArrayBuffer) => void, onError?: (message: string) => void): void;
         static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
     }
     /**
@@ -586,14 +586,14 @@ declare module BABYLON.GLTF1 {
         onExtensionLoadedObservable: Observable<IGLTFLoaderExtension>;
         state: Nullable<GLTFLoaderState>;
         dispose(): void;
-        private _importMeshAsync(meshesNames, scene, data, rootUrl, onSuccess, onProgress, onError);
-        importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress: (event: SceneLoaderProgressEvent) => void): Promise<{
+        private _importMeshAsync(meshesNames, scene, data, rootUrl, onSuccess, onProgress?, onError?);
+        importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
             particleSystems: ParticleSystem[];
             skeletons: Skeleton[];
         }>;
-        private _loadAsync(scene, data, rootUrl, onSuccess, onProgress, onError);
-        loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress: (event: SceneLoaderProgressEvent) => void): Promise<void>;
+        private _loadAsync(scene, data, rootUrl, onSuccess, onProgress?, onError?);
+        loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<void>;
         private _loadShadersAsync(gltfRuntime, onload);
         private _loadBuffersAsync(gltfRuntime, onLoad, onProgress?);
         private _createNodes(gltfRuntime);
@@ -670,12 +670,12 @@ declare module BABYLON.GLTF1 {
         * Defines an override for loading the runtime
         * Return true to stop further extensions from loading the runtime
         */
-        loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): boolean;
+        loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): boolean;
         /**
          * Defines an onverride for creating gltf runtime
          * Return true to stop further extensions from creating the runtime
          */
-        loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): boolean;
+        loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): boolean;
         /**
         * Defines an override for loading buffers
         * Return true to stop further extensions from loading this buffer
@@ -701,11 +701,11 @@ declare module BABYLON.GLTF1 {
         * Return true to stop further extensions from loading this material
         */
         loadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): boolean;
-        static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): void;
-        static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): void;
+        static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): void;
+        static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): void;
         static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (bufferView: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
         static LoadTextureAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
-        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string) => void, onError: (message: string) => void): void;
+        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string | ArrayBuffer) => void, onError: (message: string) => void): void;
         static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
         private static LoadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);
         private static CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);

+ 25 - 3
dist/preview release/loaders/babylon.glTF1FileLoader.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -475,6 +476,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFFileLoader.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -572,6 +574,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -590,6 +593,9 @@ var BABYLON;
         var Tokenizer = /** @class */ (function () {
             function Tokenizer(toParse) {
                 this._pos = 0;
+                this.currentToken = ETokenType.UNKNOWN;
+                this.currentIdentifier = "";
+                this.currentString = "";
                 this.isLetterOrDigitPattern = /^[a-zA-Z0-9]+$/;
                 this._toParse = toParse;
                 this._maxPos = toParse.length;
@@ -1702,11 +1708,13 @@ var BABYLON;
                 var shader = gltfRuntime.shaders[id];
                 if (BABYLON.Tools.IsBase64(shader.uri)) {
                     var shaderString = atob(shader.uri.split(",")[1]);
-                    onSuccess(shaderString);
+                    if (onSuccess) {
+                        onSuccess(shaderString);
+                    }
                 }
                 else {
                     BABYLON.Tools.LoadFile(gltfRuntime.rootUrl + shader.uri, onSuccess, undefined, undefined, false, function (request) {
-                        if (request) {
+                        if (request && onError) {
                             onError(request.status + " " + request.statusText);
                         }
                     });
@@ -1980,6 +1988,9 @@ var BABYLON;
                 var hasShaders = false;
                 var processShader = function (sha, shader) {
                     GLTF1.GLTFLoaderExtension.LoadShaderStringAsync(gltfRuntime, sha, function (shaderString) {
+                        if (shaderString instanceof ArrayBuffer) {
+                            return;
+                        }
                         gltfRuntime.loadedShaderCount++;
                         if (shaderString) {
                             BABYLON.Effect.ShadersStore[sha + (shader.type === GLTF1.EShaderType.VERTEX ? "VertexShader" : "PixelShader")] = shaderString;
@@ -2067,6 +2078,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoader.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -2302,6 +2314,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderUtils.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -2375,6 +2388,9 @@ var BABYLON;
                     return loaderExtension.loadRuntimeAsync(scene, data, rootUrl, onSuccess, onError);
                 }, function () {
                     setTimeout(function () {
+                        if (!onSuccess) {
+                            return;
+                        }
                         onSuccess(GLTF1.GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));
                     });
                 });
@@ -2396,7 +2412,11 @@ var BABYLON;
                 });
             };
             GLTFLoaderExtension.LoadTextureAsync = function (gltfRuntime, id, onSuccess, onError) {
-                GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) { return GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError); }, onError);
+                GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) {
+                    if (buffer) {
+                        GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
+                    }
+                }, onError);
             };
             GLTFLoaderExtension.LoadShaderStringAsync = function (gltfRuntime, id, onSuccess, onError) {
                 GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
@@ -2443,6 +2463,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderExtension.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -2520,6 +2541,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFBinaryExtension.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 2 - 2
dist/preview release/loaders/babylon.glTF1FileLoader.min.js


+ 26 - 17
dist/preview release/loaders/babylon.glTF2FileLoader.d.ts

@@ -199,7 +199,6 @@ declare module BABYLON.GLTF2 {
         _data?: Promise<TypedArray>;
     }
     interface ILoaderAnimationChannel extends IAnimationChannel, IArrayItem {
-        _babylonAnimationGroup: AnimationGroup;
     }
     interface ILoaderAnimationSamplerData {
         input: Float32Array;
@@ -212,7 +211,7 @@ declare module BABYLON.GLTF2 {
     interface ILoaderAnimation extends IAnimation, IArrayItem {
         channels: ILoaderAnimationChannel[];
         samplers: ILoaderAnimationSampler[];
-        _babylonAnimationGroup: Nullable<AnimationGroup>;
+        _babylonAnimationGroup?: AnimationGroup;
     }
     interface ILoaderBuffer extends IBuffer, IArrayItem {
         _data?: Promise<ArrayBufferView>;
@@ -226,9 +225,13 @@ declare module BABYLON.GLTF2 {
         _objectURL?: Promise<string>;
     }
     interface ILoaderMaterial extends IMaterial, IArrayItem {
-        _babylonMaterial?: Material;
-        _babylonMeshes?: AbstractMesh[];
-        _loaded?: Promise<void>;
+        _babylonData?: {
+            [drawMode: number]: {
+                material: Material;
+                meshes: AbstractMesh[];
+                loaded: Promise<void>;
+            };
+        };
     }
     interface ILoaderMesh extends IMesh, IArrayItem {
         primitives: ILoaderMeshPrimitive[];
@@ -254,7 +257,7 @@ declare module BABYLON.GLTF2 {
     interface ILoaderScene extends IScene, IArrayItem {
     }
     interface ILoaderSkin extends ISkin, IArrayItem {
-        _babylonSkeleton: Nullable<Skeleton>;
+        _babylonSkeleton?: Skeleton;
         _loaded?: Promise<void>;
     }
     interface ILoaderTexture extends ITexture, IArrayItem {
@@ -278,6 +281,10 @@ declare module BABYLON.GLTF2 {
 
 
 declare module BABYLON.GLTF2 {
+    interface MaterialConstructor<T extends Material> {
+        readonly prototype: T;
+        new (name: string, scene: Scene): T;
+    }
     class GLTFLoader implements IGLTFLoader {
         _gltf: ILoaderGLTF;
         _babylonScene: Scene;
@@ -288,6 +295,7 @@ declare module BABYLON.GLTF2 {
         private _rootUrl;
         private _rootBabylonMesh;
         private _defaultSampler;
+        private _defaultBabylonMaterials;
         private _progressCallback?;
         private _requests;
         private static _Names;
@@ -349,12 +357,12 @@ declare module BABYLON.GLTF2 {
         _loadBufferViewAsync(context: string, bufferView: ILoaderBufferView): Promise<ArrayBufferView>;
         private _loadAccessorAsync(context, accessor);
         private _buildArrayBuffer<T>(typedArray, data, byteOffset, count, numComponents, byteStride?);
-        private _getDefaultMaterial();
-        private _loadMaterialMetallicRoughnessPropertiesAsync(context, material);
-        _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Promise<void>;
-        _createMaterial(material: ILoaderMaterial): PBRMaterial;
-        _loadMaterialBasePropertiesAsync(context: string, material: ILoaderMaterial): Promise<void>;
-        _loadMaterialAlphaProperties(context: string, material: ILoaderMaterial): void;
+        private _getDefaultMaterial(drawMode);
+        private _loadMaterialMetallicRoughnessPropertiesAsync(context, material, babylonMaterial);
+        _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Promise<void>;
+        _createMaterial<T extends Material>(type: MaterialConstructor<T>, name: string, drawMode: number): T;
+        _loadMaterialBasePropertiesAsync(context: string, material: ILoaderMaterial, babylonMaterial: PBRMaterial): Promise<void>;
+        _loadMaterialAlphaProperties(context: string, material: ILoaderMaterial, babylonMaterial: PBRMaterial): void;
         _loadTextureAsync(context: string, textureInfo: ITextureInfo, assign: (texture: Texture) => void): Promise<void>;
         private _loadSampler(context, sampler);
         private _loadImageAsync(context, image);
@@ -365,6 +373,7 @@ declare module BABYLON.GLTF2 {
         private static _GetTextureSamplingMode(context, magFilter?, minFilter?);
         private static _GetNumComponents(context, type);
         private static _ValidateUri(uri);
+        private static _GetDrawMode(context, mode);
         private _compileMaterialsAsync();
         private _compileShadowGeneratorsAsync();
         private _clear();
@@ -387,7 +396,7 @@ declare module BABYLON.GLTF2 {
         /** Override this method to modify the default behavior for loading mesh primitive vertex data. */
         protected _loadVertexDataAsync(context: string, primitive: ILoaderMeshPrimitive, babylonMesh: Mesh): Nullable<Promise<VertexData>>;
         /** Override this method to modify the default behavior for loading materials. */
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         /** Override this method to modify the default behavior for loading uris. */
         protected _loadUriAsync(context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
         /** Helper method called by a loader extension to load an glTF extension. */
@@ -399,7 +408,7 @@ declare module BABYLON.GLTF2 {
         /** Helper method called by the loader to allow extensions to override loading mesh primitive vertex data. */
         static _LoadVertexDataAsync(loader: GLTFLoader, context: string, primitive: ILoaderMeshPrimitive, babylonMesh: Mesh): Nullable<Promise<VertexData>>;
         /** Helper method called by the loader to allow extensions to override loading materials. */
-        static _LoadMaterialAsync(loader: GLTFLoader, context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        static _LoadMaterialAsync(loader: GLTFLoader, context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         /** Helper method called by the loader to allow extensions to override loading uris. */
         static _LoadUriAsync(loader: GLTFLoader, context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
     }
@@ -418,7 +427,7 @@ declare module BABYLON.GLTF2.Extensions {
         private _loadingMaterialLOD;
         private _loadMaterialSignals;
         protected _loadNodeAsync(context: string, node: ILoaderNode): Nullable<Promise<void>>;
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         protected _loadUriAsync(context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
         /**
          * Gets an array of LOD properties from lowest to highest.
@@ -442,8 +451,8 @@ declare module BABYLON.GLTF2.Extensions {
 declare module BABYLON.GLTF2.Extensions {
     class KHR_materials_pbrSpecularGlossiness extends GLTFLoaderExtension {
         readonly name: string;
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
-        private _loadSpecularGlossinessPropertiesAsync(context, material, properties);
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        private _loadSpecularGlossinessPropertiesAsync(context, material, properties, babylonMaterial);
     }
 }
 

+ 103 - 92
dist/preview release/loaders/babylon.glTF2FileLoader.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -475,6 +476,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFFileLoader.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -498,11 +500,13 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderUtilities.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 /// <reference path="../../../../dist/babylon.glTF2Interface.d.ts"/>
 
 //# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -515,6 +519,7 @@ var BABYLON;
                 this._state = null;
                 this._extensions = {};
                 this._defaultSampler = {};
+                this._defaultBabylonMaterials = {};
                 this._requests = new Array();
                 this.coordinateSystemMode = BABYLON.GLTFLoaderCoordinateSystemMode.AUTO;
                 this.animationStartMode = BABYLON.GLTFLoaderAnimationStartMode.FIRST;
@@ -899,12 +904,13 @@ var BABYLON;
                     new BABYLON.Geometry(babylonMesh.name, _this._babylonScene, babylonVertexData, false, babylonMesh);
                     return _this._loadMorphTargetsAsync(context, primitive, babylonMesh, babylonVertexData);
                 }));
+                var babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
                 if (primitive.material == undefined) {
-                    babylonMesh.material = this._getDefaultMaterial();
+                    babylonMesh.material = this._getDefaultMaterial(babylonDrawMode);
                 }
                 else {
                     var material = GLTFLoader._GetProperty(context + "/material}", this._gltf.materials, primitive.material);
-                    promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, function (babylonMaterial) {
+                    promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, babylonDrawMode, function (babylonMaterial) {
                         babylonMesh.material = babylonMaterial;
                     }));
                 }
@@ -920,10 +926,6 @@ var BABYLON;
                 if (!attributes) {
                     throw new Error(context + ": Attributes are missing");
                 }
-                if (primitive.mode != undefined && primitive.mode !== 4 /* TRIANGLES */) {
-                    // TODO: handle other primitive modes
-                    throw new Error(context + ": Mode (" + primitive.mode + ") is not currently supported");
-                }
                 var promises = new Array();
                 var babylonVertexData = new BABYLON.VertexData();
                 if (primitive.indices == undefined) {
@@ -1307,19 +1309,9 @@ var BABYLON;
                             break;
                         }
                     }
-                    var keys;
-                    if (data.input.length === 1) {
-                        var key = getNextKey(0);
-                        keys = [
-                            { frame: key.frame, value: key.value },
-                            { frame: key.frame + 1, value: key.value }
-                        ];
-                    }
-                    else {
-                        keys = new Array(data.input.length);
-                        for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
-                            keys[frameIndex] = getNextKey(frameIndex);
-                        }
+                    var keys = new Array(data.input.length);
+                    for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
+                        keys[frameIndex] = getNextKey(frameIndex);
                     }
                     if (targetPath === "influence") {
                         var _loop_1 = function (targetIndex) {
@@ -1480,22 +1472,19 @@ var BABYLON;
                 }
                 return targetBuffer;
             };
-            GLTFLoader.prototype._getDefaultMaterial = function () {
-                var id = "__gltf_default";
-                var babylonMaterial = this._babylonScene.getMaterialByName(id);
+            GLTFLoader.prototype._getDefaultMaterial = function (drawMode) {
+                var babylonMaterial = this._defaultBabylonMaterials[drawMode];
                 if (!babylonMaterial) {
-                    babylonMaterial = new BABYLON.PBRMaterial(id, this._babylonScene);
+                    babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, "__gltf_default", drawMode);
                     babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_OPAQUE;
-                    babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
                     babylonMaterial.metallic = 1;
                     babylonMaterial.roughness = 1;
                     this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
                 }
                 return babylonMaterial;
             };
-            GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material) {
+            GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material, babylonMaterial) {
                 var promises = new Array();
-                var babylonMaterial = material._babylonMaterial;
                 // Ensure metallic workflow
                 babylonMaterial.metallic = 1;
                 babylonMaterial.roughness = 1;
@@ -1524,36 +1513,42 @@ var BABYLON;
                         babylonMaterial.useRoughnessFromMetallicTextureAlpha = false;
                     }
                 }
-                this._loadMaterialAlphaProperties(context, material);
+                this._loadMaterialAlphaProperties(context, material, babylonMaterial);
                 return Promise.all(promises).then(function () { });
             };
-            GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
-                var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, assign);
+            GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
+                var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, babylonDrawMode, assign);
                 if (promise) {
                     return promise;
                 }
-                material._babylonMeshes = material._babylonMeshes || [];
-                material._babylonMeshes.push(babylonMesh);
-                if (!material._loaded) {
+                material._babylonData = material._babylonData || {};
+                var babylonData = material._babylonData[babylonDrawMode];
+                if (!babylonData) {
                     var promises = new Array();
-                    var babylonMaterial = this._createMaterial(material);
-                    material._babylonMaterial = babylonMaterial;
-                    promises.push(this._loadMaterialBasePropertiesAsync(context, material));
-                    promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material));
+                    var name_3 = material.name || "materialSG_" + material._index;
+                    var babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, name_3, babylonDrawMode);
+                    promises.push(this._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
+                    promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material, babylonMaterial));
                     this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
-                    material._loaded = Promise.all(promises).then(function () { });
+                    babylonData = {
+                        material: babylonMaterial,
+                        meshes: [],
+                        loaded: Promise.all(promises).then(function () { })
+                    };
+                    material._babylonData[babylonDrawMode] = babylonData;
                 }
-                assign(material._babylonMaterial);
-                return material._loaded;
+                babylonData.meshes.push(babylonMesh);
+                assign(babylonData.material);
+                return babylonData.loaded;
             };
-            GLTFLoader.prototype._createMaterial = function (material) {
-                var babylonMaterial = new BABYLON.PBRMaterial(material.name || "material" + material._index, this._babylonScene);
+            GLTFLoader.prototype._createMaterial = function (type, name, drawMode) {
+                var babylonMaterial = new type(name, this._babylonScene);
                 babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
+                babylonMaterial.fillMode = drawMode;
                 return babylonMaterial;
             };
-            GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material) {
+            GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material, babylonMaterial) {
                 var promises = new Array();
-                var babylonMaterial = material._babylonMaterial;
                 babylonMaterial.emissiveColor = material.emissiveFactor ? BABYLON.Color3.FromArray(material.emissiveFactor) : new BABYLON.Color3(0, 0, 0);
                 if (material.doubleSided) {
                     babylonMaterial.backFaceCulling = false;
@@ -1585,8 +1580,7 @@ var BABYLON;
                 }
                 return Promise.all(promises).then(function () { });
             };
-            GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material) {
-                var babylonMaterial = material._babylonMaterial;
+            GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material, babylonMaterial) {
                 var alphaMode = material.alphaMode || "OPAQUE" /* OPAQUE */;
                 switch (alphaMode) {
                     case "OPAQUE" /* OPAQUE */: {
@@ -1596,15 +1590,6 @@ var BABYLON;
                     case "MASK" /* MASK */: {
                         babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_ALPHATEST;
                         babylonMaterial.alphaCutOff = (material.alphaCutoff == undefined ? 0.5 : material.alphaCutoff);
-                        if (babylonMaterial.alpha) {
-                            if (babylonMaterial.alpha === 0) {
-                                babylonMaterial.alphaCutOff = 1;
-                            }
-                            else {
-                                babylonMaterial.alphaCutOff /= babylonMaterial.alpha;
-                            }
-                            babylonMaterial.alpha = 1;
-                        }
                         if (babylonMaterial.albedoTexture) {
                             babylonMaterial.albedoTexture.hasAlpha = true;
                         }
@@ -1806,21 +1791,36 @@ var BABYLON;
             GLTFLoader._ValidateUri = function (uri) {
                 return (BABYLON.Tools.IsBase64(uri) || uri.indexOf("..") === -1);
             };
+            GLTFLoader._GetDrawMode = function (context, mode) {
+                mode = mode || 4 /* TRIANGLES */;
+                switch (mode) {
+                    case 0 /* POINTS */: return BABYLON.Material.PointListDrawMode;
+                    case 1 /* LINES */: return BABYLON.Material.LineListDrawMode;
+                    case 2 /* LINE_LOOP */: return BABYLON.Material.LineLoopDrawMode;
+                    case 3 /* LINE_STRIP */: return BABYLON.Material.LineStripDrawMode;
+                    case 4 /* TRIANGLES */: return BABYLON.Material.TriangleFillMode;
+                    case 5 /* TRIANGLE_STRIP */: return BABYLON.Material.TriangleStripDrawMode;
+                    case 6 /* TRIANGLE_FAN */: return BABYLON.Material.TriangleFanDrawMode;
+                }
+                throw new Error(context + ": Invalid mesh primitive mode (" + mode + ")");
+            };
             GLTFLoader.prototype._compileMaterialsAsync = function () {
                 var promises = new Array();
                 if (this._gltf.materials) {
                     for (var _i = 0, _a = this._gltf.materials; _i < _a.length; _i++) {
                         var material = _a[_i];
-                        var babylonMaterial = material._babylonMaterial;
-                        var babylonMeshes = material._babylonMeshes;
-                        if (babylonMaterial && babylonMeshes) {
-                            for (var _b = 0, babylonMeshes_1 = babylonMeshes; _b < babylonMeshes_1.length; _b++) {
-                                var babylonMesh = babylonMeshes_1[_b];
-                                // Ensure nonUniformScaling is set if necessary.
-                                babylonMesh.computeWorldMatrix(true);
-                                promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
-                                if (this.useClipPlane) {
-                                    promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
+                        if (material._babylonData) {
+                            for (var babylonDrawMode in material._babylonData) {
+                                var babylonData = material._babylonData[babylonDrawMode];
+                                for (var _b = 0, _c = babylonData.meshes; _b < _c.length; _b++) {
+                                    var babylonMesh = _c[_b];
+                                    // Ensure nonUniformScaling is set if necessary.
+                                    babylonMesh.computeWorldMatrix(true);
+                                    var babylonMaterial = babylonData.material;
+                                    promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
+                                    if (this.useClipPlane) {
+                                        promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
+                                    }
                                 }
                             }
                         }
@@ -1860,8 +1860,8 @@ var BABYLON;
                 delete this._gltf;
                 delete this._babylonScene;
                 this._completePromises.length = 0;
-                for (var name_3 in this._extensions) {
-                    this._extensions[name_3].dispose();
+                for (var name_4 in this._extensions) {
+                    this._extensions[name_4].dispose();
                 }
                 this._extensions = {};
                 delete this._rootBabylonMesh;
@@ -1872,8 +1872,8 @@ var BABYLON;
             };
             GLTFLoader.prototype._applyExtensions = function (actionAsync) {
                 for (var _i = 0, _a = GLTFLoader._Names; _i < _a.length; _i++) {
-                    var name_4 = _a[_i];
-                    var extension = this._extensions[name_4];
+                    var name_5 = _a[_i];
+                    var extension = this._extensions[name_5];
                     if (extension.enabled) {
                         var promise = actionAsync(extension);
                         if (promise) {
@@ -1894,6 +1894,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoader.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -1915,7 +1916,7 @@ var BABYLON;
             /** Override this method to modify the default behavior for loading mesh primitive vertex data. */
             GLTFLoaderExtension.prototype._loadVertexDataAsync = function (context, primitive, babylonMesh) { return null; };
             /** Override this method to modify the default behavior for loading materials. */
-            GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) { return null; };
+            GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) { return null; };
             /** Override this method to modify the default behavior for loading uris. */
             GLTFLoaderExtension.prototype._loadUriAsync = function (context, uri) { return null; };
             // #endregion
@@ -1952,8 +1953,8 @@ var BABYLON;
                 return loader._applyExtensions(function (extension) { return extension._loadVertexDataAsync(context, primitive, babylonMesh); });
             };
             /** Helper method called by the loader to allow extensions to override loading materials. */
-            GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, assign) {
-                return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, assign); });
+            GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, babylonDrawMode, assign) {
+                return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign); });
             };
             /** Helper method called by the loader to allow extensions to override loading uris. */
             GLTFLoaderExtension._LoadUriAsync = function (loader, context, uri) {
@@ -1967,6 +1968,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderExtension.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -2044,7 +2046,7 @@ var BABYLON;
                         return firstPromise;
                     });
                 };
-                MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
+                MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
                     var _this = this;
                     // Don't load material LODs if already loading a node LOD.
                     if (this._loadingNodeLOD) {
@@ -2061,13 +2063,14 @@ var BABYLON;
                                     _this._loadMaterialSignals[materialLOD._index] = new BABYLON.Deferred();
                                 }
                             }
-                            var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, indexLOD === 0 ? assign : function () { }).then(function () {
+                            var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, babylonDrawMode, indexLOD === 0 ? assign : function () { }).then(function () {
                                 if (indexLOD !== 0) {
-                                    assign(materialLOD._babylonMaterial);
-                                    var previousMaterialLOD = materialLODs[indexLOD - 1];
-                                    if (previousMaterialLOD._babylonMaterial) {
-                                        previousMaterialLOD._babylonMaterial.dispose();
-                                        delete previousMaterialLOD._babylonMaterial;
+                                    var babylonDataLOD = materialLOD._babylonData;
+                                    assign(babylonDataLOD[babylonDrawMode].material);
+                                    var previousBabylonDataLOD = materialLODs[indexLOD - 1]._babylonData;
+                                    if (previousBabylonDataLOD[babylonDrawMode]) {
+                                        previousBabylonDataLOD[babylonDrawMode].material.dispose();
+                                        delete previousBabylonDataLOD[babylonDrawMode];
                                     }
                                 }
                                 if (indexLOD !== materialLODs.length - 1) {
@@ -2136,6 +2139,7 @@ var BABYLON;
 
 //# sourceMappingURL=MSFT_lod.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -2230,6 +2234,7 @@ var BABYLON;
 
 //# sourceMappingURL=KHR_draco_mesh_compression.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -2256,27 +2261,32 @@ var BABYLON;
                     _this.name = NAME;
                     return _this;
                 }
-                KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
+                KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
                     var _this = this;
                     return this._loadExtensionAsync(context, material, function (context, extension) {
-                        material._babylonMeshes = material._babylonMeshes || [];
-                        material._babylonMeshes.push(babylonMesh);
-                        if (!material._loaded) {
+                        material._babylonData = material._babylonData || {};
+                        var babylonData = material._babylonData[babylonDrawMode];
+                        if (!babylonData) {
                             var promises = new Array();
-                            var babylonMaterial = _this._loader._createMaterial(material);
-                            material._babylonMaterial = babylonMaterial;
-                            promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material));
-                            promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension));
+                            var name_1 = material.name || "materialSG_" + material._index;
+                            var babylonMaterial = _this._loader._createMaterial(BABYLON.PBRMaterial, name_1, babylonDrawMode);
+                            promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
+                            promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension, babylonMaterial));
                             _this._loader.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
-                            material._loaded = Promise.all(promises).then(function () { });
+                            babylonData = {
+                                material: babylonMaterial,
+                                meshes: [],
+                                loaded: Promise.all(promises).then(function () { })
+                            };
+                            material._babylonData[babylonDrawMode] = babylonData;
                         }
-                        assign(material._babylonMaterial);
-                        return material._loaded;
+                        babylonData.meshes.push(babylonMesh);
+                        assign(babylonData.material);
+                        return babylonData.loaded;
                     });
                 };
-                KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties) {
+                KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties, babylonMaterial) {
                     var promises = new Array();
-                    var babylonMaterial = material._babylonMaterial;
                     if (properties.diffuseFactor) {
                         babylonMaterial.albedoColor = BABYLON.Color3.FromArray(properties.diffuseFactor);
                         babylonMaterial.alpha = properties.diffuseFactor[3];
@@ -2298,7 +2308,7 @@ var BABYLON;
                         babylonMaterial.reflectivityTexture.hasAlpha = true;
                         babylonMaterial.useMicroSurfaceFromReflectivityMapAlpha = true;
                     }
-                    this._loader._loadMaterialAlphaProperties(context, material);
+                    this._loader._loadMaterialAlphaProperties(context, material, babylonMaterial);
                     return Promise.all(promises).then(function () { });
                 };
                 return KHR_materials_pbrSpecularGlossiness;
@@ -2311,6 +2321,7 @@ var BABYLON;
 
 //# sourceMappingURL=KHR_materials_pbrSpecularGlossiness.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 2 - 2
dist/preview release/loaders/babylon.glTF2FileLoader.min.js


+ 36 - 27
dist/preview release/loaders/babylon.glTFFileLoader.d.ts

@@ -561,7 +561,7 @@ declare module BABYLON.GLTF1 {
         static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
         static LoadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: Nullable<ArrayBufferView>) => void, onError: (message: string) => void): void;
         static CreateTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: Nullable<ArrayBufferView>, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
-        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): void;
+        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string | ArrayBuffer) => void, onError?: (message: string) => void): void;
         static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
     }
     /**
@@ -586,14 +586,14 @@ declare module BABYLON.GLTF1 {
         onExtensionLoadedObservable: Observable<IGLTFLoaderExtension>;
         state: Nullable<GLTFLoaderState>;
         dispose(): void;
-        private _importMeshAsync(meshesNames, scene, data, rootUrl, onSuccess, onProgress, onError);
-        importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress: (event: SceneLoaderProgressEvent) => void): Promise<{
+        private _importMeshAsync(meshesNames, scene, data, rootUrl, onSuccess, onProgress?, onError?);
+        importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
             particleSystems: ParticleSystem[];
             skeletons: Skeleton[];
         }>;
-        private _loadAsync(scene, data, rootUrl, onSuccess, onProgress, onError);
-        loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress: (event: SceneLoaderProgressEvent) => void): Promise<void>;
+        private _loadAsync(scene, data, rootUrl, onSuccess, onProgress?, onError?);
+        loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<void>;
         private _loadShadersAsync(gltfRuntime, onload);
         private _loadBuffersAsync(gltfRuntime, onLoad, onProgress?);
         private _createNodes(gltfRuntime);
@@ -670,12 +670,12 @@ declare module BABYLON.GLTF1 {
         * Defines an override for loading the runtime
         * Return true to stop further extensions from loading the runtime
         */
-        loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): boolean;
+        loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): boolean;
         /**
          * Defines an onverride for creating gltf runtime
          * Return true to stop further extensions from creating the runtime
          */
-        loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): boolean;
+        loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): boolean;
         /**
         * Defines an override for loading buffers
         * Return true to stop further extensions from loading this buffer
@@ -701,11 +701,11 @@ declare module BABYLON.GLTF1 {
         * Return true to stop further extensions from loading this material
         */
         loadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): boolean;
-        static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): void;
-        static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): void;
+        static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): void;
+        static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): void;
         static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (bufferView: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
         static LoadTextureAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
-        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string) => void, onError: (message: string) => void): void;
+        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string | ArrayBuffer) => void, onError: (message: string) => void): void;
         static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
         private static LoadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);
         private static CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
@@ -755,7 +755,6 @@ declare module BABYLON.GLTF2 {
         _data?: Promise<TypedArray>;
     }
     interface ILoaderAnimationChannel extends IAnimationChannel, IArrayItem {
-        _babylonAnimationGroup: AnimationGroup;
     }
     interface ILoaderAnimationSamplerData {
         input: Float32Array;
@@ -768,7 +767,7 @@ declare module BABYLON.GLTF2 {
     interface ILoaderAnimation extends IAnimation, IArrayItem {
         channels: ILoaderAnimationChannel[];
         samplers: ILoaderAnimationSampler[];
-        _babylonAnimationGroup: Nullable<AnimationGroup>;
+        _babylonAnimationGroup?: AnimationGroup;
     }
     interface ILoaderBuffer extends IBuffer, IArrayItem {
         _data?: Promise<ArrayBufferView>;
@@ -782,9 +781,13 @@ declare module BABYLON.GLTF2 {
         _objectURL?: Promise<string>;
     }
     interface ILoaderMaterial extends IMaterial, IArrayItem {
-        _babylonMaterial?: Material;
-        _babylonMeshes?: AbstractMesh[];
-        _loaded?: Promise<void>;
+        _babylonData?: {
+            [drawMode: number]: {
+                material: Material;
+                meshes: AbstractMesh[];
+                loaded: Promise<void>;
+            };
+        };
     }
     interface ILoaderMesh extends IMesh, IArrayItem {
         primitives: ILoaderMeshPrimitive[];
@@ -810,7 +813,7 @@ declare module BABYLON.GLTF2 {
     interface ILoaderScene extends IScene, IArrayItem {
     }
     interface ILoaderSkin extends ISkin, IArrayItem {
-        _babylonSkeleton: Nullable<Skeleton>;
+        _babylonSkeleton?: Skeleton;
         _loaded?: Promise<void>;
     }
     interface ILoaderTexture extends ITexture, IArrayItem {
@@ -834,6 +837,10 @@ declare module BABYLON.GLTF2 {
 
 
 declare module BABYLON.GLTF2 {
+    interface MaterialConstructor<T extends Material> {
+        readonly prototype: T;
+        new (name: string, scene: Scene): T;
+    }
     class GLTFLoader implements IGLTFLoader {
         _gltf: ILoaderGLTF;
         _babylonScene: Scene;
@@ -844,6 +851,7 @@ declare module BABYLON.GLTF2 {
         private _rootUrl;
         private _rootBabylonMesh;
         private _defaultSampler;
+        private _defaultBabylonMaterials;
         private _progressCallback?;
         private _requests;
         private static _Names;
@@ -905,12 +913,12 @@ declare module BABYLON.GLTF2 {
         _loadBufferViewAsync(context: string, bufferView: ILoaderBufferView): Promise<ArrayBufferView>;
         private _loadAccessorAsync(context, accessor);
         private _buildArrayBuffer<T>(typedArray, data, byteOffset, count, numComponents, byteStride?);
-        private _getDefaultMaterial();
-        private _loadMaterialMetallicRoughnessPropertiesAsync(context, material);
-        _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Promise<void>;
-        _createMaterial(material: ILoaderMaterial): PBRMaterial;
-        _loadMaterialBasePropertiesAsync(context: string, material: ILoaderMaterial): Promise<void>;
-        _loadMaterialAlphaProperties(context: string, material: ILoaderMaterial): void;
+        private _getDefaultMaterial(drawMode);
+        private _loadMaterialMetallicRoughnessPropertiesAsync(context, material, babylonMaterial);
+        _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Promise<void>;
+        _createMaterial<T extends Material>(type: MaterialConstructor<T>, name: string, drawMode: number): T;
+        _loadMaterialBasePropertiesAsync(context: string, material: ILoaderMaterial, babylonMaterial: PBRMaterial): Promise<void>;
+        _loadMaterialAlphaProperties(context: string, material: ILoaderMaterial, babylonMaterial: PBRMaterial): void;
         _loadTextureAsync(context: string, textureInfo: ITextureInfo, assign: (texture: Texture) => void): Promise<void>;
         private _loadSampler(context, sampler);
         private _loadImageAsync(context, image);
@@ -921,6 +929,7 @@ declare module BABYLON.GLTF2 {
         private static _GetTextureSamplingMode(context, magFilter?, minFilter?);
         private static _GetNumComponents(context, type);
         private static _ValidateUri(uri);
+        private static _GetDrawMode(context, mode);
         private _compileMaterialsAsync();
         private _compileShadowGeneratorsAsync();
         private _clear();
@@ -943,7 +952,7 @@ declare module BABYLON.GLTF2 {
         /** Override this method to modify the default behavior for loading mesh primitive vertex data. */
         protected _loadVertexDataAsync(context: string, primitive: ILoaderMeshPrimitive, babylonMesh: Mesh): Nullable<Promise<VertexData>>;
         /** Override this method to modify the default behavior for loading materials. */
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         /** Override this method to modify the default behavior for loading uris. */
         protected _loadUriAsync(context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
         /** Helper method called by a loader extension to load an glTF extension. */
@@ -955,7 +964,7 @@ declare module BABYLON.GLTF2 {
         /** Helper method called by the loader to allow extensions to override loading mesh primitive vertex data. */
         static _LoadVertexDataAsync(loader: GLTFLoader, context: string, primitive: ILoaderMeshPrimitive, babylonMesh: Mesh): Nullable<Promise<VertexData>>;
         /** Helper method called by the loader to allow extensions to override loading materials. */
-        static _LoadMaterialAsync(loader: GLTFLoader, context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        static _LoadMaterialAsync(loader: GLTFLoader, context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         /** Helper method called by the loader to allow extensions to override loading uris. */
         static _LoadUriAsync(loader: GLTFLoader, context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
     }
@@ -974,7 +983,7 @@ declare module BABYLON.GLTF2.Extensions {
         private _loadingMaterialLOD;
         private _loadMaterialSignals;
         protected _loadNodeAsync(context: string, node: ILoaderNode): Nullable<Promise<void>>;
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         protected _loadUriAsync(context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
         /**
          * Gets an array of LOD properties from lowest to highest.
@@ -998,8 +1007,8 @@ declare module BABYLON.GLTF2.Extensions {
 declare module BABYLON.GLTF2.Extensions {
     class KHR_materials_pbrSpecularGlossiness extends GLTFLoaderExtension {
         readonly name: string;
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
-        private _loadSpecularGlossinessPropertiesAsync(context, material, properties);
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        private _loadSpecularGlossinessPropertiesAsync(context, material, properties, babylonMaterial);
     }
 }
 

+ 127 - 95
dist/preview release/loaders/babylon.glTFFileLoader.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -475,6 +476,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFFileLoader.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -572,6 +574,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -590,6 +593,9 @@ var BABYLON;
         var Tokenizer = /** @class */ (function () {
             function Tokenizer(toParse) {
                 this._pos = 0;
+                this.currentToken = ETokenType.UNKNOWN;
+                this.currentIdentifier = "";
+                this.currentString = "";
                 this.isLetterOrDigitPattern = /^[a-zA-Z0-9]+$/;
                 this._toParse = toParse;
                 this._maxPos = toParse.length;
@@ -1702,11 +1708,13 @@ var BABYLON;
                 var shader = gltfRuntime.shaders[id];
                 if (BABYLON.Tools.IsBase64(shader.uri)) {
                     var shaderString = atob(shader.uri.split(",")[1]);
-                    onSuccess(shaderString);
+                    if (onSuccess) {
+                        onSuccess(shaderString);
+                    }
                 }
                 else {
                     BABYLON.Tools.LoadFile(gltfRuntime.rootUrl + shader.uri, onSuccess, undefined, undefined, false, function (request) {
-                        if (request) {
+                        if (request && onError) {
                             onError(request.status + " " + request.statusText);
                         }
                     });
@@ -1980,6 +1988,9 @@ var BABYLON;
                 var hasShaders = false;
                 var processShader = function (sha, shader) {
                     GLTF1.GLTFLoaderExtension.LoadShaderStringAsync(gltfRuntime, sha, function (shaderString) {
+                        if (shaderString instanceof ArrayBuffer) {
+                            return;
+                        }
                         gltfRuntime.loadedShaderCount++;
                         if (shaderString) {
                             BABYLON.Effect.ShadersStore[sha + (shader.type === GLTF1.EShaderType.VERTEX ? "VertexShader" : "PixelShader")] = shaderString;
@@ -2067,6 +2078,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoader.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -2302,6 +2314,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderUtils.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -2375,6 +2388,9 @@ var BABYLON;
                     return loaderExtension.loadRuntimeAsync(scene, data, rootUrl, onSuccess, onError);
                 }, function () {
                     setTimeout(function () {
+                        if (!onSuccess) {
+                            return;
+                        }
                         onSuccess(GLTF1.GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));
                     });
                 });
@@ -2396,7 +2412,11 @@ var BABYLON;
                 });
             };
             GLTFLoaderExtension.LoadTextureAsync = function (gltfRuntime, id, onSuccess, onError) {
-                GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) { return GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError); }, onError);
+                GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) {
+                    if (buffer) {
+                        GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
+                    }
+                }, onError);
             };
             GLTFLoaderExtension.LoadShaderStringAsync = function (gltfRuntime, id, onSuccess, onError) {
                 GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
@@ -2443,6 +2463,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderExtension.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -2520,6 +2541,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFBinaryExtension.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -2652,6 +2674,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFMaterialsCommonExtension.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -2675,11 +2698,13 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderUtilities.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 /// <reference path="../../../../dist/babylon.glTF2Interface.d.ts"/>
 
 //# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -2692,6 +2717,7 @@ var BABYLON;
                 this._state = null;
                 this._extensions = {};
                 this._defaultSampler = {};
+                this._defaultBabylonMaterials = {};
                 this._requests = new Array();
                 this.coordinateSystemMode = BABYLON.GLTFLoaderCoordinateSystemMode.AUTO;
                 this.animationStartMode = BABYLON.GLTFLoaderAnimationStartMode.FIRST;
@@ -3076,12 +3102,13 @@ var BABYLON;
                     new BABYLON.Geometry(babylonMesh.name, _this._babylonScene, babylonVertexData, false, babylonMesh);
                     return _this._loadMorphTargetsAsync(context, primitive, babylonMesh, babylonVertexData);
                 }));
+                var babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
                 if (primitive.material == undefined) {
-                    babylonMesh.material = this._getDefaultMaterial();
+                    babylonMesh.material = this._getDefaultMaterial(babylonDrawMode);
                 }
                 else {
                     var material = GLTFLoader._GetProperty(context + "/material}", this._gltf.materials, primitive.material);
-                    promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, function (babylonMaterial) {
+                    promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, babylonDrawMode, function (babylonMaterial) {
                         babylonMesh.material = babylonMaterial;
                     }));
                 }
@@ -3097,10 +3124,6 @@ var BABYLON;
                 if (!attributes) {
                     throw new Error(context + ": Attributes are missing");
                 }
-                if (primitive.mode != undefined && primitive.mode !== 4 /* TRIANGLES */) {
-                    // TODO: handle other primitive modes
-                    throw new Error(context + ": Mode (" + primitive.mode + ") is not currently supported");
-                }
                 var promises = new Array();
                 var babylonVertexData = new BABYLON.VertexData();
                 if (primitive.indices == undefined) {
@@ -3484,19 +3507,9 @@ var BABYLON;
                             break;
                         }
                     }
-                    var keys;
-                    if (data.input.length === 1) {
-                        var key = getNextKey(0);
-                        keys = [
-                            { frame: key.frame, value: key.value },
-                            { frame: key.frame + 1, value: key.value }
-                        ];
-                    }
-                    else {
-                        keys = new Array(data.input.length);
-                        for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
-                            keys[frameIndex] = getNextKey(frameIndex);
-                        }
+                    var keys = new Array(data.input.length);
+                    for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
+                        keys[frameIndex] = getNextKey(frameIndex);
                     }
                     if (targetPath === "influence") {
                         var _loop_1 = function (targetIndex) {
@@ -3657,22 +3670,19 @@ var BABYLON;
                 }
                 return targetBuffer;
             };
-            GLTFLoader.prototype._getDefaultMaterial = function () {
-                var id = "__gltf_default";
-                var babylonMaterial = this._babylonScene.getMaterialByName(id);
+            GLTFLoader.prototype._getDefaultMaterial = function (drawMode) {
+                var babylonMaterial = this._defaultBabylonMaterials[drawMode];
                 if (!babylonMaterial) {
-                    babylonMaterial = new BABYLON.PBRMaterial(id, this._babylonScene);
+                    babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, "__gltf_default", drawMode);
                     babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_OPAQUE;
-                    babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
                     babylonMaterial.metallic = 1;
                     babylonMaterial.roughness = 1;
                     this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
                 }
                 return babylonMaterial;
             };
-            GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material) {
+            GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material, babylonMaterial) {
                 var promises = new Array();
-                var babylonMaterial = material._babylonMaterial;
                 // Ensure metallic workflow
                 babylonMaterial.metallic = 1;
                 babylonMaterial.roughness = 1;
@@ -3701,36 +3711,42 @@ var BABYLON;
                         babylonMaterial.useRoughnessFromMetallicTextureAlpha = false;
                     }
                 }
-                this._loadMaterialAlphaProperties(context, material);
+                this._loadMaterialAlphaProperties(context, material, babylonMaterial);
                 return Promise.all(promises).then(function () { });
             };
-            GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
-                var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, assign);
+            GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
+                var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, babylonDrawMode, assign);
                 if (promise) {
                     return promise;
                 }
-                material._babylonMeshes = material._babylonMeshes || [];
-                material._babylonMeshes.push(babylonMesh);
-                if (!material._loaded) {
+                material._babylonData = material._babylonData || {};
+                var babylonData = material._babylonData[babylonDrawMode];
+                if (!babylonData) {
                     var promises = new Array();
-                    var babylonMaterial = this._createMaterial(material);
-                    material._babylonMaterial = babylonMaterial;
-                    promises.push(this._loadMaterialBasePropertiesAsync(context, material));
-                    promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material));
+                    var name_3 = material.name || "materialSG_" + material._index;
+                    var babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, name_3, babylonDrawMode);
+                    promises.push(this._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
+                    promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material, babylonMaterial));
                     this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
-                    material._loaded = Promise.all(promises).then(function () { });
+                    babylonData = {
+                        material: babylonMaterial,
+                        meshes: [],
+                        loaded: Promise.all(promises).then(function () { })
+                    };
+                    material._babylonData[babylonDrawMode] = babylonData;
                 }
-                assign(material._babylonMaterial);
-                return material._loaded;
+                babylonData.meshes.push(babylonMesh);
+                assign(babylonData.material);
+                return babylonData.loaded;
             };
-            GLTFLoader.prototype._createMaterial = function (material) {
-                var babylonMaterial = new BABYLON.PBRMaterial(material.name || "material" + material._index, this._babylonScene);
+            GLTFLoader.prototype._createMaterial = function (type, name, drawMode) {
+                var babylonMaterial = new type(name, this._babylonScene);
                 babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
+                babylonMaterial.fillMode = drawMode;
                 return babylonMaterial;
             };
-            GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material) {
+            GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material, babylonMaterial) {
                 var promises = new Array();
-                var babylonMaterial = material._babylonMaterial;
                 babylonMaterial.emissiveColor = material.emissiveFactor ? BABYLON.Color3.FromArray(material.emissiveFactor) : new BABYLON.Color3(0, 0, 0);
                 if (material.doubleSided) {
                     babylonMaterial.backFaceCulling = false;
@@ -3762,8 +3778,7 @@ var BABYLON;
                 }
                 return Promise.all(promises).then(function () { });
             };
-            GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material) {
-                var babylonMaterial = material._babylonMaterial;
+            GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material, babylonMaterial) {
                 var alphaMode = material.alphaMode || "OPAQUE" /* OPAQUE */;
                 switch (alphaMode) {
                     case "OPAQUE" /* OPAQUE */: {
@@ -3773,15 +3788,6 @@ var BABYLON;
                     case "MASK" /* MASK */: {
                         babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_ALPHATEST;
                         babylonMaterial.alphaCutOff = (material.alphaCutoff == undefined ? 0.5 : material.alphaCutoff);
-                        if (babylonMaterial.alpha) {
-                            if (babylonMaterial.alpha === 0) {
-                                babylonMaterial.alphaCutOff = 1;
-                            }
-                            else {
-                                babylonMaterial.alphaCutOff /= babylonMaterial.alpha;
-                            }
-                            babylonMaterial.alpha = 1;
-                        }
                         if (babylonMaterial.albedoTexture) {
                             babylonMaterial.albedoTexture.hasAlpha = true;
                         }
@@ -3983,21 +3989,36 @@ var BABYLON;
             GLTFLoader._ValidateUri = function (uri) {
                 return (BABYLON.Tools.IsBase64(uri) || uri.indexOf("..") === -1);
             };
+            GLTFLoader._GetDrawMode = function (context, mode) {
+                mode = mode || 4 /* TRIANGLES */;
+                switch (mode) {
+                    case 0 /* POINTS */: return BABYLON.Material.PointListDrawMode;
+                    case 1 /* LINES */: return BABYLON.Material.LineListDrawMode;
+                    case 2 /* LINE_LOOP */: return BABYLON.Material.LineLoopDrawMode;
+                    case 3 /* LINE_STRIP */: return BABYLON.Material.LineStripDrawMode;
+                    case 4 /* TRIANGLES */: return BABYLON.Material.TriangleFillMode;
+                    case 5 /* TRIANGLE_STRIP */: return BABYLON.Material.TriangleStripDrawMode;
+                    case 6 /* TRIANGLE_FAN */: return BABYLON.Material.TriangleFanDrawMode;
+                }
+                throw new Error(context + ": Invalid mesh primitive mode (" + mode + ")");
+            };
             GLTFLoader.prototype._compileMaterialsAsync = function () {
                 var promises = new Array();
                 if (this._gltf.materials) {
                     for (var _i = 0, _a = this._gltf.materials; _i < _a.length; _i++) {
                         var material = _a[_i];
-                        var babylonMaterial = material._babylonMaterial;
-                        var babylonMeshes = material._babylonMeshes;
-                        if (babylonMaterial && babylonMeshes) {
-                            for (var _b = 0, babylonMeshes_1 = babylonMeshes; _b < babylonMeshes_1.length; _b++) {
-                                var babylonMesh = babylonMeshes_1[_b];
-                                // Ensure nonUniformScaling is set if necessary.
-                                babylonMesh.computeWorldMatrix(true);
-                                promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
-                                if (this.useClipPlane) {
-                                    promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
+                        if (material._babylonData) {
+                            for (var babylonDrawMode in material._babylonData) {
+                                var babylonData = material._babylonData[babylonDrawMode];
+                                for (var _b = 0, _c = babylonData.meshes; _b < _c.length; _b++) {
+                                    var babylonMesh = _c[_b];
+                                    // Ensure nonUniformScaling is set if necessary.
+                                    babylonMesh.computeWorldMatrix(true);
+                                    var babylonMaterial = babylonData.material;
+                                    promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
+                                    if (this.useClipPlane) {
+                                        promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
+                                    }
                                 }
                             }
                         }
@@ -4037,8 +4058,8 @@ var BABYLON;
                 delete this._gltf;
                 delete this._babylonScene;
                 this._completePromises.length = 0;
-                for (var name_3 in this._extensions) {
-                    this._extensions[name_3].dispose();
+                for (var name_4 in this._extensions) {
+                    this._extensions[name_4].dispose();
                 }
                 this._extensions = {};
                 delete this._rootBabylonMesh;
@@ -4049,8 +4070,8 @@ var BABYLON;
             };
             GLTFLoader.prototype._applyExtensions = function (actionAsync) {
                 for (var _i = 0, _a = GLTFLoader._Names; _i < _a.length; _i++) {
-                    var name_4 = _a[_i];
-                    var extension = this._extensions[name_4];
+                    var name_5 = _a[_i];
+                    var extension = this._extensions[name_5];
                     if (extension.enabled) {
                         var promise = actionAsync(extension);
                         if (promise) {
@@ -4071,6 +4092,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoader.js.map
 
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -4092,7 +4114,7 @@ var BABYLON;
             /** Override this method to modify the default behavior for loading mesh primitive vertex data. */
             GLTFLoaderExtension.prototype._loadVertexDataAsync = function (context, primitive, babylonMesh) { return null; };
             /** Override this method to modify the default behavior for loading materials. */
-            GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) { return null; };
+            GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) { return null; };
             /** Override this method to modify the default behavior for loading uris. */
             GLTFLoaderExtension.prototype._loadUriAsync = function (context, uri) { return null; };
             // #endregion
@@ -4129,8 +4151,8 @@ var BABYLON;
                 return loader._applyExtensions(function (extension) { return extension._loadVertexDataAsync(context, primitive, babylonMesh); });
             };
             /** Helper method called by the loader to allow extensions to override loading materials. */
-            GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, assign) {
-                return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, assign); });
+            GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, babylonDrawMode, assign) {
+                return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign); });
             };
             /** Helper method called by the loader to allow extensions to override loading uris. */
             GLTFLoaderExtension._LoadUriAsync = function (loader, context, uri) {
@@ -4144,6 +4166,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderExtension.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -4221,7 +4244,7 @@ var BABYLON;
                         return firstPromise;
                     });
                 };
-                MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
+                MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
                     var _this = this;
                     // Don't load material LODs if already loading a node LOD.
                     if (this._loadingNodeLOD) {
@@ -4238,13 +4261,14 @@ var BABYLON;
                                     _this._loadMaterialSignals[materialLOD._index] = new BABYLON.Deferred();
                                 }
                             }
-                            var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, indexLOD === 0 ? assign : function () { }).then(function () {
+                            var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, babylonDrawMode, indexLOD === 0 ? assign : function () { }).then(function () {
                                 if (indexLOD !== 0) {
-                                    assign(materialLOD._babylonMaterial);
-                                    var previousMaterialLOD = materialLODs[indexLOD - 1];
-                                    if (previousMaterialLOD._babylonMaterial) {
-                                        previousMaterialLOD._babylonMaterial.dispose();
-                                        delete previousMaterialLOD._babylonMaterial;
+                                    var babylonDataLOD = materialLOD._babylonData;
+                                    assign(babylonDataLOD[babylonDrawMode].material);
+                                    var previousBabylonDataLOD = materialLODs[indexLOD - 1]._babylonData;
+                                    if (previousBabylonDataLOD[babylonDrawMode]) {
+                                        previousBabylonDataLOD[babylonDrawMode].material.dispose();
+                                        delete previousBabylonDataLOD[babylonDrawMode];
                                     }
                                 }
                                 if (indexLOD !== materialLODs.length - 1) {
@@ -4313,6 +4337,7 @@ var BABYLON;
 
 //# sourceMappingURL=MSFT_lod.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -4407,6 +4432,7 @@ var BABYLON;
 
 //# sourceMappingURL=KHR_draco_mesh_compression.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||
@@ -4433,27 +4459,32 @@ var BABYLON;
                     _this.name = NAME;
                     return _this;
                 }
-                KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
+                KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
                     var _this = this;
                     return this._loadExtensionAsync(context, material, function (context, extension) {
-                        material._babylonMeshes = material._babylonMeshes || [];
-                        material._babylonMeshes.push(babylonMesh);
-                        if (!material._loaded) {
+                        material._babylonData = material._babylonData || {};
+                        var babylonData = material._babylonData[babylonDrawMode];
+                        if (!babylonData) {
                             var promises = new Array();
-                            var babylonMaterial = _this._loader._createMaterial(material);
-                            material._babylonMaterial = babylonMaterial;
-                            promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material));
-                            promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension));
+                            var name_1 = material.name || "materialSG_" + material._index;
+                            var babylonMaterial = _this._loader._createMaterial(BABYLON.PBRMaterial, name_1, babylonDrawMode);
+                            promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
+                            promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension, babylonMaterial));
                             _this._loader.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
-                            material._loaded = Promise.all(promises).then(function () { });
+                            babylonData = {
+                                material: babylonMaterial,
+                                meshes: [],
+                                loaded: Promise.all(promises).then(function () { })
+                            };
+                            material._babylonData[babylonDrawMode] = babylonData;
                         }
-                        assign(material._babylonMaterial);
-                        return material._loaded;
+                        babylonData.meshes.push(babylonMesh);
+                        assign(babylonData.material);
+                        return babylonData.loaded;
                     });
                 };
-                KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties) {
+                KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties, babylonMaterial) {
                     var promises = new Array();
-                    var babylonMaterial = material._babylonMaterial;
                     if (properties.diffuseFactor) {
                         babylonMaterial.albedoColor = BABYLON.Color3.FromArray(properties.diffuseFactor);
                         babylonMaterial.alpha = properties.diffuseFactor[3];
@@ -4475,7 +4506,7 @@ var BABYLON;
                         babylonMaterial.reflectivityTexture.hasAlpha = true;
                         babylonMaterial.useMicroSurfaceFromReflectivityMapAlpha = true;
                     }
-                    this._loader._loadMaterialAlphaProperties(context, material);
+                    this._loader._loadMaterialAlphaProperties(context, material, babylonMaterial);
                     return Promise.all(promises).then(function () { });
                 };
                 return KHR_materials_pbrSpecularGlossiness;
@@ -4488,6 +4519,7 @@ var BABYLON;
 
 //# sourceMappingURL=KHR_materials_pbrSpecularGlossiness.js.map
 
+"use strict";
 /// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 3
dist/preview release/loaders/babylon.glTFFileLoader.min.js


+ 1 - 1
dist/preview release/loaders/babylon.objFileLoader.d.ts

@@ -15,7 +15,7 @@ declare module BABYLON {
          * @param data
          * @param rootUrl
          */
-        parseMTL(scene: BABYLON.Scene, data: string, rootUrl: string): void;
+        parseMTL(scene: BABYLON.Scene, data: string | ArrayBuffer, rootUrl: string): void;
         /**
          * Gets the texture for the material.
          *

+ 4 - 0
dist/preview release/loaders/babylon.objFileLoader.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -20,6 +21,9 @@ var BABYLON;
          * @param rootUrl
          */
         MTLFileLoader.prototype.parseMTL = function (scene, data, rootUrl) {
+            if (data instanceof ArrayBuffer) {
+                return;
+            }
             //Split the lines from the file
             var lines = data.split('\n');
             //Space char

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/loaders/babylon.objFileLoader.min.js


+ 1 - 0
dist/preview release/loaders/babylon.stlFileLoader.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/loaders/babylon.stlFileLoader.min.js


+ 133 - 96
dist/preview release/loaders/babylonjs.loaders.js

@@ -27,7 +27,8 @@ var __extends = (this && this.__extends) || (function () {
         root["BABYLON"] = factory(root["BABYLON"]);
     }
 })(this, function(BABYLON) {
-    
+    "use strict";
+
 var BABYLON;
 (function (BABYLON) {
     var STLFileLoader = /** @class */ (function () {
@@ -198,6 +199,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.stlFileLoader.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -220,6 +222,9 @@ var BABYLON;
          * @param rootUrl
          */
         MTLFileLoader.prototype.parseMTL = function (scene, data, rootUrl) {
+            if (data instanceof ArrayBuffer) {
+                return;
+            }
             //Split the lines from the file
             var lines = data.split('\n');
             //Space char
@@ -994,6 +999,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.objFileLoader.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -1471,6 +1477,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFFileLoader.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -1568,6 +1575,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -1586,6 +1594,9 @@ var BABYLON;
         var Tokenizer = /** @class */ (function () {
             function Tokenizer(toParse) {
                 this._pos = 0;
+                this.currentToken = ETokenType.UNKNOWN;
+                this.currentIdentifier = "";
+                this.currentString = "";
                 this.isLetterOrDigitPattern = /^[a-zA-Z0-9]+$/;
                 this._toParse = toParse;
                 this._maxPos = toParse.length;
@@ -2698,11 +2709,13 @@ var BABYLON;
                 var shader = gltfRuntime.shaders[id];
                 if (BABYLON.Tools.IsBase64(shader.uri)) {
                     var shaderString = atob(shader.uri.split(",")[1]);
-                    onSuccess(shaderString);
+                    if (onSuccess) {
+                        onSuccess(shaderString);
+                    }
                 }
                 else {
                     BABYLON.Tools.LoadFile(gltfRuntime.rootUrl + shader.uri, onSuccess, undefined, undefined, false, function (request) {
-                        if (request) {
+                        if (request && onError) {
                             onError(request.status + " " + request.statusText);
                         }
                     });
@@ -2976,6 +2989,9 @@ var BABYLON;
                 var hasShaders = false;
                 var processShader = function (sha, shader) {
                     GLTF1.GLTFLoaderExtension.LoadShaderStringAsync(gltfRuntime, sha, function (shaderString) {
+                        if (shaderString instanceof ArrayBuffer) {
+                            return;
+                        }
                         gltfRuntime.loadedShaderCount++;
                         if (shaderString) {
                             BABYLON.Effect.ShadersStore[sha + (shader.type === GLTF1.EShaderType.VERTEX ? "VertexShader" : "PixelShader")] = shaderString;
@@ -3063,6 +3079,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoader.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -3298,6 +3315,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderUtils.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -3371,6 +3389,9 @@ var BABYLON;
                     return loaderExtension.loadRuntimeAsync(scene, data, rootUrl, onSuccess, onError);
                 }, function () {
                     setTimeout(function () {
+                        if (!onSuccess) {
+                            return;
+                        }
                         onSuccess(GLTF1.GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));
                     });
                 });
@@ -3392,7 +3413,11 @@ var BABYLON;
                 });
             };
             GLTFLoaderExtension.LoadTextureAsync = function (gltfRuntime, id, onSuccess, onError) {
-                GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) { return GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError); }, onError);
+                GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) {
+                    if (buffer) {
+                        GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
+                    }
+                }, onError);
             };
             GLTFLoaderExtension.LoadShaderStringAsync = function (gltfRuntime, id, onSuccess, onError) {
                 GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
@@ -3439,6 +3464,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderExtension.js.map
 
+"use strict";
 
 
 var BABYLON;
@@ -3507,6 +3533,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFBinaryExtension.js.map
 
+"use strict";
 
 
 var BABYLON;
@@ -3630,6 +3657,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFMaterialsCommonExtension.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -3653,11 +3681,13 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderUtilities.js.map
 
+"use strict";
 
 
 
 //# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -3670,6 +3700,7 @@ var BABYLON;
                 this._state = null;
                 this._extensions = {};
                 this._defaultSampler = {};
+                this._defaultBabylonMaterials = {};
                 this._requests = new Array();
                 this.coordinateSystemMode = BABYLON.GLTFLoaderCoordinateSystemMode.AUTO;
                 this.animationStartMode = BABYLON.GLTFLoaderAnimationStartMode.FIRST;
@@ -4054,12 +4085,13 @@ var BABYLON;
                     new BABYLON.Geometry(babylonMesh.name, _this._babylonScene, babylonVertexData, false, babylonMesh);
                     return _this._loadMorphTargetsAsync(context, primitive, babylonMesh, babylonVertexData);
                 }));
+                var babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
                 if (primitive.material == undefined) {
-                    babylonMesh.material = this._getDefaultMaterial();
+                    babylonMesh.material = this._getDefaultMaterial(babylonDrawMode);
                 }
                 else {
                     var material = GLTFLoader._GetProperty(context + "/material}", this._gltf.materials, primitive.material);
-                    promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, function (babylonMaterial) {
+                    promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, babylonDrawMode, function (babylonMaterial) {
                         babylonMesh.material = babylonMaterial;
                     }));
                 }
@@ -4075,10 +4107,6 @@ var BABYLON;
                 if (!attributes) {
                     throw new Error(context + ": Attributes are missing");
                 }
-                if (primitive.mode != undefined && primitive.mode !== 4 /* TRIANGLES */) {
-                    // TODO: handle other primitive modes
-                    throw new Error(context + ": Mode (" + primitive.mode + ") is not currently supported");
-                }
                 var promises = new Array();
                 var babylonVertexData = new BABYLON.VertexData();
                 if (primitive.indices == undefined) {
@@ -4462,19 +4490,9 @@ var BABYLON;
                             break;
                         }
                     }
-                    var keys;
-                    if (data.input.length === 1) {
-                        var key = getNextKey(0);
-                        keys = [
-                            { frame: key.frame, value: key.value },
-                            { frame: key.frame + 1, value: key.value }
-                        ];
-                    }
-                    else {
-                        keys = new Array(data.input.length);
-                        for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
-                            keys[frameIndex] = getNextKey(frameIndex);
-                        }
+                    var keys = new Array(data.input.length);
+                    for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
+                        keys[frameIndex] = getNextKey(frameIndex);
                     }
                     if (targetPath === "influence") {
                         var _loop_1 = function (targetIndex) {
@@ -4635,22 +4653,19 @@ var BABYLON;
                 }
                 return targetBuffer;
             };
-            GLTFLoader.prototype._getDefaultMaterial = function () {
-                var id = "__gltf_default";
-                var babylonMaterial = this._babylonScene.getMaterialByName(id);
+            GLTFLoader.prototype._getDefaultMaterial = function (drawMode) {
+                var babylonMaterial = this._defaultBabylonMaterials[drawMode];
                 if (!babylonMaterial) {
-                    babylonMaterial = new BABYLON.PBRMaterial(id, this._babylonScene);
+                    babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, "__gltf_default", drawMode);
                     babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_OPAQUE;
-                    babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
                     babylonMaterial.metallic = 1;
                     babylonMaterial.roughness = 1;
                     this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
                 }
                 return babylonMaterial;
             };
-            GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material) {
+            GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material, babylonMaterial) {
                 var promises = new Array();
-                var babylonMaterial = material._babylonMaterial;
                 // Ensure metallic workflow
                 babylonMaterial.metallic = 1;
                 babylonMaterial.roughness = 1;
@@ -4679,36 +4694,42 @@ var BABYLON;
                         babylonMaterial.useRoughnessFromMetallicTextureAlpha = false;
                     }
                 }
-                this._loadMaterialAlphaProperties(context, material);
+                this._loadMaterialAlphaProperties(context, material, babylonMaterial);
                 return Promise.all(promises).then(function () { });
             };
-            GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
-                var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, assign);
+            GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
+                var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, babylonDrawMode, assign);
                 if (promise) {
                     return promise;
                 }
-                material._babylonMeshes = material._babylonMeshes || [];
-                material._babylonMeshes.push(babylonMesh);
-                if (!material._loaded) {
+                material._babylonData = material._babylonData || {};
+                var babylonData = material._babylonData[babylonDrawMode];
+                if (!babylonData) {
                     var promises = new Array();
-                    var babylonMaterial = this._createMaterial(material);
-                    material._babylonMaterial = babylonMaterial;
-                    promises.push(this._loadMaterialBasePropertiesAsync(context, material));
-                    promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material));
+                    var name_3 = material.name || "materialSG_" + material._index;
+                    var babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, name_3, babylonDrawMode);
+                    promises.push(this._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
+                    promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material, babylonMaterial));
                     this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
-                    material._loaded = Promise.all(promises).then(function () { });
+                    babylonData = {
+                        material: babylonMaterial,
+                        meshes: [],
+                        loaded: Promise.all(promises).then(function () { })
+                    };
+                    material._babylonData[babylonDrawMode] = babylonData;
                 }
-                assign(material._babylonMaterial);
-                return material._loaded;
+                babylonData.meshes.push(babylonMesh);
+                assign(babylonData.material);
+                return babylonData.loaded;
             };
-            GLTFLoader.prototype._createMaterial = function (material) {
-                var babylonMaterial = new BABYLON.PBRMaterial(material.name || "material" + material._index, this._babylonScene);
+            GLTFLoader.prototype._createMaterial = function (type, name, drawMode) {
+                var babylonMaterial = new type(name, this._babylonScene);
                 babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
+                babylonMaterial.fillMode = drawMode;
                 return babylonMaterial;
             };
-            GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material) {
+            GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material, babylonMaterial) {
                 var promises = new Array();
-                var babylonMaterial = material._babylonMaterial;
                 babylonMaterial.emissiveColor = material.emissiveFactor ? BABYLON.Color3.FromArray(material.emissiveFactor) : new BABYLON.Color3(0, 0, 0);
                 if (material.doubleSided) {
                     babylonMaterial.backFaceCulling = false;
@@ -4740,8 +4761,7 @@ var BABYLON;
                 }
                 return Promise.all(promises).then(function () { });
             };
-            GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material) {
-                var babylonMaterial = material._babylonMaterial;
+            GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material, babylonMaterial) {
                 var alphaMode = material.alphaMode || "OPAQUE" /* OPAQUE */;
                 switch (alphaMode) {
                     case "OPAQUE" /* OPAQUE */: {
@@ -4751,15 +4771,6 @@ var BABYLON;
                     case "MASK" /* MASK */: {
                         babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_ALPHATEST;
                         babylonMaterial.alphaCutOff = (material.alphaCutoff == undefined ? 0.5 : material.alphaCutoff);
-                        if (babylonMaterial.alpha) {
-                            if (babylonMaterial.alpha === 0) {
-                                babylonMaterial.alphaCutOff = 1;
-                            }
-                            else {
-                                babylonMaterial.alphaCutOff /= babylonMaterial.alpha;
-                            }
-                            babylonMaterial.alpha = 1;
-                        }
                         if (babylonMaterial.albedoTexture) {
                             babylonMaterial.albedoTexture.hasAlpha = true;
                         }
@@ -4961,21 +4972,36 @@ var BABYLON;
             GLTFLoader._ValidateUri = function (uri) {
                 return (BABYLON.Tools.IsBase64(uri) || uri.indexOf("..") === -1);
             };
+            GLTFLoader._GetDrawMode = function (context, mode) {
+                mode = mode || 4 /* TRIANGLES */;
+                switch (mode) {
+                    case 0 /* POINTS */: return BABYLON.Material.PointListDrawMode;
+                    case 1 /* LINES */: return BABYLON.Material.LineListDrawMode;
+                    case 2 /* LINE_LOOP */: return BABYLON.Material.LineLoopDrawMode;
+                    case 3 /* LINE_STRIP */: return BABYLON.Material.LineStripDrawMode;
+                    case 4 /* TRIANGLES */: return BABYLON.Material.TriangleFillMode;
+                    case 5 /* TRIANGLE_STRIP */: return BABYLON.Material.TriangleStripDrawMode;
+                    case 6 /* TRIANGLE_FAN */: return BABYLON.Material.TriangleFanDrawMode;
+                }
+                throw new Error(context + ": Invalid mesh primitive mode (" + mode + ")");
+            };
             GLTFLoader.prototype._compileMaterialsAsync = function () {
                 var promises = new Array();
                 if (this._gltf.materials) {
                     for (var _i = 0, _a = this._gltf.materials; _i < _a.length; _i++) {
                         var material = _a[_i];
-                        var babylonMaterial = material._babylonMaterial;
-                        var babylonMeshes = material._babylonMeshes;
-                        if (babylonMaterial && babylonMeshes) {
-                            for (var _b = 0, babylonMeshes_1 = babylonMeshes; _b < babylonMeshes_1.length; _b++) {
-                                var babylonMesh = babylonMeshes_1[_b];
-                                // Ensure nonUniformScaling is set if necessary.
-                                babylonMesh.computeWorldMatrix(true);
-                                promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
-                                if (this.useClipPlane) {
-                                    promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
+                        if (material._babylonData) {
+                            for (var babylonDrawMode in material._babylonData) {
+                                var babylonData = material._babylonData[babylonDrawMode];
+                                for (var _b = 0, _c = babylonData.meshes; _b < _c.length; _b++) {
+                                    var babylonMesh = _c[_b];
+                                    // Ensure nonUniformScaling is set if necessary.
+                                    babylonMesh.computeWorldMatrix(true);
+                                    var babylonMaterial = babylonData.material;
+                                    promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
+                                    if (this.useClipPlane) {
+                                        promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
+                                    }
                                 }
                             }
                         }
@@ -5015,8 +5041,8 @@ var BABYLON;
                 delete this._gltf;
                 delete this._babylonScene;
                 this._completePromises.length = 0;
-                for (var name_3 in this._extensions) {
-                    this._extensions[name_3].dispose();
+                for (var name_4 in this._extensions) {
+                    this._extensions[name_4].dispose();
                 }
                 this._extensions = {};
                 delete this._rootBabylonMesh;
@@ -5027,8 +5053,8 @@ var BABYLON;
             };
             GLTFLoader.prototype._applyExtensions = function (actionAsync) {
                 for (var _i = 0, _a = GLTFLoader._Names; _i < _a.length; _i++) {
-                    var name_4 = _a[_i];
-                    var extension = this._extensions[name_4];
+                    var name_5 = _a[_i];
+                    var extension = this._extensions[name_5];
                     if (extension.enabled) {
                         var promise = actionAsync(extension);
                         if (promise) {
@@ -5049,6 +5075,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoader.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -5070,7 +5097,7 @@ var BABYLON;
             /** Override this method to modify the default behavior for loading mesh primitive vertex data. */
             GLTFLoaderExtension.prototype._loadVertexDataAsync = function (context, primitive, babylonMesh) { return null; };
             /** Override this method to modify the default behavior for loading materials. */
-            GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) { return null; };
+            GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) { return null; };
             /** Override this method to modify the default behavior for loading uris. */
             GLTFLoaderExtension.prototype._loadUriAsync = function (context, uri) { return null; };
             // #endregion
@@ -5107,8 +5134,8 @@ var BABYLON;
                 return loader._applyExtensions(function (extension) { return extension._loadVertexDataAsync(context, primitive, babylonMesh); });
             };
             /** Helper method called by the loader to allow extensions to override loading materials. */
-            GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, assign) {
-                return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, assign); });
+            GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, babylonDrawMode, assign) {
+                return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign); });
             };
             /** Helper method called by the loader to allow extensions to override loading uris. */
             GLTFLoaderExtension._LoadUriAsync = function (loader, context, uri) {
@@ -5122,6 +5149,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFLoaderExtension.js.map
 
+"use strict";
 
 
 var BABYLON;
@@ -5190,7 +5218,7 @@ var BABYLON;
                         return firstPromise;
                     });
                 };
-                MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
+                MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
                     var _this = this;
                     // Don't load material LODs if already loading a node LOD.
                     if (this._loadingNodeLOD) {
@@ -5207,13 +5235,14 @@ var BABYLON;
                                     _this._loadMaterialSignals[materialLOD._index] = new BABYLON.Deferred();
                                 }
                             }
-                            var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, indexLOD === 0 ? assign : function () { }).then(function () {
+                            var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, babylonDrawMode, indexLOD === 0 ? assign : function () { }).then(function () {
                                 if (indexLOD !== 0) {
-                                    assign(materialLOD._babylonMaterial);
-                                    var previousMaterialLOD = materialLODs[indexLOD - 1];
-                                    if (previousMaterialLOD._babylonMaterial) {
-                                        previousMaterialLOD._babylonMaterial.dispose();
-                                        delete previousMaterialLOD._babylonMaterial;
+                                    var babylonDataLOD = materialLOD._babylonData;
+                                    assign(babylonDataLOD[babylonDrawMode].material);
+                                    var previousBabylonDataLOD = materialLODs[indexLOD - 1]._babylonData;
+                                    if (previousBabylonDataLOD[babylonDrawMode]) {
+                                        previousBabylonDataLOD[babylonDrawMode].material.dispose();
+                                        delete previousBabylonDataLOD[babylonDrawMode];
                                     }
                                 }
                                 if (indexLOD !== materialLODs.length - 1) {
@@ -5282,6 +5311,7 @@ var BABYLON;
 
 //# sourceMappingURL=MSFT_lod.js.map
 
+"use strict";
 
 
 var BABYLON;
@@ -5367,6 +5397,7 @@ var BABYLON;
 
 //# sourceMappingURL=KHR_draco_mesh_compression.js.map
 
+"use strict";
 
 
 var BABYLON;
@@ -5384,27 +5415,32 @@ var BABYLON;
                     _this.name = NAME;
                     return _this;
                 }
-                KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
+                KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
                     var _this = this;
                     return this._loadExtensionAsync(context, material, function (context, extension) {
-                        material._babylonMeshes = material._babylonMeshes || [];
-                        material._babylonMeshes.push(babylonMesh);
-                        if (!material._loaded) {
+                        material._babylonData = material._babylonData || {};
+                        var babylonData = material._babylonData[babylonDrawMode];
+                        if (!babylonData) {
                             var promises = new Array();
-                            var babylonMaterial = _this._loader._createMaterial(material);
-                            material._babylonMaterial = babylonMaterial;
-                            promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material));
-                            promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension));
+                            var name_1 = material.name || "materialSG_" + material._index;
+                            var babylonMaterial = _this._loader._createMaterial(BABYLON.PBRMaterial, name_1, babylonDrawMode);
+                            promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
+                            promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension, babylonMaterial));
                             _this._loader.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
-                            material._loaded = Promise.all(promises).then(function () { });
+                            babylonData = {
+                                material: babylonMaterial,
+                                meshes: [],
+                                loaded: Promise.all(promises).then(function () { })
+                            };
+                            material._babylonData[babylonDrawMode] = babylonData;
                         }
-                        assign(material._babylonMaterial);
-                        return material._loaded;
+                        babylonData.meshes.push(babylonMesh);
+                        assign(babylonData.material);
+                        return babylonData.loaded;
                     });
                 };
-                KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties) {
+                KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties, babylonMaterial) {
                     var promises = new Array();
-                    var babylonMaterial = material._babylonMaterial;
                     if (properties.diffuseFactor) {
                         babylonMaterial.albedoColor = BABYLON.Color3.FromArray(properties.diffuseFactor);
                         babylonMaterial.alpha = properties.diffuseFactor[3];
@@ -5426,7 +5462,7 @@ var BABYLON;
                         babylonMaterial.reflectivityTexture.hasAlpha = true;
                         babylonMaterial.useMicroSurfaceFromReflectivityMapAlpha = true;
                     }
-                    this._loader._loadMaterialAlphaProperties(context, material);
+                    this._loader._loadMaterialAlphaProperties(context, material, babylonMaterial);
                     return Promise.all(promises).then(function () { });
                 };
                 return KHR_materials_pbrSpecularGlossiness;
@@ -5439,6 +5475,7 @@ var BABYLON;
 
 //# sourceMappingURL=KHR_materials_pbrSpecularGlossiness.js.map
 
+"use strict";
 
 
 var BABYLON;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 3
dist/preview release/loaders/babylonjs.loaders.min.js


+ 37 - 28
dist/preview release/loaders/babylonjs.loaders.module.d.ts

@@ -40,7 +40,7 @@ declare module BABYLON {
          * @param data
          * @param rootUrl
          */
-        parseMTL(scene: BABYLON.Scene, data: string, rootUrl: string): void;
+        parseMTL(scene: BABYLON.Scene, data: string | ArrayBuffer, rootUrl: string): void;
         /**
          * Gets the texture for the material.
          *
@@ -663,7 +663,7 @@ declare module BABYLON.GLTF1 {
         static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
         static LoadTextureBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (buffer: Nullable<ArrayBufferView>) => void, onError: (message: string) => void): void;
         static CreateTextureAsync(gltfRuntime: IGLTFRuntime, id: string, buffer: Nullable<ArrayBufferView>, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
-        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string) => void, onError: (message: string) => void): void;
+        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderString: string | ArrayBuffer) => void, onError?: (message: string) => void): void;
         static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
     }
     /**
@@ -688,14 +688,14 @@ declare module BABYLON.GLTF1 {
         onExtensionLoadedObservable: Observable<IGLTFLoaderExtension>;
         state: Nullable<GLTFLoaderState>;
         dispose(): void;
-        private _importMeshAsync(meshesNames, scene, data, rootUrl, onSuccess, onProgress, onError);
-        importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress: (event: SceneLoaderProgressEvent) => void): Promise<{
+        private _importMeshAsync(meshesNames, scene, data, rootUrl, onSuccess, onProgress?, onError?);
+        importMeshAsync(meshesNames: any, scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<{
             meshes: AbstractMesh[];
             particleSystems: ParticleSystem[];
             skeletons: Skeleton[];
         }>;
-        private _loadAsync(scene, data, rootUrl, onSuccess, onProgress, onError);
-        loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress: (event: SceneLoaderProgressEvent) => void): Promise<void>;
+        private _loadAsync(scene, data, rootUrl, onSuccess, onProgress?, onError?);
+        loadAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onProgress?: (event: SceneLoaderProgressEvent) => void): Promise<void>;
         private _loadShadersAsync(gltfRuntime, onload);
         private _loadBuffersAsync(gltfRuntime, onLoad, onProgress?);
         private _createNodes(gltfRuntime);
@@ -772,12 +772,12 @@ declare module BABYLON.GLTF1 {
         * Defines an override for loading the runtime
         * Return true to stop further extensions from loading the runtime
         */
-        loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): boolean;
+        loadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): boolean;
         /**
          * Defines an onverride for creating gltf runtime
          * Return true to stop further extensions from creating the runtime
          */
-        loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): boolean;
+        loadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): boolean;
         /**
         * Defines an override for loading buffers
         * Return true to stop further extensions from loading this buffer
@@ -803,11 +803,11 @@ declare module BABYLON.GLTF1 {
         * Return true to stop further extensions from loading this material
         */
         loadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): boolean;
-        static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess: (gltfRuntime: IGLTFRuntime) => void, onError: (message: string) => void): void;
-        static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError: (message: string) => void): void;
+        static LoadRuntimeAsync(scene: Scene, data: IGLTFLoaderData, rootUrl: string, onSuccess?: (gltfRuntime: IGLTFRuntime) => void, onError?: (message: string) => void): void;
+        static LoadRuntimeExtensionsAsync(gltfRuntime: IGLTFRuntime, onSuccess: () => void, onError?: (message: string) => void): void;
         static LoadBufferAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (bufferView: ArrayBufferView) => void, onError: (message: string) => void, onProgress?: () => void): void;
         static LoadTextureAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (texture: Texture) => void, onError: (message: string) => void): void;
-        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string) => void, onError: (message: string) => void): void;
+        static LoadShaderStringAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (shaderData: string | ArrayBuffer) => void, onError: (message: string) => void): void;
         static LoadMaterialAsync(gltfRuntime: IGLTFRuntime, id: string, onSuccess: (material: Material) => void, onError: (message: string) => void): void;
         private static LoadTextureBufferAsync(gltfRuntime, id, onSuccess, onError);
         private static CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
@@ -857,7 +857,6 @@ declare module BABYLON.GLTF2 {
         _data?: Promise<TypedArray>;
     }
     interface ILoaderAnimationChannel extends IAnimationChannel, IArrayItem {
-        _babylonAnimationGroup: AnimationGroup;
     }
     interface ILoaderAnimationSamplerData {
         input: Float32Array;
@@ -870,7 +869,7 @@ declare module BABYLON.GLTF2 {
     interface ILoaderAnimation extends IAnimation, IArrayItem {
         channels: ILoaderAnimationChannel[];
         samplers: ILoaderAnimationSampler[];
-        _babylonAnimationGroup: Nullable<AnimationGroup>;
+        _babylonAnimationGroup?: AnimationGroup;
     }
     interface ILoaderBuffer extends IBuffer, IArrayItem {
         _data?: Promise<ArrayBufferView>;
@@ -884,9 +883,13 @@ declare module BABYLON.GLTF2 {
         _objectURL?: Promise<string>;
     }
     interface ILoaderMaterial extends IMaterial, IArrayItem {
-        _babylonMaterial?: Material;
-        _babylonMeshes?: AbstractMesh[];
-        _loaded?: Promise<void>;
+        _babylonData?: {
+            [drawMode: number]: {
+                material: Material;
+                meshes: AbstractMesh[];
+                loaded: Promise<void>;
+            };
+        };
     }
     interface ILoaderMesh extends IMesh, IArrayItem {
         primitives: ILoaderMeshPrimitive[];
@@ -912,7 +915,7 @@ declare module BABYLON.GLTF2 {
     interface ILoaderScene extends IScene, IArrayItem {
     }
     interface ILoaderSkin extends ISkin, IArrayItem {
-        _babylonSkeleton: Nullable<Skeleton>;
+        _babylonSkeleton?: Skeleton;
         _loaded?: Promise<void>;
     }
     interface ILoaderTexture extends ITexture, IArrayItem {
@@ -936,6 +939,10 @@ declare module BABYLON.GLTF2 {
 
 
 declare module BABYLON.GLTF2 {
+    interface MaterialConstructor<T extends Material> {
+        readonly prototype: T;
+        new (name: string, scene: Scene): T;
+    }
     class GLTFLoader implements IGLTFLoader {
         _gltf: ILoaderGLTF;
         _babylonScene: Scene;
@@ -946,6 +953,7 @@ declare module BABYLON.GLTF2 {
         private _rootUrl;
         private _rootBabylonMesh;
         private _defaultSampler;
+        private _defaultBabylonMaterials;
         private _progressCallback?;
         private _requests;
         private static _Names;
@@ -1007,12 +1015,12 @@ declare module BABYLON.GLTF2 {
         _loadBufferViewAsync(context: string, bufferView: ILoaderBufferView): Promise<ArrayBufferView>;
         private _loadAccessorAsync(context, accessor);
         private _buildArrayBuffer<T>(typedArray, data, byteOffset, count, numComponents, byteStride?);
-        private _getDefaultMaterial();
-        private _loadMaterialMetallicRoughnessPropertiesAsync(context, material);
-        _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Promise<void>;
-        _createMaterial(material: ILoaderMaterial): PBRMaterial;
-        _loadMaterialBasePropertiesAsync(context: string, material: ILoaderMaterial): Promise<void>;
-        _loadMaterialAlphaProperties(context: string, material: ILoaderMaterial): void;
+        private _getDefaultMaterial(drawMode);
+        private _loadMaterialMetallicRoughnessPropertiesAsync(context, material, babylonMaterial);
+        _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Promise<void>;
+        _createMaterial<T extends Material>(type: MaterialConstructor<T>, name: string, drawMode: number): T;
+        _loadMaterialBasePropertiesAsync(context: string, material: ILoaderMaterial, babylonMaterial: PBRMaterial): Promise<void>;
+        _loadMaterialAlphaProperties(context: string, material: ILoaderMaterial, babylonMaterial: PBRMaterial): void;
         _loadTextureAsync(context: string, textureInfo: ITextureInfo, assign: (texture: Texture) => void): Promise<void>;
         private _loadSampler(context, sampler);
         private _loadImageAsync(context, image);
@@ -1023,6 +1031,7 @@ declare module BABYLON.GLTF2 {
         private static _GetTextureSamplingMode(context, magFilter?, minFilter?);
         private static _GetNumComponents(context, type);
         private static _ValidateUri(uri);
+        private static _GetDrawMode(context, mode);
         private _compileMaterialsAsync();
         private _compileShadowGeneratorsAsync();
         private _clear();
@@ -1045,7 +1054,7 @@ declare module BABYLON.GLTF2 {
         /** Override this method to modify the default behavior for loading mesh primitive vertex data. */
         protected _loadVertexDataAsync(context: string, primitive: ILoaderMeshPrimitive, babylonMesh: Mesh): Nullable<Promise<VertexData>>;
         /** Override this method to modify the default behavior for loading materials. */
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         /** Override this method to modify the default behavior for loading uris. */
         protected _loadUriAsync(context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
         /** Helper method called by a loader extension to load an glTF extension. */
@@ -1057,7 +1066,7 @@ declare module BABYLON.GLTF2 {
         /** Helper method called by the loader to allow extensions to override loading mesh primitive vertex data. */
         static _LoadVertexDataAsync(loader: GLTFLoader, context: string, primitive: ILoaderMeshPrimitive, babylonMesh: Mesh): Nullable<Promise<VertexData>>;
         /** Helper method called by the loader to allow extensions to override loading materials. */
-        static _LoadMaterialAsync(loader: GLTFLoader, context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        static _LoadMaterialAsync(loader: GLTFLoader, context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         /** Helper method called by the loader to allow extensions to override loading uris. */
         static _LoadUriAsync(loader: GLTFLoader, context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
     }
@@ -1076,7 +1085,7 @@ declare module BABYLON.GLTF2.Extensions {
         private _loadingMaterialLOD;
         private _loadMaterialSignals;
         protected _loadNodeAsync(context: string, node: ILoaderNode): Nullable<Promise<void>>;
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
         protected _loadUriAsync(context: string, uri: string): Nullable<Promise<ArrayBufferView>>;
         /**
          * Gets an array of LOD properties from lowest to highest.
@@ -1100,8 +1109,8 @@ declare module BABYLON.GLTF2.Extensions {
 declare module BABYLON.GLTF2.Extensions {
     class KHR_materials_pbrSpecularGlossiness extends GLTFLoaderExtension {
         readonly name: string;
-        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
-        private _loadSpecularGlossinessPropertiesAsync(context, material, properties);
+        protected _loadMaterialAsync(context: string, material: ILoaderMaterial, babylonMesh: Mesh, babylonDrawMode: number, assign: (babylonMaterial: Material) => void): Nullable<Promise<void>>;
+        private _loadSpecularGlossinessPropertiesAsync(context, material, properties, babylonMaterial);
     }
 }
 

+ 1 - 0
dist/preview release/materialsLibrary/babylon.cellMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.cellMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.customMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.customMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.fireMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.fireMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.furMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.furMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.gradientMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.gradientMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.gridMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.gridMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.lavaMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.lavaMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.normalMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.normalMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.shadowOnlyMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.simpleMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.simpleMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.skyMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.skyMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.terrainMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.terrainMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.triPlanarMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.triPlanarMaterial.min.js


+ 1 - 0
dist/preview release/materialsLibrary/babylon.waterMaterial.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/materialsLibrary/babylon.waterMaterial.min.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 15 - 1
dist/preview release/materialsLibrary/babylonjs.materials.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 3
dist/preview release/materialsLibrary/babylonjs.materials.min.js


+ 1 - 0
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.asciiArtPostProcess.min.js


+ 1 - 0
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/postProcessesLibrary/babylon.digitalRainPostProcess.min.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3 - 1
dist/preview release/postProcessesLibrary/babylonjs.postProcess.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/postProcessesLibrary/babylonjs.postProcess.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.brickProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.brickProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.cloudProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.cloudProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.fireProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.fireProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.grassProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.grassProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.marbleProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.marbleProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.normalMapProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.normalMapProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.perlinNoiseProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.perlinNoiseProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.roadProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.roadProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.starfieldProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.starfieldProceduralTexture.min.js


+ 1 - 0
dist/preview release/proceduralTexturesLibrary/babylon.woodProceduralTexture.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var __extends = (this && this.__extends) || (function () {
     var extendStatics = Object.setPrototypeOf ||

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylon.woodProceduralTexture.min.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 11 - 1
dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/proceduralTexturesLibrary/babylonjs.proceduralTextures.min.js


+ 4 - 0
dist/preview release/serializers/babylon.glTF2Serializer.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -50,6 +51,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFSerializer.js.map
 
+"use strict";
 /// <reference path="../../../../dist/babylon.glTF2Interface.d.ts"/>
 /**
  * Module for the Babylon glTF 2.0 exporter.  Should ONLY be used internally.
@@ -728,6 +730,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFExporter.js.map
 
+"use strict";
 /// <reference path="../../../../dist/babylon.glTF2Interface.d.ts"/>
 var BABYLON;
 (function (BABYLON) {
@@ -787,6 +790,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFData.js.map
 
+"use strict";
 /// <reference path="../../../../dist/babylon.glTF2Interface.d.ts"/>
 var BABYLON;
 (function (BABYLON) {

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/serializers/babylon.glTF2Serializer.min.js


+ 1 - 0
dist/preview release/serializers/babylon.objSerializer.js

@@ -1,3 +1,4 @@
+"use strict";
 /// <reference path="../../../dist/preview release/babylon.d.ts"/>
 var BABYLON;
 (function (BABYLON) {

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/serializers/babylon.objSerializer.min.js


+ 6 - 1
dist/preview release/serializers/babylonjs.serializers.js

@@ -27,7 +27,8 @@ var __extends = (this && this.__extends) || (function () {
         root["BABYLON"] = factory(root["BABYLON"]);
     }
 })(this, function(BABYLON) {
-    
+    "use strict";
+
 var BABYLON;
 (function (BABYLON) {
     var OBJExport = /** @class */ (function () {
@@ -152,6 +153,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.objSerializer.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -204,6 +206,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFSerializer.js.map
 
+"use strict";
 
 /**
  * Module for the Babylon glTF 2.0 exporter.  Should ONLY be used internally.
@@ -882,6 +885,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFExporter.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {
@@ -941,6 +945,7 @@ var BABYLON;
 
 //# sourceMappingURL=babylon.glTFData.js.map
 
+"use strict";
 
 var BABYLON;
 (function (BABYLON) {

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/preview release/serializers/babylonjs.serializers.min.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 68 - 68
dist/preview release/viewer/babylon.viewer.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 553 - 165
dist/preview release/viewer/babylon.viewer.max.js


+ 0 - 0
dist/preview release/what's new.md


Vissa filer visades inte eftersom för många filer har ändrats