@xeokit/xeokit-sdk 2.4.2-beta-21 → 2.4.2-beta-22

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 (90) hide show
  1. package/dist/xeokit-sdk.cjs.js +709 -588
  2. package/dist/xeokit-sdk.es.js +709 -588
  3. package/dist/xeokit-sdk.es5.js +203 -194
  4. package/dist/xeokit-sdk.min.cjs.js +4 -4
  5. package/dist/xeokit-sdk.min.es.js +4 -4
  6. package/dist/xeokit-sdk.min.es5.js +3 -3
  7. package/package.json +1 -1
  8. package/src/viewer/Viewer.js +7 -1
  9. package/src/viewer/scene/mesh/draw/DrawRenderer.js +18 -8
  10. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +8 -8
  11. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +19 -9
  12. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +3 -3
  13. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +19 -9
  14. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +3 -3
  15. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +18 -8
  16. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +3 -3
  17. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +18 -8
  18. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +3 -3
  19. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +18 -8
  20. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +3 -3
  21. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +1 -1
  22. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +3 -3
  23. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureColorRenderer.js +22 -17
  24. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureDepthRenderer.js +21 -20
  25. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesColorRenderer.js +6 -9
  26. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesRenderer.js +21 -18
  27. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureNormalsRenderer.js +22 -18
  28. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureOcclusionRenderer.js +22 -17
  29. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickDepthRenderer.js +22 -18
  30. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickMeshRenderer.js +58 -54
  31. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsFlatRenderer.js +21 -19
  32. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsRenderer.js +22 -18
  33. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSilhouetteRenderer.js +21 -18
  34. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthBufInitRenderer.js +21 -18
  35. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthRenderer.js +21 -18
  36. package/src/viewer/scene/model/vbo/VBOSceneModelRenderers.js +21 -16
  37. package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingColorRenderer.js +4 -4
  38. package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingSilhouetteRenderer.js +4 -4
  39. package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingColorRenderer.js +4 -4
  40. package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingSilhouetteRenderer.js +4 -4
  41. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingColorRenderer.js +4 -4
  42. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingOcclusionRenderer.js +4 -4
  43. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickDepthRenderer.js +4 -4
  44. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickMeshRenderer.js +4 -4
  45. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingShadowRenderer.js +4 -4
  46. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingSilhouetteRenderer.js +4 -4
  47. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingColorRenderer.js +4 -4
  48. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingDepthRenderer.js +4 -4
  49. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingOcclusionRenderer.js +4 -4
  50. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickDepthRenderer.js +4 -4
  51. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickMeshRenderer.js +4 -4
  52. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingShadowRenderer.js +4 -4
  53. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingSilhouetteRenderer.js +4 -4
  54. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthBufInitRenderer.js +4 -4
  55. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthRenderer.js +4 -4
  56. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthBufInitRenderer.js +4 -4
  57. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthRenderer.js +4 -4
  58. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorRenderer.js +4 -4
  59. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorTextureRenderer.js +4 -4
  60. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingDepthRenderer.js +4 -4
  61. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesColorRenderer.js +4 -4
  62. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesRenderer.js +4 -4
  63. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingFlatColorRenderer.js +4 -4
  64. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingNormalsRenderer.js +4 -4
  65. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingOcclusionRenderer.js +4 -4
  66. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPBRRenderer.js +4 -4
  67. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickDepthRenderer.js +4 -4
  68. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickMeshRenderer.js +4 -4
  69. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsFlatRenderer.js +4 -4
  70. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsRenderer.js +4 -4
  71. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingShadowRenderer.js +4 -4
  72. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingSilhouetteRenderer.js +4 -4
  73. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorRenderer.js +4 -4
  74. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorTextureRenderer.js +4 -4
  75. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingDepthRenderer.js +4 -4
  76. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesColorRenderer.js +4 -4
  77. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesRenderer.js +4 -4
  78. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatColorRenderer.js +4 -4
  79. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatNormalsRenderer.js +4 -4
  80. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingNormalsRenderer.js +4 -4
  81. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingOcclusionRenderer.js +4 -4
  82. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPBRRenderer.js +4 -4
  83. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickDepthRenderer.js +4 -4
  84. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickMeshRenderer.js +4 -4
  85. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsFlatRenderer.js +4 -4
  86. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsRenderer.js +4 -4
  87. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingShadowRenderer.js +4 -4
  88. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingSilhouetteRenderer.js +4 -4
  89. package/src/viewer/scene/scene/Scene.js +24 -9
  90. package/src/viewer/scene/sectionPlane/SectionPlaneCache.js +101 -0
@@ -8,7 +8,7 @@ class TrianglesInstancingPickMeshRenderer extends VBOSceneModelTriangleInstancin
8
8
  _buildVertexShader() {
9
9
  const scene = this._scene;
10
10
  const sectionPlanesState = scene._sectionPlanesState;
11
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
11
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
12
12
  const src = [];
13
13
  src.push("#version 300 es");
14
14
  src.push("// Instancing geometry picking vertex shader");
@@ -84,7 +84,7 @@ class TrianglesInstancingPickMeshRenderer extends VBOSceneModelTriangleInstancin
84
84
  _buildFragmentShader() {
85
85
  const scene = this._scene;
86
86
  const sectionPlanesState = scene._sectionPlanesState;
87
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
87
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
88
88
  const src = [];
89
89
  src.push("#version 300 es");
90
90
  src.push("// Batched geometry picking fragment shader");
@@ -104,7 +104,7 @@ class TrianglesInstancingPickMeshRenderer extends VBOSceneModelTriangleInstancin
104
104
  if (clipping) {
105
105
  src.push("in vec4 vWorldPosition;");
106
106
  src.push("in float vFlags;");
107
- for (let i = 0; i < sectionPlanesState.sectionPlanes.length; i++) {
107
+ for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
108
108
  src.push("uniform bool sectionPlaneActive" + i + ";");
109
109
  src.push("uniform vec3 sectionPlanePos" + i + ";");
110
110
  src.push("uniform vec3 sectionPlaneDir" + i + ";");
@@ -117,7 +117,7 @@ class TrianglesInstancingPickMeshRenderer extends VBOSceneModelTriangleInstancin
117
117
  src.push(" bool clippable = (int(vFlags) >> 16 & 0xF) == 1;");
118
118
  src.push(" if (clippable) {");
119
119
  src.push(" float dist = 0.0;");
120
- for (let i = 0; i < sectionPlanesState.sectionPlanes.length; i++) {
120
+ for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
121
121
  src.push("if (sectionPlaneActive" + i + ") {");
122
122
  src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
123
123
  src.push("}");
@@ -9,7 +9,7 @@ class TrianglesInstancingPickNormalsFlatRenderer extends VBOSceneModelTriangleIn
9
9
  _buildVertexShader() {
10
10
  const scene = this._scene;
11
11
  const sectionPlanesState = scene._sectionPlanesState;
12
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
12
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
13
13
  const src = [];
14
14
  src.push("#version 300 es");
15
15
  src.push("// Instancing geometry normals vertex shader");
@@ -76,7 +76,7 @@ class TrianglesInstancingPickNormalsFlatRenderer extends VBOSceneModelTriangleIn
76
76
  _buildFragmentShader() {
77
77
  const scene = this._scene;
78
78
  const sectionPlanesState = scene._sectionPlanesState;
79
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
79
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
80
80
  const src = [];
81
81
  src.push("#version 300 es");
82
82
  src.push("// Batched geometry normals fragment shader");
@@ -97,7 +97,7 @@ class TrianglesInstancingPickNormalsFlatRenderer extends VBOSceneModelTriangleIn
97
97
  src.push("in vec4 vWorldPosition;");
98
98
  if (clipping) {
99
99
  src.push("in float vFlags;");
100
- for (let i = 0; i < sectionPlanesState.sectionPlanes.length; i++) {
100
+ for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
101
101
  src.push("uniform bool sectionPlaneActive" + i + ";");
102
102
  src.push("uniform vec3 sectionPlanePos" + i + ";");
103
103
  src.push("uniform vec3 sectionPlaneDir" + i + ";");
@@ -109,7 +109,7 @@ class TrianglesInstancingPickNormalsFlatRenderer extends VBOSceneModelTriangleIn
109
109
  src.push(" bool clippable = (int(vFlags) >> 16 & 0xF) == 1;");
110
110
  src.push(" if (clippable) {");
111
111
  src.push(" float dist = 0.0;");
112
- for (var i = 0; i < sectionPlanesState.sectionPlanes.length; i++) {
112
+ for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
113
113
  src.push("if (sectionPlaneActive" + i + ") {");
114
114
  src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
115
115
  src.push("}");
@@ -9,7 +9,7 @@ class TrianglesInstancingPickNormalsRenderer extends VBOSceneModelTriangleInstan
9
9
  _buildVertexShader() {
10
10
  const scene = this._scene;
11
11
  const sectionPlanesState = scene._sectionPlanesState;
12
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
12
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
13
13
  const src = [];
14
14
  src.push("#version 300 es");
15
15
  src.push("// Instancing geometry normals vertex shader");
@@ -90,7 +90,7 @@ class TrianglesInstancingPickNormalsRenderer extends VBOSceneModelTriangleInstan
90
90
  _buildFragmentShader() {
91
91
  const scene = this._scene;
92
92
  const sectionPlanesState = scene._sectionPlanesState;
93
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
93
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
94
94
  const src = [];
95
95
  src.push("#version 300 es");
96
96
  src.push("// Batched geometry normals fragment shader");
@@ -114,7 +114,7 @@ class TrianglesInstancingPickNormalsRenderer extends VBOSceneModelTriangleInstan
114
114
  if (clipping) {
115
115
  src.push("in vec4 vWorldPosition;");
116
116
  src.push("in float vFlags;");
117
- for (let i = 0; i < sectionPlanesState.sectionPlanes.length; i++) {
117
+ for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
118
118
  src.push("uniform bool sectionPlaneActive" + i + ";");
119
119
  src.push("uniform vec3 sectionPlanePos" + i + ";");
120
120
  src.push("uniform vec3 sectionPlaneDir" + i + ";");
@@ -127,7 +127,7 @@ class TrianglesInstancingPickNormalsRenderer extends VBOSceneModelTriangleInstan
127
127
  src.push(" bool clippable = (int(vFlags) >> 16 & 0xF) == 1;");
128
128
  src.push(" if (clippable) {");
129
129
  src.push(" float dist = 0.0;");
130
- for (var i = 0; i < sectionPlanesState.sectionPlanes.length; i++) {
130
+ for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
131
131
  src.push("if (sectionPlaneActive" + i + ") {");
132
132
  src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
133
133
  src.push("}");
@@ -9,7 +9,7 @@ class TrianglesInstancingShadowRenderer extends VBOSceneModelTriangleInstancingR
9
9
  _buildVertexShader() {
10
10
  const scene = this._scene;
11
11
  const sectionPlanesState = scene._sectionPlanesState;
12
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
12
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
13
13
  const src = [];
14
14
  src.push("#version 300 es");
15
15
  src.push("// Instancing geometry shadow drawing vertex shader");
@@ -58,7 +58,7 @@ class TrianglesInstancingShadowRenderer extends VBOSceneModelTriangleInstancingR
58
58
  _buildFragmentShader() {
59
59
  const scene = this._scene;
60
60
  const sectionPlanesState = scene._sectionPlanesState;
61
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
61
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
62
62
  const src = [];
63
63
  src.push("#version 300 es");
64
64
  src.push("// Instancing geometry depth drawing fragment shader");
@@ -77,7 +77,7 @@ class TrianglesInstancingShadowRenderer extends VBOSceneModelTriangleInstancingR
77
77
  if (clipping) {
78
78
  src.push("in vec4 vWorldPosition;");
79
79
  src.push("in float vFlags;");
80
- for (let i = 0, len = sectionPlanesState.sectionPlanes.length; i < len; i++) {
80
+ for (let i = 0, len = sectionPlanesState.getNumAllocatedSectionPlanes(); i < len; i++) {
81
81
  src.push("uniform bool sectionPlaneActive" + i + ";");
82
82
  src.push("uniform vec3 sectionPlanePos" + i + ";");
83
83
  src.push("uniform vec3 sectionPlaneDir" + i + ";");
@@ -93,7 +93,7 @@ class TrianglesInstancingShadowRenderer extends VBOSceneModelTriangleInstancingR
93
93
  src.push(" bool clippable = (int(vFlags) >> 16 & 0xF) == 1;");
94
94
  src.push(" if (clippable) {");
95
95
  src.push(" float dist = 0.0;");
96
- for (let i = 0, len = sectionPlanesState.sectionPlanes.length; i < len; i++) {
96
+ for (let i = 0, len = sectionPlanesState.getNumAllocatedSectionPlanes(); i < len; i++) {
97
97
  src.push("if (sectionPlaneActive" + i + ") {");
98
98
  src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
99
99
  src.push("}");
@@ -13,7 +13,7 @@ class TrianglesInstancingSilhouetteRenderer extends VBOSceneModelTriangleInstanc
13
13
  _buildVertexShader() {
14
14
  const scene = this._scene;
15
15
  const sectionPlanesState = scene._sectionPlanesState;
16
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
16
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
17
17
  const src = [];
18
18
  src.push("#version 300 es");
19
19
  src.push("// Instancing silhouette vertex shader");
@@ -88,7 +88,7 @@ class TrianglesInstancingSilhouetteRenderer extends VBOSceneModelTriangleInstanc
88
88
  _buildFragmentShader() {
89
89
  const scene = this._scene;
90
90
  const sectionPlanesState = scene._sectionPlanesState;
91
- const clipping = sectionPlanesState.sectionPlanes.length > 0;
91
+ const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
92
92
  const src = [];
93
93
  src.push("#version 300 es");
94
94
  src.push("// Instancing fill fragment shader");
@@ -108,7 +108,7 @@ class TrianglesInstancingSilhouetteRenderer extends VBOSceneModelTriangleInstanc
108
108
  if (clipping) {
109
109
  src.push("in vec4 vWorldPosition;");
110
110
  src.push("in float vFlags;");
111
- for (let i = 0, len = sectionPlanesState.sectionPlanes.length; i < len; i++) {
111
+ for (let i = 0, len = sectionPlanesState.getNumAllocatedSectionPlanes(); i < len; i++) {
112
112
  src.push("uniform bool sectionPlaneActive" + i + ";");
113
113
  src.push("uniform vec3 sectionPlanePos" + i + ";");
114
114
  src.push("uniform vec3 sectionPlaneDir" + i + ";");
@@ -121,7 +121,7 @@ class TrianglesInstancingSilhouetteRenderer extends VBOSceneModelTriangleInstanc
121
121
  src.push(" bool clippable = (int(vFlags) >> 16 & 0xF) == 1;");
122
122
  src.push(" if (clippable) {");
123
123
  src.push(" float dist = 0.0;");
124
- for (let i = 0, len = sectionPlanesState.sectionPlanes.length; i < len; i++) {
124
+ for (let i = 0, len = sectionPlanesState.getNumAllocatedSectionPlanes(); i < len; i++) {
125
125
  src.push("if (sectionPlaneActive" + i + ") {");
126
126
  src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
127
127
  src.push("}");
@@ -338,8 +338,13 @@ class Scene extends Component {
338
338
  * @param {Viewer} viewer The Viewer this Scene belongs to.
339
339
  * @param {Object} cfg Scene configuration.
340
340
  * @param {String} [cfg.canvasId] ID of an existing HTML canvas for the {@link Scene#canvas} - either this or canvasElement is mandatory. When both values are given, the element reference is always preferred to the ID.
341
- * @param {HTMLCanvasElement} [cfg.canvasElement] Reference of an existing HTML canvas for the {@link Scene#canvas} - either this or canvasId is mandatory. When both values are given, the element reference is always preferred to the ID.
341
+ * @param {HTMLCanvasElement} [cfg.canvasElement] Reference of an existing HTML canvas for the {@link Scene#canvas} - either this or canvasId is mandatory. When both values are given, the element reference is always preferred to the ID.
342
342
  * @param {HTMLElement} [cfg.keyboardEventsElement] Optional reference to HTML element on which key events should be handled. Defaults to the HTML Document.
343
+ * @param {number} [cfg.numPreallocatedSectionPlanes=0] Enhances the efficiency of SectionPlane creation by proactively allocating Viewer resources for a specified quantity
344
+ * of SectionPlanes. Introducing this parameter streamlines the initial creation speed of SectionPlanes, particularly up to the designated quantity. This parameter internally
345
+ * configures renderer logic for the specified number of SectionPlanes, eliminating the need for setting up logic with each SectionPlane creation and thereby enhancing
346
+ * responsiveness. It is important to consider that each SectionPlane imposes rendering performance, so it is recommended to set this value to a quantity that aligns with
347
+ * your expected usage.
343
348
  * @throws {String} Throws an exception when both canvasId or canvasElement are missing or they aren't pointing to a valid HTMLCanvasElement.
344
349
  */
345
350
  constructor(viewer, cfg = {}) {
@@ -362,6 +367,8 @@ class Scene extends Component {
362
367
 
363
368
  this._aabbDirty = true;
364
369
 
370
+ this._numPreallocatedSectionPlanes = cfg.numPreallocatedSectionPlanes || 0;
371
+
365
372
  /**
366
373
  * The {@link Viewer} this Scene belongs to.
367
374
  * @type {Viewer}
@@ -624,6 +631,8 @@ class Scene extends Component {
624
631
  alphaDepthMask: alphaDepthMask
625
632
  });
626
633
 
634
+ const numPreallocatedSectionPlanes = this._numPreallocatedSectionPlanes;
635
+
627
636
  this._sectionPlanesState = new (function () {
628
637
 
629
638
  this.sectionPlanes = [];
@@ -636,14 +645,15 @@ class Scene extends Component {
636
645
  if (hash) {
637
646
  return hash;
638
647
  }
648
+ const numAllocatedSectionPlanes = this.getNumAllocatedSectionPlanes();
639
649
  const sectionPlanes = this.sectionPlanes;
640
- if (sectionPlanes.length === 0) {
650
+ if (numAllocatedSectionPlanes === 0) {
641
651
  return this.hash = ";";
642
652
  }
643
653
  let sectionPlane;
644
654
 
645
655
  const hashParts = [];
646
- for (let i = 0, len = sectionPlanes.length; i < len; i++) {
656
+ for (let i = 0, len = numAllocatedSectionPlanes; i < len; i++) {
647
657
  sectionPlane = sectionPlanes[i];
648
658
  hashParts.push("cp");
649
659
  }
@@ -666,6 +676,11 @@ class Scene extends Component {
666
676
  }
667
677
  }
668
678
  };
679
+
680
+ this.getNumAllocatedSectionPlanes = function () {
681
+ const num = this.sectionPlanes.length;
682
+ return (num > numPreallocatedSectionPlanes) ? num : numPreallocatedSectionPlanes;
683
+ };
669
684
  })();
670
685
 
671
686
  this._lightsState = new (function () {
@@ -2588,12 +2603,12 @@ class Scene extends Component {
2588
2603
 
2589
2604
  /**
2590
2605
  * This method will "tickify" the provided `cb` function.
2591
- *
2606
+ *
2592
2607
  * This means, the function will be wrapped so:
2593
- *
2608
+ *
2594
2609
  * - it runs time-aligned to scene ticks
2595
2610
  * - it runs maximum once per scene-tick
2596
- *
2611
+ *
2597
2612
  * @param {Function} cb The function to tickify
2598
2613
  * @returns {Function)}
2599
2614
  */
@@ -2614,7 +2629,7 @@ class Scene extends Component {
2614
2629
 
2615
2630
  /**
2616
2631
  * The provided `cb` function is replaced with a "set-dirty" function
2617
- *
2632
+ *
2618
2633
  * @type {Function}
2619
2634
  */
2620
2635
  const wrapperFunc = function (...args) {
@@ -2624,7 +2639,7 @@ class Scene extends Component {
2624
2639
 
2625
2640
  /**
2626
2641
  * An each scene tick, if the "dirty-flag" is set, run the `cb` function.
2627
- *
2642
+ *
2628
2643
  * This will make it run time-aligned to the scene tick.
2629
2644
  */
2630
2645
  const tickSubId = this.on("tick", () => {
@@ -2638,7 +2653,7 @@ class Scene extends Component {
2638
2653
  /**
2639
2654
  * And, store the list of subscribers.
2640
2655
  */
2641
- this._tickifiedFunctions[cbString] = { tickSubId, wrapperFunc };
2656
+ this._tickifiedFunctions[cbString] = {tickSubId, wrapperFunc};
2642
2657
 
2643
2658
  return wrapperFunc;
2644
2659
  }
@@ -0,0 +1,101 @@
1
+ import {Component} from '../Component.js';
2
+ import {math} from "../math/math.js";
3
+ import {SectionPlane} from "./SectionPlane";
4
+
5
+ const tempVec3a = math.vec3();
6
+
7
+ /**
8
+ * @desc A set of arbitrarily-aligned World-space clipping planes.
9
+
10
+ */
11
+ export class SectionPlaneCache extends Component {
12
+
13
+ constructor(owner, cfg = {}) {
14
+ super(owner, cfg);
15
+
16
+ this._sectionPlanesMap = {};
17
+ this._sectionPlanesState = {};
18
+
19
+ if (cfg.size) {
20
+ for (let i = 0, len = cfg.size; i < len; i++) {
21
+ const sectionPlane = new SectionPlane(this.viewer.scene, {
22
+ id: math.createUUID(),
23
+ pos: [0, 0, 0],
24
+ dir: [0, -1, 0],
25
+ active: false
26
+ });
27
+ this._sectionPlanesMap[sectionPlane.id] = sectionPlane;
28
+ this._sectionPlanesState[sectionPlane.id] = {
29
+ sectionPlane: sectionPlane,
30
+ used: false
31
+ };
32
+ }
33
+ }
34
+ }
35
+
36
+ getSectionPlane(params = {}) {
37
+ for (let id in this._sectionPlanesState) {
38
+ const state = this._sectionPlanesState[id];
39
+ if (!state.used) {
40
+ state.used = true;
41
+ const sectionPlane = state.sectionPlane;
42
+ sectionPlane.active = true;
43
+ sectionPlane.pos = params.pos;
44
+ sectionPlane.dir = params.dir;
45
+ return sectionPlane;
46
+ }
47
+ }
48
+ const sectionPlane = new SectionPlane(this.viewer.scene, {
49
+ id: params.id, // Optional
50
+ pos: params.pos,
51
+ dir: params.dir,
52
+ active: true
53
+ });
54
+ this._sectionPlanesState[sectionPlane.id] = {
55
+ sectionPlane: sectionPlane,
56
+ used: true
57
+ };
58
+ return sectionPlane;
59
+ }
60
+
61
+ putSectionPlane(sectionPlane) {
62
+ let state = this._sectionPlanesState[sectionPlane.id];
63
+ sectionPlane.active = false;
64
+ if (state) {
65
+ state.used = false;
66
+ return;
67
+ }
68
+ this._sectionPlanesState[sectionPlane.id] = {
69
+ sectionPlane: sectionPlane,
70
+ used: false
71
+ };
72
+ }
73
+
74
+ putAllSectionPlanes() {
75
+ for (let id in this._sectionPlanesState) {
76
+ const state = this._sectionPlanesState[id];
77
+ state.used = false;
78
+ state.sectionPlane.active = false;
79
+ }
80
+ }
81
+
82
+ getSectionPlanesInUse() {
83
+ const sectionPlanes = [];
84
+ for (let id in this._sectionPlanesState) {
85
+ const state = this._sectionPlanesState[id];
86
+ if (state.used) {
87
+ sectionPlanes.push(state.sectionPlane);
88
+ }
89
+ }
90
+ return sectionPlanes;
91
+ }
92
+
93
+ /**
94
+ * @destroy
95
+ */
96
+ destroy() {
97
+ this.scene._sectionPlaneDestroyed(this);
98
+ super.destroy();
99
+ }
100
+ }
101
+