x_ite 9.4.5 → 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 (48) 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 +28 -28
  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/x_ite.css +1 -1
  43. package/dist/x_ite.js +1517 -1097
  44. package/dist/x_ite.min.js +1 -1
  45. package/dist/x_ite.min.mjs +1 -1
  46. package/dist/x_ite.mjs +1517 -1097
  47. package/dist/x_ite.zip +0 -0
  48. package/package.json +3 -2
package/dist/x_ite.js CHANGED
@@ -1,4 +1,4 @@
1
- /* X_ITE v9.4.5 */(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
- /***/ 405:
14
+ /***/ 543:
15
15
  /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16
16
 
17
- /* provided dependency */ var jQuery = __webpack_require__(349);
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
- /***/ 5:
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__(349)], __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
- /***/ 349:
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
- /***/ 94:
11162
+ /***/ 224:
11163
11163
  /***/ ((module) => {
11164
11164
 
11165
11165
  /**
@@ -15938,7 +15938,7 @@ if (true) {
15938
15938
 
15939
15939
  /***/ }),
15940
15940
 
15941
- /***/ 929:
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
- /***/ 886:
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.5")];
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__(349);
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.5";
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__(349);
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__(349);
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__(349);
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__(349);
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__(349);
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__(349);
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__(349);
50853
- /* provided dependency */ var libtess = __webpack_require__(94);
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__(349);
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__(94);
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;
60985
61040
 
60986
- shaderNode .enableParticleAttribute (gl, outputParticles, particleStride, particleOffset, 1);
60987
- shaderNode .enableParticleMatrixAttribute (gl, outputParticles, particleStride, matrixOffset, 1);
61041
+ if (particleOffset !== undefined)
61042
+ shaderNode .enableParticleAttribute (gl, instances, instancesStride, particleOffset, 1);
61043
+
61044
+ shaderNode .enableInstanceMatrixAttribute (gl, instances, instancesStride, matrixOffset, 1);
61045
+
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__(349);
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__(349);
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__(349);
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);
75009
+ normalNode ?.addVector (normalPerVertex ? index : face, normalArray);
74942
75010
 
74943
- else
74944
- normalNode .addVector (face, normalArray);
74945
- }
74946
-
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;
87499
87541
 
87500
- shaderNode .enableParticleAttribute (gl, outputParticles, particleStride, particleSystem .particleOffset, 1);
87501
- shaderNode .enableParticleMatrixAttribute (gl, outputParticles, particleStride, particleSystem .matrixOffset, 1);
87542
+ if (particleOffset !== undefined)
87543
+ shaderNode .enableParticleAttribute (gl, instances, instancesStride, particleOffset, 1);
87544
+
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,144 +88016,160 @@ Object .assign (Object .setPrototypeOf (IndexedTriangleFanSet .prototype, Render
87975
88016
  {
87976
88017
  return this .triangleIndex [index];
87977
88018
  },
87978
- build ()
87979
- {
87980
- Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
87981
- },
87982
- });
87983
-
87984
- Object .defineProperties (IndexedTriangleFanSet,
87985
- {
87986
- typeName:
87987
- {
87988
- value: "IndexedTriangleFanSet",
87989
- enumerable: true,
87990
- },
87991
- componentInfo:
87992
- {
87993
- value: Object .freeze ({ name: "Rendering", level: 3 }),
87994
- enumerable: true,
87995
- },
87996
- containerField:
87997
- {
87998
- value: "geometry",
87999
- enumerable: true,
88000
- },
88001
- specificationRange:
88002
- {
88003
- value: Object .freeze ({ from: "3.0", to: "Infinity" }),
88004
- enumerable: true,
88005
- },
88006
- fieldDefinitions:
88007
- {
88008
- value: new Base_FieldDefinitionArray ([
88009
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
88010
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOnly, "set_index", new x_ite_Fields .MFInt32 ()),
88011
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "solid", new x_ite_Fields .SFBool (true)),
88012
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "ccw", new x_ite_Fields .SFBool (true)),
88013
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "colorPerVertex", new x_ite_Fields .SFBool (true)),
88014
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "normalPerVertex", new x_ite_Fields .SFBool (true)),
88015
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "index", new x_ite_Fields .MFInt32 ()),
88016
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "attrib", new x_ite_Fields .MFNode ()),
88017
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "fogCoord", new x_ite_Fields .SFNode ()),
88018
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "color", new x_ite_Fields .SFNode ()),
88019
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "texCoord", new x_ite_Fields .SFNode ()),
88020
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "normal", new x_ite_Fields .SFNode ()),
88021
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coord", new x_ite_Fields .SFNode ()),
88022
- ]),
88023
- enumerable: true,
88024
- },
88025
- });
88026
-
88027
- const IndexedTriangleFanSet_default_ = IndexedTriangleFanSet;
88028
- ;
88029
-
88030
- x_ite_Namespace .add ("IndexedTriangleFanSet", "x_ite/Components/Rendering/IndexedTriangleFanSet", IndexedTriangleFanSet_default_);
88031
- /* harmony default export */ const Rendering_IndexedTriangleFanSet = (IndexedTriangleFanSet_default_);
88032
- ;// CONCATENATED MODULE: ./src/x_ite/Components/Rendering/IndexedTriangleSet.js
88033
- /*******************************************************************************
88034
- *
88035
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
88036
- *
88037
- * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
88038
- *
88039
- * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
88040
- *
88041
- * The copyright notice above does not evidence any actual of intended
88042
- * publication of such source code, and is an unpublished work by create3000.
88043
- * This material contains CONFIDENTIAL INFORMATION that is the property of
88044
- * create3000.
88045
- *
88046
- * No permission is granted to copy, distribute, or create derivative works from
88047
- * the contents of this software, in whole or in part, without the prior written
88048
- * permission of create3000.
88049
- *
88050
- * NON-MILITARY USE ONLY
88051
- *
88052
- * All create3000 software are effectively free software with a non-military use
88053
- * restriction. It is free. Well commented source is provided. You may reuse the
88054
- * source in any way you please with the exception anything that uses it must be
88055
- * marked to indicate is contains 'non-military use only' components.
88056
- *
88057
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
88058
- *
88059
- * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
88060
- *
88061
- * This file is part of the X_ITE Project.
88062
- *
88063
- * X_ITE is free software: you can redistribute it and/or modify it under the
88064
- * terms of the GNU General Public License version 3 only, as published by the
88065
- * Free Software Foundation.
88066
- *
88067
- * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
88068
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
88069
- * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
88070
- * details (a copy is included in the LICENSE file that accompanied this code).
88071
- *
88072
- * You should have received a copy of the GNU General Public License version 3
88073
- * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
88074
- * copy of the GPLv3 License.
88075
- *
88076
- * For Silvio, Joy and Adi.
88077
- *
88078
- ******************************************************************************/
88079
-
88080
-
88081
-
88082
-
88083
-
88084
-
88085
-
88086
- function IndexedTriangleSet (executionContext)
88087
- {
88088
- Rendering_X3DComposedGeometryNode .call (this, executionContext);
88089
-
88090
- this .addType (Base_X3DConstants .IndexedTriangleSet);
88091
- }
88092
-
88093
- Object .assign (Object .setPrototypeOf (IndexedTriangleSet .prototype, Rendering_X3DComposedGeometryNode .prototype),
88094
- {
88095
- getPolygonIndex (i)
88019
+ getVerticesPerPolygon ()
88096
88020
  {
88097
- return this ._index [i];
88021
+ return 3;
88098
88022
  },
88099
- initialize ()
88023
+ getNumVertices ()
88100
88024
  {
88101
- Rendering_X3DComposedGeometryNode .prototype .initialize .call (this);
88102
-
88103
- this ._set_index .addFieldInterest (this ._index);
88025
+ return this .triangleIndex .length;
88104
88026
  },
88105
88027
  build ()
88106
88028
  {
88107
- Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this ._index .length, 3, this ._index .length);
88029
+ Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
88108
88030
  },
88109
88031
  });
88110
88032
 
88111
- Object .defineProperties (IndexedTriangleSet,
88033
+ Object .defineProperties (IndexedTriangleFanSet,
88112
88034
  {
88113
88035
  typeName:
88114
88036
  {
88115
- value: "IndexedTriangleSet",
88037
+ value: "IndexedTriangleFanSet",
88038
+ enumerable: true,
88039
+ },
88040
+ componentInfo:
88041
+ {
88042
+ value: Object .freeze ({ name: "Rendering", level: 3 }),
88043
+ enumerable: true,
88044
+ },
88045
+ containerField:
88046
+ {
88047
+ value: "geometry",
88048
+ enumerable: true,
88049
+ },
88050
+ specificationRange:
88051
+ {
88052
+ value: Object .freeze ({ from: "3.0", to: "Infinity" }),
88053
+ enumerable: true,
88054
+ },
88055
+ fieldDefinitions:
88056
+ {
88057
+ value: new Base_FieldDefinitionArray ([
88058
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
88059
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOnly, "set_index", new x_ite_Fields .MFInt32 ()),
88060
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "solid", new x_ite_Fields .SFBool (true)),
88061
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "ccw", new x_ite_Fields .SFBool (true)),
88062
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "colorPerVertex", new x_ite_Fields .SFBool (true)),
88063
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "normalPerVertex", new x_ite_Fields .SFBool (true)),
88064
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "index", new x_ite_Fields .MFInt32 ()),
88065
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "attrib", new x_ite_Fields .MFNode ()),
88066
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "fogCoord", new x_ite_Fields .SFNode ()),
88067
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "color", new x_ite_Fields .SFNode ()),
88068
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "texCoord", new x_ite_Fields .SFNode ()),
88069
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "normal", new x_ite_Fields .SFNode ()),
88070
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coord", new x_ite_Fields .SFNode ()),
88071
+ ]),
88072
+ enumerable: true,
88073
+ },
88074
+ });
88075
+
88076
+ const IndexedTriangleFanSet_default_ = IndexedTriangleFanSet;
88077
+ ;
88078
+
88079
+ x_ite_Namespace .add ("IndexedTriangleFanSet", "x_ite/Components/Rendering/IndexedTriangleFanSet", IndexedTriangleFanSet_default_);
88080
+ /* harmony default export */ const Rendering_IndexedTriangleFanSet = (IndexedTriangleFanSet_default_);
88081
+ ;// CONCATENATED MODULE: ./src/x_ite/Components/Rendering/IndexedTriangleSet.js
88082
+ /*******************************************************************************
88083
+ *
88084
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
88085
+ *
88086
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
88087
+ *
88088
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
88089
+ *
88090
+ * The copyright notice above does not evidence any actual of intended
88091
+ * publication of such source code, and is an unpublished work by create3000.
88092
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
88093
+ * create3000.
88094
+ *
88095
+ * No permission is granted to copy, distribute, or create derivative works from
88096
+ * the contents of this software, in whole or in part, without the prior written
88097
+ * permission of create3000.
88098
+ *
88099
+ * NON-MILITARY USE ONLY
88100
+ *
88101
+ * All create3000 software are effectively free software with a non-military use
88102
+ * restriction. It is free. Well commented source is provided. You may reuse the
88103
+ * source in any way you please with the exception anything that uses it must be
88104
+ * marked to indicate is contains 'non-military use only' components.
88105
+ *
88106
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
88107
+ *
88108
+ * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
88109
+ *
88110
+ * This file is part of the X_ITE Project.
88111
+ *
88112
+ * X_ITE is free software: you can redistribute it and/or modify it under the
88113
+ * terms of the GNU General Public License version 3 only, as published by the
88114
+ * Free Software Foundation.
88115
+ *
88116
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
88117
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
88118
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
88119
+ * details (a copy is included in the LICENSE file that accompanied this code).
88120
+ *
88121
+ * You should have received a copy of the GNU General Public License version 3
88122
+ * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
88123
+ * copy of the GPLv3 License.
88124
+ *
88125
+ * For Silvio, Joy and Adi.
88126
+ *
88127
+ ******************************************************************************/
88128
+
88129
+
88130
+
88131
+
88132
+
88133
+
88134
+
88135
+ function IndexedTriangleSet (executionContext)
88136
+ {
88137
+ Rendering_X3DComposedGeometryNode .call (this, executionContext);
88138
+
88139
+ this .addType (Base_X3DConstants .IndexedTriangleSet);
88140
+ }
88141
+
88142
+ Object .assign (Object .setPrototypeOf (IndexedTriangleSet .prototype, Rendering_X3DComposedGeometryNode .prototype),
88143
+ {
88144
+ getPolygonIndex (i)
88145
+ {
88146
+ return this ._index [i];
88147
+ },
88148
+ getVerticesPerPolygon ()
88149
+ {
88150
+ return 3;
88151
+ },
88152
+ getNumVertices ()
88153
+ {
88154
+ return this ._index .length;
88155
+ },
88156
+ initialize ()
88157
+ {
88158
+ Rendering_X3DComposedGeometryNode .prototype .initialize .call (this);
88159
+
88160
+ this ._set_index .addFieldInterest (this ._index);
88161
+ },
88162
+ build ()
88163
+ {
88164
+ Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this ._index .length, 3, this ._index .length);
88165
+ },
88166
+ });
88167
+
88168
+ Object .defineProperties (IndexedTriangleSet,
88169
+ {
88170
+ typeName:
88171
+ {
88172
+ value: "IndexedTriangleSet",
88116
88173
  enumerable: true,
88117
88174
  },
88118
88175
  componentInfo:
@@ -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;
89021
+
89022
+ if (particleOffset !== undefined)
89023
+ shaderNode .enableParticleAttribute (gl, instances, instancesStride, particleOffset, 1);
88956
89024
 
88957
- shaderNode .enableParticleAttribute (gl, outputParticles, particleStride, particleSystem .particleOffset, 1);
88958
- shaderNode .enableParticleMatrixAttribute (gl, outputParticles, particleStride, particleSystem .matrixOffset, 1);
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,140 +89398,156 @@ Object .assign (Object .setPrototypeOf (TriangleFanSet .prototype, Rendering_X3D
89328
89398
  {
89329
89399
  return this .triangleIndex [index];
89330
89400
  },
89331
- build ()
89401
+ getVerticesPerPolygon ()
89332
89402
  {
89333
- Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
89403
+ return 3;
89334
89404
  },
89335
- });
89336
-
89337
- Object .defineProperties (TriangleFanSet,
89338
- {
89339
- typeName:
89405
+ getNumVertices ()
89340
89406
  {
89341
- value: "TriangleFanSet",
89342
- enumerable: true,
89407
+ return this .triangleIndex .length;
89343
89408
  },
89344
- componentInfo:
89345
- {
89346
- value: Object .freeze ({ name: "Rendering", level: 3 }),
89347
- enumerable: true,
89348
- },
89349
- containerField:
89350
- {
89351
- value: "geometry",
89352
- enumerable: true,
89353
- },
89354
- specificationRange:
89355
- {
89356
- value: Object .freeze ({ from: "3.0", to: "Infinity" }),
89357
- enumerable: true,
89358
- },
89359
- fieldDefinitions:
89360
- {
89361
- value: new Base_FieldDefinitionArray ([
89362
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
89363
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "solid", new x_ite_Fields .SFBool (true)),
89364
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "ccw", new x_ite_Fields .SFBool (true)),
89365
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "colorPerVertex", new x_ite_Fields .SFBool (true)),
89366
- new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "normalPerVertex", new x_ite_Fields .SFBool (true)),
89367
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "fanCount", new x_ite_Fields .MFInt32 ()),
89368
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "attrib", new x_ite_Fields .MFNode ()),
89369
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "fogCoord", new x_ite_Fields .SFNode ()),
89370
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "color", new x_ite_Fields .SFNode ()),
89371
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "texCoord", new x_ite_Fields .SFNode ()),
89372
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "normal", new x_ite_Fields .SFNode ()),
89373
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coord", new x_ite_Fields .SFNode ()),
89374
- ]),
89375
- enumerable: true,
89376
- },
89377
- });
89378
-
89379
- const TriangleFanSet_default_ = TriangleFanSet;
89380
- ;
89381
-
89382
- x_ite_Namespace .add ("TriangleFanSet", "x_ite/Components/Rendering/TriangleFanSet", TriangleFanSet_default_);
89383
- /* harmony default export */ const Rendering_TriangleFanSet = (TriangleFanSet_default_);
89384
- ;// CONCATENATED MODULE: ./src/x_ite/Components/Rendering/TriangleSet.js
89385
- /*******************************************************************************
89386
- *
89387
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
89388
- *
89389
- * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
89390
- *
89391
- * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
89392
- *
89393
- * The copyright notice above does not evidence any actual of intended
89394
- * publication of such source code, and is an unpublished work by create3000.
89395
- * This material contains CONFIDENTIAL INFORMATION that is the property of
89396
- * create3000.
89397
- *
89398
- * No permission is granted to copy, distribute, or create derivative works from
89399
- * the contents of this software, in whole or in part, without the prior written
89400
- * permission of create3000.
89401
- *
89402
- * NON-MILITARY USE ONLY
89403
- *
89404
- * All create3000 software are effectively free software with a non-military use
89405
- * restriction. It is free. Well commented source is provided. You may reuse the
89406
- * source in any way you please with the exception anything that uses it must be
89407
- * marked to indicate is contains 'non-military use only' components.
89408
- *
89409
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
89410
- *
89411
- * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
89412
- *
89413
- * This file is part of the X_ITE Project.
89414
- *
89415
- * X_ITE is free software: you can redistribute it and/or modify it under the
89416
- * terms of the GNU General Public License version 3 only, as published by the
89417
- * Free Software Foundation.
89418
- *
89419
- * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
89420
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
89421
- * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
89422
- * details (a copy is included in the LICENSE file that accompanied this code).
89423
- *
89424
- * You should have received a copy of the GNU General Public License version 3
89425
- * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
89426
- * copy of the GPLv3 License.
89427
- *
89428
- * For Silvio, Joy and Adi.
89429
- *
89430
- ******************************************************************************/
89431
-
89432
-
89433
-
89434
-
89435
-
89436
-
89437
-
89438
- function TriangleSet (executionContext)
89439
- {
89440
- Rendering_X3DComposedGeometryNode .call (this, executionContext);
89441
-
89442
- this .addType (Base_X3DConstants .TriangleSet);
89443
- }
89444
-
89445
- Object .assign (Object .setPrototypeOf (TriangleSet .prototype, Rendering_X3DComposedGeometryNode .prototype),
89446
- {
89447
89409
  build ()
89448
89410
  {
89449
- if (! this .getCoord ())
89450
- return;
89451
-
89452
- Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .getCoord () .getSize (), 3, this .getCoord () .getSize ());
89453
- },
89454
- createNormals (verticesPerPolygon, polygonsSize)
89455
- {
89456
- return this .createFaceNormals (verticesPerPolygon, polygonsSize);
89411
+ Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .triangleIndex .length, 3, this .triangleIndex .length);
89457
89412
  },
89458
89413
  });
89459
89414
 
89460
- Object .defineProperties (TriangleSet,
89415
+ Object .defineProperties (TriangleFanSet,
89461
89416
  {
89462
89417
  typeName:
89463
89418
  {
89464
- value: "TriangleSet",
89419
+ value: "TriangleFanSet",
89420
+ enumerable: true,
89421
+ },
89422
+ componentInfo:
89423
+ {
89424
+ value: Object .freeze ({ name: "Rendering", level: 3 }),
89425
+ enumerable: true,
89426
+ },
89427
+ containerField:
89428
+ {
89429
+ value: "geometry",
89430
+ enumerable: true,
89431
+ },
89432
+ specificationRange:
89433
+ {
89434
+ value: Object .freeze ({ from: "3.0", to: "Infinity" }),
89435
+ enumerable: true,
89436
+ },
89437
+ fieldDefinitions:
89438
+ {
89439
+ value: new Base_FieldDefinitionArray ([
89440
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
89441
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "solid", new x_ite_Fields .SFBool (true)),
89442
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "ccw", new x_ite_Fields .SFBool (true)),
89443
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "colorPerVertex", new x_ite_Fields .SFBool (true)),
89444
+ new Base_X3DFieldDefinition (Base_X3DConstants .initializeOnly, "normalPerVertex", new x_ite_Fields .SFBool (true)),
89445
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "fanCount", new x_ite_Fields .MFInt32 ()),
89446
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "attrib", new x_ite_Fields .MFNode ()),
89447
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "fogCoord", new x_ite_Fields .SFNode ()),
89448
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "color", new x_ite_Fields .SFNode ()),
89449
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "texCoord", new x_ite_Fields .SFNode ()),
89450
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "normal", new x_ite_Fields .SFNode ()),
89451
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "coord", new x_ite_Fields .SFNode ()),
89452
+ ]),
89453
+ enumerable: true,
89454
+ },
89455
+ });
89456
+
89457
+ const TriangleFanSet_default_ = TriangleFanSet;
89458
+ ;
89459
+
89460
+ x_ite_Namespace .add ("TriangleFanSet", "x_ite/Components/Rendering/TriangleFanSet", TriangleFanSet_default_);
89461
+ /* harmony default export */ const Rendering_TriangleFanSet = (TriangleFanSet_default_);
89462
+ ;// CONCATENATED MODULE: ./src/x_ite/Components/Rendering/TriangleSet.js
89463
+ /*******************************************************************************
89464
+ *
89465
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
89466
+ *
89467
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
89468
+ *
89469
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
89470
+ *
89471
+ * The copyright notice above does not evidence any actual of intended
89472
+ * publication of such source code, and is an unpublished work by create3000.
89473
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
89474
+ * create3000.
89475
+ *
89476
+ * No permission is granted to copy, distribute, or create derivative works from
89477
+ * the contents of this software, in whole or in part, without the prior written
89478
+ * permission of create3000.
89479
+ *
89480
+ * NON-MILITARY USE ONLY
89481
+ *
89482
+ * All create3000 software are effectively free software with a non-military use
89483
+ * restriction. It is free. Well commented source is provided. You may reuse the
89484
+ * source in any way you please with the exception anything that uses it must be
89485
+ * marked to indicate is contains 'non-military use only' components.
89486
+ *
89487
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
89488
+ *
89489
+ * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
89490
+ *
89491
+ * This file is part of the X_ITE Project.
89492
+ *
89493
+ * X_ITE is free software: you can redistribute it and/or modify it under the
89494
+ * terms of the GNU General Public License version 3 only, as published by the
89495
+ * Free Software Foundation.
89496
+ *
89497
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
89498
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
89499
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
89500
+ * details (a copy is included in the LICENSE file that accompanied this code).
89501
+ *
89502
+ * You should have received a copy of the GNU General Public License version 3
89503
+ * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
89504
+ * copy of the GPLv3 License.
89505
+ *
89506
+ * For Silvio, Joy and Adi.
89507
+ *
89508
+ ******************************************************************************/
89509
+
89510
+
89511
+
89512
+
89513
+
89514
+
89515
+
89516
+ function TriangleSet (executionContext)
89517
+ {
89518
+ Rendering_X3DComposedGeometryNode .call (this, executionContext);
89519
+
89520
+ this .addType (Base_X3DConstants .TriangleSet);
89521
+ }
89522
+
89523
+ Object .assign (Object .setPrototypeOf (TriangleSet .prototype, Rendering_X3DComposedGeometryNode .prototype),
89524
+ {
89525
+ getVerticesPerPolygon ()
89526
+ {
89527
+ return 3;
89528
+ },
89529
+ getNumVertices ()
89530
+ {
89531
+ return this .getCoord () ?.getSize ();
89532
+ },
89533
+ build ()
89534
+ {
89535
+ if (!this .getCoord ())
89536
+ return;
89537
+
89538
+ Rendering_X3DComposedGeometryNode .prototype .build .call (this, 3, this .getCoord () .getSize (), 3, this .getCoord () .getSize ());
89539
+ },
89540
+ createNormals (verticesPerPolygon, polygonsSize)
89541
+ {
89542
+ return this .createFaceNormals (verticesPerPolygon, polygonsSize);
89543
+ },
89544
+ });
89545
+
89546
+ Object .defineProperties (TriangleSet,
89547
+ {
89548
+ typeName:
89549
+ {
89550
+ value: "TriangleSet",
89465
89551
  enumerable: true,
89466
89552
  },
89467
89553
  componentInfo:
@@ -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__(349);
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);}
93618
93743
  #else
93619
- #define getParticleTexCoord(texCoord)(texCoord)
93744
+ #define getInstanceTexCoord(texCoord)(texCoord)
93620
93745
  #endif
93621
- in mat4 x3d_ParticleMatrix;vec4 getParticleVertex(const in vec4 vertex){return x3d_ParticleMatrix*vertex;}
93746
+ #if defined(X3D_INSTANCE_NORMAL)
93747
+ in mat3 x3d_InstanceNormalMatrix;vec3 getInstanceNormal(const in vec3 normal){return x3d_InstanceNormalMatrix*normal;}
93622
93748
  #else
93623
- #define getParticleVertex(vertex)(vertex)
93624
- #define getParticleTexCoord(texCoord)(texCoord)
93749
+ #define getInstanceNormal(normal)(normal)
93750
+ #endif
93751
+ in mat4 x3d_InstanceMatrix;vec4 getInstanceVertex(const in vec4 vertex){return x3d_InstanceMatrix*vertex;}
93752
+ #else
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__(349);
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__(349);
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
  {
@@ -105107,8 +105260,8 @@ const GifMedia_default_ = GifMedia;
105107
105260
  x_ite_Namespace .add ("GifMedia", "x_ite/Browser/Texturing/GifMedia", GifMedia_default_);
105108
105261
  /* harmony default export */ const Texturing_GifMedia = (GifMedia_default_);
105109
105262
  ;// CONCATENATED MODULE: ./src/x_ite/Components/Texturing/MovieTexture.js
105110
- /* provided dependency */ var MovieTexture_$ = __webpack_require__(349);
105111
- /* provided dependency */ var SuperGif = __webpack_require__(886);
105263
+ /* provided dependency */ var MovieTexture_$ = __webpack_require__(275);
105264
+ /* provided dependency */ var SuperGif = __webpack_require__(964);
105112
105265
  /*******************************************************************************
105113
105266
  *
105114
105267
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -107713,6 +107866,8 @@ x_ite_Namespace .add ("Time", "x_ite/Components/Time", Time_default_);
107713
107866
 
107714
107867
 
107715
107868
 
107869
+ const nop = Function .prototype;
107870
+
107716
107871
  const Context =
107717
107872
  {
107718
107873
  excludes: new Set ([
@@ -107745,10 +107900,16 @@ const Context =
107745
107900
  {
107746
107901
  const ext = gl .getExtension ("OES_vertex_array_object");
107747
107902
 
107748
- gl .bindVertexArray = ext .bindVertexArrayOES .bind (ext);
107749
- gl .createVertexArray = ext .createVertexArrayOES .bind (ext);
107750
- gl .deleteVertexArray = ext .deleteVertexArrayOES .bind (ext);
107751
- 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;
107752
107913
  }
107753
107914
  }
107754
107915
  }
@@ -107770,7 +107931,7 @@ const Context =
107770
107931
 
107771
107932
  if (aliasedLineWidthRange [0] === 1 && aliasedLineWidthRange [1] === 1)
107772
107933
  {
107773
- gl .lineWidth = Function .prototype;
107934
+ gl .lineWidth = nop;
107774
107935
  gl .HAS_FEATURE_TRANSFORMED_LINES = gl .getVersion () >= 2;
107775
107936
 
107776
107937
  if (DEVELOPMENT)
@@ -107893,378 +108054,7 @@ const Context_default_ = Context;
107893
108054
 
107894
108055
  x_ite_Namespace .add ("Context", "x_ite/Browser/Core/Context", Context_default_);
107895
108056
  /* harmony default export */ const Core_Context = (Context_default_);
107896
- ;// CONCATENATED MODULE: ./src/locale/de.po.js
107897
- const de_po_default_ = `msgid ""
107898
- msgstr ""
107899
- "Project-Id-Version: X_ITE\n"
107900
- "POT-Creation-Date: 2015-12-23 04:56+0100\n"
107901
- "PO-Revision-Date: 2015-12-23 04:57+0100\n"
107902
- "Last-Translator: Holger Seelig <holger.seelig@yahoo.de>\n"
107903
- "Language-Team: \n"
107904
- "Language: de\n"
107905
- "MIME-Version: 1.0\n"
107906
- "Content-Type: text/plain; charset=UTF-8\n"
107907
- "Content-Transfer-Encoding: 8bit\n"
107908
- "X-Generator: Poedit 1.8.4\n"
107909
- "X-Poedit-Basepath: ../x_ite\n"
107910
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
107911
- "X-Poedit-SourceCharset: UTF-8\n"
107912
- "X-Poedit-SearchPath-0: .\n"
107913
-
107914
- msgid "Less Properties"
107915
- msgstr "Weniger Eigenschaften"
107916
-
107917
- msgid "More Properties"
107918
- msgstr "Mehr Eigenschaften"
107919
-
107920
- msgid "Frame rate"
107921
- msgstr "Bildrate"
107922
-
107923
- msgid "fps"
107924
- msgstr "BpS"
107925
-
107926
- msgid "Speed"
107927
- msgstr "Geschwindigkeit"
107928
-
107929
- msgid "m/s"
107930
- msgstr ""
107931
-
107932
- msgid "km/h"
107933
- msgstr ""
107934
-
107935
- msgid "Browser"
107936
- msgstr ""
107937
-
107938
- msgid "ms"
107939
- msgstr ""
107940
-
107941
- msgid "X3D total"
107942
- msgstr "X3D gesamt"
107943
-
107944
- msgid "Event Processing"
107945
- msgstr "Ereignisverarbeitung"
107946
-
107947
- msgid "Pointer"
107948
- msgstr "Zeigegerät"
107949
-
107950
- msgid "Camera"
107951
- msgstr "Kamera"
107952
-
107953
- msgid "Collision Detection"
107954
- msgstr "Kollisionserkennung"
107955
-
107956
- msgid "Rendering"
107957
- msgstr "Rendering"
107958
-
107959
- msgid "Number of Shapes"
107960
- msgstr "Anzahl der Formen"
107961
-
107962
- msgid "Number of Sensors"
107963
- msgstr "Anzahl der Sensoren"
107964
-
107965
- msgid "Browser Timings"
107966
- msgstr "Zeitberechnung"
107967
-
107968
- msgid "X_ITE Browser"
107969
- msgstr ""
107970
-
107971
- msgid "Viewpoints"
107972
- msgstr "Ansichtspunkte"
107973
-
107974
- msgid "Available Viewers"
107975
- msgstr "Verfügbare Betrachter"
107976
-
107977
- msgid "Straighten Horizon"
107978
- msgstr "Horizont gerade richten"
107979
-
107980
- msgid "Primitive Quality"
107981
- msgstr "Qualität der Grundobjekte"
107982
-
107983
- msgid "High"
107984
- msgstr "Hoch"
107985
-
107986
- msgid "high"
107987
- msgstr "hoch"
107988
-
107989
- msgid "Medium"
107990
- msgstr "Mittel"
107991
-
107992
- msgid "medium"
107993
- msgstr "mittel"
107994
-
107995
- msgid "Low"
107996
- msgstr "Niedrig"
107997
-
107998
- msgid "low"
107999
- msgstr "niedrig"
108000
-
108001
- msgid "Texture Quality"
108002
- msgstr "Textur Qualität"
108003
-
108004
- msgid "Display Rubberband"
108005
- msgstr "Gummiband anzeigen"
108006
-
108007
- msgid "Rubberband"
108008
- msgstr "Gummiband"
108009
-
108010
- msgid "on"
108011
- msgstr "an"
108012
-
108013
- msgid "off"
108014
- msgstr "aus"
108015
-
108016
- msgid "Mute Browser"
108017
- msgstr "Browser stumm schalten"
108018
-
108019
- msgid "Browser muted"
108020
- msgstr "Browser stumm geschalten"
108021
-
108022
- msgid "Browser unmuted"
108023
- msgstr "Browser Ton an"
108024
-
108025
- msgid "Leave Fullscreen"
108026
- msgstr "Vollbild verlassen"
108027
-
108028
- msgid "Fullscreen"
108029
- msgstr "Vollbild"
108030
-
108031
- msgid "About X_ITE"
108032
- msgstr "Über X_ITE"
108033
-
108034
- msgid "Examine Viewer"
108035
- msgstr "Untersuchen"
108036
-
108037
- msgid "Walk Viewer"
108038
- msgstr "Laufen"
108039
-
108040
- msgid "Fly Viewer"
108041
- msgstr "Fliegen"
108042
-
108043
- msgid "Plane Viewer"
108044
- msgstr "Ebenen Betrachter"
108045
-
108046
- msgid "Look At Viewer"
108047
- msgstr "Auf Objekte zielen"
108048
-
108049
- msgid "None Viewer"
108050
- msgstr "Kein Betrachter"
108051
-
108052
- msgid "Points"
108053
- msgstr "Punkte"
108054
-
108055
- msgid "Flat"
108056
- msgstr "Flach"
108057
-
108058
- msgid "Wireframe"
108059
- msgstr "Drahtgittermodel"
108060
-
108061
- msgid "Loading %1 file"
108062
- msgstr "Lade %1 Datei"
108063
-
108064
- msgid "Loading %1 files"
108065
- msgstr "Lade %1 Dateien"
108066
-
108067
- msgid "Loading done"
108068
- msgstr "Fertig mit Laden"
108069
-
108070
- msgid "Failed loading world."
108071
- msgstr "Laden der Dateien fehlgeschlagen."
108072
-
108073
- msgid "Show World Info"
108074
- msgstr "World Info anzeigen"
108075
-
108076
- msgid "Viewpoint is copied to clipboard."
108077
- msgstr "Ansichtspunkt wurde in die Zwischenablage kopiert."
108078
- `;
108079
- ;
108080
-
108081
- x_ite_Namespace .add ("de.po", "locale/de.po", de_po_default_);
108082
- /* harmony default export */ const de_po = (de_po_default_);
108083
- ;// CONCATENATED MODULE: ./src/locale/fr.po.js
108084
- const fr_po_default_ = `msgid ""
108085
- msgstr ""
108086
- "Project-Id-Version: X_ITE\n"
108087
- "POT-Creation-Date: 2015-12-23 04:58+0100\n"
108088
- "PO-Revision-Date: 2015-12-23 05:07+0100\n"
108089
- "Last-Translator: Holger Seelig <holger.seelig@yahoo.de>\n"
108090
- "Language-Team: \n"
108091
- "Language: fr\n"
108092
- "MIME-Version: 1.0\n"
108093
- "Content-Type: text/plain; charset=UTF-8\n"
108094
- "Content-Transfer-Encoding: 8bit\n"
108095
- "X-Generator: Poedit 1.8.4\n"
108096
- "X-Poedit-Basepath: ../x_ite\n"
108097
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
108098
- "X-Poedit-SourceCharset: UTF-8\n"
108099
- "X-Poedit-SearchPath-0: .\n"
108100
-
108101
- msgid "Less Properties"
108102
- msgstr "Moins de Propriétés"
108103
-
108104
- msgid "More Properties"
108105
- msgstr "Plus de Propriétés"
108106
-
108107
- msgid "Frame rate"
108108
- msgstr "Fréquence d'Images"
108109
-
108110
- msgid "fps"
108111
- msgstr "fps"
108112
-
108113
- msgid "Speed"
108114
- msgstr "Vélocité"
108115
-
108116
- msgid "m/s"
108117
- msgstr ""
108118
-
108119
- msgid "km/h"
108120
- msgstr ""
108121
-
108122
- msgid "Browser"
108123
- msgstr "X_ITE Navigateur"
108124
-
108125
- msgid "ms"
108126
- msgstr ""
108127
-
108128
- msgid "X3D total"
108129
- msgstr "X3D total"
108130
-
108131
- msgid "Event Processing"
108132
- msgstr "Traitement des Événements"
108133
-
108134
- msgid "Pointer"
108135
- msgstr "Pointeur"
108136
-
108137
- msgid "Camera"
108138
- msgstr "Caméra"
108139
-
108140
- msgid "Collision Detection"
108141
- msgstr "Détection des Collisions"
108142
-
108143
- msgid "Rendering"
108144
- msgstr "Rendement"
108145
-
108146
- msgid "Number of Shapes"
108147
- msgstr "Nombre de Formes"
108148
-
108149
- msgid "Number of Sensors"
108150
- msgstr "Nombre de Senseurs"
108151
-
108152
- msgid "Browser Timings"
108153
- msgstr "Calcul du Temps"
108154
-
108155
- msgid "X_ITE Browser"
108156
- msgstr "X_ITE Navigateur"
108157
-
108158
- msgid "Viewpoints"
108159
- msgstr "Points de Vue"
108160
-
108161
- msgid "Available Viewers"
108162
- msgstr "Visionneurs disponibles"
108163
-
108164
- msgid "Straighten Horizon"
108165
- msgstr "Redresser l'Horizon"
108166
-
108167
- msgid "Primitive Quality"
108168
- msgstr "Qualité des Objets simples"
108169
-
108170
- msgid "High"
108171
- msgstr "Haut"
108172
-
108173
- msgid "high"
108174
- msgstr "haut"
108175
-
108176
- msgid "Medium"
108177
- msgstr "Moyenne"
108178
-
108179
- msgid "medium"
108180
- msgstr "moyenne"
108181
-
108182
- msgid "Low"
108183
- msgstr "Faible"
108184
-
108185
- msgid "low"
108186
- msgstr "faible"
108187
-
108188
- msgid "Texture Quality"
108189
- msgstr "Qualité des Textures"
108190
-
108191
- msgid "Display Rubberband"
108192
- msgstr "Présenter le Bande élastique"
108193
-
108194
- msgid "Rubberband"
108195
- msgstr "Bande élastique"
108196
-
108197
- msgid "on"
108198
- msgstr "marche"
108199
-
108200
- msgid "off"
108201
- msgstr "arrêt"
108202
-
108203
- msgid "Mute Browser"
108204
- msgstr "Rendre Navigateur muet"
108205
-
108206
- msgid "Browser muted"
108207
- msgstr "Navigateur muet"
108208
-
108209
- msgid "Browser unmuted"
108210
- msgstr "Son de Navigateur réactivé"
108211
-
108212
- msgid "Leave Fullscreen"
108213
- msgstr "Laisser le plein Écran"
108214
-
108215
- msgid "Fullscreen"
108216
- msgstr "Plein Écran"
108217
-
108218
- msgid "About X_ITE"
108219
- msgstr "À propos de X_ITE"
108220
-
108221
- msgid "Examine Viewer"
108222
- msgstr "Examiner"
108223
-
108224
- msgid "Walk Viewer"
108225
- msgstr "Aller"
108226
-
108227
- msgid "Fly Viewer"
108228
- msgstr "Voler"
108229
-
108230
- msgid "Plane Viewer"
108231
- msgstr "Visionneur de la Plaine"
108232
-
108233
- msgid "Look At Viewer"
108234
- msgstr "Regarder un Objet de près"
108235
-
108236
- msgid "None Viewer"
108237
- msgstr "Pas de Visionneur"
108238
-
108239
- msgid "Flat"
108240
- msgstr "Plat"
108241
-
108242
- msgid "Wireframe"
108243
- msgstr "Image filaire"
108244
-
108245
- msgid "Loading %1 file"
108246
- msgstr "Télécharger %1 Fichier"
108247
-
108248
- msgid "Loading %1 files"
108249
- msgstr "Télécharger %1 Fichiers"
108250
-
108251
- msgid "Loading done"
108252
- msgstr "Téléchargement fini"
108253
-
108254
- msgid "Failed loading world."
108255
- msgstr "Le chargement des Fichiers a échoué."
108256
-
108257
- msgid "Show World Info"
108258
- msgstr "Afficher World Info"
108259
-
108260
- msgid "Viewpoint is copied to clipboard."
108261
- msgstr "Le point de Vue est copié dans le Presse-Papiers."
108262
- `;
108263
- ;
108264
-
108265
- x_ite_Namespace .add ("fr.po", "locale/fr.po", fr_po_default_);
108266
- /* harmony default export */ const fr_po = (fr_po_default_);
108267
- ;// CONCATENATED MODULE: ./src/locale/gettext.js
108057
+ ;// CONCATENATED MODULE: ./src/x_ite/Browser/ParticleSystems/GeometryTypes.js
108268
108058
  /*******************************************************************************
108269
108059
  *
108270
108060
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -108312,20 +108102,535 @@ x_ite_Namespace .add ("fr.po", "locale/fr.po", fr_po_default_);
108312
108102
  *
108313
108103
  ******************************************************************************/
108314
108104
 
108105
+ let GeometryTypes_i = 0;
108315
108106
 
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
+ };
108316
108115
 
108116
+ const GeometryTypes_default_ = GeometryTypes;
108117
+ ;
108317
108118
 
108318
- function execAll (regex, string)
108319
- {
108320
- const matches = [ ];
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
+ ;
108349
+
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
+ ];
108575
+ ;
108576
+
108577
+ x_ite_Namespace .add ("fr", "locale/fr", fr_default_);
108578
+ /* harmony default export */ const fr = (fr_default_);
108579
+ ;// CONCATENATED MODULE: ./src/locale/gettext.js
108580
+ /*******************************************************************************
108581
+ *
108582
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
108583
+ *
108584
+ * Copyright create3000, Scheffelstraße 31a, Leipzig, Germany 2011 - 2022.
108585
+ *
108586
+ * All rights reserved. Holger Seelig <holger.seelig@yahoo.de>.
108587
+ *
108588
+ * The copyright notice above does not evidence any actual of intended
108589
+ * publication of such source code, and is an unpublished work by create3000.
108590
+ * This material contains CONFIDENTIAL INFORMATION that is the property of
108591
+ * create3000.
108592
+ *
108593
+ * No permission is granted to copy, distribute, or create derivative works from
108594
+ * the contents of this software, in whole or in part, without the prior written
108595
+ * permission of create3000.
108596
+ *
108597
+ * NON-MILITARY USE ONLY
108598
+ *
108599
+ * All create3000 software are effectively free software with a non-military use
108600
+ * restriction. It is free. Well commented source is provided. You may reuse the
108601
+ * source in any way you please with the exception anything that uses it must be
108602
+ * marked to indicate is contains 'non-military use only' components.
108603
+ *
108604
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
108605
+ *
108606
+ * Copyright 2011 - 2022, Holger Seelig <holger.seelig@yahoo.de>.
108607
+ *
108608
+ * This file is part of the X_ITE Project.
108609
+ *
108610
+ * X_ITE is free software: you can redistribute it and/or modify it under the
108611
+ * terms of the GNU General Public License version 3 only, as published by the
108612
+ * Free Software Foundation.
108613
+ *
108614
+ * X_ITE is distributed in the hope that it will be useful, but WITHOUT ANY
108615
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
108616
+ * A PARTICULAR PURPOSE. See the GNU General Public License version 3 for more
108617
+ * details (a copy is included in the LICENSE file that accompanied this code).
108618
+ *
108619
+ * You should have received a copy of the GNU General Public License version 3
108620
+ * along with X_ITE. If not, see <https://www.gnu.org/licenses/gpl.html> for a
108621
+ * copy of the GPLv3 License.
108622
+ *
108623
+ * For Silvio, Joy and Adi.
108624
+ *
108625
+ ******************************************************************************/
108321
108626
 
108322
- let match = null;
108323
108627
 
108324
- while (match = regex .exec (string))
108325
- matches .push (match);
108326
108628
 
108327
- return matches;
108328
- }
108629
+
108630
+ const locales = new Map ([
108631
+ ["de", de],
108632
+ ["fr", fr],
108633
+ ]);
108329
108634
 
108330
108635
  function getLanguage ()
108331
108636
  {
@@ -108333,64 +108638,22 @@ function getLanguage ()
108333
108638
  {
108334
108639
  const language = value .split ("-") [0];
108335
108640
 
108336
- if (locales [language])
108641
+ if (locales .get (language))
108337
108642
  return language;
108338
108643
  }
108339
108644
 
108340
108645
  return (navigator .language || navigator .userLanguage) .split ("-") [0];
108341
108646
  }
108342
108647
 
108343
- function setLocale (language)
108344
- {
108345
- if (locales [language])
108346
- {
108347
- const
108348
- matches = execAll (msg, locales [language]),
108349
- locale = locales [language] = { };
108648
+ const locale = new Map (locales .get (getLanguage ()) ?? [ ]);
108350
108649
 
108351
- for (var i = 0, length = matches .length; i < length; ++ i)
108352
- {
108353
- if (matches [i] [2] .length)
108354
- locale [matches [i] [1]] = matches [i] [2];
108355
- }
108356
- }
108357
- }
108358
-
108359
- const locales =
108360
- {
108361
- en: "C",
108362
- de: de_po,
108363
- fr: fr_po,
108364
- };
108365
-
108366
- const
108367
- msg = /msgid\s+"(.*?)"\nmsgstr\s+"(.*?)"\n/g,
108368
- language = getLanguage ();
108369
-
108370
- setLocale (language);
108371
-
108372
- function gettext (string)
108373
- {
108374
- const locale = locales [language];
108375
-
108376
- if (locale === undefined)
108377
- return string;
108378
-
108379
- const translation = locale [string];
108380
-
108381
- if (translation === undefined)
108382
- return string;
108383
-
108384
- return translation;
108385
- }
108386
-
108387
- const gettext_default_ = gettext;
108650
+ const gettext_default_ = (string) => locale .get (string) || string;
108388
108651
  ;
108389
108652
 
108390
108653
  x_ite_Namespace .add ("gettext", "locale/gettext", gettext_default_);
108391
- /* harmony default export */ const locale_gettext = (gettext_default_);
108654
+ /* harmony default export */ const gettext = (gettext_default_);
108392
108655
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/BrowserTimings.js
108393
- /* provided dependency */ var BrowserTimings_$ = __webpack_require__(349);
108656
+ /* provided dependency */ var BrowserTimings_$ = __webpack_require__(275);
108394
108657
  /*******************************************************************************
108395
108658
  *
108396
108659
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -108442,12 +108705,15 @@ x_ite_Namespace .add ("gettext", "locale/gettext", gettext_default_);
108442
108705
 
108443
108706
 
108444
108707
 
108708
+
108709
+
108445
108710
  function BrowserTimings (executionContext)
108446
108711
  {
108447
108712
  Base_X3DBaseNode .call (this, executionContext);
108448
108713
 
108449
108714
  this .localStorage = this .getBrowser () .getLocalStorage () .addNameSpace ("BrowserTimings.");
108450
108715
  this .fps = new Time_StopWatch ();
108716
+ this .primitives = { };
108451
108717
  }
108452
108718
 
108453
108719
  Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseNode .prototype),
@@ -108471,7 +108737,7 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108471
108737
  this .header = BrowserTimings_$("<thead></thead>")
108472
108738
  .append (BrowserTimings_$("<tr></tr>")
108473
108739
  .append (BrowserTimings_$("<th colspan='2'></th>")
108474
- .text (locale_gettext("Browser Timings"))))
108740
+ .text (gettext("Browser Timings"))))
108475
108741
  .appendTo (this .table);
108476
108742
 
108477
108743
  this .body = BrowserTimings_$("<tbody></tbody>")
@@ -108498,56 +108764,61 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108498
108764
  this .pickingTime = BrowserTimings_$("<td></td>");
108499
108765
  this .collisionTime = BrowserTimings_$("<td></td>");
108500
108766
  this .renderTime = BrowserTimings_$("<td></td>");
108767
+ this .numPrimitives = BrowserTimings_$("<td></td>");
108501
108768
  this .numShapes = BrowserTimings_$("<td></td>");
108502
108769
  this .sensors = BrowserTimings_$("<td></td>");
108503
108770
 
108504
108771
  this .body .append (BrowserTimings_$("<tr></tr>")
108505
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Frame rate") + ":"))
108772
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Frame rate") + ":"))
108506
108773
  .append (this .frameRate));
108507
108774
 
108508
108775
  this .body .append (BrowserTimings_$("<tr></tr>")
108509
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Speed") + ":"))
108776
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Speed") + ":"))
108510
108777
  .append (this .speed)
108511
108778
  .addClass ("x_ite-private-more"));
108512
108779
 
108513
108780
  this .body .append (BrowserTimings_$("<tr></tr>")
108514
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Browser") + ":"))
108781
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Browser") + ":"))
108515
108782
  .append (this .browserTime));
108516
108783
 
108517
108784
  this .body .append (BrowserTimings_$("<tr></tr>")
108518
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("X3D total") + ":"))
108785
+ .append (BrowserTimings_$("<td></td>") .text (gettext("X3D total") + ":"))
108519
108786
  .append (this .x3dTotal));
108520
108787
 
108521
108788
  this .body .append (BrowserTimings_$("<tr></tr>")
108522
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Event Processing") + ":"))
108789
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Event Processing") + ":"))
108523
108790
  .append (this .eventProcessing));
108524
108791
 
108525
108792
  this .body .append (BrowserTimings_$("<tr></tr>")
108526
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Pointer") + ":"))
108793
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Pointer") + ":"))
108527
108794
  .append (this .pointerTime));
108528
108795
 
108529
108796
  this .body .append (BrowserTimings_$("<tr></tr>")
108530
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Camera") + ":"))
108797
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Camera") + ":"))
108531
108798
  .append (this .cameraTime));
108532
108799
 
108533
108800
  this .body .append (BrowserTimings_$("<tr></tr>")
108534
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Picking") + ":"))
108801
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Picking") + ":"))
108535
108802
  .append (this .pickingTime));
108536
108803
 
108537
108804
  this .body .append (BrowserTimings_$("<tr></tr>")
108538
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Collision Detection") + ":"))
108805
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Collision Detection") + ":"))
108539
108806
  .append (this .collisionTime));
108540
108807
 
108541
108808
  this .body .append (BrowserTimings_$("<tr></tr>")
108542
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Rendering") + ":"))
108809
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Rendering") + ":"))
108543
108810
  .append (this .renderTime));
108544
108811
 
108545
108812
  this .body .append (BrowserTimings_$("<tr></tr>")
108546
- .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") + ":"))
108547
108818
  .append (this .numShapes));
108548
108819
 
108549
108820
  this .body .append (BrowserTimings_$("<tr></tr>")
108550
- .append (BrowserTimings_$("<td></td>") .text (locale_gettext("Number of Sensors") + ":"))
108821
+ .append (BrowserTimings_$("<td></td>") .text (gettext("Number of Sensors") + ":"))
108551
108822
  .append (this .sensors));
108552
108823
 
108553
108824
  this .button .on ("click touchend", this .set_type__ .bind (this));
@@ -108562,13 +108833,14 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108562
108833
  {
108563
108834
  this .element .stop (true, true) .fadeIn ();
108564
108835
  this .fps .reset ();
108836
+ this .getBrowser () .addBrowserCallback (this, Base_X3DConstants .INITIALIZED_EVENT, () => this .reset ());
108565
108837
  this .getBrowser () .prepareEvents () .addInterest ("update", this);
108566
- this .update ();
108567
- this .build ();
108838
+ this .reset ();
108568
108839
  }
108569
108840
  else
108570
108841
  {
108571
108842
  this .element .stop (true, true) .fadeOut ();
108843
+ this .getBrowser () .removeBrowserCallback (this, Base_X3DConstants .INITIALIZED_EVENT);
108572
108844
  this .getBrowser () .prepareEvents () .removeInterest ("update", this);
108573
108845
  }
108574
108846
  },
@@ -108593,9 +108865,19 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108593
108865
  set_button__ ()
108594
108866
  {
108595
108867
  if (this .localStorage .type === "MORE")
108596
- this .button .text (locale_gettext("Less Properties"));
108868
+ this .button .text (gettext("Less Properties"));
108597
108869
  else
108598
- 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
+ });
108599
108881
  },
108600
108882
  update ()
108601
108883
  {
@@ -108613,8 +108895,16 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108613
108895
  {
108614
108896
  const browser = this .getBrowser ();
108615
108897
 
108616
- this .frameRate .text (`${f2 (1000 / this .fps .averageTime)} ${locale_gettext("fps")}`);
108617
- 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
+ }
108618
108908
 
108619
108909
  if (this .localStorage .type !== "MORE" || !browser .getWorld ())
108620
108910
  return;
@@ -108627,19 +108917,21 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108627
108917
  routingTime = Math .max (0, browser .getBrowserTime () .averageTime - (browser .getCameraTime () .averageTime + browser .getCollisionTime () .averageTime + browser .getDisplayTime () .averageTime)),
108628
108918
  prepareEvents = browser .prepareEvents () .getInterests () .size - 1,
108629
108919
  sensors = browser .sensorEvents () .getInterests () .size,
108630
- opaqueShapes = layers .reduce ((n, layer) => n + layer .getNumOpaqueShapes (), 0),
108631
- transparentShapes = layers .reduce ((n, layer) => n + layer .getNumTransparentShapes (), 0);
108632
-
108633
- this .browserTime .text (`${f2 (browser .getSystemTime () .averageTime)} ${locale_gettext("ms")}`);
108634
- this .x3dTotal .text (`${f2 (browser .getBrowserTime () .averageTime)} ${locale_gettext("ms")}`);
108635
- this .eventProcessing .text (`${f2 (routingTime)} ${locale_gettext("ms")}`);
108636
- this .pointerTime .text (`${f2 (browser .getPointingTime () .averageTime)} ${locale_gettext("ms")}`);
108637
- this .cameraTime .text (`${f2 (browser .getCameraTime () .averageTime)} ${locale_gettext("ms")}`);
108638
- this .pickingTime .text (`${f2 (browser .getPickingTime () .averageTime)} ${locale_gettext("ms")}`);
108639
- this .collisionTime .text (`${f2 (collisionTime)} ${locale_gettext("ms")}`);
108640
- this .renderTime .text (`${f2 (browser .getDisplayTime () .averageTime)} ${locale_gettext("ms")}`);
108641
- this .numShapes .text (`${opaqueShapes} + ${transparentShapes}`);
108642
- 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));
108643
108935
 
108644
108936
  browser .getSystemTime () .reset ();
108645
108937
  browser .getBrowserTime () .reset ();
@@ -108661,9 +108953,119 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
108661
108953
  getSpeedUnit (speed)
108662
108954
  {
108663
108955
  if (speed < 15)
108664
- return locale_gettext("m/s");
108956
+ return gettext("m/s");
108665
108957
 
108666
- return locale_gettext("km/h");
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
+ }
108977
+
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;
108667
109069
  },
108668
109070
  });
108669
109071
 
@@ -108676,19 +109078,23 @@ Object .defineProperties (BrowserTimings,
108676
109078
  },
108677
109079
  });
108678
109080
 
108679
- const f2 = (() =>
109081
+ function format (minimumFractionDigits, maximumFractionDigits)
108680
109082
  {
108681
109083
  const format = new Intl .NumberFormat (navigator .language || navigator .userLanguage, {
108682
109084
  notation: "standard",
108683
- minimumFractionDigits: 2,
108684
- maximumFractionDigits: 2,
109085
+ minimumFractionDigits,
109086
+ maximumFractionDigits,
108685
109087
  }) .format;
108686
109088
 
108687
109089
  return function (value)
108688
109090
  {
108689
109091
  return format (Number .isFinite (value) ? value : 0);
108690
109092
  };
108691
- })();
109093
+ }
109094
+
109095
+ const
109096
+ f0 = format (0, 0),
109097
+ f2 = format (2, 2);
108692
109098
 
108693
109099
  const BrowserTimings_default_ = BrowserTimings;
108694
109100
  ;
@@ -108820,7 +109226,7 @@ const TextureQuality_default_ = TextureQuality;
108820
109226
  x_ite_Namespace .add ("TextureQuality", "x_ite/Browser/Core/TextureQuality", TextureQuality_default_);
108821
109227
  /* harmony default export */ const Core_TextureQuality = (TextureQuality_default_);
108822
109228
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/BrowserOptions.js
108823
- /* provided dependency */ var BrowserOptions_$ = __webpack_require__(349);
109229
+ /* provided dependency */ var BrowserOptions_$ = __webpack_require__(275);
108824
109230
  /*******************************************************************************
108825
109231
  *
108826
109232
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -109414,7 +109820,7 @@ const RenderingProperties_default_ = RenderingProperties;
109414
109820
  x_ite_Namespace .add ("RenderingProperties", "x_ite/Browser/Core/RenderingProperties", RenderingProperties_default_);
109415
109821
  /* harmony default export */ const Core_RenderingProperties = (RenderingProperties_default_);
109416
109822
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/Notification.js
109417
- /* provided dependency */ var Notification_$ = __webpack_require__(349);
109823
+ /* provided dependency */ var Notification_$ = __webpack_require__(275);
109418
109824
  /*******************************************************************************
109419
109825
  *
109420
109826
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -109537,8 +109943,8 @@ const Notification_default_ = Notification;
109537
109943
  x_ite_Namespace .add ("Notification", "x_ite/Browser/Core/Notification", Notification_default_);
109538
109944
  /* harmony default export */ const Core_Notification = (Notification_default_);
109539
109945
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/ContextMenu.js
109540
- /* provided dependency */ var jquery_fullscreen = __webpack_require__(405);
109541
- /* provided dependency */ var ContextMenu_$ = __webpack_require__(349);
109946
+ /* provided dependency */ var jquery_fullscreen = __webpack_require__(543);
109947
+ /* provided dependency */ var ContextMenu_$ = __webpack_require__(275);
109542
109948
  /*******************************************************************************
109543
109949
  *
109544
109950
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -109658,16 +110064,16 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109658
110064
  },
109659
110065
  "separator0": "--------",
109660
110066
  "viewpoints": {
109661
- name: locale_gettext("Viewpoints"),
110067
+ name: gettext("Viewpoints"),
109662
110068
  className: "context-menu-icon x_ite-private-icon-viewpoint",
109663
110069
  items: this .getViewpoints (),
109664
110070
  },
109665
110071
  "available-viewers": {
109666
- name: locale_gettext("Available Viewers"),
110072
+ name: gettext("Available Viewers"),
109667
110073
  items: this .getAvailableViewers (),
109668
110074
  },
109669
110075
  "straighten-horizon": {
109670
- name: locale_gettext("Straighten Horizon"),
110076
+ name: gettext("Straighten Horizon"),
109671
110077
  type: "checkbox",
109672
110078
  selected: browser .getBrowserOption ("StraightenHorizon"),
109673
110079
  events: {
@@ -109678,14 +110084,14 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109678
110084
  browser .setBrowserOption ("StraightenHorizon", straightenHorizon);
109679
110085
 
109680
110086
  if (straightenHorizon)
109681
- browser .getNotification () ._string = locale_gettext("Straighten Horizon") + ": " + locale_gettext("on");
110087
+ browser .getNotification () ._string = gettext("Straighten Horizon") + ": " + gettext("on");
109682
110088
  else
109683
- browser .getNotification () ._string = locale_gettext("Straighten Horizon") + ": " + locale_gettext("off");
110089
+ browser .getNotification () ._string = gettext("Straighten Horizon") + ": " + gettext("off");
109684
110090
  },
109685
110091
  },
109686
110092
  },
109687
110093
  "display-rubberband": {
109688
- name: locale_gettext("Display Rubberband"),
110094
+ name: gettext("Display Rubberband"),
109689
110095
  type: "checkbox",
109690
110096
  selected: browser .getBrowserOption ("Rubberband"),
109691
110097
  events: {
@@ -109696,19 +110102,19 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109696
110102
  browser .setBrowserOption ("Rubberband", rubberband);
109697
110103
 
109698
110104
  if (rubberband)
109699
- browser .getNotification () ._string = locale_gettext("Rubberband") + ": " + locale_gettext("on");
110105
+ browser .getNotification () ._string = gettext("Rubberband") + ": " + gettext("on");
109700
110106
  else
109701
- browser .getNotification () ._string = locale_gettext("Rubberband") + ": " + locale_gettext("off");
110107
+ browser .getNotification () ._string = gettext("Rubberband") + ": " + gettext("off");
109702
110108
  },
109703
110109
  },
109704
110110
  },
109705
110111
  "separator1": "--------",
109706
110112
  "primitive-quality": {
109707
- name: locale_gettext("Primitive Quality"),
110113
+ name: gettext("Primitive Quality"),
109708
110114
  className: "context-menu-icon x_ite-private-icon-primitive-quality",
109709
110115
  items: {
109710
110116
  "high": {
109711
- name: locale_gettext("High"),
110117
+ name: gettext("High"),
109712
110118
  type: "radio",
109713
110119
  radio: "primitive-quality",
109714
110120
  selected: browser .getBrowserOption ("PrimitiveQuality") === "HIGH",
@@ -109716,12 +110122,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109716
110122
  click: () =>
109717
110123
  {
109718
110124
  browser .setBrowserOption ("PrimitiveQuality", "HIGH");
109719
- browser .getNotification () ._string = locale_gettext("Primitive Quality") + ": " + locale_gettext("high");
110125
+ browser .getNotification () ._string = gettext("Primitive Quality") + ": " + gettext("high");
109720
110126
  },
109721
110127
  },
109722
110128
  },
109723
110129
  "medium": {
109724
- name: locale_gettext("Medium"),
110130
+ name: gettext("Medium"),
109725
110131
  type: "radio",
109726
110132
  radio: "primitive-quality",
109727
110133
  selected: browser .getBrowserOption ("PrimitiveQuality") === "MEDIUM",
@@ -109729,12 +110135,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109729
110135
  click: () =>
109730
110136
  {
109731
110137
  browser .setBrowserOption ("PrimitiveQuality", "MEDIUM");
109732
- browser .getNotification () ._string = locale_gettext("Primitive Quality") + ": " + locale_gettext("medium");
110138
+ browser .getNotification () ._string = gettext("Primitive Quality") + ": " + gettext("medium");
109733
110139
  },
109734
110140
  },
109735
110141
  },
109736
110142
  "low": {
109737
- name: locale_gettext("Low"),
110143
+ name: gettext("Low"),
109738
110144
  type: "radio",
109739
110145
  radio: "primitive-quality",
109740
110146
  selected: browser .getBrowserOption ("PrimitiveQuality") === "LOW",
@@ -109742,18 +110148,18 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109742
110148
  click: () =>
109743
110149
  {
109744
110150
  browser .setBrowserOption ("PrimitiveQuality", "LOW");
109745
- browser .getNotification () ._string = locale_gettext("Primitive Quality") + ": " + locale_gettext("low");
110151
+ browser .getNotification () ._string = gettext("Primitive Quality") + ": " + gettext("low");
109746
110152
  },
109747
110153
  },
109748
110154
  },
109749
110155
  },
109750
110156
  },
109751
110157
  "texture-quality": {
109752
- name: locale_gettext("Texture Quality"),
110158
+ name: gettext("Texture Quality"),
109753
110159
  className: "context-menu-icon x_ite-private-icon-texture-quality",
109754
110160
  items: {
109755
110161
  "high": {
109756
- name: locale_gettext("High"),
110162
+ name: gettext("High"),
109757
110163
  type: "radio",
109758
110164
  radio: "texture-quality",
109759
110165
  selected: browser .getBrowserOption ("TextureQuality") === "HIGH",
@@ -109761,12 +110167,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109761
110167
  click: () =>
109762
110168
  {
109763
110169
  browser .setBrowserOption ("TextureQuality", "HIGH");
109764
- browser .getNotification () ._string = locale_gettext("Texture Quality") + ": " + locale_gettext("high");
110170
+ browser .getNotification () ._string = gettext("Texture Quality") + ": " + gettext("high");
109765
110171
  },
109766
110172
  },
109767
110173
  },
109768
110174
  "medium": {
109769
- name: locale_gettext("Medium"),
110175
+ name: gettext("Medium"),
109770
110176
  type: "radio",
109771
110177
  radio: "texture-quality",
109772
110178
  selected: browser .getBrowserOption ("TextureQuality") === "MEDIUM",
@@ -109774,12 +110180,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109774
110180
  click: () =>
109775
110181
  {
109776
110182
  browser .setBrowserOption ("TextureQuality", "MEDIUM");
109777
- browser .getNotification () ._string = locale_gettext("Texture Quality") + ": " + locale_gettext("medium");
110183
+ browser .getNotification () ._string = gettext("Texture Quality") + ": " + gettext("medium");
109778
110184
  },
109779
110185
  },
109780
110186
  },
109781
110187
  "low": {
109782
- name: locale_gettext("Low"),
110188
+ name: gettext("Low"),
109783
110189
  type: "radio",
109784
110190
  radio: "texture-quality",
109785
110191
  selected: browser .getBrowserOption ("TextureQuality") === "LOW",
@@ -109787,18 +110193,18 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109787
110193
  click: () =>
109788
110194
  {
109789
110195
  browser .setBrowserOption ("TextureQuality", "LOW");
109790
- browser .getNotification () ._string = locale_gettext("Texture Quality") + ": " + locale_gettext("low");
110196
+ browser .getNotification () ._string = gettext("Texture Quality") + ": " + gettext("low");
109791
110197
  },
109792
110198
  },
109793
110199
  },
109794
110200
  },
109795
110201
  },
109796
110202
  "shading": {
109797
- name: locale_gettext("Shading"),
110203
+ name: gettext("Shading"),
109798
110204
  className: "context-menu-icon x_ite-private-icon-shading",
109799
110205
  items: {
109800
110206
  "point": {
109801
- name: locale_gettext("Points"),
110207
+ name: gettext("Points"),
109802
110208
  type: "radio",
109803
110209
  radio: "shading",
109804
110210
  selected: browser .getBrowserOption ("Shading") === "POINT",
@@ -109806,12 +110212,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109806
110212
  click: () =>
109807
110213
  {
109808
110214
  browser .setBrowserOption ("Shading", "POINT");
109809
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Points");
110215
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Points");
109810
110216
  },
109811
110217
  },
109812
110218
  },
109813
110219
  "wireframe": {
109814
- name: locale_gettext("Wireframe"),
110220
+ name: gettext("Wireframe"),
109815
110221
  type: "radio",
109816
110222
  radio: "shading",
109817
110223
  selected: browser .getBrowserOption ("Shading") === "WIREFRAME",
@@ -109819,12 +110225,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109819
110225
  click: () =>
109820
110226
  {
109821
110227
  browser .setBrowserOption ("Shading", "WIREFRAME");
109822
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Wireframe");
110228
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Wireframe");
109823
110229
  },
109824
110230
  },
109825
110231
  },
109826
110232
  "flat": {
109827
- name: locale_gettext("Flat"),
110233
+ name: gettext("Flat"),
109828
110234
  type: "radio",
109829
110235
  radio: "shading",
109830
110236
  selected: browser .getBrowserOption ("Shading") === "FLAT",
@@ -109832,12 +110238,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109832
110238
  click: () =>
109833
110239
  {
109834
110240
  browser .setBrowserOption ("Shading", "FLAT");
109835
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Flat");
110241
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Flat");
109836
110242
  },
109837
110243
  },
109838
110244
  },
109839
110245
  "gouraud": {
109840
- name: locale_gettext("Gouraud"),
110246
+ name: gettext("Gouraud"),
109841
110247
  type: "radio",
109842
110248
  radio: "shading",
109843
110249
  selected: browser .getBrowserOption ("Shading") === "GOURAUD",
@@ -109845,12 +110251,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109845
110251
  click: () =>
109846
110252
  {
109847
110253
  browser .setBrowserOption ("Shading", "GOURAUD");
109848
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Gouraud");
110254
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Gouraud");
109849
110255
  },
109850
110256
  },
109851
110257
  },
109852
110258
  "phong": {
109853
- name: locale_gettext("Phong"),
110259
+ name: gettext("Phong"),
109854
110260
  type: "radio",
109855
110261
  radio: "shading",
109856
110262
  selected: browser .getBrowserOption ("Shading") === "PHONG",
@@ -109858,7 +110264,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109858
110264
  click: () =>
109859
110265
  {
109860
110266
  browser .setBrowserOption ("Shading", "PHONG");
109861
- browser .getNotification () ._string = locale_gettext("Shading") + ": " + locale_gettext("Phong");
110267
+ browser .getNotification () ._string = gettext("Shading") + ": " + gettext("Phong");
109862
110268
  },
109863
110269
  },
109864
110270
  },
@@ -109866,7 +110272,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109866
110272
  },
109867
110273
  "separator2": "--------",
109868
110274
  "browser-timings": {
109869
- name: locale_gettext("Browser Timings"),
110275
+ name: gettext("Browser Timings"),
109870
110276
  type: "checkbox",
109871
110277
  selected: browser .getBrowserOption ("Timings"),
109872
110278
  events: {
@@ -109878,7 +110284,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109878
110284
  },
109879
110285
  },
109880
110286
  "fullscreen": {
109881
- name: fullscreen ? locale_gettext("Leave Fullscreen") : locale_gettext("Fullscreen"),
110287
+ name: fullscreen ? gettext("Leave Fullscreen") : gettext("Fullscreen"),
109882
110288
  className: "context-menu-icon " + (fullscreen
109883
110289
  ? "x_ite-private-icon-leave-fullscreen"
109884
110290
  : "x_ite-private-icon-enter-fullscreen"),
@@ -109896,7 +110302,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109896
110302
  Object .assign (menu .items, {
109897
110303
  "separator4": "--------",
109898
110304
  "world-info": {
109899
- name: locale_gettext("Show World Info"),
110305
+ name: gettext("Show World Info"),
109900
110306
  className: "context-menu-icon x_ite-private-icon-world-info",
109901
110307
  callback ()
109902
110308
  {
@@ -109926,7 +110332,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
109926
110332
  },
109927
110333
  },
109928
110334
  "about": {
109929
- name: locale_gettext("About X_ITE"),
110335
+ name: gettext("About X_ITE"),
109930
110336
  className: "context-menu-icon x_ite-private-icon-help-about",
109931
110337
  callback ()
109932
110338
  {
@@ -110016,12 +110422,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
110016
110422
  for (const viewer of availableViewers)
110017
110423
  {
110018
110424
  menu [viewer] = {
110019
- name: locale_gettext(this .getViewerName (viewer)),
110425
+ name: gettext(this .getViewerName (viewer)),
110020
110426
  className: "context-menu-icon x_ite-private-icon-" + viewer .toLowerCase () + "-viewer",
110021
110427
  callback: () =>
110022
110428
  {
110023
110429
  browser ._viewer = viewer;
110024
- browser .getNotification () ._string = locale_gettext(this .getViewerName (viewer));
110430
+ browser .getNotification () ._string = gettext(this .getViewerName (viewer));
110025
110431
  browser .getSurface () .focus ();
110026
110432
  },
110027
110433
  };
@@ -110037,17 +110443,17 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
110037
110443
  switch (viewer)
110038
110444
  {
110039
110445
  case "EXAMINE":
110040
- return locale_gettext("Examine Viewer");
110446
+ return gettext("Examine Viewer");
110041
110447
  case "WALK":
110042
- return locale_gettext("Walk Viewer");
110448
+ return gettext("Walk Viewer");
110043
110449
  case "FLY":
110044
- return locale_gettext("Fly Viewer");
110450
+ return gettext("Fly Viewer");
110045
110451
  case "PLANE":
110046
- return locale_gettext("Plane Viewer");
110452
+ return gettext("Plane Viewer");
110047
110453
  case "LOOKAT":
110048
- return locale_gettext("Look At Viewer");
110454
+ return gettext("Look At Viewer");
110049
110455
  case "NONE":
110050
- return locale_gettext("None Viewer");
110456
+ return gettext("None Viewer");
110051
110457
  }
110052
110458
  },
110053
110459
  init (options)
@@ -111363,7 +111769,7 @@ Object .assign (Object .setPrototypeOf (X3DScene .prototype, Execution_X3DExecut
111363
111769
 
111364
111770
  this .updateExportedNode (exportedName, node);
111365
111771
 
111366
- this ._exportedNodes_changed = this .getBrowser () .getCurrentTime ();
111772
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
111367
111773
  },
111368
111774
  updateExportedNode (exportedName, node)
111369
111775
  {
@@ -111383,7 +111789,7 @@ Object .assign (Object .setPrototypeOf (X3DScene .prototype, Execution_X3DExecut
111383
111789
 
111384
111790
  this [_exportedNodes] .update (exportedName, exportedName, exportedNode);
111385
111791
 
111386
- this ._exportedNodes_changed = this .getBrowser () .getCurrentTime ();
111792
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
111387
111793
  },
111388
111794
  removeExportedNode (exportedName)
111389
111795
  {
@@ -111391,7 +111797,7 @@ Object .assign (Object .setPrototypeOf (X3DScene .prototype, Execution_X3DExecut
111391
111797
 
111392
111798
  this [_exportedNodes] .remove (exportedName);
111393
111799
 
111394
- this ._exportedNodes_changed = this .getBrowser () .getCurrentTime ();
111800
+ this ._sceneGraph_changed = this .getBrowser () .getCurrentTime ();
111395
111801
  },
111396
111802
  getExportedNode (exportedName)
111397
111803
  {
@@ -112299,7 +112705,7 @@ const DataStorage_default_ = DataStorage;
112299
112705
  x_ite_Namespace .add ("DataStorage", "standard/Utility/DataStorage", DataStorage_default_);
112300
112706
  /* harmony default export */ const Utility_DataStorage = (DataStorage_default_);
112301
112707
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Core/X3DCoreContext.js
112302
- /* provided dependency */ var X3DCoreContext_$ = __webpack_require__(349);
112708
+ /* provided dependency */ var X3DCoreContext_$ = __webpack_require__(275);
112303
112709
  /*******************************************************************************
112304
112710
  *
112305
112711
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -113010,7 +113416,7 @@ Object .assign (X3DCoreContext .prototype,
113010
113416
  text += "\n";
113011
113417
 
113012
113418
  this .copyToClipboard (text);
113013
- this .getNotification () ._string = locale_gettext ("Viewpoint copied to clipboard.");
113419
+ this .getNotification () ._string = gettext ("Viewpoint copied to clipboard.");
113014
113420
 
113015
113421
  console .log ("Viewpoint copied to clipboard.");
113016
113422
  console .debug (text);
@@ -114822,8 +115228,8 @@ const X3DViewer_default_ = X3DViewer;
114822
115228
  x_ite_Namespace .add ("X3DViewer", "x_ite/Browser/Navigation/X3DViewer", X3DViewer_default_);
114823
115229
  /* harmony default export */ const Navigation_X3DViewer = (X3DViewer_default_);
114824
115230
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/ExamineViewer.js
114825
- /* provided dependency */ var jquery_mousewheel = __webpack_require__(5);
114826
- /* provided dependency */ var ExamineViewer_$ = __webpack_require__(349);
115231
+ /* provided dependency */ var jquery_mousewheel = __webpack_require__(419);
115232
+ /* provided dependency */ var ExamineViewer_$ = __webpack_require__(275);
114827
115233
  /*******************************************************************************
114828
115234
  *
114829
115235
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -115695,8 +116101,8 @@ const ExamineViewer_default_ = ExamineViewer;
115695
116101
  x_ite_Namespace .add ("ExamineViewer", "x_ite/Browser/Navigation/ExamineViewer", ExamineViewer_default_);
115696
116102
  /* harmony default export */ const Navigation_ExamineViewer = (ExamineViewer_default_);
115697
116103
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/X3DFlyViewer.js
115698
- /* provided dependency */ var X3DFlyViewer_jquery_mousewheel = __webpack_require__(5);
115699
- /* provided dependency */ var X3DFlyViewer_$ = __webpack_require__(349);
116104
+ /* provided dependency */ var X3DFlyViewer_jquery_mousewheel = __webpack_require__(419);
116105
+ /* provided dependency */ var X3DFlyViewer_$ = __webpack_require__(275);
115700
116106
  /*******************************************************************************
115701
116107
  *
115702
116108
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -116705,8 +117111,8 @@ const FlyViewer_default_ = FlyViewer;
116705
117111
  x_ite_Namespace .add ("FlyViewer", "x_ite/Browser/Navigation/FlyViewer", FlyViewer_default_);
116706
117112
  /* harmony default export */ const Navigation_FlyViewer = (FlyViewer_default_);
116707
117113
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/PlaneViewer.js
116708
- /* provided dependency */ var PlaneViewer_jquery_mousewheel = __webpack_require__(5);
116709
- /* provided dependency */ var PlaneViewer_$ = __webpack_require__(349);
117114
+ /* provided dependency */ var PlaneViewer_jquery_mousewheel = __webpack_require__(419);
117115
+ /* provided dependency */ var PlaneViewer_$ = __webpack_require__(275);
116710
117116
  /*******************************************************************************
116711
117117
  *
116712
117118
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -117037,8 +117443,8 @@ const NoneViewer_default_ = NoneViewer;
117037
117443
  x_ite_Namespace .add ("NoneViewer", "x_ite/Browser/Navigation/NoneViewer", NoneViewer_default_);
117038
117444
  /* harmony default export */ const Navigation_NoneViewer = (NoneViewer_default_);
117039
117445
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Navigation/LookAtViewer.js
117040
- /* provided dependency */ var LookAtViewer_jquery_mousewheel = __webpack_require__(5);
117041
- /* provided dependency */ var LookAtViewer_$ = __webpack_require__(349);
117446
+ /* provided dependency */ var LookAtViewer_jquery_mousewheel = __webpack_require__(419);
117447
+ /* provided dependency */ var LookAtViewer_$ = __webpack_require__(275);
117042
117448
  /*******************************************************************************
117043
117449
  *
117044
117450
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -117996,12 +118402,12 @@ Object .assign (X3DNetworkingContext .prototype,
117996
118402
  if (this ._loadCount .getValue () || this [_loading])
117997
118403
  {
117998
118404
  var string = ((loadingDisplay || 1) === 1
117999
- ? locale_gettext ("Loading %1 file")
118000
- : locale_gettext ("Loading %1 files")) .replace ("%1", loadingDisplay || 1);
118405
+ ? gettext ("Loading %1 file")
118406
+ : gettext ("Loading %1 files")) .replace ("%1", loadingDisplay || 1);
118001
118407
  }
118002
118408
  else
118003
118409
  {
118004
- var string = locale_gettext("Loading done");
118410
+ var string = gettext("Loading done");
118005
118411
  this .setCursor ("DEFAULT");
118006
118412
  }
118007
118413
 
@@ -118177,8 +118583,8 @@ const X3DPickingContext_default_ = X3DPickingContext;
118177
118583
  x_ite_Namespace .add ("X3DPickingContext", "x_ite/Browser/Picking/X3DPickingContext", X3DPickingContext_default_);
118178
118584
  /* harmony default export */ const Picking_X3DPickingContext = (X3DPickingContext_default_);
118179
118585
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js
118180
- /* provided dependency */ var PointingDevice_jquery_mousewheel = __webpack_require__(5);
118181
- /* provided dependency */ var PointingDevice_$ = __webpack_require__(349);
118586
+ /* provided dependency */ var PointingDevice_jquery_mousewheel = __webpack_require__(419);
118587
+ /* provided dependency */ var PointingDevice_$ = __webpack_require__(275);
118182
118588
  /*******************************************************************************
118183
118589
  *
118184
118590
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -118998,34 +119404,36 @@ Object .assign (X3DPointingDeviceSensorContext .prototype,
118998
119404
  },
118999
119405
  getPointingShader (numClipPlanes, shapeNode, humanoidNode)
119000
119406
  {
119001
- const geometryContext = shapeNode .getGeometryContext ();
119407
+ const { geometryType, hasNormals } = shapeNode .getGeometryContext ();
119002
119408
 
119003
119409
  let key = "";
119004
119410
 
119005
119411
  key += numClipPlanes;
119006
119412
  key += ".";
119007
119413
  key += shapeNode .getShapeKey ();
119008
- key += geometryContext .geometryType;
119414
+ key += geometryType;
119415
+ key += hasNormals;
119009
119416
  key += ".";
119010
119417
  key += humanoidNode ?.getHumanoidKey () ?? "";
119011
119418
  key += ".";
119012
119419
 
119013
- if (geometryContext .geometryType >= 2)
119420
+ if (geometryType >= 2)
119014
119421
  {
119015
119422
  key += "0.0.0";
119016
119423
  }
119017
119424
  else
119018
119425
  {
119019
- const appearanceNode = shapeNode .getAppearance ();
119426
+ const appearanceNode = shapeNode .getAppearance ();
119020
119427
 
119021
- key += appearanceNode .getStyleProperties (geometryContext .geometryType) ? 1 : 0;
119428
+ key += appearanceNode .getStyleProperties (geometryType) ? 1 : 0;
119022
119429
  key += ".";
119023
119430
  key += appearanceNode .getTextureBits () .toString (16); // Textures for point and line.
119024
119431
  key += ".";
119025
119432
  key += appearanceNode .getMaterial () .getTextureBits () .toString (16); // Textures for point and line.
119026
119433
  }
119027
119434
 
119028
- return this [_pointingShaders] .get (key) || this .createPointingShader (key, numClipPlanes, shapeNode, humanoidNode);
119435
+ return this [_pointingShaders] .get (key)
119436
+ ?? this .createPointingShader (key, numClipPlanes, shapeNode, humanoidNode);
119029
119437
  },
119030
119438
  createPointingShader (key, numClipPlanes, shapeNode, humanoidNode)
119031
119439
  {
@@ -119034,14 +119442,25 @@ Object .assign (X3DPointingDeviceSensorContext .prototype,
119034
119442
  geometryContext = shapeNode .getGeometryContext (),
119035
119443
  options = [ ];
119036
119444
 
119445
+ if (geometryContext .hasNormals)
119446
+ options .push ("X3D_NORMALS");
119447
+
119037
119448
  if (numClipPlanes)
119038
119449
  {
119039
119450
  options .push ("X3D_CLIP_PLANES");
119040
119451
  options .push ("X3D_NUM_CLIP_PLANES " + numClipPlanes);
119041
119452
  }
119042
119453
 
119043
- if (shapeNode .getShapeKey () > 0)
119044
- 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
+ }
119045
119464
 
119046
119465
  options .push (`X3D_GEOMETRY_${geometryContext .geometryType}D`);
119047
119466
 
@@ -119469,7 +119888,7 @@ const MultiSampleFrameBuffer_default_ = MultiSampleFrameBuffer;
119469
119888
  x_ite_Namespace .add ("MultiSampleFrameBuffer", "x_ite/Rendering/MultiSampleFrameBuffer", MultiSampleFrameBuffer_default_);
119470
119889
  /* harmony default export */ const Rendering_MultiSampleFrameBuffer = (MultiSampleFrameBuffer_default_);
119471
119890
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Rendering/X3DRenderingContext.js
119472
- /* provided dependency */ var X3DRenderingContext_$ = __webpack_require__(349);
119891
+ /* provided dependency */ var X3DRenderingContext_$ = __webpack_require__(275);
119473
119892
  /*******************************************************************************
119474
119893
  *
119475
119894
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -119691,7 +120110,8 @@ Object .assign (X3DRenderingContext .prototype,
119691
120110
  key += appearanceNode .getMaterial () .getTextureBits () .toString (16); // Textures for point and line.
119692
120111
  }
119693
120112
 
119694
- return this [_depthShaders] .get (key) || this .createDepthShader (key, numClipPlanes, shapeNode, humanoidNode);
120113
+ return this [_depthShaders] .get (key)
120114
+ ?? this .createDepthShader (key, numClipPlanes, shapeNode, humanoidNode);
119695
120115
  },
119696
120116
  createDepthShader (key, numClipPlanes, shapeNode, humanoidNode)
119697
120117
  {
@@ -119707,7 +120127,7 @@ Object .assign (X3DRenderingContext .prototype,
119707
120127
  }
119708
120128
 
119709
120129
  if (shapeNode .getShapeKey () > 0)
119710
- options .push ("X3D_PARTICLE_SYSTEM");
120130
+ options .push ("X3D_INSTANCING");
119711
120131
 
119712
120132
  options .push (`X3D_GEOMETRY_${geometryContext .geometryType}D`);
119713
120133
 
@@ -120381,7 +120801,7 @@ const X3DSoundContext_default_ = X3DSoundContext;
120381
120801
  x_ite_Namespace .add ("X3DSoundContext", "x_ite/Browser/Sound/X3DSoundContext", X3DSoundContext_default_);
120382
120802
  /* harmony default export */ const Sound_X3DSoundContext = (X3DSoundContext_default_);
120383
120803
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/Texturing/KTXDecoder.js
120384
- /* provided dependency */ var KTXDecoder_$ = __webpack_require__(349);
120804
+ /* provided dependency */ var KTXDecoder_$ = __webpack_require__(275);
120385
120805
  const KTXDecoder_default_ = class KTXDecoder
120386
120806
  {
120387
120807
  constructor (gl, externalKtxlib, scriptDir)
@@ -121935,7 +122355,7 @@ const Components_default_ = Components;
121935
122355
  x_ite_Namespace .add ("Components", "x_ite/Components", Components_default_);
121936
122356
  /* harmony default export */ const x_ite_Components = ((/* unused pure expression or super */ null && (Components_default_)));
121937
122357
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/DOMIntegration.js
121938
- /* provided dependency */ var DOMIntegration_$ = __webpack_require__(349);
122358
+ /* provided dependency */ var DOMIntegration_$ = __webpack_require__(275);
121939
122359
  /*******************************************************************************
121940
122360
  * MIT License
121941
122361
  *
@@ -123068,7 +123488,7 @@ const SupportedProfiles_default_ = SupportedProfiles;
123068
123488
  x_ite_Namespace .add ("SupportedProfiles", "x_ite/Configuration/SupportedProfiles", SupportedProfiles_default_);
123069
123489
  /* harmony default export */ const Configuration_SupportedProfiles = (SupportedProfiles_default_);
123070
123490
  ;// CONCATENATED MODULE: ./src/x_ite/Browser/X3DBrowser.js
123071
- /* provided dependency */ var X3DBrowser_$ = __webpack_require__(349);
123491
+ /* provided dependency */ var X3DBrowser_$ = __webpack_require__(275);
123072
123492
  /*******************************************************************************
123073
123493
  *
123074
123494
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -123695,7 +124115,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
123695
124115
  {
123696
124116
  this .getSplashScreen ()
123697
124117
  .find (".x_ite-private-spinner-text")
123698
- .text (locale_gettext ("Failed loading world."));
124118
+ .text (gettext ("Failed loading world."));
123699
124119
  });
123700
124120
 
123701
124121
  reject (new Error ("Couldn't load X3D file."));
@@ -124160,7 +124580,7 @@ const X3DBrowser_default_ = X3DBrowser;
124160
124580
  x_ite_Namespace .add ("X3DBrowser", "x_ite/Browser/X3DBrowser", X3DBrowser_default_);
124161
124581
  /* harmony default export */ const Browser_X3DBrowser = (X3DBrowser_default_);
124162
124582
  ;// CONCATENATED MODULE: ./src/x_ite/X3DCanvasElement.js
124163
- /* provided dependency */ var X3DCanvasElement_$ = __webpack_require__(349);
124583
+ /* provided dependency */ var X3DCanvasElement_$ = __webpack_require__(275);
124164
124584
  /*******************************************************************************
124165
124585
  *
124166
124586
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -124297,8 +124717,8 @@ const X3DCanvasElement_default_ = X3DCanvasElement;
124297
124717
  x_ite_Namespace .add ("X3DCanvasElement", "x_ite/X3DCanvasElement", X3DCanvasElement_default_);
124298
124718
  /* harmony default export */ const x_ite_X3DCanvasElement = (X3DCanvasElement_default_);
124299
124719
  ;// CONCATENATED MODULE: ./src/lib/jquery.js
124300
- /* provided dependency */ var jquery_$ = __webpack_require__(349);
124301
- /* provided dependency */ var pako = __webpack_require__(929);
124720
+ /* provided dependency */ var jquery_$ = __webpack_require__(275);
124721
+ /* provided dependency */ var pako = __webpack_require__(35);
124302
124722
  Object .assign (jquery_$,
124303
124723
  {
124304
124724
  decodeText (input)
@@ -124375,14 +124795,14 @@ const jquery_default_ = jquery_$;
124375
124795
  x_ite_Namespace .add ("jquery", "lib/jquery", jquery_default_);
124376
124796
  /* harmony default export */ const jquery = ((/* unused pure expression or super */ null && (jquery_default_)));
124377
124797
  ;// CONCATENATED MODULE: ./src/lib/libtess.js
124378
- /* provided dependency */ var libtess_libtess = __webpack_require__(94);
124798
+ /* provided dependency */ var libtess_libtess = __webpack_require__(224);
124379
124799
  const libtess_default_ = libtess_libtess;
124380
124800
  ;
124381
124801
 
124382
124802
  x_ite_Namespace .add ("libtess", "lib/libtess", libtess_default_);
124383
124803
  /* harmony default export */ const lib_libtess = ((/* unused pure expression or super */ null && (libtess_default_)));
124384
124804
  ;// CONCATENATED MODULE: ./src/x_ite/X3D.js
124385
- /* provided dependency */ var X3D_$ = __webpack_require__(349);
124805
+ /* provided dependency */ var X3D_$ = __webpack_require__(275);
124386
124806
  /*******************************************************************************
124387
124807
  *
124388
124808
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -124690,7 +125110,7 @@ Object .assign (X3D,
124690
125110
 
124691
125111
  // Assign X3D to global namespace.
124692
125112
 
124693
- window [Symbol .for ("X_ITE.X3D-9.4.5")] = x_ite_X3D;
125113
+ window [Symbol .for ("X_ITE.X3D-9.5.0")] = x_ite_X3D;
124694
125114
 
124695
125115
  customElements .define ("x3d-canvas", x_ite_X3DCanvasElement);
124696
125116