@crystaldesign/real-time-viewer 25.3.0-beta.4 → 25.3.0-beta.43

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 (161) hide show
  1. package/build/esm/index.js +331 -163
  2. package/build/types/real-time-viewer/src/CustomMaterial/index.d.ts.map +1 -1
  3. package/build/types/real-time-viewer/src/SelectionHandler/index.d.ts.map +1 -1
  4. package/build/types/real-time-viewer/src/context.d.ts.map +1 -1
  5. package/build/types/real-time-viewer/src/controls/index.d.ts.map +1 -1
  6. package/build/types/real-time-viewer/src/index.d.ts +1 -1
  7. package/build/types/real-time-viewer/src/index.d.ts.map +1 -1
  8. package/build/types/real-time-viewer/src/parser/createCams/index.d.ts.map +1 -1
  9. package/build/types/real-time-viewer/src/parser/findAssets/index.d.ts.map +1 -1
  10. package/build/types/real-time-viewer/src/parser/index.d.ts.map +1 -1
  11. package/build/types/real-time-viewer/src/parser/shadow/index.d.ts.map +1 -1
  12. package/build/types/real-time-viewer/src/store/SceneStore.d.ts +15 -1
  13. package/build/types/real-time-viewer/src/store/SceneStore.d.ts.map +1 -1
  14. package/build/types/real-time-viewer/src/store/UIStore.d.ts +8 -3
  15. package/build/types/real-time-viewer/src/store/UIStore.d.ts.map +1 -1
  16. package/build/types/real-time-viewer/src/store/UtilStore.d.ts +2 -1
  17. package/build/types/real-time-viewer/src/store/UtilStore.d.ts.map +1 -1
  18. package/build/types/real-time-viewer/src/store/types.d.ts +6 -0
  19. package/build/types/real-time-viewer/src/store/types.d.ts.map +1 -1
  20. package/build/types/real-time-viewer/src/types.d.ts +2 -1
  21. package/build/types/real-time-viewer/src/types.d.ts.map +1 -1
  22. package/build/types/real-time-viewer/src/useRealTimeRenderData.d.ts.map +1 -1
  23. package/build/umd/real-time-viewer.umd.min.js +1 -1
  24. package/build/umd/report.html +1 -1
  25. package/package.json +12 -12
  26. package/build/umd/1309.real-time-viewer.umd.min.js +0 -2
  27. package/build/umd/1309.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  28. package/build/umd/1447.real-time-viewer.umd.min.js +0 -2
  29. package/build/umd/1447.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  30. package/build/umd/1499.real-time-viewer.umd.min.js +0 -2
  31. package/build/umd/1499.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  32. package/build/umd/1781.real-time-viewer.umd.min.js +0 -2
  33. package/build/umd/1781.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  34. package/build/umd/1896.real-time-viewer.umd.min.js +0 -2
  35. package/build/umd/1896.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  36. package/build/umd/2011.real-time-viewer.umd.min.js +0 -2
  37. package/build/umd/2011.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  38. package/build/umd/2439.real-time-viewer.umd.min.js +0 -2
  39. package/build/umd/2439.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  40. package/build/umd/2817.real-time-viewer.umd.min.js +0 -2
  41. package/build/umd/2817.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  42. package/build/umd/2871.real-time-viewer.umd.min.js +0 -2
  43. package/build/umd/2871.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  44. package/build/umd/3116.real-time-viewer.umd.min.js +0 -2
  45. package/build/umd/3116.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  46. package/build/umd/3243.real-time-viewer.umd.min.js +0 -2
  47. package/build/umd/3243.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  48. package/build/umd/3351.real-time-viewer.umd.min.js +0 -2
  49. package/build/umd/3351.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  50. package/build/umd/3456.real-time-viewer.umd.min.js +0 -2
  51. package/build/umd/3456.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  52. package/build/umd/3945.real-time-viewer.umd.min.js +0 -2
  53. package/build/umd/3945.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  54. package/build/umd/4091.real-time-viewer.umd.min.js +0 -2
  55. package/build/umd/4091.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  56. package/build/umd/410.real-time-viewer.umd.min.js +0 -2
  57. package/build/umd/410.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  58. package/build/umd/4153.real-time-viewer.umd.min.js +0 -2
  59. package/build/umd/4153.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  60. package/build/umd/4248.real-time-viewer.umd.min.js +0 -2
  61. package/build/umd/4248.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  62. package/build/umd/4378.real-time-viewer.umd.min.js +0 -2
  63. package/build/umd/4378.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  64. package/build/umd/4431.real-time-viewer.umd.min.js +0 -2
  65. package/build/umd/4431.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  66. package/build/umd/4542.real-time-viewer.umd.min.js +0 -2
  67. package/build/umd/4542.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  68. package/build/umd/4602.real-time-viewer.umd.min.js +0 -2
  69. package/build/umd/4602.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  70. package/build/umd/4661.real-time-viewer.umd.min.js +0 -2
  71. package/build/umd/4661.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  72. package/build/umd/4669.real-time-viewer.umd.min.js +0 -2
  73. package/build/umd/4669.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  74. package/build/umd/4711.real-time-viewer.umd.min.js +0 -2
  75. package/build/umd/4711.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  76. package/build/umd/4823.real-time-viewer.umd.min.js +0 -2
  77. package/build/umd/4823.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  78. package/build/umd/5462.real-time-viewer.umd.min.js +0 -2
  79. package/build/umd/5462.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  80. package/build/umd/5478.real-time-viewer.umd.min.js +0 -2
  81. package/build/umd/5478.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  82. package/build/umd/5483.real-time-viewer.umd.min.js +0 -2
  83. package/build/umd/5483.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  84. package/build/umd/5555.real-time-viewer.umd.min.js +0 -2
  85. package/build/umd/5555.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  86. package/build/umd/5860.real-time-viewer.umd.min.js +0 -2
  87. package/build/umd/5860.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  88. package/build/umd/5922.real-time-viewer.umd.min.js +0 -2
  89. package/build/umd/5922.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  90. package/build/umd/6095.real-time-viewer.umd.min.js +0 -2
  91. package/build/umd/6095.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  92. package/build/umd/615.real-time-viewer.umd.min.js +0 -2
  93. package/build/umd/615.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  94. package/build/umd/6230.real-time-viewer.umd.min.js +0 -2
  95. package/build/umd/6230.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  96. package/build/umd/6357.real-time-viewer.umd.min.js +0 -2
  97. package/build/umd/6357.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  98. package/build/umd/653.real-time-viewer.umd.min.js +0 -2
  99. package/build/umd/653.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  100. package/build/umd/6656.real-time-viewer.umd.min.js +0 -2
  101. package/build/umd/6656.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  102. package/build/umd/6829.real-time-viewer.umd.min.js +0 -2
  103. package/build/umd/6829.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  104. package/build/umd/7042.real-time-viewer.umd.min.js +0 -2
  105. package/build/umd/7042.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  106. package/build/umd/710.real-time-viewer.umd.min.js +0 -2
  107. package/build/umd/710.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  108. package/build/umd/7142.real-time-viewer.umd.min.js +0 -2
  109. package/build/umd/7142.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  110. package/build/umd/7229.real-time-viewer.umd.min.js +0 -2
  111. package/build/umd/7229.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  112. package/build/umd/7276.real-time-viewer.umd.min.js +0 -2
  113. package/build/umd/7276.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  114. package/build/umd/7352.real-time-viewer.umd.min.js +0 -2
  115. package/build/umd/7352.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  116. package/build/umd/7501.real-time-viewer.umd.min.js +0 -2
  117. package/build/umd/7501.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  118. package/build/umd/7607.real-time-viewer.umd.min.js +0 -2
  119. package/build/umd/7607.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  120. package/build/umd/7729.real-time-viewer.umd.min.js +0 -2
  121. package/build/umd/7729.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  122. package/build/umd/7751.real-time-viewer.umd.min.js +0 -2
  123. package/build/umd/7751.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  124. package/build/umd/7754.real-time-viewer.umd.min.js +0 -2
  125. package/build/umd/7754.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  126. package/build/umd/8078.real-time-viewer.umd.min.js +0 -2
  127. package/build/umd/8078.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  128. package/build/umd/8105.real-time-viewer.umd.min.js +0 -2
  129. package/build/umd/8105.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  130. package/build/umd/815.real-time-viewer.umd.min.js +0 -2
  131. package/build/umd/815.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  132. package/build/umd/8240.real-time-viewer.umd.min.js +0 -2
  133. package/build/umd/8240.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  134. package/build/umd/8333.real-time-viewer.umd.min.js +0 -2
  135. package/build/umd/8333.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  136. package/build/umd/8526.real-time-viewer.umd.min.js +0 -2
  137. package/build/umd/8526.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  138. package/build/umd/8620.real-time-viewer.umd.min.js +0 -2
  139. package/build/umd/8620.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  140. package/build/umd/8728.real-time-viewer.umd.min.js +0 -2
  141. package/build/umd/8728.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  142. package/build/umd/8729.real-time-viewer.umd.min.js +0 -2
  143. package/build/umd/8729.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  144. package/build/umd/8991.real-time-viewer.umd.min.js +0 -2
  145. package/build/umd/8991.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  146. package/build/umd/9078.real-time-viewer.umd.min.js +0 -2
  147. package/build/umd/9078.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  148. package/build/umd/913.real-time-viewer.umd.min.js +0 -2
  149. package/build/umd/913.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  150. package/build/umd/930.real-time-viewer.umd.min.js +0 -2
  151. package/build/umd/930.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  152. package/build/umd/9383.real-time-viewer.umd.min.js +0 -2
  153. package/build/umd/9383.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  154. package/build/umd/9473.real-time-viewer.umd.min.js +0 -2
  155. package/build/umd/9473.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  156. package/build/umd/9568.real-time-viewer.umd.min.js +0 -2
  157. package/build/umd/9568.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  158. package/build/umd/9712.real-time-viewer.umd.min.js +0 -2
  159. package/build/umd/9712.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  160. package/build/umd/9884.real-time-viewer.umd.min.js +0 -2
  161. package/build/umd/9884.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
@@ -1,6 +1,7 @@
1
1
  import { useRef, useEffect, memo } from 'react';
2
2
  import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
3
3
  import _regeneratorRuntime from '@babel/runtime/regenerator';
4
+ import { Constants, HighlightLayer, Color4 as Color4$1 } from '@babylonjs/core';
4
5
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
5
6
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
6
7
  import _createClass from '@babel/runtime/helpers/createClass';
@@ -14,7 +15,6 @@ import { ExecuteCodeAction } from '@babylonjs/core/Actions/directActions';
14
15
  import { Color4, Color3 } from '@babylonjs/core/Maths/math.color';
15
16
  import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
16
17
  import '@babylonjs/core/Rendering/edgesRenderer';
17
- import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
18
18
  import { GLTF2Export } from '@babylonjs/serializers';
19
19
  import '@babylonjs/core/Helpers/sceneHelpers';
20
20
  import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
@@ -33,12 +33,10 @@ import { Rectangle } from '@babylonjs/gui/2D/controls/rectangle';
33
33
  import { TextBlock } from '@babylonjs/gui/2D/controls/textBlock';
34
34
  import { Mesh } from '@babylonjs/core/Meshes/mesh';
35
35
  import { Axis } from '@babylonjs/core/Maths/math.axis';
36
- import { HighlightLayer } from '@babylonjs/core/Layers/';
37
36
  import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
38
37
  import { Texture } from '@babylonjs/core/Materials/Textures/texture';
39
- import { Constants } from '@babylonjs/core/Engines/constants';
40
38
  import { Matrix as Matrix$1, Vector3 as Vector3$1 } from '@babylonjs/core/Maths/math';
41
- import { Engine } from '@babylonjs/core/Engines/engine';
39
+ import { EngineFactory } from '@babylonjs/core/Engines/engineFactory';
42
40
  import { Scene } from '@babylonjs/core/scene';
43
41
  import { DracoCompression } from '@babylonjs/core/Meshes/Compression/dracoCompression';
44
42
  import { SceneLoader } from '@babylonjs/core/Loading/sceneLoader';
@@ -108,7 +106,9 @@ function GetCameraControls(camera) {
108
106
  };
109
107
  (_sceneStore$updateCam = sceneStore.updateCameraInformation) === null || _sceneStore$updateCam === void 0 || _sceneStore$updateCam.call(sceneStore, cam);
110
108
  uistore.requestNewOverlayImage(cam, sceneStore.focusedElement, sceneStore.targetCameraPosition);
111
- if (stopRender) sceneStore.doRenderControlLoop = false;
109
+ if (stopRender) {
110
+ sceneStore.doRenderControlLoop = false;
111
+ }
112
112
  }
113
113
  function moveTarget(deltaX, deltaY) {
114
114
  sceneStore.isControlledViewpoint = false;
@@ -179,12 +179,13 @@ function GetCameraControls(camera) {
179
179
  sceneStore.targetCameraPosition = new Vector3(x, y, z);
180
180
  }
181
181
  rotateUniversalCamera(deltaX, deltaY);
182
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
182
183
  sceneStore.doRenderControlLoop = true;
183
184
  }
184
185
  function onRotateMouse(event) {
185
186
  if (previousTouch != undefined) return;
186
- var deltaX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
187
- var deltaY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;
187
+ var deltaX = event.movementX || 0;
188
+ var deltaY = event.movementY || 0;
188
189
  onRotate(deltaX, deltaY);
189
190
  }
190
191
  function onMouseDown(ev) {
@@ -204,9 +205,10 @@ function GetCameraControls(camera) {
204
205
  element === null || element === void 0 || element.removeEventListener('pointermove', onMouseMoveTarget, false);
205
206
  }
206
207
  function onMouseMoveTarget(event) {
207
- var deltaX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
208
- var deltaY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;
208
+ var deltaX = event.movementX || 0;
209
+ var deltaY = event.movementY || 0;
209
210
  moveTarget(deltaX * 0.002, deltaY * 0.002);
211
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
210
212
  sceneStore.doRenderControlLoop = true;
211
213
  }
212
214
  var onTouchStart = function onTouchStart(ev) {
@@ -232,6 +234,7 @@ function GetCameraControls(camera) {
232
234
  var dist = Math.hypot(ev.touches[0].pageX - ev.touches[1].pageX, ev.touches[0].pageY - ev.touches[1].pageY);
233
235
  var distChange = dist - initDistance;
234
236
  moveCameraAwayFromTarget(-distChange * 0.01);
237
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
235
238
  sceneStore.doRenderControlLoop = true;
236
239
  initDistance = dist;
237
240
  }
@@ -246,6 +249,7 @@ function GetCameraControls(camera) {
246
249
  }
247
250
  var value = ev.deltaY > 0 ? add : -add;
248
251
  moveCameraAwayFromTarget(value * 2);
252
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
249
253
  sceneStore.doRenderControlLoop = true;
250
254
  }
251
255
  function onDoubleClick() {}
@@ -940,6 +944,7 @@ function updateCam(camera, scene) {
940
944
  var _sceneStore$updateCam;
941
945
  if (camera.pos.x == 0 && camera.pos.y == 0 && camera.pos.z == 0) return;
942
946
  var utilStore = useUtilStoreContext();
947
+ if (!utilStore.updateCam) return;
943
948
  var sceneStore = useSceneStoreContext();
944
949
  var cam = scene.getCameraByName('defaultCam');
945
950
  if (!cam) {
@@ -1000,6 +1005,7 @@ var SceneStore = /*#__PURE__*/function () {
1000
1005
  _defineProperty(this, "_sceneConstruct", {});
1001
1006
  _defineProperty(this, "_hasRendered", false);
1002
1007
  _defineProperty(this, "_hasPlanned", false);
1008
+ _defineProperty(this, "_modelIteration", 0);
1003
1009
  _defineProperty(this, "_utilStore", void 0);
1004
1010
  _defineProperty(this, "_cache", []);
1005
1011
  _defineProperty(this, "_ssao", undefined);
@@ -1010,6 +1016,7 @@ var SceneStore = /*#__PURE__*/function () {
1010
1016
  _defineProperty(this, "_jwt", void 0);
1011
1017
  _defineProperty(this, "_onMissingGeo", void 0);
1012
1018
  _defineProperty(this, "_cancelSceneExport", void 0);
1019
+ _defineProperty(this, "_materialCache", void 0);
1013
1020
  //controls
1014
1021
  _defineProperty(this, "_renderControlLoop", undefined);
1015
1022
  _defineProperty(this, "_doRenderControlLoop", false);
@@ -1019,6 +1026,7 @@ var SceneStore = /*#__PURE__*/function () {
1019
1026
  _defineProperty(this, "_focusedElement", void 0);
1020
1027
  _defineProperty(this, "_isControlledViewpoint", true);
1021
1028
  // if the current viewpoint should automatically change with the planning
1029
+ _defineProperty(this, "_renderLoopTimeoutId", void 0);
1022
1030
  _defineProperty(this, "light", undefined);
1023
1031
  _defineProperty(this, "changedElements", void 0);
1024
1032
  _defineProperty(this, "updateCameraInformation", void 0);
@@ -1029,6 +1037,9 @@ var SceneStore = /*#__PURE__*/function () {
1029
1037
  this.updateCameraInformation = updateCameraInformation;
1030
1038
  this._cancelSceneExport = false;
1031
1039
  this._jwt = jwt;
1040
+ this._materialCache = [];
1041
+ this._hqRenderScript = JSON.parse(hqRenderScript);
1042
+ this._utilStore = utilStore;
1032
1043
  var options = new SceneOptimizerOptions(15, 1000);
1033
1044
  options.addOptimization(new ShadowsOptimization(0));
1034
1045
  options.addOptimization(new RenderTargetsOptimization(0));
@@ -1036,11 +1047,6 @@ var SceneStore = /*#__PURE__*/function () {
1036
1047
  scene.materials.forEach(function (mat) {
1037
1048
  return mat.freeze();
1038
1049
  });
1039
- scene.meshes.forEach(function (mesh) {
1040
- mesh.freezeWorldMatrix();
1041
- mesh.cullingStrategy = AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY;
1042
- });
1043
- scene.autoClear = false;
1044
1050
  scene.blockMaterialDirtyMechanism = true;
1045
1051
  return true;
1046
1052
  }, function () {
@@ -1054,10 +1060,18 @@ var SceneStore = /*#__PURE__*/function () {
1054
1060
  return '';
1055
1061
  }, 1);
1056
1062
  this._optimizer = new SceneOptimizer(scene, options);
1057
- this._hqRenderScript = JSON.parse(hqRenderScript);
1058
- this._utilStore = utilStore;
1059
1063
  }
1060
1064
  return _createClass(SceneStore, [{
1065
+ key: "materialCache",
1066
+ get: function get() {
1067
+ return this._materialCache;
1068
+ }
1069
+ }, {
1070
+ key: "modelIteration",
1071
+ get: function get() {
1072
+ return this._modelIteration;
1073
+ }
1074
+ }, {
1061
1075
  key: "jwt",
1062
1076
  get: function get() {
1063
1077
  return this._jwt;
@@ -1375,6 +1389,44 @@ var SceneStore = /*#__PURE__*/function () {
1375
1389
  set: function set(renderPipeline) {
1376
1390
  this._renderPipeline = renderPipeline;
1377
1391
  }
1392
+ }, {
1393
+ key: "renderLoop",
1394
+ value: function renderLoop() {
1395
+ var _this$controlRenderLo;
1396
+ if (this.cameraTargetPosition.x == 0 && this.cameraTargetPosition.y == 0 && this.cameraTargetPosition.z == 0) this.setCameraTarget();
1397
+ (_this$controlRenderLo = this.controlRenderLoop) === null || _this$controlRenderLo === void 0 || _this$controlRenderLo.call(this);
1398
+ this.scene.render();
1399
+ }
1400
+ }, {
1401
+ key: "runRenderLoop",
1402
+ value: function runRenderLoop() {
1403
+ var engine = this._scene.getEngine();
1404
+ if (engine.activeRenderLoops.length != 0) return;
1405
+ engine.runRenderLoop(this.renderLoop.bind(this));
1406
+ }
1407
+ }, {
1408
+ key: "runRenderLoopIndefinitely",
1409
+ value: function runRenderLoopIndefinitely() {
1410
+ clearTimeout(this._renderLoopTimeoutId);
1411
+ this.runRenderLoop();
1412
+ }
1413
+ }, {
1414
+ key: "runRenderLoopForTime",
1415
+ value: function runRenderLoopForTime(ms) {
1416
+ var _this2 = this;
1417
+ this.runRenderLoop();
1418
+ clearTimeout(this._renderLoopTimeoutId);
1419
+ this._renderLoopTimeoutId = setTimeout(function () {
1420
+ _this2.stopRenderLoop();
1421
+ }, ms);
1422
+ }
1423
+ }, {
1424
+ key: "stopRenderLoop",
1425
+ value: function stopRenderLoop() {
1426
+ clearTimeout(this._renderLoopTimeoutId);
1427
+ this._renderLoopTimeoutId = undefined;
1428
+ this._scene.getEngine().stopRenderLoop();
1429
+ }
1378
1430
  }, {
1379
1431
  key: "setResolution",
1380
1432
  value: function setResolution(gameCanvas, resolution) {
@@ -1392,6 +1444,40 @@ var SceneStore = /*#__PURE__*/function () {
1392
1444
  }
1393
1445
  this._scene.getEngine().resize();
1394
1446
  }
1447
+ }, {
1448
+ key: "checkMaterialCache",
1449
+ value: function checkMaterialCache() {
1450
+ // material cache can't go over amount x because it leads to performance issues
1451
+ if (this._materialCache.length < 10) return;
1452
+ var amountToDispose = this._materialCache.length - 11;
1453
+ var disposableMaterials = this._materialCache.filter(function (m) {
1454
+ return m.mat.getBindedMeshes().length == 0;
1455
+ });
1456
+ disposableMaterials = disposableMaterials.sort(function (dm) {
1457
+ return dm.lastUsage;
1458
+ });
1459
+ for (var idx = 0; idx < amountToDispose; idx++) {
1460
+ if (idx < disposableMaterials.length - 1) {
1461
+ var _mat$baseTexture, _mat$metallicRoughnes, _mat$normalTexture;
1462
+ var mat = disposableMaterials[idx].mat;
1463
+ mat.dispose();
1464
+ (_mat$baseTexture = mat.baseTexture) === null || _mat$baseTexture === void 0 || _mat$baseTexture.dispose();
1465
+ (_mat$metallicRoughnes = mat.metallicRoughnessTexture) === null || _mat$metallicRoughnes === void 0 || _mat$metallicRoughnes.dispose();
1466
+ (_mat$normalTexture = mat.normalTexture) === null || _mat$normalTexture === void 0 || _mat$normalTexture.dispose();
1467
+ this._materialCache.splice(this._materialCache.indexOf(disposableMaterials[idx]), 1);
1468
+ }
1469
+ }
1470
+ }
1471
+ }, {
1472
+ key: "addMaterialToCache",
1473
+ value: function addMaterialToCache(materialCache) {
1474
+ this._materialCache.push(materialCache);
1475
+ }
1476
+ }, {
1477
+ key: "updateModelIteration",
1478
+ value: function updateModelIteration() {
1479
+ this._modelIteration = this._modelIteration + 1;
1480
+ }
1395
1481
  }, {
1396
1482
  key: "init",
1397
1483
  value: function init(diva3durl, gameCanvas, viewpoint, resolution) {
@@ -1668,6 +1754,7 @@ function SelHandler (_ref) {
1668
1754
  sceneStore.selectedElement = elemName;
1669
1755
  uiStore.selectElem(elemName);
1670
1756
  onElSelected === null || onElSelected === void 0 || onElSelected(elem.parent.name, Number(elemName));
1757
+ sceneStore.runRenderLoopForTime(1000);
1671
1758
  };
1672
1759
  return {
1673
1760
  onSelection: onSelection
@@ -1685,7 +1772,7 @@ function _arrayLikeToArray$5(r, a) { (null == a || a > r.length) && (a = r.lengt
1685
1772
  */
1686
1773
 
1687
1774
  var UIStore = /*#__PURE__*/function () {
1688
- function UIStore(scene, enableSSAO, utilStore, uiConfig, requestNewOverlayImage, _overlayImage, onElementCopy) {
1775
+ function UIStore(scene, enableSSAO, _utilStore, uiConfig, requestNewOverlayImage, _overlayImage, onElementCopy, runRenderLoopForTime) {
1689
1776
  var _this = this;
1690
1777
  _classCallCheck(this, UIStore);
1691
1778
  _defineProperty(this, "_utilStore", void 0);
@@ -1708,38 +1795,53 @@ var UIStore = /*#__PURE__*/function () {
1708
1795
  _defineProperty(this, "_gridGui", void 0);
1709
1796
  _defineProperty(this, "_isStaticBg", void 0);
1710
1797
  _defineProperty(this, "_elementsInfo", void 0);
1711
- _defineProperty(this, "_selectedHl", void 0);
1712
1798
  _defineProperty(this, "_diffuseTexture", void 0);
1713
1799
  _defineProperty(this, "_plane", void 0);
1714
1800
  _defineProperty(this, "_selectedMeshes", []);
1801
+ _defineProperty(this, "_isUnityComb", false);
1802
+ _defineProperty(this, "_selectedHl", void 0);
1803
+ _defineProperty(this, "_runRenderLoopForTime", void 0);
1715
1804
  _defineProperty(this, "updateOverlayImage", function (overlayImage) {
1716
- var _this$_diffuseTexture;
1805
+ var _this$_diffuseTexture, _this$_runRenderLoopF;
1717
1806
  if (!overlayImage || !_this._scene || ((_this$_diffuseTexture = _this._diffuseTexture) === null || _this$_diffuseTexture === void 0 ? void 0 : _this$_diffuseTexture.url) == overlayImage.base64) return;
1807
+ var utilStore = useUtilStoreContext();
1808
+ if (!utilStore.updateCam) return;
1809
+ (_this$_runRenderLoopF = _this._runRenderLoopForTime) === null || _this$_runRenderLoopF === void 0 || _this$_runRenderLoopF.call(_this, 2000);
1718
1810
  _this._isStaticBg = overlayImage.isStaticBg;
1719
- _this._diffuseTexture.updateURL(overlayImage.base64);
1720
- _this._plane.visibility = 1;
1811
+ var tex = new Texture(overlayImage.base64, _this._scene, undefined, true, Texture.TRILINEAR_SAMPLINGMODE, function () {
1812
+ _this._plane.material.diffuseTexture = tex;
1813
+ _this._diffuseTexture.dispose();
1814
+ _this._diffuseTexture = tex;
1815
+ });
1816
+ _this.fadeInOverlayImage(_this._plane.visibility == 1);
1721
1817
  _this._enableSSAO(false);
1818
+ _this._plane.setEnabled(true);
1722
1819
  });
1723
1820
  this._scene = scene;
1724
- var plane = MeshBuilder.CreatePlane('overlayplane', {
1725
- size: 0.0047
1726
- }, scene);
1821
+ var engine = this._scene.getEngine();
1727
1822
  var mat = new StandardMaterial('planeMat', scene);
1728
- this._diffuseTexture = new Texture('data:image/gif;base64,R0lGODlhAQABALMAAAAAAP///////////////////////////////////////////////////////////yH5BAEAAAEALAAAAAABAAEAAAQCMEQAOw==', scene);
1823
+ this._diffuseTexture = new Texture('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wcAAwAB/ep3wWkAAAAASUVORK5CYII=', scene);
1729
1824
  mat.diffuseTexture = this._diffuseTexture;
1730
1825
  mat.emissiveTexture = this._diffuseTexture;
1731
1826
  mat.specularColor = Color3.Black();
1732
- this._plane = plane;
1733
- plane.material = mat;
1734
- var engine = this._scene.getEngine();
1735
- plane.scaling.x = engine.getRenderingCanvas().width / engine.getRenderingCanvas().height;
1736
- plane.position.z = 0.011;
1737
- plane.isPickable = false;
1738
- plane.parent = scene.activeCamera;
1827
+ this._plane = MeshBuilder.CreatePlane('overlayplane', {
1828
+ size: 0.0047
1829
+ }, scene);
1830
+ this._plane.setEnabled(false);
1831
+ this._plane.material = mat;
1832
+ this._plane.visibility = 0;
1833
+ this._plane.scaling.x = engine.getRenderingCanvas().width / engine.getRenderingCanvas().height;
1834
+ this._plane.position.z = 0.011;
1835
+ this._plane.isPickable = false;
1836
+ this._plane.parent = scene.activeCamera;
1739
1837
  this._selectedHl = new HighlightLayer('hl', this._scene);
1740
1838
  this._selectedHl.innerGlow = false;
1839
+ this._selectedHl.outerGlow = true;
1840
+ this._selectedHl.blurHorizontalSize = 1;
1841
+ this._selectedHl.blurVerticalSize = 1;
1842
+ this._selectedHl.mainTexture.samples = 4;
1741
1843
  this._enableSSAO = enableSSAO;
1742
- this._utilStore = utilStore;
1844
+ this._utilStore = _utilStore;
1743
1845
  this._gui = AdvancedDynamicTexture.CreateFullscreenUI('UI');
1744
1846
  this._gui.layer.layerMask = 0x0fffffff;
1745
1847
  this._gui.renderScale = 1;
@@ -1756,10 +1858,11 @@ var UIStore = /*#__PURE__*/function () {
1756
1858
  }
1757
1859
  this._isStaticBg = _overlayImage === null || _overlayImage === void 0 ? void 0 : _overlayImage.isStaticBg;
1758
1860
  if (_overlayImage) {
1759
- this._diffuseTexture.updateURL(_overlayImage.base64);
1760
- this._plane.visibility = 1;
1861
+ this._isUnityComb = true;
1862
+ this.fadeInOverlayImage(true);
1761
1863
  this._enableSSAO(false);
1762
1864
  }
1865
+ this._runRenderLoopForTime = runRenderLoopForTime;
1763
1866
  }
1764
1867
  return _createClass(UIStore, [{
1765
1868
  key: "isStaticBg",
@@ -1769,7 +1872,7 @@ var UIStore = /*#__PURE__*/function () {
1769
1872
  }, {
1770
1873
  key: "unityCombActive",
1771
1874
  get: function get() {
1772
- return !!this._plane;
1875
+ return !!this._isUnityComb;
1773
1876
  }
1774
1877
  }, {
1775
1878
  key: "initSelectionHandler",
@@ -1793,19 +1896,42 @@ var UIStore = /*#__PURE__*/function () {
1793
1896
  };
1794
1897
  }
1795
1898
  }, {
1796
- key: "highlightObservable",
1797
- value: function highlightObservable(meshes) {
1899
+ key: "fadeOutOverlayImage",
1900
+ value: function fadeOutOverlayImage() {
1901
+ this._plane.visibility = 0;
1902
+ var root = this._scene.getTransformNodeByName('Root');
1903
+ if (root) root.getChildMeshes().forEach(function (m) {
1904
+ m.visibility = 1;
1905
+ if (!m.material) return;
1906
+ m.material.depthFunction = Constants.LESS;
1907
+ m.material.disableColorWrite = false;
1908
+ });
1909
+ }
1910
+ }, {
1911
+ key: "fadeInOverlayImage",
1912
+ value: function fadeInOverlayImage(shorter) {
1798
1913
  var _this3 = this;
1799
- meshes.forEach(function (m) {
1800
- if (_this3._plane.visibility == 1) {
1801
- m.material.depthFunction = Constants.ALWAYS;
1802
- m.material.disableColorWrite = true;
1914
+ var startTime = performance.now();
1915
+ var _animate = function animate() {
1916
+ var elapsedTime = performance.now() - startTime;
1917
+ var progress = Math.min(elapsedTime / (shorter ? 50 : 500), 1); // Normalize progress (0 to 1)
1918
+
1919
+ _this3._plane.visibility = progress;
1920
+ if (progress < 1) {
1921
+ requestAnimationFrame(_animate);
1803
1922
  } else {
1804
- m.visibility = 1;
1805
- m.material.depthFunction = Constants.LESS;
1806
- m.material.disableColorWrite = false;
1923
+ //animation finished
1924
+ var root = _this3._scene.getTransformNodeByName('Root');
1925
+ if (root) root.getChildMeshes().forEach(function (m) {
1926
+ m.visibility = 1;
1927
+ if (!m.material) return;
1928
+ m.material.depthFunction = Constants.ALWAYS;
1929
+ m.material.disableColorWrite = true;
1930
+ });
1931
+ _this3._plane.setEnabled(true);
1807
1932
  }
1808
- });
1933
+ };
1934
+ _animate();
1809
1935
  }
1810
1936
  }, {
1811
1937
  key: "createGridGui",
@@ -1869,9 +1995,7 @@ var UIStore = /*#__PURE__*/function () {
1869
1995
  }, {
1870
1996
  key: "createPosNr",
1871
1997
  value: function createPosNr(elementInfo, element, isBoxPlanner) {
1872
- var _this5 = this,
1873
- _this$_utilStore$view,
1874
- _this$_utilStore$view2;
1998
+ var _this5 = this;
1875
1999
  var guiElem = {
1876
2000
  elementId: elementInfo.elementId,
1877
2001
  elements: []
@@ -1916,16 +2040,25 @@ var UIStore = /*#__PURE__*/function () {
1916
2040
  guiElemRightBack.position = _pos;
1917
2041
  }
1918
2042
  var childMeshes = element.getChildMeshes();
1919
- this._scene.onBeforeRenderObservable.add(function () {
1920
- return _this5.highlightObservable(childMeshes);
2043
+ childMeshes.forEach(function (m) {
2044
+ if (_this5._plane.visibility == 1) {
2045
+ m.material.depthFunction = Constants.ALWAYS;
2046
+ m.material.disableColorWrite = true;
2047
+ } else {
2048
+ m.visibility = 1;
2049
+ m.material.depthFunction = Constants.LESS;
2050
+ m.material.disableColorWrite = false;
2051
+ }
1921
2052
  });
1922
2053
  if (!elementInfo.active) {
1923
2054
  childMeshes.forEach(function (m) {
1924
- m.visibility = 0;
2055
+ if (_this5._plane.visibility == 1) m.visibility = 0;
1925
2056
  if (!m.actionManager) m.actionManager = new ActionManager(_this5._scene);
1926
2057
  m.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnPointerOverTrigger, function (ev) {
2058
+ var _this5$_runRenderLoop;
2059
+ (_this5$_runRenderLoop = _this5._runRenderLoopForTime) === null || _this5$_runRenderLoop === void 0 || _this5$_runRenderLoop.call(_this5, 1000);
1927
2060
  _this5._selectedHl.removeAllMeshes();
1928
- _this5._selectedMeshes.forEach(function (_m) {
2061
+ if (_this5._plane.visibility == 1) _this5._selectedMeshes.forEach(function (_m) {
1929
2062
  return _m.visibility = 0;
1930
2063
  });
1931
2064
  element.getChildMeshes().forEach(function (_m) {
@@ -1934,8 +2067,10 @@ var UIStore = /*#__PURE__*/function () {
1934
2067
  });
1935
2068
  }));
1936
2069
  m.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnPointerOutTrigger, function (ev) {
2070
+ var _this5$_runRenderLoop2;
2071
+ (_this5$_runRenderLoop2 = _this5._runRenderLoopForTime) === null || _this5$_runRenderLoop2 === void 0 || _this5$_runRenderLoop2.call(_this5, 1000);
1937
2072
  _this5._selectedHl.removeAllMeshes();
1938
- element.getChildMeshes().forEach(function (_m) {
2073
+ if (_this5._plane.visibility == 1) element.getChildMeshes().forEach(function (_m) {
1939
2074
  return _m.visibility = 0;
1940
2075
  });
1941
2076
  _this5._selectedMeshes.forEach(function (_m) {
@@ -1944,15 +2079,13 @@ var UIStore = /*#__PURE__*/function () {
1944
2079
  });
1945
2080
  }));
1946
2081
  });
1947
- }
1948
- if (elementInfo.active && (((_this$_utilStore$view = this._utilStore.viewHandler) === null || _this$_utilStore$view === void 0 ? void 0 : _this$_utilStore$view.tabGroupState.curTabGroup.type) == 'PLANNER' || ((_this$_utilStore$view2 = this._utilStore.viewHandler) === null || _this$_utilStore$view2 === void 0 ? void 0 : _this$_utilStore$view2.tabGroupState.curTabGroup.type) == 'OPTION')) {
2082
+ } else {
1949
2083
  var _guiElemRightBack;
1950
2084
  this._selectedMeshes = childMeshes;
1951
2085
  this._selectedMeshes.forEach(function (_m) {
1952
2086
  _m.visibility = 1;
1953
2087
  _this5._selectedHl.addMesh(_m, Color3.Black());
1954
2088
  });
1955
- this._selectedHl.addExcludedMesh(this._plane);
1956
2089
  var dtarget = this._uiConfig.templateConfig == 'standard' ? new Ellipse('deleteEllipse') : new Rectangle('deleteEllipse');
1957
2090
  guiElem.elements.push(dtarget);
1958
2091
  dtarget.width = this._uiConfig.templateConfig == 'standard' ? '40px' : '35px';
@@ -1972,6 +2105,7 @@ var UIStore = /*#__PURE__*/function () {
1972
2105
  this._gui.addControl(dtarget);
1973
2106
  dtarget.linkWithMesh((_guiElemRightBack = guiElemRightBack) !== null && _guiElemRightBack !== void 0 ? _guiElemRightBack : guiElemLeftBack);
1974
2107
  }
2108
+ this._selectedHl.addExcludedMesh(this._plane);
1975
2109
  this._guiElements.push(guiElem);
1976
2110
  }
1977
2111
  }, {
@@ -2106,6 +2240,16 @@ var UIStore = /*#__PURE__*/function () {
2106
2240
  });
2107
2241
  });
2108
2242
  }
2243
+ }, {
2244
+ key: "deactivateHighlightLayer",
2245
+ value: function deactivateHighlightLayer() {
2246
+ this._selectedHl.outerGlow = false;
2247
+ }
2248
+ }, {
2249
+ key: "activateHighlightLayer",
2250
+ value: function activateHighlightLayer() {
2251
+ this._selectedHl.outerGlow = true;
2252
+ }
2109
2253
  }, {
2110
2254
  key: "clearGui",
2111
2255
  value: function clearGui() {
@@ -2118,22 +2262,23 @@ var UIStore = /*#__PURE__*/function () {
2118
2262
  this._scene.transformNodes.forEach(function (tN) {
2119
2263
  return tN.name.startsWith('guiElem_') && tN.dispose();
2120
2264
  });
2121
- this._selectedHl.removeAllMeshes();
2122
2265
  }
2123
2266
  }, {
2124
2267
  key: "onMove",
2125
2268
  value: function onMove() {
2126
- if (!this._plane) return;
2127
- this._plane.visibility = 0;
2128
- this._enableSSAO(true);
2129
- this._utilStore.updateCam = false;
2269
+ if (!this._isUnityComb) return;
2270
+ if (this._plane.visibility != 0) {
2271
+ this._enableSSAO(true);
2272
+ this.fadeOutOverlayImage();
2273
+ }
2274
+ this._utilStore.updateCam = false; // need to always update since can move again while image is waiting to be updated
2130
2275
  }
2131
2276
  }, {
2132
2277
  key: "requestNewOverlayImage",
2133
2278
  value: function requestNewOverlayImage(viewpoint, focusedElement, targetCameraPosition) {
2134
2279
  var _this9 = this;
2135
2280
  //this._overlayImage exists only when unity combi is enabled
2136
- if (!this._plane) return;
2281
+ if (!this._isUnityComb) return;
2137
2282
  var elementId = undefined;
2138
2283
  var setId = undefined;
2139
2284
  var ob = this._scene.getTransformNodeByName(focusedElement.name);
@@ -2148,9 +2293,8 @@ var UIStore = /*#__PURE__*/function () {
2148
2293
  if (!this._latestViewpoint || this._latestViewpoint.isOutdated || Math.abs(this._latestViewpoint.pos.x - viewpoint.pos.x) > 0.05 || Math.abs(this._latestViewpoint.pos.y - viewpoint.pos.y) > 0.05 || Math.abs(this._latestViewpoint.pos.z - viewpoint.pos.z) > 0.05 || Math.abs(this._latestViewpoint.rot.x - viewpoint.rot.x) > 0.05 || Math.abs(this._latestViewpoint.rot.y - viewpoint.rot.y) > 0.05 || Math.abs(this._latestViewpoint.rot.z - viewpoint.rot.z) > 0.05) {
2149
2294
  this._timeoutId = setTimeout(function () {
2150
2295
  var _this9$_requestNewOve;
2151
- _this9._utilStore.addOutstandingImage();
2152
2296
  _this9._latestViewpoint = viewpoint;
2153
- console.log('requestNewOverlay Image');
2297
+ _this9._utilStore.addOutstandingImageCount();
2154
2298
  (_this9$_requestNewOve = _this9._requestNewOverlayImage) === null || _this9$_requestNewOve === void 0 || _this9$_requestNewOve.call(_this9, viewpoint, {
2155
2299
  adjustZoomInUnity: false,
2156
2300
  onlyAdjustZoomBBChanged: false,
@@ -2161,7 +2305,7 @@ var UIStore = /*#__PURE__*/function () {
2161
2305
  _this9._utilStore.updateCam = true;
2162
2306
  }, 200);
2163
2307
  } else {
2164
- this._plane.visibility = 1;
2308
+ this.fadeInOverlayImage(false);
2165
2309
  }
2166
2310
  }
2167
2311
  }]);
@@ -2223,7 +2367,7 @@ var UtilStore = /*#__PURE__*/function () {
2223
2367
  }, {
2224
2368
  key: "updateCam",
2225
2369
  get: function get() {
2226
- return this._updateCam && this._outstandingImageCount == 0;
2370
+ return this._updateCam;
2227
2371
  },
2228
2372
  set: function set(doUpdateCam) {
2229
2373
  this._updateCam = doUpdateCam;
@@ -2237,15 +2381,21 @@ var UtilStore = /*#__PURE__*/function () {
2237
2381
  key: "onElementDeleted",
2238
2382
  value: function onElementDeleted(setId, elementId) {
2239
2383
  var _this$viewHandler;
2240
- this.addOutstandingImage();
2384
+ this.addOutstandingImageCount();
2241
2385
  (_this$viewHandler = this.viewHandler) === null || _this$viewHandler === void 0 || _this$viewHandler.viewPlannerHandler.onElementDeleted(setId, elementId);
2242
2386
  this._updateCam = true;
2243
2387
  }
2244
2388
  }, {
2245
- key: "addOutstandingImage",
2246
- value: function addOutstandingImage() {
2389
+ key: "addOutstandingImageCount",
2390
+ value: function addOutstandingImageCount() {
2247
2391
  this._outstandingImageCount++;
2248
2392
  }
2393
+ }, {
2394
+ key: "subtractOutstandingImageCount",
2395
+ value: function subtractOutstandingImageCount() {
2396
+ if (this._outstandingImageCount == 0) return;
2397
+ this._outstandingImageCount--;
2398
+ }
2249
2399
  }, {
2250
2400
  key: "disableElementRows",
2251
2401
  value: function disableElementRows(element, cache) {
@@ -2389,7 +2539,7 @@ var unregisterContext = function unregisterContext() {
2389
2539
  var registerContext = function registerContext(scene, hqRenderScript, apiConfig, jwt, viewHandler, onMissingGeo, requestNewOverlayImage, overlayImage, uiConfig, updateCameraInformation) {
2390
2540
  var utilStore = new UtilStore(false, viewHandler);
2391
2541
  var sceneStore = new SceneStore(scene, hqRenderScript, utilStore, apiConfig, jwt, onMissingGeo, updateCameraInformation);
2392
- var uiStore = new UIStore(scene, sceneStore.enableSSAO.bind(sceneStore), utilStore, uiConfig, requestNewOverlayImage, overlayImage, viewHandler === null || viewHandler === void 0 ? void 0 : viewHandler.viewPlannerHandler.onElementCopy);
2542
+ var uiStore = new UIStore(scene, sceneStore.enableSSAO.bind(sceneStore), utilStore, uiConfig, requestNewOverlayImage, overlayImage, viewHandler === null || viewHandler === void 0 ? void 0 : viewHandler.viewPlannerHandler.onElementCopy, sceneStore.runRenderLoopForTime.bind(sceneStore));
2393
2543
  return _context = {
2394
2544
  utilStore: utilStore,
2395
2545
  sceneStore: sceneStore,
@@ -2551,13 +2701,14 @@ var customMat = /*#__PURE__*/function () {
2551
2701
  var setDataRow,
2552
2702
  sceneStore,
2553
2703
  url,
2554
- mat,
2704
+ _mat,
2555
2705
  res,
2556
2706
  parsedMat,
2557
2707
  baseTexture,
2558
2708
  mRTexture,
2559
2709
  nTexture,
2560
2710
  found,
2711
+ mat,
2561
2712
  _args = arguments;
2562
2713
  return _regeneratorRuntime.wrap(function _callee$(_context) {
2563
2714
  while (1) switch (_context.prev = _context.next) {
@@ -2579,9 +2730,9 @@ var customMat = /*#__PURE__*/function () {
2579
2730
  }
2580
2731
  });
2581
2732
  case 11:
2582
- mat = _context.sent;
2733
+ _mat = _context.sent;
2583
2734
  _context.next = 14;
2584
- return mat.json();
2735
+ return _mat.json();
2585
2736
  case 14:
2586
2737
  res = _context.sent;
2587
2738
  parsedMat = PBRMetallicRoughnessMaterial.Parse(res, _customMat.scene, '');
@@ -2602,12 +2753,14 @@ var customMat = /*#__PURE__*/function () {
2602
2753
  path: _customMat.blob,
2603
2754
  sizeMb: 0
2604
2755
  });
2756
+ parsedMat.depthFunction = Constants.ALWAYS;
2757
+ parsedMat.disableColorWrite = true;
2605
2758
  return _context.abrupt("return", {
2606
2759
  mat: parsedMat,
2607
2760
  found: true
2608
2761
  });
2609
- case 29:
2610
- _context.prev = 29;
2762
+ case 31:
2763
+ _context.prev = 31;
2611
2764
  _context.t0 = _context["catch"](8);
2612
2765
  if (setDataRow) useUtilStoreContext().setAnalyzeDataRow({
2613
2766
  type: 'MAT',
@@ -2617,16 +2770,19 @@ var customMat = /*#__PURE__*/function () {
2617
2770
  path: _customMat.blob,
2618
2771
  sizeMb: 0
2619
2772
  });
2620
- case 32:
2773
+ case 34:
2774
+ mat = new PBRMetallicRoughnessMaterial(_customMat.name, _customMat.scene);
2775
+ mat.depthFunction = Constants.ALWAYS;
2776
+ mat.disableColorWrite = true;
2621
2777
  return _context.abrupt("return", {
2622
- mat: new PBRMetallicRoughnessMaterial(_customMat.name, _customMat.scene),
2778
+ mat: mat,
2623
2779
  found: true
2624
2780
  });
2625
- case 33:
2781
+ case 38:
2626
2782
  case "end":
2627
2783
  return _context.stop();
2628
2784
  }
2629
- }, _callee, null, [[8, 29]]);
2785
+ }, _callee, null, [[8, 31]]);
2630
2786
  }));
2631
2787
  return function customMat(_x) {
2632
2788
  return _ref.apply(this, arguments);
@@ -2708,7 +2864,7 @@ function _findAssets() {
2708
2864
  }));
2709
2865
  return _importGeo.apply(this, arguments);
2710
2866
  };
2711
- importGeo = function _importGeo2(_x13, _x14) {
2867
+ importGeo = function _importGeo2(_x12, _x13) {
2712
2868
  return _importGeo.apply(this, arguments);
2713
2869
  };
2714
2870
  _unifyAndSetStdMats = function _unifyAndSetStdMats3() {
@@ -2734,7 +2890,7 @@ function _findAssets() {
2734
2890
  case 8:
2735
2891
  name = 'std_' + name;
2736
2892
  _context.next = 11;
2737
- return createOrGetMaterial(name, path, splittedName[0], true, sceneStore.scene, undefined, true, true);
2893
+ return createOrGetMaterial(name, path, splittedName[0], true, true, undefined, true);
2738
2894
  case 11:
2739
2895
  mat = _context.sent;
2740
2896
  if (!mat.found) utilStore.setAnalyzeDataRow({
@@ -2796,7 +2952,7 @@ function _findAssets() {
2796
2952
  }));
2797
2953
  return _unifyAndSetStdMats.apply(this, arguments);
2798
2954
  };
2799
- unifyAndSetStdMats = function _unifyAndSetStdMats2(_x11, _x12) {
2955
+ unifyAndSetStdMats = function _unifyAndSetStdMats2(_x10, _x11) {
2800
2956
  return _unifyAndSetStdMats.apply(this, arguments);
2801
2957
  };
2802
2958
  sceneStore = useSceneStoreContext();
@@ -2912,7 +3068,7 @@ function _findAssets() {
2912
3068
  return _context4.abrupt("return", 1);
2913
3069
  case 5:
2914
3070
  _context4.next = 7;
2915
- return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, sceneStore.scene, {
3071
+ return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, false, {
2916
3072
  tileU: mat.tileU,
2917
3073
  tileV: mat.tileV
2918
3074
  }, true);
@@ -2921,7 +3077,8 @@ function _findAssets() {
2921
3077
  _context4.t1 = [];
2922
3078
  _context4.t2 = mat.name;
2923
3079
  nwCache.material = {
2924
- material: _context4.t0,
3080
+ mat: _context4.t0,
3081
+ isStdMat: false,
2925
3082
  onElements: _context4.t1,
2926
3083
  name: _context4.t2
2927
3084
  };
@@ -2931,7 +3088,7 @@ function _findAssets() {
2931
3088
  _context4.t3 = newCache;
2932
3089
  _context4.t4 = mat.id;
2933
3090
  _context4.next = 17;
2934
- return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, sceneStore.scene, {
3091
+ return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, false, {
2935
3092
  tileU: mat.tileU,
2936
3093
  tileV: mat.tileV
2937
3094
  }, true);
@@ -2940,9 +3097,10 @@ function _findAssets() {
2940
3097
  _context4.t6 = [];
2941
3098
  _context4.t7 = mat.name;
2942
3099
  _context4.t8 = {
2943
- material: _context4.t5,
3100
+ mat: _context4.t5,
2944
3101
  onElements: _context4.t6,
2945
- name: _context4.t7
3102
+ name: _context4.t7,
3103
+ isStdMat: false
2946
3104
  };
2947
3105
  _context4.t9 = {
2948
3106
  id: _context4.t4,
@@ -2995,72 +3153,79 @@ function _findAssets() {
2995
3153
  }));
2996
3154
  return _findAssets.apply(this, arguments);
2997
3155
  }
2998
- function createOrGetMaterial(_x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {
3156
+ function createOrGetMaterial(_x3, _x4, _x5, _x6, _x7, _x8, _x9) {
2999
3157
  return _createOrGetMaterial.apply(this, arguments);
3000
3158
  }
3001
3159
  function _createOrGetMaterial() {
3002
- _createOrGetMaterial = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(name, blob, fileName, checkExisting, scene, tiling, setDataRow, isStdMat) {
3003
- var _iterator5, _step5, _mat, mat, material;
3160
+ _createOrGetMaterial = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(name, blob, fileName, checkExisting, isStdMat, tiling, setDataRow) {
3161
+ var sceneStore, _iterator5, _step5, cachedMaterial, mat, material;
3004
3162
  return _regeneratorRuntime.wrap(function _callee4$(_context6) {
3005
3163
  while (1) switch (_context6.prev = _context6.next) {
3006
3164
  case 0:
3165
+ sceneStore = useSceneStoreContext();
3007
3166
  if (!checkExisting) {
3008
- _context6.next = 18;
3167
+ _context6.next = 20;
3009
3168
  break;
3010
3169
  }
3011
- _iterator5 = _createForOfIteratorHelper$3(scene.materials);
3012
- _context6.prev = 2;
3170
+ _iterator5 = _createForOfIteratorHelper$3(sceneStore.materialCache);
3171
+ _context6.prev = 3;
3013
3172
  _iterator5.s();
3014
- case 4:
3173
+ case 5:
3015
3174
  if ((_step5 = _iterator5.n()).done) {
3016
- _context6.next = 10;
3175
+ _context6.next = 12;
3017
3176
  break;
3018
3177
  }
3019
- _mat = _step5.value;
3020
- if (!(name === _mat.name)) {
3021
- _context6.next = 8;
3178
+ cachedMaterial = _step5.value;
3179
+ if (!(name === cachedMaterial.mat.name)) {
3180
+ _context6.next = 10;
3022
3181
  break;
3023
3182
  }
3183
+ cachedMaterial.lastUsage = sceneStore.modelIteration;
3024
3184
  return _context6.abrupt("return", {
3025
- mat: _mat,
3185
+ mat: cachedMaterial.mat,
3026
3186
  found: true
3027
3187
  });
3028
- case 8:
3029
- _context6.next = 4;
3030
- break;
3031
3188
  case 10:
3032
- _context6.next = 15;
3189
+ _context6.next = 5;
3033
3190
  break;
3034
3191
  case 12:
3035
- _context6.prev = 12;
3036
- _context6.t0 = _context6["catch"](2);
3192
+ _context6.next = 17;
3193
+ break;
3194
+ case 14:
3195
+ _context6.prev = 14;
3196
+ _context6.t0 = _context6["catch"](3);
3037
3197
  _iterator5.e(_context6.t0);
3038
- case 15:
3039
- _context6.prev = 15;
3198
+ case 17:
3199
+ _context6.prev = 17;
3040
3200
  _iterator5.f();
3041
- return _context6.finish(15);
3042
- case 18:
3201
+ return _context6.finish(17);
3202
+ case 20:
3043
3203
  mat = {
3044
3204
  isStdMat: !!isStdMat,
3045
3205
  blob: blob,
3046
3206
  name: name,
3047
3207
  fileName: fileName,
3048
- scene: scene,
3208
+ scene: sceneStore.scene,
3049
3209
  tiling: tiling
3050
3210
  };
3051
- _context6.next = 21;
3211
+ _context6.next = 23;
3052
3212
  return customMat(mat, setDataRow);
3053
- case 21:
3213
+ case 23:
3054
3214
  material = _context6.sent;
3215
+ sceneStore.addMaterialToCache({
3216
+ mat: material.mat,
3217
+ isStdMat: isStdMat,
3218
+ lastUsage: sceneStore.modelIteration
3219
+ });
3055
3220
  return _context6.abrupt("return", {
3056
3221
  mat: material.mat,
3057
3222
  found: material.found
3058
3223
  });
3059
- case 23:
3224
+ case 26:
3060
3225
  case "end":
3061
3226
  return _context6.stop();
3062
3227
  }
3063
- }, _callee4, null, [[2, 12, 15, 18]]);
3228
+ }, _callee4, null, [[3, 14, 17, 20]]);
3064
3229
  }));
3065
3230
  return _createOrGetMaterial.apply(this, arguments);
3066
3231
  }
@@ -3260,7 +3425,7 @@ function findMaterials(cache) {
3260
3425
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
3261
3426
  var onNode = _step3.value;
3262
3427
  if (child.name.startsWith(onNode) || child.name.startsWith('geo_') && child.name.includes(onNode)) {
3263
- setMaterials(child, mat.material);
3428
+ setMaterials(child, mat.mat);
3264
3429
  }
3265
3430
  }
3266
3431
  } catch (err) {
@@ -3332,7 +3497,7 @@ function shadow() {
3332
3497
  var lightf = new DirectionalLight('dirf', new Vector3(0, -0.436, -0.9), scene);
3333
3498
  var lightr = new DirectionalLight('dirr', new Vector3(0, -1, 0.3), scene);
3334
3499
  var lightl = new DirectionalLight('dirb', new Vector3(0.2, -1, 0.2), scene);
3335
- lightl.intensity = 1;
3500
+ lightl.intensity = 2;
3336
3501
  lightf.intensity = 2.2;
3337
3502
  light.intensity = 1;
3338
3503
  lightr.intensity = 1;
@@ -3352,6 +3517,8 @@ function shadow() {
3352
3517
  z: 0
3353
3518
  });
3354
3519
  var std_mat = new PBRMetallicRoughnessMaterial('std_mat', scene);
3520
+ std_mat.depthFunction = Constants.ALWAYS;
3521
+ std_mat.disableColorWrite = true;
3355
3522
  std_mat.metallic = 0;
3356
3523
  scene.defaultMaterial = std_mat;
3357
3524
  var mat = new PBRMetallicRoughnessMaterial('white', scene);
@@ -3375,17 +3542,17 @@ var parser = /*#__PURE__*/function () {
3375
3542
  case 0:
3376
3543
  sceneStore = useSceneStoreContext();
3377
3544
  hasRendered = sceneStore.hasRendered, hqRenderScript = sceneStore.hqRenderScript, scene = sceneStore.scene, cache = sceneStore.cache, changedElements = sceneStore.changedElements;
3378
- utilStore = useUtilStoreContext();
3379
- useUIStoreContext(); //disable elementrows from old cache
3545
+ utilStore = useUtilStoreContext(); //disable elementrows from old cache
3380
3546
  changedElements === null || changedElements === void 0 || (_changedElements$upda = changedElements.updatedElements) === null || _changedElements$upda === void 0 || _changedElements$upda.forEach(function (el) {
3381
3547
  return utilStore.disableElementRows(el.name, cache);
3382
3548
  });
3383
- _context.next = 7;
3549
+ _context.next = 6;
3384
3550
  return findAssets(hqRenderScript.assets, cache);
3385
- case 7:
3551
+ case 6:
3386
3552
  _yield$findAssets = _context.sent;
3387
3553
  cacheGroup = _yield$findAssets.cacheGroup;
3388
3554
  newCache = _yield$findAssets.newCache;
3555
+ sceneStore.updateModelIteration();
3389
3556
  if (changedElements && changedElements.deletedElements && changedElements.deletedElements.length > 0) {
3390
3557
  changedElements.deletedElements.forEach(function (deletedElement) {
3391
3558
  var _scene$getTransformNo;
@@ -3419,7 +3586,8 @@ var parser = /*#__PURE__*/function () {
3419
3586
  }
3420
3587
  utilStore.setRTVAnalyzeData();
3421
3588
  deacCache(cacheGroup);
3422
- case 14:
3589
+ sceneStore.checkMaterialCache();
3590
+ case 15:
3423
3591
  case "end":
3424
3592
  return _context.stop();
3425
3593
  }
@@ -3432,7 +3600,7 @@ var parser = /*#__PURE__*/function () {
3432
3600
 
3433
3601
  var LOG = getLogger('ARViewer', 'RealTimeRenderData');
3434
3602
  function useRealTimeRenderData (_ref) {
3435
- var _sceneStore3;
3603
+ var _sceneStore2;
3436
3604
  var jwt = _ref.jwt,
3437
3605
  actions = _ref.actions,
3438
3606
  apiConfig = _ref.apiConfig,
@@ -3450,7 +3618,7 @@ function useRealTimeRenderData (_ref) {
3450
3618
  renderInBackground = _ref.renderInBackground;
3451
3619
  var gameCanvas = useRef(null);
3452
3620
  var sceneStore = useSceneStoreContext();
3453
- var utilStore = useUtilStoreContext();
3621
+ useUtilStoreContext();
3454
3622
  var gridStore = useGridStoreContext();
3455
3623
  var uiStore = useUIStoreContext();
3456
3624
  DracoCompression.Configuration = {
@@ -3514,15 +3682,16 @@ function useRealTimeRenderData (_ref) {
3514
3682
  eventId: 'BUILD_SCENE'
3515
3683
  });
3516
3684
  _context2.prev = 15;
3517
- _context2.next = 18;
3685
+ uiStore.deactivateHighlightLayer();
3686
+ _context2.next = 19;
3518
3687
  return parser();
3519
- case 18:
3688
+ case 19:
3520
3689
  uiStore.initGui(callbacks.onElementSelected, sceneStore.elements);
3521
3690
  if (freePlacesOnGrids || plannedPlacesOnGrids) gridStore.getGrids(freePlacesOnGrids, plannedPlacesOnGrids);
3522
- _context2.next = 27;
3691
+ _context2.next = 28;
3523
3692
  break;
3524
- case 22:
3525
- _context2.prev = 22;
3693
+ case 23:
3694
+ _context2.prev = 23;
3526
3695
  _context2.t0 = _context2["catch"](15);
3527
3696
  LOG.errorTransaction('BUILD_SCENE', 'RTS_0001', _context2.t0.message);
3528
3697
  LOG.error(new DivaError('Error building scene', {
@@ -3530,26 +3699,26 @@ function useRealTimeRenderData (_ref) {
3530
3699
  code: 'RTS_0001'
3531
3700
  }));
3532
3701
  sceneStore.isInitializing = false;
3533
- case 27:
3702
+ case 28:
3534
3703
  if (callbacks.setGlb) {
3535
3704
  sceneStore.exportScene().then(function (res) {
3536
3705
  var _callbacks$setGlb;
3537
- if (res) (_callbacks$setGlb = callbacks.setGlb) === null || _callbacks$setGlb === void 0 || _callbacks$setGlb.call(callbacks, URL.createObjectURL(res.glTFFiles['fileName.glb']));
3706
+ if (res) (_callbacks$setGlb = callbacks.setGlb) === null || _callbacks$setGlb === void 0 || _callbacks$setGlb.call(callbacks, URL.createObjectURL(res.glTFFiles['fileName.glb']), res.glTFFiles['fileName.glb']);
3538
3707
  });
3539
3708
  } else {
3540
3709
  LOG.debug('callbacks.setGlb is undefined');
3541
3710
  }
3542
3711
  if (!sceneStore.hasRendered) {
3543
- sceneStore.scene.getEngine().runRenderLoop(renderLoop);
3712
+ sceneStore.runRenderLoopIndefinitely();
3544
3713
  sceneStore.hasRendered = true;
3545
3714
  }
3546
3715
  sceneStore.scene.onAfterRenderObservable.add(onFirstFrame);
3547
3716
  LOG.successTransaction('BUILD_SCENE');
3548
- case 31:
3717
+ case 32:
3549
3718
  case "end":
3550
3719
  return _context2.stop();
3551
3720
  }
3552
- }, _callee2, null, [[15, 22]]);
3721
+ }, _callee2, null, [[15, 23]]);
3553
3722
  }));
3554
3723
  return _onSceneReady.apply(this, arguments);
3555
3724
  }
@@ -3560,12 +3729,9 @@ function useRealTimeRenderData (_ref) {
3560
3729
  if (!overlayImage) actions.toggleLoading('buildScene', false, false);
3561
3730
  (_callbacks$onInitiali2 = callbacks.onInitialized) === null || _callbacks$onInitiali2 === void 0 || _callbacks$onInitiali2.call(callbacks);
3562
3731
  (_sceneStore = sceneStore) === null || _sceneStore === void 0 || _sceneStore.optimizeScene();
3563
- }
3564
- function renderLoop() {
3565
- var _sceneStore$controlRe, _sceneStore2;
3566
- if (!gameCanvas.current) sceneStore.scene.getEngine().dispose();
3567
- (_sceneStore$controlRe = (_sceneStore2 = sceneStore).controlRenderLoop) === null || _sceneStore$controlRe === void 0 || _sceneStore$controlRe.call(_sceneStore2);
3568
- sceneStore.scene.render();
3732
+ setTimeout(function () {
3733
+ return uiStore.activateHighlightLayer();
3734
+ }, 500);
3569
3735
  }
3570
3736
 
3571
3737
  // trigger if gamecanvas did not update but renderjob
@@ -3590,37 +3756,41 @@ function useRealTimeRenderData (_ref) {
3590
3756
  while (1) switch (_context.prev = _context.next) {
3591
3757
  case 0:
3592
3758
  if (!gameCanvas.current) {
3593
- _context.next = 20;
3759
+ _context.next = 23;
3594
3760
  break;
3595
3761
  }
3596
- engine = new Engine(gameCanvas.current, true, {
3762
+ _context.next = 3;
3763
+ return EngineFactory.CreateAsync(gameCanvas.current, {
3597
3764
  antialias: true,
3598
3765
  stencil: true,
3599
3766
  audioEngine: false
3600
- }, true);
3767
+ });
3768
+ case 3:
3769
+ engine = _context.sent;
3601
3770
  engine.renderEvenInBackground = renderInBackground;
3602
3771
  engine.disablePerformanceMonitorInBackground = true;
3603
3772
  bScene = new Scene(engine, undefined);
3773
+ bScene.clearColor = new Color4$1(255, 255, 255, 255);
3604
3774
  context = registerContext(bScene, renderjob, apiConfig, jwt, viewHandler, callbacks.onMissingGeo, callbacks.requestNewOverlayImage, overlayImage, uiConfig, callbacks.updateCameraInformation);
3605
3775
  sceneStore = context.sceneStore;
3606
- utilStore = context.utilStore;
3776
+ context.utilStore;
3607
3777
  gridStore = context.gridStore;
3608
3778
  uiStore = context.uiStore;
3609
3779
  scene = bScene;
3610
3780
  if (!bScene.isReady()) {
3611
- _context.next = 16;
3781
+ _context.next = 19;
3612
3782
  break;
3613
3783
  }
3614
- _context.next = 14;
3615
- return onSceneReady();
3616
- case 14:
3617
3784
  _context.next = 17;
3785
+ return onSceneReady();
3786
+ case 17:
3787
+ _context.next = 20;
3618
3788
  break;
3619
- case 16:
3789
+ case 19:
3620
3790
  bScene.executeWhenReady(function () {
3621
3791
  return onSceneReady();
3622
3792
  });
3623
- case 17:
3793
+ case 20:
3624
3794
  resize = function resize() {
3625
3795
  if (inBackground || !scene || !scene.getEngine()) return;
3626
3796
  if (sceneStore.hasPlanned) sceneStore.doRenderControlLoop = true;
@@ -3640,9 +3810,9 @@ function useRealTimeRenderData (_ref) {
3640
3810
  window.removeEventListener('resize', resize);
3641
3811
  }
3642
3812
  });
3643
- case 20:
3813
+ case 23:
3644
3814
  return _context.abrupt("return");
3645
- case 21:
3815
+ case 24:
3646
3816
  case "end":
3647
3817
  return _context.stop();
3648
3818
  }
@@ -3654,14 +3824,11 @@ function useRealTimeRenderData (_ref) {
3654
3824
  asyncUseEffect();
3655
3825
  }, []);
3656
3826
  useEffect(function () {
3657
- if (overlayImage && uiStore) uiStore.updateOverlayImage(overlayImage);
3658
- // update cam pos for start viewpoints (hqr) could be the same, since it doesn't change when rotating
3659
- }, [overlayImage]);
3660
- useEffect(function () {
3661
- if (utilStore && viewpoint) {
3662
- updateCam(viewpoint, sceneStore.scene);
3827
+ if (overlayImage && uiStore) {
3828
+ uiStore.updateOverlayImage(overlayImage);
3829
+ if (viewpoint) updateCam(viewpoint, sceneStore.scene);
3663
3830
  }
3664
- }, [viewpoint]);
3831
+ }, [overlayImage]);
3665
3832
  useEffect(function () {
3666
3833
  if (sceneStore && elementsInfo) {
3667
3834
  var activeElement = elementsInfo.find(function (e) {
@@ -3671,13 +3838,13 @@ function useRealTimeRenderData (_ref) {
3671
3838
  uiStore.addElementsInfo(elementsInfo);
3672
3839
  uiStore.initGui(callbacks.onElementSelected, sceneStore.elements);
3673
3840
  }
3674
- }, [elementsInfo, (_sceneStore3 = sceneStore) === null || _sceneStore3 === void 0 ? void 0 : _sceneStore3.elements]);
3841
+ }, [elementsInfo, (_sceneStore2 = sceneStore) === null || _sceneStore2 === void 0 ? void 0 : _sceneStore2.elements]);
3675
3842
  useEffect(function () {
3676
3843
  if (!sceneStore) return;
3677
3844
  if (inBackground) {
3678
- sceneStore.scene.getEngine().stopRenderLoop();
3845
+ sceneStore.stopRenderLoop();
3679
3846
  } else if (sceneStore.hasRendered) {
3680
- sceneStore.scene.getEngine().runRenderLoop(renderLoop);
3847
+ sceneStore.runRenderLoopIndefinitely();
3681
3848
  }
3682
3849
  }, [inBackground]);
3683
3850
  return {
@@ -3735,7 +3902,8 @@ var RealTimeRenderer = /*#__PURE__*/memo(function (props) {
3735
3902
  height: '100%',
3736
3903
  width: '100%',
3737
3904
  margin: 'auto',
3738
- display: 'block'
3905
+ display: 'block',
3906
+ backgroundColor: 'white'
3739
3907
  },
3740
3908
  className: canvas
3741
3909
  })