@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,492 @@
1
+ import {core} from "../core.js";
2
+ import {math} from '../math/math.js';
3
+ import {stats} from '../stats.js';
4
+ import {Component} from '../Component.js';
5
+ import {Spinner} from './Spinner.js';
6
+ import {WEBGL_INFO} from '../webglInfo.js';
7
+
8
+ const WEBGL_CONTEXT_NAMES = [
9
+ "webgl2",
10
+ "experimental-webgl",
11
+ "webkit-3d",
12
+ "moz-webgl",
13
+ "moz-glweb20"
14
+ ];
15
+
16
+ /**
17
+ * @desc Manages its {@link Scene}'s HTML canvas.
18
+ *
19
+ * * Provides the HTML canvas element in {@link Canvas#canvas}.
20
+ * * Has a {@link Spinner}, provided at {@link Canvas#spinner}, which manages the loading progress indicator.
21
+ */
22
+ class Canvas extends Component {
23
+
24
+ /**
25
+ * @constructor
26
+ * @private
27
+ */
28
+ constructor(owner, cfg = {}) {
29
+
30
+ super(owner, cfg);
31
+
32
+ this._backgroundColor = math.vec3([
33
+ cfg.backgroundColor ? cfg.backgroundColor[0] : 1,
34
+ cfg.backgroundColor ? cfg.backgroundColor[1] : 1,
35
+ cfg.backgroundColor ? cfg.backgroundColor[2] : 1]);
36
+ this._backgroundColorFromAmbientLight = !!cfg.backgroundColorFromAmbientLight;
37
+
38
+ /**
39
+ * The HTML canvas.
40
+ *
41
+ * @property canvas
42
+ * @type {HTMLCanvasElement}
43
+ * @final
44
+ */
45
+ this.canvas = cfg.canvas;
46
+
47
+ /**
48
+ * The WebGL rendering context.
49
+ *
50
+ * @property gl
51
+ * @type {WebGLRenderingContext}
52
+ * @final
53
+ */
54
+ this.gl = null;
55
+
56
+ /**
57
+ * True when WebGL 2 support is enabled.
58
+ *
59
+ * @property webgl2
60
+ * @type {Boolean}
61
+ * @final
62
+ */
63
+ this.webgl2 = false; // Will set true in _initWebGL if WebGL is requested and we succeed in getting it.
64
+
65
+ /**
66
+ * Indicates if this Canvas is transparent.
67
+ *
68
+ * @property transparent
69
+ * @type {Boolean}
70
+ * @default {false}
71
+ * @final
72
+ */
73
+ this.transparent = !!cfg.transparent;
74
+
75
+ /**
76
+ * Attributes for the WebGL context
77
+ *
78
+ * @type {{}|*}
79
+ */
80
+ this.contextAttr = cfg.contextAttr || {};
81
+ this.contextAttr.alpha = this.transparent;
82
+
83
+ this.contextAttr.preserveDrawingBuffer = !!this.contextAttr.preserveDrawingBuffer;
84
+ this.contextAttr.stencil = false;
85
+ this.contextAttr.premultipliedAlpha = (!!this.contextAttr.premultipliedAlpha); // False by default: https://github.com/xeokit/xeokit-sdk/issues/251
86
+ this.contextAttr.antialias = (this.contextAttr.antialias !== false);
87
+
88
+ // If the canvas uses css styles to specify the sizes make sure the basic
89
+ // width and height attributes match or the WebGL context will use 300 x 150
90
+
91
+ this.resolutionScale = cfg.resolutionScale;
92
+
93
+ this.canvas.width = Math.round(this.canvas.clientWidth * this._resolutionScale);
94
+ this.canvas.height = Math.round(this.canvas.clientHeight * this._resolutionScale);
95
+
96
+ /**
97
+ * Boundary of the Canvas in absolute browser window coordinates.
98
+ *
99
+ * ### Usage:
100
+ *
101
+ * ````javascript
102
+ * var boundary = myScene.canvas.boundary;
103
+ *
104
+ * var xmin = boundary[0];
105
+ * var ymin = boundary[1];
106
+ * var width = boundary[2];
107
+ * var height = boundary[3];
108
+ * ````
109
+ *
110
+ * @property boundary
111
+ * @type {Number[]}
112
+ * @final
113
+ */
114
+ this.boundary = [
115
+ this.canvas.offsetLeft, this.canvas.offsetTop,
116
+ this.canvas.clientWidth, this.canvas.clientHeight
117
+ ];
118
+
119
+ // Get WebGL context
120
+
121
+ this._initWebGL(cfg);
122
+
123
+ // Bind context loss and recovery handlers
124
+
125
+ const self = this;
126
+
127
+ this.canvas.addEventListener("webglcontextlost", this._webglcontextlostListener = function (event) {
128
+ console.time("webglcontextrestored");
129
+ self.scene._webglContextLost();
130
+ /**
131
+ * Fired whenever the WebGL context has been lost
132
+ * @event webglcontextlost
133
+ */
134
+ self.fire("webglcontextlost");
135
+ event.preventDefault();
136
+ },
137
+ false);
138
+
139
+ this.canvas.addEventListener("webglcontextrestored", this._webglcontextrestoredListener = function (event) {
140
+ self._initWebGL();
141
+ if (self.gl) {
142
+ self.scene._webglContextRestored(self.gl);
143
+ /**
144
+ * Fired whenever the WebGL context has been restored again after having previously being lost
145
+ * @event webglContextRestored
146
+ * @param value The WebGL context object
147
+ */
148
+ self.fire("webglcontextrestored", self.gl);
149
+ event.preventDefault();
150
+ }
151
+ console.timeEnd("webglcontextrestored");
152
+ },
153
+ false);
154
+
155
+ // Attach to resize events on the canvas
156
+ let dirtyBoundary = true; // make sure we publish the 1st boundary event
157
+
158
+ const resizeObserver = new ResizeObserver((entries) => {
159
+ for (const entry of entries) {
160
+ if (entry.contentBoxSize) {
161
+ dirtyBoundary = true;
162
+ }
163
+ }
164
+ });
165
+
166
+ resizeObserver.observe(this.canvas);
167
+
168
+ // Publish canvas size and position changes on each scene tick
169
+ this._tick = this.scene.on("tick", () => {
170
+ // Only publish if the canvas bounds changed
171
+ if (!dirtyBoundary) {
172
+ return;
173
+ }
174
+
175
+ dirtyBoundary = false;
176
+
177
+ // Set the real size of the canvas (the drawable w*h)
178
+ self.canvas.width = Math.round(self.canvas.clientWidth * self._resolutionScale);
179
+ self.canvas.height = Math.round(self.canvas.clientHeight * self._resolutionScale);
180
+
181
+ // Publish the boundary change
182
+ self.boundary[0] = self.canvas.offsetLeft;
183
+ self.boundary[1] = self.canvas.offsetTop;
184
+ self.boundary[2] = self.canvas.clientWidth;
185
+ self.boundary[3] = self.canvas.clientHeight;
186
+
187
+ self.fire("boundary", self.boundary);
188
+ });
189
+
190
+ this._spinner = new Spinner(this.scene, {
191
+ canvas: this.canvas,
192
+ elementId: cfg.spinnerElementId
193
+ });
194
+ }
195
+
196
+ /**
197
+ @private
198
+ */
199
+ get type() {
200
+ return "Canvas";
201
+ }
202
+
203
+ /**
204
+ * Gets whether the canvas clear color will be derived from {@link AmbientLight} or {@link Canvas#backgroundColor}
205
+ * when {@link Canvas#transparent} is ```true```.
206
+ *
207
+ * When {@link Canvas#transparent} is ```true``` and this is ````true````, then the canvas clear color will
208
+ * be taken from the {@link Scene}'s ambient light color.
209
+ *
210
+ * When {@link Canvas#transparent} is ```true``` and this is ````false````, then the canvas clear color will
211
+ * be taken from {@link Canvas#backgroundColor}.
212
+ *
213
+ * Default value is ````true````.
214
+ *
215
+ * @type {Boolean}
216
+ */
217
+ get backgroundColorFromAmbientLight() {
218
+ return this._backgroundColorFromAmbientLight;
219
+ }
220
+
221
+ /**
222
+ * Sets if the canvas background color is derived from an {@link AmbientLight}.
223
+ *
224
+ * This only has effect when the canvas is not transparent. When not enabled, the background color
225
+ * will be the canvas element's HTML/CSS background color.
226
+ *
227
+ * Default value is ````true````.
228
+ *
229
+ * @type {Boolean}
230
+ */
231
+ set backgroundColorFromAmbientLight(backgroundColorFromAmbientLight) {
232
+ this._backgroundColorFromAmbientLight = (backgroundColorFromAmbientLight !== false);
233
+ this.glRedraw();
234
+ }
235
+
236
+ /**
237
+ * Gets the canvas clear color.
238
+ *
239
+ * Default value is ````[1, 1, 1]````.
240
+ *
241
+ * @type {Number[]}
242
+ */
243
+ get backgroundColor() {
244
+ return this._backgroundColor;
245
+ }
246
+
247
+ /**
248
+ * Sets the canvas clear color.
249
+ *
250
+ * Default value is ````[1, 1, 1]````.
251
+ *
252
+ * @type {Number[]}
253
+ */
254
+ set backgroundColor(value) {
255
+ if (value) {
256
+ this._backgroundColor[0] = value[0];
257
+ this._backgroundColor[1] = value[1];
258
+ this._backgroundColor[2] = value[2];
259
+ } else {
260
+ this._backgroundColor[0] = 1.0;
261
+ this._backgroundColor[1] = 1.0;
262
+ this._backgroundColor[2] = 1.0;
263
+ }
264
+ this.glRedraw();
265
+ }
266
+
267
+ /**
268
+ * Gets the scale of the canvas back buffer relative to the CSS-defined size of the canvas.
269
+ *
270
+ * This is a common way to trade off rendering quality for speed. If the canvas size is defined in CSS, then
271
+ * setting this to a value between ````[0..1]```` (eg ````0.5````) will render into a smaller back buffer, giving
272
+ * a performance boost.
273
+ *
274
+ * @returns {*|number} The resolution scale.
275
+ */
276
+ get resolutionScale() {
277
+ return this._resolutionScale;
278
+ }
279
+
280
+ /**
281
+ * Sets the scale of the canvas back buffer relative to the CSS-defined size of the canvas.
282
+ *
283
+ * This is a common way to trade off rendering quality for speed. If the canvas size is defined in CSS, then
284
+ * setting this to a value between ````[0..1]```` (eg ````0.5````) will render into a smaller back buffer, giving
285
+ * a performance boost.
286
+ *
287
+ * @param {*|number} resolutionScale The resolution scale.
288
+ */
289
+ set resolutionScale(resolutionScale) {
290
+ resolutionScale = resolutionScale || 1.0;
291
+ if (resolutionScale === this._resolutionScale) {
292
+ return;
293
+ }
294
+ this._resolutionScale = resolutionScale;
295
+ const canvas = this.canvas;
296
+ canvas.width = Math.round(canvas.clientWidth * this._resolutionScale);
297
+ canvas.height = Math.round(canvas.clientHeight * this._resolutionScale);
298
+ this.glRedraw();
299
+ }
300
+
301
+ /**
302
+ * The busy {@link Spinner} for this Canvas.
303
+ *
304
+ * @property spinner
305
+ * @type Spinner
306
+ * @final
307
+ */
308
+ get spinner() {
309
+ return this._spinner;
310
+ }
311
+
312
+ /**
313
+ * Creates a default canvas in the DOM.
314
+ * @private
315
+ */
316
+ _createCanvas() {
317
+
318
+ const canvasId = "xeokit-canvas-" + math.createUUID();
319
+ const body = document.getElementsByTagName("body")[0];
320
+ const div = document.createElement('div');
321
+
322
+ const style = div.style;
323
+ style.height = "100%";
324
+ style.width = "100%";
325
+ style.padding = "0";
326
+ style.margin = "0";
327
+ style.background = "rgba(0,0,0,0);";
328
+ style.float = "left";
329
+ style.left = "0";
330
+ style.top = "0";
331
+ style.position = "absolute";
332
+ style.opacity = "1.0";
333
+ style["z-index"] = "-10000";
334
+
335
+ div.innerHTML += '<canvas id="' + canvasId + '" style="width: 100%; height: 100%; float: left; margin: 0; padding: 0;"></canvas>';
336
+
337
+ body.appendChild(div);
338
+
339
+ this.canvas = document.getElementById(canvasId);
340
+ }
341
+
342
+ _getElementXY(e) {
343
+ let x = 0, y = 0;
344
+ while (e) {
345
+ x += (e.offsetLeft - e.scrollLeft);
346
+ y += (e.offsetTop - e.scrollTop);
347
+ e = e.offsetParent;
348
+ }
349
+ return {x: x, y: y};
350
+ }
351
+
352
+ /**
353
+ * Initialises the WebGL context
354
+ * @private
355
+ */
356
+ _initWebGL() {
357
+
358
+ // Default context attribute values
359
+
360
+ if (!this.gl) {
361
+ for (let i = 0; !this.gl && i < WEBGL_CONTEXT_NAMES.length; i++) {
362
+ try {
363
+ this.gl = this.canvas.getContext(WEBGL_CONTEXT_NAMES[i], this.contextAttr);
364
+ } catch (e) { // Try with next context name
365
+ }
366
+ }
367
+ }
368
+
369
+ if (!this.gl) {
370
+
371
+ this.error('Failed to get a WebGL context');
372
+
373
+ /**
374
+ * Fired whenever the canvas failed to get a WebGL context, which probably means that WebGL
375
+ * is either unsupported or has been disabled.
376
+ * @event webglContextFailed
377
+ */
378
+ this.fire("webglContextFailed", true, true);
379
+ }
380
+
381
+ // data-textures: avoid to re-bind same texture
382
+ {
383
+ const gl = this.gl;
384
+
385
+ let lastTextureUnit = "__";
386
+
387
+ let originalActiveTexture = gl.activeTexture;
388
+
389
+ gl.activeTexture = function (arg1) {
390
+ if (lastTextureUnit === arg1) {
391
+ return;
392
+ }
393
+
394
+ lastTextureUnit = arg1;
395
+
396
+ originalActiveTexture.call (this, arg1);
397
+ };
398
+
399
+ let lastBindTexture = {};
400
+
401
+ let originalBindTexture = gl.bindTexture;
402
+
403
+ let avoidedRebinds = 0;
404
+
405
+ gl.bindTexture = function (arg1, arg2) {
406
+ if (lastBindTexture[lastTextureUnit] === arg2)
407
+ {
408
+ avoidedRebinds++;
409
+ return;
410
+ }
411
+
412
+ lastBindTexture[lastTextureUnit] = arg2;
413
+
414
+ originalBindTexture.call (this, arg1, arg2);
415
+ }
416
+
417
+ // setInterval (
418
+ // () => {
419
+ // console.log (`${avoidedRebinds} avoided texture binds/sec`);
420
+ // avoidedRebinds = 0;
421
+ // },
422
+ // 1000
423
+ // );
424
+ }
425
+
426
+ if (this.gl) {
427
+ // Setup extension (if necessary) and hints for fragment shader derivative functions
428
+ if (this.webgl2) {
429
+ this.gl.hint(this.gl.FRAGMENT_SHADER_DERIVATIVE_HINT, this.gl.FASTEST);
430
+
431
+ // data-textures: not using standard-derivatives
432
+ if (!(this.gl instanceof WebGL2RenderingContext)) {
433
+ }
434
+ }
435
+ }
436
+ }
437
+
438
+ /**
439
+ * @private
440
+ * @deprecated
441
+ */
442
+ getSnapshot(params) {
443
+ throw "Canvas#getSnapshot() has been replaced by Viewer#getSnapshot() - use that method instead.";
444
+ }
445
+
446
+ /**
447
+ * Reads colors of pixels from the last rendered frame.
448
+ *
449
+ * Call this method like this:
450
+ *
451
+ * ````JavaScript
452
+ *
453
+ * // Ignore transparent pixels (default is false)
454
+ * var opaqueOnly = true;
455
+ *
456
+ * var colors = new Float32Array(8);
457
+ *
458
+ * viewer.scene.canvas.readPixels([ 100, 22, 12, 33 ], colors, 2, opaqueOnly);
459
+ * ````
460
+ *
461
+ * Then the r,g,b components of the colors will be set to the colors at those pixels.
462
+ *
463
+ * @param {Number[]} pixels
464
+ * @param {Number[]} colors
465
+ * @param {Number} size
466
+ * @param {Boolean} opaqueOnly
467
+ */
468
+ readPixels(pixels, colors, size, opaqueOnly) {
469
+ return this.scene._renderer.readPixels(pixels, colors, size, opaqueOnly);
470
+ }
471
+
472
+ /**
473
+ * Simulates lost WebGL context.
474
+ */
475
+ loseWebGLContext() {
476
+ if (this.canvas.loseContext) {
477
+ this.canvas.loseContext();
478
+ }
479
+ }
480
+
481
+ destroy() {
482
+ this.scene.off(this._tick);
483
+ this._spinner._destroy();
484
+ // Memory leak avoidance
485
+ this.canvas.removeEventListener("webglcontextlost", this._webglcontextlostListener);
486
+ this.canvas.removeEventListener("webglcontextrestored", this._webglcontextrestoredListener);
487
+ this.gl = null;
488
+ super.destroy();
489
+ }
490
+ }
491
+
492
+ export {Canvas};