x_ite 4.7.6 → 4.7.7

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 (140) hide show
  1. package/.vscode/settings.json +1 -2
  2. package/Makefile +1 -0
  3. package/build/components/annotation.build.js +2 -2
  4. package/build/components/cad-geometry.build.js +2 -2
  5. package/build/components/cube-map-texturing.build.js +2 -2
  6. package/build/components/dis.build.js +2 -2
  7. package/build/components/event-utilities.build.js +2 -2
  8. package/build/components/geometry2d.build.js +2 -2
  9. package/build/components/geospatial.build.js +2 -2
  10. package/build/components/h-anim.build.js +2 -2
  11. package/build/components/key-device-sensor.build.js +2 -2
  12. package/build/components/layout.build.js +2 -2
  13. package/build/components/nurbs.build.js +2 -2
  14. package/build/components/particle-systems.build.js +2 -2
  15. package/build/components/picking.build.js +2 -2
  16. package/build/components/projective-texture-mapping.build.js +2 -2
  17. package/build/components/rigid-body-physics.build.js +2 -2
  18. package/build/components/scripting.build.js +2 -2
  19. package/build/components/texturing-3d.build.js +2 -2
  20. package/build/components/volume-rendering.build.js +2 -2
  21. package/build/components/x_ite.build.js +2 -2
  22. package/build/parts/default.end.frag.js +3 -0
  23. package/build/parts/default.start.frag.js +15 -0
  24. package/build/parts/{x_ite.end.frag → x_ite.end.frag.js} +4 -2
  25. package/build/parts/x_ite.start.frag.js +16 -0
  26. package/build/x_ite.build.js +2 -2
  27. package/dist/assets/components/annotation.js +17 -7
  28. package/dist/assets/components/annotation.min.js +1 -1
  29. package/dist/assets/components/cad-geometry.js +17 -7
  30. package/dist/assets/components/cad-geometry.min.js +1 -1
  31. package/dist/assets/components/cube-map-texturing.js +17 -7
  32. package/dist/assets/components/cube-map-texturing.min.js +1 -1
  33. package/dist/assets/components/dis.js +17 -7
  34. package/dist/assets/components/dis.min.js +1 -1
  35. package/dist/assets/components/event-utilities.js +17 -7
  36. package/dist/assets/components/event-utilities.min.js +1 -1
  37. package/dist/assets/components/geometry2d.js +17 -7
  38. package/dist/assets/components/geometry2d.min.js +1 -1
  39. package/dist/assets/components/geospatial.js +17 -7
  40. package/dist/assets/components/geospatial.min.js +2 -2
  41. package/dist/assets/components/h-anim.js +17 -7
  42. package/dist/assets/components/h-anim.min.js +1 -1
  43. package/dist/assets/components/key-device-sensor.js +17 -7
  44. package/dist/assets/components/key-device-sensor.min.js +1 -1
  45. package/dist/assets/components/layout.js +17 -7
  46. package/dist/assets/components/layout.min.js +1 -1
  47. package/dist/assets/components/nurbs.js +17 -7
  48. package/dist/assets/components/nurbs.min.js +2 -2
  49. package/dist/assets/components/particle-systems.js +17 -7
  50. package/dist/assets/components/particle-systems.min.js +2 -2
  51. package/dist/assets/components/picking.js +21 -11
  52. package/dist/assets/components/picking.min.js +1 -1
  53. package/dist/assets/components/projective-texture-mapping.js +17 -7
  54. package/dist/assets/components/projective-texture-mapping.min.js +1 -1
  55. package/dist/assets/components/rigid-body-physics.js +17 -7
  56. package/dist/assets/components/rigid-body-physics.min.js +17 -17
  57. package/dist/assets/components/scripting.js +24 -9
  58. package/dist/assets/components/scripting.min.js +1 -1
  59. package/dist/assets/components/texturing-3d.js +17 -7
  60. package/dist/assets/components/texturing-3d.min.js +41 -41
  61. package/dist/assets/components/volume-rendering.js +19 -9
  62. package/dist/assets/components/volume-rendering.min.js +3 -3
  63. package/dist/assets/components/x_ite.js +17 -7
  64. package/dist/assets/components/x_ite.min.js +1 -1
  65. package/dist/assets/shaders/webgl1/FallbackUnlit.fs +3 -4
  66. package/dist/assets/shaders/webgl1/Gouraud.vs +0 -1
  67. package/dist/assets/shaders/webgl1/Phong.fs +0 -1
  68. package/dist/assets/shaders/webgl1/Unlit.fs +0 -3
  69. package/dist/assets/shaders/webgl2/Gouraud.vs +0 -1
  70. package/dist/assets/shaders/webgl2/Phong.fs +0 -1
  71. package/dist/assets/shaders/webgl2/Unlit.fs +0 -3
  72. package/dist/example.html +2 -2
  73. package/dist/x_ite.css +2 -2
  74. package/dist/x_ite.js +29492 -29016
  75. package/dist/x_ite.min.js +41 -41
  76. package/dist/x_ite.zip +0 -0
  77. package/docs/Accessing-the-External-Browser.md +31 -2
  78. package/docs/What's-New.md +23 -0
  79. package/docs/_config.yml +1 -1
  80. package/docs/index.md +20 -13
  81. package/docs/reference/Browser-Services.md +36 -8
  82. package/docs/reference/Script-Node-Authoring-Interface.md +12 -4
  83. package/package.json +3 -3
  84. package/src/assets/components/picking.js +2 -2
  85. package/src/assets/components/volume-rendering.js +2 -2
  86. package/src/assets/shaders/webgl1/FallbackUnlit.fs +3 -4
  87. package/src/assets/shaders/webgl1/Gouraud.vs +0 -1
  88. package/src/assets/shaders/webgl1/Phong.fs +0 -1
  89. package/src/assets/shaders/webgl1/Unlit.fs +0 -3
  90. package/src/assets/shaders/webgl2/Gouraud.vs +0 -1
  91. package/src/assets/shaders/webgl2/Phong.fs +0 -1
  92. package/src/assets/shaders/webgl2/Unlit.fs +0 -3
  93. package/src/bookmarks.js +8 -11
  94. package/src/examples.js +1 -1
  95. package/src/locale/de.po +15 -71
  96. package/src/locale/fr.po +14 -71
  97. package/src/standard/Time/MicroTime.js +3 -1
  98. package/src/standard/Utility/DataStorage.js +7 -10
  99. package/src/tests.js +1 -1
  100. package/src/x_ite/Browser/Core/BrowserOptions.js +40 -28
  101. package/src/x_ite/Browser/Core/BrowserTimings.js +12 -21
  102. package/src/x_ite/Browser/Core/ContextMenu.js +26 -12
  103. package/src/x_ite/Browser/Core/X3DCoreContext.js +95 -42
  104. package/src/x_ite/Browser/Navigation/ExamineViewer.js +3 -0
  105. package/src/x_ite/Browser/Navigation/LookAtViewer.js +3 -0
  106. package/src/x_ite/Browser/Navigation/PlaneViewer.js +3 -0
  107. package/src/x_ite/Browser/Navigation/X3DFlyViewer.js +3 -0
  108. package/src/x_ite/Browser/Picking/VolumePicker.js +1 -1
  109. package/src/x_ite/Browser/PointingDeviceSensor/PointingDevice.js +4 -1
  110. package/src/x_ite/Browser/Shaders/ShaderTest.js +3 -3
  111. package/src/x_ite/Browser/VERSION.js +1 -1
  112. package/src/x_ite/Browser/X3DBrowser.js +70 -50
  113. package/src/x_ite/Components/Picking/PointPickSensor.js +1 -1
  114. package/src/x_ite/Components/Scripting/Script.js +7 -2
  115. package/src/x_ite/Components/Shaders/X3DProgrammableShaderObject.js +10 -12
  116. package/src/x_ite/Components/Shaders.js +9 -9
  117. package/src/x_ite/Execution/X3DExecutionContext.js +9 -11
  118. package/src/x_ite/Fields/SFColor.js +5 -5
  119. package/src/x_ite/Fields/SFColorRGBA.js +6 -6
  120. package/src/x_ite/Fields/SFDouble.js +1 -1
  121. package/src/x_ite/Fields/SFFloat.js +1 -1
  122. package/src/x_ite/Fields/SFImage.js +13 -13
  123. package/src/x_ite/Fields/SFMatrix3.js +1 -1
  124. package/src/x_ite/Fields/SFMatrix4.js +1 -1
  125. package/src/x_ite/Fields/SFNode.js +23 -19
  126. package/src/x_ite/Fields/SFNodeCache.js +14 -10
  127. package/src/x_ite/Fields/SFRotation.js +6 -6
  128. package/src/x_ite/Fields/SFString.js +1 -1
  129. package/src/x_ite/Fields/SFVec2.js +2 -2
  130. package/src/x_ite/Fields/SFVec3.js +3 -3
  131. package/src/x_ite/Fields/SFVec4.js +4 -4
  132. package/src/x_ite/Fields/SFVecPrototypeTemplate.js +3 -3
  133. package/src/x_ite/InputOutput/Generator.js +71 -62
  134. package/src/x_ite/Parser/X3DParser.js +6 -0
  135. package/src/x_ite/Parser/XMLParser.js +1 -1
  136. package/src/x_ite/X3D.js +8 -2
  137. package/src/x_ite.js +21 -12
  138. package/build/parts/default.end.frag +0 -2
  139. package/build/parts/default.start.frag +0 -6
  140. package/build/parts/x_ite.start.frag +0 -8
@@ -50,29 +50,31 @@
50
50
  define ([
51
51
  "jquery",
52
52
  "x_ite/Fields",
53
+ "x_ite/Browser/Core/BrowserTimings",
53
54
  "x_ite/Browser/Core/BrowserOptions",
54
55
  "x_ite/Browser/Core/BrowserProperties",
55
56
  "x_ite/Browser/Core/RenderingProperties",
56
57
  "x_ite/Browser/Core/Notification",
57
- "x_ite/Browser/Core/BrowserTimings",
58
58
  "x_ite/Browser/Core/ContextMenu",
59
59
  "x_ite/Execution/Scene",
60
60
  "x_ite/Parser/Parser",
61
61
  "standard/Utility/DataStorage",
62
- "x_ite/DEBUG",
62
+ "standard/Math/Numbers/Vector3",
63
+ "locale/gettext",
63
64
  ],
64
65
  function ($,
65
66
  Fields,
67
+ BrowserTimings,
66
68
  BrowserOptions,
67
69
  BrowserProperties,
68
70
  RenderingProperties,
69
71
  Notification,
70
- BrowserTimings,
71
72
  ContextMenu,
72
73
  Scene,
73
74
  Parser,
74
75
  DataStorage,
75
- DEBUG)
76
+ Vector3,
77
+ _)
76
78
  {
77
79
  "use strict";
78
80
 
@@ -178,11 +180,11 @@ function ($,
178
180
  return gl;
179
181
  }
180
182
 
181
- let browserId = 0;
183
+ let browserNumber = 0;
182
184
 
183
185
  function X3DCoreContext (element)
184
186
  {
185
- this .number = ++ browserId;
187
+ this .number = ++ browserNumber;
186
188
  this .element = element;
187
189
 
188
190
  // Get canvas & context.
@@ -212,16 +214,16 @@ function ($,
212
214
  },
213
215
  this);
214
216
 
217
+ this .localStorage = new DataStorage (localStorage, "X_ITE.X3DBrowser(" + this .number + ").");
218
+ this .mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i .test (navigator .userAgent);
219
+
220
+ this .browserTimings = new BrowserTimings (this .getPrivateScene ());
215
221
  this .browserOptions = new BrowserOptions (this .getPrivateScene ());
216
222
  this .browserProperties = new BrowserProperties (this .getPrivateScene ());
217
223
  this .renderingProperties = new RenderingProperties (this .getPrivateScene ());
218
224
  this .notification = new Notification (this .getPrivateScene ());
219
- this .browserTimings = new BrowserTimings (this .getPrivateScene ());
220
225
  this .contextMenu = new ContextMenu (this .getPrivateScene ());
221
226
 
222
- this .localStorage = new DataStorage (localStorage, "X_ITE.X3DBrowser(" + this .number + ").");
223
- this .mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i .test (navigator .userAgent);
224
-
225
227
  $(".x_ite-console") .empty ();
226
228
 
227
229
  this .addChildObjects ("controlKey", new Fields .SFBool (),
@@ -236,11 +238,11 @@ function ($,
236
238
  {
237
239
  // Setup browser nodes.
238
240
 
241
+ this .browserTimings .setup ();
239
242
  this .browserOptions .setup ()
240
243
  this .browserProperties .setup ()
241
244
  this .renderingProperties .setup ();
242
245
  this .notification .setup ();
243
- this .browserTimings .setup ();
244
246
  this .contextMenu .setup ();
245
247
 
246
248
  // Observe Element's attributes.
@@ -333,6 +335,18 @@ function ($,
333
335
  {
334
336
  return this .extensions [name];
335
337
  },
338
+ getMobile: function ()
339
+ {
340
+ return this .mobile;
341
+ },
342
+ getLocalStorage: function ()
343
+ {
344
+ return this .localStorage;
345
+ },
346
+ getBrowserTimings: function ()
347
+ {
348
+ return this .browserTimings;
349
+ },
336
350
  getBrowserOptions: function ()
337
351
  {
338
352
  return this .browserOptions;
@@ -349,17 +363,9 @@ function ($,
349
363
  {
350
364
  return this .notification;
351
365
  },
352
- getBrowserTimings: function ()
353
- {
354
- return this .browserTimings;
355
- },
356
- getLocalStorage: function ()
357
- {
358
- return this .localStorage;
359
- },
360
- getMobile: function ()
366
+ getContextMenu: function ()
361
367
  {
362
- return this .mobile;
368
+ return this .contextMenu;
363
369
  },
364
370
  getPrivateScene: function ()
365
371
  {
@@ -627,7 +633,7 @@ function ($,
627
633
  if (this .getControlKey ())
628
634
  {
629
635
  event .preventDefault ();
630
- this .getBrowserTimings () .setEnabled (! this .getBrowserTimings () .getEnabled ());
636
+ this .setBrowserOption ("Timings", !this .getBrowserOption ("Timings"));
631
637
  }
632
638
 
633
639
  break;
@@ -664,21 +670,69 @@ function ($,
664
670
 
665
671
  const viewpoint = this .getActiveViewpoint ();
666
672
 
667
- if (! viewpoint)
673
+ if (!viewpoint)
668
674
  break;
669
675
 
670
- let text = "";
676
+ const vp = this .getPrivateScene () .createNode (viewpoint .getTypeName ());
677
+
678
+ switch (viewpoint .getTypeName ())
679
+ {
680
+ case "Viewpoint":
681
+ {
682
+ vp .position = viewpoint .getUserPosition ();
683
+ vp .orientation = viewpoint .getUserOrientation ();
684
+ vp .centerOfRotation = viewpoint .getUserCenterOfRotation ();
685
+ vp .fieldOfView = viewpoint .getFieldOfView ();
686
+ break;
687
+ }
688
+ case "OrthoViewpoint":
689
+ {
690
+ vp .position = viewpoint .getUserPosition ();
691
+ vp .orientation = viewpoint .getUserOrientation ();
692
+ vp .centerOfRotation = viewpoint .getUserCenterOfRotation ();
693
+ vp .fieldOfView = new Fields .MFFloat (viewpoint .getMinimumX (), viewpoint .getMinimumY (), viewpoint .getMaximumX (), viewpoint .getMaximumY ());
694
+ break;
695
+ }
696
+ case "GeoViewpoint":
697
+ {
698
+ const
699
+ geoOrigin = viewpoint .geoOrigin_,
700
+ geoCoord = new Vector3 (0, 0, 0);
701
+
702
+ if (geoOrigin .getValue () && geoOrigin .getNodeTypeName () === "GeoOrigin")
703
+ {
704
+ const go = this .getPrivateScene () .createNode ("GeoOrigin");
705
+
706
+ vp .geoOrigin = go;
707
+ go .geoSystem = geoOrigin .geoSystem;
708
+ go .geoCoords = geoOrigin .geoCoords;
709
+ go .rotateYUp = geoOrigin .rotateYUp;
710
+ }
711
+
712
+ vp .geoSystem = viewpoint .geoSystem_;
713
+ vp .position = viewpoint .getGeoCoord (viewpoint .getUserPosition (), geoCoord);
714
+ vp .orientation = viewpoint .getUserOrientation ();
715
+ vp .centerOfRotation = viewpoint .getGeoCoord (viewpoint .getUserCenterOfRotation (), geoCoord);
716
+ vp .fieldOfView = viewpoint .getFieldOfView ();
717
+ break;
718
+ }
719
+ }
671
720
 
672
- text += "Viewpoint {\n";
673
- text += " position " + viewpoint .getUserPosition () + "\n";
674
- text += " orientation " + viewpoint .getUserOrientation () + "\n";
675
- text += " centerOfRotation " + viewpoint .getUserCenterOfRotation () + "\n";
676
- text += "}";
721
+ let text;
677
722
 
678
- console .log (text);
679
- copyToClipboard (text);
723
+ switch (this .getExecutionContext () .getEncoding ())
724
+ {
725
+ case "ASCII":
726
+ case "VRML": text = vp .toVRMLString (); break;
727
+ case "JSON": text = vp .toVRMLString (); break;
728
+ default: text = vp .toXMLString (); break;
729
+ }
730
+
731
+ text += "\n";
680
732
 
681
- this .getNotification () .string_ = "Copied viewpoint to clipboard.";
733
+ console .log (text);
734
+ this .copyToClipboard (text);
735
+ this .getNotification () .string_ = _ ("Viewpoint is copied to clipboard.");
682
736
  }
683
737
 
684
738
  break;
@@ -722,17 +776,16 @@ function ($,
722
776
  }
723
777
  }
724
778
  },
779
+ copyToClipboard: function (text)
780
+ {
781
+ // The textarea must be visible to make copy work.
782
+ const $temp = $("<textarea></textarea>");
783
+ this .getElement () .find (".x_ite-private-browser") .prepend ($temp);
784
+ $temp .text (text) .select ();
785
+ document .execCommand ("copy");
786
+ $temp .remove ();
787
+ },
725
788
  };
726
789
 
727
- function copyToClipboard (text)
728
- {
729
- const $temp = $("<textarea>");
730
-
731
- $("body") .append ($temp);
732
- $temp .val (text) .select ();
733
- document .execCommand ("copy");
734
- $temp .remove ();
735
- }
736
-
737
790
  return X3DCoreContext;
738
791
  });
@@ -173,6 +173,9 @@ function ($,
173
173
  },
174
174
  mousedown: function (event)
175
175
  {
176
+ if (this .getBrowser () .getContextMenu () .getActive ())
177
+ return;
178
+
176
179
  if (this .button >= 0)
177
180
  return;
178
181
 
@@ -139,6 +139,9 @@ function ($,
139
139
  },
140
140
  mousedown: function (event)
141
141
  {
142
+ if (this .getBrowser () .getContextMenu () .getActive ())
143
+ return;
144
+
142
145
  if (this .button >= 0)
143
146
  return;
144
147
 
@@ -108,6 +108,9 @@ function ($,
108
108
  },
109
109
  mousedown: function (event)
110
110
  {
111
+ if (this .getBrowser () .getContextMenu () .getActive ())
112
+ return;
113
+
111
114
  if (this .button >= 0)
112
115
  return;
113
116
 
@@ -156,6 +156,9 @@ function ($,
156
156
  },
157
157
  mousedown: function (event)
158
158
  {
159
+ if (this .getBrowser () .getContextMenu () .getActive ())
160
+ return;
161
+
159
162
  if (this .button >= 0)
160
163
  return;
161
164
 
@@ -51,7 +51,7 @@ define ([
51
51
  "standard/Math/Numbers/Vector3",
52
52
  "standard/Math/Numbers/Rotation4",
53
53
  "standard/Math/Numbers/Matrix4",
54
- X3D .getComponentUrl ("rigid-body-physics"),
54
+ require .getComponentUrl ("rigid-body-physics"),
55
55
  ],
56
56
  function (Vector3,
57
57
  Rotation4,
@@ -92,10 +92,13 @@ function ($,
92
92
  },
93
93
  mousedown: function (event)
94
94
  {
95
- var browser = this .getBrowser ();
95
+ const browser = this .getBrowser ();
96
96
 
97
97
  browser .getElement () .focus ();
98
98
 
99
+ if (browser .getContextMenu () .getActive ())
100
+ return;
101
+
99
102
  if (browser .getShiftKey () && browser .getControlKey ())
100
103
  return;
101
104
 
@@ -105,8 +105,8 @@ function (TextureBuffer,
105
105
  // Matrices
106
106
 
107
107
  gl .uniformMatrix4fv (shaderNode .x3d_ProjectionMatrix, false, new Float32Array (Camera .ortho (-1, 1, -1, 1, -1, 1, new Matrix4 ())));
108
- gl .uniformMatrix4fv (shaderNode .x3d_ModelViewMatrix, false, new Float32Array (new Matrix4 ()));
109
- gl .uniformMatrix3fv (shaderNode .x3d_NormalMatrix, false, new Float32Array (new Matrix3 ()));
108
+ gl .uniformMatrix4fv (shaderNode .x3d_ModelViewMatrix, false, new Float32Array (Matrix4 .Identity));
109
+ gl .uniformMatrix3fv (shaderNode .x3d_NormalMatrix, false, new Float32Array (Matrix3 .Identity));
110
110
 
111
111
  // Set clip planes and lights to none.
112
112
 
@@ -149,7 +149,7 @@ function (TextureBuffer,
149
149
 
150
150
  frameBuffer .unbind ();
151
151
 
152
- return data [0] == 255 && data [1] == 0 && data [2] == 0 && data [3] == 255;
152
+ return true || (data [0] == 255 && data [1] == 0 && data [2] == 0 && data [3] == 255);
153
153
  };
154
154
  })(),
155
155
  };
@@ -49,5 +49,5 @@
49
49
 
50
50
  define (function ()
51
51
  {
52
- return "4.7.6";
52
+ return "4.7.7";
53
53
  });
@@ -50,7 +50,6 @@
50
50
  define ([
51
51
  "jquery",
52
52
  "x_ite/Browser/VERSION",
53
- "x_ite/Base/Events",
54
53
  "x_ite/Fields",
55
54
  "x_ite/Components",
56
55
  "x_ite/Components/Layering/X3DLayerNode",
@@ -70,7 +69,6 @@ define ([
70
69
  ],
71
70
  function ($,
72
71
  VERSION,
73
- Events,
74
72
  Fields,
75
73
  Components,
76
74
  X3DLayerNode,
@@ -143,6 +141,8 @@ function ($,
143
141
 
144
142
  // Print welcome message.
145
143
 
144
+ if (this .getNumber () > 1) return;
145
+
146
146
  this .print ("Welcome to " + this .name + " X3D Browser " + this .version + ":\n" +
147
147
  " Current Graphics Renderer\n" +
148
148
  " Name: " + this .getVendor () + " " + this .getRenderer () + "\n" +
@@ -247,9 +247,6 @@ function ($,
247
247
  this .callBrowserEventHandler ("onshutdown");
248
248
  }
249
249
 
250
- // Clear event cache.
251
- Events .clear ();
252
-
253
250
  // Replace world.
254
251
 
255
252
  if (scene instanceof Fields .MFNode)
@@ -402,68 +399,91 @@ function ($,
402
399
  },
403
400
  loadURL: function (url, parameter)
404
401
  {
405
- // Cancel any loading.
402
+ const promise = new Promise (function (resolve, reject)
403
+ {
404
+ // Cancel any loading.
406
405
 
407
- this .loadCount_ .removeInterest ("set_loadCount__", this);
408
- this .prepareEvents () .removeInterest ("bind", this);
406
+ this .loadCount_ .removeInterest ("set_loadCount__", this);
407
+ this .prepareEvents () .removeInterest ("bind", this);
409
408
 
410
- if (this .loader)
411
- this .loader .abort ();
409
+ if (this .loader)
410
+ this .loader .abort ();
412
411
 
413
- // Start loading.
412
+ // Start loading.
414
413
 
415
- this .setBrowserLoading (true);
416
- this .addLoadCount (this);
414
+ this .setBrowserLoading (true);
415
+ this .addLoadCount (this);
417
416
 
418
- const loader = this .loader = new FileLoader (this .getWorld ());
417
+ const loader = this .loader = new FileLoader (this .getWorld ());
419
418
 
420
- loader .createX3DFromURL (url, parameter,
421
- function (scene)
422
- {
423
- if (loader !== this .loader)
424
- return;
419
+ loader .createX3DFromURL (url, parameter,
420
+ function (scene)
421
+ {
422
+ if (loader !== this .loader)
423
+ {
424
+ reject ();
425
+ return;
426
+ }
425
427
 
426
- if (! this .getBrowserOptions () .getSplashScreen ())
427
- this .getCanvas () .fadeIn (0);
428
+ if (! this .getBrowserOptions () .getSplashScreen ())
429
+ this .getCanvas () .fadeIn (0);
428
430
 
429
- if (scene)
430
- {
431
- this .replaceWorld (scene);
432
- this .removeLoadCount (this);
431
+ if (scene)
432
+ {
433
+ this .replaceWorld (scene);
434
+ this .removeLoadCount (this);
435
+
436
+ resolve ();
437
+ }
438
+ else
439
+ {
440
+ this .callBrowserCallbacks (X3DConstants .CONNECTION_ERROR);
441
+ this .callBrowserEventHandler ("onerror");
442
+
443
+ setTimeout (function () { this .getSplashScreen () .find (".x_ite-private-spinner-text") .text (_ ("Failed loading world.")); } .bind (this), 31);
444
+
445
+ reject ();
446
+ }
433
447
  }
434
- else
448
+ .bind (this),
449
+ function (fragment)
435
450
  {
436
- this .callBrowserCallbacks (X3DConstants .CONNECTION_ERROR);
437
- this .callBrowserEventHandler ("onerror");
451
+ if (loader !== this .loader)
452
+ {
453
+ reject ();
454
+ return;
455
+ }
438
456
 
439
- setTimeout (function () { this .getSplashScreen () .find (".x_ite-private-spinner-text") .text (_ ("Failed loading world.")); } .bind (this), 31);
457
+ this .changeViewpoint (fragment);
458
+ this .removeLoadCount (this);
459
+ this .setBrowserLoading (false);
460
+
461
+ resolve ();
440
462
  }
441
- }
442
- .bind (this),
443
- function (fragment)
444
- {
445
- if (loader !== this .loader)
446
- return;
463
+ .bind (this),
464
+ function (url, target)
465
+ {
466
+ if (loader !== this .loader)
467
+ {
468
+ reject ();
469
+ return;
470
+ }
447
471
 
448
- this .changeViewpoint (fragment);
449
- this .removeLoadCount (this);
450
- this .setBrowserLoading (false);
451
- }
452
- .bind (this),
453
- function (url, target)
454
- {
455
- if (loader !== this .loader)
456
- return;
472
+ if (target)
473
+ window .open (url, target);
474
+ else
475
+ location = url;
457
476
 
458
- if (target)
459
- window .open (url, target);
460
- else
461
- location = url;
477
+ this .removeLoadCount (this);
478
+ this .setBrowserLoading (false);
462
479
 
463
- this .removeLoadCount (this);
464
- this .setBrowserLoading (false);
480
+ resolve ();
481
+ }
482
+ .bind (this));
465
483
  }
466
484
  .bind (this));
485
+
486
+ return promise;
467
487
  },
468
488
  addBrowserListener: function (callback, object)
469
489
  {
@@ -59,7 +59,7 @@ define ([
59
59
  "standard/Math/Numbers/Vector3",
60
60
  "standard/Math/Numbers/Rotation4",
61
61
  "standard/Math/Geometry/Box3",
62
- X3D .getComponentUrl ("rigid-body-physics"),
62
+ require .getComponentUrl ("rigid-body-physics"),
63
63
  ],
64
64
  function (Fields,
65
65
  X3DFieldDefinition,
@@ -221,9 +221,10 @@ function ($,
221
221
  text += "\n;var " + callbacks .join (",") + ";";
222
222
  text += "\n[" + callbacks .join (",") + "];";
223
223
 
224
+ this .global = this .getGlobal ();
225
+
224
226
  const
225
- global = this .getGlobal (),
226
- result = evaluate (global, text),
227
+ result = this .evaluate (text),
227
228
  context = { };
228
229
 
229
230
  for (let i = 0; i < callbacks .length; ++ i)
@@ -238,6 +239,10 @@ function ($,
238
239
  return { };
239
240
  }
240
241
  },
242
+ evaluate: function (text)
243
+ {
244
+ return evaluate (this .global, text);
245
+ },
241
246
  getGlobal: function ()
242
247
  {
243
248
  const
@@ -383,10 +383,6 @@ function (X3DCast,
383
383
 
384
384
  if (location)
385
385
  {
386
- field ._uniformLocation = location;
387
-
388
- field .addInterest ("set_field__", this);
389
-
390
386
  switch (field .getType ())
391
387
  {
392
388
  case X3DConstants .SFImage:
@@ -480,6 +476,13 @@ function (X3DCast,
480
476
  }
481
477
  }
482
478
 
479
+ if (location .array)
480
+ field ._uniformLocation = location .array .length ? location : null;
481
+ else
482
+ field ._uniformLocation = location;
483
+
484
+ field .addInterest ("set_field__", this);
485
+
483
486
  this .set_field__ (field);
484
487
  }
485
488
  },
@@ -686,12 +689,7 @@ function (X3DCast,
686
689
  }
687
690
  case X3DConstants .MFImage:
688
691
  {
689
- let array = location .array;
690
-
691
- const numImages = this .getImagesLength (field);
692
-
693
- if (numImages !== array .length)
694
- array = location .array = new Int32Array (numImages);
692
+ const array = location .array;
695
693
 
696
694
  for (let i = 0, a = 0, length = field .length; i < length; ++ i)
697
695
  {
@@ -864,8 +862,8 @@ function (X3DCast,
864
862
 
865
863
  let length = 3 * images .length;
866
864
 
867
- for (let i = 0, l = images .length; i < l; ++ i)
868
- length += images [i] .array .length;
865
+ for (const image of images)
866
+ length += image .array .length;
869
867
 
870
868
  return length;
871
869
  },
@@ -52,10 +52,10 @@ define ([
52
52
  "x_ite/Components/Shaders/FloatVertexAttribute",
53
53
  "x_ite/Components/Shaders/Matrix3VertexAttribute",
54
54
  "x_ite/Components/Shaders/Matrix4VertexAttribute",
55
- // "x_ite/Components/Shaders/PackagedShader",
56
- // "x_ite/Components/Shaders/ProgramShader",
55
+ "x_ite/Components/Shaders/PackagedShader",
56
+ "x_ite/Components/Shaders/ProgramShader",
57
57
  "x_ite/Components/Shaders/ShaderPart",
58
- // "x_ite/Components/Shaders/ShaderProgram",
58
+ "x_ite/Components/Shaders/ShaderProgram",
59
59
  "x_ite/Components/Shaders/X3DProgrammableShaderObject",
60
60
  "x_ite/Components/Shaders/X3DShaderNode",
61
61
  "x_ite/Components/Shaders/X3DVertexAttributeNode",
@@ -65,10 +65,10 @@ function (SupportedNodes,
65
65
  FloatVertexAttribute,
66
66
  Matrix3VertexAttribute,
67
67
  Matrix4VertexAttribute,
68
- // PackagedShader,
69
- // ProgramShader,
68
+ PackagedShader,
69
+ ProgramShader,
70
70
  ShaderPart,
71
- // ShaderProgram,
71
+ ShaderProgram,
72
72
  X3DProgrammableShaderObject,
73
73
  X3DShaderNode,
74
74
  X3DVertexAttributeNode)
@@ -81,10 +81,10 @@ function (SupportedNodes,
81
81
  FloatVertexAttribute: FloatVertexAttribute,
82
82
  Matrix3VertexAttribute: Matrix3VertexAttribute,
83
83
  Matrix4VertexAttribute: Matrix4VertexAttribute,
84
- // PackagedShader: PackagedShader,
85
- // ProgramShader: ProgramShader,
84
+ PackagedShader: PackagedShader,
85
+ ProgramShader: ProgramShader,
86
86
  ShaderPart: ShaderPart,
87
- // ShaderProgram: ShaderProgram,
87
+ ShaderProgram: ShaderProgram,
88
88
  };
89
89
 
90
90
  const AbstractTypes =
@@ -80,7 +80,8 @@ function (Fields,
80
80
  {
81
81
  X3DBaseNode .call (this, executionContext);
82
82
 
83
- this .addChildObjects ("rootNodes", new Fields .MFNode ());
83
+ this .addChildObjects ("rootNodes", new Fields .MFNode (),
84
+ "worldInfos", new Fields .MFNode ());
84
85
 
85
86
  this .rootNodes_ .setAccessType (X3DConstants .initializeOnly);
86
87
  this .rootNodes_ .addCloneCount (1);
@@ -91,7 +92,6 @@ function (Fields,
91
92
  this ._externprotos = new ExternProtoDeclarationArray ();
92
93
  this ._routes = new RouteArray ();
93
94
  this ._routeIndex = new Map ();
94
- this ._worldInfoNodes = [ ];
95
95
  }
96
96
 
97
97
  X3DExecutionContext .prototype = Object .assign (Object .create (X3DBaseNode .prototype),
@@ -639,22 +639,20 @@ function (Fields,
639
639
  {
640
640
  return this ._routes;
641
641
  },
642
- getWorldInfo: function ()
642
+ getWorldInfos: function ()
643
643
  {
644
- const length = this ._worldInfoNodes .length;
645
-
646
- if (length)
647
- return this ._worldInfoNodes [length - 1];
648
-
649
- return null;
644
+ return this .worldInfos_;
650
645
  },
651
646
  addWorldInfo: function (worldInfoNode)
652
647
  {
653
- this ._worldInfoNodes .push (worldInfoNode);
648
+ this .worldInfos_ .push (worldInfoNode);
654
649
  },
655
650
  removeWorldInfo: function (worldInfoNode)
656
651
  {
657
- this ._worldInfoNodes = this ._worldInfoNodes .filter (function (node) { return node !== worldInfoNode; });
652
+ const index = this .worldInfos_ .getValue () .indexOf (worldInfoNode);
653
+
654
+ if (index !== -1)
655
+ this .worldInfos_ .splice (index, 1);
658
656
  },
659
657
  toVRMLStream: function (stream)
660
658
  {