x_ite 9.4.4 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +19 -5
  2. package/dist/assets/components/Annotation.js +13 -13
  3. package/dist/assets/components/Annotation.min.js +1 -1
  4. package/dist/assets/components/CADGeometry.js +33 -17
  5. package/dist/assets/components/CADGeometry.min.js +1 -1
  6. package/dist/assets/components/CubeMapTexturing.js +25 -25
  7. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  8. package/dist/assets/components/DIS.js +13 -13
  9. package/dist/assets/components/DIS.min.js +1 -1
  10. package/dist/assets/components/EventUtilities.js +9 -9
  11. package/dist/assets/components/EventUtilities.min.js +1 -1
  12. package/dist/assets/components/Geometry2D.js +20 -20
  13. package/dist/assets/components/Geometry2D.min.js +1 -1
  14. package/dist/assets/components/Geospatial.js +45 -60
  15. package/dist/assets/components/Geospatial.min.js +1 -1
  16. package/dist/assets/components/HAnim.js +37 -34
  17. package/dist/assets/components/HAnim.min.js +1 -1
  18. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  19. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  20. package/dist/assets/components/Layout.js +27 -27
  21. package/dist/assets/components/Layout.min.js +1 -1
  22. package/dist/assets/components/NURBS.js +23 -23
  23. package/dist/assets/components/NURBS.min.js +1 -1
  24. package/dist/assets/components/ParticleSystems.js +107 -155
  25. package/dist/assets/components/ParticleSystems.min.js +1 -1
  26. package/dist/assets/components/Picking.js +18 -18
  27. package/dist/assets/components/Picking.min.js +1 -1
  28. package/dist/assets/components/RigidBodyPhysics.js +17 -17
  29. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  30. package/dist/assets/components/Scripting.js +38 -38
  31. package/dist/assets/components/Scripting.min.js +1 -1
  32. package/dist/assets/components/Text.js +24 -24
  33. package/dist/assets/components/Text.min.js +1 -1
  34. package/dist/assets/components/TextureProjection.js +15 -15
  35. package/dist/assets/components/TextureProjection.min.js +1 -1
  36. package/dist/assets/components/Texturing3D.js +1956 -2567
  37. package/dist/assets/components/Texturing3D.min.js +1 -1
  38. package/dist/assets/components/VolumeRendering.js +19 -19
  39. package/dist/assets/components/VolumeRendering.min.js +1 -1
  40. package/dist/assets/components/X_ITE.js +303 -8
  41. package/dist/assets/components/X_ITE.min.js +1 -1
  42. package/dist/assets/lib/libktx.js +1 -1
  43. package/dist/x_ite.css +1 -1
  44. package/dist/x_ite.js +1264 -866
  45. package/dist/x_ite.min.js +1 -1
  46. package/dist/x_ite.min.mjs +1 -1
  47. package/dist/x_ite.mjs +1264 -866
  48. package/dist/x_ite.zip +0 -0
  49. package/package.json +6 -6
package/dist/x_ite.js CHANGED
@@ -1,4 +1,4 @@
1
- /* X_ITE v9.4.4 */(function webpackUniversalModuleDefinition(root, factory) {
1
+ /* X_ITE v9.5.0 */(function webpackUniversalModuleDefinition(root, factory) {
2
2
  if(typeof exports === 'object' && typeof module === 'object')
3
3
  module.exports = factory();
4
4
  else if(typeof define === 'function' && define.amd)
@@ -11,10 +11,10 @@
11
11
  return /******/ (() => { // webpackBootstrap
12
12
  /******/ var __webpack_modules__ = ({
13
13
 
14
- /***/ 133:
14
+ /***/ 543:
15
15
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16
16
 
17
- /* provided dependency */ var jQuery = __webpack_require__(237);
17
+ /* provided dependency */ var jQuery = __webpack_require__(275);
18
18
  /**
19
19
  * @preserve jquery.fullscreen 1.1.5
20
20
  * https://github.com/code-lts/jquery-fullscreen-plugin
@@ -210,7 +210,7 @@ installFullScreenHandlers();
210
210
 
211
211
  /***/ }),
212
212
 
213
- /***/ 789:
213
+ /***/ 419:
214
214
  /***/ ((module, exports, __webpack_require__) => {
215
215
 
216
216
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -224,7 +224,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
224
224
  (function (factory) {
225
225
  if ( true ) {
226
226
  // AMD. Register as an anonymous module.
227
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(237)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
227
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(275)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
228
228
  __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
229
229
  (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
230
230
  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
@@ -435,7 +435,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
435
435
 
436
436
  /***/ }),
437
437
 
438
- /***/ 237:
438
+ /***/ 275:
439
439
  /***/ (function(module, exports) {
440
440
 
441
441
  var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@@ -11159,7 +11159,7 @@ return jQuery;
11159
11159
 
11160
11160
  /***/ }),
11161
11161
 
11162
- /***/ 414:
11162
+ /***/ 224:
11163
11163
  /***/ ((module) => {
11164
11164
 
11165
11165
  /**
@@ -15938,7 +15938,7 @@ if (true) {
15938
15938
 
15939
15939
  /***/ }),
15940
15940
 
15941
- /***/ 121:
15941
+ /***/ 35:
15942
15942
  /***/ (function(__unused_webpack_module, exports) {
15943
15943
 
15944
15944
 
@@ -19183,7 +19183,7 @@ if (true) {
19183
19183
 
19184
19184
  /***/ }),
19185
19185
 
19186
- /***/ 646:
19186
+ /***/ 964:
19187
19187
  /***/ (function(module, exports) {
19188
19188
 
19189
19189
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*
@@ -20311,7 +20311,7 @@ Object .defineProperty (Namespace, "add",
20311
20311
  }
20312
20312
  else
20313
20313
  {
20314
- const X3D = window [Symbol .for ("X_ITE.X3D-9.4.4")];
20314
+ const X3D = window [Symbol .for ("X_ITE.X3D-9.5.0")];
20315
20315
 
20316
20316
  if (X3D)
20317
20317
  X3D [name] = module;
@@ -23421,6 +23421,9 @@ Object .assign (Color3 .prototype,
23421
23421
  },
23422
23422
  });
23423
23423
 
23424
+ for (const key of Object .keys (Color3 .prototype))
23425
+ Object .defineProperty (Color3 .prototype, key, { enumerable: false });
23426
+
23424
23427
  const r = {
23425
23428
  get () { return this [_r]; },
23426
23429
  set (value) { this [_r] = clamp (value, 0, 1); },
@@ -23875,6 +23878,9 @@ Object .assign (Color4 .prototype,
23875
23878
  },
23876
23879
  });
23877
23880
 
23881
+ for (const key of Object .keys (Color4 .prototype))
23882
+ Object .defineProperty (Color4 .prototype, key, { enumerable: false });
23883
+
23878
23884
  const Numbers_Color4_r = {
23879
23885
  get () { return this [Color4_r]; },
23880
23886
  set (value) { this [Color4_r] = Color4_clamp (value, 0, 1); },
@@ -24919,6 +24925,9 @@ Object .assign (Vector2 .prototype,
24919
24925
  }
24920
24926
  });
24921
24927
 
24928
+ for (const key of Object .keys (Vector2 .prototype))
24929
+ Object .defineProperty (Vector2 .prototype, key, { enumerable: false });
24930
+
24922
24931
  Object .defineProperties (Vector2 .prototype,
24923
24932
  {
24924
24933
  length: { value: 2 },
@@ -25210,6 +25219,9 @@ Object .assign (Vector3 .prototype,
25210
25219
  }
25211
25220
  });
25212
25221
 
25222
+ for (const key of Object .keys (Vector3 .prototype))
25223
+ Object .defineProperty (Vector3 .prototype, key, { enumerable: false });
25224
+
25213
25225
  Object .defineProperties (Vector3 .prototype,
25214
25226
  {
25215
25227
  length: { value: 3 },
@@ -25478,6 +25490,9 @@ Object .assign (Matrix2 .prototype,
25478
25490
  },
25479
25491
  });
25480
25492
 
25493
+ for (const key of Object .keys (Matrix2 .prototype))
25494
+ Object .defineProperty (Matrix2 .prototype, key, { enumerable: false });
25495
+
25481
25496
  Object .defineProperties (Matrix2 .prototype,
25482
25497
  {
25483
25498
  order: { value: 2 },
@@ -26296,6 +26311,9 @@ Object .assign (Matrix3 .prototype,
26296
26311
  },
26297
26312
  });
26298
26313
 
26314
+ for (const key of Object .keys (Matrix3 .prototype))
26315
+ Object .defineProperty (Matrix3 .prototype, key, { enumerable: false });
26316
+
26299
26317
  Object .defineProperties (Matrix3 .prototype,
26300
26318
  {
26301
26319
  order: { value: 3 },
@@ -26829,6 +26847,9 @@ Object .assign (Vector4 .prototype,
26829
26847
  },
26830
26848
  });
26831
26849
 
26850
+ for (const key of Object .keys (Vector4 .prototype))
26851
+ Object .defineProperty (Vector4 .prototype, key, { enumerable: false });
26852
+
26832
26853
  Object .defineProperties (Vector4 .prototype,
26833
26854
  {
26834
26855
  length: { value: 4 },
@@ -27447,6 +27468,9 @@ Object .assign (Quaternion .prototype,
27447
27468
  },
27448
27469
  });
27449
27470
 
27471
+ for (const key of Object .keys (Quaternion .prototype))
27472
+ Object .defineProperty (Quaternion .prototype, key, { enumerable: false });
27473
+
27450
27474
  Object .defineProperties (Quaternion .prototype,
27451
27475
  {
27452
27476
  length: { value: 4 },
@@ -27957,6 +27981,9 @@ Object .assign (Rotation4 .prototype,
27957
27981
  }
27958
27982
  });
27959
27983
 
27984
+ for (const key of Object .keys (Rotation4 .prototype))
27985
+ Object .defineProperty (Rotation4 .prototype, key, { enumerable: false });
27986
+
27960
27987
  const x = {
27961
27988
  get ()
27962
27989
  {
@@ -28729,6 +28756,9 @@ Object .assign (Matrix4_Matrix4 .prototype,
28729
28756
  },
28730
28757
  });
28731
28758
 
28759
+ for (const key of Object .keys (Matrix4_Matrix4 .prototype))
28760
+ Object .defineProperty (Matrix4_Matrix4 .prototype, key, { enumerable: false });
28761
+
28732
28762
  Object .defineProperties (Matrix4_Matrix4 .prototype,
28733
28763
  {
28734
28764
  order: { value: 4 },
@@ -34248,7 +34278,7 @@ const X3DBaseNode_default_ = X3DBaseNode;
34248
34278
  x_ite_Namespace .add ("X3DBaseNode", "x_ite/Base/X3DBaseNode", X3DBaseNode_default_);
34249
34279
  /* harmony default export */ const Base_X3DBaseNode = (X3DBaseNode_default_);
34250
34280
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Legacy.js
34251
- /* provided dependency */ var $ = __webpack_require__(237);
34281
+ /* provided dependency */ var $ = __webpack_require__(275);
34252
34282
  /*******************************************************************************
34253
34283
  *
34254
34284
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -34385,7 +34415,7 @@ x_ite_Namespace .add ("Legacy", "x_ite/Browser/Legacy", Legacy_default_);
34385
34415
  *
34386
34416
  ******************************************************************************/
34387
34417
 
34388
- const BROWSER_VERSION_default_ = "9.4.4";
34418
+ const BROWSER_VERSION_default_ = "9.5.0";
34389
34419
  ;
34390
34420
 
34391
34421
  x_ite_Namespace .add ("BROWSER_VERSION", "x_ite/BROWSER_VERSION", BROWSER_VERSION_default_);
@@ -34789,6 +34819,22 @@ Object .assign (Object .setPrototypeOf (X3DNode .prototype, Base_X3DBaseNode .pr
34789
34819
 
34790
34820
  return field;
34791
34821
  }
34822
+ else if (field)
34823
+ {
34824
+ // Support for Numbers (Vector234, Color34, ...).
34825
+
34826
+ if (!metadataObject)
34827
+ return field;
34828
+
34829
+ const value = metadataObject .value;
34830
+
34831
+ let i = 0;
34832
+
34833
+ for (const key in field)
34834
+ field [key] = value [i ++];
34835
+
34836
+ return field;
34837
+ }
34792
34838
 
34793
34839
  return metadataObject ? Array .from (metadataObject .value) : [ ];
34794
34840
  },
@@ -34883,6 +34929,13 @@ Object .assign (Object .setPrototypeOf (X3DNode .prototype, Base_X3DBaseNode .pr
34883
34929
  break;
34884
34930
  }
34885
34931
  }
34932
+ else if (!Array .isArray (value) && value .valueOf () instanceof Object)
34933
+ {
34934
+ // Support for Numbers (Vector234, Color34, ...).
34935
+
34936
+ value = Array .from (value);
34937
+ value .type = "double";
34938
+ }
34886
34939
 
34887
34940
  metadataSet .getValue () .setMetaValue (last, value);
34888
34941
 
@@ -36847,7 +36900,7 @@ Object .assign (Object .setPrototypeOf (MetadataSet .prototype, Core_X3DNode .pr
36847
36900
  setMetaValue (name, value)
36848
36901
  {
36849
36902
  if (!Array .isArray (value))
36850
- value = [value];
36903
+ value = [value .valueOf ()];
36851
36904
 
36852
36905
  switch (value .type ?? (typeof value [0]))
36853
36906
  {
@@ -36857,14 +36910,6 @@ Object .assign (Object .setPrototypeOf (MetadataSet .prototype, Core_X3DNode .pr
36857
36910
  return;
36858
36911
  }
36859
36912
  case "number":
36860
- {
36861
- if (value .every (v => Number .isInteger (v)))
36862
- this .getMetadataObject ("MetadataInteger", name, true) .value = value;
36863
- else
36864
- this .getMetadataObject ("MetadataDouble", name, true) .value = value;
36865
-
36866
- return;
36867
- }
36868
36913
  case "double":
36869
36914
  {
36870
36915
  this .getMetadataObject ("MetadataDouble", name, true) .value = value;
@@ -38026,8 +38071,8 @@ function X3DUrlObject (executionContext)
38026
38071
  {
38027
38072
  this .addType (Base_X3DConstants .X3DUrlObject);
38028
38073
 
38029
- this .addChildObjects (Base_X3DConstants .outputOnly, "loadState", new x_ite_Fields .SFInt32 (Base_X3DConstants .NOT_STARTED_STATE),
38030
- Base_X3DConstants .inputOutput, "loadData", new x_ite_Fields .SFTime ());
38074
+ this .addChildObjects (Base_X3DConstants .outputOnly, "loadState", new x_ite_Fields .SFInt32 (Base_X3DConstants .NOT_STARTED_STATE),
38075
+ Base_X3DConstants .outputOnly, "loadData", new x_ite_Fields .SFTime ());
38031
38076
 
38032
38077
  this [X3DUrlObject_cache] = true;
38033
38078
  this [_autoRefreshStartTime] = Date .now ();
@@ -38982,7 +39027,7 @@ const X3DProtoDeclaration_default_ = X3DProtoDeclaration;
38982
39027
  x_ite_Namespace .add ("X3DProtoDeclaration", "x_ite/Prototype/X3DProtoDeclaration", X3DProtoDeclaration_default_);
38983
39028
  /* harmony default export */ const Prototype_X3DProtoDeclaration = (X3DProtoDeclaration_default_);
38984
39029
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/X3DParser.js
38985
- /* provided dependency */ var X3DParser_$ = __webpack_require__(237);
39030
+ /* provided dependency */ var X3DParser_$ = __webpack_require__(275);
38986
39031
  /*******************************************************************************
38987
39032
  *
38988
39033
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -39244,7 +39289,7 @@ const Expressions_default_ = Expressions;
39244
39289
  x_ite_Namespace .add ("Expressions", "x_ite/Parser/Expressions", Expressions_default_);
39245
39290
  /* harmony default export */ const Parser_Expressions = (Expressions_default_);
39246
39291
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/VRMLParser.js
39247
- /* provided dependency */ var VRMLParser_$ = __webpack_require__(237);
39292
+ /* provided dependency */ var VRMLParser_$ = __webpack_require__(275);
39248
39293
  /*******************************************************************************
39249
39294
  *
39250
39295
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -41930,7 +41975,7 @@ const VRMLParser_default_ = VRMLParser;
41930
41975
  x_ite_Namespace .add ("VRMLParser", "x_ite/Parser/VRMLParser", VRMLParser_default_);
41931
41976
  /* harmony default export */ const Parser_VRMLParser = (VRMLParser_default_);
41932
41977
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/XMLParser.js
41933
- /* provided dependency */ var XMLParser_$ = __webpack_require__(237);
41978
+ /* provided dependency */ var XMLParser_$ = __webpack_require__(275);
41934
41979
  /*******************************************************************************
41935
41980
  *
41936
41981
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -44039,7 +44084,7 @@ const URLs_default_ = URLs;
44039
44084
  x_ite_Namespace .add ("URLs", "x_ite/Browser/Networking/URLs", URLs_default_);
44040
44085
  /* harmony default export */ const Networking_URLs = (URLs_default_);
44041
44086
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/GLTF2Parser.js
44042
- /* provided dependency */ var GLTF2Parser_$ = __webpack_require__(237);
44087
+ /* provided dependency */ var GLTF2Parser_$ = __webpack_require__(275);
44043
44088
  /*******************************************************************************
44044
44089
  *
44045
44090
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -44335,6 +44380,15 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
44335
44380
  // {
44336
44381
  // break;
44337
44382
  // },
44383
+ case "EXT_mesh_gpu_instancing":
44384
+ {
44385
+ const component = browser .getComponent ("X_ITE", 1);
44386
+
44387
+ if (!scene .hasComponent (component))
44388
+ scene .addComponent (component);
44389
+
44390
+ break;
44391
+ }
44338
44392
  case "KHR_texture_transform":
44339
44393
  {
44340
44394
  const component = browser .getComponent ("Texturing3D", 2);
@@ -45279,7 +45333,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45279
45333
 
45280
45334
  this .meshes = meshes;
45281
45335
  },
45282
- meshObject (mesh, skin)
45336
+ meshObject (mesh, skin, EXT_mesh_gpu_instancing)
45283
45337
  {
45284
45338
  if (!(mesh instanceof Object))
45285
45339
  return;
@@ -45297,7 +45351,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45297
45351
  return mesh .shapeNodes;
45298
45352
  }
45299
45353
 
45300
- const shapeNodes = this .primitivesArray (mesh, skin);
45354
+ const shapeNodes = this .primitivesArray (mesh, skin, EXT_mesh_gpu_instancing);
45301
45355
 
45302
45356
  // Name Shape nodes.
45303
45357
 
@@ -45313,7 +45367,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45313
45367
 
45314
45368
  return mesh .shapeNodes = shapeNodes;
45315
45369
  },
45316
- primitivesArray ({ primitives, weights }, skin)
45370
+ primitivesArray ({ primitives, weights }, skin, EXT_mesh_gpu_instancing)
45317
45371
  {
45318
45372
  if (!(primitives instanceof Array))
45319
45373
  return [ ];
@@ -45321,11 +45375,11 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45321
45375
  const shapeNodes = [ ];
45322
45376
 
45323
45377
  for (const primitive of primitives)
45324
- this .primitiveObject (primitive, weights, skin, shapeNodes);
45378
+ this .primitiveObject (primitive, weights, skin, EXT_mesh_gpu_instancing, shapeNodes);
45325
45379
 
45326
45380
  return shapeNodes;
45327
45381
  },
45328
- primitiveObject (primitive, weights, skin, shapeNodes)
45382
+ primitiveObject (primitive, weights, skin, EXT_mesh_gpu_instancing, shapeNodes)
45329
45383
  {
45330
45384
  if (!(primitive instanceof Object))
45331
45385
  return;
@@ -45338,7 +45392,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45338
45392
 
45339
45393
  this .primitiveExtensionsObject (primitive .extensions, primitive)
45340
45394
 
45341
- shapeNodes .push (primitive .shapeNode = this .createShape (primitive, weights, skin));
45395
+ shapeNodes .push (primitive .shapeNode = this .createShape (primitive, weights, skin, EXT_mesh_gpu_instancing));
45342
45396
  },
45343
45397
  attributesObject (attributes)
45344
45398
  {
@@ -45728,8 +45782,9 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45728
45782
  // Add mesh.
45729
45783
 
45730
45784
  const
45731
- skin = this .skins [node .skin],
45732
- shapeNodes = this .meshObject (this .meshes [node .mesh], skin);
45785
+ skin = this .skins [node .skin],
45786
+ EXT_mesh_gpu_instancing = node .extensions ?.EXT_mesh_gpu_instancing,
45787
+ shapeNodes = this .meshObject (this .meshes [node .mesh], skin, EXT_mesh_gpu_instancing);
45733
45788
 
45734
45789
  // Add camera.
45735
45790
 
@@ -45749,7 +45804,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45749
45804
  // Add Shape nodes.
45750
45805
 
45751
45806
  if (shapeNodes)
45752
- transformNode ._children .push (... this .meshInstancing (node .extensions ?.EXT_mesh_gpu_instancing, shapeNodes));
45807
+ transformNode ._children .push (... shapeNodes);
45753
45808
 
45754
45809
  transformNode .setup ();
45755
45810
 
@@ -45818,71 +45873,6 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
45818
45873
 
45819
45874
  transformNode ._children .push (lightNode);
45820
45875
  },
45821
- meshInstancing (EXT_mesh_gpu_instancing, shapeNodes)
45822
- {
45823
- if (!(EXT_mesh_gpu_instancing instanceof Object))
45824
- return shapeNodes;
45825
-
45826
- let
45827
- attributes = EXT_mesh_gpu_instancing .attributes,
45828
- translation = this .accessors [attributes ?.TRANSLATION],
45829
- rotation = this .accessors [attributes ?.ROTATION],
45830
- scale = this .accessors [attributes ?.SCALE],
45831
- count = Math .max (translation ?.count ?? 0, rotation ?.count ?? 0, scale ?.count ?? 0);
45832
-
45833
- if (!count)
45834
- return shapeNodes;
45835
-
45836
- if (translation ?.type !== "VEC3")
45837
- translation = null;
45838
-
45839
- if (rotation ?.type !== "VEC4")
45840
- rotation = null;
45841
-
45842
- if (scale ?.type !== "VEC3")
45843
- scale = null;
45844
-
45845
- const
45846
- scene = this .getScene (),
45847
- transformNodes = [ ],
45848
- tArray = translation ?.array,
45849
- rArray = rotation ?.normalizedArray,
45850
- sArray = scale ?.array;
45851
-
45852
- for (let i = 0; i < count; ++ i)
45853
- {
45854
- const transformNode = scene .createNode ("Transform", false);
45855
-
45856
- if (translation && i < translation .count)
45857
- {
45858
- transformNode ._translation = new Numbers_Vector3 (tArray [i * 3 + 0],
45859
- tArray [i * 3 + 1],
45860
- tArray [i * 3 + 2]);
45861
- }
45862
-
45863
- if (rotation && i < rotation .count)
45864
- {
45865
- transformNode ._rotation = new Numbers_Rotation4 (new Numbers_Quaternion (rArray [i * 4 + 0],
45866
- rArray [i * 4 + 1],
45867
- rArray [i * 4 + 2],
45868
- rArray [i * 4 + 3]));
45869
- }
45870
-
45871
- if (scale && i < scale .count)
45872
- {
45873
- transformNode ._scale = new Numbers_Vector3 (sArray [i * 3 + 0],
45874
- sArray [i * 3 + 1],
45875
- sArray [i * 3 + 2]);
45876
- }
45877
-
45878
- transformNode ._children = shapeNodes;
45879
-
45880
- transformNode .setup ();
45881
- transformNodes .push (transformNode);
45882
- }
45883
-
45884
- return transformNodes;
45885
- },
45886
45876
  nodeChildrenArray (children)
45887
45877
  {
45888
45878
  if (!(children instanceof Array))
@@ -46186,11 +46176,11 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
46186
46176
 
46187
46177
  return navigationInfoNode;
46188
46178
  },
46189
- createShape (primitive, weights, skin)
46179
+ createShape (primitive, weights, skin, EXT_mesh_gpu_instancing)
46190
46180
  {
46191
46181
  const
46192
46182
  scene = this .getExecutionContext (),
46193
- shapeNode = scene .createNode ("Shape", false),
46183
+ shapeNode = this .meshInstancing (EXT_mesh_gpu_instancing) ?? scene .createNode ("Shape", false),
46194
46184
  appearanceNode = this .materialObject (primitive),
46195
46185
  geometryNode = this .createGeometry (primitive, weights, skin);
46196
46186
 
@@ -46201,6 +46191,60 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
46201
46191
 
46202
46192
  return shapeNode;
46203
46193
  },
46194
+ meshInstancing (EXT_mesh_gpu_instancing)
46195
+ {
46196
+ if (!(EXT_mesh_gpu_instancing instanceof Object))
46197
+ return null;
46198
+
46199
+ let
46200
+ attributes = EXT_mesh_gpu_instancing .attributes,
46201
+ translation = this .accessors [attributes ?.TRANSLATION],
46202
+ rotation = this .accessors [attributes ?.ROTATION],
46203
+ scale = this .accessors [attributes ?.SCALE],
46204
+ count = Math .max (translation ?.count ?? 0, rotation ?.count ?? 0, scale ?.count ?? 0);
46205
+
46206
+ if (!count)
46207
+ return null;
46208
+
46209
+ if (translation ?.type !== "VEC3")
46210
+ translation = null;
46211
+
46212
+ if (rotation ?.type !== "VEC4")
46213
+ rotation = null;
46214
+
46215
+ if (scale ?.type !== "VEC3")
46216
+ scale = null;
46217
+
46218
+ const
46219
+ scene = this .getScene (),
46220
+ instancedShapeNode = scene .createNode ("InstancedShape", false),
46221
+ translationArray = translation ?.array,
46222
+ rotationArray = rotation ?.normalizedArray,
46223
+ scaleArray = scale ?.array;
46224
+
46225
+ if (translationArray)
46226
+ instancedShapeNode ._translations = translationArray;
46227
+
46228
+ if (rotationArray)
46229
+ {
46230
+ const length = rotation .count * 4;
46231
+
46232
+ for (let i = 0; i < length; i += 4)
46233
+ {
46234
+ instancedShapeNode ._rotations .push (new Numbers_Rotation4 (new Numbers_Quaternion (rotationArray [i + 0],
46235
+ rotationArray [i + 1],
46236
+ rotationArray [i + 2],
46237
+ rotationArray [i + 3])));
46238
+ }
46239
+ }
46240
+
46241
+ if (scaleArray)
46242
+ instancedShapeNode ._scales = scaleArray;
46243
+
46244
+ instancedShapeNode .setup ();
46245
+
46246
+ return instancedShapeNode;
46247
+ },
46204
46248
  getDefaultAppearance (mode)
46205
46249
  {
46206
46250
  mode = mode > 3;
@@ -47342,7 +47386,7 @@ const GLTF2Parser_default_ = GLTF2Parser;
47342
47386
  x_ite_Namespace .add ("GLTF2Parser", "x_ite/Parser/GLTF2Parser", GLTF2Parser_default_);
47343
47387
  /* harmony default export */ const Parser_GLTF2Parser = (GLTF2Parser_default_);
47344
47388
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/GLB2Parser.js
47345
- /* provided dependency */ var GLB2Parser_$ = __webpack_require__(237);
47389
+ /* provided dependency */ var GLB2Parser_$ = __webpack_require__(275);
47346
47390
  /*******************************************************************************
47347
47391
  *
47348
47392
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -47494,7 +47538,7 @@ const GLB2Parser_default_ = GLB2Parser;
47494
47538
  x_ite_Namespace .add ("GLB2Parser", "x_ite/Parser/GLB2Parser", GLB2Parser_default_);
47495
47539
  /* harmony default export */ const Parser_GLB2Parser = (GLB2Parser_default_);
47496
47540
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/OBJParser.js
47497
- /* provided dependency */ var OBJParser_$ = __webpack_require__(237);
47541
+ /* provided dependency */ var OBJParser_$ = __webpack_require__(275);
47498
47542
  /*******************************************************************************
47499
47543
  *
47500
47544
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -50156,6 +50200,9 @@ Object .assign (Complex .prototype,
50156
50200
  },
50157
50201
  });
50158
50202
 
50203
+ for (const key of Object .keys (Complex .prototype))
50204
+ Object .defineProperty (Complex .prototype, key, { enumerable: false });
50205
+
50159
50206
  Object .defineProperties (Complex .prototype,
50160
50207
  {
50161
50208
  length: { value: 2 },
@@ -50849,8 +50896,8 @@ const MatrixStack_default_ = MatrixStack;
50849
50896
  x_ite_Namespace .add ("MatrixStack", "standard/Math/Utility/MatrixStack", MatrixStack_default_);
50850
50897
  /* harmony default export */ const Utility_MatrixStack = (MatrixStack_default_);
50851
50898
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/SVGParser.js
50852
- /* provided dependency */ var SVGParser_$ = __webpack_require__(237);
50853
- /* provided dependency */ var libtess = __webpack_require__(414);
50899
+ /* provided dependency */ var SVGParser_$ = __webpack_require__(275);
50900
+ /* provided dependency */ var libtess = __webpack_require__(224);
50854
50901
  /*******************************************************************************
50855
50902
  *
50856
50903
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -53618,7 +53665,7 @@ const SVGParser_default_ = SVGParser;
53618
53665
  x_ite_Namespace .add ("SVGParser", "x_ite/Parser/SVGParser", SVGParser_default_);
53619
53666
  /* harmony default export */ const Parser_SVGParser = (SVGParser_default_);
53620
53667
  ;// CONCATENATED MODULE: ./src/x_ite/Parser/GoldenGate.js
53621
- /* provided dependency */ var GoldenGate_$ = __webpack_require__(237);
53668
+ /* provided dependency */ var GoldenGate_$ = __webpack_require__(275);
53622
53669
  /*******************************************************************************
53623
53670
  *
53624
53671
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -53968,7 +54015,7 @@ const Plane3_default_ = Plane3;
53968
54015
  x_ite_Namespace .add ("Plane3", "standard/Math/Geometry/Plane3", Plane3_default_);
53969
54016
  /* harmony default export */ const Geometry_Plane3 = (Plane3_default_);
53970
54017
  ;// CONCATENATED MODULE: ./src/standard/Math/Geometry/Triangle3.js
53971
- /* provided dependency */ var Triangle3_libtess = __webpack_require__(414);
54018
+ /* provided dependency */ var Triangle3_libtess = __webpack_require__(224);
53972
54019
  /*******************************************************************************
53973
54020
  *
53974
54021
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -56616,34 +56663,36 @@ Object .assign (X3DRenderObject .prototype,
56616
56663
  {
56617
56664
  return this .shadowShapes;
56618
56665
  },
56619
- setNumOpaqueShapes (value)
56620
- {
56621
- this .numOpaqueShapes = value;
56622
- },
56623
56666
  getNumOpaqueShapes ()
56624
56667
  {
56625
56668
  return this .numOpaqueShapes;
56626
56669
  },
56627
- getOpaqueShapes ()
56670
+ setNumOpaqueShapes (value)
56628
56671
  {
56629
- return this .opaqueShapes;
56672
+ // Needed for StaticGroup.
56673
+ this .numOpaqueShapes = value;
56630
56674
  },
56631
- setNumTransparentShapes (value)
56675
+ getOpaqueShapes ()
56632
56676
  {
56633
- this .numTransparentShapes = value;
56677
+ return this .opaqueShapes;
56634
56678
  },
56635
56679
  getNumTransparentShapes ()
56636
56680
  {
56637
56681
  return this .numTransparentShapes;
56638
56682
  },
56683
+ setNumTransparentShapes (value)
56684
+ {
56685
+ // Needed for StaticGroup.
56686
+ this .numTransparentShapes = value;
56687
+ },
56639
56688
  getTransparentShapes ()
56640
56689
  {
56641
56690
  return this .transparentShapes;
56642
56691
  },
56643
56692
  constrainTranslation (translation, stepBack)
56644
56693
  {
56645
- /// Contrains @a translation to a possible value the avatar can move. If the avatar reaches and intersects with an
56646
- /// and obstacle and @a stepBack is true a translation in the opposite directiion is returned. Future implementation will
56694
+ /// Constrains @a translation to a possible value the avatar can move. If the avatar reaches and intersects with an
56695
+ /// and obstacle and @a stepBack is true a translation in the opposite direction is returned. Future implementation will
56647
56696
  /// will then return a value where the avatar slides along the wall. Modifies translation in place.
56648
56697
 
56649
56698
  // Constrain translation when the viewer collides with an obstacle.
@@ -60781,8 +60830,8 @@ Object .assign (Object .setPrototypeOf (X3DGeometryNode .prototype, Core_X3DNode
60781
60830
 
60782
60831
  delete this .displaySimple;
60783
60832
  delete this .display;
60784
- delete this .displaySimpleParticles;
60785
- delete this .displayParticles;
60833
+ delete this .displaySimpleInstanced;
60834
+ delete this .displayInstanced;
60786
60835
  }
60787
60836
  else
60788
60837
  {
@@ -60790,8 +60839,8 @@ Object .assign (Object .setPrototypeOf (X3DGeometryNode .prototype, Core_X3DNode
60790
60839
 
60791
60840
  this .displaySimple = Function .prototype;
60792
60841
  this .display = Function .prototype;
60793
- this .displaySimpleParticles = Function .prototype;
60794
- this .displayParticles = Function .prototype;
60842
+ this .displaySimpleInstanced = Function .prototype;
60843
+ this .displayInstanced = Function .prototype;
60795
60844
  }
60796
60845
  },
60797
60846
  traverse (type, renderObject)
@@ -60920,26 +60969,32 @@ Object .assign (Object .setPrototypeOf (X3DGeometryNode .prototype, Core_X3DNode
60920
60969
  for (const node of renderModeNodes)
60921
60970
  node .disable (gl);
60922
60971
  },
60923
- displaySimpleParticles (gl, shaderNode, particleSystem)
60972
+ displaySimpleInstanced (gl, shaderNode, shapeNode)
60924
60973
  {
60925
- const outputParticles = particleSystem .outputParticles;
60974
+ const instances = shapeNode .getInstances ();
60926
60975
 
60927
- if (outputParticles .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
60976
+ if (instances .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
60928
60977
  {
60929
- const { particleStride, particleOffset, matrixOffset } = particleSystem;
60978
+ const { instancesStride, particleOffset, matrixOffset, normalMatrixOffset } = shapeNode;
60979
+
60980
+ if (particleOffset !== undefined)
60981
+ shaderNode .enableParticleAttribute (gl, instances, instancesStride, particleOffset, 1);
60930
60982
 
60931
- shaderNode .enableParticleAttribute (gl, outputParticles, particleStride, particleOffset, 1);
60932
- shaderNode .enableParticleMatrixAttribute (gl, outputParticles, particleStride, matrixOffset, 1);
60933
- shaderNode .enableTexCoordAttribute (gl, this .texCoordBuffers, 0, 0);
60934
- shaderNode .enableNormalAttribute (gl, this .normalBuffer, 0, 0);
60935
- shaderNode .enableVertexAttribute (gl, this .vertexBuffer, 0, 0);
60983
+ shaderNode .enableInstanceMatrixAttribute (gl, instances, instancesStride, matrixOffset, 1);
60984
+
60985
+ if (normalMatrixOffset !== undefined)
60986
+ shaderNode .enableInstanceNormalMatrixAttribute (gl, instances, instancesStride, normalMatrixOffset, 1);
60987
+
60988
+ shaderNode .enableTexCoordAttribute (gl, this .texCoordBuffers, 0, 0);
60989
+ shaderNode .enableNormalAttribute (gl, this .normalBuffer, 0, 0);
60990
+ shaderNode .enableVertexAttribute (gl, this .vertexBuffer, 0, 0);
60936
60991
 
60937
60992
  this .updateParticles = false;
60938
60993
  }
60939
60994
 
60940
- gl .drawArraysInstanced (this .primitiveMode, 0, this .vertexCount, particleSystem .numParticles);
60995
+ gl .drawArraysInstanced (this .primitiveMode, 0, this .vertexCount, shapeNode .getNumInstances ());
60941
60996
  },
60942
- displayParticles (gl, renderContext, particleSystem)
60997
+ displayInstanced (gl, renderContext, shapeNode)
60943
60998
  {
60944
60999
  const
60945
61000
  browser = this .getBrowser (),
@@ -60948,17 +61003,17 @@ Object .assign (Object .setPrototypeOf (X3DGeometryNode .prototype, Core_X3DNode
60948
61003
 
60949
61004
  if (this .solid || !appearanceNode .getBackMaterial () || browser .getWireframe ())
60950
61005
  {
60951
- this .displayParticlesGeometry (gl, renderContext, appearanceNode, shaderNode, true, true, particleSystem);
61006
+ this .displayInstancedGeometry (gl, renderContext, appearanceNode, shaderNode, true, true, shapeNode);
60952
61007
  }
60953
61008
  else
60954
61009
  {
60955
61010
  const backShaderNode = appearanceNode .getBackShader (this, renderContext);
60956
61011
 
60957
- this .displayParticlesGeometry (gl, renderContext, appearanceNode, backShaderNode, true, false, particleSystem);
60958
- this .displayParticlesGeometry (gl, renderContext, appearanceNode, shaderNode, false, true, particleSystem);
61012
+ this .displayInstancedGeometry (gl, renderContext, appearanceNode, backShaderNode, true, false, shapeNode);
61013
+ this .displayInstancedGeometry (gl, renderContext, appearanceNode, shaderNode, false, true, shapeNode);
60959
61014
  }
60960
61015
  },
60961
- displayParticlesGeometry (gl, renderContext, appearanceNode, shaderNode, back, front, particleSystem)
61016
+ displayInstancedGeometry (gl, renderContext, appearanceNode, shaderNode, back, front, shapeNode)
60962
61017
  {
60963
61018
  const
60964
61019
  browser = this .getBrowser (),
@@ -60977,14 +61032,19 @@ Object .assign (Object .setPrototypeOf (X3DGeometryNode .prototype, Core_X3DNode
60977
61032
 
60978
61033
  // Setup vertex attributes.
60979
61034
 
60980
- const outputParticles = particleSystem .outputParticles;
61035
+ const instances = shapeNode .getInstances ();
60981
61036
 
60982
- if (outputParticles .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
61037
+ if (instances .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
60983
61038
  {
60984
- const { particleStride, particleOffset, matrixOffset } = particleSystem;
61039
+ const { instancesStride, particleOffset, matrixOffset, normalMatrixOffset } = shapeNode;
61040
+
61041
+ if (particleOffset !== undefined)
61042
+ shaderNode .enableParticleAttribute (gl, instances, instancesStride, particleOffset, 1);
61043
+
61044
+ shaderNode .enableInstanceMatrixAttribute (gl, instances, instancesStride, matrixOffset, 1);
60985
61045
 
60986
- shaderNode .enableParticleAttribute (gl, outputParticles, particleStride, particleOffset, 1);
60987
- shaderNode .enableParticleMatrixAttribute (gl, outputParticles, particleStride, matrixOffset, 1);
61046
+ if (normalMatrixOffset !== undefined)
61047
+ shaderNode .enableInstanceNormalMatrixAttribute (gl, instances, instancesStride, normalMatrixOffset, 1);
60988
61048
 
60989
61049
  for (let i = 0, length = attribNodes .length; i < length; ++ i)
60990
61050
  attribNodes [i] .enable (gl, shaderNode, attribBuffers [i]);
@@ -61017,13 +61077,13 @@ Object .assign (Object .setPrototypeOf (X3DGeometryNode .prototype, Core_X3DNode
61017
61077
  if (back && !this .solid)
61018
61078
  {
61019
61079
  gl .cullFace (gl .FRONT);
61020
- gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, particleSystem .numParticles);
61080
+ gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, shapeNode .getNumInstances ());
61021
61081
  }
61022
61082
 
61023
61083
  if (front)
61024
61084
  {
61025
61085
  gl .cullFace (gl .BACK);
61026
- gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, particleSystem .numParticles);
61086
+ gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, shapeNode .getNumInstances ());
61027
61087
  }
61028
61088
  }
61029
61089
  else
@@ -61035,7 +61095,7 @@ Object .assign (Object .setPrototypeOf (X3DGeometryNode .prototype, Core_X3DNode
61035
61095
  else
61036
61096
  gl .disable (gl .CULL_FACE);
61037
61097
 
61038
- gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, particleSystem .numParticles);
61098
+ gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, shapeNode .getNumInstances ());
61039
61099
  }
61040
61100
 
61041
61101
  for (const node of renderModeNodes)
@@ -62461,7 +62521,7 @@ const X3DTexture2DNode_default_ = X3DTexture2DNode;
62461
62521
  x_ite_Namespace .add ("X3DTexture2DNode", "x_ite/Components/Texturing/X3DTexture2DNode", X3DTexture2DNode_default_);
62462
62522
  /* harmony default export */ const Texturing_X3DTexture2DNode = (X3DTexture2DNode_default_);
62463
62523
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Texturing/ImageTexture.js
62464
- /* provided dependency */ var ImageTexture_$ = __webpack_require__(237);
62524
+ /* provided dependency */ var ImageTexture_$ = __webpack_require__(275);
62465
62525
  /*******************************************************************************
62466
62526
  *
62467
62527
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -64806,7 +64866,7 @@ function X3DViewpointNode (executionContext)
64806
64866
  Base_X3DConstants .inputOutput, "fieldOfViewScale", new x_ite_Fields .SFFloat (1));
64807
64867
 
64808
64868
  this .descriptions = [ ];
64809
- this .userPosition = new Numbers_Vector3 (0, 1, 0);
64869
+ this .userPosition = new Numbers_Vector3 ();
64810
64870
  this .userOrientation = new Numbers_Rotation4 ();
64811
64871
  this .userCenterOfRotation = new Numbers_Vector3 ();
64812
64872
  this .modelMatrix = new Numbers_Matrix4 ();
@@ -64887,10 +64947,10 @@ Object .assign (Object .setPrototypeOf (X3DViewpointNode .prototype, Core_X3DBin
64887
64947
  },
64888
64948
  set_viewAll__ ()
64889
64949
  {
64890
- if (! this ._viewAll .getValue ())
64950
+ if (!this ._viewAll .getValue ())
64891
64951
  return;
64892
64952
 
64893
- if (! this ._isBound .getValue ())
64953
+ if (!this ._isBound .getValue ())
64894
64954
  return;
64895
64955
 
64896
64956
  this ._set_bind = true;
@@ -65020,7 +65080,7 @@ Object .assign (Object .setPrototypeOf (X3DViewpointNode .prototype, Core_X3DBin
65020
65080
  {
65021
65081
  const relative = this .getRelativeTransformation (fromViewpointNode);
65022
65082
 
65023
- if (! this ._retainUserOffsets .getValue ())
65083
+ if (!this ._retainUserOffsets .getValue ())
65024
65084
  this .resetUserOffsets ();
65025
65085
 
65026
65086
  if (this ._viewAll .getValue ())
@@ -65444,6 +65504,10 @@ Object .assign (Object .setPrototypeOf (Viewpoint .prototype, Navigation_X3DView
65444
65504
 
65445
65505
  return fov > 0 && fov < Math .PI ? fov : Math .PI / 4;
65446
65506
  },
65507
+ setFieldOfView (value)
65508
+ {
65509
+ this ._fieldOfView = value;
65510
+ },
65447
65511
  getUserFieldOfView ()
65448
65512
  {
65449
65513
  const fov = this ._fieldOfView .getValue () * this ._fieldOfViewScale .getValue ();
@@ -66055,7 +66119,7 @@ const X3DWorld_default_ = X3DWorld;
66055
66119
  x_ite_Namespace .add ("X3DWorld", "x_ite/Execution/X3DWorld", X3DWorld_default_);
66056
66120
  /* harmony default export */ const Execution_X3DWorld = (X3DWorld_default_);
66057
66121
  ;// CONCATENATED MODULE: ./src/x_ite/InputOutput/FileLoader.js
66058
- /* provided dependency */ var FileLoader_$ = __webpack_require__(237);
66122
+ /* provided dependency */ var FileLoader_$ = __webpack_require__(275);
66059
66123
  /*******************************************************************************
66060
66124
  *
66061
66125
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -66991,7 +67055,7 @@ const ProtoDeclarationArray_default_ = ProtoDeclarationArray;
66991
67055
  x_ite_Namespace .add ("ProtoDeclarationArray", "x_ite/Prototype/ProtoDeclarationArray", ProtoDeclarationArray_default_);
66992
67056
  /* harmony default export */ const Prototype_ProtoDeclarationArray = (ProtoDeclarationArray_default_);
66993
67057
  ;// CONCATENATED MODULE: ./src/x_ite/Routing/X3DRoute.js
66994
- /* provided dependency */ var X3DRoute_$ = __webpack_require__(237);
67058
+ /* provided dependency */ var X3DRoute_$ = __webpack_require__(275);
66995
67059
  /*******************************************************************************
66996
67060
  *
66997
67061
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -67593,7 +67657,6 @@ x_ite_Namespace .add ("RouteArray", "x_ite/Routing/RouteArray", RouteArray_defau
67593
67657
 
67594
67658
 
67595
67659
 
67596
-
67597
67660
  const
67598
67661
  _outerNode = Symbol (),
67599
67662
  _namedNodes = Symbol (),
@@ -67609,18 +67672,22 @@ function X3DExecutionContext (executionContext, outerNode = null, browser = exec
67609
67672
  this .addType (Base_X3DConstants .X3DExecutionContext)
67610
67673
 
67611
67674
  this .addChildObjects (Base_X3DConstants .initializeOnly, "rootNodes", new x_ite_Fields .MFNode (),
67675
+ Base_X3DConstants .inputOutput, "countPrimitives", new x_ite_Fields .SFBool (true),
67612
67676
  Base_X3DConstants .outputOnly, "worldInfos", new x_ite_Fields .MFNode (),
67613
67677
  Base_X3DConstants .outputOnly, "sceneGraph_changed", new x_ite_Fields .SFTime ())
67614
67678
 
67615
67679
  this ._rootNodes .setPrivate (false);
67616
67680
  this ._rootNodes .collectCloneCount = () => 1;
67617
67681
 
67618
- this [_outerNode] = outerNode;
67619
- this [_namedNodes] = new Execution_NamedNodesArray ();
67620
- this [_importedNodes] = new Execution_ImportedNodesArray ();
67621
- this [_protos] = new Prototype_ProtoDeclarationArray ();
67622
- this [_externprotos] = new Prototype_ExternProtoDeclarationArray ();
67623
- this [X3DExecutionContext_routes] = new Routing_RouteArray ();
67682
+ this ._countPrimitives .addReference (executionContext ._countPrimitives);
67683
+ this ._sceneGraph_changed .addFieldInterest (this ._sceneGraph_changed);
67684
+
67685
+ this [_outerNode] = outerNode;
67686
+ this [_namedNodes] = new Execution_NamedNodesArray ();
67687
+ this [_importedNodes] = new Execution_ImportedNodesArray ();
67688
+ this [_protos] = new Prototype_ProtoDeclarationArray ();
67689
+ this [_externprotos] = new Prototype_ExternProtoDeclarationArray ();
67690
+ this [X3DExecutionContext_routes] = new Routing_RouteArray ();
67624
67691
 
67625
67692
  this [_namedNodes] .addParent (this);
67626
67693
  this [_importedNodes] .addParent (this);
@@ -67631,16 +67698,15 @@ function X3DExecutionContext (executionContext, outerNode = null, browser = exec
67631
67698
 
67632
67699
  Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3DBaseNode .prototype),
67633
67700
  {
67634
- initialize ()
67701
+ setExecutionContext (executionContext)
67635
67702
  {
67636
- Base_X3DBaseNode .prototype .initialize .call (this);
67703
+ this ._countPrimitives .removeReference (this .getExecutionContext () ._countPrimitives);
67704
+ this ._sceneGraph_changed .removeFieldInterest (this .getExecutionContext () ._sceneGraph_changed);
67637
67705
 
67638
- if (!this .isScene ())
67639
- this ._sceneGraph_changed .addInterest ("set_sceneGraph", this)
67640
- },
67641
- set_sceneGraph ()
67642
- {
67643
- this .getExecutionContext () ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
67706
+ Base_X3DBaseNode .prototype .setExecutionContext .call (this, executionContext);
67707
+
67708
+ this ._countPrimitives .addReference (executionContext ._countPrimitives);
67709
+ this ._sceneGraph_changed .addFieldInterest (executionContext ._sceneGraph_changed);
67644
67710
  },
67645
67711
  isScene ()
67646
67712
  {
@@ -67651,6 +67717,14 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
67651
67717
  // Can be either of type X3DProtoDeclaration or X3DPrototypeInstance, or null.
67652
67718
  return this [_outerNode];
67653
67719
  },
67720
+ getCountPrimitives ()
67721
+ {
67722
+ return this ._countPrimitives .getValue ();
67723
+ },
67724
+ setCountPrimitives (value)
67725
+ {
67726
+ this ._countPrimitives = this .getExecutionContext () .getCountPrimitives () && value;
67727
+ },
67654
67728
  getSpecificationVersion ()
67655
67729
  {
67656
67730
  return this .getExecutionContext () .getSpecificationVersion ();
@@ -67885,7 +67959,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
67885
67959
 
67886
67960
  this [_importedNodes] .add (importedName, importedNode);
67887
67961
 
67888
- this ._importedNodes_changed = this .getBrowser () .getCurrentTime ();
67962
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
67889
67963
  },
67890
67964
  renameImportedNode (oldImportedName, newImportedName)
67891
67965
  {
@@ -67900,6 +67974,8 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
67900
67974
  importedNode [Symbol .for ("X_ITE.X3DImportedNode.setImportName")] (newImportedName);
67901
67975
 
67902
67976
  this [_importedNodes] .update (oldImportedName, newImportedName, importedNode);
67977
+
67978
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
67903
67979
  },
67904
67980
  removeImportedNode (importedName)
67905
67981
  {
@@ -67914,7 +67990,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
67914
67990
 
67915
67991
  this [_importedNodes] .remove (importedName);
67916
67992
 
67917
- this ._importedNodes_changed = this .getBrowser () .getCurrentTime ();
67993
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
67918
67994
  },
67919
67995
  getImportedNode (importedName)
67920
67996
  {
@@ -68015,7 +68091,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
68015
68091
  this [_protos] .add (name, proto);
68016
68092
  proto .setName (name);
68017
68093
 
68018
- this ._protos_changed = this .getBrowser () .getCurrentTime ();
68094
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
68019
68095
  },
68020
68096
  updateProtoDeclaration (name, proto)
68021
68097
  {
@@ -68035,7 +68111,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
68035
68111
  this [_protos] .update (proto .getName (), name, proto);
68036
68112
  proto .setName (name);
68037
68113
 
68038
- this ._protos_changed = this .getBrowser () .getCurrentTime ();
68114
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
68039
68115
  },
68040
68116
  removeProtoDeclaration (name)
68041
68117
  {
@@ -68043,7 +68119,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
68043
68119
 
68044
68120
  this [_protos] .remove (name);
68045
68121
 
68046
- this ._protos_changed = this .getBrowser () .getCurrentTime ();
68122
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
68047
68123
  },
68048
68124
  getProtoDeclarations ()
68049
68125
  {
@@ -68088,7 +68164,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
68088
68164
  this [_externprotos] .add (name, externproto);
68089
68165
  externproto .setName (name);
68090
68166
 
68091
- this ._externprotos_changed = this .getBrowser () .getCurrentTime ();
68167
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
68092
68168
  },
68093
68169
  updateExternProtoDeclaration (name, externproto)
68094
68170
  {
@@ -68108,7 +68184,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
68108
68184
  this [_externprotos] .update (externproto .getName (), name, externproto);
68109
68185
  externproto .setName (name);
68110
68186
 
68111
- this ._externprotos_changed = this .getBrowser () .getCurrentTime ();
68187
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
68112
68188
  },
68113
68189
  removeExternProtoDeclaration (name)
68114
68190
  {
@@ -68116,7 +68192,7 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
68116
68192
 
68117
68193
  this [_externprotos] .remove (name);
68118
68194
 
68119
- this ._externprotos_changed = this .getBrowser () .getCurrentTime ();
68195
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
68120
68196
  },
68121
68197
  getExternProtoDeclarations ()
68122
68198
  {
@@ -68595,6 +68671,7 @@ Object .assign (Object .setPrototypeOf (X3DPrototypeInstance .prototype, Core_X3
68595
68671
  // Dispose body and assign field definitions.
68596
68672
 
68597
68673
  this [X3DPrototypeInstance_body] ?.dispose ();
68674
+
68598
68675
  this [X3DPrototypeInstance_fieldDefinitions] .assign (protoNode .getFieldDefinitions ());
68599
68676
 
68600
68677
  // If there is a proto, the externproto is completely loaded.
@@ -74802,7 +74879,7 @@ Object .assign (Object .setPrototypeOf (ElevationGrid .prototype, Rendering_X3DG
74802
74879
  if (!this ._normalPerVertex .getValue ())
74803
74880
  return normals;
74804
74881
 
74805
- return this .refineNormals (normalIndex, normals, this ._creaseAngle .getValue ());
74882
+ return this .refineNormals (normalIndex, normals, creaseAngle ?? this ._creaseAngle .getValue ());
74806
74883
  },
74807
74884
  createCoordIndex ()
74808
74885
  {
@@ -74906,8 +74983,8 @@ Object .assign (Object .setPrototypeOf (ElevationGrid .prototype, Rendering_X3DG
74906
74983
  for (let p = 0; p < 6; ++ p, ++ c)
74907
74984
  {
74908
74985
  const
74909
- index = coordIndex [c],
74910
- point = points [index];
74986
+ index = coordIndex [c],
74987
+ { x, y, z} = points [index];
74911
74988
 
74912
74989
  coordIndicesArray .push (index);
74913
74990
 
@@ -74916,13 +74993,7 @@ Object .assign (Object .setPrototypeOf (ElevationGrid .prototype, Rendering_X3DG
74916
74993
 
74917
74994
  fogCoordNode ?.addDepth (index, fogDepthArray);
74918
74995
 
74919
- if (colorNode)
74920
- {
74921
- if (colorPerVertex)
74922
- colorNode .addColor (index, colorArray);
74923
- else
74924
- colorNode .addColor (face, colorArray);
74925
- }
74996
+ colorNode ?.addColor (colorPerVertex ? index : face, colorArray);
74926
74997
 
74927
74998
  if (texCoordNode)
74928
74999
  {
@@ -74930,21 +75001,14 @@ Object .assign (Object .setPrototypeOf (ElevationGrid .prototype, Rendering_X3DG
74930
75001
  }
74931
75002
  else
74932
75003
  {
74933
- const t = texCoords [index];
75004
+ const { x, y } = texCoords [index];
74934
75005
 
74935
- texCoordArray .push (t .x, t .y, 0, 1);
75006
+ texCoordArray .push (x, y, 0, 1);
74936
75007
  }
74937
75008
 
74938
- if (normalNode)
74939
- {
74940
- if (normalPerVertex)
74941
- normalNode .addVector (index, normalArray);
74942
-
74943
- else
74944
- normalNode .addVector (face, normalArray);
74945
- }
75009
+ normalNode ?.addVector (normalPerVertex ? index : face, normalArray);
74946
75010
 
74947
- vertexArray .push (point .x, point .y, point .z, 1);
75011
+ vertexArray .push (x, y, z, 1);
74948
75012
  }
74949
75013
  }
74950
75014
 
@@ -74954,10 +75018,8 @@ Object .assign (Object .setPrototypeOf (ElevationGrid .prototype, Rendering_X3DG
74954
75018
  {
74955
75019
  const normals = this .createNormals (points, coordIndex);
74956
75020
 
74957
- for (const normal of normals)
74958
- {
74959
- normalArray .push (normal .x, normal .y, normal .z);
74960
- }
75021
+ for (const { x, y, z } of normals)
75022
+ normalArray .push (x, y, z);
74961
75023
  }
74962
75024
 
74963
75025
  this .setSolid (this ._solid .getValue ());
@@ -75572,8 +75634,8 @@ Object .assign (Object .setPrototypeOf (Extrusion .prototype, Rendering_X3DGeome
75572
75634
 
75573
75635
  const refinedNormals = this .refineNormals (normalIndex, normals, this ._creaseAngle .getValue ());
75574
75636
 
75575
- for (const normal of refinedNormals)
75576
- normalArray .push (normal .x, normal .y, normal .z);
75637
+ for (const { x, y, z } of refinedNormals)
75638
+ normalArray .push (x, y, z);
75577
75639
 
75578
75640
  // Build caps
75579
75641
 
@@ -75982,23 +76044,11 @@ Object .assign (Object .setPrototypeOf (X3DComposedGeometryNode .prototype, Rend
75982
76044
 
75983
76045
  fogCoordNode ?.addDepth (index, fogDepthArray);
75984
76046
 
75985
- if (colorNode)
75986
- {
75987
- if (colorPerVertex)
75988
- colorNode .addColor (index, colorArray);
75989
- else
75990
- colorNode .addColor (face, colorArray);
75991
- }
76047
+ colorNode ?.addColor (colorPerVertex ? index : face, colorArray);
75992
76048
 
75993
76049
  texCoordNode ?.addPoint (index, multiTexCoordArray);
75994
76050
 
75995
- if (normalNode)
75996
- {
75997
- if (normalPerVertex)
75998
- normalNode .addVector (index, normalArray);
75999
- else
76000
- normalNode .addVector (face, normalArray);
76001
- }
76051
+ normalNode ?.addVector (normalPerVertex ? index : face, normalArray);
76002
76052
 
76003
76053
  coordNode .addPoint (index, vertexArray);
76004
76054
  }
@@ -76019,9 +76069,9 @@ Object .assign (Object .setPrototypeOf (X3DComposedGeometryNode .prototype, Rend
76019
76069
 
76020
76070
  for (let i = 0; i < trianglesSize; ++ i)
76021
76071
  {
76022
- const normal = normals [this .getTriangleIndex (i)];
76072
+ const { x, y, z } = normals [this .getTriangleIndex (i)];
76023
76073
 
76024
- normalArray .push (normal .x, normal .y, normal .z);
76074
+ normalArray .push (x, y, z);
76025
76075
  }
76026
76076
  },
76027
76077
  createNormals (verticesPerPolygon, polygonsSize)
@@ -76277,23 +76327,11 @@ Object .assign (Object .setPrototypeOf (IndexedFaceSet .prototype, Rendering_X3D
76277
76327
 
76278
76328
  fogCoordNode ?.addDepth (index, fogDepthArray);
76279
76329
 
76280
- if (colorNode)
76281
- {
76282
- if (colorPerVertex)
76283
- colorNode .addColor (this .getColorPerVertexIndex (i), colorArray);
76284
- else
76285
- colorNode .addColor (this .getColorIndex (face), colorArray);
76286
- }
76330
+ colorNode ?.addColor (colorPerVertex ? this .getColorPerVertexIndex (i) : this .getColorIndex (face), colorArray);
76287
76331
 
76288
76332
  texCoordNode ?.addPoint (this .getTexCoordPerVertexIndex (i), multiTexCoordArray);
76289
76333
 
76290
- if (normalNode)
76291
- {
76292
- if (normalPerVertex)
76293
- normalNode .addVector (this .getNormalPerVertexIndex (i), normalArray);
76294
- else
76295
- normalNode .addVector (this .getNormalIndex (face), normalArray);
76296
- }
76334
+ normalNode ?.addVector (normalPerVertex ? this .getNormalPerVertexIndex (i) : this .getNormalIndex (face), normalArray);
76297
76335
 
76298
76336
  coordNode .addPoint (index, vertexArray);
76299
76337
  }
@@ -82598,6 +82636,10 @@ Object .assign (Object .setPrototypeOf (OrthoViewpoint .prototype, Navigation_X3
82598
82636
  this .getMaximumY (),
82599
82637
  ];
82600
82638
  },
82639
+ setFieldOfView (value)
82640
+ {
82641
+ this ._fieldOfView = value;
82642
+ },
82601
82643
  getUserFieldOfView ()
82602
82644
  {
82603
82645
  return [
@@ -87470,7 +87512,7 @@ Object .assign (Object .setPrototypeOf (X3DLineGeometryNode .prototype, Renderin
87470
87512
  gl .lineWidth (1);
87471
87513
  };
87472
87514
  })(),
87473
- displayParticles (gl, renderContext, particleSystem)
87515
+ displayInstanced (gl, renderContext, shapeNode)
87474
87516
  {
87475
87517
  const
87476
87518
  browser = this .getBrowser (),
@@ -87491,14 +87533,19 @@ Object .assign (Object .setPrototypeOf (X3DLineGeometryNode .prototype, Renderin
87491
87533
 
87492
87534
  // Setup vertex attributes.
87493
87535
 
87494
- const outputParticles = particleSystem .outputParticles;
87536
+ const instances = shapeNode .getInstances ();
87495
87537
 
87496
- if (outputParticles .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
87538
+ if (instances .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
87497
87539
  {
87498
- const particleStride = particleSystem .particleStride;
87540
+ const { instancesStride, particleOffset, matrixOffset, normalMatrixOffset } = shapeNode;
87541
+
87542
+ if (particleOffset !== undefined)
87543
+ shaderNode .enableParticleAttribute (gl, instances, instancesStride, particleOffset, 1);
87499
87544
 
87500
- shaderNode .enableParticleAttribute (gl, outputParticles, particleStride, particleSystem .particleOffset, 1);
87501
- shaderNode .enableParticleMatrixAttribute (gl, outputParticles, particleStride, particleSystem .matrixOffset, 1);
87545
+ shaderNode .enableInstanceMatrixAttribute (gl, instances, instancesStride, matrixOffset, 1);
87546
+
87547
+ if (normalMatrixOffset !== undefined)
87548
+ shaderNode .enableInstanceNormalMatrixAttribute (gl, instances, instancesStride, normalMatrixOffset, 1);
87502
87549
 
87503
87550
  for (let i = 0, length = attribNodes .length; i < length; ++ i)
87504
87551
  attribNodes [i] .enable (gl, shaderNode, attribBuffers [i]);
@@ -87519,7 +87566,7 @@ Object .assign (Object .setPrototypeOf (X3DLineGeometryNode .prototype, Renderin
87519
87566
 
87520
87567
  // Wireframes are always solid so only one drawing call is needed.
87521
87568
 
87522
- gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, particleSystem .numParticles);
87569
+ gl .drawArraysInstanced (primitiveMode, 0, this .vertexCount, shapeNode .getNumInstances ());
87523
87570
 
87524
87571
  for (const node of renderModeNodes)
87525
87572
  node .disable (gl);
@@ -87793,13 +87840,7 @@ Object .assign (Object .setPrototypeOf (IndexedLineSet .prototype, Rendering_X3D
87793
87840
 
87794
87841
  fogCoordNode ?.addDepth (index, fogDepthArray);
87795
87842
 
87796
- if (colorNode)
87797
- {
87798
- if (colorPerVertex)
87799
- colorNode .addColor (this .getColorPerVertexIndex (i), colorArray);
87800
- else
87801
- colorNode .addColor (this .getColorIndex (face), colorArray);
87802
- }
87843
+ colorNode ?.addColor (colorPerVertex ? this .getColorPerVertexIndex (i) : this .getColorIndex (face), colorArray);
87803
87844
 
87804
87845
  normalNode ?.addVector (index, normalArray);
87805
87846
 
@@ -87975,6 +88016,14 @@ Object .assign (Object .setPrototypeOf (IndexedTriangleFanSet .prototype, Render
87975
88016
  {
87976
88017
  return this .triangleIndex [index];
87977
88018
  },
88019
+ getVerticesPerPolygon ()
88020
+ {
88021
+ return 3;
88022
+ },
88023
+ getNumVertices ()
88024
+ {
88025
+ return this .triangleIndex .length;
88026
+ },
87978
88027
  build ()
87979
88028
  {
87980
88029
  Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
@@ -88096,6 +88145,14 @@ Object .assign (Object .setPrototypeOf (IndexedTriangleSet .prototype, Rendering
88096
88145
  {
88097
88146
  return this ._index [i];
88098
88147
  },
88148
+ getVerticesPerPolygon ()
88149
+ {
88150
+ return 3;
88151
+ },
88152
+ getNumVertices ()
88153
+ {
88154
+ return this ._index .length;
88155
+ },
88099
88156
  initialize ()
88100
88157
  {
88101
88158
  Rendering_X3DComposedGeometryNode .prototype .initialize .call (this);
@@ -88280,6 +88337,14 @@ Object .assign (Object .setPrototypeOf (IndexedTriangleStripSet .prototype, Rend
88280
88337
  {
88281
88338
  return this .triangleIndex [index];
88282
88339
  },
88340
+ getVerticesPerPolygon ()
88341
+ {
88342
+ return 3;
88343
+ },
88344
+ getNumVertices ()
88345
+ {
88346
+ return this .triangleIndex .length;
88347
+ },
88283
88348
  build ()
88284
88349
  {
88285
88350
  Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
@@ -88929,7 +88994,7 @@ Object .assign (Object .setPrototypeOf (X3DPointGeometryNode .prototype, Renderi
88929
88994
  for (const node of renderModeNodes)
88930
88995
  node .disable (gl);
88931
88996
  },
88932
- displayParticles (gl, renderContext, particleSystem)
88997
+ displayInstanced (gl, renderContext, shapeNode)
88933
88998
  {
88934
88999
  const
88935
89000
  appearanceNode = renderContext .appearanceNode,
@@ -88948,14 +89013,19 @@ Object .assign (Object .setPrototypeOf (X3DPointGeometryNode .prototype, Renderi
88948
89013
 
88949
89014
  // Setup vertex attributes.
88950
89015
 
88951
- const outputParticles = particleSystem .outputParticles;
89016
+ const instances = shapeNode .getInstances ();
88952
89017
 
88953
- if (outputParticles .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
89018
+ if (instances .vertexArrayObject .update (this .updateParticles) .enable (shaderNode .getProgram ()))
88954
89019
  {
88955
- const particleStride = particleSystem .particleStride;
89020
+ const { instancesStride, particleOffset, matrixOffset, normalMatrixOffset } = shapeNode;
88956
89021
 
88957
- shaderNode .enableParticleAttribute (gl, outputParticles, particleStride, particleSystem .particleOffset, 1);
88958
- shaderNode .enableParticleMatrixAttribute (gl, outputParticles, particleStride, particleSystem .matrixOffset, 1);
89022
+ if (particleOffset !== undefined)
89023
+ shaderNode .enableParticleAttribute (gl, instances, instancesStride, particleOffset, 1);
89024
+
89025
+ shaderNode .enableInstanceMatrixAttribute (gl, instances, instancesStride, matrixOffset, 1);
89026
+
89027
+ if (normalMatrixOffset !== undefined)
89028
+ shaderNode .enableInstanceNormalMatrixAttribute (gl, instances, instancesStride, normalMatrixOffset, 1);
88959
89029
 
88960
89030
  for (let i = 0, length = attribNodes .length; i < length; ++ i)
88961
89031
  attribNodes [i] .enable (gl, shaderNode, attribBuffers [i]);
@@ -88976,7 +89046,7 @@ Object .assign (Object .setPrototypeOf (X3DPointGeometryNode .prototype, Renderi
88976
89046
 
88977
89047
  // Wireframes are always solid so only one drawing call is needed.
88978
89048
 
88979
- gl .drawArraysInstanced (this .primitiveMode, 0, this .vertexCount, particleSystem .numParticles);
89049
+ gl .drawArraysInstanced (this .primitiveMode, 0, this .vertexCount, shapeNode .getNumInstances ());
88980
89050
 
88981
89051
  for (const node of renderModeNodes)
88982
89052
  node .disable (gl);
@@ -89328,6 +89398,14 @@ Object .assign (Object .setPrototypeOf (TriangleFanSet .prototype, Rendering_X3D
89328
89398
  {
89329
89399
  return this .triangleIndex [index];
89330
89400
  },
89401
+ getVerticesPerPolygon ()
89402
+ {
89403
+ return 3;
89404
+ },
89405
+ getNumVertices ()
89406
+ {
89407
+ return this .triangleIndex .length;
89408
+ },
89331
89409
  build ()
89332
89410
  {
89333
89411
  Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
@@ -89444,9 +89522,17 @@ function TriangleSet (executionContext)
89444
89522
 
89445
89523
  Object .assign (Object .setPrototypeOf (TriangleSet .prototype, Rendering_X3DComposedGeometryNode .prototype),
89446
89524
  {
89525
+ getVerticesPerPolygon ()
89526
+ {
89527
+ return 3;
89528
+ },
89529
+ getNumVertices ()
89530
+ {
89531
+ return this .getCoord () ?.getSize ();
89532
+ },
89447
89533
  build ()
89448
89534
  {
89449
- if (! this .getCoord ())
89535
+ if (!this .getCoord ())
89450
89536
  return;
89451
89537
 
89452
89538
  Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .getCoord () .getSize (), 3, this .getCoord () .getSize ());
@@ -89606,6 +89692,14 @@ Object .assign (Object .setPrototypeOf (TriangleStripSet .prototype, Rendering_X
89606
89692
  {
89607
89693
  return this .triangleIndex [index];
89608
89694
  },
89695
+ getVerticesPerPolygon ()
89696
+ {
89697
+ return 3;
89698
+ },
89699
+ getNumVertices ()
89700
+ {
89701
+ return this .triangleIndex .length;
89702
+ },
89609
89703
  build ()
89610
89704
  {
89611
89705
  Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
@@ -89727,7 +89821,6 @@ x_ite_Namespace .add ("TriangleStripSet", "x_ite/Components/Rendering/TriangleSt
89727
89821
 
89728
89822
 
89729
89823
 
89730
-
89731
89824
 
89732
89825
 
89733
89826
  const Rendering_default_ = {
@@ -89757,7 +89850,6 @@ const Rendering_default_ = {
89757
89850
  Rendering_X3DCoordinateNode,
89758
89851
  Rendering_X3DGeometricPropertyNode,
89759
89852
  Rendering_X3DGeometryNode,
89760
- Rendering_X3DLineGeometryNode,
89761
89853
  Rendering_X3DNormalNode,
89762
89854
  ],
89763
89855
  };
@@ -89875,7 +89967,7 @@ const X3DShaderNode_default_ = X3DShaderNode;
89875
89967
  x_ite_Namespace .add ("X3DShaderNode", "x_ite/Components/Shaders/X3DShaderNode", X3DShaderNode_default_);
89876
89968
  /* harmony default export */ const Shaders_X3DShaderNode = (X3DShaderNode_default_);
89877
89969
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js
89878
- /* provided dependency */ var X3DProgrammableShaderObject_$ = __webpack_require__(237);
89970
+ /* provided dependency */ var X3DProgrammableShaderObject_$ = __webpack_require__(275);
89879
89971
  /*******************************************************************************
89880
89972
  *
89881
89973
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -90183,11 +90275,27 @@ Object .assign (X3DProgrammableShaderObject .prototype,
90183
90275
  "Vertex",
90184
90276
  "Particle",
90185
90277
  "ParticleMatrix",
90278
+ "ParticleNormalMatrix",
90279
+ "InstanceMatrix",
90280
+ "InstanceNormalMatrix",
90186
90281
  ];
90187
90282
 
90283
+ const attributeMappings = {
90284
+ "InstanceMatrix": ["ParticleMatrix"],
90285
+ "InstanceNormalMatrix": ["ParticleNormalMatrix"],
90286
+ };
90287
+
90188
90288
  for (const name of attributes)
90189
90289
  {
90190
- const attribute = gl .getAttribLocation (program, `x3d_${name}`);
90290
+ let attribute = gl .getAttribLocation (program, `x3d_${name}`);
90291
+
90292
+ for (const alias of attributeMappings [name] ?? [ ])
90293
+ {
90294
+ if (attribute === -1)
90295
+ attribute = gl .getAttribLocation (program, `x3d_${alias}`);
90296
+ else
90297
+ break;
90298
+ }
90191
90299
 
90192
90300
  this [`x3d_${name}`] = attribute;
90193
90301
 
@@ -91128,11 +91236,11 @@ Object .assign (X3DProgrammableShaderObject .prototype,
91128
91236
  gl .vertexAttribPointer (location, 4, gl .FLOAT, false, stride, offset);
91129
91237
  gl .vertexAttribDivisor (location, divisor);
91130
91238
  },
91131
- enableParticleMatrixAttribute (gl, buffer, stride, offset, divisor)
91239
+ enableInstanceMatrixAttribute (gl, buffer, stride, offset, divisor)
91132
91240
  {
91133
- const location0 = this .x3d_ParticleMatrix;
91241
+ const location0 = this .x3d_InstanceMatrix;
91134
91242
 
91135
- stride = stride || 64;
91243
+ stride = stride || 64; // 4 Bytes * 16
91136
91244
 
91137
91245
  gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
91138
91246
 
@@ -91145,6 +91253,23 @@ Object .assign (X3DProgrammableShaderObject .prototype,
91145
91253
  gl .vertexAttribDivisor (location, divisor);
91146
91254
  }
91147
91255
  },
91256
+ enableInstanceNormalMatrixAttribute (gl, buffer, stride, offset, divisor)
91257
+ {
91258
+ const location0 = this .x3d_InstanceNormalMatrix;
91259
+
91260
+ stride = stride || 36; // 4 Bytes * 9
91261
+
91262
+ gl .bindBuffer (gl .ARRAY_BUFFER, buffer);
91263
+
91264
+ for (let i = 0; i < 3; ++ i)
91265
+ {
91266
+ const location = location0 + i;
91267
+
91268
+ gl .enableVertexAttribArray (location);
91269
+ gl .vertexAttribPointer (location, 3, gl .FLOAT, false, stride, offset + 12 * i);
91270
+ gl .vertexAttribDivisor (location, divisor);
91271
+ }
91272
+ },
91148
91273
  getProgramInfo ()
91149
91274
  {
91150
91275
  function cmp (lhs, rhs) { return lhs < rhs ? -1 : lhs > rhs ? 1 : 0; }
@@ -93611,23 +93736,29 @@ return normalize(normal)*facing;
93611
93736
 
93612
93737
  x_ite_Namespace .add ("Normal2.glsl", "assets/shaders/webgl2/common/Normal2.glsl", Normal2_glsl_default_);
93613
93738
  /* harmony default export */ const Normal2_glsl = (Normal2_glsl_default_);
93614
- ;// CONCATENATED MODULE: ./src/assets/shaders/webgl2/common/Particle2.glsl.js
93615
- const Particle2_glsl_default_ = /* glsl */ `#if defined(X3D_PARTICLE_SYSTEM)
93739
+ ;// CONCATENATED MODULE: ./src/assets/shaders/webgl2/common/Instancing2.glsl.js
93740
+ const Instancing2_glsl_default_ = /* glsl */ `#if defined(X3D_INSTANCING)
93616
93741
  #if defined(X3D_TEX_COORD_RAMP)
93617
- uniform sampler2D x3d_TexCoordRamp;in vec4 x3d_Particle;vec4 getParticleTexCoord(const in vec4 texCoord){const int map[6]=int[6](0,1,2,0,2,3);int index0=int(x3d_Particle[3]);return texelFetch(x3d_TexCoordRamp,index0+map[gl_VertexID % 6],0);}
93742
+ uniform sampler2D x3d_TexCoordRamp;in vec4 x3d_Particle;vec4 getInstanceTexCoord(const in vec4 texCoord){const int map[6]=int[6](0,1,2,0,2,3);int index0=int(x3d_Particle[3]);return texelFetch(x3d_TexCoordRamp,index0+map[gl_VertexID % 6],0);}
93743
+ #else
93744
+ #define getInstanceTexCoord(texCoord)(texCoord)
93745
+ #endif
93746
+ #if defined(X3D_INSTANCE_NORMAL)
93747
+ in mat3 x3d_InstanceNormalMatrix;vec3 getInstanceNormal(const in vec3 normal){return x3d_InstanceNormalMatrix*normal;}
93618
93748
  #else
93619
- #define getParticleTexCoord(texCoord)(texCoord)
93749
+ #define getInstanceNormal(normal)(normal)
93620
93750
  #endif
93621
- in mat4 x3d_ParticleMatrix;vec4 getParticleVertex(const in vec4 vertex){return x3d_ParticleMatrix*vertex;}
93751
+ in mat4 x3d_InstanceMatrix;vec4 getInstanceVertex(const in vec4 vertex){return x3d_InstanceMatrix*vertex;}
93622
93752
  #else
93623
- #define getParticleVertex(vertex)(vertex)
93624
- #define getParticleTexCoord(texCoord)(texCoord)
93753
+ #define getInstanceVertex(vertex)(vertex)
93754
+ #define getInstanceNormal(normal)(normal)
93755
+ #define getInstanceTexCoord(texCoord)(texCoord)
93625
93756
  #endif
93626
93757
  `
93627
93758
  ;
93628
93759
 
93629
- x_ite_Namespace .add ("Particle2.glsl", "assets/shaders/webgl2/common/Particle2.glsl", Particle2_glsl_default_);
93630
- /* harmony default export */ const Particle2_glsl = (Particle2_glsl_default_);
93760
+ x_ite_Namespace .add ("Instancing2.glsl", "assets/shaders/webgl2/common/Instancing2.glsl", Instancing2_glsl_default_);
93761
+ /* harmony default export */ const Instancing2_glsl = (Instancing2_glsl_default_);
93631
93762
  ;// CONCATENATED MODULE: ./src/assets/shaders/webgl2/common/Perlin2.glsl.js
93632
93763
  const Perlin2_glsl_default_ = /* glsl */ `float rand(const in vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}float rand(const in vec2 co,const in float l){return rand(vec2(rand(co),l));}float rand(const in vec2 co,const in float l,const in float t){return rand(vec2(rand(co,l),t));}float perlin(const in vec2 p,const in float dim,const in float time){const float M_PI=3.14159265358979323846;vec2 pos=floor(p*dim);vec2 posx=pos+vec2(1.0,0.0);vec2 posy=pos+vec2(0.0,1.0);vec2 posxy=pos+vec2(1.0);float c=rand(pos,dim,time);float cx=rand(posx,dim,time);float cy=rand(posy,dim,time);float cxy=rand(posxy,dim,time);vec2 d=fract(p*dim);d=-0.5*cos(d*M_PI)+0.5;float ccx=mix(c,cx,d.x);float cycxy=mix(cy,cxy,d.x);float center=mix(ccx,cycxy,d.y);return center*2.0-1.0;}vec3 perlin(const in vec3 p){return vec3(perlin(p.xy,1.0,0.0),perlin(p.yz,1.0,0.0),perlin(p.zx,1.0,0.0));}`
93633
93764
  ;
@@ -93726,6 +93857,8 @@ in float x3d_CoordIndex;uniform sampler2D x3d_JointsTexture;uniform sampler2D x3
93726
93857
  #if defined(X3D_NORMALS)
93727
93858
  vec3 skinNormal=vec3(0.0);mat3 getJointNormalMatrix(const in int joint){vec4 a=texelFetch(x3d_JointMatricesTexture,joint*8+4,0);vec4 b=texelFetch(x3d_JointMatricesTexture,joint*8+5,0);vec4 c=texelFetch(x3d_JointMatricesTexture,joint*8+6,0);return mat3(a.xyz,vec3(a.w,b.xy),vec3(b.zw,c.x));}
93728
93859
  #define getSkinNormal(normal)(skinNormal)
93860
+ #else
93861
+ #define getSkinNormal(normal)(normal)
93729
93862
  #endif
93730
93863
  vec4 getSkinVertex(const in vec4 vertex,const in vec3 normal){int coordIndex=int(x3d_CoordIndex);vec4 skin=vertex;
93731
93864
  #if defined(X3D_NORMALS)
@@ -93847,7 +93980,7 @@ currentColor*=mix(vec3(1.0),T.rgb*x3d_TextureProjectorColor[i],T.a*x3d_TexturePr
93847
93980
  x_ite_Namespace .add ("Texture2.glsl", "assets/shaders/webgl2/common/Texture2.glsl", Texture2_glsl_default_);
93848
93981
  /* harmony default export */ const Texture2_glsl = (Texture2_glsl_default_);
93849
93982
  ;// CONCATENATED MODULE: ./src/assets/shaders/webgl2/common/Utils2.glsl.js
93850
- const Utils2_glsl_default_ = /* glsl */ `#if defined(X3D_SKINNING)||defined(X3D_PARTICLE_SYSTEM)
93983
+ const Utils2_glsl_default_ = /* glsl */ `#if defined(X3D_SKINNING)||defined(X3D_INSTANCING)
93851
93984
  vec4 texelFetch(const in sampler2D _sampler,const in int index,const in int lod){int x=textureSize(_sampler,lod).x;ivec2 p=ivec2(index % x,index/x);vec4 t=texelFetch(_sampler,p,lod);return t;}
93852
93985
  #endif
93853
93986
  `
@@ -93915,13 +94048,13 @@ out float depth;
93915
94048
  #endif
93916
94049
  #pragma X3D include "Utils.glsl"
93917
94050
  #pragma X3D include "Skin.glsl"
93918
- #pragma X3D include "Particle.glsl"
94051
+ #pragma X3D include "Instancing.glsl"
93919
94052
  #pragma X3D include "PointSize.glsl"
93920
94053
  void vertex_main(){
93921
94054
  #if defined(X3D_NORMALS)
93922
- vec4 x3d_TransformedVertex=getParticleVertex(getSkinVertex(x3d_Vertex,x3d_Normal));vec3 x3d_TransformedNormal=getSkinNormal(x3d_Normal);
94055
+ vec4 x3d_TransformedVertex=getInstanceVertex(getSkinVertex(x3d_Vertex,x3d_Normal));vec3 x3d_TransformedNormal=getInstanceNormal(getSkinNormal(x3d_Normal));
93923
94056
  #else
93924
- vec4 x3d_TransformedVertex=getParticleVertex(getSkinVertex(x3d_Vertex,vec3(0.0)));
94057
+ vec4 x3d_TransformedVertex=getInstanceVertex(getSkinVertex(x3d_Vertex,vec3(0.0)));
93925
94058
  #endif
93926
94059
  vec4 position=x3d_ModelViewMatrix*x3d_TransformedVertex;vertex=position.xyz;
93927
94060
  #if defined(X3D_GEOMETRY_0D)
@@ -93945,7 +94078,7 @@ color=x3d_Color;
93945
94078
 
93946
94079
  ${Array .from ({ length: maxTexCoords }, (_, i) => /* glsl */ `
93947
94080
  #if X3D_NUM_TEXTURE_COORDINATES > ${i}
93948
- texCoord${i} = getParticleTexCoord (x3d_TexCoord${i});
94081
+ texCoord${i} = getInstanceTexCoord (x3d_TexCoord${i});
93949
94082
  #endif
93950
94083
  `) .join ("\n")}
93951
94084
 
@@ -94413,9 +94546,9 @@ const Depth2_vs_default_ = /* glsl */ `#version 300 es
94413
94546
  precision highp float;precision highp int;precision highp sampler2D;uniform mat4 x3d_ProjectionMatrix;uniform mat4 x3d_ModelViewMatrix;in vec4 x3d_Vertex;out vec3 vertex;
94414
94547
  #pragma X3D include "common/Utils.glsl"
94415
94548
  #pragma X3D include "common/Skin.glsl"
94416
- #pragma X3D include "common/Particle.glsl"
94549
+ #pragma X3D include "common/Instancing.glsl"
94417
94550
  #pragma X3D include "common/PointSize.glsl"
94418
- void main(){vec4 x3d_TransformedVertex=getParticleVertex(getSkinVertex(x3d_Vertex,vec3(0.0)));vec4 position=x3d_ModelViewMatrix*x3d_TransformedVertex;vertex=position.xyz;
94551
+ void main(){vec4 x3d_TransformedVertex=getInstanceVertex(getSkinVertex(x3d_Vertex,vec3(0.0)));vec4 position=x3d_ModelViewMatrix*x3d_TransformedVertex;vertex=position.xyz;
94419
94552
  #if defined(X3D_GEOMETRY_0D)
94420
94553
  #if defined(X3D_STYLE_PROPERTIES)
94421
94554
  gl_PointSize=max(pointSize=getPointSize(vertex),2.0);
@@ -94756,7 +94889,12 @@ x_ite_Namespace .add ("Pointing2.fs", "assets/shaders/webgl2/Pointing2.fs", Poin
94756
94889
  /* harmony default export */ const Pointing2_fs = (Pointing2_fs_default_);
94757
94890
  ;// CONCATENATED MODULE: ./src/assets/shaders/webgl2/Pointing2.vs.js
94758
94891
  const Pointing2_vs_default_ = /* glsl */ `#version 300 es
94759
- precision highp float;precision highp int;precision highp sampler2D;uniform mat4 x3d_ProjectionMatrix;uniform mat4 x3d_ModelViewMatrix;in vec4 x3d_Vertex;in vec3 x3d_Normal;
94892
+ precision highp float;precision highp int;precision highp sampler2D;uniform mat4 x3d_ProjectionMatrix;uniform mat4 x3d_ModelViewMatrix;in vec4 x3d_Vertex;
94893
+ #if defined(X3D_NORMALS)
94894
+ in vec3 x3d_Normal;
94895
+ #else
94896
+ const vec3 x3d_Normal=vec3(0.0,0.0,1.0);
94897
+ #endif
94760
94898
  #if!defined(X3D_GEOMETRY_0D)&&!defined(X3D_GEOMETRY_1D)
94761
94899
  in vec4 x3d_TexCoord0;
94762
94900
  #endif
@@ -94772,13 +94910,13 @@ flat out float lengthSoFar;flat out vec2 startPoint;out vec2 midPoint;
94772
94910
  #endif
94773
94911
  #pragma X3D include "common/Utils.glsl"
94774
94912
  #pragma X3D include "common/Skin.glsl"
94775
- #pragma X3D include "common/Particle.glsl"
94913
+ #pragma X3D include "common/Instancing.glsl"
94776
94914
  #pragma X3D include "common/PointSize.glsl"
94777
94915
  void main(){
94778
94916
  #if defined(X3D_GEOMETRY_1D)&&defined(X3D_STYLE_PROPERTIES)
94779
94917
  lengthSoFar=x3d_LineStipple.z;startPoint=x3d_LineStipple.xy;midPoint=x3d_LineStipple.xy;
94780
94918
  #endif
94781
- vec4 x3d_TransformedVertex=getParticleVertex(getSkinVertex(x3d_Vertex,vec3(0.0)));vec4 position=x3d_ModelViewMatrix*x3d_TransformedVertex;vertex=position.xyz;normal=x3d_Normal;
94919
+ vec4 x3d_TransformedVertex=getInstanceVertex(getSkinVertex(x3d_Vertex,x3d_Normal));vec4 position=x3d_ModelViewMatrix*x3d_TransformedVertex;vertex=position.xyz;normal=getInstanceNormal(getSkinNormal(x3d_Normal));
94782
94920
  #if defined(X3D_GEOMETRY_0D)
94783
94921
  #if defined(X3D_STYLE_PROPERTIES)
94784
94922
  gl_PointSize=max(pointSize=getPointSize(vertex),2.0);
@@ -95351,7 +95489,7 @@ const ShaderRegistry = {
95351
95489
  Line2: Line22_glsl,
95352
95490
  Material: Material2_glsl,
95353
95491
  Normal: Normal2_glsl,
95354
- Particle: Particle2_glsl,
95492
+ Instancing: Instancing2_glsl,
95355
95493
  Perlin: Perlin2_glsl,
95356
95494
  Point: Point2_glsl,
95357
95495
  PointSize: PointSize2_glsl,
@@ -95516,7 +95654,7 @@ const ShaderCompiler_default_ = ShaderCompiler;
95516
95654
  x_ite_Namespace .add ("ShaderCompiler", "x_ite/Browser/Shaders/ShaderCompiler", ShaderCompiler_default_);
95517
95655
  /* harmony default export */ const Shaders_ShaderCompiler = (ShaderCompiler_default_);
95518
95656
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Shaders/ShaderPart.js
95519
- /* provided dependency */ var ShaderPart_$ = __webpack_require__(237);
95657
+ /* provided dependency */ var ShaderPart_$ = __webpack_require__(275);
95520
95658
  /*******************************************************************************
95521
95659
  *
95522
95660
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -96173,7 +96311,7 @@ const X3DAppearanceNode_default_ = X3DAppearanceNode;
96173
96311
  x_ite_Namespace .add ("X3DAppearanceNode", "x_ite/Components/Shape/X3DAppearanceNode", X3DAppearanceNode_default_);
96174
96312
  /* harmony default export */ const Shape_X3DAppearanceNode = (X3DAppearanceNode_default_);
96175
96313
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Shape/Appearance.js
96176
- /* provided dependency */ var Appearance_$ = __webpack_require__(237);
96314
+ /* provided dependency */ var Appearance_$ = __webpack_require__(275);
96177
96315
  /*******************************************************************************
96178
96316
  *
96179
96317
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -97134,7 +97272,8 @@ Object .assign (Object .setPrototypeOf (X3DMaterialNode .prototype, Shape_X3DApp
97134
97272
  key += textureNode ?.getTextureBits () .toString (16) ?? 0;
97135
97273
  }
97136
97274
 
97137
- return this .shaderNodes .get (key) ?? this .createShader (key, geometryContext, renderContext);
97275
+ return this .shaderNodes .get (key)
97276
+ ?? this .createShader (key, geometryContext, renderContext);
97138
97277
  },
97139
97278
  getShaderOptions (geometryContext, renderContext)
97140
97279
  {
@@ -97277,10 +97416,13 @@ Object .assign (Object .setPrototypeOf (X3DMaterialNode .prototype, Shape_X3DApp
97277
97416
  switch (shapeNode .getShapeKey ())
97278
97417
  {
97279
97418
  case 1:
97280
- options .push ("X3D_PARTICLE_SYSTEM");
97419
+ options .push ("X3D_INSTANCING");
97281
97420
  break;
97282
97421
  case 2:
97283
- options .push ("X3D_PARTICLE_SYSTEM", "X3D_TEX_COORD_RAMP");
97422
+ options .push ("X3D_INSTANCING", "X3D_TEX_COORD_RAMP");
97423
+ break;
97424
+ case 3:
97425
+ options .push ("X3D_INSTANCING", "X3D_INSTANCE_NORMAL");
97284
97426
  break;
97285
97427
  }
97286
97428
  }
@@ -98720,6 +98862,10 @@ Object .assign (Object .setPrototypeOf (X3DShapeNode .prototype, Core_X3DChildNo
98720
98862
  {
98721
98863
  return this .geometryNode;
98722
98864
  },
98865
+ getGeometryContext ()
98866
+ {
98867
+ return this .getGeometry ();
98868
+ },
98723
98869
  set_appearance__ ()
98724
98870
  {
98725
98871
  if (this .appearanceNode)
@@ -98898,7 +99044,10 @@ Object .assign (Object .setPrototypeOf (Shape .prototype, Shape_X3DShapeNode .pr
98898
99044
  {
98899
99045
  return 0;
98900
99046
  },
98901
- getGeometryContext: Shape_X3DShapeNode .prototype .getGeometry,
99047
+ getNumInstances ()
99048
+ {
99049
+ return 1;
99050
+ },
98902
99051
  set_geometry__ ()
98903
99052
  {
98904
99053
  Shape_X3DShapeNode .prototype .set_geometry__ .call (this);
@@ -98949,13 +99098,17 @@ Object .assign (Object .setPrototypeOf (Shape .prototype, Shape_X3DShapeNode .pr
98949
99098
  case Rendering_TraverseType .DISPLAY:
98950
99099
  {
98951
99100
  if (renderObject .addDisplayShape (this))
98952
- this .getAppearance () .traverse (type, renderObject); // Currently used for GeneratedCubeMapTexture.
99101
+ {
99102
+ // Currently used for GeneratedCubeMapTexture.
99103
+ this .getAppearance () .traverse (type, renderObject);
99104
+ }
98953
99105
 
98954
99106
  break;
98955
99107
  }
98956
99108
  }
98957
99109
 
98958
- this .getGeometry () .traverse (type, renderObject); // Currently used for ScreenText.
99110
+ // Currently used for ScreenText and Tools.
99111
+ this .getGeometry () .traverse (type, renderObject);
98959
99112
  },
98960
99113
  picking (renderObject)
98961
99114
  {
@@ -104648,28 +104801,6 @@ Object .assign (Object .setPrototypeOf (StreamAudioSource .prototype, Sound_X3DS
104648
104801
  {
104649
104802
  Sound_X3DSoundSourceNode .prototype .initialize .call (this);
104650
104803
  },
104651
- // createPeerConnection ()
104652
- // {
104653
- // const peerConnection = new RTCPeerConnection ();
104654
-
104655
- // peerConnection .ontrack = function (event)
104656
- // {
104657
- // console.log ("Remote Streams", event .streams .length)
104658
-
104659
- // const remoteVideo = document .getElementById ("remoteVideo")
104660
-
104661
- // for (const stream of event .streams)
104662
- // {
104663
- // console .log (stream .id)
104664
-
104665
- // if (!this .streamIdentifier .include (stream .id))
104666
- // continue;
104667
-
104668
- // if (remoteVideo .srcObject !== stream)
104669
- // remoteVideo .srcObject = stream;
104670
- // }
104671
- // };
104672
- // }
104673
104804
  });
104674
104805
 
104675
104806
 
@@ -105129,8 +105260,8 @@ const GifMedia_default_ = GifMedia;
105129
105260
  x_ite_Namespace .add ("GifMedia", "x_ite/Browser/Texturing/GifMedia", GifMedia_default_);
105130
105261
  /* harmony default export */ const Texturing_GifMedia = (GifMedia_default_);
105131
105262
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Texturing/MovieTexture.js
105132
- /* provided dependency */ var MovieTexture_$ = __webpack_require__(237);
105133
- /* provided dependency */ var SuperGif = __webpack_require__(646);
105263
+ /* provided dependency */ var MovieTexture_$ = __webpack_require__(275);
105264
+ /* provided dependency */ var SuperGif = __webpack_require__(964);
105134
105265
  /*******************************************************************************
105135
105266
  *
105136
105267
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -107735,6 +107866,8 @@ x_ite_Namespace .add ("Time", "x_ite/Components/Time", Time_default_);
107735
107866
 
107736
107867
 
107737
107868
 
107869
+ const nop = Function .prototype;
107870
+
107738
107871
  const Context =
107739
107872
  {
107740
107873
  excludes: new Set ([
@@ -107767,10 +107900,16 @@ const Context =
107767
107900
  {
107768
107901
  const ext = gl .getExtension ("OES_vertex_array_object");
107769
107902
 
107770
- gl .bindVertexArray = ext .bindVertexArrayOES .bind (ext);
107771
- gl .createVertexArray = ext .createVertexArrayOES .bind (ext);
107772
- gl .deleteVertexArray = ext .deleteVertexArrayOES .bind (ext);
107773
- gl .isVertexArray = ext .isVertexArrayOES .bind (ext);
107903
+ gl .bindVertexArray = ext ?.bindVertexArrayOES .bind (ext) ?? nop;
107904
+ gl .createVertexArray = ext ?.createVertexArrayOES .bind (ext) ?? nop;
107905
+ gl .deleteVertexArray = ext ?.deleteVertexArrayOES .bind (ext) ?? nop;
107906
+ gl .isVertexArray = ext ?.isVertexArrayOES .bind (ext) ?? nop;
107907
+ }
107908
+
107909
+ {
107910
+ const ext = gl .getExtension ("ANGLE_instanced_arrays");
107911
+
107912
+ gl .drawArraysInstanced = ext ?.drawArraysInstancedANGLE .bind (ext) ?? nop;
107774
107913
  }
107775
107914
  }
107776
107915
  }
@@ -107792,7 +107931,7 @@ const Context =
107792
107931
 
107793
107932
  if (aliasedLineWidthRange [0] === 1 && aliasedLineWidthRange [1] === 1)
107794
107933
  {
107795
- gl .lineWidth = Function .prototype;
107934
+ gl .lineWidth = nop;
107796
107935
  gl .HAS_FEATURE_TRANSFORMED_LINES = gl .getVersion () >= 2;
107797
107936
 
107798
107937
  if (DEVELOPMENT)
@@ -107915,377 +108054,528 @@ const Context_default_ = Context;
107915
108054
 
107916
108055
  x_ite_Namespace .add ("Context", "x_ite/Browser/Core/Context", Context_default_);
107917
108056
  /* harmony default export */ const Core_Context = (Context_default_);
107918
- ;// CONCATENATED MODULE: ./src/locale/de.po.js
107919
- const de_po_default_ = `msgid ""
107920
- msgstr ""
107921
- "Project-Id-Version: X_ITE\n"
107922
- "POT-Creation-Date: 2015-12-23 04:56+0100\n"
107923
- "PO-Revision-Date: 2015-12-23 04:57+0100\n"
107924
- "Last-Translator: Holger Seelig <holger.seelig@yahoo.de>\n"
107925
- "Language-Team: \n"
107926
- "Language: de\n"
107927
- "MIME-Version: 1.0\n"
107928
- "Content-Type: text/plain; charset=UTF-8\n"
107929
- "Content-Transfer-Encoding: 8bit\n"
107930
- "X-Generator: Poedit 1.8.4\n"
107931
- "X-Poedit-Basepath: ../x_ite\n"
107932
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
107933
- "X-Poedit-SourceCharset: UTF-8\n"
107934
- "X-Poedit-SearchPath-0: .\n"
107935
-
107936
- msgid "Less Properties"
107937
- msgstr "Weniger Eigenschaften"
107938
-
107939
- msgid "More Properties"
107940
- msgstr "Mehr Eigenschaften"
107941
-
107942
- msgid "Frame rate"
107943
- msgstr "Bildrate"
107944
-
107945
- msgid "fps"
107946
- msgstr "BpS"
107947
-
107948
- msgid "Speed"
107949
- msgstr "Geschwindigkeit"
107950
-
107951
- msgid "m/s"
107952
- msgstr ""
107953
-
107954
- msgid "km/h"
107955
- msgstr ""
107956
-
107957
- msgid "Browser"
107958
- msgstr ""
107959
-
107960
- msgid "ms"
107961
- msgstr ""
107962
-
107963
- msgid "X3D total"
107964
- msgstr "X3D gesamt"
107965
-
107966
- msgid "Event Processing"
107967
- msgstr "Ereignisverarbeitung"
107968
-
107969
- msgid "Pointer"
107970
- msgstr "Zeigegerät"
107971
-
107972
- msgid "Camera"
107973
- msgstr "Kamera"
107974
-
107975
- msgid "Collision Detection"
107976
- msgstr "Kollisionserkennung"
107977
-
107978
- msgid "Rendering"
107979
- msgstr "Rendering"
107980
-
107981
- msgid "Number of Shapes"
107982
- msgstr "Anzahl der Formen"
107983
-
107984
- msgid "Number of Sensors"
107985
- msgstr "Anzahl der Sensoren"
107986
-
107987
- msgid "Browser Timings"
107988
- msgstr "Zeitberechnung"
107989
-
107990
- msgid "X_ITE Browser"
107991
- msgstr ""
107992
-
107993
- msgid "Viewpoints"
107994
- msgstr "Ansichtspunkte"
107995
-
107996
- msgid "Available Viewers"
107997
- msgstr "Verfügbare Betrachter"
107998
-
107999
- msgid "Straighten Horizon"
108000
- msgstr "Horizont gerade richten"
108001
-
108002
- msgid "Primitive Quality"
108003
- msgstr "Qualität der Grundobjekte"
108004
-
108005
- msgid "High"
108006
- msgstr "Hoch"
108007
-
108008
- msgid "high"
108009
- msgstr "hoch"
108010
-
108011
- msgid "Medium"
108012
- msgstr "Mittel"
108013
-
108014
- msgid "medium"
108015
- msgstr "mittel"
108016
-
108017
- msgid "Low"
108018
- msgstr "Niedrig"
108019
-
108020
- msgid "low"
108021
- msgstr "niedrig"
108022
-
108023
- msgid "Texture Quality"
108024
- msgstr "Textur Qualität"
108025
-
108026
- msgid "Display Rubberband"
108027
- msgstr "Gummiband anzeigen"
108028
-
108029
- msgid "Rubberband"
108030
- msgstr "Gummiband"
108031
-
108032
- msgid "on"
108033
- msgstr "an"
108034
-
108035
- msgid "off"
108036
- msgstr "aus"
108037
-
108038
- msgid "Mute Browser"
108039
- msgstr "Browser stumm schalten"
108040
-
108041
- msgid "Browser muted"
108042
- msgstr "Browser stumm geschalten"
108043
-
108044
- msgid "Browser unmuted"
108045
- msgstr "Browser Ton an"
108046
-
108047
- msgid "Leave Fullscreen"
108048
- msgstr "Vollbild verlassen"
108049
-
108050
- msgid "Fullscreen"
108051
- msgstr "Vollbild"
108052
-
108053
- msgid "About X_ITE"
108054
- msgstr "Über X_ITE"
108055
-
108056
- msgid "Examine Viewer"
108057
- msgstr "Untersuchen"
108058
-
108059
- msgid "Walk Viewer"
108060
- msgstr "Laufen"
108061
-
108062
- msgid "Fly Viewer"
108063
- msgstr "Fliegen"
108064
-
108065
- msgid "Plane Viewer"
108066
- msgstr "Ebenen Betrachter"
108067
-
108068
- msgid "Look At Viewer"
108069
- msgstr "Auf Objekte zielen"
108070
-
108071
- msgid "None Viewer"
108072
- msgstr "Kein Betrachter"
108073
-
108074
- msgid "Points"
108075
- msgstr "Punkte"
108076
-
108077
- msgid "Flat"
108078
- msgstr "Flach"
108079
-
108080
- msgid "Wireframe"
108081
- msgstr "Drahtgittermodel"
108082
-
108083
- msgid "Loading %1 file"
108084
- msgstr "Lade %1 Datei"
108085
-
108086
- msgid "Loading %1 files"
108087
- msgstr "Lade %1 Dateien"
108088
-
108089
- msgid "Loading done"
108090
- msgstr "Fertig mit Laden"
108057
+ ;// CONCATENATED MODULE: ./src/x_ite/Browser/ParticleSystems/GeometryTypes.js
108058
+ /*******************************************************************************
108059
+ *
108060
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
108061
+ *
108062
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
108063
+ *
108064
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
108065
+ *
108066
+ * The copyright notice above does not evidence any actual of intended
108067
+ * publication of such source code, and is an unpublished work by create3000.
108068
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
108069
+ * create3000.
108070
+ *
108071
+ * No permission is granted to copy, distribute, or create derivative works from
108072
+ * the contents of this software, in whole or in part, without the prior written
108073
+ * permission of create3000.
108074
+ *
108075
+ * NON-MILITARY USE ONLY
108076
+ *
108077
+ * All create3000 software are effectively free software with a non-military use
108078
+ * restriction. It is free. Well commented source is provided. You may reuse the
108079
+ * source in any way you please with the exception anything that uses it must be
108080
+ * marked to indicate is contains 'non-military use only' components.
108081
+ *
108082
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
108083
+ *
108084
+ * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
108085
+ *
108086
+ * This file is part of the X_ITE Project.
108087
+ *
108088
+ * X_ITE is free software: you can redistribute it and/or modify it under the
108089
+ * terms of the GNU General Public License version 3 only, as published by the
108090
+ * Free Software Foundation.
108091
+ *
108092
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
108093
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
108094
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
108095
+ * details (a copy is included in the LICENSE file that accompanied this code).
108096
+ *
108097
+ * You should have received a copy of the GNU General Public License version 3
108098
+ * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
108099
+ * copy of the GPLv3 License.
108100
+ *
108101
+ * For Silvio, Joy and Adi.
108102
+ *
108103
+ ******************************************************************************/
108091
108104
 
108092
- msgid "Failed loading world."
108093
- msgstr "Laden der Dateien fehlgeschlagen."
108105
+ let GeometryTypes_i = 0;
108094
108106
 
108095
- msgid "Show World Info"
108096
- msgstr "World Info anzeigen"
108107
+ const GeometryTypes = {
108108
+ POINT: GeometryTypes_i ++,
108109
+ LINE: GeometryTypes_i ++,
108110
+ TRIANGLE: GeometryTypes_i ++,
108111
+ QUAD: GeometryTypes_i ++,
108112
+ SPRITE: GeometryTypes_i ++,
108113
+ GEOMETRY: GeometryTypes_i ++,
108114
+ };
108097
108115
 
108098
- msgid "Viewpoint is copied to clipboard."
108099
- msgstr "Ansichtspunkt wurde in die Zwischenablage kopiert."
108100
- `;
108116
+ const GeometryTypes_default_ = GeometryTypes;
108101
108117
  ;
108102
108118
 
108103
- x_ite_Namespace .add ("de.po", "locale/de.po", de_po_default_);
108104
- /* harmony default export */ const de_po = (de_po_default_);
108105
- ;// CONCATENATED MODULE: ./src/locale/fr.po.js
108106
- const fr_po_default_ = `msgid ""
108107
- msgstr ""
108108
- "Project-Id-Version: X_ITE\n"
108109
- "POT-Creation-Date: 2015-12-23 04:58+0100\n"
108110
- "PO-Revision-Date: 2015-12-23 05:07+0100\n"
108111
- "Last-Translator: Holger Seelig <holger.seelig@yahoo.de>\n"
108112
- "Language-Team: \n"
108113
- "Language: fr\n"
108114
- "MIME-Version: 1.0\n"
108115
- "Content-Type: text/plain; charset=UTF-8\n"
108116
- "Content-Transfer-Encoding: 8bit\n"
108117
- "X-Generator: Poedit 1.8.4\n"
108118
- "X-Poedit-Basepath: ../x_ite\n"
108119
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
108120
- "X-Poedit-SourceCharset: UTF-8\n"
108121
- "X-Poedit-SearchPath-0: .\n"
108122
-
108123
- msgid "Less Properties"
108124
- msgstr "Moins de Propriétés"
108125
-
108126
- msgid "More Properties"
108127
- msgstr "Plus de Propriétés"
108128
-
108129
- msgid "Frame rate"
108130
- msgstr "Fréquence d'Images"
108131
-
108132
- msgid "fps"
108133
- msgstr "fps"
108134
-
108135
- msgid "Speed"
108136
- msgstr "Vélocité"
108137
-
108138
- msgid "m/s"
108139
- msgstr ""
108140
-
108141
- msgid "km/h"
108142
- msgstr ""
108143
-
108144
- msgid "Browser"
108145
- msgstr "X_ITE Navigateur"
108146
-
108147
- msgid "ms"
108148
- msgstr ""
108149
-
108150
- msgid "X3D total"
108151
- msgstr "X3D total"
108152
-
108153
- msgid "Event Processing"
108154
- msgstr "Traitement des Événements"
108155
-
108156
- msgid "Pointer"
108157
- msgstr "Pointeur"
108158
-
108159
- msgid "Camera"
108160
- msgstr "Caméra"
108161
-
108162
- msgid "Collision Detection"
108163
- msgstr "Détection des Collisions"
108164
-
108165
- msgid "Rendering"
108166
- msgstr "Rendement"
108167
-
108168
- msgid "Number of Shapes"
108169
- msgstr "Nombre de Formes"
108170
-
108171
- msgid "Number of Sensors"
108172
- msgstr "Nombre de Senseurs"
108173
-
108174
- msgid "Browser Timings"
108175
- msgstr "Calcul du Temps"
108176
-
108177
- msgid "X_ITE Browser"
108178
- msgstr "X_ITE Navigateur"
108179
-
108180
- msgid "Viewpoints"
108181
- msgstr "Points de Vue"
108182
-
108183
- msgid "Available Viewers"
108184
- msgstr "Visionneurs disponibles"
108185
-
108186
- msgid "Straighten Horizon"
108187
- msgstr "Redresser l'Horizon"
108188
-
108189
- msgid "Primitive Quality"
108190
- msgstr "Qualité des Objets simples"
108191
-
108192
- msgid "High"
108193
- msgstr "Haut"
108194
-
108195
- msgid "high"
108196
- msgstr "haut"
108197
-
108198
- msgid "Medium"
108199
- msgstr "Moyenne"
108200
-
108201
- msgid "medium"
108202
- msgstr "moyenne"
108203
-
108204
- msgid "Low"
108205
- msgstr "Faible"
108206
-
108207
- msgid "low"
108208
- msgstr "faible"
108209
-
108210
- msgid "Texture Quality"
108211
- msgstr "Qualité des Textures"
108212
-
108213
- msgid "Display Rubberband"
108214
- msgstr "Présenter le Bande élastique"
108215
-
108216
- msgid "Rubberband"
108217
- msgstr "Bande élastique"
108218
-
108219
- msgid "on"
108220
- msgstr "marche"
108221
-
108222
- msgid "off"
108223
- msgstr "arrêt"
108224
-
108225
- msgid "Mute Browser"
108226
- msgstr "Rendre Navigateur muet"
108227
-
108228
- msgid "Browser muted"
108229
- msgstr "Navigateur muet"
108230
-
108231
- msgid "Browser unmuted"
108232
- msgstr "Son de Navigateur réactivé"
108233
-
108234
- msgid "Leave Fullscreen"
108235
- msgstr "Laisser le plein Écran"
108236
-
108237
- msgid "Fullscreen"
108238
- msgstr "Plein Écran"
108239
-
108240
- msgid "About X_ITE"
108241
- msgstr "À propos de X_ITE"
108242
-
108243
- msgid "Examine Viewer"
108244
- msgstr "Examiner"
108245
-
108246
- msgid "Walk Viewer"
108247
- msgstr "Aller"
108248
-
108249
- msgid "Fly Viewer"
108250
- msgstr "Voler"
108251
-
108252
- msgid "Plane Viewer"
108253
- msgstr "Visionneur de la Plaine"
108254
-
108255
- msgid "Look At Viewer"
108256
- msgstr "Regarder un Objet de près"
108257
-
108258
- msgid "None Viewer"
108259
- msgstr "Pas de Visionneur"
108260
-
108261
- msgid "Flat"
108262
- msgstr "Plat"
108263
-
108264
- msgid "Wireframe"
108265
- msgstr "Image filaire"
108266
-
108267
- msgid "Loading %1 file"
108268
- msgstr "Télécharger %1 Fichier"
108269
-
108270
- msgid "Loading %1 files"
108271
- msgstr "Télécharger %1 Fichiers"
108272
-
108273
- msgid "Loading done"
108274
- msgstr "Téléchargement fini"
108275
-
108276
- msgid "Failed loading world."
108277
- msgstr "Le chargement des Fichiers a échoué."
108278
-
108279
- msgid "Show World Info"
108280
- msgstr "Afficher World Info"
108119
+ x_ite_Namespace .add ("GeometryTypes", "x_ite/Browser/ParticleSystems/GeometryTypes", GeometryTypes_default_);
108120
+ /* harmony default export */ const ParticleSystems_GeometryTypes = (GeometryTypes_default_);
108121
+ ;// CONCATENATED MODULE: ./src/locale/de.js
108122
+ const de_default_ = [
108123
+ [
108124
+ "Less Properties",
108125
+ "Weniger Eigenschaften",
108126
+ ],
108127
+ [
108128
+ "More Properties",
108129
+ "Mehr Eigenschaften",
108130
+ ],
108131
+ [
108132
+ "Frame rate",
108133
+ "Bildrate",
108134
+ ],
108135
+ [
108136
+ "fps",
108137
+ "BpS",
108138
+ ],
108139
+ [
108140
+ "Speed",
108141
+ "Geschwindigkeit",
108142
+ ],
108143
+ [
108144
+ "m/s",
108145
+ "",
108146
+ ],
108147
+ [
108148
+ "km/h",
108149
+ "",
108150
+ ],
108151
+ [
108152
+ "Browser",
108153
+ "",
108154
+ ],
108155
+ [
108156
+ "ms",
108157
+ "",
108158
+ ],
108159
+ [
108160
+ "X3D total",
108161
+ "X3D gesamt",
108162
+ ],
108163
+ [
108164
+ "Event Processing",
108165
+ "Ereignisverarbeitung",
108166
+ ],
108167
+ [
108168
+ "Pointer",
108169
+ "Zeigegerät",
108170
+ ],
108171
+ [
108172
+ "Camera",
108173
+ "Kamera",
108174
+ ],
108175
+ [
108176
+ "Collision Detection",
108177
+ "Kollisionserkennung",
108178
+ ],
108179
+ [
108180
+ "Rendering",
108181
+ "Rendering",
108182
+ ],
108183
+ [
108184
+ "Number of Primitives",
108185
+ "Anzahl der Grundobjekte",
108186
+ ],
108187
+ [
108188
+ "Number of Shapes",
108189
+ "Anzahl der Formen",
108190
+ ],
108191
+ [
108192
+ "Number of Sensors",
108193
+ "Anzahl der Sensoren",
108194
+ ],
108195
+ [
108196
+ "Browser Timings",
108197
+ "Zeitberechnung",
108198
+ ],
108199
+ [
108200
+ "X_ITE Browser",
108201
+ "",
108202
+ ],
108203
+ [
108204
+ "Viewpoints",
108205
+ "Ansichtspunkte",
108206
+ ],
108207
+ [
108208
+ "Available Viewers",
108209
+ "Verfügbare Betrachter",
108210
+ ],
108211
+ [
108212
+ "Straighten Horizon",
108213
+ "Horizont gerade richten",
108214
+ ],
108215
+ [
108216
+ "Primitive Quality",
108217
+ "Qualität der Grundobjekte",
108218
+ ],
108219
+ [
108220
+ "High",
108221
+ "Hoch",
108222
+ ],
108223
+ [
108224
+ "high",
108225
+ "hoch",
108226
+ ],
108227
+ [
108228
+ "Medium",
108229
+ "Mittel",
108230
+ ],
108231
+ [
108232
+ "medium",
108233
+ "mittel",
108234
+ ],
108235
+ [
108236
+ "Low",
108237
+ "Niedrig",
108238
+ ],
108239
+ [
108240
+ "low",
108241
+ "niedrig",
108242
+ ],
108243
+ [
108244
+ "Texture Quality",
108245
+ "Textur Qualität",
108246
+ ],
108247
+ [
108248
+ "Display Rubberband",
108249
+ "Gummiband anzeigen",
108250
+ ],
108251
+ [
108252
+ "Rubberband",
108253
+ "Gummiband",
108254
+ ],
108255
+ [
108256
+ "on",
108257
+ "an",
108258
+ ],
108259
+ [
108260
+ "off",
108261
+ "aus",
108262
+ ],
108263
+ [
108264
+ "Mute Browser",
108265
+ "Browser stumm schalten",
108266
+ ],
108267
+ [
108268
+ "Browser muted",
108269
+ "Browser stumm geschalten",
108270
+ ],
108271
+ [
108272
+ "Browser unmuted",
108273
+ "Browser Ton an",
108274
+ ],
108275
+ [
108276
+ "Leave Fullscreen",
108277
+ "Vollbild verlassen",
108278
+ ],
108279
+ [
108280
+ "Fullscreen",
108281
+ "Vollbild",
108282
+ ],
108283
+ [
108284
+ "About X_ITE",
108285
+ "Über X_ITE",
108286
+ ],
108287
+ [
108288
+ "Examine Viewer",
108289
+ "Untersuchen",
108290
+ ],
108291
+ [
108292
+ "Walk Viewer",
108293
+ "Laufen",
108294
+ ],
108295
+ [
108296
+ "Fly Viewer",
108297
+ "Fliegen",
108298
+ ],
108299
+ [
108300
+ "Plane Viewer",
108301
+ "Ebenen Betrachter",
108302
+ ],
108303
+ [
108304
+ "Look At Viewer",
108305
+ "Auf Objekte zielen",
108306
+ ],
108307
+ [
108308
+ "None Viewer",
108309
+ "Kein Betrachter",
108310
+ ],
108311
+ [
108312
+ "Points",
108313
+ "Punkte",
108314
+ ],
108315
+ [
108316
+ "Flat",
108317
+ "Flach",
108318
+ ],
108319
+ [
108320
+ "Wireframe",
108321
+ "Drahtgittermodel",
108322
+ ],
108323
+ [
108324
+ "Loading %1 file",
108325
+ "Lade %1 Datei",
108326
+ ],
108327
+ [
108328
+ "Loading %1 files",
108329
+ "Lade %1 Dateien",
108330
+ ],
108331
+ [
108332
+ "Loading done",
108333
+ "Fertig mit Laden",
108334
+ ],
108335
+ [
108336
+ "Failed loading world.",
108337
+ "Laden der Dateien fehlgeschlagen.",
108338
+ ],
108339
+ [
108340
+ "Show World Info",
108341
+ "World Info anzeigen",
108342
+ ],
108343
+ [
108344
+ "Viewpoint is copied to clipboard.",
108345
+ "Ansichtspunkt wurde in die Zwischenablage kopiert.",
108346
+ ],
108347
+ ];
108348
+ ;
108281
108349
 
108282
- msgid "Viewpoint is copied to clipboard."
108283
- msgstr "Le point de Vue est copié dans le Presse-Papiers."
108284
- `;
108350
+ x_ite_Namespace .add ("de", "locale/de", de_default_);
108351
+ /* harmony default export */ const de = (de_default_);
108352
+ ;// CONCATENATED MODULE: ./src/locale/fr.js
108353
+ const fr_default_ = [
108354
+ [
108355
+ "Less Properties",
108356
+ "Moins de Propriétés",
108357
+ ],
108358
+ [
108359
+ "More Properties",
108360
+ "Plus de Propriétés",
108361
+ ],
108362
+ [
108363
+ "Frame rate",
108364
+ "Fréquence d'Images",
108365
+ ],
108366
+ [
108367
+ "fps",
108368
+ "fps",
108369
+ ],
108370
+ [
108371
+ "Speed",
108372
+ "Vélocité",
108373
+ ],
108374
+ [
108375
+ "m/s",
108376
+ "",
108377
+ ],
108378
+ [
108379
+ "km/h",
108380
+ "",
108381
+ ],
108382
+ [
108383
+ "Browser",
108384
+ "X_ITE Navigateur",
108385
+ ],
108386
+ [
108387
+ "ms",
108388
+ "",
108389
+ ],
108390
+ [
108391
+ "X3D total",
108392
+ "X3D total",
108393
+ ],
108394
+ [
108395
+ "Event Processing",
108396
+ "Traitement des Événements",
108397
+ ],
108398
+ [
108399
+ "Pointer",
108400
+ "Pointeur",
108401
+ ],
108402
+ [
108403
+ "Camera",
108404
+ "Caméra",
108405
+ ],
108406
+ [
108407
+ "Collision Detection",
108408
+ "Détection des Collisions",
108409
+ ],
108410
+ [
108411
+ "Rendering",
108412
+ "Rendement",
108413
+ ],
108414
+ [
108415
+ "Number of Primitives",
108416
+ "Nombre d'Objets de Base",
108417
+ ],
108418
+ [
108419
+ "Number of Shapes",
108420
+ "Nombre de Formes",
108421
+ ],
108422
+ [
108423
+ "Number of Sensors",
108424
+ "Nombre de Senseurs",
108425
+ ],
108426
+ [
108427
+ "Browser Timings",
108428
+ "Calcul du Temps",
108429
+ ],
108430
+ [
108431
+ "X_ITE Browser",
108432
+ "X_ITE Navigateur",
108433
+ ],
108434
+ [
108435
+ "Viewpoints",
108436
+ "Points de Vue",
108437
+ ],
108438
+ [
108439
+ "Available Viewers",
108440
+ "Visionneurs disponibles",
108441
+ ],
108442
+ [
108443
+ "Straighten Horizon",
108444
+ "Redresser l'Horizon",
108445
+ ],
108446
+ [
108447
+ "Primitive Quality",
108448
+ "Qualité des Objets simples",
108449
+ ],
108450
+ [
108451
+ "High",
108452
+ "Haut",
108453
+ ],
108454
+ [
108455
+ "high",
108456
+ "haut",
108457
+ ],
108458
+ [
108459
+ "Medium",
108460
+ "Moyenne",
108461
+ ],
108462
+ [
108463
+ "medium",
108464
+ "moyenne",
108465
+ ],
108466
+ [
108467
+ "Low",
108468
+ "Faible",
108469
+ ],
108470
+ [
108471
+ "low",
108472
+ "faible",
108473
+ ],
108474
+ [
108475
+ "Texture Quality",
108476
+ "Qualité des Textures",
108477
+ ],
108478
+ [
108479
+ "Display Rubberband",
108480
+ "Présenter le Bande élastique",
108481
+ ],
108482
+ [
108483
+ "Rubberband",
108484
+ "Bande élastique",
108485
+ ],
108486
+ [
108487
+ "on",
108488
+ "marche",
108489
+ ],
108490
+ [
108491
+ "off",
108492
+ "arrêt",
108493
+ ],
108494
+ [
108495
+ "Mute Browser",
108496
+ "Rendre Navigateur muet",
108497
+ ],
108498
+ [
108499
+ "Browser muted",
108500
+ "Navigateur muet",
108501
+ ],
108502
+ [
108503
+ "Browser unmuted",
108504
+ "Son de Navigateur réactivé",
108505
+ ],
108506
+ [
108507
+ "Leave Fullscreen",
108508
+ "Laisser le plein Écran",
108509
+ ],
108510
+ [
108511
+ "Fullscreen",
108512
+ "Plein Écran",
108513
+ ],
108514
+ [
108515
+ "About X_ITE",
108516
+ "À propos de X_ITE",
108517
+ ],
108518
+ [
108519
+ "Examine Viewer",
108520
+ "Examiner",
108521
+ ],
108522
+ [
108523
+ "Walk Viewer",
108524
+ "Aller",
108525
+ ],
108526
+ [
108527
+ "Fly Viewer",
108528
+ "Voler",
108529
+ ],
108530
+ [
108531
+ "Plane Viewer",
108532
+ "Visionneur de la Plaine",
108533
+ ],
108534
+ [
108535
+ "Look At Viewer",
108536
+ "Regarder un Objet de près",
108537
+ ],
108538
+ [
108539
+ "None Viewer",
108540
+ "Pas de Visionneur",
108541
+ ],
108542
+ [
108543
+ "Flat",
108544
+ "Plat",
108545
+ ],
108546
+ [
108547
+ "Wireframe",
108548
+ "Image filaire",
108549
+ ],
108550
+ [
108551
+ "Loading %1 file",
108552
+ "Télécharger %1 Fichier",
108553
+ ],
108554
+ [
108555
+ "Loading %1 files",
108556
+ "Télécharger %1 Fichiers",
108557
+ ],
108558
+ [
108559
+ "Loading done",
108560
+ "Téléchargement fini",
108561
+ ],
108562
+ [
108563
+ "Failed loading world.",
108564
+ "Le chargement des Fichiers a échoué.",
108565
+ ],
108566
+ [
108567
+ "Show World Info",
108568
+ "Afficher World Info",
108569
+ ],
108570
+ [
108571
+ "Viewpoint is copied to clipboard.",
108572
+ "Le point de Vue est copié dans le Presse-Papiers.",
108573
+ ]
108574
+ ];
108285
108575
  ;
108286
108576
 
108287
- x_ite_Namespace .add ("fr.po", "locale/fr.po", fr_po_default_);
108288
- /* harmony default export */ const fr_po = (fr_po_default_);
108577
+ x_ite_Namespace .add ("fr", "locale/fr", fr_default_);
108578
+ /* harmony default export */ const fr = (fr_default_);
108289
108579
  ;// CONCATENATED MODULE: ./src/locale/gettext.js
108290
108580
  /*******************************************************************************
108291
108581
  *
@@ -108337,17 +108627,10 @@ x_ite_Namespace .add ("fr.po", "locale/fr.po", fr_po_default_);
108337
108627
 
108338
108628
 
108339
108629
 
108340
- function execAll (regex, string)
108341
- {
108342
- const matches = [ ];
108343
-
108344
- let match = null;
108345
-
108346
- while (match = regex .exec (string))
108347
- matches .push (match);
108348
-
108349
- return matches;
108350
- }
108630
+ const locales = new Map ([
108631
+ ["de", de],
108632
+ ["fr", fr],
108633
+ ]);
108351
108634
 
108352
108635
  function getLanguage ()
108353
108636
  {
@@ -108355,64 +108638,22 @@ function getLanguage ()
108355
108638
  {
108356
108639
  const language = value .split ("-") [0];
108357
108640
 
108358
- if (locales [language])
108641
+ if (locales .get (language))
108359
108642
  return language;
108360
108643
  }
108361
108644
 
108362
108645
  return (navigator .language || navigator .userLanguage) .split ("-") [0];
108363
108646
  }
108364
108647
 
108365
- function setLocale (language)
108366
- {
108367
- if (locales [language])
108368
- {
108369
- const
108370
- matches = execAll (msg, locales [language]),
108371
- locale = locales [language] = { };
108372
-
108373
- for (var i = 0, length = matches .length; i < length; ++ i)
108374
- {
108375
- if (matches [i] [2] .length)
108376
- locale [matches [i] [1]] = matches [i] [2];
108377
- }
108378
- }
108379
- }
108380
-
108381
- const locales =
108382
- {
108383
- en: "C",
108384
- de: de_po,
108385
- fr: fr_po,
108386
- };
108387
-
108388
- const
108389
- msg = /msgid\s+"(.*?)"\nmsgstr\s+"(.*?)"\n/g,
108390
- language = getLanguage ();
108391
-
108392
- setLocale (language);
108393
-
108394
- function gettext (string)
108395
- {
108396
- const locale = locales [language];
108397
-
108398
- if (locale === undefined)
108399
- return string;
108400
-
108401
- const translation = locale [string];
108402
-
108403
- if (translation === undefined)
108404
- return string;
108648
+ const locale = new Map (locales .get (getLanguage ()) ?? [ ]);
108405
108649
 
108406
- return translation;
108407
- }
108408
-
108409
- const gettext_default_ = gettext;
108650
+ const gettext_default_ = (string) => locale .get (string) || string;
108410
108651
  ;
108411
108652
 
108412
108653
  x_ite_Namespace .add ("gettext", "locale/gettext", gettext_default_);
108413
- /* harmony default export */ const locale_gettext = (gettext_default_);
108654
+ /* harmony default export */ const gettext = (gettext_default_);
108414
108655
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/BrowserTimings.js
108415
- /* provided dependency */ var BrowserTimings_$ = __webpack_require__(237);
108656
+ /* provided dependency */ var BrowserTimings_$ = __webpack_require__(275);
108416
108657
  /*******************************************************************************
108417
108658
  *
108418
108659
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -108464,12 +108705,15 @@ x_ite_Namespace .add ("gettext", "locale/gettext", gettext_default_);
108464
108705
 
108465
108706
 
108466
108707
 
108708
+
108709
+
108467
108710
  function BrowserTimings (executionContext)
108468
108711
  {
108469
108712
  Base_X3DBaseNode .call (this, executionContext);
108470
108713
 
108471
108714
  this .localStorage = this .getBrowser () .getLocalStorage () .addNameSpace ("BrowserTimings.");
108472
108715
  this .fps = new Time_StopWatch ();
108716
+ this .primitives = { };
108473
108717
  }
108474
108718
 
108475
108719
  Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseNode .prototype),
@@ -108493,7 +108737,7 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108493
108737
  this .header = BrowserTimings_$("<thead></thead>")
108494
108738
  .append (BrowserTimings_$("<tr></tr>")
108495
108739
  .append (BrowserTimings_$("<th colspan='2'></th>")
108496
- .text (locale_gettext("Browser Timings"))))
108740
+ .text (gettext("Browser Timings"))))
108497
108741
  .appendTo (this .table);
108498
108742
 
108499
108743
  this .body = BrowserTimings_$("<tbody></tbody>")
@@ -108520,56 +108764,61 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108520
108764
  this .pickingTime = BrowserTimings_$("<td></td>");
108521
108765
  this .collisionTime = BrowserTimings_$("<td></td>");
108522
108766
  this .renderTime = BrowserTimings_$("<td></td>");
108767
+ this .numPrimitives = BrowserTimings_$("<td></td>");
108523
108768
  this .numShapes = BrowserTimings_$("<td></td>");
108524
108769
  this .sensors = BrowserTimings_$("<td></td>");
108525
108770
 
108526
108771
  this .body .append (BrowserTimings_$("<tr></tr>")
108527
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Frame rate") + ":"))
108772
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Frame rate") + ":"))
108528
108773
  .append (this .frameRate));
108529
108774
 
108530
108775
  this .body .append (BrowserTimings_$("<tr></tr>")
108531
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Speed") + ":"))
108776
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Speed") + ":"))
108532
108777
  .append (this .speed)
108533
108778
  .addClass ("x_ite-private-more"));
108534
108779
 
108535
108780
  this .body .append (BrowserTimings_$("<tr></tr>")
108536
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Browser") + ":"))
108781
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Browser") + ":"))
108537
108782
  .append (this .browserTime));
108538
108783
 
108539
108784
  this .body .append (BrowserTimings_$("<tr></tr>")
108540
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("X3D total") + ":"))
108785
+ .append (BrowserTimings_$("<td></td>") .text (gettext("X3D total") + ":"))
108541
108786
  .append (this .x3dTotal));
108542
108787
 
108543
108788
  this .body .append (BrowserTimings_$("<tr></tr>")
108544
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Event Processing") + ":"))
108789
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Event Processing") + ":"))
108545
108790
  .append (this .eventProcessing));
108546
108791
 
108547
108792
  this .body .append (BrowserTimings_$("<tr></tr>")
108548
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Pointer") + ":"))
108793
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Pointer") + ":"))
108549
108794
  .append (this .pointerTime));
108550
108795
 
108551
108796
  this .body .append (BrowserTimings_$("<tr></tr>")
108552
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Camera") + ":"))
108797
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Camera") + ":"))
108553
108798
  .append (this .cameraTime));
108554
108799
 
108555
108800
  this .body .append (BrowserTimings_$("<tr></tr>")
108556
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Picking") + ":"))
108801
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Picking") + ":"))
108557
108802
  .append (this .pickingTime));
108558
108803
 
108559
108804
  this .body .append (BrowserTimings_$("<tr></tr>")
108560
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Collision Detection") + ":"))
108805
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Collision Detection") + ":"))
108561
108806
  .append (this .collisionTime));
108562
108807
 
108563
108808
  this .body .append (BrowserTimings_$("<tr></tr>")
108564
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Rendering") + ":"))
108809
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Rendering") + ":"))
108565
108810
  .append (this .renderTime));
108566
108811
 
108567
108812
  this .body .append (BrowserTimings_$("<tr></tr>")
108568
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Number of Shapes") + ":"))
108813
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Number of Primitives") + ":"))
108814
+ .append (this .numPrimitives));
108815
+
108816
+ this .body .append (BrowserTimings_$("<tr></tr>")
108817
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Number of Shapes") + ":"))
108569
108818
  .append (this .numShapes));
108570
108819
 
108571
108820
  this .body .append (BrowserTimings_$("<tr></tr>")
108572
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Number of Sensors") + ":"))
108821
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Number of Sensors") + ":"))
108573
108822
  .append (this .sensors));
108574
108823
 
108575
108824
  this .button .on ("click touchend", this .set_type__ .bind (this));
@@ -108584,13 +108833,14 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108584
108833
  {
108585
108834
  this .element .stop (true, true) .fadeIn ();
108586
108835
  this .fps .reset ();
108836
+ this .getBrowser () .addBrowserCallback (this, Base_X3DConstants .INITIALIZED_EVENT, () => this .reset ());
108587
108837
  this .getBrowser () .prepareEvents () .addInterest ("update", this);
108588
- this .update ();
108589
- this .build ();
108838
+ this .reset ();
108590
108839
  }
108591
108840
  else
108592
108841
  {
108593
108842
  this .element .stop (true, true) .fadeOut ();
108843
+ this .getBrowser () .removeBrowserCallback (this, Base_X3DConstants .INITIALIZED_EVENT);
108594
108844
  this .getBrowser () .prepareEvents () .removeInterest ("update", this);
108595
108845
  }
108596
108846
  },
@@ -108615,9 +108865,19 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108615
108865
  set_button__ ()
108616
108866
  {
108617
108867
  if (this .localStorage .type === "MORE")
108618
- this .button .text (locale_gettext("Less Properties"));
108868
+ this .button .text (gettext("Less Properties"));
108619
108869
  else
108620
- this .button .text (locale_gettext("More Properties"));
108870
+ this .button .text (gettext("More Properties"));
108871
+ },
108872
+ reset ()
108873
+ {
108874
+ this .getBrowser () .addBrowserEvent ();
108875
+
108876
+ requestAnimationFrame (() =>
108877
+ {
108878
+ this .fps .reset ();
108879
+ this .build ();
108880
+ });
108621
108881
  },
108622
108882
  update ()
108623
108883
  {
@@ -108635,8 +108895,16 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108635
108895
  {
108636
108896
  const browser = this .getBrowser ();
108637
108897
 
108638
- this .frameRate .text (`${f2 (1000 / this .fps .averageTime)} ${locale_gettext("fps")}`);
108639
- this .speed .text (`${f2 (this .getSpeed (browser .currentSpeed))} ${this .getSpeedUnit (browser .currentSpeed)}`);
108898
+ if (this .fps .elapsedTime)
108899
+ {
108900
+ this .frameRate .text (`${f2 (1000 / this .fps .averageTime)} ${gettext("fps")}`);
108901
+ this .speed .text (`${f2 (this .getSpeed (browser .currentSpeed ))} ${this .getSpeedUnit (browser .currentSpeed)}`);
108902
+ }
108903
+ else
108904
+ {
108905
+ this .frameRate .text (`${f2 (0)} ${gettext("fps")}`);
108906
+ this .speed .text (`${f2 (this .getSpeed (0))} ${this .getSpeedUnit (0)}`);
108907
+ }
108640
108908
 
108641
108909
  if (this .localStorage .type !== "MORE" || !browser .getWorld ())
108642
108910
  return;
@@ -108649,19 +108917,21 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108649
108917
  routingTime = Math .max (0, browser .getBrowserTime () .averageTime - (browser .getCameraTime () .averageTime + browser .getCollisionTime () .averageTime + browser .getDisplayTime () .averageTime)),
108650
108918
  prepareEvents = browser .prepareEvents () .getInterests () .size - 1,
108651
108919
  sensors = browser .sensorEvents () .getInterests () .size,
108652
- opaqueShapes = layers .reduce ((n, layer) => n + layer .getNumOpaqueShapes (), 0),
108653
- transparentShapes = layers .reduce ((n, layer) => n + layer .getNumTransparentShapes (), 0);
108654
-
108655
- this .browserTime .text (`${f2 (browser .getSystemTime () .averageTime)} ${locale_gettext("ms")}`);
108656
- this .x3dTotal .text (`${f2 (browser .getBrowserTime () .averageTime)} ${locale_gettext("ms")}`);
108657
- this .eventProcessing .text (`${f2 (routingTime)} ${locale_gettext("ms")}`);
108658
- this .pointerTime .text (`${f2 (browser .getPointingTime () .averageTime)} ${locale_gettext("ms")}`);
108659
- this .cameraTime .text (`${f2 (browser .getCameraTime () .averageTime)} ${locale_gettext("ms")}`);
108660
- this .pickingTime .text (`${f2 (browser .getPickingTime () .averageTime)} ${locale_gettext("ms")}`);
108661
- this .collisionTime .text (`${f2 (collisionTime)} ${locale_gettext("ms")}`);
108662
- this .renderTime .text (`${f2 (browser .getDisplayTime () .averageTime)} ${locale_gettext("ms")}`);
108663
- this .numShapes .text (`${opaqueShapes} + ${transparentShapes}`);
108664
- this .sensors .text (prepareEvents + sensors);
108920
+ primitives = this .getPrimitives (layers),
108921
+ opaqueShapes = this .getOpaqueShapes (layers),
108922
+ transparentShapes = this .getTransparentShapes (layers);
108923
+
108924
+ this .browserTime .text (`${f2 (browser .getSystemTime () .averageTime)} ${gettext("ms")}`);
108925
+ this .x3dTotal .text (`${f2 (browser .getBrowserTime () .averageTime)} ${gettext("ms")}`);
108926
+ this .eventProcessing .text (`${f2 (routingTime)} ${gettext("ms")}`);
108927
+ this .pointerTime .text (`${f2 (browser .getPointingTime () .averageTime)} ${gettext("ms")}`);
108928
+ this .cameraTime .text (`${f2 (browser .getCameraTime () .averageTime)} ${gettext("ms")}`);
108929
+ this .pickingTime .text (`${f2 (browser .getPickingTime () .averageTime)} ${gettext("ms")}`);
108930
+ this .collisionTime .text (`${f2 (collisionTime)} ${gettext("ms")}`);
108931
+ this .renderTime .text (`${f2 (browser .getDisplayTime () .averageTime)} ${gettext("ms")}`);
108932
+ this .numPrimitives .text (`${f0 (primitives .points)}; ${f0 (primitives .lines)}; ${f0 (primitives .triangles)}`);
108933
+ this .numShapes .text (`${f0 (opaqueShapes)} + ${f0 (transparentShapes)}`);
108934
+ this .sensors .text (f0 (prepareEvents + sensors));
108665
108935
 
108666
108936
  browser .getSystemTime () .reset ();
108667
108937
  browser .getBrowserTime () .reset ();
@@ -108683,9 +108953,119 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108683
108953
  getSpeedUnit (speed)
108684
108954
  {
108685
108955
  if (speed < 15)
108686
- return locale_gettext("m/s");
108956
+ return gettext("m/s");
108957
+
108958
+ return gettext("km/h");
108959
+ },
108960
+ getPrimitives (layerNodes)
108961
+ {
108962
+ this .primitives .points = 0;
108963
+ this .primitives .lines = 0;
108964
+ this .primitives .triangles = 0;
108965
+
108966
+ for (const layerNode of layerNodes)
108967
+ {
108968
+ const
108969
+ numOpaqueShapes = layerNode .getNumOpaqueShapes (),
108970
+ numTransparentShapes = layerNode .getNumTransparentShapes (),
108971
+ opaqueShapes = layerNode .getOpaqueShapes (),
108972
+ transparentShapes = layerNode .getTransparentShapes ();
108973
+
108974
+ this .countPrimitives (opaqueShapes, numOpaqueShapes);
108975
+ this .countPrimitives (transparentShapes, numTransparentShapes);
108976
+ }
108687
108977
 
108688
- return locale_gettext("km/h");
108978
+ return this .primitives;
108979
+ },
108980
+ countPrimitives (shapes, numShapes)
108981
+ {
108982
+ for (let i = 0; i < numShapes; ++ i)
108983
+ {
108984
+ const
108985
+ shapeNode = shapes [i] .shapeNode,
108986
+ numInstances = shapeNode .getNumInstances ();
108987
+
108988
+ if (shapeNode .getType () .at (-1) === Base_X3DConstants .ParticleSystem)
108989
+ {
108990
+ switch (shapeNode .getGeometryType ())
108991
+ {
108992
+ case ParticleSystems_GeometryTypes .POINT:
108993
+ {
108994
+ this .primitives .points += numInstances;
108995
+ continue;
108996
+ }
108997
+ case ParticleSystems_GeometryTypes .LINE:
108998
+ {
108999
+ this .primitives .lines += numInstances;
109000
+ continue;
109001
+ }
109002
+ case ParticleSystems_GeometryTypes .TRIANGLE:
109003
+ case ParticleSystems_GeometryTypes .QUAD:
109004
+ case ParticleSystems_GeometryTypes .SPRITE:
109005
+ {
109006
+ this .primitives .triangles += numInstances * 2;
109007
+ continue;
109008
+ }
109009
+ case ParticleSystems_GeometryTypes .GEOMETRY:
109010
+ {
109011
+ break;
109012
+ }
109013
+ }
109014
+ }
109015
+
109016
+ const geometryNode = shapeNode .getGeometry ();
109017
+
109018
+ // ParticleSystem nodes may have no geometry.
109019
+ if (!geometryNode)
109020
+ continue;
109021
+
109022
+ if (!geometryNode .getExecutionContext () .getCountPrimitives ())
109023
+ continue;
109024
+
109025
+ const vertices = geometryNode .getVertices () .length / 4 * numInstances;
109026
+
109027
+ switch (geometryNode .getGeometryType ())
109028
+ {
109029
+ case 0:
109030
+ {
109031
+ this .primitives .points += vertices;
109032
+ break;
109033
+ }
109034
+ case 1:
109035
+ {
109036
+ this .primitives .lines += vertices / 2;
109037
+ break;
109038
+ }
109039
+ case 2:
109040
+ case 3:
109041
+ {
109042
+ this .primitives .triangles += vertices / 3;
109043
+ break;
109044
+ }
109045
+ }
109046
+ }
109047
+ },
109048
+ getOpaqueShapes (layers)
109049
+ {
109050
+ return layers .reduce ((n, layer) => n + this .countShapes (layer .getOpaqueShapes (), layer .getNumOpaqueShapes ()), 0);
109051
+ },
109052
+ getTransparentShapes (layers)
109053
+ {
109054
+ return layers .reduce ((n, layer) => n + this .countShapes (layer .getTransparentShapes (), layer .getNumTransparentShapes ()), 0);
109055
+ },
109056
+ countShapes (shapes, numShapes)
109057
+ {
109058
+ let count = 0;
109059
+
109060
+ for (let i = 0; i < numShapes; ++ i)
109061
+ {
109062
+ if (!shapes [i] .shapeNode .getExecutionContext () .getCountPrimitives ())
109063
+ continue;
109064
+
109065
+ ++ count;
109066
+ }
109067
+
109068
+ return count;
108689
109069
  },
108690
109070
  });
108691
109071
 
@@ -108698,19 +109078,23 @@ Object .defineProperties (BrowserTimings,
108698
109078
  },
108699
109079
  });
108700
109080
 
108701
- const f2 = (() =>
109081
+ function format (minimumFractionDigits, maximumFractionDigits)
108702
109082
  {
108703
109083
  const format = new Intl .NumberFormat (navigator .language || navigator .userLanguage, {
108704
109084
  notation: "standard",
108705
- minimumFractionDigits: 2,
108706
- maximumFractionDigits: 2,
109085
+ minimumFractionDigits,
109086
+ maximumFractionDigits,
108707
109087
  }) .format;
108708
109088
 
108709
109089
  return function (value)
108710
109090
  {
108711
109091
  return format (Number .isFinite (value) ? value : 0);
108712
109092
  };
108713
- })();
109093
+ }
109094
+
109095
+ const
109096
+ f0 = format (0, 0),
109097
+ f2 = format (2, 2);
108714
109098
 
108715
109099
  const BrowserTimings_default_ = BrowserTimings;
108716
109100
  ;
@@ -108842,7 +109226,7 @@ const TextureQuality_default_ = TextureQuality;
108842
109226
  x_ite_Namespace .add ("TextureQuality", "x_ite/Browser/Core/TextureQuality", TextureQuality_default_);
108843
109227
  /* harmony default export */ const Core_TextureQuality = (TextureQuality_default_);
108844
109228
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/BrowserOptions.js
108845
- /* provided dependency */ var BrowserOptions_$ = __webpack_require__(237);
109229
+ /* provided dependency */ var BrowserOptions_$ = __webpack_require__(275);
108846
109230
  /*******************************************************************************
108847
109231
  *
108848
109232
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -109436,7 +109820,7 @@ const RenderingProperties_default_ = RenderingProperties;
109436
109820
  x_ite_Namespace .add ("RenderingProperties", "x_ite/Browser/Core/RenderingProperties", RenderingProperties_default_);
109437
109821
  /* harmony default export */ const Core_RenderingProperties = (RenderingProperties_default_);
109438
109822
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/Notification.js
109439
- /* provided dependency */ var Notification_$ = __webpack_require__(237);
109823
+ /* provided dependency */ var Notification_$ = __webpack_require__(275);
109440
109824
  /*******************************************************************************
109441
109825
  *
109442
109826
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -109559,8 +109943,8 @@ const Notification_default_ = Notification;
109559
109943
  x_ite_Namespace .add ("Notification", "x_ite/Browser/Core/Notification", Notification_default_);
109560
109944
  /* harmony default export */ const Core_Notification = (Notification_default_);
109561
109945
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/ContextMenu.js
109562
- /* provided dependency */ var jquery_fullscreen = __webpack_require__(133);
109563
- /* provided dependency */ var ContextMenu_$ = __webpack_require__(237);
109946
+ /* provided dependency */ var jquery_fullscreen = __webpack_require__(543);
109947
+ /* provided dependency */ var ContextMenu_$ = __webpack_require__(275);
109564
109948
  /*******************************************************************************
109565
109949
  *
109566
109950
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -109680,16 +110064,16 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109680
110064
  },
109681
110065
  "separator0": "--------",
109682
110066
  "viewpoints": {
109683
- name: locale_gettext("Viewpoints"),
110067
+ name: gettext("Viewpoints"),
109684
110068
  className: "context-menu-icon x_ite-private-icon-viewpoint",
109685
110069
  items: this .getViewpoints (),
109686
110070
  },
109687
110071
  "available-viewers": {
109688
- name: locale_gettext("Available Viewers"),
110072
+ name: gettext("Available Viewers"),
109689
110073
  items: this .getAvailableViewers (),
109690
110074
  },
109691
110075
  "straighten-horizon": {
109692
- name: locale_gettext("Straighten Horizon"),
110076
+ name: gettext("Straighten Horizon"),
109693
110077
  type: "checkbox",
109694
110078
  selected: browser .getBrowserOption ("StraightenHorizon"),
109695
110079
  events: {
@@ -109700,14 +110084,14 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109700
110084
  browser .setBrowserOption ("StraightenHorizon", straightenHorizon);
109701
110085
 
109702
110086
  if (straightenHorizon)
109703
- browser .getNotification () ._string = locale_gettext("Straighten Horizon") + ": " + locale_gettext("on");
110087
+ browser .getNotification () ._string = gettext("Straighten Horizon") + ": " + gettext("on");
109704
110088
  else
109705
- browser .getNotification () ._string = locale_gettext("Straighten Horizon") + ": " + locale_gettext("off");
110089
+ browser .getNotification () ._string = gettext("Straighten Horizon") + ": " + gettext("off");
109706
110090
  },
109707
110091
  },
109708
110092
  },
109709
110093
  "display-rubberband": {
109710
- name: locale_gettext("Display Rubberband"),
110094
+ name: gettext("Display Rubberband"),
109711
110095
  type: "checkbox",
109712
110096
  selected: browser .getBrowserOption ("Rubberband"),
109713
110097
  events: {
@@ -109718,19 +110102,19 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109718
110102
  browser .setBrowserOption ("Rubberband", rubberband);
109719
110103
 
109720
110104
  if (rubberband)
109721
- browser .getNotification () ._string = locale_gettext("Rubberband") + ": " + locale_gettext("on");
110105
+ browser .getNotification () ._string = gettext("Rubberband") + ": " + gettext("on");
109722
110106
  else
109723
- browser .getNotification () ._string = locale_gettext("Rubberband") + ": " + locale_gettext("off");
110107
+ browser .getNotification () ._string = gettext("Rubberband") + ": " + gettext("off");
109724
110108
  },
109725
110109
  },
109726
110110
  },
109727
110111
  "separator1": "--------",
109728
110112
  "primitive-quality": {
109729
- name: locale_gettext("Primitive Quality"),
110113
+ name: gettext("Primitive Quality"),
109730
110114
  className: "context-menu-icon x_ite-private-icon-primitive-quality",
109731
110115
  items: {
109732
110116
  "high": {
109733
- name: locale_gettext("High"),
110117
+ name: gettext("High"),
109734
110118
  type: "radio",
109735
110119
  radio: "primitive-quality",
109736
110120
  selected: browser .getBrowserOption ("PrimitiveQuality") === "HIGH",
@@ -109738,12 +110122,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109738
110122
  click: () =>
109739
110123
  {
109740
110124
  browser .setBrowserOption ("PrimitiveQuality", "HIGH");
109741
- browser .getNotification () ._string = locale_gettext("Primitive Quality") + ": " + locale_gettext("high");
110125
+ browser .getNotification () ._string = gettext("Primitive Quality") + ": " + gettext("high");
109742
110126
  },
109743
110127
  },
109744
110128
  },
109745
110129
  "medium": {
109746
- name: locale_gettext("Medium"),
110130
+ name: gettext("Medium"),
109747
110131
  type: "radio",
109748
110132
  radio: "primitive-quality",
109749
110133
  selected: browser .getBrowserOption ("PrimitiveQuality") === "MEDIUM",
@@ -109751,12 +110135,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109751
110135
  click: () =>
109752
110136
  {
109753
110137
  browser .setBrowserOption ("PrimitiveQuality", "MEDIUM");
109754
- browser .getNotification () ._string = locale_gettext("Primitive Quality") + ": " + locale_gettext("medium");
110138
+ browser .getNotification () ._string = gettext("Primitive Quality") + ": " + gettext("medium");
109755
110139
  },
109756
110140
  },
109757
110141
  },
109758
110142
  "low": {
109759
- name: locale_gettext("Low"),
110143
+ name: gettext("Low"),
109760
110144
  type: "radio",
109761
110145
  radio: "primitive-quality",
109762
110146
  selected: browser .getBrowserOption ("PrimitiveQuality") === "LOW",
@@ -109764,18 +110148,18 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109764
110148
  click: () =>
109765
110149
  {
109766
110150
  browser .setBrowserOption ("PrimitiveQuality", "LOW");
109767
- browser .getNotification () ._string = locale_gettext("Primitive Quality") + ": " + locale_gettext("low");
110151
+ browser .getNotification () ._string = gettext("Primitive Quality") + ": " + gettext("low");
109768
110152
  },
109769
110153
  },
109770
110154
  },
109771
110155
  },
109772
110156
  },
109773
110157
  "texture-quality": {
109774
- name: locale_gettext("Texture Quality"),
110158
+ name: gettext("Texture Quality"),
109775
110159
  className: "context-menu-icon x_ite-private-icon-texture-quality",
109776
110160
  items: {
109777
110161
  "high": {
109778
- name: locale_gettext("High"),
110162
+ name: gettext("High"),
109779
110163
  type: "radio",
109780
110164
  radio: "texture-quality",
109781
110165
  selected: browser .getBrowserOption ("TextureQuality") === "HIGH",
@@ -109783,12 +110167,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109783
110167
  click: () =>
109784
110168
  {
109785
110169
  browser .setBrowserOption ("TextureQuality", "HIGH");
109786
- browser .getNotification () ._string = locale_gettext("Texture Quality") + ": " + locale_gettext("high");
110170
+ browser .getNotification () ._string = gettext("Texture Quality") + ": " + gettext("high");
109787
110171
  },
109788
110172
  },
109789
110173
  },
109790
110174
  "medium": {
109791
- name: locale_gettext("Medium"),
110175
+ name: gettext("Medium"),
109792
110176
  type: "radio",
109793
110177
  radio: "texture-quality",
109794
110178
  selected: browser .getBrowserOption ("TextureQuality") === "MEDIUM",
@@ -109796,12 +110180,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109796
110180
  click: () =>
109797
110181
  {
109798
110182
  browser .setBrowserOption ("TextureQuality", "MEDIUM");
109799
- browser .getNotification () ._string = locale_gettext("Texture Quality") + ": " + locale_gettext("medium");
110183
+ browser .getNotification () ._string = gettext("Texture Quality") + ": " + gettext("medium");
109800
110184
  },
109801
110185
  },
109802
110186
  },
109803
110187
  "low": {
109804
- name: locale_gettext("Low"),
110188
+ name: gettext("Low"),
109805
110189
  type: "radio",
109806
110190
  radio: "texture-quality",
109807
110191
  selected: browser .getBrowserOption ("TextureQuality") === "LOW",
@@ -109809,18 +110193,18 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109809
110193
  click: () =>
109810
110194
  {
109811
110195
  browser .setBrowserOption ("TextureQuality", "LOW");
109812
- browser .getNotification () ._string = locale_gettext("Texture Quality") + ": " + locale_gettext("low");
110196
+ browser .getNotification () ._string = gettext("Texture Quality") + ": " + gettext("low");
109813
110197
  },
109814
110198
  },
109815
110199
  },
109816
110200
  },
109817
110201
  },
109818
110202
  "shading": {
109819
- name: locale_gettext("Shading"),
110203
+ name: gettext("Shading"),
109820
110204
  className: "context-menu-icon x_ite-private-icon-shading",
109821
110205
  items: {
109822
110206
  "point": {
109823
- name: locale_gettext("Points"),
110207
+ name: gettext("Points"),
109824
110208
  type: "radio",
109825
110209
  radio: "shading",
109826
110210
  selected: browser .getBrowserOption ("Shading") === "POINT",
@@ -109828,12 +110212,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109828
110212
  click: () =>
109829
110213
  {
109830
110214
  browser .setBrowserOption ("Shading", "POINT");
109831
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Points");
110215
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Points");
109832
110216
  },
109833
110217
  },
109834
110218
  },
109835
110219
  "wireframe": {
109836
- name: locale_gettext("Wireframe"),
110220
+ name: gettext("Wireframe"),
109837
110221
  type: "radio",
109838
110222
  radio: "shading",
109839
110223
  selected: browser .getBrowserOption ("Shading") === "WIREFRAME",
@@ -109841,12 +110225,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109841
110225
  click: () =>
109842
110226
  {
109843
110227
  browser .setBrowserOption ("Shading", "WIREFRAME");
109844
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Wireframe");
110228
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Wireframe");
109845
110229
  },
109846
110230
  },
109847
110231
  },
109848
110232
  "flat": {
109849
- name: locale_gettext("Flat"),
110233
+ name: gettext("Flat"),
109850
110234
  type: "radio",
109851
110235
  radio: "shading",
109852
110236
  selected: browser .getBrowserOption ("Shading") === "FLAT",
@@ -109854,12 +110238,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109854
110238
  click: () =>
109855
110239
  {
109856
110240
  browser .setBrowserOption ("Shading", "FLAT");
109857
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Flat");
110241
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Flat");
109858
110242
  },
109859
110243
  },
109860
110244
  },
109861
110245
  "gouraud": {
109862
- name: locale_gettext("Gouraud"),
110246
+ name: gettext("Gouraud"),
109863
110247
  type: "radio",
109864
110248
  radio: "shading",
109865
110249
  selected: browser .getBrowserOption ("Shading") === "GOURAUD",
@@ -109867,12 +110251,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109867
110251
  click: () =>
109868
110252
  {
109869
110253
  browser .setBrowserOption ("Shading", "GOURAUD");
109870
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Gouraud");
110254
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Gouraud");
109871
110255
  },
109872
110256
  },
109873
110257
  },
109874
110258
  "phong": {
109875
- name: locale_gettext("Phong"),
110259
+ name: gettext("Phong"),
109876
110260
  type: "radio",
109877
110261
  radio: "shading",
109878
110262
  selected: browser .getBrowserOption ("Shading") === "PHONG",
@@ -109880,7 +110264,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109880
110264
  click: () =>
109881
110265
  {
109882
110266
  browser .setBrowserOption ("Shading", "PHONG");
109883
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Phong");
110267
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Phong");
109884
110268
  },
109885
110269
  },
109886
110270
  },
@@ -109888,7 +110272,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109888
110272
  },
109889
110273
  "separator2": "--------",
109890
110274
  "browser-timings": {
109891
- name: locale_gettext("Browser Timings"),
110275
+ name: gettext("Browser Timings"),
109892
110276
  type: "checkbox",
109893
110277
  selected: browser .getBrowserOption ("Timings"),
109894
110278
  events: {
@@ -109900,7 +110284,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109900
110284
  },
109901
110285
  },
109902
110286
  "fullscreen": {
109903
- name: fullscreen ? locale_gettext("Leave Fullscreen") : locale_gettext("Fullscreen"),
110287
+ name: fullscreen ? gettext("Leave Fullscreen") : gettext("Fullscreen"),
109904
110288
  className: "context-menu-icon " + (fullscreen
109905
110289
  ? "x_ite-private-icon-leave-fullscreen"
109906
110290
  : "x_ite-private-icon-enter-fullscreen"),
@@ -109918,7 +110302,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109918
110302
  Object .assign (menu .items, {
109919
110303
  "separator4": "--------",
109920
110304
  "world-info": {
109921
- name: locale_gettext("Show World Info"),
110305
+ name: gettext("Show World Info"),
109922
110306
  className: "context-menu-icon x_ite-private-icon-world-info",
109923
110307
  callback ()
109924
110308
  {
@@ -109948,7 +110332,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109948
110332
  },
109949
110333
  },
109950
110334
  "about": {
109951
- name: locale_gettext("About X_ITE"),
110335
+ name: gettext("About X_ITE"),
109952
110336
  className: "context-menu-icon x_ite-private-icon-help-about",
109953
110337
  callback ()
109954
110338
  {
@@ -110038,12 +110422,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
110038
110422
  for (const viewer of availableViewers)
110039
110423
  {
110040
110424
  menu [viewer] = {
110041
- name: locale_gettext(this .getViewerName (viewer)),
110425
+ name: gettext(this .getViewerName (viewer)),
110042
110426
  className: "context-menu-icon x_ite-private-icon-" + viewer .toLowerCase () + "-viewer",
110043
110427
  callback: () =>
110044
110428
  {
110045
110429
  browser ._viewer = viewer;
110046
- browser .getNotification () ._string = locale_gettext(this .getViewerName (viewer));
110430
+ browser .getNotification () ._string = gettext(this .getViewerName (viewer));
110047
110431
  browser .getSurface () .focus ();
110048
110432
  },
110049
110433
  };
@@ -110059,17 +110443,17 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
110059
110443
  switch (viewer)
110060
110444
  {
110061
110445
  case "EXAMINE":
110062
- return locale_gettext("Examine Viewer");
110446
+ return gettext("Examine Viewer");
110063
110447
  case "WALK":
110064
- return locale_gettext("Walk Viewer");
110448
+ return gettext("Walk Viewer");
110065
110449
  case "FLY":
110066
- return locale_gettext("Fly Viewer");
110450
+ return gettext("Fly Viewer");
110067
110451
  case "PLANE":
110068
- return locale_gettext("Plane Viewer");
110452
+ return gettext("Plane Viewer");
110069
110453
  case "LOOKAT":
110070
- return locale_gettext("Look At Viewer");
110454
+ return gettext("Look At Viewer");
110071
110455
  case "NONE":
110072
- return locale_gettext("None Viewer");
110456
+ return gettext("None Viewer");
110073
110457
  }
110074
110458
  },
110075
110459
  init (options)
@@ -111385,7 +111769,7 @@ Object .assign (Object .setPrototypeOf (X3DScene .prototype, Execution_X3DExecut
111385
111769
 
111386
111770
  this .updateExportedNode (exportedName, node);
111387
111771
 
111388
- this ._exportedNodes_changed = this .getBrowser () .getCurrentTime ();
111772
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
111389
111773
  },
111390
111774
  updateExportedNode (exportedName, node)
111391
111775
  {
@@ -111405,7 +111789,7 @@ Object .assign (Object .setPrototypeOf (X3DScene .prototype, Execution_X3DExecut
111405
111789
 
111406
111790
  this [_exportedNodes] .update (exportedName, exportedName, exportedNode);
111407
111791
 
111408
- this ._exportedNodes_changed = this .getBrowser () .getCurrentTime ();
111792
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
111409
111793
  },
111410
111794
  removeExportedNode (exportedName)
111411
111795
  {
@@ -111413,7 +111797,7 @@ Object .assign (Object .setPrototypeOf (X3DScene .prototype, Execution_X3DExecut
111413
111797
 
111414
111798
  this [_exportedNodes] .remove (exportedName);
111415
111799
 
111416
- this ._exportedNodes_changed = this .getBrowser () .getCurrentTime ();
111800
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
111417
111801
  },
111418
111802
  getExportedNode (exportedName)
111419
111803
  {
@@ -112321,7 +112705,7 @@ const DataStorage_default_ = DataStorage;
112321
112705
  x_ite_Namespace .add ("DataStorage", "standard/Utility/DataStorage", DataStorage_default_);
112322
112706
  /* harmony default export */ const Utility_DataStorage = (DataStorage_default_);
112323
112707
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/X3DCoreContext.js
112324
- /* provided dependency */ var X3DCoreContext_$ = __webpack_require__(237);
112708
+ /* provided dependency */ var X3DCoreContext_$ = __webpack_require__(275);
112325
112709
  /*******************************************************************************
112326
112710
  *
112327
112711
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -113032,7 +113416,7 @@ Object .assign (X3DCoreContext .prototype,
113032
113416
  text += "\n";
113033
113417
 
113034
113418
  this .copyToClipboard (text);
113035
- this .getNotification () ._string = locale_gettext ("Viewpoint copied to clipboard.");
113419
+ this .getNotification () ._string = gettext ("Viewpoint copied to clipboard.");
113036
113420
 
113037
113421
  console .log ("Viewpoint copied to clipboard.");
113038
113422
  console .debug (text);
@@ -114844,8 +115228,8 @@ const X3DViewer_default_ = X3DViewer;
114844
115228
  x_ite_Namespace .add ("X3DViewer", "x_ite/Browser/Navigation/X3DViewer", X3DViewer_default_);
114845
115229
  /* harmony default export */ const Navigation_X3DViewer = (X3DViewer_default_);
114846
115230
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/ExamineViewer.js
114847
- /* provided dependency */ var jquery_mousewheel = __webpack_require__(789);
114848
- /* provided dependency */ var ExamineViewer_$ = __webpack_require__(237);
115231
+ /* provided dependency */ var jquery_mousewheel = __webpack_require__(419);
115232
+ /* provided dependency */ var ExamineViewer_$ = __webpack_require__(275);
114849
115233
  /*******************************************************************************
114850
115234
  *
114851
115235
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -115717,8 +116101,8 @@ const ExamineViewer_default_ = ExamineViewer;
115717
116101
  x_ite_Namespace .add ("ExamineViewer", "x_ite/Browser/Navigation/ExamineViewer", ExamineViewer_default_);
115718
116102
  /* harmony default export */ const Navigation_ExamineViewer = (ExamineViewer_default_);
115719
116103
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/X3DFlyViewer.js
115720
- /* provided dependency */ var X3DFlyViewer_jquery_mousewheel = __webpack_require__(789);
115721
- /* provided dependency */ var X3DFlyViewer_$ = __webpack_require__(237);
116104
+ /* provided dependency */ var X3DFlyViewer_jquery_mousewheel = __webpack_require__(419);
116105
+ /* provided dependency */ var X3DFlyViewer_$ = __webpack_require__(275);
115722
116106
  /*******************************************************************************
115723
116107
  *
115724
116108
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -116727,8 +117111,8 @@ const FlyViewer_default_ = FlyViewer;
116727
117111
  x_ite_Namespace .add ("FlyViewer", "x_ite/Browser/Navigation/FlyViewer", FlyViewer_default_);
116728
117112
  /* harmony default export */ const Navigation_FlyViewer = (FlyViewer_default_);
116729
117113
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/PlaneViewer.js
116730
- /* provided dependency */ var PlaneViewer_jquery_mousewheel = __webpack_require__(789);
116731
- /* provided dependency */ var PlaneViewer_$ = __webpack_require__(237);
117114
+ /* provided dependency */ var PlaneViewer_jquery_mousewheel = __webpack_require__(419);
117115
+ /* provided dependency */ var PlaneViewer_$ = __webpack_require__(275);
116732
117116
  /*******************************************************************************
116733
117117
  *
116734
117118
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -117059,8 +117443,8 @@ const NoneViewer_default_ = NoneViewer;
117059
117443
  x_ite_Namespace .add ("NoneViewer", "x_ite/Browser/Navigation/NoneViewer", NoneViewer_default_);
117060
117444
  /* harmony default export */ const Navigation_NoneViewer = (NoneViewer_default_);
117061
117445
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/LookAtViewer.js
117062
- /* provided dependency */ var LookAtViewer_jquery_mousewheel = __webpack_require__(789);
117063
- /* provided dependency */ var LookAtViewer_$ = __webpack_require__(237);
117446
+ /* provided dependency */ var LookAtViewer_jquery_mousewheel = __webpack_require__(419);
117447
+ /* provided dependency */ var LookAtViewer_$ = __webpack_require__(275);
117064
117448
  /*******************************************************************************
117065
117449
  *
117066
117450
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -118018,12 +118402,12 @@ Object .assign (X3DNetworkingContext .prototype,
118018
118402
  if (this ._loadCount .getValue () || this [_loading])
118019
118403
  {
118020
118404
  var string = ((loadingDisplay || 1) === 1
118021
- ? locale_gettext ("Loading %1 file")
118022
- : locale_gettext ("Loading %1 files")) .replace ("%1", loadingDisplay || 1);
118405
+ ? gettext ("Loading %1 file")
118406
+ : gettext ("Loading %1 files")) .replace ("%1", loadingDisplay || 1);
118023
118407
  }
118024
118408
  else
118025
118409
  {
118026
- var string = locale_gettext("Loading done");
118410
+ var string = gettext("Loading done");
118027
118411
  this .setCursor ("DEFAULT");
118028
118412
  }
118029
118413
 
@@ -118199,8 +118583,8 @@ const X3DPickingContext_default_ = X3DPickingContext;
118199
118583
  x_ite_Namespace .add ("X3DPickingContext", "x_ite/Browser/Picking/X3DPickingContext", X3DPickingContext_default_);
118200
118584
  /* harmony default export */ const Picking_X3DPickingContext = (X3DPickingContext_default_);
118201
118585
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js
118202
- /* provided dependency */ var PointingDevice_jquery_mousewheel = __webpack_require__(789);
118203
- /* provided dependency */ var PointingDevice_$ = __webpack_require__(237);
118586
+ /* provided dependency */ var PointingDevice_jquery_mousewheel = __webpack_require__(419);
118587
+ /* provided dependency */ var PointingDevice_$ = __webpack_require__(275);
118204
118588
  /*******************************************************************************
118205
118589
  *
118206
118590
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -119020,34 +119404,36 @@ Object .assign (X3DPointingDeviceSensorContext .prototype,
119020
119404
  },
119021
119405
  getPointingShader (numClipPlanes, shapeNode, humanoidNode)
119022
119406
  {
119023
- const geometryContext = shapeNode .getGeometryContext ();
119407
+ const { geometryType, hasNormals } = shapeNode .getGeometryContext ();
119024
119408
 
119025
119409
  let key = "";
119026
119410
 
119027
119411
  key += numClipPlanes;
119028
119412
  key += ".";
119029
119413
  key += shapeNode .getShapeKey ();
119030
- key += geometryContext .geometryType;
119414
+ key += geometryType;
119415
+ key += hasNormals;
119031
119416
  key += ".";
119032
119417
  key += humanoidNode ?.getHumanoidKey () ?? "";
119033
119418
  key += ".";
119034
119419
 
119035
- if (geometryContext .geometryType >= 2)
119420
+ if (geometryType >= 2)
119036
119421
  {
119037
119422
  key += "0.0.0";
119038
119423
  }
119039
119424
  else
119040
119425
  {
119041
- const appearanceNode = shapeNode .getAppearance ();
119426
+ const appearanceNode = shapeNode .getAppearance ();
119042
119427
 
119043
- key += appearanceNode .getStyleProperties (geometryContext .geometryType) ? 1 : 0;
119428
+ key += appearanceNode .getStyleProperties (geometryType) ? 1 : 0;
119044
119429
  key += ".";
119045
119430
  key += appearanceNode .getTextureBits () .toString (16); // Textures for point and line.
119046
119431
  key += ".";
119047
119432
  key += appearanceNode .getMaterial () .getTextureBits () .toString (16); // Textures for point and line.
119048
119433
  }
119049
119434
 
119050
- return this [_pointingShaders] .get (key) || this .createPointingShader (key, numClipPlanes, shapeNode, humanoidNode);
119435
+ return this [_pointingShaders] .get (key)
119436
+ ?? this .createPointingShader (key, numClipPlanes, shapeNode, humanoidNode);
119051
119437
  },
119052
119438
  createPointingShader (key, numClipPlanes, shapeNode, humanoidNode)
119053
119439
  {
@@ -119056,14 +119442,25 @@ Object .assign (X3DPointingDeviceSensorContext .prototype,
119056
119442
  geometryContext = shapeNode .getGeometryContext (),
119057
119443
  options = [ ];
119058
119444
 
119445
+ if (geometryContext .hasNormals)
119446
+ options .push ("X3D_NORMALS");
119447
+
119059
119448
  if (numClipPlanes)
119060
119449
  {
119061
119450
  options .push ("X3D_CLIP_PLANES");
119062
119451
  options .push ("X3D_NUM_CLIP_PLANES " + numClipPlanes);
119063
119452
  }
119064
119453
 
119065
- if (shapeNode .getShapeKey () > 0)
119066
- options .push ("X3D_PARTICLE_SYSTEM");
119454
+ switch (shapeNode .getShapeKey ())
119455
+ {
119456
+ case 1:
119457
+ case 2:
119458
+ options .push ("X3D_INSTANCING");
119459
+ break;
119460
+ case 3:
119461
+ options .push ("X3D_INSTANCING", "X3D_INSTANCE_NORMAL");
119462
+ break;
119463
+ }
119067
119464
 
119068
119465
  options .push (`X3D_GEOMETRY_${geometryContext .geometryType}D`);
119069
119466
 
@@ -119491,7 +119888,7 @@ const MultiSampleFrameBuffer_default_ = MultiSampleFrameBuffer;
119491
119888
  x_ite_Namespace .add ("MultiSampleFrameBuffer", "x_ite/Rendering/MultiSampleFrameBuffer", MultiSampleFrameBuffer_default_);
119492
119889
  /* harmony default export */ const Rendering_MultiSampleFrameBuffer = (MultiSampleFrameBuffer_default_);
119493
119890
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Rendering/X3DRenderingContext.js
119494
- /* provided dependency */ var X3DRenderingContext_$ = __webpack_require__(237);
119891
+ /* provided dependency */ var X3DRenderingContext_$ = __webpack_require__(275);
119495
119892
  /*******************************************************************************
119496
119893
  *
119497
119894
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -119713,7 +120110,8 @@ Object .assign (X3DRenderingContext .prototype,
119713
120110
  key += appearanceNode .getMaterial () .getTextureBits () .toString (16); // Textures for point and line.
119714
120111
  }
119715
120112
 
119716
- return this [_depthShaders] .get (key) || this .createDepthShader (key, numClipPlanes, shapeNode, humanoidNode);
120113
+ return this [_depthShaders] .get (key)
120114
+ ?? this .createDepthShader (key, numClipPlanes, shapeNode, humanoidNode);
119717
120115
  },
119718
120116
  createDepthShader (key, numClipPlanes, shapeNode, humanoidNode)
119719
120117
  {
@@ -119729,7 +120127,7 @@ Object .assign (X3DRenderingContext .prototype,
119729
120127
  }
119730
120128
 
119731
120129
  if (shapeNode .getShapeKey () > 0)
119732
- options .push ("X3D_PARTICLE_SYSTEM");
120130
+ options .push ("X3D_INSTANCING");
119733
120131
 
119734
120132
  options .push (`X3D_GEOMETRY_${geometryContext .geometryType}D`);
119735
120133
 
@@ -120403,7 +120801,7 @@ const X3DSoundContext_default_ = X3DSoundContext;
120403
120801
  x_ite_Namespace .add ("X3DSoundContext", "x_ite/Browser/Sound/X3DSoundContext", X3DSoundContext_default_);
120404
120802
  /* harmony default export */ const Sound_X3DSoundContext = (X3DSoundContext_default_);
120405
120803
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Texturing/KTXDecoder.js
120406
- /* provided dependency */ var KTXDecoder_$ = __webpack_require__(237);
120804
+ /* provided dependency */ var KTXDecoder_$ = __webpack_require__(275);
120407
120805
  const KTXDecoder_default_ = class KTXDecoder
120408
120806
  {
120409
120807
  constructor (gl, externalKtxlib, scriptDir)
@@ -121957,7 +122355,7 @@ const Components_default_ = Components;
121957
122355
  x_ite_Namespace .add ("Components", "x_ite/Components", Components_default_);
121958
122356
  /* harmony default export */ const x_ite_Components = ((/* unused pure expression or super */ null && (Components_default_)));
121959
122357
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/DOMIntegration.js
121960
- /* provided dependency */ var DOMIntegration_$ = __webpack_require__(237);
122358
+ /* provided dependency */ var DOMIntegration_$ = __webpack_require__(275);
121961
122359
  /*******************************************************************************
121962
122360
  * MIT License
121963
122361
  *
@@ -123090,7 +123488,7 @@ const SupportedProfiles_default_ = SupportedProfiles;
123090
123488
  x_ite_Namespace .add ("SupportedProfiles", "x_ite/Configuration/SupportedProfiles", SupportedProfiles_default_);
123091
123489
  /* harmony default export */ const Configuration_SupportedProfiles = (SupportedProfiles_default_);
123092
123490
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/X3DBrowser.js
123093
- /* provided dependency */ var X3DBrowser_$ = __webpack_require__(237);
123491
+ /* provided dependency */ var X3DBrowser_$ = __webpack_require__(275);
123094
123492
  /*******************************************************************************
123095
123493
  *
123096
123494
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -123717,7 +124115,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
123717
124115
  {
123718
124116
  this .getSplashScreen ()
123719
124117
  .find (".x_ite-private-spinner-text")
123720
- .text (locale_gettext ("Failed loading world."));
124118
+ .text (gettext ("Failed loading world."));
123721
124119
  });
123722
124120
 
123723
124121
  reject (new Error ("Couldn't load X3D file."));
@@ -124182,7 +124580,7 @@ const X3DBrowser_default_ = X3DBrowser;
124182
124580
  x_ite_Namespace .add ("X3DBrowser", "x_ite/Browser/X3DBrowser", X3DBrowser_default_);
124183
124581
  /* harmony default export */ const Browser_X3DBrowser = (X3DBrowser_default_);
124184
124582
  ;// CONCATENATED MODULE: ./src/x_ite/X3DCanvasElement.js
124185
- /* provided dependency */ var X3DCanvasElement_$ = __webpack_require__(237);
124583
+ /* provided dependency */ var X3DCanvasElement_$ = __webpack_require__(275);
124186
124584
  /*******************************************************************************
124187
124585
  *
124188
124586
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -124319,8 +124717,8 @@ const X3DCanvasElement_default_ = X3DCanvasElement;
124319
124717
  x_ite_Namespace .add ("X3DCanvasElement", "x_ite/X3DCanvasElement", X3DCanvasElement_default_);
124320
124718
  /* harmony default export */ const x_ite_X3DCanvasElement = (X3DCanvasElement_default_);
124321
124719
  ;// CONCATENATED MODULE: ./src/lib/jquery.js
124322
- /* provided dependency */ var jquery_$ = __webpack_require__(237);
124323
- /* provided dependency */ var pako = __webpack_require__(121);
124720
+ /* provided dependency */ var jquery_$ = __webpack_require__(275);
124721
+ /* provided dependency */ var pako = __webpack_require__(35);
124324
124722
  Object .assign (jquery_$,
124325
124723
  {
124326
124724
  decodeText (input)
@@ -124397,14 +124795,14 @@ const jquery_default_ = jquery_$;
124397
124795
  x_ite_Namespace .add ("jquery", "lib/jquery", jquery_default_);
124398
124796
  /* harmony default export */ const jquery = ((/* unused pure expression or super */ null && (jquery_default_)));
124399
124797
  ;// CONCATENATED MODULE: ./src/lib/libtess.js
124400
- /* provided dependency */ var libtess_libtess = __webpack_require__(414);
124798
+ /* provided dependency */ var libtess_libtess = __webpack_require__(224);
124401
124799
  const libtess_default_ = libtess_libtess;
124402
124800
  ;
124403
124801
 
124404
124802
  x_ite_Namespace .add ("libtess", "lib/libtess", libtess_default_);
124405
124803
  /* harmony default export */ const lib_libtess = ((/* unused pure expression or super */ null && (libtess_default_)));
124406
124804
  ;// CONCATENATED MODULE: ./src/x_ite/X3D.js
124407
- /* provided dependency */ var X3D_$ = __webpack_require__(237);
124805
+ /* provided dependency */ var X3D_$ = __webpack_require__(275);
124408
124806
  /*******************************************************************************
124409
124807
  *
124410
124808
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -124712,7 +125110,7 @@ Object .assign (X3D,
124712
125110
 
124713
125111
  // Assign X3D to global namespace.
124714
125112
 
124715
- window [Symbol .for ("X_ITE.X3D-9.4.4")] = x_ite_X3D;
125113
+ window [Symbol .for ("X_ITE.X3D-9.5.0")] = x_ite_X3D;
124716
125114
 
124717
125115
  customElements .define ("x3d-canvas", x_ite_X3DCanvasElement);
124718
125116