@xeokit/xeokit-sdk 2.4.0-alpha-81 → 2.4.0-alpha-83

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 (390) hide show
  1. package/dist/xeokit-sdk.cjs.js +5 -1
  2. package/dist/xeokit-sdk.es.js +5 -1
  3. package/dist/xeokit-sdk.es5.js +1 -1
  4. package/dist/xeokit-sdk.min.cjs.js +1 -1
  5. package/dist/xeokit-sdk.min.es.js +1 -1
  6. package/dist/xeokit-sdk.min.es5.js +1 -1
  7. package/package.json +2 -1
  8. package/src/extras/ContextMenu/ContextMenu.js +907 -0
  9. package/src/extras/ContextMenu/index.js +1 -0
  10. package/src/extras/index.js +1 -0
  11. package/src/index.js +3 -0
  12. package/src/plugins/AngleMeasurementsPlugin/AngleMeasurement.js +658 -0
  13. package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsControl.js +418 -0
  14. package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsPlugin.js +400 -0
  15. package/src/plugins/AngleMeasurementsPlugin/index.js +1 -0
  16. package/src/plugins/AnnotationsPlugin/Annotation.js +368 -0
  17. package/src/plugins/AnnotationsPlugin/AnnotationsPlugin.js +583 -0
  18. package/src/plugins/AnnotationsPlugin/index.js +1 -0
  19. package/src/plugins/AxisGizmoPlugin/AxisGizmoPlugin.js +333 -0
  20. package/src/plugins/AxisGizmoPlugin/index.js +1 -0
  21. package/src/plugins/BCFViewpointsPlugin/BCFViewpointsPlugin.js +955 -0
  22. package/src/plugins/BCFViewpointsPlugin/index.js +1 -0
  23. package/src/plugins/CityJSONLoaderPlugin/CityJSONDefaultDataSource.js +29 -0
  24. package/src/plugins/CityJSONLoaderPlugin/CityJSONLoaderPlugin.js +751 -0
  25. package/src/plugins/CityJSONLoaderPlugin/index.js +1 -0
  26. package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.js +870 -0
  27. package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsControl.js +376 -0
  28. package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsPlugin.js +454 -0
  29. package/src/plugins/DistanceMeasurementsPlugin/index.js +1 -0
  30. package/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesControl.js +639 -0
  31. package/src/plugins/FaceAlignedSectionPlanesPlugin/FaceAlignedSectionPlanesPlugin.js +436 -0
  32. package/src/plugins/FaceAlignedSectionPlanesPlugin/Overview.js +247 -0
  33. package/src/plugins/FaceAlignedSectionPlanesPlugin/Plane.js +167 -0
  34. package/src/plugins/FaceAlignedSectionPlanesPlugin/index.js +1 -0
  35. package/src/plugins/FastNavPlugin/FastNavPlugin.js +429 -0
  36. package/src/plugins/FastNavPlugin/index.js +1 -0
  37. package/src/plugins/GLTFLoaderPlugin/GLTFDefaultDataSource.js +139 -0
  38. package/src/plugins/GLTFLoaderPlugin/GLTFLoaderPlugin.js +421 -0
  39. package/src/plugins/GLTFLoaderPlugin/GLTFSceneModelLoader.js +669 -0
  40. package/src/plugins/GLTFLoaderPlugin/index.js +2 -0
  41. package/src/plugins/LASLoaderPlugin/LASDefaultDataSource.js +58 -0
  42. package/src/plugins/LASLoaderPlugin/LASLoaderPlugin.js +518 -0
  43. package/src/plugins/LASLoaderPlugin/index.js +1 -0
  44. package/src/plugins/LASLoaderPlugin/loadLASHeader.js +183 -0
  45. package/src/plugins/NavCubePlugin/CubeTextureCanvas.js +289 -0
  46. package/src/plugins/NavCubePlugin/NavCubePlugin.js +752 -0
  47. package/src/plugins/NavCubePlugin/index.js +1 -0
  48. package/src/plugins/OBJLoaderPlugin/OBJLoaderPlugin.js +145 -0
  49. package/src/plugins/OBJLoaderPlugin/OBJSceneGraphLoader.js +777 -0
  50. package/src/plugins/OBJLoaderPlugin/index.js +1 -0
  51. package/src/plugins/STLLoaderPlugin/STLDefaultDataSource.js +33 -0
  52. package/src/plugins/STLLoaderPlugin/STLLoaderPlugin.js +274 -0
  53. package/src/plugins/STLLoaderPlugin/STLSceneGraphLoader.js +313 -0
  54. package/src/plugins/STLLoaderPlugin/index.js +2 -0
  55. package/src/plugins/SectionPlanesPlugin/Control.js +1328 -0
  56. package/src/plugins/SectionPlanesPlugin/Overview.js +249 -0
  57. package/src/plugins/SectionPlanesPlugin/Plane.js +169 -0
  58. package/src/plugins/SectionPlanesPlugin/SectionPlanesPlugin.js +404 -0
  59. package/src/plugins/SectionPlanesPlugin/index.js +1 -0
  60. package/src/plugins/SkyboxesPlugin/SkyboxesPlugin.js +134 -0
  61. package/src/plugins/SkyboxesPlugin/index.js +1 -0
  62. package/src/plugins/StoreyViewsPlugin/IFCStoreyPlanObjectStates.js +77 -0
  63. package/src/plugins/StoreyViewsPlugin/Storey.js +61 -0
  64. package/src/plugins/StoreyViewsPlugin/StoreyMap.js +57 -0
  65. package/src/plugins/StoreyViewsPlugin/StoreyViewsPlugin.js +825 -0
  66. package/src/plugins/StoreyViewsPlugin/index.js +1 -0
  67. package/src/plugins/TreeViewPlugin/TreeViewNode.js +97 -0
  68. package/src/plugins/TreeViewPlugin/TreeViewPlugin.js +1424 -0
  69. package/src/plugins/TreeViewPlugin/index.js +1 -0
  70. package/src/plugins/ViewCullPlugin/ViewCullPlugin.js +295 -0
  71. package/src/plugins/ViewCullPlugin/index.js +1 -0
  72. package/src/plugins/WebIFCLoaderPlugin/WebIFCDefaultDataSource.js +58 -0
  73. package/src/plugins/WebIFCLoaderPlugin/WebIFCLoaderPlugin.js +942 -0
  74. package/src/plugins/WebIFCLoaderPlugin/index.js +1 -0
  75. package/src/plugins/XKTLoaderPlugin/XKTDefaultDataSource.js +95 -0
  76. package/src/plugins/XKTLoaderPlugin/XKTLoaderPlugin.js +1107 -0
  77. package/src/plugins/XKTLoaderPlugin/index.js +2 -0
  78. package/src/plugins/XKTLoaderPlugin/parsers/ParserV1.js +169 -0
  79. package/src/plugins/XKTLoaderPlugin/parsers/ParserV10.js +656 -0
  80. package/src/plugins/XKTLoaderPlugin/parsers/ParserV2.js +230 -0
  81. package/src/plugins/XKTLoaderPlugin/parsers/ParserV3.js +223 -0
  82. package/src/plugins/XKTLoaderPlugin/parsers/ParserV4.js +283 -0
  83. package/src/plugins/XKTLoaderPlugin/parsers/ParserV5.js +246 -0
  84. package/src/plugins/XKTLoaderPlugin/parsers/ParserV6.js +301 -0
  85. package/src/plugins/XKTLoaderPlugin/parsers/ParserV7.js +439 -0
  86. package/src/plugins/XKTLoaderPlugin/parsers/ParserV8.js +563 -0
  87. package/src/plugins/XKTLoaderPlugin/parsers/ParserV9.js +518 -0
  88. package/src/plugins/XKTLoaderPlugin/parsers/lib/pako.js +2 -0
  89. package/src/plugins/XML3DLoaderPlugin/XML3DLoaderPlugin.js +238 -0
  90. package/src/plugins/XML3DLoaderPlugin/XML3DSceneGraphLoader.js +1279 -0
  91. package/src/plugins/XML3DLoaderPlugin/index.js +1 -0
  92. package/src/plugins/XML3DLoaderPlugin/zipjs/.jshintrc +11 -0
  93. package/src/plugins/XML3DLoaderPlugin/zipjs/deflate.js +2060 -0
  94. package/src/plugins/XML3DLoaderPlugin/zipjs/inflate.js +2155 -0
  95. package/src/plugins/XML3DLoaderPlugin/zipjs/mime-types.js +1002 -0
  96. package/src/plugins/XML3DLoaderPlugin/zipjs/pako/codecs.js +64 -0
  97. package/src/plugins/XML3DLoaderPlugin/zipjs/z-worker.js +153 -0
  98. package/src/plugins/XML3DLoaderPlugin/zipjs/zip-ext.js +267 -0
  99. package/src/plugins/XML3DLoaderPlugin/zipjs/zip-fs.js +553 -0
  100. package/src/plugins/XML3DLoaderPlugin/zipjs/zip.js +991 -0
  101. package/src/plugins/XML3DLoaderPlugin/zipjs/zlib-asm/codecs.js +49 -0
  102. package/src/plugins/index.js +21 -0
  103. package/src/plugins/lib/culling/ObjectCullStates.js +208 -0
  104. package/src/plugins/lib/earcut.js +677 -0
  105. package/src/plugins/lib/html/Dot.js +145 -0
  106. package/src/plugins/lib/html/Label.js +156 -0
  107. package/src/plugins/lib/html/Wire.js +191 -0
  108. package/src/viewer/Configs.js +79 -0
  109. package/src/viewer/Plugin.js +224 -0
  110. package/src/viewer/Viewer.js +535 -0
  111. package/src/viewer/index.js +5 -0
  112. package/src/viewer/localization/LocaleService.js +475 -0
  113. package/src/viewer/metadata/IFCObjectDefaultColors.js +162 -0
  114. package/src/viewer/metadata/IFCObjectDefaults.js +17 -0
  115. package/src/viewer/metadata/MetaModel.js +389 -0
  116. package/src/viewer/metadata/MetaObject.js +218 -0
  117. package/src/viewer/metadata/MetaScene.js +336 -0
  118. package/src/viewer/metadata/Property.js +55 -0
  119. package/src/viewer/metadata/PropertySet.js +77 -0
  120. package/src/viewer/scene/Bitmap/Bitmap.js +470 -0
  121. package/src/viewer/scene/Bitmap/index.js +1 -0
  122. package/src/viewer/scene/CameraControl/CameraControl.js +1737 -0
  123. package/src/viewer/scene/CameraControl/lib/CameraUpdater.js +312 -0
  124. package/src/viewer/scene/CameraControl/lib/controllers/PanController.js +112 -0
  125. package/src/viewer/scene/CameraControl/lib/controllers/PickController.js +264 -0
  126. package/src/viewer/scene/CameraControl/lib/controllers/PivotController.js +384 -0
  127. package/src/viewer/scene/CameraControl/lib/handlers/KeyboardAxisViewHandler.js +122 -0
  128. package/src/viewer/scene/CameraControl/lib/handlers/KeyboardPanRotateDollyHandler.js +183 -0
  129. package/src/viewer/scene/CameraControl/lib/handlers/MouseMiscHandler.js +68 -0
  130. package/src/viewer/scene/CameraControl/lib/handlers/MousePanRotateDollyHandler.js +345 -0
  131. package/src/viewer/scene/CameraControl/lib/handlers/MousePickHandler.js +372 -0
  132. package/src/viewer/scene/CameraControl/lib/handlers/TouchPanRotateAndDollyHandler.js +269 -0
  133. package/src/viewer/scene/CameraControl/lib/handlers/TouchPickHandler.js +235 -0
  134. package/src/viewer/scene/Component.js +907 -0
  135. package/src/viewer/scene/Entity.js +502 -0
  136. package/src/viewer/scene/ImagePlane/ImagePlane.js +570 -0
  137. package/src/viewer/scene/ImagePlane/index.js +1 -0
  138. package/src/viewer/scene/LineSet/LineSet.js +164 -0
  139. package/src/viewer/scene/LineSet/index.js +1 -0
  140. package/src/viewer/scene/camera/Camera.js +912 -0
  141. package/src/viewer/scene/camera/CameraFlightAnimation.js +669 -0
  142. package/src/viewer/scene/camera/CameraPath.js +194 -0
  143. package/src/viewer/scene/camera/CameraPathAnimation.js +326 -0
  144. package/src/viewer/scene/camera/CustomProjection.js +149 -0
  145. package/src/viewer/scene/camera/Frustum.js +316 -0
  146. package/src/viewer/scene/camera/Ortho.js +286 -0
  147. package/src/viewer/scene/camera/Perspective.js +304 -0
  148. package/src/viewer/scene/camera/index.js +2 -0
  149. package/src/viewer/scene/canvas/Canvas.js +492 -0
  150. package/src/viewer/scene/canvas/Spinner.js +323 -0
  151. package/src/viewer/scene/constants/constants.js +371 -0
  152. package/src/viewer/scene/core.js +233 -0
  153. package/src/viewer/scene/geometry/Geometry.js +33 -0
  154. package/src/viewer/scene/geometry/ReadableGeometry.js +682 -0
  155. package/src/viewer/scene/geometry/VBOGeometry.js +319 -0
  156. package/src/viewer/scene/geometry/builders/buildBoxGeometry.js +238 -0
  157. package/src/viewer/scene/geometry/builders/buildBoxLinesGeometry.js +106 -0
  158. package/src/viewer/scene/geometry/builders/buildCylinderGeometry.js +271 -0
  159. package/src/viewer/scene/geometry/builders/buildGridGeometry.js +102 -0
  160. package/src/viewer/scene/geometry/builders/buildPlaneGeometry.js +168 -0
  161. package/src/viewer/scene/geometry/builders/buildSphereGeometry.js +161 -0
  162. package/src/viewer/scene/geometry/builders/buildTorusGeometry.js +172 -0
  163. package/src/viewer/scene/geometry/builders/buildVectorTextGeometry.js +1721 -0
  164. package/src/viewer/scene/geometry/builders/index.js +8 -0
  165. package/src/viewer/scene/geometry/index.js +4 -0
  166. package/src/viewer/scene/geometry/loaders/index.js +2 -0
  167. package/src/viewer/scene/geometry/loaders/load3DSGeometry.js +103 -0
  168. package/src/viewer/scene/geometry/loaders/loadOBJGeometry.js +130 -0
  169. package/src/viewer/scene/index.js +23 -0
  170. package/src/viewer/scene/input/Input.js +1325 -0
  171. package/src/viewer/scene/libs/k3d.js +1032 -0
  172. package/src/viewer/scene/lights/AmbientLight.js +175 -0
  173. package/src/viewer/scene/lights/CubeTexture.js +156 -0
  174. package/src/viewer/scene/lights/DirLight.js +314 -0
  175. package/src/viewer/scene/lights/Light.js +29 -0
  176. package/src/viewer/scene/lights/LightMap.js +77 -0
  177. package/src/viewer/scene/lights/PointLight.js +395 -0
  178. package/src/viewer/scene/lights/ReflectionMap.js +79 -0
  179. package/src/viewer/scene/lights/Shadow.js +138 -0
  180. package/src/viewer/scene/lights/index.js +5 -0
  181. package/src/viewer/scene/lod/LOD.js +162 -0
  182. package/src/viewer/scene/lod/LODCullingManager.js +83 -0
  183. package/src/viewer/scene/lod/LODState.js +125 -0
  184. package/src/viewer/scene/lod/index.js +1 -0
  185. package/src/viewer/scene/marker/Marker.js +383 -0
  186. package/src/viewer/scene/marker/SpriteMarker.js +356 -0
  187. package/src/viewer/scene/marker/index.js +2 -0
  188. package/src/viewer/scene/materials/EdgeMaterial.js +359 -0
  189. package/src/viewer/scene/materials/EmphasisMaterial.js +613 -0
  190. package/src/viewer/scene/materials/Fresnel.js +222 -0
  191. package/src/viewer/scene/materials/LambertMaterial.js +378 -0
  192. package/src/viewer/scene/materials/LinesMaterial.js +169 -0
  193. package/src/viewer/scene/materials/Material.js +39 -0
  194. package/src/viewer/scene/materials/MetallicMaterial.js +820 -0
  195. package/src/viewer/scene/materials/PhongMaterial.js +860 -0
  196. package/src/viewer/scene/materials/PointsMaterial.js +409 -0
  197. package/src/viewer/scene/materials/SpecularMaterial.js +807 -0
  198. package/src/viewer/scene/materials/Texture.js +513 -0
  199. package/src/viewer/scene/materials/index.js +8 -0
  200. package/src/viewer/scene/math/Frustum.js +118 -0
  201. package/src/viewer/scene/math/buildEdgeIndices.js +162 -0
  202. package/src/viewer/scene/math/geometryCompressionUtils.js +365 -0
  203. package/src/viewer/scene/math/index.js +3 -0
  204. package/src/viewer/scene/math/math.js +5363 -0
  205. package/src/viewer/scene/math/rtcCoords.js +139 -0
  206. package/src/viewer/scene/mementos/CameraMemento.js +200 -0
  207. package/src/viewer/scene/mementos/ModelMemento.js +263 -0
  208. package/src/viewer/scene/mementos/ObjectsMemento.js +259 -0
  209. package/src/viewer/scene/mementos/index.js +3 -0
  210. package/src/viewer/scene/mesh/Mesh.js +2202 -0
  211. package/src/viewer/scene/mesh/draw/DrawRenderer.js +986 -0
  212. package/src/viewer/scene/mesh/draw/DrawShaderSource.js +1570 -0
  213. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +249 -0
  214. package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +158 -0
  215. package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +276 -0
  216. package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +261 -0
  217. package/src/viewer/scene/mesh/index.js +1 -0
  218. package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +207 -0
  219. package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +156 -0
  220. package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +210 -0
  221. package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +142 -0
  222. package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +186 -0
  223. package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +116 -0
  224. package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +214 -0
  225. package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +98 -0
  226. package/src/viewer/scene/metriqs/Metriqs.js +259 -0
  227. package/src/viewer/scene/model/ENTITY_FLAGS.js +21 -0
  228. package/src/viewer/scene/model/PerformanceModel.js +26 -0
  229. package/src/viewer/scene/model/RENDER_PASSES.js +34 -0
  230. package/src/viewer/scene/model/SceneModel.js +3817 -0
  231. package/src/viewer/scene/model/SceneModelEntity.js +478 -0
  232. package/src/viewer/scene/model/SceneModelMesh.js +160 -0
  233. package/src/viewer/scene/model/SceneModelTexture.js +17 -0
  234. package/src/viewer/scene/model/SceneModelTextureSet.js +17 -0
  235. package/src/viewer/scene/model/VBOSceneModel.js +26 -0
  236. package/src/viewer/scene/model/compression.js +227 -0
  237. package/src/viewer/scene/model/dtx/triangles/BindableDataTexture.js +31 -0
  238. package/src/viewer/scene/model/dtx/triangles/DataTextureGenerator.js +631 -0
  239. package/src/viewer/scene/model/dtx/triangles/DataTextureState.js +288 -0
  240. package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureBuffer.js +31 -0
  241. package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureLayer.js +1329 -0
  242. package/src/viewer/scene/model/dtx/triangles/TrianglesDataTextureRenderers.js +278 -0
  243. package/src/viewer/scene/model/dtx/triangles/calculateUniquePositions.js +126 -0
  244. package/src/viewer/scene/model/dtx/triangles/dataTextureRamStats.js +54 -0
  245. package/src/viewer/scene/model/dtx/triangles/rebucketPositions.js +347 -0
  246. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureColorRenderer.js +633 -0
  247. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureDepthRenderer.js +475 -0
  248. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesColorRenderer.js +426 -0
  249. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureEdgesRenderer.js +430 -0
  250. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureNormalsRenderer.js +341 -0
  251. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureOcclusionRenderer.js +442 -0
  252. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickDepthRenderer.js +451 -0
  253. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickMeshRenderer.js +436 -0
  254. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsFlatRenderer.js +502 -0
  255. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTexturePickNormalsRenderer.js +430 -0
  256. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSilhouetteRenderer.js +469 -0
  257. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthBufInitRenderer.js +451 -0
  258. package/src/viewer/scene/model/dtx/triangles/renderers/TrianglesDataTextureSnapDepthRenderer.js +424 -0
  259. package/src/viewer/scene/model/index.js +3 -0
  260. package/src/viewer/scene/model/vbo/ScratchMemory.js +63 -0
  261. package/src/viewer/scene/model/vbo/VBOSceneModelRenderers.js +805 -0
  262. package/src/viewer/scene/model/vbo/float16.js +760 -0
  263. package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingBuffer.js +21 -0
  264. package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingLayer.js +744 -0
  265. package/src/viewer/scene/model/vbo/linesBatching/LinesBatchingRenderers.js +71 -0
  266. package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingColorRenderer.js +116 -0
  267. package/src/viewer/scene/model/vbo/linesBatching/renderers/LinesBatchingSilhouetteRenderer.js +126 -0
  268. package/src/viewer/scene/model/vbo/linesInstancing/LinesInstancingLayer.js +653 -0
  269. package/src/viewer/scene/model/vbo/linesInstancing/LinesInstancingRenderers.js +71 -0
  270. package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingColorRenderer.js +150 -0
  271. package/src/viewer/scene/model/vbo/linesInstancing/renderers/LinesInstancingSilhouetteRenderer.js +128 -0
  272. package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingBuffer.js +22 -0
  273. package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingLayer.js +753 -0
  274. package/src/viewer/scene/model/vbo/pointsBatching/PointsBatchingRenderers.js +116 -0
  275. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingColorRenderer.js +167 -0
  276. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingOcclusionRenderer.js +135 -0
  277. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickDepthRenderer.js +154 -0
  278. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingPickMeshRenderer.js +146 -0
  279. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingShadowRenderer.js +108 -0
  280. package/src/viewer/scene/model/vbo/pointsBatching/renderers/PointsBatchingSilhouetteRenderer.js +147 -0
  281. package/src/viewer/scene/model/vbo/pointsInstancing/PointsInstancingLayer.js +684 -0
  282. package/src/viewer/scene/model/vbo/pointsInstancing/PointsInstancingRenderers.js +146 -0
  283. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingColorRenderer.js +174 -0
  284. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingDepthRenderer.js +156 -0
  285. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingOcclusionRenderer.js +151 -0
  286. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickDepthRenderer.js +167 -0
  287. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingPickMeshRenderer.js +151 -0
  288. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingShadowRenderer.js +121 -0
  289. package/src/viewer/scene/model/vbo/pointsInstancing/renderers/PointsInstancingSilhouetteRenderer.js +156 -0
  290. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthBufInitRenderer.js +351 -0
  291. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingDepthRenderer.js +365 -0
  292. package/src/viewer/scene/model/vbo/snapBatching/SnapBatchingRenderers.js +71 -0
  293. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthBufInitRenderer.js +381 -0
  294. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingDepthRenderer.js +374 -0
  295. package/src/viewer/scene/model/vbo/snapInstancing/SnapInstancingRenderers.js +71 -0
  296. package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingBuffer.js +26 -0
  297. package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingLayer.js +1322 -0
  298. package/src/viewer/scene/model/vbo/trianglesBatching/TrianglesBatchingRenderers.js +322 -0
  299. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorRenderer.js +240 -0
  300. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingColorTextureRenderer.js +271 -0
  301. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingDepthRenderer.js +127 -0
  302. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesColorRenderer.js +129 -0
  303. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingEdgesRenderer.js +134 -0
  304. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingFlatColorRenderer.js +237 -0
  305. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingNormalsRenderer.js +139 -0
  306. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingOcclusionRenderer.js +127 -0
  307. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPBRRenderer.js +563 -0
  308. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickDepthRenderer.js +143 -0
  309. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickMeshRenderer.js +130 -0
  310. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsFlatRenderer.js +119 -0
  311. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingPickNormalsRenderer.js +129 -0
  312. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingShadowRenderer.js +108 -0
  313. package/src/viewer/scene/model/vbo/trianglesBatching/renderers/TrianglesBatchingSilhouetteRenderer.js +137 -0
  314. package/src/viewer/scene/model/vbo/trianglesInstancing/TrianglesInstancingLayer.js +1167 -0
  315. package/src/viewer/scene/model/vbo/trianglesInstancing/TrianglesInstancingRenderers.js +322 -0
  316. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorRenderer.js +253 -0
  317. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingColorTextureRenderer.js +278 -0
  318. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingDepthRenderer.js +125 -0
  319. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesColorRenderer.js +131 -0
  320. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingEdgesRenderer.js +134 -0
  321. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatColorRenderer.js +244 -0
  322. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingFlatNormalsRenderer.js +130 -0
  323. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingNormalsRenderer.js +140 -0
  324. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingOcclusionRenderer.js +130 -0
  325. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPBRRenderer.js +563 -0
  326. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickDepthRenderer.js +148 -0
  327. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickMeshRenderer.js +135 -0
  328. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsFlatRenderer.js +130 -0
  329. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingPickNormalsRenderer.js +144 -0
  330. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingShadowRenderer.js +113 -0
  331. package/src/viewer/scene/model/vbo/trianglesInstancing/renderers/TrianglesInstancingSilhouetteRenderer.js +141 -0
  332. package/src/viewer/scene/nodes/Node.js +1383 -0
  333. package/src/viewer/scene/nodes/index.js +1 -0
  334. package/src/viewer/scene/paths/CubicBezierCurve.js +194 -0
  335. package/src/viewer/scene/paths/Curve.js +183 -0
  336. package/src/viewer/scene/paths/Path.js +239 -0
  337. package/src/viewer/scene/paths/QuadraticBezierCurve.js +161 -0
  338. package/src/viewer/scene/paths/SplineCurve.js +133 -0
  339. package/src/viewer/scene/paths/index.js +5 -0
  340. package/src/viewer/scene/postfx/SAO.js +543 -0
  341. package/src/viewer/scene/scene/Scene.js +2627 -0
  342. package/src/viewer/scene/sectionPlane/SectionPlane.js +194 -0
  343. package/src/viewer/scene/sectionPlane/index.js +1 -0
  344. package/src/viewer/scene/skybox/Skybox.js +123 -0
  345. package/src/viewer/scene/skybox/index.js +1 -0
  346. package/src/viewer/scene/stats.js +44 -0
  347. package/src/viewer/scene/utils/Cache.js +29 -0
  348. package/src/viewer/scene/utils/FileLoader.js +160 -0
  349. package/src/viewer/scene/utils/Loader.js +55 -0
  350. package/src/viewer/scene/utils/LoadingManager.js +86 -0
  351. package/src/viewer/scene/utils/Map.js +45 -0
  352. package/src/viewer/scene/utils/Queue.js +56 -0
  353. package/src/viewer/scene/utils/WorkerPool.js +73 -0
  354. package/src/viewer/scene/utils/index.js +6 -0
  355. package/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/KTX2TextureTranscoder.js +650 -0
  356. package/src/viewer/scene/utils/textureTranscoders/KTX2TextureTranscoder/index.js +1 -0
  357. package/src/viewer/scene/utils/textureTranscoders/TextureTranscoder.js +31 -0
  358. package/src/viewer/scene/utils/textureTranscoders/index.js +2 -0
  359. package/src/viewer/scene/utils.js +452 -0
  360. package/src/viewer/scene/vfc/VFC.js +82 -0
  361. package/src/viewer/scene/vfc/VFCManager.js +54 -0
  362. package/src/viewer/scene/vfc/VFCState.js +391 -0
  363. package/src/viewer/scene/vfc/cluster-helper.js +134 -0
  364. package/src/viewer/scene/vfc/index.js +1 -0
  365. package/src/viewer/scene/vfc/rbush3d.js +848 -0
  366. package/src/viewer/scene/vfc/xeokit-cluster.js +418 -0
  367. package/src/viewer/scene/viewport/Viewport.js +212 -0
  368. package/src/viewer/scene/webgl/ArrayBuf.js +121 -0
  369. package/src/viewer/scene/webgl/Attribute.js +23 -0
  370. package/src/viewer/scene/webgl/Drawable.js +270 -0
  371. package/src/viewer/scene/webgl/FrameContext.js +313 -0
  372. package/src/viewer/scene/webgl/PickResult.js +339 -0
  373. package/src/viewer/scene/webgl/Pickable.js +69 -0
  374. package/src/viewer/scene/webgl/Program.js +181 -0
  375. package/src/viewer/scene/webgl/RenderBuffer.js +350 -0
  376. package/src/viewer/scene/webgl/RenderBufferManager.js +34 -0
  377. package/src/viewer/scene/webgl/RenderFlags.js +203 -0
  378. package/src/viewer/scene/webgl/RenderState.js +40 -0
  379. package/src/viewer/scene/webgl/Renderer.js +1654 -0
  380. package/src/viewer/scene/webgl/Sampler.js +18 -0
  381. package/src/viewer/scene/webgl/Shader.js +49 -0
  382. package/src/viewer/scene/webgl/Texture2D.js +442 -0
  383. package/src/viewer/scene/webgl/convertConstant.js +244 -0
  384. package/src/viewer/scene/webgl/getExtension.js +32 -0
  385. package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +214 -0
  386. package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +426 -0
  387. package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +324 -0
  388. package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +376 -0
  389. package/src/viewer/scene/webgl/webglEnums.js +61 -0
  390. package/src/viewer/scene/webglInfo.js +47 -0
@@ -0,0 +1,631 @@
1
+ import {createRTCViewMat, math} from "../../../math";
2
+ import {BindableDataTexture} from "./BindableDataTexture";
3
+ import {dataTextureRamStats} from "./dataTextureRamStats";
4
+
5
+ /**
6
+ * @private
7
+ */
8
+ export class DataTextureGenerator {
9
+ /**
10
+ * Enables the currently binded ````WebGLTexture```` to be used as a data texture.
11
+ *
12
+ * @param {WebGL2RenderingContext} gl
13
+ *
14
+ * @private
15
+ */
16
+ disableBindedTextureFiltering(gl) {
17
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
18
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
19
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
20
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
21
+ }
22
+
23
+ /**
24
+ * Generate and return a `camera data texture`.
25
+ *
26
+ * The texture will automatically update its contents before each render when the camera matrix is dirty,
27
+ * and to do so will use the following events:
28
+ *
29
+ * - `scene.rendering` event will be used to know that the camera texture should be updated
30
+ * - `camera.matrix` event will be used to know that the camera matices changed
31
+ *
32
+ * @param {WebGL2RenderingContext} gl
33
+ * @param {Camera} camera
34
+ * @param {Scene} scene
35
+ * @param {null|number[3]} origin
36
+ * @returns {BindableDataTexture}
37
+ */
38
+ generateCameraDataTexture(gl, camera, scene, origin) {
39
+ const textureWidth = 4;
40
+ const textureHeight = 3; // space for 3 matrices
41
+ const texture = gl.createTexture();
42
+ gl.bindTexture(gl.TEXTURE_2D, texture);
43
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, textureWidth, textureHeight);
44
+ this.disableBindedTextureFiltering(gl);
45
+ gl.bindTexture(gl.TEXTURE_2D, null);
46
+ const cameraTexture = new BindableDataTexture(gl, texture, textureWidth, textureHeight);
47
+ let cameraDirty = true;
48
+ cameraTexture.updateViewMatrix = (viewMatrix, projMatrix) => {
49
+ gl.bindTexture(gl.TEXTURE_2D, cameraTexture._texture);
50
+ // Camera's "view matrix"
51
+ gl.texSubImage2D(
52
+ gl.TEXTURE_2D,
53
+ 0,
54
+ 0,
55
+ 0, // 1st matrix: camera view matrix
56
+ 4,
57
+ 1,
58
+ gl.RGBA,
59
+ gl.FLOAT,
60
+ new Float32Array((origin) ? createRTCViewMat(viewMatrix, origin) : viewMatrix)
61
+ );
62
+
63
+ // Camera's "view normal matrix"
64
+ gl.texSubImage2D(
65
+ gl.TEXTURE_2D,
66
+ 0,
67
+ 0,
68
+ 1, // 2nd matrix: camera view normal matrix
69
+ 4,
70
+ 1,
71
+ gl.RGBA,
72
+ gl.FLOAT,
73
+ new Float32Array(camera.viewNormalMatrix)
74
+ );
75
+
76
+ // Camera's "project matrix"
77
+ gl.texSubImage2D(
78
+ gl.TEXTURE_2D,
79
+ 0,
80
+ 0,
81
+ 2, // 3rd matrix: camera project matrix
82
+ 4,
83
+ 1,
84
+ gl.RGBA,
85
+ gl.FLOAT,
86
+ new Float32Array(projMatrix)
87
+ );
88
+ };
89
+ const onCameraMatrix = () => {
90
+ if (!cameraDirty) {
91
+ return;
92
+ }
93
+ cameraDirty = false;
94
+ cameraTexture.updateViewMatrix(camera.viewMatrix, camera.project.matrix);
95
+ };
96
+ camera.on("matrix", () => cameraDirty = true);
97
+ scene.on("rendering", onCameraMatrix);
98
+ onCameraMatrix();
99
+ return cameraTexture;
100
+ }
101
+
102
+ /**
103
+ * Generate and return a texture containing camera view and projection
104
+ * matrices for picking, relative to the given RTC coordinate system origin.
105
+ *
106
+ * @param {WebGL2RenderingContext} gl
107
+ * @param {Camera} camera
108
+ * @param {null|number[3]} origin
109
+ * @returns {BindableDataTexture}
110
+ */
111
+ generatePickCameraDataTexture(gl, camera, origin) {
112
+ const textureWidth = 4;
113
+ const textureHeight = 3; // space for 3 matrices
114
+ const texture = gl.createTexture();
115
+ gl.bindTexture(gl.TEXTURE_2D, texture);
116
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, textureWidth, textureHeight);
117
+ this.disableBindedTextureFiltering(gl);
118
+ gl.bindTexture(gl.TEXTURE_2D, null);
119
+ const cameraTexture = new BindableDataTexture(gl, texture, textureWidth, textureHeight);
120
+ cameraTexture.updateViewMatrix = (viewMatrix, projMatrix) => {
121
+ gl.bindTexture(gl.TEXTURE_2D, cameraTexture._texture);
122
+ // Camera's "view matrix"
123
+ gl.texSubImage2D(
124
+ gl.TEXTURE_2D,
125
+ 0,
126
+ 0,
127
+ 0, // 1st matrix: pick camera view matrix
128
+ 4,
129
+ 1,
130
+ gl.RGBA,
131
+ gl.FLOAT,
132
+ new Float32Array((origin) ? createRTCViewMat(viewMatrix, origin) : viewMatrix)
133
+ );
134
+
135
+ // Camera's "view normal matrix"
136
+ gl.texSubImage2D(
137
+ gl.TEXTURE_2D,
138
+ 0,
139
+ 0,
140
+ 1, // 2nd matrix: pick camera view normal matrix
141
+ 4,
142
+ 1,
143
+ gl.RGBA,
144
+ gl.FLOAT,
145
+ new Float32Array(camera.viewNormalMatrix)
146
+ );
147
+
148
+ // Camera's "project matrix"
149
+ gl.texSubImage2D(
150
+ gl.TEXTURE_2D,
151
+ 0,
152
+ 0,
153
+ 2, // 3rd matrix: pick camera project matrix
154
+ 4,
155
+ 1,
156
+ gl.RGBA,
157
+ gl.FLOAT,
158
+ new Float32Array(projMatrix)
159
+ );
160
+ };
161
+ return cameraTexture;
162
+ }
163
+
164
+ /**
165
+ * Generate and return a `model data texture`.
166
+ *
167
+ * @param {WebGL2RenderingContext} gl
168
+ * @param {DataTextureSceneModel} model
169
+ *
170
+ * @returns {BindableDataTexture}
171
+ */
172
+ generateModelTexture(gl, model) {
173
+ const textureWidth = 4;
174
+ const textureHeight = 2; // space for 2 matrices
175
+ const texture = gl.createTexture();
176
+ gl.bindTexture(gl.TEXTURE_2D, texture);
177
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, textureWidth, textureHeight);
178
+ gl.texSubImage2D(
179
+ gl.TEXTURE_2D,
180
+ 0,
181
+ 0, // x-offset
182
+ 0, // y-offset (model world matrix)
183
+ 4, // data width (4x4 values)
184
+ 1, // data height (1 matrix)
185
+ gl.RGBA,
186
+ gl.FLOAT,
187
+ new Float32Array(model.worldMatrix)
188
+ );
189
+ gl.texSubImage2D(
190
+ gl.TEXTURE_2D,
191
+ 0,
192
+ 0, // x-offset
193
+ 1, // y-offset (model normal matrix)
194
+ 4, // data width (4x4 values)
195
+ 1, // data height (1 matrix)
196
+ gl.RGBA,
197
+ gl.FLOAT,
198
+ new Float32Array(model.worldNormalMatrix)
199
+ );
200
+ this.disableBindedTextureFiltering(gl);
201
+ gl.bindTexture(gl.TEXTURE_2D, null);
202
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
203
+ }
204
+
205
+ /**
206
+ * This will generate an RGBA texture for:
207
+ * - colors
208
+ * - pickColors
209
+ * - flags
210
+ * - flags2
211
+ * - vertex bases
212
+ * - vertex base offsets
213
+ *
214
+ * The texture will have:
215
+ * - 4 RGBA columns per row: for each object (pick) color and flags(2)
216
+ * - N rows where N is the number of objects
217
+ *
218
+ * @param {WebGL2RenderingContext} gl
219
+ * @param {ArrayLike<ArrayLike<int>>} colors Array of colors for all objects in the layer
220
+ * @param {ArrayLike<ArrayLike<int>>} pickColors Array of pickColors for all objects in the layer
221
+ * @param {ArrayLike<int>} vertexBases Array of position-index-bases foteh all objects in the layer
222
+ * @param {ArrayLike<int>} indexBaseOffsets For triangles: array of offests between the (gl_VertexID / 3) and the position where the indices start in the texture layer
223
+ * @param {ArrayLike<int>} edgeIndexBaseOffsets For edges: Array of offests between the (gl_VertexID / 2) and the position where the edge indices start in the texture layer
224
+ * @param {ArrayLike<boolean>} solid Array is-solid flag for all objects in the layer
225
+ *
226
+ * @returns {BindableDataTexture}
227
+ */
228
+ generateTextureForColorsAndFlags(gl, colors, pickColors, vertexBases, indexBaseOffsets, edgeIndexBaseOffsets, solid) {
229
+ const numPortions = colors.length;
230
+
231
+ // The number of rows in the texture is the number of
232
+ // objects in the layer.
233
+
234
+ this.numPortions = numPortions;
235
+
236
+ const textureWidth = 512 * 8;
237
+ const textureHeight = Math.ceil(numPortions / (textureWidth / 8));
238
+
239
+ if (textureHeight === 0) {
240
+ throw "texture height===0";
241
+ }
242
+
243
+ // 8 columns per texture row:
244
+ // - col0: (RGBA) object color RGBA
245
+ // - col1: (packed Uint32 as RGBA) object pick color
246
+ // - col2: (packed 4 bytes as RGBA) object flags
247
+ // - col3: (packed 4 bytes as RGBA) object flags2
248
+ // - col4: (packed Uint32 bytes as RGBA) vertex base
249
+ // - col5: (packed Uint32 bytes as RGBA) index base offset
250
+ // - col6: (packed Uint32 bytes as RGBA) edge index base offset
251
+ // - col7: (packed 4 bytes as RGBA) is-solid flag for objects
252
+
253
+ const texArray = new Uint8Array(4 * textureWidth * textureHeight);
254
+
255
+ dataTextureRamStats.sizeDataColorsAndFlags += texArray.byteLength;
256
+ dataTextureRamStats.numberOfTextures++;
257
+
258
+ for (let i = 0; i < numPortions; i++) {
259
+ // object color
260
+ texArray.set(colors [i], i * 32 + 0);
261
+ texArray.set(pickColors [i], i * 32 + 4); // object pick color
262
+ texArray.set([0, 0, 0, 0], i * 32 + 8); // object flags
263
+ texArray.set([0, 0, 0, 0], i * 32 + 12); // object flags2
264
+
265
+ // vertex base
266
+ texArray.set([
267
+ (vertexBases[i] >> 24) & 255,
268
+ (vertexBases[i] >> 16) & 255,
269
+ (vertexBases[i] >> 8) & 255,
270
+ (vertexBases[i]) & 255,
271
+ ],
272
+ i * 32 + 16
273
+ );
274
+
275
+ // triangles index base offset
276
+ texArray.set(
277
+ [
278
+ (indexBaseOffsets[i] >> 24) & 255,
279
+ (indexBaseOffsets[i] >> 16) & 255,
280
+ (indexBaseOffsets[i] >> 8) & 255,
281
+ (indexBaseOffsets[i]) & 255,
282
+ ],
283
+ i * 32 + 20
284
+ );
285
+
286
+ // edge index base offset
287
+ texArray.set(
288
+ [
289
+ (edgeIndexBaseOffsets[i] >> 24) & 255,
290
+ (edgeIndexBaseOffsets[i] >> 16) & 255,
291
+ (edgeIndexBaseOffsets[i] >> 8) & 255,
292
+ (edgeIndexBaseOffsets[i]) & 255,
293
+ ],
294
+ i * 32 + 24
295
+ );
296
+
297
+ // is-solid flag
298
+ texArray.set([solid[i] ? 1 : 0, 0, 0, 0], i * 32 + 28);
299
+ }
300
+ const texture = gl.createTexture();
301
+ gl.bindTexture(gl.TEXTURE_2D, texture);
302
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA8UI, textureWidth, textureHeight);
303
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGBA_INTEGER, gl.UNSIGNED_BYTE, texArray, 0);
304
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
305
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
306
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
307
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
308
+ gl.bindTexture(gl.TEXTURE_2D, null);
309
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight, texArray);
310
+ }
311
+
312
+ /**
313
+ * This will generate a texture for all object offsets.
314
+ *
315
+ * @param {WebGL2RenderingContext} gl
316
+ * @param {int[]} offsets Array of int[3], one XYZ offset array for each object
317
+ *
318
+ * @returns {BindableDataTexture}
319
+ */
320
+ generateTextureForObjectOffsets(gl, numOffsets) {
321
+ const textureWidth = 512;
322
+ const textureHeight = Math.ceil(numOffsets / textureWidth);
323
+ if (textureHeight === 0) {
324
+ throw "texture height===0";
325
+ }
326
+ const texArray = new Float32Array(3 * textureWidth * textureHeight).fill(0);
327
+ dataTextureRamStats.sizeDataTextureOffsets += texArray.byteLength;
328
+ dataTextureRamStats.numberOfTextures++;
329
+ const texture = gl.createTexture();
330
+ gl.bindTexture(gl.TEXTURE_2D, texture);
331
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB32F, textureWidth, textureHeight);
332
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB, gl.FLOAT, texArray, 0);
333
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
334
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
335
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
336
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
337
+ gl.bindTexture(gl.TEXTURE_2D, null);
338
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight, texArray);
339
+ }
340
+
341
+ /**
342
+ * This will generate a texture for all positions decode matrices in the layer.
343
+ *
344
+ * The texture will have:
345
+ * - 4 RGBA columns per row (each column will contain 4 packed half-float (16 bits) components).
346
+ * Thus, each row will contain 16 packed half-floats corresponding to a complete positions decode matrix)
347
+ * - N rows where N is the number of objects
348
+ *
349
+ * @param {WebGL2RenderingContext} gl
350
+ * @param {ArrayLike<Matrix4x4>} positionDecodeMatrices Array of positions decode matrices for all objects in the layer
351
+ * @param {ArrayLike<Matrix4x4>} instanceMatrices Array of geometry instancing matrices for all objects in the layer. Null if the objects are not instanced.
352
+ *
353
+ * @returns {BindableDataTexture}
354
+ */
355
+ generateTextureForPositionsDecodeMatrices(gl, positionDecodeMatrices, instanceMatrices) {
356
+ const numMatrices = positionDecodeMatrices.length;
357
+ if (numMatrices === 0) {
358
+ throw "num decode+entity matrices===0";
359
+ }
360
+ // in one row we can fit 512 matrices
361
+ const textureWidth = 512 * 4;
362
+ const textureHeight = Math.ceil(numMatrices / (textureWidth / 4));
363
+ const texArray = new Float32Array(4 * textureWidth * textureHeight);
364
+ dataTextureRamStats.sizeDataPositionDecodeMatrices += texArray.byteLength;
365
+ dataTextureRamStats.numberOfTextures++;
366
+ const tmpMatrix = math.mat4();
367
+ for (let i = 0; i < positionDecodeMatrices.length; i++) { // 4x4 values
368
+ texArray.set(math.mulMat4(instanceMatrices[i], positionDecodeMatrices[i], tmpMatrix), i * 16);
369
+ }
370
+ const texture = gl.createTexture();
371
+ gl.bindTexture(gl.TEXTURE_2D, texture);
372
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, textureWidth, textureHeight);
373
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGBA, gl.FLOAT, texArray, 0);
374
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
375
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
376
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
377
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
378
+ gl.bindTexture(gl.TEXTURE_2D, null);
379
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
380
+ }
381
+
382
+ /**
383
+ * @param {WebGL2RenderingContext} gl
384
+ * @param {ArrayLike<int>} indices
385
+ *
386
+ * @returns {BindableDataTexture}
387
+ */
388
+ generateTextureFor8BitIndices(gl, indices) {
389
+ if (indices.length === 0) {
390
+ return {texture: null, textureHeight: 0,};
391
+ }
392
+ const textureWidth = 4096;
393
+ const textureHeight = Math.ceil(indices.length / 3 / textureWidth);
394
+ if (textureHeight === 0) {
395
+ throw "texture height===0";
396
+ }
397
+ const texArraySize = textureWidth * textureHeight * 3;
398
+ const texArray = new Uint8Array(texArraySize);
399
+ dataTextureRamStats.sizeDataTextureIndices += texArray.byteLength;
400
+ dataTextureRamStats.numberOfTextures++;
401
+ texArray.fill(0);
402
+ texArray.set(indices, 0)
403
+ const texture = gl.createTexture();
404
+ gl.bindTexture(gl.TEXTURE_2D, texture);
405
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB8UI, textureWidth, textureHeight);
406
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_BYTE, texArray, 0);
407
+ this.disableBindedTextureFiltering(gl);
408
+ gl.bindTexture(gl.TEXTURE_2D, null);
409
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
410
+ }
411
+
412
+ /**
413
+ * @param {WebGL2RenderingContext} gl
414
+ * @param {ArrayLike<int>} indices
415
+ *
416
+ * @returns {BindableDataTexture}
417
+ */
418
+ generateTextureFor16BitIndices(gl, indices) {
419
+ if (indices.length === 0) {
420
+ return {texture: null, textureHeight: 0,};
421
+ }
422
+ const textureWidth = 4096;
423
+ const textureHeight = Math.ceil(indices.length / 3 / textureWidth);
424
+ if (textureHeight === 0) {
425
+ throw "texture height===0";
426
+ }
427
+ const texArraySize = textureWidth * textureHeight * 3;
428
+ const texArray = new Uint16Array(texArraySize);
429
+ dataTextureRamStats.sizeDataTextureIndices += texArray.byteLength;
430
+ dataTextureRamStats.numberOfTextures++;
431
+ texArray.fill(0);
432
+ texArray.set(indices, 0)
433
+ const texture = gl.createTexture();
434
+ gl.bindTexture(gl.TEXTURE_2D, texture);
435
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB16UI, textureWidth, textureHeight);
436
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_SHORT, texArray, 0);
437
+ this.disableBindedTextureFiltering(gl);
438
+ gl.bindTexture(gl.TEXTURE_2D, null);
439
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
440
+ }
441
+
442
+ /**
443
+ * @param {WebGL2RenderingContext} gl
444
+ * @param {ArrayLike<int>} indices
445
+ *
446
+ * @returns {BindableDataTexture}
447
+ */
448
+ generateTextureFor32BitIndices(gl, indices) {
449
+ if (indices.length === 0) {
450
+ return {texture: null, textureHeight: 0};
451
+ }
452
+ const textureWidth = 4096;
453
+ const textureHeight = Math.ceil(indices.length / 3 / textureWidth);
454
+ if (textureHeight === 0) {
455
+ throw "texture height===0";
456
+ }
457
+ const texArraySize = textureWidth * textureHeight * 3;
458
+ const texArray = new Uint32Array(texArraySize);
459
+ dataTextureRamStats.sizeDataTextureIndices += texArray.byteLength;
460
+ dataTextureRamStats.numberOfTextures++;
461
+ texArray.fill(0);
462
+ texArray.set(indices, 0)
463
+ const texture = gl.createTexture();
464
+ gl.bindTexture(gl.TEXTURE_2D, texture);
465
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB32UI, textureWidth, textureHeight);
466
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_INT, texArray, 0);
467
+ this.disableBindedTextureFiltering(gl);
468
+ gl.bindTexture(gl.TEXTURE_2D, null);
469
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
470
+ }
471
+
472
+ /**
473
+ * @param {WebGL2RenderingContext} gl
474
+ * @param {ArrayLike<int>} edgeIndices
475
+ *
476
+ * @returns {BindableDataTexture}
477
+ */
478
+ generateTextureFor8BitsEdgeIndices(gl, edgeIndices) {
479
+ if (edgeIndices.length === 0) {
480
+ return {texture: null, textureHeight: 0};
481
+ }
482
+ const textureWidth = 4096;
483
+ const textureHeight = Math.ceil(edgeIndices.length / 2 / textureWidth);
484
+ if (textureHeight === 0) {
485
+ throw "texture height===0";
486
+ }
487
+ const texArraySize = textureWidth * textureHeight * 2;
488
+ const texArray = new Uint8Array(texArraySize);
489
+ dataTextureRamStats.sizeDataTextureEdgeIndices += texArray.byteLength;
490
+ dataTextureRamStats.numberOfTextures++;
491
+ texArray.fill(0);
492
+ texArray.set(edgeIndices, 0)
493
+ const texture = gl.createTexture();
494
+ gl.bindTexture(gl.TEXTURE_2D, texture);
495
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RG8UI, textureWidth, textureHeight);
496
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RG_INTEGER, gl.UNSIGNED_BYTE, texArray, 0);
497
+ this.disableBindedTextureFiltering(gl);
498
+ gl.bindTexture(gl.TEXTURE_2D, null);
499
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
500
+ }
501
+
502
+ /**
503
+ * @param {WebGL2RenderingContext} gl
504
+ * @param {ArrayLike<int>} edgeIndices
505
+ *
506
+ * @returns {BindableDataTexture}
507
+ */
508
+ generateTextureFor16BitsEdgeIndices(gl, edgeIndices) {
509
+ if (edgeIndices.length === 0) {
510
+ return {texture: null, textureHeight: 0};
511
+ }
512
+ const textureWidth = 4096;
513
+ const textureHeight = Math.ceil(edgeIndices.length / 2 / textureWidth);
514
+ if (textureHeight === 0) {
515
+ throw "texture height===0";
516
+ }
517
+ const texArraySize = textureWidth * textureHeight * 2;
518
+ const texArray = new Uint16Array(texArraySize);
519
+ dataTextureRamStats.sizeDataTextureEdgeIndices += texArray.byteLength;
520
+ dataTextureRamStats.numberOfTextures++;
521
+ texArray.fill(0);
522
+ texArray.set(edgeIndices, 0)
523
+ const texture = gl.createTexture();
524
+ gl.bindTexture(gl.TEXTURE_2D, texture);
525
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RG16UI, textureWidth, textureHeight);
526
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RG_INTEGER, gl.UNSIGNED_SHORT, texArray, 0);
527
+ this.disableBindedTextureFiltering(gl);
528
+ gl.bindTexture(gl.TEXTURE_2D, null);
529
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
530
+ }
531
+
532
+ /**
533
+ * @param {WebGL2RenderingContext} gl
534
+ * @param {ArrayLike<int>} edgeIndices
535
+ *
536
+ * @returns {BindableDataTexture}
537
+ */
538
+ generateTextureFor32BitsEdgeIndices(gl, edgeIndices) {
539
+ if (edgeIndices.length === 0) {
540
+ return {texture: null, textureHeight: 0,};
541
+ }
542
+ const textureWidth = 4096;
543
+ const textureHeight = Math.ceil(edgeIndices.length / 2 / textureWidth);
544
+ if (textureHeight === 0) {
545
+ throw "texture height===0";
546
+ }
547
+ const texArraySize = textureWidth * textureHeight * 2;
548
+ const texArray = new Uint32Array(texArraySize);
549
+ dataTextureRamStats.sizeDataTextureEdgeIndices += texArray.byteLength;
550
+ dataTextureRamStats.numberOfTextures++;
551
+ texArray.fill(0);
552
+ texArray.set(edgeIndices, 0)
553
+ const texture = gl.createTexture();
554
+ gl.bindTexture(gl.TEXTURE_2D, texture);
555
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RG32UI, textureWidth, textureHeight);
556
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RG_INTEGER, gl.UNSIGNED_INT, texArray, 0);
557
+ this.disableBindedTextureFiltering(gl);
558
+ gl.bindTexture(gl.TEXTURE_2D, null);
559
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
560
+ }
561
+
562
+ /**
563
+ * @param {WebGL2RenderingContext} gl
564
+ * @param {ArrayLike<int>} positions Array of (uniquified) quantized positions in the layer
565
+ *
566
+ * This will generate a texture for positions in the layer.
567
+ *
568
+ * The texture will have:
569
+ * - 1024 columns, where each pixel will be a 16-bit-per-component RGB texture, corresponding to the XYZ of the position
570
+ * - a number of rows R where R*1024 is just >= than the number of vertices (positions / 3)
571
+ *
572
+ * @returns {BindableDataTexture}
573
+ */
574
+ generateTextureForPositions(gl, positions) {
575
+ const numVertices = positions.length / 3;
576
+ const textureWidth = 4096;
577
+ const textureHeight = Math.ceil(numVertices / textureWidth);
578
+ if (textureHeight === 0) {
579
+ throw "texture height===0";
580
+ }
581
+ const texArraySize = textureWidth * textureHeight * 3;
582
+ const texArray = new Uint16Array(texArraySize);
583
+ dataTextureRamStats.sizeDataTexturePositions += texArray.byteLength;
584
+ dataTextureRamStats.numberOfTextures++;
585
+ texArray.fill(0);
586
+ texArray.set(positions, 0);
587
+ const texture = gl.createTexture();
588
+ gl.bindTexture(gl.TEXTURE_2D, texture);
589
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB16UI, textureWidth, textureHeight);
590
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RGB_INTEGER, gl.UNSIGNED_SHORT, texArray, 0);
591
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
592
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
593
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
594
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
595
+ gl.bindTexture(gl.TEXTURE_2D, null);
596
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
597
+ }
598
+
599
+ /**
600
+ * @param {WebGL2RenderingContext} gl
601
+ * @param {ArrayLike<int>} portionIdsArray
602
+ *
603
+ * @returns {BindableDataTexture}
604
+ */
605
+ generateTextureForPackedPortionIds(gl, portionIdsArray) {
606
+ if (portionIdsArray.length === 0) {
607
+ return {texture: null, textureHeight: 0,};
608
+ }
609
+ const lenArray = portionIdsArray.length;
610
+ const textureWidth = 4096;
611
+ const textureHeight = Math.ceil(lenArray / textureWidth);
612
+ if (textureHeight === 0) {
613
+ throw "texture height===0";
614
+ }
615
+ const texArraySize = textureWidth * textureHeight;
616
+ const texArray = new Uint16Array(texArraySize);
617
+ texArray.set(portionIdsArray, 0);
618
+ dataTextureRamStats.sizeDataTexturePortionIds += texArray.byteLength;
619
+ dataTextureRamStats.numberOfTextures++;
620
+ const texture = gl.createTexture();
621
+ gl.bindTexture(gl.TEXTURE_2D, texture);
622
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.R16UI, textureWidth, textureHeight);
623
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureWidth, textureHeight, gl.RED_INTEGER, gl.UNSIGNED_SHORT, texArray, 0);
624
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
625
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
626
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
627
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
628
+ gl.bindTexture(gl.TEXTURE_2D, null);
629
+ return new BindableDataTexture(gl, texture, textureWidth, textureHeight);
630
+ }
631
+ }