@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,733 @@
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/VBOInstancingPointsRenderers.js";
8
+
9
+ const tempUint8Vec4 = new Uint8Array(4);
10
+ const tempFloat32 = new Float32Array(1);
11
+ const tempVec3fa = new Float32Array(3);
12
+
13
+ const tempFloat32Vec4 = new Float32Array(4);
14
+
15
+ /**
16
+ * @private
17
+ */
18
+ export class VBOInstancingPointsLayer {
19
+
20
+ /**
21
+ * @param cfg
22
+ * @param cfg.layerIndex
23
+ * @param cfg.model
24
+ * @param cfg.geometry
25
+ * @param cfg.material
26
+ * @param cfg.origin
27
+ */
28
+ constructor(cfg) {
29
+
30
+ // console.info("VBOInstancingPointsLayer");
31
+
32
+ /**
33
+ * Owner model
34
+ * @type {VBOSceneModel}
35
+ */
36
+ this.model = cfg.model;
37
+
38
+ /**
39
+ * Shared material
40
+ * @type {VBOSceneModelGeometry}
41
+ */
42
+ this.material = cfg.material;
43
+
44
+ /**
45
+ * State sorting key.
46
+ * @type {string}
47
+ */
48
+ this.sortId = "PointsInstancingLayer";
49
+
50
+ /**
51
+ * Index of this InstancingLayer in VBOSceneModel#_layerList
52
+ * @type {Number}
53
+ */
54
+ this.layerIndex = cfg.layerIndex;
55
+
56
+ this._renderers = getRenderers(cfg.model.scene);
57
+ this._aabb = math.collapseAABB3();
58
+
59
+ this._state = new RenderState({
60
+ obb: math.OBB3(),
61
+ numInstances: 0,
62
+ origin: cfg.origin ? math.vec3(cfg.origin) : null,
63
+ geometry: cfg.geometry,
64
+ positionsDecodeMatrix: cfg.geometry.positionsDecodeMatrix, // So we can null the geometry for GC
65
+ colorsBuf: null,
66
+ flagsBuf: null,
67
+ offsetsBuf: null,
68
+ modelMatrixCol0Buf: null,
69
+ modelMatrixCol1Buf: null,
70
+ modelMatrixCol2Buf: null,
71
+ pickColorsBuf: null
72
+ });
73
+
74
+ // These counts are used to avoid unnecessary render passes
75
+ this._numPortions = 0;
76
+ this._numVisibleLayerPortions = 0;
77
+ this._numTransparentLayerPortions = 0;
78
+ this._numXRayedLayerPortions = 0;
79
+ this._numHighlightedLayerPortions = 0;
80
+ this._numSelectedLayerPortions = 0;
81
+ this._numClippableLayerPortions = 0;
82
+ this._numEdgesLayerPortions = 0;
83
+ this._numPickableLayerPortions = 0;
84
+ this._numCulledLayerPortions = 0;
85
+
86
+ /** @private */
87
+ this.numIndices = cfg.geometry.numIndices;
88
+
89
+ // Per-instance arrays
90
+ this._pickColors = [];
91
+ this._offsets = [];
92
+
93
+ // Modeling matrix per instance, array for each column
94
+ this._modelMatrixCol0 = [];
95
+ this._modelMatrixCol1 = [];
96
+ this._modelMatrixCol2 = [];
97
+
98
+ this._portions = [];
99
+ this._meshes = [];
100
+ this._aabb = math.collapseAABB3();
101
+ this.aabbDirty = true;
102
+
103
+ this._finalized = false;
104
+
105
+ /**
106
+ * The type of primitives in this layer.
107
+ */
108
+ this.primitive = cfg.geometry.primitive;
109
+ }
110
+
111
+ get aabb() {
112
+ if (this.aabbDirty) {
113
+ math.collapseAABB3(this._aabb);
114
+ for (let i = 0, len = this._meshes.length; i < len; i++) {
115
+ math.expandAABB3(this._aabb, this._meshes[i].aabb);
116
+ }
117
+ this.aabbDirty = false;
118
+ }
119
+ return this._aabb;
120
+ }
121
+
122
+ /**
123
+ * Creates a new portion within this InstancingLayer, returns the new portion ID.
124
+ *
125
+ * The portion will instance this InstancingLayer's geometry.
126
+ *
127
+ * Gives the portion the specified color and matrix.
128
+ *
129
+ * @param mesh The SceneModelMesh that owns the portion
130
+ * @param cfg Portion params
131
+ * @param cfg.meshMatrix Flat float 4x4 matrix.
132
+ * @param [cfg.worldMatrix] Flat float 4x4 matrix.
133
+ * @param cfg.pickColor Quantized pick color
134
+ * @returns {number} Portion ID.
135
+ */
136
+ createPortion(mesh, cfg) {
137
+
138
+ const meshMatrix = cfg.meshMatrix;
139
+ const pickColor = cfg.pickColor;
140
+
141
+ if (this._finalized) {
142
+ throw "Already finalized";
143
+ }
144
+
145
+ if (this.model.scene.entityOffsetsEnabled) {
146
+ this._offsets.push(0);
147
+ this._offsets.push(0);
148
+ this._offsets.push(0);
149
+ }
150
+
151
+ this._modelMatrixCol0.push(meshMatrix[0]);
152
+ this._modelMatrixCol0.push(meshMatrix[4]);
153
+ this._modelMatrixCol0.push(meshMatrix[8]);
154
+ this._modelMatrixCol0.push(meshMatrix[12]);
155
+
156
+ this._modelMatrixCol1.push(meshMatrix[1]);
157
+ this._modelMatrixCol1.push(meshMatrix[5]);
158
+ this._modelMatrixCol1.push(meshMatrix[9]);
159
+ this._modelMatrixCol1.push(meshMatrix[13]);
160
+
161
+ this._modelMatrixCol2.push(meshMatrix[2]);
162
+ this._modelMatrixCol2.push(meshMatrix[6]);
163
+ this._modelMatrixCol2.push(meshMatrix[10]);
164
+ this._modelMatrixCol2.push(meshMatrix[14]);
165
+
166
+ // Per-instance pick colors
167
+
168
+ this._pickColors.push(pickColor[0]);
169
+ this._pickColors.push(pickColor[1]);
170
+ this._pickColors.push(pickColor[2]);
171
+ this._pickColors.push(pickColor[3]);
172
+
173
+ this._state.numInstances++;
174
+
175
+ const portionId = this._portions.length;
176
+ this._portions.push({});
177
+
178
+ this._numPortions++;
179
+ this.model.numPortions++;
180
+ this._meshes.push(mesh);
181
+ return portionId;
182
+ }
183
+
184
+ finalize() {
185
+ if (this._finalized) {
186
+ throw "Already finalized";
187
+ }
188
+ const gl = this.model.scene.canvas.gl;
189
+ const flagsLength = this._pickColors.length / 4;
190
+ const state = this._state;
191
+ const geometry = state.geometry;
192
+ if (flagsLength > 0) {
193
+ // Because we only build flags arrays here,
194
+ // get their length from the colors array
195
+ let notNormalized = false;
196
+ state.flagsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(flagsLength), flagsLength, 1, gl.DYNAMIC_DRAW, notNormalized);
197
+ }
198
+ if (this.model.scene.entityOffsetsEnabled) {
199
+ if (this._offsets.length > 0) {
200
+ const notNormalized = false;
201
+ state.offsetsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._offsets), this._offsets.length, 3, gl.DYNAMIC_DRAW, notNormalized);
202
+ this._offsets = []; // Release memory
203
+ }
204
+ }
205
+ if (geometry.positionsCompressed && geometry.positionsCompressed.length > 0) {
206
+ const normalized = false;
207
+ state.positionsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, geometry.positionsCompressed, geometry.positionsCompressed.length, 3, gl.STATIC_DRAW, normalized);
208
+ state.positionsDecodeMatrix = math.mat4(geometry.positionsDecodeMatrix);
209
+ }
210
+ if (geometry.colorsCompressed && geometry.colorsCompressed.length > 0) {
211
+ const colorsCompressed = new Uint8Array(geometry.colorsCompressed);
212
+ const notNormalized = false;
213
+ state.colorsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, colorsCompressed, colorsCompressed.length, 4, gl.STATIC_DRAW, notNormalized);
214
+ }
215
+ if (this._modelMatrixCol0.length > 0) {
216
+ const normalized = false;
217
+ state.modelMatrixCol0Buf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._modelMatrixCol0), this._modelMatrixCol0.length, 4, gl.STATIC_DRAW, normalized);
218
+ state.modelMatrixCol1Buf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._modelMatrixCol1), this._modelMatrixCol1.length, 4, gl.STATIC_DRAW, normalized);
219
+ state.modelMatrixCol2Buf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Float32Array(this._modelMatrixCol2), this._modelMatrixCol2.length, 4, gl.STATIC_DRAW, normalized);
220
+ this._modelMatrixCol0 = [];
221
+ this._modelMatrixCol1 = [];
222
+ this._modelMatrixCol2 = [];
223
+ }
224
+ if (this._pickColors.length > 0) {
225
+ const normalized = false;
226
+ state.pickColorsBuf = new ArrayBuf(gl, gl.ARRAY_BUFFER, new Uint8Array(this._pickColors), this._pickColors.length, 4, gl.STATIC_DRAW, normalized);
227
+ this._pickColors = []; // Release memory
228
+ }
229
+ state.geometry = null;
230
+ this._finalized = true;
231
+ }
232
+
233
+ // The following setters are called by VBOSceneModelMesh, in turn called by VBOSceneModelNode, only after the layer is finalized.
234
+ // It's important that these are called after finalize() in order to maintain integrity of counts like _numVisibleLayerPortions etc.
235
+
236
+ initFlags(portionId, flags, meshTransparent) {
237
+ if (flags & ENTITY_FLAGS.VISIBLE) {
238
+ this._numVisibleLayerPortions++;
239
+ this.model.numVisibleLayerPortions++;
240
+ }
241
+ if (flags & ENTITY_FLAGS.HIGHLIGHTED) {
242
+ this._numHighlightedLayerPortions++;
243
+ this.model.numHighlightedLayerPortions++;
244
+ }
245
+ if (flags & ENTITY_FLAGS.XRAYED) {
246
+ this._numXRayedLayerPortions++;
247
+ this.model.numXRayedLayerPortions++;
248
+ }
249
+ if (flags & ENTITY_FLAGS.SELECTED) {
250
+ this._numSelectedLayerPortions++;
251
+ this.model.numSelectedLayerPortions++;
252
+ }
253
+ if (flags & ENTITY_FLAGS.CLIPPABLE) {
254
+ this._numClippableLayerPortions++;
255
+ this.model.numClippableLayerPortions++;
256
+ }
257
+ if (flags & ENTITY_FLAGS.EDGES) {
258
+ this._numEdgesLayerPortions++;
259
+ this.model.numEdgesLayerPortions++;
260
+ }
261
+ if (flags & ENTITY_FLAGS.PICKABLE) {
262
+ this._numPickableLayerPortions++;
263
+ this.model.numPickableLayerPortions++;
264
+ }
265
+ if (flags & ENTITY_FLAGS.CULLED) {
266
+ this._numCulledLayerPortions++;
267
+ this.model.numCulledLayerPortions++;
268
+ }
269
+ if (meshTransparent) {
270
+ this._numTransparentLayerPortions++;
271
+ this.model.numTransparentLayerPortions++;
272
+ }
273
+ this._setFlags(portionId, flags, meshTransparent);
274
+ }
275
+
276
+ setVisible(portionId, flags, meshTransparent) {
277
+ if (!this._finalized) {
278
+ throw "Not finalized";
279
+ }
280
+ if (flags & ENTITY_FLAGS.VISIBLE) {
281
+ this._numVisibleLayerPortions++;
282
+ this.model.numVisibleLayerPortions++;
283
+ } else {
284
+ this._numVisibleLayerPortions--;
285
+ this.model.numVisibleLayerPortions--;
286
+ }
287
+ this._setFlags(portionId, flags, meshTransparent);
288
+ }
289
+
290
+ setHighlighted(portionId, flags, meshTransparent) {
291
+ if (!this._finalized) {
292
+ throw "Not finalized";
293
+ }
294
+ if (flags & ENTITY_FLAGS.HIGHLIGHTED) {
295
+ this._numHighlightedLayerPortions++;
296
+ this.model.numHighlightedLayerPortions++;
297
+ } else {
298
+ this._numHighlightedLayerPortions--;
299
+ this.model.numHighlightedLayerPortions--;
300
+ }
301
+ this._setFlags(portionId, flags, meshTransparent);
302
+ }
303
+
304
+ setXRayed(portionId, flags, meshTransparent) {
305
+ if (!this._finalized) {
306
+ throw "Not finalized";
307
+ }
308
+ if (flags & ENTITY_FLAGS.XRAYED) {
309
+ this._numXRayedLayerPortions++;
310
+ this.model.numXRayedLayerPortions++;
311
+ } else {
312
+ this._numXRayedLayerPortions--;
313
+ this.model.numXRayedLayerPortions--;
314
+ }
315
+ this._setFlags(portionId, flags, meshTransparent);
316
+ }
317
+
318
+ setSelected(portionId, flags, meshTransparent) {
319
+ if (!this._finalized) {
320
+ throw "Not finalized";
321
+ }
322
+ if (flags & ENTITY_FLAGS.SELECTED) {
323
+ this._numSelectedLayerPortions++;
324
+ this.model.numSelectedLayerPortions++;
325
+ } else {
326
+ this._numSelectedLayerPortions--;
327
+ this.model.numSelectedLayerPortions--;
328
+ }
329
+ this._setFlags(portionId, flags, meshTransparent);
330
+ }
331
+
332
+ setEdges(portionId, flags, meshTransparent) {
333
+ if (!this._finalized) {
334
+ throw "Not finalized";
335
+ }
336
+ if (flags & ENTITY_FLAGS.EDGES) {
337
+ this._numEdgesLayerPortions++;
338
+ this.model.numEdgesLayerPortions++;
339
+ } else {
340
+ this._numEdgesLayerPortions--;
341
+ this.model.numEdgesLayerPortions--;
342
+ }
343
+ this._setFlags(portionId, flags, meshTransparent);
344
+ }
345
+
346
+ setClippable(portionId, flags) {
347
+ if (!this._finalized) {
348
+ throw "Not finalized";
349
+ }
350
+ if (flags & ENTITY_FLAGS.CLIPPABLE) {
351
+ this._numClippableLayerPortions++;
352
+ this.model.numClippableLayerPortions++;
353
+ } else {
354
+ this._numClippableLayerPortions--;
355
+ this.model.numClippableLayerPortions--;
356
+ }
357
+ this._setFlags(portionId, flags);
358
+ }
359
+
360
+ setCollidable(portionId, flags) {
361
+ if (!this._finalized) {
362
+ throw "Not finalized";
363
+ }
364
+ }
365
+
366
+ setPickable(portionId, flags, meshTransparent) {
367
+ if (!this._finalized) {
368
+ throw "Not finalized";
369
+ }
370
+ if (flags & ENTITY_FLAGS.PICKABLE) {
371
+ this._numPickableLayerPortions++;
372
+ this.model.numPickableLayerPortions++;
373
+ } else {
374
+ this._numPickableLayerPortions--;
375
+ this.model.numPickableLayerPortions--;
376
+ }
377
+ this._setFlags(portionId, flags, meshTransparent);
378
+ }
379
+
380
+ setCulled(portionId, flags, meshTransparent) {
381
+ if (!this._finalized) {
382
+ throw "Not finalized";
383
+ }
384
+ if (flags & ENTITY_FLAGS.CULLED) {
385
+ this._numCulledLayerPortions++;
386
+ this.model.numCulledLayerPortions++;
387
+ } else {
388
+ this._numCulledLayerPortions--;
389
+ this.model.numCulledLayerPortions--;
390
+ }
391
+ this._setFlags(portionId, flags, meshTransparent);
392
+ }
393
+
394
+ setColor(portionId, color) { // RGBA color is normalized as ints
395
+ if (!this._finalized) {
396
+ throw "Not finalized";
397
+ }
398
+ tempUint8Vec4[0] = color[0];
399
+ tempUint8Vec4[1] = color[1];
400
+ tempUint8Vec4[2] = color[2];
401
+ this._state.colorsBuf.setData(tempUint8Vec4, portionId * 3);
402
+ }
403
+
404
+ setTransparent(portionId, flags, transparent) {
405
+ if (transparent) {
406
+ this._numTransparentLayerPortions++;
407
+ this.model.numTransparentLayerPortions++;
408
+ } else {
409
+ this._numTransparentLayerPortions--;
410
+ this.model.numTransparentLayerPortions--;
411
+ }
412
+ this._setFlags(portionId, flags, transparent);
413
+ }
414
+
415
+ // setMatrix(portionId, matrix) {
416
+
417
+ ////////////////////////////////////////
418
+ // TODO: Update portion matrix
419
+ ////////////////////////////////////////
420
+ //
421
+ // if (!this._finalized) {
422
+ // throw "Not finalized";
423
+ // }
424
+ //
425
+ // var offset = portionId * 4;
426
+ //
427
+ // tempFloat32Vec4[0] = matrix[0];
428
+ // tempFloat32Vec4[1] = matrix[4];
429
+ // tempFloat32Vec4[2] = matrix[8];
430
+ // tempFloat32Vec4[3] = matrix[12];
431
+ //
432
+ // this._state.modelMatrixCol0Buf.setData(tempFloat32Vec4, offset);
433
+ //
434
+ // tempFloat32Vec4[0] = matrix[1];
435
+ // tempFloat32Vec4[1] = matrix[5];
436
+ // tempFloat32Vec4[2] = matrix[9];
437
+ // tempFloat32Vec4[3] = matrix[13];
438
+ //
439
+ // this._state.modelMatrixCol1Buf.setData(tempFloat32Vec4, offset);
440
+ //
441
+ // tempFloat32Vec4[0] = matrix[2];
442
+ // tempFloat32Vec4[1] = matrix[6];
443
+ // tempFloat32Vec4[2] = matrix[10];
444
+ // tempFloat32Vec4[3] = matrix[14];
445
+ //
446
+ // this._state.modelMatrixCol2Buf.setData(tempFloat32Vec4, offset);
447
+ // }
448
+
449
+ /**
450
+ * 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.
451
+ */
452
+ _setFlags(portionId, flags, meshTransparent) {
453
+
454
+ if (!this._finalized) {
455
+ throw "Not finalized";
456
+ }
457
+
458
+ const visible = !!(flags & ENTITY_FLAGS.VISIBLE);
459
+ const xrayed = !!(flags & ENTITY_FLAGS.XRAYED);
460
+ const highlighted = !!(flags & ENTITY_FLAGS.HIGHLIGHTED);
461
+ const selected = !!(flags & ENTITY_FLAGS.SELECTED);
462
+ const edges = !!(flags & ENTITY_FLAGS.EDGES);
463
+ const pickable = !!(flags & ENTITY_FLAGS.PICKABLE);
464
+ const culled = !!(flags & ENTITY_FLAGS.CULLED);
465
+
466
+ let colorFlag;
467
+ if (!visible || culled || xrayed
468
+ || (highlighted && !this.model.scene.highlightMaterial.glowThrough)
469
+ || (selected && !this.model.scene.selectedMaterial.glowThrough)) {
470
+ colorFlag = RENDER_PASSES.NOT_RENDERED;
471
+ } else {
472
+ if (meshTransparent) {
473
+ colorFlag = RENDER_PASSES.COLOR_TRANSPARENT;
474
+ } else {
475
+ colorFlag = RENDER_PASSES.COLOR_OPAQUE;
476
+ }
477
+ }
478
+
479
+ let silhouetteFlag;
480
+ if (!visible || culled) {
481
+ silhouetteFlag = RENDER_PASSES.NOT_RENDERED;
482
+ } else if (selected) {
483
+ silhouetteFlag = RENDER_PASSES.SILHOUETTE_SELECTED;
484
+ } else if (highlighted) {
485
+ silhouetteFlag = RENDER_PASSES.SILHOUETTE_HIGHLIGHTED;
486
+ } else if (xrayed) {
487
+ silhouetteFlag = RENDER_PASSES.SILHOUETTE_XRAYED;
488
+ } else {
489
+ silhouetteFlag = RENDER_PASSES.NOT_RENDERED;
490
+ }
491
+
492
+ let edgeFlag = 0;
493
+ if (!visible || culled) {
494
+ edgeFlag = RENDER_PASSES.NOT_RENDERED;
495
+ } else if (selected) {
496
+ edgeFlag = RENDER_PASSES.EDGES_SELECTED;
497
+ } else if (highlighted) {
498
+ edgeFlag = RENDER_PASSES.EDGES_HIGHLIGHTED;
499
+ } else if (xrayed) {
500
+ edgeFlag = RENDER_PASSES.EDGES_XRAYED;
501
+ } else if (edges) {
502
+ if (meshTransparent) {
503
+ edgeFlag = RENDER_PASSES.EDGES_COLOR_TRANSPARENT;
504
+ } else {
505
+ edgeFlag = RENDER_PASSES.EDGES_COLOR_OPAQUE;
506
+ }
507
+ } else {
508
+ edgeFlag = RENDER_PASSES.NOT_RENDERED;
509
+ }
510
+
511
+ let pickFlag = (visible && !culled && pickable) ? RENDER_PASSES.PICK : RENDER_PASSES.NOT_RENDERED;
512
+
513
+ const clippableFlag = !!(flags & ENTITY_FLAGS.CLIPPABLE) ? 255 : 0;
514
+
515
+ let vertFlag = 0;
516
+ vertFlag |= colorFlag;
517
+ vertFlag |= silhouetteFlag << 4;
518
+ vertFlag |= edgeFlag << 8;
519
+ vertFlag |= pickFlag << 12;
520
+ vertFlag |= clippableFlag << 16;
521
+
522
+ tempFloat32[0] = vertFlag;
523
+
524
+ this._state.flagsBuf.setData(tempFloat32, portionId);
525
+ }
526
+
527
+ setOffset(portionId, offset) {
528
+ if (!this._finalized) {
529
+ throw "Not finalized";
530
+ }
531
+ if (!this.model.scene.entityOffsetsEnabled) {
532
+ this.model.error("Entity#offset not enabled for this Viewer"); // See Viewer entityOffsetsEnabled
533
+ return;
534
+ }
535
+ tempVec3fa[0] = offset[0];
536
+ tempVec3fa[1] = offset[1];
537
+ tempVec3fa[2] = offset[2];
538
+ this._state.offsetsBuf.setData(tempVec3fa, portionId * 3);
539
+ }
540
+
541
+ setMatrix(portionId, matrix) {
542
+ if (!this._finalized) {
543
+ throw "Not finalized";
544
+ }
545
+ const offset = portionId * 4;
546
+
547
+ tempFloat32Vec4[0] = matrix[0];
548
+ tempFloat32Vec4[1] = matrix[4];
549
+ tempFloat32Vec4[2] = matrix[8];
550
+ tempFloat32Vec4[3] = matrix[12];
551
+
552
+ this._state.modelMatrixCol0Buf.setData(tempFloat32Vec4, offset);
553
+
554
+ tempFloat32Vec4[0] = matrix[1];
555
+ tempFloat32Vec4[1] = matrix[5];
556
+ tempFloat32Vec4[2] = matrix[9];
557
+ tempFloat32Vec4[3] = matrix[13];
558
+
559
+ this._state.modelMatrixCol1Buf.setData(tempFloat32Vec4, offset);
560
+
561
+ tempFloat32Vec4[0] = matrix[2];
562
+ tempFloat32Vec4[1] = matrix[6];
563
+ tempFloat32Vec4[2] = matrix[10];
564
+ tempFloat32Vec4[3] = matrix[14];
565
+
566
+ this._state.modelMatrixCol2Buf.setData(tempFloat32Vec4, offset);
567
+ }
568
+
569
+ // ---------------------- NORMAL RENDERING -----------------------------------
570
+
571
+ drawColorOpaque(renderFlags, frameCtx) {
572
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numTransparentLayerPortions === this._numPortions || this._numXRayedLayerPortions === this._numPortions) {
573
+ return;
574
+ }
575
+ if (this._renderers.colorRenderer) {
576
+ this._renderers.colorRenderer.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
577
+ }
578
+ }
579
+
580
+ drawColorTransparent(renderFlags, frameCtx) {
581
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numTransparentLayerPortions === 0 || this._numXRayedLayerPortions === this._numPortions) {
582
+ return;
583
+ }
584
+ if (this._renderers.colorRenderer) {
585
+ this._renderers.colorRenderer.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_TRANSPARENT);
586
+ }
587
+ }
588
+
589
+ // -- RENDERING SAO POST EFFECT TARGETS ----------------------------------------------------------------------------
590
+
591
+ drawDepth(renderFlags, frameCtx) {
592
+ }
593
+
594
+ drawNormals(renderFlags, frameCtx) {
595
+ }
596
+
597
+ // ---------------------- EMPHASIS RENDERING -----------------------------------
598
+
599
+ drawSilhouetteXRayed(renderFlags, frameCtx) {
600
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numXRayedLayerPortions === 0) {
601
+ return;
602
+ }
603
+ if (this._renderers.silhouetteRenderer) {
604
+ this._renderers.silhouetteRenderer.drawLayer(frameCtx, this, RENDER_PASSES.SILHOUETTE_XRAYED);
605
+ }
606
+ }
607
+
608
+ drawSilhouetteHighlighted(renderFlags, frameCtx) {
609
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numHighlightedLayerPortions === 0) {
610
+ return;
611
+ }
612
+ if (this._renderers.silhouetteRenderer) {
613
+ this._renderers.silhouetteRenderer.drawLayer(frameCtx, this, RENDER_PASSES.SILHOUETTE_HIGHLIGHTED);
614
+ }
615
+ }
616
+
617
+ drawSilhouetteSelected(renderFlags, frameCtx) {
618
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0 || this._numSelectedLayerPortions === 0) {
619
+ return;
620
+ }
621
+ if (this._renderers.silhouetteRenderer) {
622
+ this._renderers.silhouetteRenderer.drawLayer(frameCtx, this, RENDER_PASSES.SILHOUETTE_SELECTED);
623
+ }
624
+ }
625
+
626
+ //-- EDGES RENDERING -----------------------------------------------------------------------------------------------
627
+
628
+ drawEdgesColorOpaque(renderFlags, frameCtx) {
629
+ }
630
+
631
+ drawEdgesColorTransparent(renderFlags, frameCtx) {
632
+ }
633
+
634
+ drawEdgesHighlighted(renderFlags, frameCtx) {
635
+ }
636
+
637
+ drawEdgesSelected(renderFlags, frameCtx) {
638
+ }
639
+
640
+ drawEdgesXRayed(renderFlags, frameCtx) {
641
+ }
642
+
643
+ // ---------------------- OCCLUSION CULL RENDERING -----------------------------------
644
+
645
+ drawOcclusion(renderFlags, frameCtx) {
646
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0) {
647
+ return;
648
+ }
649
+ if (this._renderers.occlusionRenderer) {
650
+ // Only opaque, filled objects can be occluders
651
+ this._renderers.occlusionRenderer.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
652
+ }
653
+ }
654
+
655
+ // ---------------------- SHADOW BUFFER RENDERING -----------------------------------
656
+
657
+ drawShadow(renderFlags, frameCtx) {
658
+ }
659
+
660
+ //---- PICKING ----------------------------------------------------------------------------------------------------
661
+
662
+ drawPickMesh(renderFlags, frameCtx) {
663
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0) {
664
+ return;
665
+ }
666
+ if (this._renderers.pickMeshRenderer) {
667
+ this._renderers.pickMeshRenderer.drawLayer(frameCtx, this, RENDER_PASSES.PICK);
668
+ }
669
+ }
670
+
671
+ drawPickDepths(renderFlags, frameCtx) {
672
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0) {
673
+ return;
674
+ }
675
+ if (this._renderers.pickDepthRenderer) {
676
+ this._renderers.pickDepthRenderer.drawLayer(frameCtx, this, RENDER_PASSES.PICK);
677
+ }
678
+ }
679
+
680
+ drawPickNormals(renderFlags, frameCtx) {
681
+ }
682
+
683
+ drawSnapInit(renderFlags, frameCtx) {
684
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0) {
685
+ return;
686
+ }
687
+ if (this._renderers.snapInitRenderer) {
688
+ this._renderers.snapInitRenderer.drawLayer(frameCtx, this, RENDER_PASSES.PICK);
689
+ }
690
+ }
691
+
692
+ drawSnap(renderFlags, frameCtx) {
693
+ if (this._numCulledLayerPortions === this._numPortions || this._numVisibleLayerPortions === 0) {
694
+ return;
695
+ }
696
+ if (this._renderers.snapRenderer) {
697
+ this._renderers.snapRenderer.drawLayer(frameCtx, this, RENDER_PASSES.PICK);
698
+ }
699
+ }
700
+
701
+ destroy() {
702
+ const state = this._state;
703
+ if (state.colorsBuf) {
704
+ state.colorsBuf.destroy();
705
+ state.colorsBuf = null;
706
+ }
707
+ if (state.flagsBuf) {
708
+ state.flagsBuf.destroy();
709
+ state.flagsBuf = null;
710
+ }
711
+ if (state.offsetsBuf) {
712
+ state.offsetsBuf.destroy();
713
+ state.offsetsBuf = null;
714
+ }
715
+ if (state.modelMatrixCol0Buf) {
716
+ state.modelMatrixCol0Buf.destroy();
717
+ state.modelMatrixCol0Buf = null;
718
+ }
719
+ if (state.modelMatrixCol1Buf) {
720
+ state.modelMatrixCol1Buf.destroy();
721
+ state.modelMatrixCol1Buf = null;
722
+ }
723
+ if (state.modelMatrixCol2Buf) {
724
+ state.modelMatrixCol2Buf.destroy();
725
+ state.modelMatrixCol2Buf = null;
726
+ }
727
+ if (state.pickColorsBuf) {
728
+ state.pickColorsBuf.destroy();
729
+ state.pickColorsBuf = null;
730
+ }
731
+ state.destroy();
732
+ }
733
+ }