@xeokit/xeokit-sdk 2.6.85-renderers-refactor-v2 → 2.6.86

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 (184) hide show
  1. package/dist/xeokit-sdk.cjs.js +44618 -13007
  2. package/dist/xeokit-sdk.es.js +44617 -13008
  3. package/dist/xeokit-sdk.es5.js +3488 -1387
  4. package/dist/xeokit-sdk.min.cjs.js +8 -8
  5. package/dist/xeokit-sdk.min.es.js +8 -8
  6. package/dist/xeokit-sdk.min.es5.js +7 -7
  7. package/package.json +1 -1
  8. package/src/plugins/lib/html/MenuEvent.js +2 -2
  9. package/src/viewer/Viewer.js +103 -55
  10. package/src/viewer/scene/canvas/Canvas.js +43 -3
  11. package/src/viewer/scene/geometry/ReadableGeometry.js +25 -0
  12. package/src/viewer/scene/lights/CubeTexture.js +13 -0
  13. package/src/viewer/scene/lights/DirLight.js +1 -2
  14. package/src/viewer/scene/lights/PointLight.js +1 -2
  15. package/src/viewer/scene/materials/Texture.js +9 -0
  16. package/src/viewer/scene/math/rtcCoords.js +38 -1
  17. package/src/viewer/scene/mesh/Mesh.js +212 -454
  18. package/src/viewer/scene/mesh/draw/DrawRenderer.js +998 -0
  19. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +1504 -305
  20. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +259 -0
  21. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +160 -0
  22. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +286 -0
  23. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +263 -0
  24. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +221 -0
  25. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +158 -9
  26. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +223 -0
  27. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +151 -21
  28. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +200 -0
  29. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +124 -12
  30. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
  31. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +97 -22
  32. package/src/viewer/scene/model/RENDER_PASSES.js +34 -0
  33. package/src/viewer/scene/model/SceneModel.js +861 -245
  34. package/src/viewer/scene/model/SceneModelEntity.js +4 -4
  35. package/src/viewer/scene/model/SceneModelMesh.js +3 -3
  36. package/src/viewer/scene/model/dtx/BindableDataTexture.js +31 -0
  37. package/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +27 -0
  38. package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +897 -0
  39. package/src/viewer/scene/model/dtx/lines/DTXLinesState.js +46 -0
  40. package/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +411 -0
  41. package/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +49 -0
  42. package/src/viewer/scene/model/dtx/lines/rebucketPositions.js +208 -0
  43. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +389 -0
  44. package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +65 -0
  45. package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +1399 -0
  46. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +46 -0
  47. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +250 -0
  48. package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +518 -0
  49. package/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +54 -0
  50. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +639 -0
  51. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +464 -0
  52. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +423 -0
  53. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +431 -0
  54. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +345 -0
  55. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +436 -0
  56. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +466 -0
  57. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +437 -0
  58. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +460 -0
  59. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +437 -0
  60. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +307 -0
  61. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +472 -0
  62. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +474 -0
  63. package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +435 -0
  64. package/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
  65. package/src/viewer/scene/model/vbo/VBORenderer.js +664 -0
  66. package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +704 -0
  67. package/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +19 -0
  68. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +318 -0
  69. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +114 -0
  70. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +99 -0
  71. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +124 -0
  72. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +313 -0
  73. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +311 -0
  74. package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +24 -0
  75. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +688 -0
  76. package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +24 -0
  77. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +168 -0
  78. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +136 -0
  79. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +156 -0
  80. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +148 -0
  81. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +144 -0
  82. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +107 -0
  83. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +146 -0
  84. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +315 -0
  85. package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +305 -0
  86. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +24 -0
  87. package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +1346 -0
  88. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +131 -0
  89. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +135 -0
  90. package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +12 -0
  91. package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +403 -0
  92. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +35 -0
  93. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +252 -0
  94. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +294 -0
  95. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +115 -0
  96. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +246 -0
  97. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +139 -0
  98. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +125 -0
  99. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  100. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +144 -0
  101. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +130 -0
  102. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +121 -0
  103. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +131 -0
  104. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +107 -0
  105. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +144 -0
  106. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +313 -0
  107. package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +312 -0
  108. package/src/viewer/scene/model/vbo/float16.js +760 -0
  109. package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +711 -0
  110. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +148 -0
  111. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +26 -0
  112. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +139 -0
  113. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +127 -0
  114. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +308 -0
  115. package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +299 -0
  116. package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +733 -0
  117. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +174 -0
  118. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +156 -0
  119. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +149 -0
  120. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +170 -0
  121. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +152 -0
  122. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +26 -0
  123. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +174 -0
  124. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +119 -0
  125. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +154 -0
  126. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +307 -0
  127. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +293 -0
  128. package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +150 -0
  129. package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +1289 -0
  130. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +135 -0
  131. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +137 -0
  132. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +12 -0
  133. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +403 -0
  134. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +267 -0
  135. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +299 -0
  136. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +126 -0
  137. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +255 -0
  138. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +130 -0
  139. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +32 -0
  140. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +138 -0
  141. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +128 -0
  142. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +561 -0
  143. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +149 -0
  144. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +136 -0
  145. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +130 -0
  146. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +145 -0
  147. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +113 -0
  148. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +148 -0
  149. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +319 -0
  150. package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +310 -0
  151. package/src/viewer/scene/scene/Scene.js +38 -21
  152. package/src/viewer/scene/webgl/ArrayBuf.js +20 -5
  153. package/src/viewer/scene/webgl/Attribute.js +23 -0
  154. package/src/viewer/scene/webgl/FrameContext.js +86 -14
  155. package/src/viewer/scene/webgl/Program.js +181 -0
  156. package/src/viewer/scene/webgl/RenderBuffer.js +262 -62
  157. package/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
  158. package/src/viewer/scene/webgl/Renderer.js +843 -880
  159. package/src/viewer/scene/webgl/Sampler.js +18 -0
  160. package/src/viewer/scene/webgl/Shader.js +49 -0
  161. package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +132 -60
  162. package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +328 -167
  163. package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
  164. package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +384 -0
  165. package/src/viewer/utils/os.js +9 -0
  166. package/src/viewer/scene/mesh/draw/LambertShaderSource.js +0 -35
  167. package/src/viewer/scene/mesh/emphasis/EmphasisShaderSource.js +0 -34
  168. package/src/viewer/scene/model/layer/DTXLayer.js +0 -940
  169. package/src/viewer/scene/model/layer/Layer.js +0 -786
  170. package/src/viewer/scene/model/layer/VBOLayer.js +0 -1019
  171. package/src/viewer/scene/model/layer/programs/ColorProgram.js +0 -35
  172. package/src/viewer/scene/model/layer/programs/ColorTextureProgram.js +0 -46
  173. package/src/viewer/scene/model/layer/programs/DepthProgram.js +0 -11
  174. package/src/viewer/scene/model/layer/programs/EdgesProgram.js +0 -12
  175. package/src/viewer/scene/model/layer/programs/FlatColorProgram.js +0 -24
  176. package/src/viewer/scene/model/layer/programs/OcclusionProgram.js +0 -12
  177. package/src/viewer/scene/model/layer/programs/PBRProgram.js +0 -180
  178. package/src/viewer/scene/model/layer/programs/PickDepthProgram.js +0 -30
  179. package/src/viewer/scene/model/layer/programs/PickMeshProgram.js +0 -12
  180. package/src/viewer/scene/model/layer/programs/PickNormalsProgram.js +0 -18
  181. package/src/viewer/scene/model/layer/programs/ShadowProgram.js +0 -23
  182. package/src/viewer/scene/model/layer/programs/SilhouetteProgram.js +0 -15
  183. package/src/viewer/scene/model/layer/programs/SnapProgram.js +0 -28
  184. package/src/viewer/scene/webgl/WebGLRenderer.js +0 -612
@@ -0,0 +1,711 @@
1
+ import {ENTITY_FLAGS} from '../../../ENTITY_FLAGS.js';
2
+ import {RENDER_PASSES} from '../../../RENDER_PASSES.js';
3
+
4
+ import {math} from "../../../../math/math.js";
5
+ import {RenderState} from "../../../../webgl/RenderState.js";
6
+ import {ArrayBuf} from "../../../../webgl/ArrayBuf.js";
7
+ import {getRenderers} from "./renderers/VBOInstancingLinesRenderers.js";
8
+
9
+ const tempUint8Vec4 = new Uint8Array(4);
10
+ const tempFloat32 = new Float32Array(1);
11
+
12
+ const tempVec3fa = new Float32Array(3);
13
+
14
+ const tempFloat32Vec4 = new Float32Array(4);
15
+
16
+ /**
17
+ * @private
18
+ */
19
+ class VBOInstancingLinesLayer {
20
+
21
+ /**
22
+ * @param cfg
23
+ * @param cfg.layerIndex
24
+ * @param cfg.model
25
+ * @param cfg.geometry
26
+ * @param cfg.material
27
+ * @param cfg.origin
28
+ */
29
+ constructor(cfg) {
30
+
31
+ // console.info("VBOInstancingLinesLayer");
32
+
33
+ /**
34
+ * Owner model
35
+ * @type {VBOSceneModel}
36
+ */
37
+ this.model = cfg.model;
38
+
39
+ /**
40
+ * Shared material
41
+ * @type {VBOSceneModelGeometry}
42
+ */
43
+ this.material = cfg.material;
44
+
45
+ /**
46
+ * State sorting key.
47
+ * @type {string}
48
+ */
49
+ this.sortId = "LinesInstancingLayer";
50
+
51
+ /**
52
+ * Index of this InstancingLayer in VBOSceneModel#_layerList
53
+ * @type {Number}
54
+ */
55
+ this.layerIndex = cfg.layerIndex;
56
+
57
+ this._renderers = getRenderers(cfg.model.scene);
58
+
59
+ this._aabb = math.collapseAABB3();
60
+
61
+ this._state = new RenderState({
62
+ obb: math.OBB3(),
63
+ numInstances: 0,
64
+ origin: null,
65
+ geometry: cfg.geometry,
66
+ positionsDecodeMatrix: cfg.geometry.positionsDecodeMatrix, // So we can null the geometry for GC
67
+ positionsBuf: null,
68
+ colorsBuf: null,
69
+ flagsBuf: null,
70
+ offsetsBuf: null,
71
+ modelMatrixCol0Buf: null,
72
+ modelMatrixCol1Buf: null,
73
+ modelMatrixCol2Buf: null
74
+ });
75
+
76
+ // These counts are used to avoid unnecessary render passes
77
+ this._numPortions = 0;
78
+ this._numVisibleLayerPortions = 0;
79
+ this._numTransparentLayerPortions = 0;
80
+ this._numXRayedLayerPortions = 0;
81
+ this._numHighlightedLayerPortions = 0;
82
+ this._numSelectedLayerPortions = 0;
83
+ this._numClippableLayerPortions = 0;
84
+ this._numEdgesLayerPortions = 0;
85
+ this._numPickableLayerPortions = 0;
86
+ this._numCulledLayerPortions = 0;
87
+
88
+ /** @private */
89
+ this.numIndices = cfg.geometry.numIndices;
90
+
91
+ // Vertex arrays
92
+ this._colors = [];
93
+ this._offsets = [];
94
+
95
+ // Modeling matrix per instance, array for each column
96
+ this._modelMatrixCol0 = [];
97
+ this._modelMatrixCol1 = [];
98
+ this._modelMatrixCol2 = [];
99
+
100
+ this._portions = [];
101
+ this._meshes = [];
102
+
103
+ this._aabb = math.collapseAABB3();
104
+ this.aabbDirty = true;
105
+
106
+ if (cfg.origin) {
107
+ this._state.origin = math.vec3(cfg.origin);
108
+ }
109
+
110
+ this._finalized = false;
111
+
112
+ /**
113
+ * The type of primitives in this layer.
114
+ */
115
+ this.primitive = cfg.primitive;
116
+ }
117
+
118
+ get aabb() {
119
+ if (this.aabbDirty) {
120
+ math.collapseAABB3(this._aabb);
121
+ for (let i = 0, len = this._meshes.length; i < len; i++) {
122
+ math.expandAABB3(this._aabb, this._meshes[i].aabb);
123
+ }
124
+ this.aabbDirty = false;
125
+ }
126
+ return this._aabb;
127
+ }
128
+
129
+ /**
130
+ * Creates a new portion within this InstancingLayer, returns the new portion ID.
131
+ *
132
+ * The portion will instance this InstancingLayer's geometry.
133
+ *
134
+ * Gives the portion the specified color and matrix.
135
+ *
136
+ * @param mesh The SceneModelMesh that owns the portion
137
+ * @param cfg Portion params
138
+ * @param cfg.color Color [0..255,0..255,0..255]
139
+ * @param cfg.opacity Opacity [0..255].
140
+ * @param cfg.meshMatrix Flat float 4x4 matrix.
141
+ * @returns {number} Portion ID.
142
+ */
143
+ createPortion(mesh, cfg) {
144
+
145
+ const color = cfg.color;
146
+ const opacity = cfg.opacity;
147
+ const meshMatrix = cfg.meshMatrix;
148
+
149
+ if (this._finalized) {
150
+ throw "Already finalized";
151
+ }
152
+
153
+ const r = color[0]; // Color is pre-quantized by VBOSceneModel
154
+ const g = color[1];
155
+ const b = color[2];
156
+ const a = color[3];
157
+
158
+ this._colors.push(r);
159
+ this._colors.push(g);
160
+ this._colors.push(b);
161
+ this._colors.push(opacity);
162
+
163
+ if (this.model.scene.entityOffsetsEnabled) {
164
+ this._offsets.push(0);
165
+ this._offsets.push(0);
166
+ this._offsets.push(0);
167
+ }
168
+
169
+ this._modelMatrixCol0.push(meshMatrix[0]);
170
+ this._modelMatrixCol0.push(meshMatrix[4]);
171
+ this._modelMatrixCol0.push(meshMatrix[8]);
172
+ this._modelMatrixCol0.push(meshMatrix[12]);
173
+
174
+ this._modelMatrixCol1.push(meshMatrix[1]);
175
+ this._modelMatrixCol1.push(meshMatrix[5]);
176
+ this._modelMatrixCol1.push(meshMatrix[9]);
177
+ this._modelMatrixCol1.push(meshMatrix[13]);
178
+
179
+ this._modelMatrixCol2.push(meshMatrix[2]);
180
+ this._modelMatrixCol2.push(meshMatrix[6]);
181
+ this._modelMatrixCol2.push(meshMatrix[10]);
182
+ this._modelMatrixCol2.push(meshMatrix[14]);
183
+
184
+ this._state.numInstances++;
185
+
186
+ const portionId = this._portions.length;
187
+ this._portions.push({});
188
+
189
+ this._numPortions++;
190
+ this.model.numPortions++;
191
+
192
+ this._meshes.push(mesh);
193
+
194
+ return portionId;
195
+ }
196
+
197
+ finalize() {
198
+ if (this._finalized) {
199
+ throw "Already finalized";
200
+ }
201
+ const gl = this.model.scene.canvas.gl;
202
+ const state = this._state;
203
+ const geometry = state.geometry;
204
+ const colorsLength = this._colors.length;
205
+ const flagsLength = colorsLength / 4;
206
+ if (colorsLength > 0) {
207
+ let notNormalized = false;
208
+ this._state.colorsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Uint8Array(this._colors), this._colors.length, 4, gl.DYNAMIC_DRAW, notNormalized);
209
+ this._colors = []; // Release memory
210
+ }
211
+ if (flagsLength > 0) {
212
+ // Because we only build flags arrays here,
213
+ // get their length from the colors array
214
+ let notNormalized = false;
215
+ this._state.flagsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(flagsLength), flagsLength, 1, gl.DYNAMIC_DRAW, notNormalized);
216
+ }
217
+ if (this.model.scene.entityOffsetsEnabled) {
218
+ if (this._offsets.length > 0) {
219
+ const notNormalized = false;
220
+ this._state.offsetsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._offsets), this._offsets.length, 3, gl.DYNAMIC_DRAW, notNormalized);
221
+ this._offsets = []; // Release memory
222
+ }
223
+ }
224
+ if (geometry.colorsCompressed && geometry.colorsCompressed.length > 0) {
225
+ const colorsCompressed = new Uint8Array(geometry.colorsCompressed);
226
+ const notNormalized = false;
227
+ state.colorsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, colorsCompressed, colorsCompressed.length, 4, gl.STATIC_DRAW, notNormalized);
228
+ }
229
+ if (geometry.positionsCompressed && geometry.positionsCompressed.length > 0) {
230
+ const normalized = false;
231
+ state.positionsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, geometry.positionsCompressed, geometry.positionsCompressed.length, 3, gl.STATIC_DRAW, normalized);
232
+ state.positionsDecodeMatrix = math.mat4(geometry.positionsDecodeMatrix);
233
+ }
234
+ if (geometry.indices && geometry.indices.length > 0) {
235
+ state.indicesBuf = new ArrayBuf(gl, gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(geometry.indices), geometry.indices.length, 1, gl.STATIC_DRAW);
236
+ state.numIndices = geometry.indices.length;
237
+ }
238
+ if (this._modelMatrixCol0.length > 0) {
239
+ const normalized = false;
240
+ this._state.modelMatrixCol0Buf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._modelMatrixCol0), this._modelMatrixCol0.length, 4, gl.STATIC_DRAW, normalized);
241
+ this._state.modelMatrixCol1Buf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._modelMatrixCol1), this._modelMatrixCol1.length, 4, gl.STATIC_DRAW, normalized);
242
+ this._state.modelMatrixCol2Buf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._modelMatrixCol2), this._modelMatrixCol2.length, 4, gl.STATIC_DRAW, normalized);
243
+ this._modelMatrixCol0 = [];
244
+ this._modelMatrixCol1 = [];
245
+ this._modelMatrixCol2 = [];
246
+ }
247
+ if (!this.model.scene.readableGeometryEnabled) {
248
+ this._state.geometry = null;
249
+ }
250
+ this._finalized = true;
251
+ }
252
+
253
+ // The following setters are called by VBOSceneModelMesh, in turn called by VBOSceneModelNode, only after the layer is finalized.
254
+ // It's important that these are called after finalize() in order to maintain integrity of counts like _numVisibleLayerPortions etc.
255
+
256
+ initFlags(portionId, flags, meshTransparent) {
257
+ if (flags & ENTITY_FLAGS.VISIBLE) {
258
+ this._numVisibleLayerPortions++;
259
+ this.model.numVisibleLayerPortions++;
260
+ }
261
+ if (flags & ENTITY_FLAGS.HIGHLIGHTED) {
262
+ this._numHighlightedLayerPortions++;
263
+ this.model.numHighlightedLayerPortions++;
264
+ }
265
+ if (flags & ENTITY_FLAGS.XRAYED) {
266
+ this._numXRayedLayerPortions++;
267
+ this.model.numXRayedLayerPortions++;
268
+ }
269
+ if (flags & ENTITY_FLAGS.SELECTED) {
270
+ this._numSelectedLayerPortions++;
271
+ this.model.numSelectedLayerPortions++;
272
+ }
273
+ if (flags & ENTITY_FLAGS.CLIPPABLE) {
274
+ this._numClippableLayerPortions++;
275
+ this.model.numClippableLayerPortions++;
276
+ }
277
+ if (flags & ENTITY_FLAGS.EDGES) {
278
+ this._numEdgesLayerPortions++;
279
+ this.model.numEdgesLayerPortions++;
280
+ }
281
+ if (flags & ENTITY_FLAGS.PICKABLE) {
282
+ this._numPickableLayerPortions++;
283
+ this.model.numPickableLayerPortions++;
284
+ }
285
+ if (flags & ENTITY_FLAGS.CULLED) {
286
+ this._numCulledLayerPortions++;
287
+ this.model.numCulledLayerPortions++;
288
+ }
289
+ if (meshTransparent) {
290
+ this._numTransparentLayerPortions++;
291
+ this.model.numTransparentLayerPortions++;
292
+ }
293
+ this._setFlags(portionId, flags, meshTransparent);
294
+ }
295
+
296
+ setVisible(portionId, flags, meshTransparent) {
297
+ if (!this._finalized) {
298
+ throw "Not finalized";
299
+ }
300
+ if (flags & ENTITY_FLAGS.VISIBLE) {
301
+ this._numVisibleLayerPortions++;
302
+ this.model.numVisibleLayerPortions++;
303
+ } else {
304
+ this._numVisibleLayerPortions--;
305
+ this.model.numVisibleLayerPortions--;
306
+ }
307
+ this._setFlags(portionId, flags, meshTransparent);
308
+ }
309
+
310
+ setHighlighted(portionId, flags, meshTransparent) {
311
+ if (!this._finalized) {
312
+ throw "Not finalized";
313
+ }
314
+ if (flags & ENTITY_FLAGS.HIGHLIGHTED) {
315
+ this._numHighlightedLayerPortions++;
316
+ this.model.numHighlightedLayerPortions++;
317
+ } else {
318
+ this._numHighlightedLayerPortions--;
319
+ this.model.numHighlightedLayerPortions--;
320
+ }
321
+ this._setFlags(portionId, flags, meshTransparent);
322
+ }
323
+
324
+ setXRayed(portionId, flags, meshTransparent) {
325
+ if (!this._finalized) {
326
+ throw "Not finalized";
327
+ }
328
+ if (flags & ENTITY_FLAGS.XRAYED) {
329
+ this._numXRayedLayerPortions++;
330
+ this.model.numXRayedLayerPortions++;
331
+ } else {
332
+ this._numXRayedLayerPortions--;
333
+ this.model.numXRayedLayerPortions--;
334
+ }
335
+ this._setFlags(portionId, flags, meshTransparent);
336
+ }
337
+
338
+ setSelected(portionId, flags, meshTransparent) {
339
+ if (!this._finalized) {
340
+ throw "Not finalized";
341
+ }
342
+ if (flags & ENTITY_FLAGS.SELECTED) {
343
+ this._numSelectedLayerPortions++;
344
+ this.model.numSelectedLayerPortions++;
345
+ } else {
346
+ this._numSelectedLayerPortions--;
347
+ this.model.numSelectedLayerPortions--;
348
+ }
349
+ this._setFlags(portionId, flags, meshTransparent);
350
+ }
351
+
352
+ setEdges(portionId, flags, meshTransparent) {
353
+ if (!this._finalized) {
354
+ throw "Not finalized";
355
+ }
356
+ if (flags & ENTITY_FLAGS.EDGES) {
357
+ this._numEdgesLayerPortions++;
358
+ this.model.numEdgesLayerPortions++;
359
+ } else {
360
+ this._numEdgesLayerPortions--;
361
+ this.model.numEdgesLayerPortions--;
362
+ }
363
+ this._setFlags(portionId, flags, meshTransparent);
364
+ }
365
+
366
+ setClippable(portionId, flags) {
367
+ if (!this._finalized) {
368
+ throw "Not finalized";
369
+ }
370
+ if (flags & ENTITY_FLAGS.CLIPPABLE) {
371
+ this._numClippableLayerPortions++;
372
+ this.model.numClippableLayerPortions++;
373
+ } else {
374
+ this._numClippableLayerPortions--;
375
+ this.model.numClippableLayerPortions--;
376
+ }
377
+ this._setFlags(portionId, flags);
378
+ }
379
+
380
+ setCollidable(portionId, flags) {
381
+ if (!this._finalized) {
382
+ throw "Not finalized";
383
+ }
384
+ }
385
+
386
+ setPickable(portionId, flags, meshTransparent) {
387
+ if (!this._finalized) {
388
+ throw "Not finalized";
389
+ }
390
+ if (flags & ENTITY_FLAGS.PICKABLE) {
391
+ this._numPickableLayerPortions++;
392
+ this.model.numPickableLayerPortions++;
393
+ } else {
394
+ this._numPickableLayerPortions--;
395
+ this.model.numPickableLayerPortions--;
396
+ }
397
+ this._setFlags(portionId, flags, meshTransparent);
398
+ }
399
+
400
+ setCulled(portionId, flags, meshTransparent) {
401
+ if (!this._finalized) {
402
+ throw "Not finalized";
403
+ }
404
+ if (flags & ENTITY_FLAGS.CULLED) {
405
+ this._numCulledLayerPortions++;
406
+ this.model.numCulledLayerPortions++;
407
+ } else {
408
+ this._numCulledLayerPortions--;
409
+ this.model.numCulledLayerPortions--;
410
+ }
411
+ this._setFlags(portionId, flags, meshTransparent);
412
+ }
413
+
414
+ setColor(portionId, color) { // RGBA color is normalized as ints
415
+ if (!this._finalized) {
416
+ throw "Not finalized";
417
+ }
418
+ tempUint8Vec4[0] = color[0];
419
+ tempUint8Vec4[1] = color[1];
420
+ tempUint8Vec4[2] = color[2];
421
+ tempUint8Vec4[3] = color[3];
422
+ this._state.colorsBuf.setData(tempUint8Vec4, portionId * 4, 4);
423
+ }
424
+
425
+ setTransparent(portionId, flags, transparent) {
426
+ if (transparent) {
427
+ this._numTransparentLayerPortions++;
428
+ this.model.numTransparentLayerPortions++;
429
+ } else {
430
+ this._numTransparentLayerPortions--;
431
+ this.model.numTransparentLayerPortions--;
432
+ }
433
+ this._setFlags(portionId, flags, transparent);
434
+ }
435
+
436
+ /**
437
+ * flags are 4bits values encoded on a 32bit base. color flag on the first 4 bits, silhouette flag on the next 4 bits and so on for edge, pick and clippable.
438
+ */
439
+ _setFlags(portionId, flags, meshTransparent) {
440
+
441
+ if (!this._finalized) {
442
+ throw "Not finalized";
443
+ }
444
+
445
+ const visible = !!(flags & ENTITY_FLAGS.VISIBLE);
446
+ const xrayed = !!(flags & ENTITY_FLAGS.XRAYED);
447
+ const highlighted = !!(flags & ENTITY_FLAGS.HIGHLIGHTED);
448
+ const selected = !!(flags & ENTITY_FLAGS.SELECTED);
449
+ const edges = !!(flags & ENTITY_FLAGS.EDGES);
450
+ const pickable = !!(flags & ENTITY_FLAGS.PICKABLE);
451
+ const culled = !!(flags & ENTITY_FLAGS.CULLED);
452
+
453
+ let colorFlag;
454
+ if (!visible || culled || xrayed
455
+ || (highlighted && !this.model.scene.highlightMaterial.glowThrough)
456
+ || (selected && !this.model.scene.selectedMaterial.glowThrough)) {
457
+ colorFlag = RENDER_PASSES.NOT_RENDERED;
458
+ } else {
459
+ if (meshTransparent) {
460
+ colorFlag = RENDER_PASSES.COLOR_TRANSPARENT;
461
+ } else {
462
+ colorFlag = RENDER_PASSES.COLOR_OPAQUE;
463
+ }
464
+ }
465
+
466
+ let silhouetteFlag;
467
+ if (!visible || culled) {
468
+ silhouetteFlag = RENDER_PASSES.NOT_RENDERED;
469
+ } else if (selected) {
470
+ silhouetteFlag = RENDER_PASSES.SILHOUETTE_SELECTED;
471
+ } else if (highlighted) {
472
+ silhouetteFlag = RENDER_PASSES.SILHOUETTE_HIGHLIGHTED;
473
+ } else if (xrayed) {
474
+ silhouetteFlag = RENDER_PASSES.SILHOUETTE_XRAYED;
475
+ } else {
476
+ silhouetteFlag = RENDER_PASSES.NOT_RENDERED;
477
+ }
478
+
479
+ let edgeFlag = 0;
480
+ if (!visible || culled) {
481
+ edgeFlag = RENDER_PASSES.NOT_RENDERED;
482
+ } else if (selected) {
483
+ edgeFlag = RENDER_PASSES.EDGES_SELECTED;
484
+ } else if (highlighted) {
485
+ edgeFlag = RENDER_PASSES.EDGES_HIGHLIGHTED;
486
+ } else if (xrayed) {
487
+ edgeFlag = RENDER_PASSES.EDGES_XRAYED;
488
+ } else if (edges) {
489
+ if (meshTransparent) {
490
+ edgeFlag = RENDER_PASSES.EDGES_COLOR_TRANSPARENT;
491
+ } else {
492
+ edgeFlag = RENDER_PASSES.EDGES_COLOR_OPAQUE;
493
+ }
494
+ } else {
495
+ edgeFlag = RENDER_PASSES.NOT_RENDERED;
496
+ }
497
+
498
+ let pickFlag = (visible && !culled && pickable) ? RENDER_PASSES.PICK : RENDER_PASSES.NOT_RENDERED;
499
+
500
+ const clippableFlag = !!(flags & ENTITY_FLAGS.CLIPPABLE) ? 1 : 0;
501
+
502
+ let vertFlag = 0;
503
+ vertFlag |= colorFlag;
504
+ vertFlag |= silhouetteFlag << 4;
505
+ vertFlag |= edgeFlag << 8;
506
+ vertFlag |= pickFlag << 12;
507
+ vertFlag |= clippableFlag << 16;
508
+
509
+ tempFloat32[0] = vertFlag;
510
+
511
+ this._state.flagsBuf.setData(tempFloat32, portionId);
512
+ }
513
+
514
+ setOffset(portionId, offset) {
515
+ if (!this._finalized) {
516
+ throw "Not finalized";
517
+ }
518
+ if (!this.model.scene.entityOffsetsEnabled) {
519
+ this.model.error("Entity#offset not enabled for this Viewer"); // See Viewer entityOffsetsEnabled
520
+ return;
521
+ }
522
+ tempVec3fa[0] = offset[0];
523
+ tempVec3fa[1] = offset[1];
524
+ tempVec3fa[2] = offset[2];
525
+ this._state.offsetsBuf.setData(tempVec3fa, portionId * 3, 3);
526
+ }
527
+
528
+ setMatrix(portionId, matrix) {
529
+
530
+ ////////////////////////////////////////
531
+ // TODO: Update portion matrix
532
+ ////////////////////////////////////////
533
+
534
+ if (!this._finalized) {
535
+ throw "Not finalized";
536
+ }
537
+ const offset = portionId * 4;
538
+
539
+ tempFloat32Vec4[0] = matrix[0];
540
+ tempFloat32Vec4[1] = matrix[4];
541
+ tempFloat32Vec4[2] = matrix[8];
542
+ tempFloat32Vec4[3] = matrix[12];
543
+
544
+ this._state.modelMatrixCol0Buf.setData(tempFloat32Vec4, offset);
545
+
546
+ tempFloat32Vec4[0] = matrix[1];
547
+ tempFloat32Vec4[1] = matrix[5];
548
+ tempFloat32Vec4[2] = matrix[9];
549
+ tempFloat32Vec4[3] = matrix[13];
550
+
551
+ this._state.modelMatrixCol1Buf.setData(tempFloat32Vec4, offset);
552
+
553
+ tempFloat32Vec4[0] = matrix[2];
554
+ tempFloat32Vec4[1] = matrix[6];
555
+ tempFloat32Vec4[2] = matrix[10];
556
+ tempFloat32Vec4[3] = matrix[14];
557
+
558
+ this._state.modelMatrixCol2Buf.setData(tempFloat32Vec4, offset);
559
+ }
560
+
561
+ // ---------------------- NORMAL RENDERING -----------------------------------
562
+
563
+ drawColorOpaque(renderFlags, frameCtx) {
564
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numTransparentLayerPortions === this._numPortions || this._numXRayedLayerPortions === this._numPortions) {
565
+ return;
566
+ }
567
+
568
+ if (this._renderers.colorRenderer) {
569
+ this._renderers.colorRenderer.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
570
+ }
571
+ }
572
+
573
+ drawColorTransparent(renderFlags, frameCtx) {
574
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numTransparentLayerPortions === 0 || this._numXRayedLayerPortions === this._numPortions) {
575
+ return;
576
+ }
577
+ if (this._renderers.colorRenderer) {
578
+ this._renderers.colorRenderer.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_TRANSPARENT);
579
+ }
580
+ }
581
+
582
+ // ---------------------- RENDERING SAO POST EFFECT TARGETS --------------
583
+
584
+ drawDepth(renderFlags, frameCtx) {
585
+ }
586
+
587
+ drawNormals(renderFlags, frameCtx) {
588
+ }
589
+
590
+ // ---------------------- EMPHASIS RENDERING -----------------------------------
591
+
592
+ drawSilhouetteXRayed(renderFlags, frameCtx) {
593
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numXRayedLayerPortions === 0) {
594
+ return;
595
+ }
596
+ if (this._renderers.silhouetteRenderer) {
597
+ this._renderers.silhouetteRenderer.drawLayer(frameCtx, this, RENDER_PASSES.SILHOUETTE_XRAYED);
598
+ }
599
+ }
600
+
601
+ drawSilhouetteHighlighted(renderFlags, frameCtx) {
602
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numHighlightedLayerPortions === 0) {
603
+ return;
604
+ }
605
+ if (this._renderers.silhouetteRenderer) {
606
+ this._renderers.silhouetteRenderer.drawLayer(frameCtx, this, RENDER_PASSES.SILHOUETTE_HIGHLIGHTED);
607
+ }
608
+ }
609
+
610
+ drawSilhouetteSelected(renderFlags, frameCtx) {
611
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numSelectedLayerPortions === 0) {
612
+ return;
613
+ }
614
+ if (this._renderers.silhouetteRenderer) {
615
+ this._renderers.silhouetteRenderer.drawLayer(frameCtx, this, RENDER_PASSES.SILHOUETTE_SELECTED);
616
+ }
617
+ }
618
+
619
+ // ---------------------- EDGES RENDERING -----------------------------------
620
+
621
+ drawEdgesColorOpaque(renderFlags, frameCtx) {
622
+ }
623
+
624
+ drawEdgesColorTransparent(renderFlags, frameCtx) {
625
+ }
626
+
627
+ drawEdgesXRayed(renderFlags, frameCtx) {
628
+ }
629
+
630
+ drawEdgesHighlighted(renderFlags, frameCtx) {
631
+ }
632
+
633
+ drawEdgesSelected(renderFlags, frameCtx) {
634
+ }
635
+
636
+
637
+ drawSnapInit(renderFlags, frameCtx) {
638
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0) {
639
+ return;
640
+ }
641
+ if (this._renderers.snapInitRenderer) {
642
+ this._renderers.snapInitRenderer.drawLayer(frameCtx, this, RENDER_PASSES.PICK);
643
+ }
644
+ }
645
+
646
+ drawSnap(renderFlags, frameCtx) {
647
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0) {
648
+ return;
649
+ }
650
+ if (this._renderers.snapRenderer) {
651
+ this._renderers.snapRenderer.drawLayer(frameCtx, this, RENDER_PASSES.PICK);
652
+ }
653
+ }
654
+
655
+ // ---------------------- OCCLUSION CULL RENDERING -----------------------------------
656
+
657
+ drawOcclusion(renderFlags, frameCtx) {
658
+ }
659
+
660
+ // ---------------------- SHADOW BUFFER RENDERING -----------------------------------
661
+
662
+ drawShadow(renderFlags, frameCtx) {
663
+ }
664
+
665
+ //---- PICKING ----------------------------------------------------------------------------------------------------
666
+
667
+ drawPickMesh(renderFlags, frameCtx) {
668
+ }
669
+
670
+ drawPickDepths(renderFlags, frameCtx) {
671
+ }
672
+
673
+ drawPickNormals(renderFlags, frameCtx) {
674
+ }
675
+
676
+
677
+ destroy() {
678
+ const state = this._state;
679
+ if (state.positionsBuf) {
680
+ state.positionsBuf.destroy();
681
+ state.positionsBuf = null;
682
+ }
683
+ if (state.colorsBuf) {
684
+ state.colorsBuf.destroy();
685
+ state.colorsBuf = null;
686
+ }
687
+ if (state.flagsBuf) {
688
+ state.flagsBuf.destroy();
689
+ state.flagsBuf = null;
690
+ }
691
+ if (state.offsetsBuf) {
692
+ state.offsetsBuf.destroy();
693
+ state.offsetsBuf = null;
694
+ }
695
+ if (state.modelMatrixCol0Buf) {
696
+ state.modelMatrixCol0Buf.destroy();
697
+ state.modelMatrixCol0Buf = null;
698
+ }
699
+ if (state.modelMatrixCol1Buf) {
700
+ state.modelMatrixCol1Buf.destroy();
701
+ state.modelMatrixCol1Buf = null;
702
+ }
703
+ if (state.modelMatrixCol2Buf) {
704
+ state.modelMatrixCol2Buf.destroy();
705
+ state.modelMatrixCol2Buf = null;
706
+ }
707
+ state.destroy();
708
+ }
709
+ }
710
+
711
+ export {VBOInstancingLinesLayer};