m4-w-fast 1.1.2 → 1.2.0

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 (298) hide show
  1. package/README.md +6 -0
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.mjs +1 -1
  6. package/dist/intersect.worker.js +2 -2
  7. package/dist/isoBands.worker.js +1 -1
  8. package/dist/m4-w-fast.umd.js +1 -1
  9. package/dist/raster-leaflet/index.cjs +2 -0
  10. package/dist/raster-leaflet/index.d.ts +5 -0
  11. package/dist/raster-leaflet/index.js +1 -0
  12. package/dist/raster-leaflet/index.mjs +2 -0
  13. package/dist/raster-leaflet/m4-w-raster-leaflet.umd.js +2 -0
  14. package/dist/raster-mars3d/cesiumRasterPlaneRenderer.d.ts +28 -0
  15. package/dist/raster-mars3d/cesiumRasterPlaneRenderer.js +1 -0
  16. package/dist/raster-mars3d/cesiumRasterTextureAdapter.d.ts +14 -0
  17. package/dist/raster-mars3d/cesiumRasterTextureAdapter.js +1 -0
  18. package/dist/raster-mars3d/index.cjs +2 -0
  19. package/dist/raster-mars3d/index.d.ts +6 -0
  20. package/dist/raster-mars3d/index.js +1 -0
  21. package/dist/raster-mars3d/index.mjs +2 -0
  22. package/dist/raster-mars3d/m4-w-raster-mars3d.umd.js +2 -0
  23. package/dist/raster-mars3d/mars3dRasterImageryProvider.d.ts +30 -0
  24. package/dist/raster-mars3d/mars3dRasterImageryProvider.js +1 -0
  25. package/dist/raster-mars3d/mars3dRasterPlaneLayer.d.ts +3 -0
  26. package/dist/raster-mars3d/mars3dRasterPlaneLayer.js +1 -0
  27. package/dist/raster-mars3d/rasterPlaneCesiumTypes.d.ts +95 -0
  28. package/dist/raster-mars3d/rasterPlaneCesiumTypes.js +1 -0
  29. package/dist/raster-mars3d/rasterPlaneGeometry.d.ts +5 -0
  30. package/dist/raster-mars3d/rasterPlaneGeometry.js +1 -0
  31. package/dist/raster-mars3d/rasterPlaneGridChunks.d.ts +4 -0
  32. package/dist/raster-mars3d/rasterPlaneGridChunks.js +1 -0
  33. package/dist/raster-mars3d/rasterPlaneMaterial.d.ts +21 -0
  34. package/dist/raster-mars3d/rasterPlaneMaterial.js +1 -0
  35. package/dist/raster-mars3d/rasterPlaneTypes.d.ts +33 -0
  36. package/dist/raster-mars3d/rasterPlaneTypes.js +1 -0
  37. package/dist/raster-mars3d/types.d.ts +30 -0
  38. package/dist/raster-mars3d/types.js +1 -0
  39. package/dist/raster-overlay/color.d.ts +1 -1
  40. package/dist/raster-overlay/color.js +1 -1
  41. package/dist/raster-overlay/core.d.ts +1 -1
  42. package/dist/raster-overlay/core.js +1 -1
  43. package/dist/raster-overlay/index.cjs +2 -2
  44. package/dist/raster-overlay/index.d.ts +5 -2
  45. package/dist/raster-overlay/index.js +1 -1
  46. package/dist/raster-overlay/index.mjs +2 -2
  47. package/dist/raster-overlay/leaflet-renderers/createRenderer.d.ts +3 -7
  48. package/dist/raster-overlay/leaflet-renderers/createRenderer.js +1 -1
  49. package/dist/raster-overlay/leaflet-renderers/renderer.d.ts +1 -59
  50. package/dist/raster-overlay/leafletLayer.d.ts +4 -0
  51. package/dist/raster-overlay/leafletLayer.js +1 -1
  52. package/dist/raster-overlay/leafletTypes.d.ts +21 -0
  53. package/dist/raster-overlay/leafletTypes.js +1 -0
  54. package/dist/raster-overlay/m4-w-raster-overlay.umd.js +2 -2
  55. package/dist/raster-overlay/query.d.ts +1 -1
  56. package/dist/raster-overlay/query.js +1 -1
  57. package/dist/raster-overlay/rasterTypes.d.ts +73 -0
  58. package/dist/raster-overlay/rasterTypes.js +1 -0
  59. package/dist/raster-overlay/rendering/createRasterRenderer.d.ts +4 -0
  60. package/dist/raster-overlay/rendering/createRasterRenderer.js +1 -0
  61. package/dist/raster-overlay/rendering/index.d.ts +5 -0
  62. package/dist/raster-overlay/rendering/index.js +1 -0
  63. package/dist/raster-overlay/rendering/rasterRenderState.d.ts +27 -0
  64. package/dist/raster-overlay/rendering/rasterRenderState.js +1 -0
  65. package/dist/raster-overlay/rendering/renderer.d.ts +15 -0
  66. package/dist/raster-overlay/rendering/renderer.js +1 -0
  67. package/dist/raster-overlay/rendering/webgl2RasterRenderer.d.ts +34 -0
  68. package/dist/raster-overlay/rendering/webgl2RasterRenderer.js +1 -0
  69. package/dist/raster-overlay/rendering/webgpuRasterRenderer.d.ts +42 -0
  70. package/dist/raster-overlay/rendering/webgpuRasterRenderer.js +1 -0
  71. package/dist/raster-overlay/types.d.ts +2 -235
  72. package/dist/raster-rendering/index.cjs +2 -0
  73. package/dist/raster-rendering/index.d.ts +8 -0
  74. package/dist/raster-rendering/index.js +1 -0
  75. package/dist/raster-rendering/index.mjs +2 -0
  76. package/dist/raster-rendering/m4-w-raster-rendering.umd.js +2 -0
  77. package/dist/raster-rendering/types.d.ts +13 -0
  78. package/dist/raster-rendering/types.js +1 -0
  79. package/dist/raster-rendering/webgpuRasterTileRenderer.d.ts +29 -0
  80. package/dist/raster-rendering/webgpuRasterTileRenderer.js +1 -0
  81. package/dist/readFile.d.ts +2 -2
  82. package/dist/readFile.js +1 -1
  83. package/dist/rendering/index.d.ts +6 -0
  84. package/dist/rendering/index.js +1 -0
  85. package/dist/rendering/renderer.d.ts +35 -0
  86. package/dist/rendering/renderer.js +1 -0
  87. package/dist/rendering/types.d.ts +20 -0
  88. package/dist/rendering/types.js +1 -0
  89. package/dist/rendering/webgl2/baseWebgl2Renderer.d.ts +37 -0
  90. package/dist/rendering/webgl2/baseWebgl2Renderer.js +1 -0
  91. package/dist/rendering/webgl2/index.d.ts +4 -0
  92. package/dist/rendering/webgl2/index.js +1 -0
  93. package/dist/rendering/webgl2/types.d.ts +24 -0
  94. package/dist/rendering/webgl2/types.js +1 -0
  95. package/dist/rendering/webgl2/webgl2CoverageResources.d.ts +29 -0
  96. package/dist/rendering/webgl2/webgl2CoverageResources.js +1 -0
  97. package/dist/rendering/webgl2/webgl2VisualizationResources.d.ts +33 -0
  98. package/dist/rendering/webgl2/webgl2VisualizationResources.js +1 -0
  99. package/dist/rendering/webgpu/baseWebgpuRenderer.d.ts +181 -0
  100. package/dist/rendering/webgpu/baseWebgpuRenderer.js +1 -0
  101. package/dist/rendering/webgpu/index.d.ts +3 -0
  102. package/dist/rendering/webgpu/index.js +1 -0
  103. package/dist/rendering/webgpu/types.d.ts +33 -0
  104. package/dist/rendering/webgpu/types.js +1 -0
  105. package/dist/rendering/webgpu/visualizationParams.d.ts +25 -0
  106. package/dist/rendering/webgpu/visualizationParams.js +1 -0
  107. package/dist/rendering/webgpu/visualizationResources.d.ts +50 -0
  108. package/dist/rendering/webgpu/visualizationResources.js +1 -0
  109. package/dist/rendering/webgpu/webgpuCoverageResources.d.ts +36 -0
  110. package/dist/rendering/webgpu/webgpuCoverageResources.js +1 -0
  111. package/dist/road-overlay/coordinateTransform.js +1 -1
  112. package/dist/road-overlay/index.cjs +2 -2
  113. package/dist/road-overlay/index.d.ts +3 -1
  114. package/dist/road-overlay/index.js +1 -1
  115. package/dist/road-overlay/index.mjs +2 -2
  116. package/dist/road-overlay/leaflet-renderers/createRenderer.d.ts +3 -7
  117. package/dist/road-overlay/leaflet-renderers/createRenderer.js +1 -1
  118. package/dist/road-overlay/leaflet-renderers/renderer.d.ts +1 -82
  119. package/dist/road-overlay/leafletLayer.d.ts +2 -0
  120. package/dist/road-overlay/leafletLayer.js +1 -1
  121. package/dist/road-overlay/m4-w-road-overlay.umd.js +2 -2
  122. package/dist/road-overlay/options.d.ts +5 -1
  123. package/dist/road-overlay/options.js +1 -1
  124. package/dist/road-overlay/rendering/index.d.ts +4 -0
  125. package/dist/road-overlay/rendering/index.js +1 -0
  126. package/dist/road-overlay/rendering/renderer.d.ts +54 -0
  127. package/dist/road-overlay/rendering/renderer.js +1 -0
  128. package/dist/road-overlay/rendering/roadRenderState.d.ts +137 -0
  129. package/dist/road-overlay/rendering/roadRenderState.js +1 -0
  130. package/dist/road-overlay/rendering/webgl2RoadRenderer.d.ts +38 -0
  131. package/dist/road-overlay/rendering/webgl2RoadRenderer.js +1 -0
  132. package/dist/road-overlay/rendering/webgpuRoadRenderer.d.ts +134 -0
  133. package/dist/road-overlay/rendering/webgpuRoadRenderer.js +1 -0
  134. package/dist/road-overlay/roadData.d.ts +3 -2
  135. package/dist/road-overlay/roadData.js +1 -1
  136. package/dist/road-overlay/roadGeometry.d.ts +2 -2
  137. package/dist/road-overlay/roadGeometry.js +1 -1
  138. package/dist/road-overlay/roadMesh.d.ts +7 -5
  139. package/dist/road-overlay/roadMesh.js +1 -1
  140. package/dist/road-overlay/types.d.ts +10 -2
  141. package/dist/shared/coordinate-shader/webgl2/index.d.ts +3 -0
  142. package/dist/shared/coordinate-shader/webgl2/index.js +1 -0
  143. package/dist/shared/coordinate-shader/webgpu/index.d.ts +5 -0
  144. package/dist/shared/coordinate-shader/webgpu/index.js +1 -0
  145. package/dist/shared/coverage/index.d.ts +1 -0
  146. package/dist/shared/coverage/index.js +1 -0
  147. package/dist/shared/coverage/types.d.ts +8 -0
  148. package/dist/shared/coverage/types.js +1 -0
  149. package/dist/shared/map/index.d.ts +2 -0
  150. package/dist/shared/map/index.js +1 -0
  151. package/dist/shared/map/leaflet.d.ts +7 -0
  152. package/dist/shared/map/leaflet.js +1 -0
  153. package/dist/shared/map/types.d.ts +19 -0
  154. package/dist/shared/map/types.js +1 -0
  155. package/dist/shared/polygon/contains.d.ts +3 -0
  156. package/dist/shared/polygon/contains.js +1 -0
  157. package/dist/shared/polygon/index.d.ts +3 -0
  158. package/dist/shared/polygon/index.js +1 -0
  159. package/dist/shared/polygon/polygonMesh.d.ts +3 -0
  160. package/dist/shared/polygon/polygonMesh.js +1 -0
  161. package/dist/shared/polygon/types.d.ts +11 -0
  162. package/dist/shared/polygon/types.js +1 -0
  163. package/dist/shared/shader/assemble.d.ts +5 -0
  164. package/dist/shared/shader/assemble.js +1 -0
  165. package/dist/shared/visualization/index.d.ts +2 -0
  166. package/dist/shared/visualization/index.js +1 -0
  167. package/dist/shared/visualization/shader/webgl2/index.d.ts +1 -0
  168. package/dist/shared/visualization/shader/webgl2/index.js +1 -0
  169. package/dist/shared/visualization/shader/webgpu/index.d.ts +10 -0
  170. package/dist/shared/visualization/shader/webgpu/index.js +1 -0
  171. package/dist/shared/visualization/types.d.ts +68 -0
  172. package/dist/shared/visualization/types.js +1 -0
  173. package/dist/shared/visualization/utils.d.ts +46 -0
  174. package/dist/shared/visualization/utils.js +1 -0
  175. package/dist/volume-mars3d/createMars3dVolumeScene.d.ts +3 -0
  176. package/dist/volume-mars3d/createMars3dVolumeScene.js +1 -0
  177. package/dist/volume-mars3d/index.cjs +1 -0
  178. package/dist/volume-mars3d/index.d.ts +2 -0
  179. package/dist/volume-mars3d/index.js +1 -0
  180. package/dist/volume-mars3d/index.mjs +1 -0
  181. package/dist/volume-mars3d/m4-w-volume-mars3d.umd.js +1 -0
  182. package/dist/volume-mars3d/mars3dCanvasCompensation.d.ts +22 -0
  183. package/dist/volume-mars3d/mars3dCanvasCompensation.js +1 -0
  184. package/dist/volume-mars3d/mars3dRaymarchShader.d.ts +1 -0
  185. package/dist/volume-mars3d/mars3dRaymarchShader.js +1 -0
  186. package/dist/volume-mars3d/mars3dVolumeLayer.d.ts +2 -0
  187. package/dist/volume-mars3d/mars3dVolumeLayer.js +1 -0
  188. package/dist/volume-mars3d/mars3dVolumeRenderer.d.ts +56 -0
  189. package/dist/volume-mars3d/mars3dVolumeRenderer.js +1 -0
  190. package/dist/volume-mars3d/volumeMars3dTypes.d.ts +85 -0
  191. package/dist/volume-mars3d/volumeMars3dTypes.js +1 -0
  192. package/dist/volume-mars3d-native/index.cjs +1 -0
  193. package/dist/volume-mars3d-native/index.d.ts +4 -0
  194. package/dist/volume-mars3d-native/index.js +1 -0
  195. package/dist/volume-mars3d-native/index.mjs +1 -0
  196. package/dist/volume-mars3d-native/liveUpdateScheduler.d.ts +10 -0
  197. package/dist/volume-mars3d-native/liveUpdateScheduler.js +1 -0
  198. package/dist/volume-mars3d-native/m4-w-volume-mars3d-native.umd.js +1 -0
  199. package/dist/volume-mars3d-native/mars3dNativeSliceLayer.d.ts +2 -0
  200. package/dist/volume-mars3d-native/mars3dNativeSliceLayer.js +1 -0
  201. package/dist/volume-mars3d-native/mars3dNativeSliceRenderer.d.ts +56 -0
  202. package/dist/volume-mars3d-native/mars3dNativeSliceRenderer.js +1 -0
  203. package/dist/volume-mars3d-native/mars3dNativeVolumeLayer.d.ts +2 -0
  204. package/dist/volume-mars3d-native/mars3dNativeVolumeLayer.js +1 -0
  205. package/dist/volume-mars3d-native/mars3dNativeVolumeRenderer.d.ts +34 -0
  206. package/dist/volume-mars3d-native/mars3dNativeVolumeRenderer.js +1 -0
  207. package/dist/volume-mars3d-native/nativeAxisSliceRenderer.d.ts +40 -0
  208. package/dist/volume-mars3d-native/nativeAxisSliceRenderer.js +1 -0
  209. package/dist/volume-mars3d-native/nativeSliceAtlas.d.ts +50 -0
  210. package/dist/volume-mars3d-native/nativeSliceAtlas.js +1 -0
  211. package/dist/volume-mars3d-native/nativeSliceRuntimeTypes.d.ts +17 -0
  212. package/dist/volume-mars3d-native/nativeSliceRuntimeTypes.js +1 -0
  213. package/dist/volume-mars3d-native/nativeTypes.d.ts +174 -0
  214. package/dist/volume-mars3d-native/nativeTypes.js +1 -0
  215. package/dist/volume-mars3d-native/nativeVoxelProvider.d.ts +6 -0
  216. package/dist/volume-mars3d-native/nativeVoxelProvider.js +1 -0
  217. package/dist/volume-mars3d-native/nativeVoxelShader.d.ts +2 -0
  218. package/dist/volume-mars3d-native/nativeVoxelShader.js +1 -0
  219. package/dist/volume-mars3d-native/voxelData.d.ts +9 -0
  220. package/dist/volume-mars3d-native/voxelData.js +1 -0
  221. package/dist/volume-scene/brickLayout.d.ts +75 -0
  222. package/dist/volume-scene/brickLayout.js +1 -0
  223. package/dist/volume-scene/brickResidency.d.ts +54 -0
  224. package/dist/volume-scene/brickResidency.js +1 -0
  225. package/dist/volume-scene/camera.d.ts +22 -0
  226. package/dist/volume-scene/camera.js +1 -0
  227. package/dist/volume-scene/cameraTypes.d.ts +37 -0
  228. package/dist/volume-scene/cameraTypes.js +1 -0
  229. package/dist/volume-scene/createVolumeScene.d.ts +4 -0
  230. package/dist/volume-scene/createVolumeScene.js +1 -0
  231. package/dist/volume-scene/geographicTypes.d.ts +16 -0
  232. package/dist/volume-scene/geographicTypes.js +1 -0
  233. package/dist/volume-scene/geographicVolume.d.ts +4 -0
  234. package/dist/volume-scene/geographicVolume.js +1 -0
  235. package/dist/volume-scene/inMemoryVolumeSource.d.ts +3 -0
  236. package/dist/volume-scene/inMemoryVolumeSource.js +1 -0
  237. package/dist/volume-scene/index.cjs +1 -0
  238. package/dist/volume-scene/index.d.ts +12 -0
  239. package/dist/volume-scene/index.js +1 -0
  240. package/dist/volume-scene/index.mjs +1 -0
  241. package/dist/volume-scene/m4-w-volume-scene.umd.js +1 -0
  242. package/dist/volume-scene/matrix.d.ts +11 -0
  243. package/dist/volume-scene/matrix.js +1 -0
  244. package/dist/volume-scene/profileTypes.d.ts +20 -0
  245. package/dist/volume-scene/profileTypes.js +1 -0
  246. package/dist/volume-scene/rendering/webgpu/index.d.ts +2 -0
  247. package/dist/volume-scene/rendering/webgpu/index.js +1 -0
  248. package/dist/volume-scene/rendering/webgpu/webgpuBrickAtlas.d.ts +59 -0
  249. package/dist/volume-scene/rendering/webgpu/webgpuBrickAtlas.js +1 -0
  250. package/dist/volume-scene/rendering/webgpu/webgpuSceneAttachments.d.ts +11 -0
  251. package/dist/volume-scene/rendering/webgpu/webgpuSceneAttachments.js +1 -0
  252. package/dist/volume-scene/rendering/webgpu/webgpuSceneMeshResources.d.ts +12 -0
  253. package/dist/volume-scene/rendering/webgpu/webgpuSceneMeshResources.js +1 -0
  254. package/dist/volume-scene/rendering/webgpu/webgpuSliceResources.d.ts +21 -0
  255. package/dist/volume-scene/rendering/webgpu/webgpuSliceResources.js +1 -0
  256. package/dist/volume-scene/rendering/webgpu/webgpuTransferResources.d.ts +16 -0
  257. package/dist/volume-scene/rendering/webgpu/webgpuTransferResources.js +1 -0
  258. package/dist/volume-scene/rendering/webgpu/webgpuVolumeSceneRenderer.d.ts +126 -0
  259. package/dist/volume-scene/rendering/webgpu/webgpuVolumeSceneRenderer.js +1 -0
  260. package/dist/volume-scene/rendering/webgpu/webgpuVolumeTypes.d.ts +108 -0
  261. package/dist/volume-scene/rendering/webgpu/webgpuVolumeTypes.js +1 -0
  262. package/dist/volume-scene/routeProfileMesh.d.ts +7 -0
  263. package/dist/volume-scene/routeProfileMesh.js +1 -0
  264. package/dist/volume-scene/sceneTypes.d.ts +136 -0
  265. package/dist/volume-scene/sceneTypes.js +1 -0
  266. package/dist/volume-scene/sliceInteractionController.d.ts +27 -0
  267. package/dist/volume-scene/sliceInteractionController.js +1 -0
  268. package/dist/volume-scene/sliceMarkerOverlay.d.ts +28 -0
  269. package/dist/volume-scene/sliceMarkerOverlay.js +1 -0
  270. package/dist/volume-scene/sliceState.d.ts +34 -0
  271. package/dist/volume-scene/sliceState.js +1 -0
  272. package/dist/volume-scene/sliceTypes.d.ts +52 -0
  273. package/dist/volume-scene/sliceTypes.js +1 -0
  274. package/dist/volume-scene/sourceTypes.d.ts +47 -0
  275. package/dist/volume-scene/sourceTypes.js +1 -0
  276. package/dist/volume-scene/transferTypes.d.ts +12 -0
  277. package/dist/volume-scene/transferTypes.js +1 -0
  278. package/dist/volume-scene/volumeBrickData.d.ts +3 -0
  279. package/dist/volume-scene/volumeBrickData.js +1 -0
  280. package/dist/volume-scene/volumeScene.d.ts +103 -0
  281. package/dist/volume-scene/volumeScene.js +1 -0
  282. package/dist/volume-scene/volumeTransfer.d.ts +8 -0
  283. package/dist/volume-scene/volumeTransfer.js +1 -0
  284. package/dist/volume-scene/volumeValidation.d.ts +27 -0
  285. package/dist/volume-scene/volumeValidation.js +1 -0
  286. package/package.json +6 -3
  287. package/dist/raster-overlay/leaflet-renderers/cpuRenderer.d.ts +0 -0
  288. package/dist/raster-overlay/leaflet-renderers/cpuRenderer.js +0 -1
  289. package/dist/raster-overlay/leaflet-renderers/rasterRendererUtils.d.ts +0 -52
  290. package/dist/raster-overlay/leaflet-renderers/rasterRendererUtils.js +0 -1
  291. package/dist/raster-overlay/leaflet-renderers/webgl2Renderer.d.ts +0 -111
  292. package/dist/raster-overlay/leaflet-renderers/webgl2Renderer.js +0 -1
  293. package/dist/raster-overlay/leaflet-renderers/webglRenderer.d.ts +0 -0
  294. package/dist/raster-overlay/leaflet-renderers/webglRenderer.js +0 -1
  295. package/dist/raster-overlay/leaflet-renderers/webgpuRenderer.d.ts +0 -114
  296. package/dist/raster-overlay/leaflet-renderers/webgpuRenderer.js +0 -1
  297. package/dist/road-overlay/leaflet-renderers/webgpuRenderer.d.ts +0 -55
  298. package/dist/road-overlay/leaflet-renderers/webgpuRenderer.js +0 -1
@@ -0,0 +1,11 @@
1
+ import type { VolumeVector3 } from './cameraTypes';
2
+ export declare const createIdentityMatrix: () => Float32Array<ArrayBuffer>;
3
+ export declare const multiplyMatrices: (left: ArrayLike<number>, right: ArrayLike<number>) => Float32Array<ArrayBuffer>;
4
+ export declare const invertMatrix: (matrix: ArrayLike<number>) => Float32Array<ArrayBuffer>;
5
+ export declare const createLookAtMatrix: (position: VolumeVector3, target: VolumeVector3, up: VolumeVector3) => Float32Array<ArrayBuffer>;
6
+ export declare const createPerspectiveMatrix: (fovYRadians: number, aspect: number, near: number, far: number) => Float32Array<ArrayBuffer>;
7
+ export declare const createOrthographicMatrix: (height: number, aspect: number, near: number, far: number) => Float32Array<ArrayBuffer>;
8
+ export declare const createScaleMatrix: (x: number, y: number, z: number) => Float32Array<ArrayBuffer>;
9
+ export declare const composeVolumeModelMatrix: (baseMatrix: ArrayLike<number> | undefined, verticalScale: number) => Float32Array<ArrayBuffer>;
10
+ export declare const transformPoint: (matrix: ArrayLike<number>, point: VolumeVector3, w?: number) => readonly [number, number, number, number];
11
+ export declare const projectPointToViewport: (matrix: ArrayLike<number>, point: VolumeVector3, width: number, height: number) => readonly [number, number, number] | null;
@@ -0,0 +1 @@
1
+ (function(_0x36ae66,_0x43f6e7){const _0x325975=_0x436b,_0x248f8f=_0x36ae66();while(!![]){try{const _0x1d1c01=-parseInt(_0x325975(0xcc))/0x1+parseInt(_0x325975(0xbd))/0x2*(-parseInt(_0x325975(0xc2))/0x3)+-parseInt(_0x325975(0xbf))/0x4*(-parseInt(_0x325975(0xbe))/0x5)+-parseInt(_0x325975(0xc5))/0x6*(-parseInt(_0x325975(0xc7))/0x7)+-parseInt(_0x325975(0xbc))/0x8+-parseInt(_0x325975(0xc3))/0x9+parseInt(_0x325975(0xcb))/0xa;if(_0x1d1c01===_0x43f6e7)break;else _0x248f8f['push'](_0x248f8f['shift']());}catch(_0x76441a){_0x248f8f['push'](_0x248f8f['shift']());}}}(_0x2f94,0x7e51f));const MATRIX_ELEMENT_COUNT=0x10,EPSILON=1e-8,createMatrix=()=>new Float32Array(MATRIX_ELEMENT_COUNT),dotVector3=(_0x1a6b8e,_0x4fac4a)=>_0x1a6b8e[0x0]*_0x4fac4a[0x0]+_0x1a6b8e[0x1]*_0x4fac4a[0x1]+_0x1a6b8e[0x2]*_0x4fac4a[0x2],subtractVector3=(_0x1e442c,_0x1b353f)=>[_0x1e442c[0x0]-_0x1b353f[0x0],_0x1e442c[0x1]-_0x1b353f[0x1],_0x1e442c[0x2]-_0x1b353f[0x2]],crossVector3=(_0x3ce06c,_0x5129dd)=>[_0x3ce06c[0x1]*_0x5129dd[0x2]-_0x3ce06c[0x2]*_0x5129dd[0x1],_0x3ce06c[0x2]*_0x5129dd[0x0]-_0x3ce06c[0x0]*_0x5129dd[0x2],_0x3ce06c[0x0]*_0x5129dd[0x1]-_0x3ce06c[0x1]*_0x5129dd[0x0]],normalizeVector3=_0x16d6d5=>{const _0x23753c=_0x436b,_0x5c7c79=Math['hypot'](_0x16d6d5[0x0],_0x16d6d5[0x1],_0x16d6d5[0x2]);if(_0x5c7c79<=EPSILON)throw new Error(_0x23753c(0xbb));return[_0x16d6d5[0x0]/_0x5c7c79,_0x16d6d5[0x1]/_0x5c7c79,_0x16d6d5[0x2]/_0x5c7c79];};export const createIdentityMatrix=()=>{const _0x2bbb3d=createMatrix();return _0x2bbb3d[0x0]=0x1,_0x2bbb3d[0x5]=0x1,_0x2bbb3d[0xa]=0x1,_0x2bbb3d[0xf]=0x1,_0x2bbb3d;};export const multiplyMatrices=(_0x42beda,_0x4b99cd)=>{const _0x3ccc05=createMatrix();for(let _0x492895=0x0;_0x492895<0x4;_0x492895+=0x1){for(let _0x4ab3e7=0x0;_0x4ab3e7<0x4;_0x4ab3e7+=0x1){let _0x166422=0x0;for(let _0x2c6333=0x0;_0x2c6333<0x4;_0x2c6333+=0x1)_0x166422+=_0x42beda[_0x2c6333*0x4+_0x4ab3e7]*_0x4b99cd[_0x492895*0x4+_0x2c6333];_0x3ccc05[_0x492895*0x4+_0x4ab3e7]=_0x166422;}}return _0x3ccc05;};export const invertMatrix=_0x79e73c=>{const _0x448aab=_0x436b,_0x3fbf58=Array[_0x448aab(0xc6)]({'length':0x4},(_0x279be3,_0x27d05d)=>{const _0xb98475=new Float64Array(0x8);for(let _0x31173e=0x0;_0x31173e<0x4;_0x31173e+=0x1)_0xb98475[_0x31173e]=_0x79e73c[_0x31173e*0x4+_0x27d05d];return _0xb98475[_0x27d05d+0x4]=0x1,_0xb98475;});for(let _0x8da2fc=0x0;_0x8da2fc<0x4;_0x8da2fc+=0x1){let _0x4cc5fd=_0x8da2fc;for(let _0x494f14=_0x8da2fc+0x1;_0x494f14<0x4;_0x494f14+=0x1){if(Math[_0x448aab(0xc1)](_0x3fbf58[_0x494f14][_0x8da2fc])>Math[_0x448aab(0xc1)](_0x3fbf58[_0x4cc5fd][_0x8da2fc]))_0x4cc5fd=_0x494f14;}if(Math[_0x448aab(0xc1)](_0x3fbf58[_0x4cc5fd][_0x8da2fc])<=EPSILON)throw new Error(_0x448aab(0xba));if(_0x4cc5fd!==_0x8da2fc)[_0x3fbf58[_0x8da2fc],_0x3fbf58[_0x4cc5fd]]=[_0x3fbf58[_0x4cc5fd],_0x3fbf58[_0x8da2fc]];const _0x291fbc=_0x3fbf58[_0x8da2fc][_0x8da2fc];for(let _0xd447e9=0x0;_0xd447e9<0x8;_0xd447e9+=0x1)_0x3fbf58[_0x8da2fc][_0xd447e9]/=_0x291fbc;for(let _0x353dde=0x0;_0x353dde<0x4;_0x353dde+=0x1){if(_0x353dde===_0x8da2fc)continue;const _0x40b278=_0x3fbf58[_0x353dde][_0x8da2fc];for(let _0xdb9664=0x0;_0xdb9664<0x8;_0xdb9664+=0x1)_0x3fbf58[_0x353dde][_0xdb9664]-=_0x40b278*_0x3fbf58[_0x8da2fc][_0xdb9664];}}const _0x2d02a8=createMatrix();for(let _0x44e647=0x0;_0x44e647<0x4;_0x44e647+=0x1){for(let _0x30aa99=0x0;_0x30aa99<0x4;_0x30aa99+=0x1)_0x2d02a8[_0x30aa99*0x4+_0x44e647]=_0x3fbf58[_0x44e647][_0x30aa99+0x4];}return _0x2d02a8;};function _0x2f94(){const _0x17bdb5=['tan','矩阵不可逆。','无法归一化长度为零的三维向量。','2707952wuXyMa','41278jIoPbk','53820EvfFLt','284KqTNhJ','isFinite','abs','12EcCDdq','570384KuLeBB','相机裁剪距离必须满足\x200\x20<=\x20near\x20<\x20far。','2418pHJViN','from','539vFQekK','正交相机高度和宽高比必须大于\x200。','verticalScale\x20必须是大于\x200\x20的有限数。','相机裁剪距离必须满足\x200\x20<\x20near\x20<\x20far。','4954500dcwalN','288892ZQNEjY'];_0x2f94=function(){return _0x17bdb5;};return _0x2f94();}export const createLookAtMatrix=(_0x29d9e6,_0x200491,_0x3907bd)=>{const _0x4cdf40=normalizeVector3(subtractVector3(_0x29d9e6,_0x200491)),_0x2e2387=normalizeVector3(crossVector3(_0x3907bd,_0x4cdf40)),_0x5ef17d=crossVector3(_0x4cdf40,_0x2e2387),_0x28d16a=createIdentityMatrix();return _0x28d16a[0x0]=_0x2e2387[0x0],_0x28d16a[0x1]=_0x5ef17d[0x0],_0x28d16a[0x2]=_0x4cdf40[0x0],_0x28d16a[0x4]=_0x2e2387[0x1],_0x28d16a[0x5]=_0x5ef17d[0x1],_0x28d16a[0x6]=_0x4cdf40[0x1],_0x28d16a[0x8]=_0x2e2387[0x2],_0x28d16a[0x9]=_0x5ef17d[0x2],_0x28d16a[0xa]=_0x4cdf40[0x2],_0x28d16a[0xc]=-dotVector3(_0x2e2387,_0x29d9e6),_0x28d16a[0xd]=-dotVector3(_0x5ef17d,_0x29d9e6),_0x28d16a[0xe]=-dotVector3(_0x4cdf40,_0x29d9e6),_0x28d16a;};export const createPerspectiveMatrix=(_0x8e3a39,_0x1c2f9d,_0x27de3a,_0x52358b)=>{const _0xde8ff0=_0x436b;if(!(_0x8e3a39>0x0&&_0x8e3a39<Math['PI']))throw new Error('透视相机视场角必须位于\x200\x20到\x20180\x20度之间。');if(!(_0x1c2f9d>0x0))throw new Error('相机宽高比必须大于\x200。');if(!(_0x27de3a>0x0&&_0x52358b>_0x27de3a))throw new Error(_0xde8ff0(0xca));const _0x4ac043=0x1/Math[_0xde8ff0(0xb9)](_0x8e3a39/0x2),_0x4ac803=createMatrix();return _0x4ac803[0x0]=_0x4ac043/_0x1c2f9d,_0x4ac803[0x5]=_0x4ac043,_0x4ac803[0xa]=_0x52358b/(_0x27de3a-_0x52358b),_0x4ac803[0xb]=-0x1,_0x4ac803[0xe]=_0x27de3a*_0x52358b/(_0x27de3a-_0x52358b),_0x4ac803;};export const createOrthographicMatrix=(_0x589f6b,_0x365519,_0x504f26,_0x441d4e)=>{const _0x4d2814=_0x436b;if(!(_0x589f6b>0x0&&_0x365519>0x0))throw new Error(_0x4d2814(0xc8));if(!(_0x504f26>=0x0&&_0x441d4e>_0x504f26))throw new Error(_0x4d2814(0xc4));const _0x239053=_0x589f6b*_0x365519,_0x2f711c=createIdentityMatrix();return _0x2f711c[0x0]=0x2/_0x239053,_0x2f711c[0x5]=0x2/_0x589f6b,_0x2f711c[0xa]=0x1/(_0x504f26-_0x441d4e),_0x2f711c[0xe]=_0x504f26/(_0x504f26-_0x441d4e),_0x2f711c;};function _0x436b(_0x280d73,_0x42cdae){const _0x2f9410=_0x2f94();return _0x436b=function(_0x436b26,_0x458fed){_0x436b26=_0x436b26-0xb9;let _0xd8a41=_0x2f9410[_0x436b26];return _0xd8a41;},_0x436b(_0x280d73,_0x42cdae);}export const createScaleMatrix=(_0x4e067d,_0x3e722a,_0x359bf5)=>{const _0x441557=createIdentityMatrix();return _0x441557[0x0]=_0x4e067d,_0x441557[0x5]=_0x3e722a,_0x441557[0xa]=_0x359bf5,_0x441557;};export const composeVolumeModelMatrix=(_0x315ff9,_0x3df2b1)=>{const _0x5121e3=_0x436b;if(!(_0x3df2b1>0x0)||!Number[_0x5121e3(0xc0)](_0x3df2b1))throw new Error(_0x5121e3(0xc9));const _0x557dc9=createScaleMatrix(0x1,_0x3df2b1,0x1);return _0x315ff9?multiplyMatrices(_0x315ff9,_0x557dc9):_0x557dc9;};export const transformPoint=(_0x483fbb,_0x123e86,_0x5e5cda=0x1)=>[_0x483fbb[0x0]*_0x123e86[0x0]+_0x483fbb[0x4]*_0x123e86[0x1]+_0x483fbb[0x8]*_0x123e86[0x2]+_0x483fbb[0xc]*_0x5e5cda,_0x483fbb[0x1]*_0x123e86[0x0]+_0x483fbb[0x5]*_0x123e86[0x1]+_0x483fbb[0x9]*_0x123e86[0x2]+_0x483fbb[0xd]*_0x5e5cda,_0x483fbb[0x2]*_0x123e86[0x0]+_0x483fbb[0x6]*_0x123e86[0x1]+_0x483fbb[0xa]*_0x123e86[0x2]+_0x483fbb[0xe]*_0x5e5cda,_0x483fbb[0x3]*_0x123e86[0x0]+_0x483fbb[0x7]*_0x123e86[0x1]+_0x483fbb[0xb]*_0x123e86[0x2]+_0x483fbb[0xf]*_0x5e5cda];export const projectPointToViewport=(_0x24fa42,_0xeb3286,_0x375cb9,_0x3e0f51)=>{const _0x1f2d09=transformPoint(_0x24fa42,_0xeb3286);if(_0x1f2d09[0x3]<=EPSILON)return null;const _0x268abc=0x1/_0x1f2d09[0x3];return[(_0x1f2d09[0x0]*_0x268abc*0.5+0.5)*_0x375cb9,(0.5-_0x1f2d09[0x1]*_0x268abc*0.5)*_0x3e0f51,_0x1f2d09[0x2]*_0x268abc];};
@@ -0,0 +1,20 @@
1
+ export type VolumeDepthMode = 'scene' | 'always-visible';
2
+ export interface IVolumeRouteProfile {
3
+ id: string;
4
+ path: Float32Array;
5
+ heights: Float32Array;
6
+ values: Float32Array;
7
+ noData?: number;
8
+ opacity?: number;
9
+ depthMode?: VolumeDepthMode;
10
+ revision?: number;
11
+ }
12
+ export interface IVolumeRouteProfileMesh {
13
+ id: string;
14
+ positions: Float32Array;
15
+ values: Float32Array;
16
+ indices: Uint32Array;
17
+ opacity: number;
18
+ depthMode: VolumeDepthMode;
19
+ revision?: number;
20
+ }
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,2 @@
1
+ export { WebgpuVolumeSceneRenderer } from './webgpuVolumeSceneRenderer';
2
+ export type { IWebgpuDirectedAxis, IWebgpuFrameCapture, IWebgpuOpacityStop, IWebgpuSceneMesh, IWebgpuTransferStop, IWebgpuVolumeBrickUpload, IWebgpuVolumeCamera, IWebgpuVolumeMetadata, IWebgpuVolumeRendererOptions, IWebgpuVolumeSceneUpdate, IWebgpuVolumeSlice, IWebgpuVolumeStatistics, WebgpuVolumeColorMode } from './webgpuVolumeTypes';
@@ -0,0 +1 @@
1
+ (function(_0x50ba2e,_0x422727){var _0x4c0822=_0x2bec,_0x1de224=_0x50ba2e();while(!![]){try{var _0x1a95a4=parseInt(_0x4c0822(0x1ab))/0x1*(-parseInt(_0x4c0822(0x1ad))/0x2)+-parseInt(_0x4c0822(0x1ae))/0x3+-parseInt(_0x4c0822(0x1af))/0x4*(-parseInt(_0x4c0822(0x1b1))/0x5)+parseInt(_0x4c0822(0x1ac))/0x6+-parseInt(_0x4c0822(0x1b3))/0x7+-parseInt(_0x4c0822(0x1b2))/0x8+parseInt(_0x4c0822(0x1b0))/0x9;if(_0x1a95a4===_0x422727)break;else _0x1de224['push'](_0x1de224['shift']());}catch(_0x5cc036){_0x1de224['push'](_0x1de224['shift']());}}}(_0x112f,0x634fc));function _0x2bec(_0x31fd6e,_0x436250){var _0x112fed=_0x112f();return _0x2bec=function(_0x2bece4,_0xe78856){_0x2bece4=_0x2bece4-0x1ab;var _0x528307=_0x112fed[_0x2bece4];return _0x528307;},_0x2bec(_0x31fd6e,_0x436250);}export{WebgpuVolumeSceneRenderer}from'./webgpuVolumeSceneRenderer';function _0x112f(){var _0x35f1db=['2041206qhdJja','1508XcJyIo','13661955jKqrvD','9895kqiiFl','1731704LoidaF','4537932wGKdui','8rRQjWA','2250738IyRDOy','171820bUDkdq'];_0x112f=function(){return _0x35f1db;};return _0x112f();}
@@ -0,0 +1,59 @@
1
+ import type { IWebgpuVolumeBrickUpload, IWebgpuVolumeMetadata } from './webgpuVolumeTypes';
2
+ export declare const MAX_ATLAS_TEXTURE_COUNT = 8;
3
+ interface IAtlasLayout {
4
+ slotCountX: number;
5
+ slotCountY: number;
6
+ slotCountZ: number;
7
+ slotCount: number;
8
+ textureCount: number;
9
+ capacity: number;
10
+ }
11
+ export interface IWebgpuPreparedBrickUpload {
12
+ values: Float32Array<ArrayBuffer>;
13
+ bytesPerRow: number;
14
+ rowsPerImage: number;
15
+ origin: GPUOrigin3D;
16
+ extent: GPUExtent3D;
17
+ atlasIndex: number;
18
+ }
19
+ export declare class WebgpuBrickAtlas {
20
+ private readonly device;
21
+ private readonly memoryTargetBytes;
22
+ private readonly memoryHardLimitBytes;
23
+ private metadata;
24
+ private layout;
25
+ private atlasTextures;
26
+ private atlasViews;
27
+ private pageTableBuffer;
28
+ private pageTableValues;
29
+ private readonly residentByLogicalIndex;
30
+ private readonly residentBySlotIndex;
31
+ private generation;
32
+ constructor(device: GPUDevice, memoryTargetBytes?: number, memoryHardLimitBytes?: number);
33
+ get volumeMetadata(): IWebgpuVolumeMetadata;
34
+ get atlasLayout(): IAtlasLayout;
35
+ get residentBrickCount(): number;
36
+ get statistics(): {
37
+ logicalBrickCount: number;
38
+ atlasCapacity: number;
39
+ gpuBytes: number;
40
+ memoryLimitBytes: number;
41
+ budgetLimited: boolean;
42
+ skippedSamples: number;
43
+ skippedCells: number;
44
+ };
45
+ configure(metadata: IWebgpuVolumeMetadata): void;
46
+ prepareBrickUpload(upload: IWebgpuVolumeBrickUpload, frameIndex: number): IWebgpuPreparedBrickUpload;
47
+ encodePreparedBrickUpload(encoder: GPUCommandEncoder, stagingBuffer: GPUBuffer, bufferOffset: number, upload: IWebgpuPreparedBrickUpload): void;
48
+ touch(logicalIndices: readonly number[], frameIndex: number): void;
49
+ createBindGroup(layout: GPUBindGroupLayout, metadataBuffer: GPUBuffer): GPUBindGroup;
50
+ destroy(): void;
51
+ private acquireSlot;
52
+ private writePageEntry;
53
+ private clearPageEntry;
54
+ private getAtlasTexture;
55
+ private clearAtlasTexture;
56
+ private getPageTableBuffer;
57
+ private destroyResources;
58
+ }
59
+ export {};
@@ -0,0 +1 @@
1
+ const _0x4b5b11=_0x4c45;function _0x4c45(_0x4bd850,_0x1ba74c){const _0x36b19f=_0x36b1();return _0x4c45=function(_0x4c4511,_0x5a3e54){_0x4c4511=_0x4c4511-0x1b2;let _0x5fd2d8=_0x36b19f[_0x4c4511];return _0x5fd2d8;},_0x4c45(_0x4bd850,_0x1ba74c);}(function(_0xc6a1ad,_0x2f0604){const _0x575760=_0x4c45,_0x513610=_0xc6a1ad();while(!![]){try{const _0x1be441=parseInt(_0x575760(0x218))/0x1*(-parseInt(_0x575760(0x1ef))/0x2)+parseInt(_0x575760(0x21c))/0x3*(-parseInt(_0x575760(0x1bc))/0x4)+-parseInt(_0x575760(0x1f0))/0x5*(-parseInt(_0x575760(0x21a))/0x6)+parseInt(_0x575760(0x1e6))/0x7*(parseInt(_0x575760(0x1fa))/0x8)+parseInt(_0x575760(0x1f1))/0x9+-parseInt(_0x575760(0x1c8))/0xa*(-parseInt(_0x575760(0x208))/0xb)+-parseInt(_0x575760(0x1b4))/0xc*(parseInt(_0x575760(0x204))/0xd);if(_0x1be441===_0x2f0604)break;else _0x513610['push'](_0x513610['shift']());}catch(_0x50e297){_0x513610['push'](_0x513610['shift']());}}}(_0x36b1,0x4d9a5));const DEFAULT_MEMORY_TARGET_BYTES=0x200*0x400*0x400;function _0x36b1(){const _0x2704d7=['225770UHnTms','clearPageEntry','generation','submit','memoryTargetBytes','r32float','count','layout','extent','get','slotIndex','statistics','WebGPU\x20volume\x20page\x20table\x20is\x20unavailable.\x20WebGPU\x20体积页表不可用。','destroyResources','createTexture','length','bytesPerRow','brickDepth','prepareBrickUpload','slotCountZ','clear','volume\x20atlas\x20clear\x20shader','ceil','WebGPU\x20volume\x20atlas\x20resources\x20are\x20incomplete.\x20WebGPU\x20体积图集资源不完整。','createBindGroup','halo','auto','clearAtlasTexture','\x0a@group(0)\x20@binding(0)\x20var\x20atlas:\x20texture_storage_3d<r32float,\x20write>;\x0a\x0a@compute\x20@workgroup_size(','brickWidth','518lYulgZ','noData','volume\x20atlas\x20clear\x20pipeline','.\x20WebGPU\x20体积砖块要求\x20halo\x20为\x20','min','map','pageTableBuffer','values','yAxis','12430oPfcZb','149835zGYnYT','362979jVMvkr','writePageEntry','copyBufferToTexture','set','getBindGroupLayout','WebGPU\x20volume\x20bricks\x20require\x20halo\x20','setPipeline','size','occupied','44120jjRDQD','floor','capacity','setBindGroup','skippedSampleCount','STORAGE_BINDING','metadata','\x20requires\x20','encodePreparedBrickUpload','destroy','62439sgsaYE','getAtlasTexture','coreSampleCount','WebGPU\x20volume\x20memory\x20limits\x20must\x20be\x20positive.\x20WebGPU\x20体积显存限制必须大于零。','209KOGFpE','pageTableValues','brickHeight','fill','BYTES_PER_ELEMENT','device','memoryHardLimitBytes','volume\x20atlas\x20clear','main','volume\x20brick\x20page\x20table','maxTextureDimension3D','TEXTURE_BINDING',')\x0afn\x20main(@builtin(global_invocation_id)\x20invocation:\x20vec3u)\x20{\x0a\x20\x20\x20\x20let\x20dimensions\x20=\x20textureDimensions(atlas);\x0a\x20\x20\x20\x20if\x20(all(invocation\x20<\x20dimensions))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20textureStore(atlas,\x20vec3i(invocation),\x20vec4f(0.0));\x0a\x20\x20\x20\x20}\x0a}\x0a','slotCount','atlasTextures','WebGPU\x20volume\x20atlas\x20has\x20no\x20evictable\x20slot.\x20WebGPU\x20体积图集没有可驱逐的槽位。','2UEXUNA','Invalid\x20logical\x20volume\x20brick\x20index:\x20','12sRnAGX','dispatchWorkgroups','108Efradz','isInteger','zAxis','lastUsedFrame','volume\x20atlas\x20clear\x20pass','configure','xAxis','.\x20体积逻辑砖块索引无效。','atlasViews','residentBrickCount','volume\x20brick\x20atlas\x20','COPY_DST','slotCountY','residentByLogicalIndex','acquireSlot','STORAGE','queue','rowsPerImage','logicalIndex','1452rGNRHu','createView','getPageTableBuffer','delete','Volume\x20brick\x20','limits','volume\x20atlas\x20clear\x20bind\x20group','\x20values\x20but\x20received\x20','2876jsoMxu','max','end','createBuffer','atlasLayout','WebGPU\x20volume\x20atlas\x20is\x20not\x20configured.\x20WebGPU\x20体积图集尚未配置。','residentBySlotIndex','slotCountX','createComputePipeline','WebGPU\x20volume\x20atlas\x20texture\x20is\x20unavailable.\x20WebGPU\x20体积图集纹理不可用。','.\x20体积砖块数据长度不正确。','writeBuffer'];_0x36b1=function(){return _0x2704d7;};return _0x36b1();}export const MAX_ATLAS_TEXTURE_COUNT=0x8;const MAX_ATLAS_TEXTURE_BYTES=0x40*0x400*0x400,HALO_SIZE=0x1,PAGE_ENTRY_UINT_COUNT=0x4,ATLAS_CLEAR_WORKGROUP_SIZE=0x4,ATLAS_CLEAR_SHADER=_0x4b5b11(0x1e4)+ATLAS_CLEAR_WORKGROUP_SIZE+',\x20'+ATLAS_CLEAR_WORKGROUP_SIZE+',\x20'+ATLAS_CLEAR_WORKGROUP_SIZE+_0x4b5b11(0x214),validateMetadata=_0x1d616b=>{const _0x43327d=_0x4b5b11,_0xd0d717=[_0x1d616b[_0x43327d(0x222)]['count'],_0x1d616b[_0x43327d(0x1ee)][_0x43327d(0x1ce)],_0x1d616b[_0x43327d(0x21e)][_0x43327d(0x1ce)],_0x1d616b[_0x43327d(0x1e5)],_0x1d616b['brickHeight'],_0x1d616b[_0x43327d(0x1d9)]];if(_0xd0d717['some'](_0x4cd69c=>!Number[_0x43327d(0x21d)](_0x4cd69c)||_0x4cd69c<=0x0))throw new Error('WebGPU\x20volume\x20dimensions\x20must\x20be\x20positive\x20integers.\x20WebGPU\x20体积尺寸必须是正整数。');if(_0x1d616b[_0x43327d(0x1e1)]!==HALO_SIZE)throw new Error(_0x43327d(0x1f6)+HALO_SIZE+_0x43327d(0x1e9)+HALO_SIZE+'。');},getBrickCount=_0x5c158a=>[Math[_0x4b5b11(0x1de)](_0x5c158a[_0x4b5b11(0x222)][_0x4b5b11(0x1ce)]/_0x5c158a[_0x4b5b11(0x1e5)]),Math[_0x4b5b11(0x1de)](_0x5c158a[_0x4b5b11(0x1ee)][_0x4b5b11(0x1ce)]/_0x5c158a[_0x4b5b11(0x20a)]),Math[_0x4b5b11(0x1de)](_0x5c158a[_0x4b5b11(0x21e)][_0x4b5b11(0x1ce)]/_0x5c158a[_0x4b5b11(0x1d9)])],getLogicalBrickCoordinate=(_0x268e73,_0x2d018d)=>{const _0x125889=_0x4b5b11,_0xd149c8=_0x2d018d[0x0]*_0x2d018d[0x1],_0x4072f4=Math['floor'](_0x268e73/_0xd149c8),_0x679c52=_0x268e73-_0x4072f4*_0xd149c8,_0x5eda40=Math[_0x125889(0x1fb)](_0x679c52/_0x2d018d[0x0]);return[_0x679c52-_0x5eda40*_0x2d018d[0x0],_0x5eda40,_0x4072f4];},analyzeBrickOccupancy=(_0x5b1754,_0x235ac4,_0x31b76b)=>{const _0x904f6d=_0x4b5b11,_0xea3527=_0x235ac4[_0x904f6d(0x1e5)]+HALO_SIZE*0x2,_0x284b0f=_0x235ac4[_0x904f6d(0x20a)]+HALO_SIZE*0x2,_0x24430c=getLogicalBrickCoordinate(_0x5b1754['logicalIndex'],_0x31b76b),_0x2513a4=Math[_0x904f6d(0x1ea)](_0x235ac4[_0x904f6d(0x1e5)],_0x235ac4[_0x904f6d(0x222)][_0x904f6d(0x1ce)]-_0x24430c[0x0]*_0x235ac4[_0x904f6d(0x1e5)]),_0x14a21a=Math['min'](_0x235ac4['brickHeight'],_0x235ac4[_0x904f6d(0x1ee)][_0x904f6d(0x1ce)]-_0x24430c[0x1]*_0x235ac4['brickHeight']),_0x43cc69=Math[_0x904f6d(0x1ea)](_0x235ac4[_0x904f6d(0x1d9)],_0x235ac4[_0x904f6d(0x21e)][_0x904f6d(0x1ce)]-_0x24430c[0x2]*_0x235ac4[_0x904f6d(0x1d9)]);for(let _0x1b9f4a=0x0;_0x1b9f4a<_0x43cc69;_0x1b9f4a+=0x1){for(let _0x247ea3=0x0;_0x247ea3<_0x14a21a;_0x247ea3+=0x1){const _0x7d3e63=((_0x1b9f4a+HALO_SIZE)*_0x284b0f+_0x247ea3+HALO_SIZE)*_0xea3527+HALO_SIZE;for(let _0x35d340=0x0;_0x35d340<_0x2513a4;_0x35d340+=0x1){const _0x4fa0da=_0x5b1754[_0x904f6d(0x1ed)][_0x7d3e63+_0x35d340];if(_0x4fa0da===_0x4fa0da&&(_0x235ac4[_0x904f6d(0x1e7)]===undefined||_0x4fa0da!==_0x235ac4[_0x904f6d(0x1e7)]))return{'occupied':!![],'coreSampleCount':_0x2513a4*_0x14a21a*_0x43cc69};}}}return{'occupied':![],'coreSampleCount':_0x2513a4*_0x14a21a*_0x43cc69};},findAtlasLayout=(_0x2a6d9b,_0x3f9d0e,_0x2ad4d8,_0x47cd31,_0x1b35bd)=>{const _0x473407=_0x4b5b11;if(_0x2a6d9b<=0x0)return null;const _0xd49e41=Math[_0x473407(0x1fb)](_0x1b35bd/_0x3f9d0e),_0x1cf8c0=Math[_0x473407(0x1fb)](_0x1b35bd/_0x2ad4d8),_0x2a1b61=Math[_0x473407(0x1fb)](_0x1b35bd/_0x47cd31);let _0x4197c6=null;for(let _0x1ec451=0x1;_0x1ec451<=_0xd49e41;_0x1ec451+=0x1){for(let _0x349129=0x1;_0x349129<=_0x1cf8c0;_0x349129+=0x1){const _0x20be94=Math['min'](_0x2a1b61,Math['floor'](_0x2a6d9b/(_0x1ec451*_0x349129))),_0x249a62=_0x1ec451*_0x349129*_0x20be94;if(_0x20be94<=0x0||_0x249a62<=(_0x4197c6?.['slotCount']??0x0))continue;_0x4197c6={'slotCountX':_0x1ec451,'slotCountY':_0x349129,'slotCountZ':_0x20be94,'slotCount':_0x249a62,'textureCount':0x1,'capacity':_0x249a62};}}return _0x4197c6;},getSlotCoordinate=(_0x26b0e1,_0x5f3496)=>{const _0x35fea7=_0x4b5b11,_0x5d8918=_0x5f3496[_0x35fea7(0x1c3)]*_0x5f3496[_0x35fea7(0x228)],_0x2ae9b3=Math[_0x35fea7(0x1fb)](_0x26b0e1/_0x5d8918),_0x457357=_0x26b0e1-_0x2ae9b3*_0x5d8918,_0x2b6dcf=Math[_0x35fea7(0x1fb)](_0x457357/_0x5f3496[_0x35fea7(0x1c3)]),_0x5c2820=_0x457357-_0x2b6dcf*_0x5f3496['slotCountX'];return[_0x5c2820,_0x2b6dcf,_0x2ae9b3];},findLeastRecentlyUsed=(_0x9be57c,_0x2d850c)=>{const _0x50f5b6=_0x4b5b11;let _0x3f9923=null;for(const _0x1fe40d of _0x9be57c){if(_0x1fe40d[_0x50f5b6(0x21f)]===_0x2d850c)continue;if(!_0x3f9923||_0x1fe40d[_0x50f5b6(0x21f)]<_0x3f9923[_0x50f5b6(0x21f)])_0x3f9923=_0x1fe40d;}return _0x3f9923;},createPaddedTextureData=(_0x299321,_0x45ef49,_0x28928e,_0xfb63a4)=>{const _0x8536f3=_0x4b5b11,_0x1b7e5f=_0x45ef49*Float32Array['BYTES_PER_ELEMENT'],_0x42c597=Math[_0x8536f3(0x1de)](_0x1b7e5f/0x100)*0x100;if(_0x1b7e5f===_0x42c597)return{'values':_0x299321,'bytesPerRow':_0x42c597};const _0x409289=_0x42c597/Float32Array[_0x8536f3(0x20c)],_0x4e3d53=new Float32Array(_0x409289*_0x28928e*_0xfb63a4);for(let _0x2b5bc1=0x0;_0x2b5bc1<_0xfb63a4;_0x2b5bc1+=0x1){for(let _0x4ca7be=0x0;_0x4ca7be<_0x28928e;_0x4ca7be+=0x1){const _0x14404d=(_0x2b5bc1*_0x28928e+_0x4ca7be)*_0x45ef49,_0xc52ad7=(_0x2b5bc1*_0x28928e+_0x4ca7be)*_0x409289;_0x4e3d53[_0x8536f3(0x1f4)](_0x299321['subarray'](_0x14404d,_0x14404d+_0x45ef49),_0xc52ad7);}}return{'values':_0x4e3d53,'bytesPerRow':_0x42c597};};export class WebgpuBrickAtlas{[_0x4b5b11(0x20d)];['memoryTargetBytes'];[_0x4b5b11(0x20e)];[_0x4b5b11(0x200)]=null;['layout']=null;[_0x4b5b11(0x216)]=[];[_0x4b5b11(0x224)]=[];['pageTableBuffer']=null;[_0x4b5b11(0x209)]=new Uint32Array(0x0);['residentByLogicalIndex']=new Map();[_0x4b5b11(0x1c2)]=new Map();['generation']=0x0;constructor(_0xe9fdf7,_0x473a4d=DEFAULT_MEMORY_TARGET_BYTES,_0x308132=_0x473a4d){const _0x10fdd4=_0x4b5b11;if(!Number['isFinite'](_0x473a4d)||!Number['isFinite'](_0x308132)||_0x473a4d<=0x0||_0x308132<=0x0)throw new Error(_0x10fdd4(0x207));this[_0x10fdd4(0x20d)]=_0xe9fdf7,this['memoryTargetBytes']=Math[_0x10fdd4(0x1ea)](_0x473a4d,_0x308132),this[_0x10fdd4(0x20e)]=_0x308132;}get['volumeMetadata'](){const _0x3a7906=_0x4b5b11;if(!this[_0x3a7906(0x200)])throw new Error(_0x3a7906(0x1c1));return this[_0x3a7906(0x200)];}get[_0x4b5b11(0x1c0)](){const _0x4a244e=_0x4b5b11;if(!this[_0x4a244e(0x1cf)])throw new Error('WebGPU\x20volume\x20atlas\x20layout\x20is\x20unavailable.\x20WebGPU\x20体积图集布局不可用。');return this['layout'];}get[_0x4b5b11(0x225)](){const _0x4bf8c6=_0x4b5b11;return this[_0x4bf8c6(0x229)]['size'];}get[_0x4b5b11(0x1d3)](){const _0xe5f393=_0x4b5b11;if(!this[_0xe5f393(0x200)]||!this[_0xe5f393(0x1cf)])return{'logicalBrickCount':0x0,'atlasCapacity':0x0,'gpuBytes':0x0,'memoryLimitBytes':this['memoryHardLimitBytes'],'budgetLimited':![],'skippedSamples':0x0,'skippedCells':0x0};const _0x3ceacf=getBrickCount(this['metadata']),_0x3bd702=_0x3ceacf[0x0]*_0x3ceacf[0x1]*_0x3ceacf[0x2],_0x272074=this['metadata']['brickWidth']+HALO_SIZE*0x2,_0x5c8052=this[_0xe5f393(0x200)][_0xe5f393(0x20a)]+HALO_SIZE*0x2,_0x46ac03=this[_0xe5f393(0x200)][_0xe5f393(0x1d9)]+HALO_SIZE*0x2,_0x5078b9=_0x272074*_0x5c8052*_0x46ac03*this[_0xe5f393(0x1cf)][_0xe5f393(0x1fc)]*Float32Array[_0xe5f393(0x20c)],_0x4a2932=_0x3bd702*PAGE_ENTRY_UINT_COUNT*Uint32Array['BYTES_PER_ELEMENT'];let _0x435db3=0x0,_0x2c70b7=0x0;for(const _0x4c26bb of this[_0xe5f393(0x229)]['values']()){if(_0x4c26bb[_0xe5f393(0x1f9)])continue;_0x2c70b7+=0x1,_0x435db3+=_0x4c26bb[_0xe5f393(0x1fe)];}return{'logicalBrickCount':_0x3bd702,'atlasCapacity':this[_0xe5f393(0x1cf)][_0xe5f393(0x1fc)],'gpuBytes':_0x5078b9+_0x4a2932,'memoryLimitBytes':this[_0xe5f393(0x20e)],'budgetLimited':this[_0xe5f393(0x1cf)][_0xe5f393(0x1fc)]<_0x3bd702,'skippedSamples':_0x435db3,'skippedCells':_0x2c70b7};}[_0x4b5b11(0x221)](_0x155f99){const _0x330d38=_0x4b5b11;validateMetadata(_0x155f99);const _0x24d5a3=_0x155f99[_0x330d38(0x1e5)]+HALO_SIZE*0x2,_0x442341=_0x155f99[_0x330d38(0x20a)]+HALO_SIZE*0x2,_0x577324=_0x155f99[_0x330d38(0x1d9)]+HALO_SIZE*0x2,_0x23411f=getBrickCount(_0x155f99),_0x162b0c=_0x23411f[0x0]*_0x23411f[0x1]*_0x23411f[0x2],_0x276225=_0x162b0c*PAGE_ENTRY_UINT_COUNT*Uint32Array['BYTES_PER_ELEMENT'],_0x19147e=Math[_0x330d38(0x1ea)](this[_0x330d38(0x1cc)],this[_0x330d38(0x20e)])-_0x276225;if(_0x19147e<=0x0)throw new Error('WebGPU\x20volume\x20page\x20table\x20exceeds\x20the\x20configured\x20memory\x20limit.\x20WebGPU\x20体积页表超过显存限制。');const _0x36ad09=_0x24d5a3*_0x442341*_0x577324*Float32Array[_0x330d38(0x20c)],_0x1e3713=Math[_0x330d38(0x1ea)](_0x162b0c,Math[_0x330d38(0x1fb)](_0x19147e/_0x36ad09)),_0x3f1bd1=Math[_0x330d38(0x1bd)](0x1,Math[_0x330d38(0x1fb)](MAX_ATLAS_TEXTURE_BYTES/_0x36ad09)),_0xf73565=Math[_0x330d38(0x1ea)](MAX_ATLAS_TEXTURE_COUNT,Math[_0x330d38(0x1bd)](0x1,Math[_0x330d38(0x1de)](_0x1e3713/_0x3f1bd1))),_0x146248=Math[_0x330d38(0x1bd)](0x1,Math['floor'](_0x1e3713/_0xf73565)),_0x4ce953=findAtlasLayout(_0x146248,_0x24d5a3,_0x442341,_0x577324,this['device'][_0x330d38(0x1b9)][_0x330d38(0x212)]);if(!_0x4ce953)throw new Error('Unable\x20to\x20allocate\x20a\x20WebGPU\x20R32F\x20volume\x20atlas\x20within\x20device\x20limits.\x20无法在设备限制内分配\x20WebGPU\x20R32F\x20体积图集。');const _0xebaf5c={..._0x4ce953,'textureCount':_0xf73565,'capacity':_0x4ce953[_0x330d38(0x215)]*_0xf73565},_0xd37b33=_0x24d5a3*_0xebaf5c[_0x330d38(0x1c3)],_0x47676c=_0x442341*_0xebaf5c[_0x330d38(0x228)],_0x1e1edd=_0x577324*_0xebaf5c[_0x330d38(0x1db)],_0x419707=Array['from']({'length':_0xf73565},(_0x45ac49,_0x2af2d4)=>this[_0x330d38(0x20d)][_0x330d38(0x1d6)]({'label':_0x330d38(0x226)+_0x2af2d4,'size':[_0xd37b33,_0x47676c,_0x1e1edd],'dimension':'3d','format':_0x330d38(0x1cd),'usage':GPUTextureUsage[_0x330d38(0x213)]|GPUTextureUsage[_0x330d38(0x227)]|GPUTextureUsage[_0x330d38(0x1ff)]})),_0x5013d5=this[_0x330d38(0x20d)][_0x330d38(0x1bf)]({'label':_0x330d38(0x211),'size':Math[_0x330d38(0x1bd)](0x10,_0x276225),'usage':GPUBufferUsage[_0x330d38(0x22b)]|GPUBufferUsage['COPY_DST']});this['destroyResources'](),this[_0x330d38(0x200)]={..._0x155f99},this['layout']=_0xebaf5c,this['atlasTextures']=_0x419707,this[_0x330d38(0x224)]=_0x419707[_0x330d38(0x1eb)](_0x462203=>_0x462203[_0x330d38(0x1b5)]({'dimension':'3d'})),this['pageTableBuffer']=_0x5013d5,this['pageTableValues']=new Uint32Array(_0x162b0c*PAGE_ENTRY_UINT_COUNT),this['device'][_0x330d38(0x22c)]['writeBuffer'](_0x5013d5,0x0,this['pageTableValues']);for(const _0x112248 of _0x419707)this[_0x330d38(0x1e3)](_0x112248,_0xd37b33,_0x47676c,_0x1e1edd);this['generation']+=0x1;}[_0x4b5b11(0x1da)](_0x3280b7,_0x17b535){const _0x3527df=_0x4b5b11,_0x5a2296=this['volumeMetadata'],_0x47f3a3=this[_0x3527df(0x1c0)],_0x56485f=getBrickCount(_0x5a2296),_0x2c4306=_0x56485f[0x0]*_0x56485f[0x1]*_0x56485f[0x2];if(!Number[_0x3527df(0x21d)](_0x3280b7[_0x3527df(0x1b3)])||_0x3280b7[_0x3527df(0x1b3)]<0x0||_0x3280b7[_0x3527df(0x1b3)]>=_0x2c4306)throw new Error(_0x3527df(0x219)+_0x3280b7[_0x3527df(0x1b3)]+_0x3527df(0x223));const _0x1d43c2=_0x5a2296[_0x3527df(0x1e5)]+HALO_SIZE*0x2,_0x51d8b5=_0x5a2296['brickHeight']+HALO_SIZE*0x2,_0x187642=_0x5a2296[_0x3527df(0x1d9)]+HALO_SIZE*0x2,_0xe9ec35=_0x1d43c2*_0x51d8b5*_0x187642;if(_0x3280b7[_0x3527df(0x1ed)][_0x3527df(0x1d7)]!==_0xe9ec35)throw new Error(_0x3527df(0x1b8)+_0x3280b7[_0x3527df(0x1b3)]+_0x3527df(0x201)+_0xe9ec35+_0x3527df(0x1bb)+_0x3280b7[_0x3527df(0x1ed)]['length']+_0x3527df(0x1c6));const _0x582683=this[_0x3527df(0x229)][_0x3527df(0x1d1)](_0x3280b7[_0x3527df(0x1b3)])??this[_0x3527df(0x22a)](_0x3280b7[_0x3527df(0x1b3)],_0x17b535),_0x269ef7=analyzeBrickOccupancy(_0x3280b7,_0x5a2296,_0x56485f),_0x4e0cb2=Math['floor'](_0x582683[_0x3527df(0x1d2)]/_0x47f3a3[_0x3527df(0x215)]),_0x3dfa32=getSlotCoordinate(_0x582683[_0x3527df(0x1d2)]%_0x47f3a3[_0x3527df(0x215)],_0x47f3a3),_0x814271=createPaddedTextureData(new Float32Array(_0x3280b7[_0x3527df(0x1ed)]),_0x1d43c2,_0x51d8b5,_0x187642);return _0x582683[_0x3527df(0x21f)]=_0x17b535,_0x582683[_0x3527df(0x1ca)]=this[_0x3527df(0x1ca)],_0x582683[_0x3527df(0x1f9)]=_0x269ef7['occupied'],_0x582683['skippedSampleCount']=_0x269ef7[_0x3527df(0x206)],this[_0x3527df(0x1f2)](_0x582683),{'values':_0x814271[_0x3527df(0x1ed)],'bytesPerRow':_0x814271['bytesPerRow'],'rowsPerImage':_0x51d8b5,'origin':{'x':_0x3dfa32[0x0]*_0x1d43c2,'y':_0x3dfa32[0x1]*_0x51d8b5,'z':_0x3dfa32[0x2]*_0x187642},'extent':[_0x1d43c2,_0x51d8b5,_0x187642],'atlasIndex':_0x4e0cb2};}[_0x4b5b11(0x202)](_0x807f12,_0x527eef,_0x12f53f,_0x4ca697){const _0x3f0595=_0x4b5b11;_0x807f12[_0x3f0595(0x1f3)]({'buffer':_0x527eef,'offset':_0x12f53f,'bytesPerRow':_0x4ca697[_0x3f0595(0x1d8)],'rowsPerImage':_0x4ca697[_0x3f0595(0x1b2)]},{'texture':this[_0x3f0595(0x205)](_0x4ca697['atlasIndex']),'origin':_0x4ca697['origin']},_0x4ca697[_0x3f0595(0x1d0)]);}['touch'](_0x30050a,_0x54f4d9){const _0x132216=_0x4b5b11;for(const _0x1ef79c of _0x30050a){const _0x28a6c5=this[_0x132216(0x229)][_0x132216(0x1d1)](_0x1ef79c);if(_0x28a6c5)_0x28a6c5['lastUsedFrame']=_0x54f4d9;}}[_0x4b5b11(0x1e0)](_0x2eb01f,_0x2a7bff){const _0x1bfc6e=_0x4b5b11;if(this[_0x1bfc6e(0x224)][_0x1bfc6e(0x1d7)]===0x0||!this[_0x1bfc6e(0x1ec)])throw new Error(_0x1bfc6e(0x1df));return this['device'][_0x1bfc6e(0x1e0)]({'label':'volume\x20atlas\x20bind\x20group','layout':_0x2eb01f,'entries':[...Array['from']({'length':MAX_ATLAS_TEXTURE_COUNT},(_0x5a1b0f,_0x1f4fff)=>({'binding':_0x1f4fff,'resource':this[_0x1bfc6e(0x224)][_0x1f4fff]??this['atlasViews'][0x0]})),{'binding':MAX_ATLAS_TEXTURE_COUNT,'resource':{'buffer':this[_0x1bfc6e(0x1ec)]}},{'binding':MAX_ATLAS_TEXTURE_COUNT+0x1,'resource':{'buffer':_0x2a7bff}}]});}[_0x4b5b11(0x203)](){const _0x2a4908=_0x4b5b11;this['destroyResources'](),this[_0x2a4908(0x200)]=null,this[_0x2a4908(0x1cf)]=null,this['pageTableValues']=new Uint32Array(0x0);}['acquireSlot'](_0x3d450e,_0x23e3c0){const _0x5097cd=_0x4b5b11,_0x2ed754=this[_0x5097cd(0x1c0)];let _0x3f9dc4=this[_0x5097cd(0x1c2)][_0x5097cd(0x1f8)];if(_0x3f9dc4>=_0x2ed754[_0x5097cd(0x1fc)]){const _0x3e3035=findLeastRecentlyUsed(this[_0x5097cd(0x1c2)][_0x5097cd(0x1ed)](),_0x23e3c0);if(!_0x3e3035)throw new Error(_0x5097cd(0x217));_0x3f9dc4=_0x3e3035[_0x5097cd(0x1d2)],this[_0x5097cd(0x1c9)](_0x3e3035[_0x5097cd(0x1b3)]),this[_0x5097cd(0x229)][_0x5097cd(0x1b7)](_0x3e3035[_0x5097cd(0x1b3)]),this[_0x5097cd(0x1c2)][_0x5097cd(0x1b7)](_0x3f9dc4);}const _0x411962={'logicalIndex':_0x3d450e,'slotIndex':_0x3f9dc4,'lastUsedFrame':_0x23e3c0,'generation':this[_0x5097cd(0x1ca)],'occupied':![],'skippedSampleCount':0x0};return this[_0x5097cd(0x229)][_0x5097cd(0x1f4)](_0x3d450e,_0x411962),this[_0x5097cd(0x1c2)][_0x5097cd(0x1f4)](_0x3f9dc4,_0x411962),_0x411962;}[_0x4b5b11(0x1f2)](_0x33fa34){const _0x2bd827=_0x4b5b11,_0x43f23d=_0x33fa34['logicalIndex']*PAGE_ENTRY_UINT_COUNT;this[_0x2bd827(0x209)][_0x43f23d]=_0x33fa34[_0x2bd827(0x1d2)]%this[_0x2bd827(0x1c0)][_0x2bd827(0x215)]+0x1,this[_0x2bd827(0x209)][_0x43f23d+0x1]=_0x33fa34['generation'],this[_0x2bd827(0x209)][_0x43f23d+0x2]=_0x33fa34[_0x2bd827(0x1f9)]?0x1:0x0,this[_0x2bd827(0x209)][_0x43f23d+0x3]=Math[_0x2bd827(0x1fb)](_0x33fa34[_0x2bd827(0x1d2)]/this[_0x2bd827(0x1c0)][_0x2bd827(0x215)]),this[_0x2bd827(0x20d)][_0x2bd827(0x22c)][_0x2bd827(0x1c7)](this[_0x2bd827(0x1b6)](),_0x43f23d*Uint32Array[_0x2bd827(0x20c)],this[_0x2bd827(0x209)],_0x43f23d,PAGE_ENTRY_UINT_COUNT);}[_0x4b5b11(0x1c9)](_0x27839d){const _0x5b9224=_0x4b5b11,_0x538c47=_0x27839d*PAGE_ENTRY_UINT_COUNT;this[_0x5b9224(0x209)][_0x5b9224(0x20b)](0x0,_0x538c47,_0x538c47+PAGE_ENTRY_UINT_COUNT),this[_0x5b9224(0x20d)][_0x5b9224(0x22c)]['writeBuffer'](this[_0x5b9224(0x1b6)](),_0x538c47*Uint32Array['BYTES_PER_ELEMENT'],this[_0x5b9224(0x209)],_0x538c47,PAGE_ENTRY_UINT_COUNT);}['getAtlasTexture'](_0x37d5e0){const _0x5ca6d1=_0x4b5b11,_0x4ae541=this[_0x5ca6d1(0x216)][_0x37d5e0];if(!_0x4ae541)throw new Error(_0x5ca6d1(0x1c5));return _0x4ae541;}[_0x4b5b11(0x1e3)](_0x2d8fd0,_0x19530e,_0x5d1c47,_0x20cdc2){const _0x1fb40f=_0x4b5b11,_0x54d047=this[_0x1fb40f(0x20d)]['createShaderModule']({'label':_0x1fb40f(0x1dd),'code':ATLAS_CLEAR_SHADER}),_0x10d962=this['device'][_0x1fb40f(0x1c4)]({'label':_0x1fb40f(0x1e8),'layout':_0x1fb40f(0x1e2),'compute':{'module':_0x54d047,'entryPoint':_0x1fb40f(0x210)}}),_0x3b59f4=this[_0x1fb40f(0x20d)][_0x1fb40f(0x1e0)]({'label':_0x1fb40f(0x1ba),'layout':_0x10d962[_0x1fb40f(0x1f5)](0x0),'entries':[{'binding':0x0,'resource':_0x2d8fd0[_0x1fb40f(0x1b5)]({'dimension':'3d'})}]}),_0x4e5978=this[_0x1fb40f(0x20d)]['createCommandEncoder']({'label':_0x1fb40f(0x20f)}),_0x300df4=_0x4e5978['beginComputePass']({'label':_0x1fb40f(0x220)});_0x300df4[_0x1fb40f(0x1f7)](_0x10d962),_0x300df4[_0x1fb40f(0x1fd)](0x0,_0x3b59f4),_0x300df4[_0x1fb40f(0x21b)](Math[_0x1fb40f(0x1de)](_0x19530e/ATLAS_CLEAR_WORKGROUP_SIZE),Math['ceil'](_0x5d1c47/ATLAS_CLEAR_WORKGROUP_SIZE),Math['ceil'](_0x20cdc2/ATLAS_CLEAR_WORKGROUP_SIZE)),_0x300df4[_0x1fb40f(0x1be)](),this[_0x1fb40f(0x20d)]['queue'][_0x1fb40f(0x1cb)]([_0x4e5978['finish']()]);}['getPageTableBuffer'](){const _0x12ac96=_0x4b5b11;if(!this[_0x12ac96(0x1ec)])throw new Error(_0x12ac96(0x1d4));return this['pageTableBuffer'];}[_0x4b5b11(0x1d5)](){const _0x59e29c=_0x4b5b11;for(const _0x4367f7 of this[_0x59e29c(0x216)])_0x4367f7[_0x59e29c(0x203)]();this['pageTableBuffer']?.[_0x59e29c(0x203)](),this['atlasTextures']=[],this['atlasViews']=[],this[_0x59e29c(0x1ec)]=null,this['residentByLogicalIndex'][_0x59e29c(0x1dc)](),this[_0x59e29c(0x1c2)][_0x59e29c(0x1dc)]();}}
@@ -0,0 +1,11 @@
1
+ export declare class WebgpuSceneAttachments {
2
+ private readonly device;
3
+ private depthTexture;
4
+ private depthView;
5
+ private width;
6
+ private height;
7
+ constructor(device: GPUDevice);
8
+ get sceneDepthView(): GPUTextureView;
9
+ resize(width: number, height: number): void;
10
+ destroy(): void;
11
+ }
@@ -0,0 +1 @@
1
+ function _0x2d10(){const _0x52935d=['RENDER_ATTACHMENT','resize','4723030YUDvBU','depthView','WebGPU\x20scene\x20depth\x20attachment\x20is\x20not\x20initialized.\x20WebGPU\x20场景深度附件尚未初始化。','5471263DoyBeB','destroy','depthTexture','height','751808ohGbIh','device','createView','createTexture','width','6545808HKKbZi','TEXTURE_BINDING','sceneDepthView','92594pYLbtn','2744781DyyESG','17SnpDbe','volume\x20scene\x20depth','depth32float','4142376QSdQfi'];_0x2d10=function(){return _0x52935d;};return _0x2d10();}function _0x57dc(_0x57067d,_0x3a0fb2){const _0x2d10ef=_0x2d10();return _0x57dc=function(_0x57dcf9,_0x36784e){_0x57dcf9=_0x57dcf9-0x91;let _0xde66c4=_0x2d10ef[_0x57dcf9];return _0xde66c4;},_0x57dc(_0x57067d,_0x3a0fb2);}const _0x2de46d=_0x57dc;(function(_0x48c96e,_0x39363d){const _0x1fdf76=_0x57dc,_0x186b51=_0x48c96e();while(!![]){try{const _0x2088be=parseInt(_0x1fdf76(0x9a))/0x1*(-parseInt(_0x1fdf76(0x98))/0x2)+parseInt(_0x1fdf76(0x99))/0x3+parseInt(_0x1fdf76(0xa7))/0x4+parseInt(_0x1fdf76(0xa0))/0x5+-parseInt(_0x1fdf76(0x9d))/0x6+parseInt(_0x1fdf76(0xa3))/0x7+-parseInt(_0x1fdf76(0x95))/0x8;if(_0x2088be===_0x39363d)break;else _0x186b51['push'](_0x186b51['shift']());}catch(_0x3d3e2a){_0x186b51['push'](_0x186b51['shift']());}}}(_0x2d10,0x823af));export class WebgpuSceneAttachments{['device'];[_0x2de46d(0xa5)]=null;[_0x2de46d(0xa1)]=null;[_0x2de46d(0x94)]=0x0;['height']=0x0;constructor(_0x570565){const _0x2e3c77=_0x2de46d;this[_0x2e3c77(0x91)]=_0x570565;}get[_0x2de46d(0x97)](){const _0xbb5006=_0x2de46d;if(!this[_0xbb5006(0xa1)])throw new Error(_0xbb5006(0xa2));return this[_0xbb5006(0xa1)];}[_0x2de46d(0x9f)](_0x4a70c8,_0x3f5b46){const _0x43fce2=_0x2de46d;if(this[_0x43fce2(0x94)]===_0x4a70c8&&this[_0x43fce2(0xa6)]===_0x3f5b46)return;const _0x19c831=this[_0x43fce2(0x91)][_0x43fce2(0x93)]({'label':_0x43fce2(0x9b),'size':[_0x4a70c8,_0x3f5b46],'format':_0x43fce2(0x9c),'usage':GPUTextureUsage[_0x43fce2(0x9e)]|GPUTextureUsage[_0x43fce2(0x96)]}),_0x4820f9=this[_0x43fce2(0xa5)];this['depthTexture']=_0x19c831,this[_0x43fce2(0xa1)]=_0x19c831[_0x43fce2(0x92)](),this['width']=_0x4a70c8,this[_0x43fce2(0xa6)]=_0x3f5b46,_0x4820f9?.['destroy']();}[_0x2de46d(0xa4)](){const _0x41e636=_0x2de46d;this['depthTexture']?.['destroy'](),this['depthTexture']=null,this['depthView']=null,this[_0x41e636(0x94)]=0x0,this['height']=0x0;}}
@@ -0,0 +1,12 @@
1
+ import type { IWebgpuSceneMesh } from './webgpuVolumeTypes';
2
+ export declare class WebgpuSceneMeshResources {
3
+ private readonly device;
4
+ private resources;
5
+ constructor(device: GPUDevice);
6
+ get count(): number;
7
+ replace(meshes: readonly IWebgpuSceneMesh[]): void;
8
+ draw(pass: GPURenderPassEncoder, topology: GPUPrimitiveTopology, depthMode: IWebgpuSceneMesh['depthMode']): void;
9
+ destroy(): void;
10
+ private createResource;
11
+ private destroyResources;
12
+ }
@@ -0,0 +1 @@
1
+ const _0x39293e=_0x1fbb;(function(_0x4bb323,_0x330126){const _0x119866=_0x1fbb,_0x550703=_0x4bb323();while(!![]){try{const _0x12eeb4=parseInt(_0x119866(0x88))/0x1+parseInt(_0x119866(0x71))/0x2*(-parseInt(_0x119866(0x8b))/0x3)+-parseInt(_0x119866(0x81))/0x4+-parseInt(_0x119866(0x7d))/0x5*(parseInt(_0x119866(0x78))/0x6)+-parseInt(_0x119866(0x72))/0x7+parseInt(_0x119866(0x8e))/0x8*(parseInt(_0x119866(0x84))/0x9)+parseInt(_0x119866(0x74))/0xa;if(_0x12eeb4===_0x330126)break;else _0x550703['push'](_0x550703['shift']());}catch(_0x5752e3){_0x550703['push'](_0x550703['shift']());}}}(_0x46a9,0xd930d));export class WebgpuSceneMeshResources{[_0x39293e(0x73)];[_0x39293e(0x70)]=[];constructor(_0x68c26f){const _0x2ac2a3=_0x39293e;this[_0x2ac2a3(0x73)]=_0x68c26f;}get[_0x39293e(0x7c)](){const _0xb8d7d9=_0x39293e;return this[_0xb8d7d9(0x70)][_0xb8d7d9(0x85)];}['replace'](_0x513321){const _0x575162=_0x39293e,_0x35aed5=[];try{for(const _0x2a8e89 of _0x513321)_0x35aed5[_0x575162(0x7a)](this[_0x575162(0x76)](_0x2a8e89));}catch(_0x304bab){for(const _0x1660a1 of _0x35aed5)_0x1660a1[_0x575162(0x89)][_0x575162(0x8a)]();throw _0x304bab;}this[_0x575162(0x7b)](),this[_0x575162(0x70)]=_0x35aed5;}[_0x39293e(0x8c)](_0x29ca86,_0x5e409e,_0x2090d8){const _0x32392a=_0x39293e;for(const _0x244fb4 of this['resources']){if(_0x244fb4[_0x32392a(0x8d)]!==_0x5e409e||_0x244fb4[_0x32392a(0x75)]!==_0x2090d8)continue;_0x29ca86[_0x32392a(0x7e)](0x0,_0x244fb4[_0x32392a(0x89)]),_0x29ca86[_0x32392a(0x8c)](_0x244fb4['vertexCount']);}}[_0x39293e(0x8a)](){const _0x2cc8f0=_0x39293e;this[_0x2cc8f0(0x7b)]();}[_0x39293e(0x76)](_0x473f0c){const _0x2415d1=_0x39293e;if(_0x473f0c[_0x2415d1(0x77)][_0x2415d1(0x85)]===0x0||_0x473f0c[_0x2415d1(0x77)][_0x2415d1(0x85)]%0x7!==0x0)throw new Error(_0x2415d1(0x86)+_0x473f0c['id']+_0x2415d1(0x82));const _0x5070e8=new Float32Array(_0x473f0c[_0x2415d1(0x77)]),_0x2e50b0=this[_0x2415d1(0x73)][_0x2415d1(0x80)]({'label':_0x2415d1(0x79)+_0x473f0c['id'],'size':_0x5070e8[_0x2415d1(0x7f)],'usage':GPUBufferUsage[_0x2415d1(0x87)]|GPUBufferUsage[_0x2415d1(0x8f)]});return this[_0x2415d1(0x73)]['queue'][_0x2415d1(0x83)](_0x2e50b0,0x0,_0x5070e8),{'id':_0x473f0c['id'],'topology':_0x473f0c[_0x2415d1(0x8d)],'depthMode':_0x473f0c[_0x2415d1(0x75)],'buffer':_0x2e50b0,'vertexCount':_0x473f0c['vertices'][_0x2415d1(0x85)]/0x7};}[_0x39293e(0x7b)](){const _0x2dd6a7=_0x39293e;for(const _0x1f299c of this[_0x2dd6a7(0x70)])_0x1f299c[_0x2dd6a7(0x89)][_0x2dd6a7(0x8a)]();this['resources']=[];}}function _0x1fbb(_0x265f7f,_0x5b9af9){const _0x46a91c=_0x46a9();return _0x1fbb=function(_0x1fbb93,_0xd9cb20){_0x1fbb93=_0x1fbb93-0x70;let _0x26ac9e=_0x46a91c[_0x1fbb93];return _0x26ac9e;},_0x1fbb(_0x265f7f,_0x5b9af9);}function _0x46a9(){const _0x1c4f47=['byteLength','createBuffer','4999336iLEsCa','\x20must\x20contain\x20position\x20and\x20RGBA\x20values\x20for\x20every\x20vertex.\x20场景网格顶点必须包含位置和\x20RGBA。','writeBuffer','711fQJBJD','length','Scene\x20mesh\x20','VERTEX','378066QLPNGr','buffer','destroy','3367542pMOSWc','draw','topology','116024SrXWkE','COPY_DST','resources','2xNXBGG','4232179OPKBBA','device','39579460WXAVJM','depthMode','createResource','vertices','3230382riPQqA','volume\x20scene\x20mesh\x20','push','destroyResources','count','15gqxAUK','setVertexBuffer'];_0x46a9=function(){return _0x1c4f47;};return _0x46a9();}
@@ -0,0 +1,21 @@
1
+ import type { IWebgpuVolumeSlice } from './webgpuVolumeTypes';
2
+ export declare class WebgpuSliceResources {
3
+ private readonly device;
4
+ private readonly layout;
5
+ private resources;
6
+ private uniformUpdateCount;
7
+ private resourceRebuildCount;
8
+ constructor(device: GPUDevice, layout: GPUBindGroupLayout);
9
+ get count(): number;
10
+ get statistics(): {
11
+ uniformUpdateCount: number;
12
+ resourceRebuildCount: number;
13
+ };
14
+ replace(slices: readonly IWebgpuVolumeSlice[]): void;
15
+ draw(pass: GPURenderPassEncoder, pipeline: GPURenderPipeline, depthMode: IWebgpuVolumeSlice['depthMode']): void;
16
+ destroy(): void;
17
+ private createValues;
18
+ private createResource;
19
+ private valuesEqual;
20
+ private destroyResources;
21
+ }
@@ -0,0 +1 @@
1
+ function _0x2b45(){const _0x255c5a=['includes','resources','bindGroup','get','44ZGsPeW','replace','volume\x20slice\x20','some','valuesEqual','count','Volume\x20slice\x20ID\x20','73014pZmHQp','525468IpvghH','map','has','setPipeline','writeBuffer','layout','567yRzxbx','createBuffer','uniformUpdateCount','delete','device','\x20is\x20duplicated.\x20体积切面\x20ID\x20重复。','depthMode','plateColor','109177BzdrCY','409372hqhMap','buffer','statistics','\x20position\x20must\x20be\x20normalized\x20to\x20zero\x20through\x20one.\x20体积切面位置必须归一化到零至一。','add','isFinite','\x20plate\x20color\x20must\x20use\x20values\x20from\x20zero\x20through\x20one.\x20体积切面底板颜色必须位于零至一。','position','55GCjSIO','draw','axis','destroy','13770ESJsgB','values','2Vbgygy','createValues','opacity','queue','25328PsZpfb','1294683YMMeox','3pzLPoG','createBindGroup','175EjRNAw','push','Volume\x20slice\x20','resourceRebuildCount','UNIFORM','visible','length'];_0x2b45=function(){return _0x255c5a;};return _0x2b45();}const _0x37f934=_0x1451;(function(_0x1bbd43,_0x224159){const _0x55aa1d=_0x1451,_0x280b99=_0x1bbd43();while(!![]){try{const _0x549730=parseInt(_0x55aa1d(0x19a))/0x1*(parseInt(_0x55aa1d(0x171))/0x2)+-parseInt(_0x55aa1d(0x177))/0x3*(-parseInt(_0x55aa1d(0x19b))/0x4)+parseInt(_0x55aa1d(0x16b))/0x5*(parseInt(_0x55aa1d(0x18b))/0x6)+-parseInt(_0x55aa1d(0x179))/0x7*(parseInt(_0x55aa1d(0x175))/0x8)+-parseInt(_0x55aa1d(0x192))/0x9*(parseInt(_0x55aa1d(0x16f))/0xa)+parseInt(_0x55aa1d(0x184))/0xb*(-parseInt(_0x55aa1d(0x18c))/0xc)+parseInt(_0x55aa1d(0x176))/0xd;if(_0x549730===_0x224159)break;else _0x280b99['push'](_0x280b99['shift']());}catch(_0x2d4d76){_0x280b99['push'](_0x280b99['shift']());}}}(_0x2b45,0x195e9));const SLICE_GRID_SIZE=0x20,SLICE_VERTEX_COUNT=SLICE_GRID_SIZE*SLICE_GRID_SIZE*0x6;function _0x1451(_0x258d88,_0x355e0a){const _0x2b4513=_0x2b45();return _0x1451=function(_0x1451b7,_0x2553f7){_0x1451b7=_0x1451b7-0x168;let _0x378480=_0x2b4513[_0x1451b7];return _0x378480;},_0x1451(_0x258d88,_0x355e0a);}export class WebgpuSliceResources{[_0x37f934(0x196)];[_0x37f934(0x191)];[_0x37f934(0x181)]=[];[_0x37f934(0x194)]=0x0;[_0x37f934(0x17c)]=0x0;constructor(_0x32bac1,_0x585962){const _0x530d71=_0x37f934;this['device']=_0x32bac1,this[_0x530d71(0x191)]=_0x585962;}get[_0x37f934(0x189)](){const _0x2ba403=_0x37f934;return this[_0x2ba403(0x181)][_0x2ba403(0x17f)];}get[_0x37f934(0x19d)](){const _0x5eb64e=_0x37f934;return{'uniformUpdateCount':this[_0x5eb64e(0x194)],'resourceRebuildCount':this['resourceRebuildCount']};}[_0x37f934(0x185)](_0x2e9ac6){const _0x2cf12c=_0x37f934,_0x590d65=new Map(this[_0x2cf12c(0x181)][_0x2cf12c(0x18d)](_0x3d43f0=>[_0x3d43f0['id'],_0x3d43f0])),_0x208c21=[],_0xf8c72b=new Set();try{for(const _0x5e9c7b of _0x2e9ac6){if(!_0x5e9c7b[_0x2cf12c(0x17e)])continue;if(_0xf8c72b[_0x2cf12c(0x18e)](_0x5e9c7b['id']))throw new Error(_0x2cf12c(0x18a)+_0x5e9c7b['id']+_0x2cf12c(0x197));_0xf8c72b[_0x2cf12c(0x19f)](_0x5e9c7b['id']);const _0x22cfe4=this[_0x2cf12c(0x172)](_0x5e9c7b),_0x14c2b1=_0x590d65[_0x2cf12c(0x183)](_0x5e9c7b['id']);if(!_0x14c2b1){_0x208c21[_0x2cf12c(0x17a)](this['createResource'](_0x5e9c7b,_0x22cfe4));continue;}_0x590d65[_0x2cf12c(0x195)](_0x5e9c7b['id']),_0x14c2b1['depthMode']=_0x5e9c7b[_0x2cf12c(0x198)],!this[_0x2cf12c(0x188)](_0x14c2b1[_0x2cf12c(0x170)],_0x22cfe4)&&(this[_0x2cf12c(0x196)]['queue'][_0x2cf12c(0x190)](_0x14c2b1[_0x2cf12c(0x19c)],0x0,_0x22cfe4),_0x14c2b1[_0x2cf12c(0x170)]=_0x22cfe4,this['uniformUpdateCount']+=0x1),_0x208c21[_0x2cf12c(0x17a)](_0x14c2b1);}}catch(_0x105b91){for(const _0x5e71e9 of _0x208c21)if(!this[_0x2cf12c(0x181)][_0x2cf12c(0x180)](_0x5e71e9))_0x5e71e9[_0x2cf12c(0x19c)][_0x2cf12c(0x16e)]();throw _0x105b91;}for(const _0x2c8806 of _0x590d65[_0x2cf12c(0x170)]())_0x2c8806[_0x2cf12c(0x19c)]['destroy']();this[_0x2cf12c(0x181)]=_0x208c21;}[_0x37f934(0x16c)](_0x3b25d4,_0x2797c8,_0x5ee5b2){const _0x32a8f1=_0x37f934;_0x3b25d4[_0x32a8f1(0x18f)](_0x2797c8);for(const _0x15c945 of this[_0x32a8f1(0x181)]){if(_0x15c945[_0x32a8f1(0x198)]!==_0x5ee5b2)continue;_0x3b25d4['setBindGroup'](0x3,_0x15c945[_0x32a8f1(0x182)]),_0x3b25d4[_0x32a8f1(0x16c)](SLICE_VERTEX_COUNT);}}[_0x37f934(0x16e)](){this['destroyResources']();}['createValues'](_0x3dd03e){const _0x38d010=_0x37f934;if(!Number[_0x38d010(0x168)](_0x3dd03e[_0x38d010(0x16a)])||_0x3dd03e[_0x38d010(0x16a)]<0x0||_0x3dd03e[_0x38d010(0x16a)]>0x1)throw new Error(_0x38d010(0x17b)+_0x3dd03e['id']+_0x38d010(0x19e));const _0x3f0cf4=_0x3dd03e[_0x38d010(0x16d)]==='x'?0x0:_0x3dd03e[_0x38d010(0x16d)]==='y'?0x1:0x2,_0x5b994a=_0x3dd03e[_0x38d010(0x199)]??[0x0,0x0,0x0,0x0];if(_0x5b994a[_0x38d010(0x187)](_0x5a7d79=>!Number[_0x38d010(0x168)](_0x5a7d79)||_0x5a7d79<0x0||_0x5a7d79>0x1))throw new Error(_0x38d010(0x17b)+_0x3dd03e['id']+_0x38d010(0x169));return new Float32Array([_0x3f0cf4,_0x3dd03e['position'],_0x3dd03e[_0x38d010(0x173)]??0x1,0x0,..._0x5b994a]);}['createResource'](_0x1dd1db,_0x4a6c56){const _0x3aa0af=_0x37f934,_0x29c484=this[_0x3aa0af(0x196)][_0x3aa0af(0x193)]({'label':_0x3aa0af(0x186)+_0x1dd1db['id'],'size':0x20,'usage':GPUBufferUsage[_0x3aa0af(0x17d)]|GPUBufferUsage['COPY_DST']});this[_0x3aa0af(0x196)][_0x3aa0af(0x174)]['writeBuffer'](_0x29c484,0x0,_0x4a6c56);const _0x4116be=this[_0x3aa0af(0x196)][_0x3aa0af(0x178)]({'layout':this['layout'],'entries':[{'binding':0x0,'resource':{'buffer':_0x29c484}}]});return this[_0x3aa0af(0x17c)]+=0x1,{'id':_0x1dd1db['id'],'depthMode':_0x1dd1db[_0x3aa0af(0x198)],'buffer':_0x29c484,'bindGroup':_0x4116be,'values':_0x4a6c56};}['valuesEqual'](_0x4c2072,_0x2ee69e){for(let _0xac4db6=0x0;_0xac4db6<_0x4c2072['length'];_0xac4db6+=0x1)if(_0x4c2072[_0xac4db6]!==_0x2ee69e[_0xac4db6])return![];return!![];}['destroyResources'](){const _0x59ff03=_0x37f934;for(const _0x31d16e of this['resources'])_0x31d16e[_0x59ff03(0x19c)][_0x59ff03(0x16e)]();this[_0x59ff03(0x181)]=[];}}
@@ -0,0 +1,16 @@
1
+ import type { IWebgpuOpacityStop, IWebgpuTransferStop } from './webgpuVolumeTypes';
2
+ export declare class WebgpuTransferResources {
3
+ private readonly device;
4
+ private colorValuesBuffer;
5
+ private colorBuffer;
6
+ private opacityValuesBuffer;
7
+ private opacityBuffer;
8
+ private colorStopCount;
9
+ private opacityStopCount;
10
+ constructor(device: GPUDevice);
11
+ get counts(): readonly [number, number];
12
+ update(colorStops: readonly IWebgpuTransferStop[], opacityStops: readonly IWebgpuOpacityStop[]): void;
13
+ createBindGroup(layout: GPUBindGroupLayout): GPUBindGroup;
14
+ destroy(): void;
15
+ private destroyBuffers;
16
+ }
@@ -0,0 +1 @@
1
+ const _0x4cf0cd=_0x4b47;function _0x284b(){const _0x2ae6f5=['length','5619888kKIDDu','530nJEfuH','counts','queue','colorBuffer','670612pTdfMv','colorValuesBuffer','update','44leapZr','set','color','718126NgnouX','volume\x20color\x20stop\x20colors','value','STORAGE','destroy','device','writeBuffer','volume\x20opacity\x20stop\x20alphas','8610372yjToFn','3GmDcUy','volume\x20color\x20stop\x20values','Volume\x20color\x20stops\x20must\x20be\x20sorted\x20by\x20value.\x20体积颜色色标必须按数值升序排列。','volume\x20transfer\x20bind\x20group','colorStopCount','WebGPU\x20volume\x20transfer\x20resources\x20are\x20incomplete.\x20WebGPU\x20体积传递函数资源不完整。','44192sKoEVw','9647850xNRmRY','Volume\x20color\x20and\x20opacity\x20stops\x20cannot\x20be\x20empty.\x20体积颜色和透明度色标不能为空。','opacity','destroyBuffers','opacityStopCount','createBindGroup','COPY_DST','3hRBVLQ','2149BhqYvM','opacityBuffer','opacityValuesBuffer','144234SRasWe','byteLength','max'];_0x284b=function(){return _0x2ae6f5;};return _0x284b();}(function(_0x34d0d3,_0x15030e){const _0x35e8d3=_0x4b47,_0x5e732f=_0x34d0d3();while(!![]){try{const _0x507576=-parseInt(_0x35e8d3(0x175))/0x1*(parseInt(_0x35e8d3(0x188))/0x2)+-parseInt(_0x35e8d3(0x167))/0x3*(parseInt(_0x35e8d3(0x182))/0x4)+-parseInt(_0x35e8d3(0x16e))/0x5+parseInt(_0x35e8d3(0x166))/0x6+-parseInt(_0x35e8d3(0x176))/0x7*(-parseInt(_0x35e8d3(0x16d))/0x8)+parseInt(_0x35e8d3(0x179))/0x9*(-parseInt(_0x35e8d3(0x17e))/0xa)+-parseInt(_0x35e8d3(0x185))/0xb*(-parseInt(_0x35e8d3(0x17d))/0xc);if(_0x507576===_0x15030e)break;else _0x5e732f['push'](_0x5e732f['shift']());}catch(_0x5d7bfd){_0x5e732f['push'](_0x5e732f['shift']());}}}(_0x284b,0xef5d4));function _0x4b47(_0x481e68,_0x527a74){const _0x284b02=_0x284b();return _0x4b47=function(_0x4b476f,_0x152bda){_0x4b476f=_0x4b476f-0x163;let _0x37c3b7=_0x284b02[_0x4b476f];return _0x37c3b7;},_0x4b47(_0x481e68,_0x527a74);}const createStorageBuffer=(_0x1ca1a8,_0x1d78ce,_0x535ed1)=>{const _0x197735=_0x4b47,_0x106c28=_0x1ca1a8['createBuffer']({'label':_0x535ed1,'size':Math[_0x197735(0x17b)](0x4,_0x1d78ce['byteLength']),'usage':GPUBufferUsage[_0x197735(0x18b)]|GPUBufferUsage[_0x197735(0x174)]});if(_0x1d78ce[_0x197735(0x17a)]>0x0)_0x1ca1a8[_0x197735(0x180)][_0x197735(0x164)](_0x106c28,0x0,_0x1d78ce);return _0x106c28;},validateStops=(_0xc62bcb,_0x5e80ff)=>{const _0x3a7726=_0x4b47;if(_0xc62bcb['length']===0x0||_0x5e80ff[_0x3a7726(0x17c)]===0x0)throw new Error(_0x3a7726(0x16f));for(let _0x48c0a9=0x1;_0x48c0a9<_0xc62bcb[_0x3a7726(0x17c)];_0x48c0a9+=0x1){if(_0xc62bcb[_0x48c0a9][_0x3a7726(0x18a)]<_0xc62bcb[_0x48c0a9-0x1][_0x3a7726(0x18a)])throw new Error(_0x3a7726(0x169));}for(let _0x3306f9=0x0;_0x3306f9<_0x5e80ff['length'];_0x3306f9+=0x1){if(_0x5e80ff[_0x3306f9][_0x3a7726(0x170)]<0x0||_0x5e80ff[_0x3306f9]['opacity']>0x1)throw new Error('Volume\x20opacity\x20stops\x20must\x20be\x20between\x20zero\x20and\x20one.\x20体积透明度色标必须位于零到一之间。');if(_0x3306f9>0x0&&_0x5e80ff[_0x3306f9][_0x3a7726(0x18a)]<_0x5e80ff[_0x3306f9-0x1][_0x3a7726(0x18a)])throw new Error('Volume\x20opacity\x20stops\x20must\x20be\x20sorted\x20by\x20value.\x20体积透明度色标必须按数值升序排列。');}};export class WebgpuTransferResources{[_0x4cf0cd(0x163)];[_0x4cf0cd(0x183)]=null;['colorBuffer']=null;[_0x4cf0cd(0x178)]=null;[_0x4cf0cd(0x177)]=null;[_0x4cf0cd(0x16b)]=0x0;[_0x4cf0cd(0x172)]=0x0;constructor(_0x10b716){this['device']=_0x10b716;}get[_0x4cf0cd(0x17f)](){const _0x3f4fef=_0x4cf0cd;return[this[_0x3f4fef(0x16b)],this[_0x3f4fef(0x172)]];}[_0x4cf0cd(0x184)](_0x42a416,_0x5332d1){const _0x1d3d7b=_0x4cf0cd;validateStops(_0x42a416,_0x5332d1);const _0x2b9e27=new Float32Array(_0x42a416[_0x1d3d7b(0x17c)]),_0x23fc0f=new Float32Array(_0x42a416[_0x1d3d7b(0x17c)]*0x4),_0x1052db=new Float32Array(_0x5332d1['length']),_0x25d4b4=new Float32Array(_0x5332d1[_0x1d3d7b(0x17c)]);for(let _0x5dfb2f=0x0;_0x5dfb2f<_0x42a416[_0x1d3d7b(0x17c)];_0x5dfb2f+=0x1){_0x2b9e27[_0x5dfb2f]=_0x42a416[_0x5dfb2f][_0x1d3d7b(0x18a)],_0x23fc0f[_0x1d3d7b(0x186)](_0x42a416[_0x5dfb2f][_0x1d3d7b(0x187)],_0x5dfb2f*0x4);}for(let _0x55440c=0x0;_0x55440c<_0x5332d1[_0x1d3d7b(0x17c)];_0x55440c+=0x1){_0x1052db[_0x55440c]=_0x5332d1[_0x55440c][_0x1d3d7b(0x18a)],_0x25d4b4[_0x55440c]=_0x5332d1[_0x55440c][_0x1d3d7b(0x170)];}const _0x24cfa2=[createStorageBuffer(this[_0x1d3d7b(0x163)],_0x2b9e27,_0x1d3d7b(0x168)),createStorageBuffer(this[_0x1d3d7b(0x163)],_0x23fc0f,_0x1d3d7b(0x189)),createStorageBuffer(this[_0x1d3d7b(0x163)],_0x1052db,'volume\x20opacity\x20stop\x20values'),createStorageBuffer(this[_0x1d3d7b(0x163)],_0x25d4b4,_0x1d3d7b(0x165))];this[_0x1d3d7b(0x171)](),this[_0x1d3d7b(0x183)]=_0x24cfa2[0x0],this['colorBuffer']=_0x24cfa2[0x1],this['opacityValuesBuffer']=_0x24cfa2[0x2],this[_0x1d3d7b(0x177)]=_0x24cfa2[0x3],this[_0x1d3d7b(0x16b)]=_0x42a416[_0x1d3d7b(0x17c)],this[_0x1d3d7b(0x172)]=_0x5332d1['length'];}[_0x4cf0cd(0x173)](_0x5295e7){const _0x465591=_0x4cf0cd;if(!this['colorValuesBuffer']||!this['colorBuffer']||!this[_0x465591(0x178)]||!this[_0x465591(0x177)])throw new Error(_0x465591(0x16c));return this[_0x465591(0x163)][_0x465591(0x173)]({'label':_0x465591(0x16a),'layout':_0x5295e7,'entries':[{'binding':0x0,'resource':{'buffer':this[_0x465591(0x183)]}},{'binding':0x1,'resource':{'buffer':this[_0x465591(0x181)]}},{'binding':0x2,'resource':{'buffer':this[_0x465591(0x178)]}},{'binding':0x3,'resource':{'buffer':this['opacityBuffer']}}]});}['destroy'](){const _0x55bb72=_0x4cf0cd;this[_0x55bb72(0x171)](),this[_0x55bb72(0x16b)]=0x0,this[_0x55bb72(0x172)]=0x0;}['destroyBuffers'](){const _0x587158=_0x4cf0cd;this[_0x587158(0x183)]?.[_0x587158(0x18c)](),this[_0x587158(0x181)]?.['destroy'](),this[_0x587158(0x178)]?.[_0x587158(0x18c)](),this[_0x587158(0x177)]?.[_0x587158(0x18c)](),this[_0x587158(0x183)]=null,this['colorBuffer']=null,this[_0x587158(0x178)]=null,this['opacityBuffer']=null;}}
@@ -0,0 +1,126 @@
1
+ import type { IWebgpuFrameCapture, IWebgpuOpacityStop, IWebgpuSceneMesh, IWebgpuTransferStop, IWebgpuVolumeBrickUpload, IWebgpuVolumeCamera, IWebgpuVolumeMetadata, IWebgpuVolumeRendererOptions, IWebgpuVolumeSceneUpdate, IWebgpuVolumeSlice, IWebgpuVolumeStatistics, WebgpuVolumeColorMode } from './webgpuVolumeTypes';
2
+ type WebgpuVolumeRendererState = 'idle' | 'initializing' | 'ready' | 'lost' | 'destroyed';
3
+ export declare class WebgpuVolumeSceneRenderer {
4
+ private readonly options;
5
+ private lifecycleState;
6
+ private canvas;
7
+ private adapter;
8
+ private device;
9
+ private context;
10
+ private format;
11
+ private sceneParamsBuffer;
12
+ private volumeParamsBuffer;
13
+ private geometryBindGroupLayout;
14
+ private sceneBindGroupLayout;
15
+ private volumeBindGroupLayout;
16
+ private transferBindGroupLayout;
17
+ private sliceBindGroupLayout;
18
+ private geometryBindGroup;
19
+ private sceneBindGroup;
20
+ private volumeBindGroup;
21
+ private transferBindGroup;
22
+ private volumePipeline;
23
+ private sceneTrianglePipeline;
24
+ private sceneLinePipeline;
25
+ private overlayTrianglePipeline;
26
+ private overlayLinePipeline;
27
+ private sceneSlicePipeline;
28
+ private overlaySlicePipeline;
29
+ private attachments;
30
+ private atlas;
31
+ private transferResources;
32
+ private profileResources;
33
+ private sliceResources;
34
+ private axisResources;
35
+ private metadata;
36
+ private camera;
37
+ private modelMatrix;
38
+ private inverseModelMatrix;
39
+ private clipMinimum;
40
+ private clipMaximum;
41
+ private renderMode;
42
+ private opacity;
43
+ private densityScale;
44
+ private stepLength;
45
+ private volumeDimFactor;
46
+ private colorMode;
47
+ private geographicTransform;
48
+ private colorStops;
49
+ private opacityStops;
50
+ private frameIndex;
51
+ private submittedFrameCount;
52
+ private width;
53
+ private height;
54
+ private initializationGeneration;
55
+ private lastFrameTimeMilliseconds;
56
+ private cachedProfiles;
57
+ private cachedSlices;
58
+ private cachedAxes;
59
+ private readonly cachedBricks;
60
+ private readonly pendingBrickUploads;
61
+ private uploadPump;
62
+ private uploadGeneration;
63
+ private uploadStagingBuffer;
64
+ private uploadStagingBufferSize;
65
+ private uploadedBrickCount;
66
+ private uploadBatchCount;
67
+ private maximumUploadBatchBytes;
68
+ private frameInFlight;
69
+ private frameAvailableCallback;
70
+ constructor(options?: IWebgpuVolumeRendererOptions);
71
+ get state(): WebgpuVolumeRendererState;
72
+ get statistics(): IWebgpuVolumeStatistics;
73
+ setFrameAvailableCallback(callback: (() => void) | null): void;
74
+ initialize(canvas: HTMLCanvasElement): Promise<void>;
75
+ setSource(metadata: IWebgpuVolumeMetadata): void;
76
+ uploadBrick(upload: IWebgpuVolumeBrickUpload): Promise<void>;
77
+ touchBricks(logicalIndices: readonly number[]): void;
78
+ setCamera(camera: IWebgpuVolumeCamera): void;
79
+ setProfiles(meshes: readonly IWebgpuSceneMesh[]): void;
80
+ setSlices(slices: readonly IWebgpuVolumeSlice[]): void;
81
+ setAxes(meshes: readonly IWebgpuSceneMesh[]): void;
82
+ setTransfer(colorStops: readonly IWebgpuTransferStop[], opacityStops: readonly IWebgpuOpacityStop[], colorMode?: WebgpuVolumeColorMode): void;
83
+ update(update: IWebgpuVolumeSceneUpdate): void;
84
+ resize(width: number, height: number): void;
85
+ render(): boolean;
86
+ captureFrame(): Promise<IWebgpuFrameCapture>;
87
+ destroy(): void;
88
+ private createGpuResources;
89
+ private createPipelines;
90
+ private configureSourceResources;
91
+ private enqueueBrickUpload;
92
+ private scheduleUploadPump;
93
+ private processBrickUploads;
94
+ private getUploadStagingBuffer;
95
+ private cacheBrickUpload;
96
+ private rejectPendingBrickUploads;
97
+ private updateTransferResources;
98
+ private recreateSceneBindGroup;
99
+ private writeParams;
100
+ private writeVolumeParams;
101
+ private encodeScenePass;
102
+ private encodeVolumePass;
103
+ private encodeOverlayPass;
104
+ private drawMeshes;
105
+ private drawSlices;
106
+ private watchDeviceLost;
107
+ private releaseGpuResources;
108
+ private getDevice;
109
+ private getContext;
110
+ private getFormat;
111
+ private getCanvas;
112
+ private getAttachments;
113
+ private getAtlas;
114
+ private getTransferResources;
115
+ private getProfileResources;
116
+ private getSliceResources;
117
+ private getAxisResources;
118
+ private getSceneBindGroupLayout;
119
+ private getGeometryBindGroupLayout;
120
+ private getVolumeBindGroupLayout;
121
+ private getTransferBindGroupLayout;
122
+ private getSliceBindGroupLayout;
123
+ private getSceneParamsBuffer;
124
+ private getVolumeParamsBuffer;
125
+ }
126
+ export {};
@@ -0,0 +1 @@
1
+ const _0x299ab4=_0xef77;(function(_0x4d0b1c,_0x5df7e4){const _0x1f1e31=_0xef77,_0x2b1087=_0x4d0b1c();while(!![]){try{const _0x53f967=parseInt(_0x1f1e31(0x213))/0x1+parseInt(_0x1f1e31(0x1de))/0x2+parseInt(_0x1f1e31(0x21b))/0x3+-parseInt(_0x1f1e31(0x288))/0x4+-parseInt(_0x1f1e31(0x24c))/0x5*(-parseInt(_0x1f1e31(0x19a))/0x6)+parseInt(_0x1f1e31(0x25e))/0x7*(-parseInt(_0x1f1e31(0x248))/0x8)+-parseInt(_0x1f1e31(0x18b))/0x9;if(_0x53f967===_0x5df7e4)break;else _0x2b1087['push'](_0x2b1087['shift']());}catch(_0x270b08){_0x2b1087['push'](_0x2b1087['shift']());}}}(_0xd575,0x4aff5));import _0x402493 from'./shader/volumeRaymarch.wgsl?raw';import _0x5184fa from'./shader/sceneMesh.wgsl?raw';import _0x5066f3 from'./shader/volumeSlice.wgsl?raw';import{MAX_ATLAS_TEXTURE_COUNT,WebgpuBrickAtlas}from'./webgpuBrickAtlas';import{WebgpuSceneAttachments}from'./webgpuSceneAttachments';import{WebgpuSceneMeshResources}from'./webgpuSceneMeshResources';import{WebgpuSliceResources}from'./webgpuSliceResources';import{WebgpuTransferResources}from'./webgpuTransferResources';function _0xd575(){const _0x58962d=['overlayLinePipeline','count','clipMinimum','queue','context','volume\x20raymarch\x20pass','error','popErrorScope','canvas','volume\x20raymarch\x20shader','pushErrorScope','line-list','adapter','UNIFORM','replace','createRenderPipeline','setBindGroup','cachedAxes','AbortError','floor','buffer','encodePreparedBrickUpload','zAxis','143978JVADza','store','validation','draw','WebGPU\x20volume\x20scene\x20dimensions\x20must\x20be\x20positive\x20integers.\x20WebGPU\x20体积场景尺寸必须是正整数。','subarray','getContext','reject','read-only-storage','logicalBrickCount','upload','atlasCapacity','volumeBindGroup','\x20必须包含十六个有限数值。','getSceneParamsBuffer','WebGPU\x20scene\x20params\x20buffer\x20is\x20unavailable.\x20WebGPU\x20场景参数\x20Buffer\x20不可用。','getVolumeBindGroupLayout','createPipelineLayout','next','rejectPendingBrickUploads','format','volumeParamsBuffer','length','sceneBindGroupLayout','uniform','getTransferBindGroupLayout','touch','setPipeline','requestAdapter','getAtlas','idle','getUploadStagingBuffer','volumePipeline','message','setAxes','MAP_READ','createView','WebGPU\x20volume\x20frame\x20capture\x20failed:\x20','delete','cachedBricks','attachments','setTransfer','memoryLimitBytes','createShaderModule','max','values','WebGPU\x20volume\x20resources\x20were\x20released.\x20WebGPU\x20体积资源已释放。','getFormat','gpu','writeVolumeParams','.\x20WebGPU\x20体积设备已丢失。','slotCountY','bufferOffset','176308qlIgeK','cachedSlices','camera','composite','semiMinorAxisScaled','densityScale','unfilterable-float','setSource','1246434jueDsQ','byteLength','always-visible','createBindGroup','premultiplied','then','overlayTrianglePipeline','depth','mapAsync','cameraPosition','sceneTrianglePipeline','state','getSliceBindGroupLayout','lost','cachedProfiles','WebGPU\x20volume\x20format\x20is\x20not\x20initialized.\x20WebGPU\x20体积格式尚未初始化。','setFrameAvailableCallback','volume\x20scene\x20bind\x20group','skippedCells','map','\x20必须是正有限数值。','halo','getAxisResources','RENDER_ATTACHMENT','resourceRebuildCount','options','brickHeight','isFinite','clientHeight','prepared','recreateSceneBindGroup','Volume\x20brick\x20upload\x20became\x20stale.\x20体积砖上传已过期。','FRAGMENT','sceneLinePipeline','scene','longitudeRadians','isInteger','frameInFlight','READ','getSceneBindGroupLayout','createBuffer','viewProjection','getVolumeParamsBuffer','yAxis','gpuBytes','384hZDLVk','volumeBindGroupLayout','uploadedBrickCount','geographicTransform','40YZznlB','volume\x20frame\x20readback','sceneSlicePipeline','opacity','frameIndex','volume\x20geometry\x20bind\x20group','xAxis','updateTransferResources','touchBricks','atlas','sceneDepthView','getSliceResources','WebGPU\x20volume\x20context\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20context\x20尚未初始化。','colorMode','BYTES_PER_ELEMENT','centerEcefScaled','uploadStagingBufferSize','overlaySlicePipeline','7266unDvCA','submit','scheduleUploadPump','triangle-list','initializationGeneration','inverseModelMatrix','uploadPump','setSlices','volume\x20scene\x20bind\x20group\x20layout','smooth','WebGPU\x20volume\x20device\x20was\x20lost:\x20','setCamera','WebGPU\x20slice\x20resources\x20are\x20unavailable.\x20WebGPU\x20切面资源不可用。','volume\x20always\x20visible\x20pass','\x20must\x20be\x20a\x20non-negative\x20finite\x20value.\x20','inverseViewProjection','noData','getMappedRange','createCommandEncoder','getCanvas','brickDepth','profileResources','step','cacheOnSuccess','ceil','processBrickUploads','uploadGeneration','encodeOverlayPass','releaseGpuResources','width','transferBindGroup','slotCount','watchDeviceLost','webgpu','WebGPU\x20axis\x20resources\x20are\x20unavailable.\x20WebGPU\x20轴线资源不可用。','finally','clipMaximum','geometryBindGroup','transferResources','Failed\x20to\x20create\x20WebGPU\x20volume\x20pipelines:\x20','frameAvailableCallback','metadata','375116GcFuDP','COPY_DST','atlasLayout','memoryTargetBytes','WRITE','logicalIndex','geometryBindGroupLayout','getCurrentTexture','prepareBrickUpload','transferBindGroupLayout','colorStops','pendingBrickUploads','Failed\x20to\x20create\x20a\x20WebGPU\x20canvas\x20context\x20for\x20the\x20volume\x20scene.\x20无法为体积场景创建\x20WebGPU\x20Canvas\x20上下文。','.\x20创建\x20WebGPU\x20体积管线失败。','modelMatrix','onSubmittedWorkDone','stepLength','lastFrameTimeMilliseconds','volume\x20scene\x20frame','setProfiles','writeBuffer','volume\x20brick\x20upload\x20batch\x20flush','lifecycleState','skippedSamples','memoryHardLimitBytes','drawSlices','WebGPU\x20volume\x20renderer\x20is\x20not\x20ready\x20for\x20frame\x20capture.\x20WebGPU\x20体积渲染器尚不能读取帧。','volume\x20scene\x20mesh\x20shader','load','volumeDimFactor','byteOffset','uploadStagingBuffer','VERTEX','configureSourceResources','writeParams','volume\x20scene\x20params','render','WebGPU\x20volume\x20params\x20buffer\x20is\x20unavailable.\x20WebGPU\x20体积参数\x20Buffer\x20不可用。','catch','add','axisResources','depth32float','heightScaled','\x20必须是非负有限数值。','device','entries','finish','now','renderMode','WebGPU\x20transfer\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20传递函数绑定布局不可用。','semiMajorAxisScaled','generation','all','WebGPU\x20volume\x20canvas\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20Canvas\x20尚未初始化。','statistics','less','update','sliceResources','volume\x20metadata\x20params','from','get','float32x3','2879559ERNWDl','WebGPU\x20profile\x20resources\x20are\x20unavailable.\x20WebGPU\x20剖面资源不可用。','resize','getProfileResources','set','destroyed','drawMeshes','enqueueBrickUpload','high-performance','latitudeRadians','fragmentMain','one','powerPreference','value','Volume\x20brick\x20upload\x20was\x20superseded\x20by\x20a\x20new\x20source.\x20体积砖上传已被新数据源替代。','80226KepPLc','maximumUploadBatchBytes','ready','captureFrame','uploadBatchCount','getAttachments','unconfigure','createGpuResources','sceneBindGroup','sceneParamsBuffer','uploadBrick','WebGPU\x20transfer\x20resources\x20are\x20unavailable.\x20WebGPU\x20传递函数资源不可用。','createPipelines','\x20must\x20be\x20a\x20positive\x20finite\x20value.\x20','initialize','submittedFrameCount','WebGPU\x20slice\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20切面绑定布局不可用。','\x20must\x20contain\x20sixteen\x20finite\x20values.\x20','end','beginRenderPass','opacityStops','brickWidth','unmap','getGeometryBindGroupLayout','resolve','destroy','WebGPU\x20volume\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20体积绑定布局不可用。','volume\x20atlas\x20bind\x20group\x20layout','getDevice','slotCountZ','sliceBindGroupLayout','maxBufferSize','encodeScenePass','encodeVolumePass','some','WebGPU\x20scene\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20场景绑定布局不可用。','A\x20destroyed\x20WebGPU\x20volume\x20renderer\x20cannot\x20be\x20initialized\x20again.\x20已销毁的\x20WebGPU\x20体积渲染器不能再次初始化。','createBindGroupLayout','slotCountX','push','clear','volume\x20slice\x20shader','cacheBrickUpload','height','getTransferResources'];_0xd575=function(){return _0x58962d;};return _0xd575();}function _0xef77(_0x34df3f,_0x5b9b43){const _0xd57517=_0xd575();return _0xef77=function(_0xef77de,_0x37f2ae){_0xef77de=_0xef77de-0x182;let _0x49cd68=_0xd57517[_0xef77de];return _0x49cd68;},_0xef77(_0x34df3f,_0x5b9b43);}const SCENE_PARAMS_FLOAT_COUNT=0x64,VOLUME_PARAMS_BYTE_SIZE=0x60,DEFAULT_MEMORY_TARGET_BYTES=0x200*0x400*0x400,MAX_UPLOAD_BATCH_BYTES=0x40*0x400*0x400,MAX_UPLOAD_BATCH_BRICKS=0x10,IDENTITY_MATRIX=[0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1],DEFAULT_COLOR_STOPS=[{'value':0x0,'color':[0x0,0x0,0x1,0x1]},{'value':0x1,'color':[0x1,0x0,0x0,0x1]}],DEFAULT_OPACITY_STOPS=[{'value':0x0,'opacity':0x0},{'value':0x1,'opacity':0x1}],premultipliedBlend=()=>({'color':{'srcFactor':_0x299ab4(0x196),'dstFactor':'one-minus-src-alpha','operation':_0x299ab4(0x2af)},'alpha':{'srcFactor':_0x299ab4(0x196),'dstFactor':'one-minus-src-alpha','operation':_0x299ab4(0x2af)}}),validateMatrix=(_0xb81af7,_0x6283d1)=>{const _0x6f57e9=_0x299ab4;if(_0xb81af7[_0x6f57e9(0x1f4)]!==0x10||_0xb81af7[_0x6f57e9(0x1bc)](_0x36af8a=>!Number['isFinite'](_0x36af8a)))throw new Error(_0x6283d1+_0x6f57e9(0x1ab)+_0x6283d1+_0x6f57e9(0x1eb));},validateNonNegative=(_0x5b35e0,_0x2dfc90)=>{const _0x4ca3b3=_0x299ab4;if(!Number[_0x4ca3b3(0x236)](_0x5b35e0)||_0x5b35e0<0x0)throw new Error(_0x2dfc90+_0x4ca3b3(0x26c)+_0x2dfc90+_0x4ca3b3(0x2b3));return _0x5b35e0;},validatePositive=(_0x586b13,_0x2c982c)=>{const _0x3ca23b=_0x299ab4;if(!Number[_0x3ca23b(0x236)](_0x586b13)||_0x586b13<=0x0)throw new Error(_0x2c982c+_0x3ca23b(0x1a7)+_0x2c982c+_0x3ca23b(0x22f));return _0x586b13;},cloneMeshes=_0x1e17a3=>_0x1e17a3['map'](_0xfbd8a9=>({..._0xfbd8a9,'vertices':new Float32Array(_0xfbd8a9['vertices'])})),estimateBrickUploadBytes=_0x33c5fa=>{const _0xbfa13c=_0x299ab4,_0x416ce9=_0x33c5fa[_0xbfa13c(0x1af)]+_0x33c5fa[_0xbfa13c(0x230)]*0x2,_0x387f35=_0x33c5fa[_0xbfa13c(0x235)]+_0x33c5fa[_0xbfa13c(0x230)]*0x2,_0x2371e8=_0x33c5fa[_0xbfa13c(0x272)]+_0x33c5fa[_0xbfa13c(0x230)]*0x2,_0x38baec=Math[_0xbfa13c(0x276)](_0x416ce9*Float32Array[_0xbfa13c(0x25a)]/0x100)*0x100;return _0x38baec*_0x387f35*_0x2371e8+0x10;};export class WebgpuVolumeSceneRenderer{[_0x299ab4(0x234)];['lifecycleState']=_0x299ab4(0x1fc);[_0x299ab4(0x1cf)]=null;[_0x299ab4(0x1d3)]=null;[_0x299ab4(0x2b4)]=null;[_0x299ab4(0x1cb)]=null;[_0x299ab4(0x1f2)]=null;[_0x299ab4(0x1a3)]=null;[_0x299ab4(0x1f3)]=null;[_0x299ab4(0x28e)]=null;[_0x299ab4(0x1f5)]=null;[_0x299ab4(0x249)]=null;[_0x299ab4(0x291)]=null;['sliceBindGroupLayout']=null;['geometryBindGroup']=null;[_0x299ab4(0x1a2)]=null;[_0x299ab4(0x1ea)]=null;['transferBindGroup']=null;[_0x299ab4(0x1fe)]=null;[_0x299ab4(0x225)]=null;[_0x299ab4(0x23c)]=null;[_0x299ab4(0x221)]=null;[_0x299ab4(0x1c7)]=null;['sceneSlicePipeline']=null;['overlaySlicePipeline']=null;['attachments']=null;[_0x299ab4(0x255)]=null;[_0x299ab4(0x284)]=null;[_0x299ab4(0x273)]=null;['sliceResources']=null;[_0x299ab4(0x2b0)]=null;[_0x299ab4(0x287)]=null;['camera']={'viewProjection':IDENTITY_MATRIX,'inverseViewProjection':IDENTITY_MATRIX,'cameraPosition':[0x0,0x0,0x2]};[_0x299ab4(0x296)]=IDENTITY_MATRIX;[_0x299ab4(0x263)]=IDENTITY_MATRIX;[_0x299ab4(0x1c9)]=[0x0,0x0,0x0];[_0x299ab4(0x282)]=[0x1,0x1,0x1];[_0x299ab4(0x2b8)]=_0x299ab4(0x216);[_0x299ab4(0x24f)]=0.3;[_0x299ab4(0x218)]=0x1;['stepLength']=0.005;[_0x299ab4(0x2a5)]=0x1;['colorMode']=_0x299ab4(0x267);[_0x299ab4(0x24b)]=null;['colorStops']=DEFAULT_COLOR_STOPS;[_0x299ab4(0x1ae)]=DEFAULT_OPACITY_STOPS;[_0x299ab4(0x250)]=0x0;[_0x299ab4(0x1a9)]=0x0;[_0x299ab4(0x27b)]=0x0;[_0x299ab4(0x1c5)]=0x0;['initializationGeneration']=0x0;[_0x299ab4(0x299)]=0x0;[_0x299ab4(0x229)]=[];[_0x299ab4(0x214)]=[];[_0x299ab4(0x1d8)]=[];[_0x299ab4(0x205)]=new Map();[_0x299ab4(0x293)]=[];[_0x299ab4(0x264)]=null;[_0x299ab4(0x278)]=0x0;['uploadStagingBuffer']=null;[_0x299ab4(0x25c)]=0x0;[_0x299ab4(0x24a)]=0x0;[_0x299ab4(0x19e)]=0x0;[_0x299ab4(0x19b)]=0x0;[_0x299ab4(0x240)]=![];[_0x299ab4(0x286)]=null;constructor(_0x2459a7={}){const _0xad6bb9=_0x299ab4;this[_0xad6bb9(0x234)]={..._0x2459a7};}get[_0x299ab4(0x226)](){const _0x589deb=_0x299ab4;return this[_0x589deb(0x29e)];}get[_0x299ab4(0x183)](){const _0x4a3dc8=_0x299ab4,_0x3ba11a=this[_0x4a3dc8(0x255)]?.['statistics']??{'logicalBrickCount':0x0,'atlasCapacity':0x0,'gpuBytes':0x0,'memoryLimitBytes':this['options']['memoryHardLimitBytes']??this[_0x4a3dc8(0x234)][_0x4a3dc8(0x28b)]??DEFAULT_MEMORY_TARGET_BYTES,'budgetLimited':![],'skippedSamples':0x0,'skippedCells':0x0},_0xeebfaa=this[_0x4a3dc8(0x186)]?.[_0x4a3dc8(0x183)]??{'uniformUpdateCount':0x0,'resourceRebuildCount':0x0};return{'logicalBrickCount':_0x3ba11a[_0x4a3dc8(0x1e7)],'residentBrickCount':this['atlas']?.['residentBrickCount']??0x0,'pendingBrickCount':0x0,'atlasCapacity':_0x3ba11a[_0x4a3dc8(0x1e9)],'gpuBytes':_0x3ba11a[_0x4a3dc8(0x247)],'memoryLimitBytes':_0x3ba11a[_0x4a3dc8(0x208)],'budgetLimited':_0x3ba11a['budgetLimited'],'frameTimeMilliseconds':this['lastFrameTimeMilliseconds'],'submittedFrameCount':this[_0x4a3dc8(0x1a9)],'uploadedBrickCount':this[_0x4a3dc8(0x24a)],'uploadBatchCount':this['uploadBatchCount'],'maximumUploadBatchBytes':this[_0x4a3dc8(0x19b)],'sliceUniformUpdateCount':_0xeebfaa['uniformUpdateCount'],'sliceResourceRebuildCount':_0xeebfaa[_0x4a3dc8(0x233)],'skippedSamples':_0x3ba11a[_0x4a3dc8(0x29f)],'skippedCells':_0x3ba11a[_0x4a3dc8(0x22d)]};}[_0x299ab4(0x22b)](_0xffe8ea){const _0x51dc93=_0x299ab4;this[_0x51dc93(0x286)]=_0xffe8ea;}async['initialize'](_0x2ddf07){const _0x11cffa=_0x299ab4;if(this[_0x11cffa(0x29e)]===_0x11cffa(0x190))throw new Error(_0x11cffa(0x1be));const _0x2f77dd=++this[_0x11cffa(0x262)];this['releaseGpuResources'](),this[_0x11cffa(0x1cf)]=_0x2ddf07,this[_0x11cffa(0x29e)]='initializing';const _0x2c8705=navigator[_0x11cffa(0x20e)];if(!_0x2c8705){this[_0x11cffa(0x29e)]=_0x11cffa(0x1fc);throw new Error('WebGPU\x20is\x20required\x20for\x20the\x20volume\x20scene\x20but\x20is\x20unavailable.\x20体积场景需要\x20WebGPU,但当前环境不可用。');}const _0x185832=await _0x2c8705[_0x11cffa(0x1fa)]({'powerPreference':this[_0x11cffa(0x234)][_0x11cffa(0x197)]??_0x11cffa(0x193)});if(_0x2f77dd!==this[_0x11cffa(0x262)])return;if(!_0x185832){this[_0x11cffa(0x29e)]=_0x11cffa(0x1fc);throw new Error('Failed\x20to\x20acquire\x20a\x20WebGPU\x20adapter\x20for\x20the\x20volume\x20scene.\x20无法为体积场景获取\x20WebGPU\x20adapter。');}const _0x5854ca=await _0x185832['requestDevice']();if(_0x2f77dd!==this[_0x11cffa(0x262)]){_0x5854ca['destroy']();return;}const _0x1c0dc6=_0x2ddf07['getContext'](_0x11cffa(0x27f));if(!_0x1c0dc6){_0x5854ca[_0x11cffa(0x1b3)](),this[_0x11cffa(0x29e)]=_0x11cffa(0x1fc);throw new Error(_0x11cffa(0x294));}const _0x125e02=_0x2c8705['getPreferredCanvasFormat']();_0x1c0dc6['configure']({'device':_0x5854ca,'format':_0x125e02,'alphaMode':_0x11cffa(0x21f),'usage':GPUTextureUsage[_0x11cffa(0x232)]|GPUTextureUsage['COPY_SRC']}),this[_0x11cffa(0x1d3)]=_0x185832,this[_0x11cffa(0x2b4)]=_0x5854ca,this['context']=_0x1c0dc6,this['format']=_0x125e02,_0x5854ca['pushErrorScope']('validation'),this[_0x11cffa(0x1a1)]();const _0x5349a4=await _0x5854ca[_0x11cffa(0x1ce)]();if(_0x5349a4){this['releaseGpuResources'](),this[_0x11cffa(0x29e)]='idle';throw new Error(_0x11cffa(0x285)+_0x5349a4['message']+_0x11cffa(0x295));}this[_0x11cffa(0x27e)](_0x5854ca),this[_0x11cffa(0x29e)]=_0x11cffa(0x19c);if(this[_0x11cffa(0x287)]){this[_0x11cffa(0x2a9)](this[_0x11cffa(0x287)]);const _0x2e2bcb=Array[_0x11cffa(0x188)](this[_0x11cffa(0x205)][_0x11cffa(0x2b5)]());await Promise[_0x11cffa(0x2bc)](_0x2e2bcb[_0x11cffa(0x22e)](([_0x5f1470,_0x589366])=>this[_0x11cffa(0x192)]({'logicalIndex':_0x5f1470,'values':_0x589366},![])));}this[_0x11cffa(0x253)](),this[_0x11cffa(0x18e)]()[_0x11cffa(0x1d5)](this[_0x11cffa(0x229)]),this[_0x11cffa(0x257)]()[_0x11cffa(0x1d5)](this[_0x11cffa(0x214)]),this[_0x11cffa(0x231)]()[_0x11cffa(0x1d5)](this[_0x11cffa(0x1d8)]),this['resize'](_0x2ddf07[_0x11cffa(0x27b)]||_0x2ddf07['clientWidth']||0x1,_0x2ddf07[_0x11cffa(0x1c5)]||_0x2ddf07[_0x11cffa(0x237)]||0x1);}[_0x299ab4(0x21a)](_0x10cb36){const _0x375541=_0x299ab4;this['uploadGeneration']+=0x1,this[_0x375541(0x1f1)](new DOMException(_0x375541(0x199),_0x375541(0x1d9))),this[_0x375541(0x287)]={..._0x10cb36},this[_0x375541(0x205)][_0x375541(0x1c2)](),this[_0x375541(0x24a)]=0x0,this[_0x375541(0x19e)]=0x0,this[_0x375541(0x19b)]=0x0;if(this[_0x375541(0x29e)]===_0x375541(0x19c))this['configureSourceResources'](_0x10cb36);}[_0x299ab4(0x1a4)](_0x594566){const _0x1c57e1=_0x299ab4;return this[_0x1c57e1(0x192)](_0x594566,!![]);}[_0x299ab4(0x254)](_0x4cac2c){const _0x399cc2=_0x299ab4;this[_0x399cc2(0x1fb)]()[_0x399cc2(0x1f8)](_0x4cac2c,this[_0x399cc2(0x250)]);for(const _0x556113 of _0x4cac2c){const _0x3d9bac=this[_0x399cc2(0x205)][_0x399cc2(0x189)](_0x556113);if(!_0x3d9bac)continue;this[_0x399cc2(0x205)][_0x399cc2(0x204)](_0x556113),this[_0x399cc2(0x205)][_0x399cc2(0x18f)](_0x556113,_0x3d9bac);}}[_0x299ab4(0x269)](_0x595317){const _0x4b55d6=_0x299ab4;validateMatrix(_0x595317[_0x4b55d6(0x244)],'viewProjection'),validateMatrix(_0x595317['inverseViewProjection'],_0x4b55d6(0x26d)),this[_0x4b55d6(0x215)]={'viewProjection':[..._0x595317[_0x4b55d6(0x244)]],'inverseViewProjection':[..._0x595317[_0x4b55d6(0x26d)]],'cameraPosition':[..._0x595317[_0x4b55d6(0x224)]]};}[_0x299ab4(0x29b)](_0x3a0908){const _0x518cd0=_0x299ab4;this['cachedProfiles']=cloneMeshes(_0x3a0908),this['getProfileResources']()[_0x518cd0(0x1d5)](_0x3a0908);}[_0x299ab4(0x265)](_0x59c83a){const _0x2f9cac=_0x299ab4;this['cachedSlices']=_0x59c83a[_0x2f9cac(0x22e)](_0x17f75b=>({..._0x17f75b})),this[_0x2f9cac(0x257)]()[_0x2f9cac(0x1d5)](_0x59c83a);}[_0x299ab4(0x200)](_0x16af19){const _0x3a302e=_0x299ab4;this[_0x3a302e(0x1d8)]=cloneMeshes(_0x16af19),this['getAxisResources']()['replace'](_0x16af19);}[_0x299ab4(0x207)](_0x4edd11,_0x484d1a,_0x28223a){const _0x23c014=_0x299ab4;this[_0x23c014(0x292)]=_0x4edd11[_0x23c014(0x22e)](_0x529add=>({'value':_0x529add[_0x23c014(0x198)],'color':[..._0x529add['color']]})),this[_0x23c014(0x1ae)]=_0x484d1a[_0x23c014(0x22e)](_0x9cc039=>({..._0x9cc039}));if(_0x28223a)this[_0x23c014(0x259)]=_0x28223a;if(this[_0x23c014(0x29e)]===_0x23c014(0x19c))this[_0x23c014(0x253)]();}['update'](_0x286240){const _0x3eb68c=_0x299ab4;_0x286240[_0x3eb68c(0x296)]&&(validateMatrix(_0x286240['modelMatrix'],_0x3eb68c(0x296)),this[_0x3eb68c(0x296)]=[..._0x286240[_0x3eb68c(0x296)]]);_0x286240['inverseModelMatrix']&&(validateMatrix(_0x286240['inverseModelMatrix'],_0x3eb68c(0x263)),this[_0x3eb68c(0x263)]=[..._0x286240[_0x3eb68c(0x263)]]);if(_0x286240[_0x3eb68c(0x1c9)])this[_0x3eb68c(0x1c9)]=[..._0x286240[_0x3eb68c(0x1c9)]];if(_0x286240[_0x3eb68c(0x282)])this['clipMaximum']=[..._0x286240[_0x3eb68c(0x282)]];if(_0x286240[_0x3eb68c(0x2b8)])this['renderMode']=_0x286240[_0x3eb68c(0x2b8)];if(_0x286240[_0x3eb68c(0x24f)]!==undefined)this[_0x3eb68c(0x24f)]=validateNonNegative(_0x286240[_0x3eb68c(0x24f)],_0x3eb68c(0x24f));if(_0x286240[_0x3eb68c(0x218)]!==undefined)this[_0x3eb68c(0x218)]=validateNonNegative(_0x286240[_0x3eb68c(0x218)],_0x3eb68c(0x218));if(_0x286240[_0x3eb68c(0x298)]!==undefined)this[_0x3eb68c(0x298)]=validatePositive(_0x286240['stepLength'],_0x3eb68c(0x298));if(_0x286240[_0x3eb68c(0x2a5)]!==undefined)this[_0x3eb68c(0x2a5)]=validateNonNegative(_0x286240[_0x3eb68c(0x2a5)],'volumeDimFactor');if(_0x286240['colorMode'])this[_0x3eb68c(0x259)]=_0x286240['colorMode'];if(_0x286240[_0x3eb68c(0x24b)]!==undefined)this['geographicTransform']=_0x286240[_0x3eb68c(0x24b)]?{..._0x286240[_0x3eb68c(0x24b)]}:null;}[_0x299ab4(0x18d)](_0x488640,_0x466e4c){const _0x3cacf0=_0x299ab4;if(!Number[_0x3cacf0(0x23f)](_0x488640)||!Number['isInteger'](_0x466e4c)||_0x488640<=0x0||_0x466e4c<=0x0)throw new Error(_0x3cacf0(0x1e2));const _0x412057=this['getCanvas']();_0x412057[_0x3cacf0(0x27b)]=_0x488640,_0x412057[_0x3cacf0(0x1c5)]=_0x466e4c,this[_0x3cacf0(0x27b)]=_0x488640,this[_0x3cacf0(0x1c5)]=_0x466e4c,this[_0x3cacf0(0x19f)]()['resize'](_0x488640,_0x466e4c),this[_0x3cacf0(0x239)]();}[_0x299ab4(0x2ac)](){const _0x5bf8b6=_0x299ab4;if(this[_0x5bf8b6(0x29e)]!==_0x5bf8b6(0x19c)||!this[_0x5bf8b6(0x287)]||this['width']<=0x0||this['height']<=0x0||this[_0x5bf8b6(0x240)])return![];const _0x2b56f3=performance[_0x5bf8b6(0x2b7)]();this[_0x5bf8b6(0x250)]+=0x1,this[_0x5bf8b6(0x2aa)]();const _0x5a1f80=this[_0x5bf8b6(0x1b6)](),_0x157a2d=_0x5a1f80[_0x5bf8b6(0x270)]({'label':_0x5bf8b6(0x29a)}),_0x220fe8=this[_0x5bf8b6(0x1e4)]()[_0x5bf8b6(0x28f)]()['createView']();return this[_0x5bf8b6(0x1ba)](_0x157a2d,_0x220fe8),this[_0x5bf8b6(0x1bb)](_0x157a2d,_0x220fe8),this[_0x5bf8b6(0x279)](_0x157a2d,_0x220fe8),_0x5a1f80[_0x5bf8b6(0x1ca)][_0x5bf8b6(0x25f)]([_0x157a2d[_0x5bf8b6(0x2b6)]()]),this['frameInFlight']=!![],this[_0x5bf8b6(0x1a9)]+=0x1,this['lastFrameTimeMilliseconds']=Math[_0x5bf8b6(0x20a)](0.000001,performance[_0x5bf8b6(0x2b7)]()-_0x2b56f3),void _0x5a1f80['queue'][_0x5bf8b6(0x297)]()[_0x5bf8b6(0x220)](()=>{const _0x57e03e=_0x5bf8b6;if(this[_0x57e03e(0x2b4)]!==_0x5a1f80||this[_0x57e03e(0x29e)]!==_0x57e03e(0x19c))return;this[_0x57e03e(0x240)]=![],this[_0x57e03e(0x286)]?.();})[_0x5bf8b6(0x2ae)](()=>{const _0x18c153=_0x5bf8b6;if(this['device']===_0x5a1f80)this[_0x18c153(0x240)]=![];}),!![];}async[_0x299ab4(0x19d)](){const _0x54b3d9=_0x299ab4;if(this[_0x54b3d9(0x29e)]!==_0x54b3d9(0x19c)||!this['metadata']||this[_0x54b3d9(0x27b)]<=0x0||this[_0x54b3d9(0x1c5)]<=0x0)throw new Error(_0x54b3d9(0x2a2));const _0x1e4912=this[_0x54b3d9(0x1b6)](),_0x1c7035=this[_0x54b3d9(0x27b)]*0x4,_0x5e75f9=Math[_0x54b3d9(0x276)](_0x1c7035/0x100)*0x100,_0x38f0ac=_0x1e4912[_0x54b3d9(0x243)]({'label':_0x54b3d9(0x24d),'size':_0x5e75f9*this['height'],'usage':GPUBufferUsage[_0x54b3d9(0x289)]|GPUBufferUsage[_0x54b3d9(0x201)]});_0x1e4912[_0x54b3d9(0x1d1)](_0x54b3d9(0x1e0)),this[_0x54b3d9(0x250)]+=0x1,this[_0x54b3d9(0x2aa)]();const _0x4987ac=_0x1e4912[_0x54b3d9(0x270)]({'label':'volume\x20frame\x20capture'}),_0x239d81=this[_0x54b3d9(0x1e4)]()['getCurrentTexture'](),_0x23f361=_0x239d81[_0x54b3d9(0x202)]();this[_0x54b3d9(0x1ba)](_0x4987ac,_0x23f361),this[_0x54b3d9(0x1bb)](_0x4987ac,_0x23f361),this['encodeOverlayPass'](_0x4987ac,_0x23f361),_0x4987ac['copyTextureToBuffer']({'texture':_0x239d81},{'buffer':_0x38f0ac,'bytesPerRow':_0x5e75f9,'rowsPerImage':this[_0x54b3d9(0x1c5)]},[this['width'],this[_0x54b3d9(0x1c5)]]),_0x1e4912[_0x54b3d9(0x1ca)][_0x54b3d9(0x25f)]([_0x4987ac[_0x54b3d9(0x2b6)]()]);const _0x54ac94=await _0x1e4912[_0x54b3d9(0x1ce)]();if(_0x54ac94){_0x38f0ac[_0x54b3d9(0x1b3)]();throw new Error(_0x54b3d9(0x203)+_0x54ac94[_0x54b3d9(0x1ff)]+'.\x20WebGPU\x20体积帧读取失败。');}await _0x38f0ac['mapAsync'](GPUMapMode[_0x54b3d9(0x241)]);const _0x25fcbd=new Uint8Array(_0x38f0ac[_0x54b3d9(0x26f)]()),_0x47522a=new Uint8Array(_0x1c7035*this[_0x54b3d9(0x1c5)]),_0x3875b=this[_0x54b3d9(0x20d)]()==='bgra8unorm';for(let _0x5f5163=0x0;_0x5f5163<this[_0x54b3d9(0x1c5)];_0x5f5163+=0x1){const _0x402039=_0x25fcbd[_0x54b3d9(0x1e3)](_0x5f5163*_0x5e75f9,_0x5f5163*_0x5e75f9+_0x1c7035),_0x5ba231=_0x5f5163*_0x1c7035;if(!_0x3875b){_0x47522a[_0x54b3d9(0x18f)](_0x402039,_0x5ba231);continue;}for(let _0x365cf9=0x0;_0x365cf9<this[_0x54b3d9(0x27b)];_0x365cf9+=0x1){const _0x302459=_0x365cf9*0x4,_0x5c8d4c=_0x5ba231+_0x302459;_0x47522a[_0x5c8d4c]=_0x402039[_0x302459+0x2],_0x47522a[_0x5c8d4c+0x1]=_0x402039[_0x302459+0x1],_0x47522a[_0x5c8d4c+0x2]=_0x402039[_0x302459],_0x47522a[_0x5c8d4c+0x3]=_0x402039[_0x302459+0x3];}}return _0x38f0ac[_0x54b3d9(0x1b0)](),_0x38f0ac[_0x54b3d9(0x1b3)](),this[_0x54b3d9(0x1a9)]+=0x1,{'width':this['width'],'height':this[_0x54b3d9(0x1c5)],'pixels':_0x47522a};}['destroy'](){const _0x493c85=_0x299ab4;if(this[_0x493c85(0x29e)]==='destroyed')return;++this['initializationGeneration'],this[_0x493c85(0x27a)](),this[_0x493c85(0x1cf)]=null,this['metadata']=null,this[_0x493c85(0x286)]=null,this['lifecycleState']=_0x493c85(0x190);}[_0x299ab4(0x1a1)](){const _0x127261=_0x299ab4,_0x13b061=this[_0x127261(0x1b6)]();this['sceneParamsBuffer']=_0x13b061[_0x127261(0x243)]({'label':_0x127261(0x2ab),'size':SCENE_PARAMS_FLOAT_COUNT*0x4,'usage':GPUBufferUsage[_0x127261(0x1d4)]|GPUBufferUsage[_0x127261(0x289)]}),this[_0x127261(0x1f3)]=_0x13b061[_0x127261(0x243)]({'label':_0x127261(0x187),'size':VOLUME_PARAMS_BYTE_SIZE,'usage':GPUBufferUsage[_0x127261(0x1d4)]|GPUBufferUsage[_0x127261(0x289)]}),this[_0x127261(0x28e)]=_0x13b061['createBindGroupLayout']({'label':'volume\x20geometry\x20bind\x20group\x20layout','entries':[{'binding':0x0,'visibility':GPUShaderStage[_0x127261(0x2a8)]|GPUShaderStage[_0x127261(0x23b)],'buffer':{'type':_0x127261(0x1f6)}}]}),this[_0x127261(0x1f5)]=_0x13b061[_0x127261(0x1bf)]({'label':_0x127261(0x266),'entries':[{'binding':0x0,'visibility':GPUShaderStage[_0x127261(0x2a8)]|GPUShaderStage[_0x127261(0x23b)],'buffer':{'type':_0x127261(0x1f6)}},{'binding':0x1,'visibility':GPUShaderStage[_0x127261(0x23b)],'texture':{'sampleType':_0x127261(0x222)}}]}),this['volumeBindGroupLayout']=_0x13b061[_0x127261(0x1bf)]({'label':_0x127261(0x1b5),'entries':[...Array[_0x127261(0x188)]({'length':MAX_ATLAS_TEXTURE_COUNT},(_0x18e5e2,_0x54d5b1)=>({'binding':_0x54d5b1,'visibility':GPUShaderStage['FRAGMENT'],'texture':{'sampleType':_0x127261(0x219),'viewDimension':'3d'}})),{'binding':MAX_ATLAS_TEXTURE_COUNT,'visibility':GPUShaderStage[_0x127261(0x23b)],'buffer':{'type':_0x127261(0x1e6)}},{'binding':MAX_ATLAS_TEXTURE_COUNT+0x1,'visibility':GPUShaderStage['FRAGMENT'],'buffer':{'type':'uniform'}}]}),this[_0x127261(0x291)]=_0x13b061[_0x127261(0x1bf)]({'label':'volume\x20transfer\x20bind\x20group\x20layout','entries':[0x0,0x1,0x2,0x3][_0x127261(0x22e)](_0x4956f5=>({'binding':_0x4956f5,'visibility':GPUShaderStage[_0x127261(0x23b)],'buffer':{'type':_0x127261(0x1e6)}}))}),this[_0x127261(0x1b8)]=_0x13b061[_0x127261(0x1bf)]({'label':'volume\x20slice\x20bind\x20group\x20layout','entries':[{'binding':0x0,'visibility':GPUShaderStage['VERTEX']|GPUShaderStage['FRAGMENT'],'buffer':{'type':'uniform'}}]}),this[_0x127261(0x206)]=new WebgpuSceneAttachments(_0x13b061),this[_0x127261(0x284)]=new WebgpuTransferResources(_0x13b061),this[_0x127261(0x273)]=new WebgpuSceneMeshResources(_0x13b061),this[_0x127261(0x186)]=new WebgpuSliceResources(_0x13b061,this['getSliceBindGroupLayout']()),this[_0x127261(0x2b0)]=new WebgpuSceneMeshResources(_0x13b061),this[_0x127261(0x1a6)]();}[_0x299ab4(0x1a6)](){const _0x50cf81=_0x299ab4,_0x4635b7=this[_0x50cf81(0x1b6)](),_0x9cfde5=this[_0x50cf81(0x20d)](),_0x4727a2=this['getGeometryBindGroupLayout'](),_0x996c9=this[_0x50cf81(0x242)](),_0x84adc0=_0x4635b7[_0x50cf81(0x209)]({'label':_0x50cf81(0x2a3),'code':_0x5184fa}),_0x114c35={'module':_0x84adc0,'entryPoint':'vertexMain','buffers':[{'arrayStride':0x1c,'attributes':[{'shaderLocation':0x0,'offset':0x0,'format':_0x50cf81(0x18a)},{'shaderLocation':0x1,'offset':0xc,'format':'float32x4'}]}]},_0x3eaa3d={'module':_0x84adc0,'entryPoint':_0x50cf81(0x195),'targets':[{'format':_0x9cfde5,'blend':premultipliedBlend()}]},_0x316b01=(_0x46a959,_0x43f6f8)=>_0x4635b7['createRenderPipeline']({'layout':_0x4635b7['createPipelineLayout']({'bindGroupLayouts':[_0x4727a2]}),'vertex':_0x114c35,'fragment':_0x3eaa3d,'primitive':{'topology':_0x46a959},'depthStencil':_0x43f6f8?{'format':_0x50cf81(0x2b1),'depthWriteEnabled':!![],'depthCompare':'less'}:undefined});this[_0x50cf81(0x225)]=_0x316b01(_0x50cf81(0x261),!![]),this[_0x50cf81(0x23c)]=_0x316b01(_0x50cf81(0x1d2),!![]),this[_0x50cf81(0x221)]=_0x316b01('triangle-list',![]),this[_0x50cf81(0x1c7)]=_0x316b01('line-list',![]);const _0x269b2b=_0x4635b7[_0x50cf81(0x209)]({'label':_0x50cf81(0x1d0),'code':_0x402493});this[_0x50cf81(0x1fe)]=_0x4635b7[_0x50cf81(0x1d6)]({'layout':_0x4635b7[_0x50cf81(0x1ef)]({'bindGroupLayouts':[_0x996c9,this[_0x50cf81(0x1ee)](),this['getTransferBindGroupLayout']()]}),'vertex':{'module':_0x269b2b,'entryPoint':'vertexMain'},'fragment':{'module':_0x269b2b,'entryPoint':_0x50cf81(0x195),'targets':[{'format':_0x9cfde5,'blend':premultipliedBlend()}]},'primitive':{'topology':_0x50cf81(0x261)}});const _0xf2df7a=_0x4635b7['createShaderModule']({'label':_0x50cf81(0x1c3),'code':_0x5066f3}),_0x4e4755=_0x224308=>_0x4635b7[_0x50cf81(0x1d6)]({'layout':_0x4635b7[_0x50cf81(0x1ef)]({'bindGroupLayouts':[_0x4727a2,this[_0x50cf81(0x1ee)](),this[_0x50cf81(0x1f7)](),this[_0x50cf81(0x227)]()]}),'vertex':{'module':_0xf2df7a,'entryPoint':'vertexMain'},'fragment':{'module':_0xf2df7a,'entryPoint':_0x50cf81(0x195),'targets':[{'format':_0x9cfde5,'blend':premultipliedBlend()}]},'primitive':{'topology':_0x50cf81(0x261)},'depthStencil':_0x224308?{'format':_0x50cf81(0x2b1),'depthWriteEnabled':!![],'depthCompare':_0x50cf81(0x184)}:undefined});this[_0x50cf81(0x24e)]=_0x4e4755(!![]),this[_0x50cf81(0x25d)]=_0x4e4755(![]);}[_0x299ab4(0x2a9)](_0x700dbb){const _0x4af502=_0x299ab4;this[_0x4af502(0x255)]?.[_0x4af502(0x1b3)](),this['atlas']=new WebgpuBrickAtlas(this['getDevice'](),this[_0x4af502(0x234)][_0x4af502(0x28b)]??DEFAULT_MEMORY_TARGET_BYTES,this['options'][_0x4af502(0x2a0)]??this[_0x4af502(0x234)]['memoryTargetBytes']??DEFAULT_MEMORY_TARGET_BYTES),this[_0x4af502(0x255)]['configure'](_0x700dbb),this['writeVolumeParams'](),this['volumeBindGroup']=this[_0x4af502(0x255)][_0x4af502(0x21e)](this[_0x4af502(0x1ee)](),this[_0x4af502(0x245)]());}[_0x299ab4(0x192)](_0x417f4b,_0x58ced3){return new Promise((_0x21e760,_0x1b717e)=>{const _0x16c9ee=_0xef77;this['pendingBrickUploads']['push']({'upload':_0x417f4b,'generation':this[_0x16c9ee(0x278)],'cacheOnSuccess':_0x58ced3,'resolve':_0x21e760,'reject':_0x1b717e}),this[_0x16c9ee(0x260)]();});}[_0x299ab4(0x260)](){const _0x69af7f=_0x299ab4;if(this[_0x69af7f(0x264)])return;this[_0x69af7f(0x264)]=Promise[_0x69af7f(0x1b2)]()[_0x69af7f(0x220)](()=>this['processBrickUploads']())[_0x69af7f(0x281)](()=>{const _0x2f51d6=_0x69af7f;this[_0x2f51d6(0x264)]=null;if(this[_0x2f51d6(0x293)][_0x2f51d6(0x1f4)]>0x0&&this[_0x2f51d6(0x29e)]==='ready')this['scheduleUploadPump']();});}async[_0x299ab4(0x277)](){const _0x5bf64e=_0x299ab4;while(this[_0x5bf64e(0x293)][_0x5bf64e(0x1f4)]>0x0&&this['lifecycleState']==='ready'&&this[_0x5bf64e(0x287)]){const _0x40b717=this[_0x5bf64e(0x1b6)](),_0x248229=estimateBrickUploadBytes(this[_0x5bf64e(0x287)]),_0x349bb4=Math['min'](MAX_UPLOAD_BATCH_BYTES,Math[_0x5bf64e(0x20a)](_0x248229,Math[_0x5bf64e(0x1da)](_0x40b717['limits'][_0x5bf64e(0x1b9)]/0x4))),_0x3f1d31=[];let _0x4990f8=0x0;while(this[_0x5bf64e(0x293)]['length']>0x0&&_0x3f1d31[_0x5bf64e(0x1f4)]<MAX_UPLOAD_BATCH_BRICKS){const _0x814fe8=this[_0x5bf64e(0x293)][0x0];if(_0x3f1d31[_0x5bf64e(0x1f4)]>0x0&&_0x4990f8+_0x248229>_0x349bb4)break;this['pendingBrickUploads']['shift']();if(_0x814fe8[_0x5bf64e(0x2bb)]!==this[_0x5bf64e(0x278)]){_0x814fe8[_0x5bf64e(0x1e5)](new DOMException(_0x5bf64e(0x23a),_0x5bf64e(0x1d9)));continue;}_0x3f1d31[_0x5bf64e(0x1c1)](_0x814fe8),_0x4990f8+=_0x248229;}if(_0x3f1d31[_0x5bf64e(0x1f4)]===0x0)continue;try{const _0x3ec942=[];let _0x5aeaba=0x0;for(const _0x130731 of _0x3f1d31){const _0x46637d=this['getAtlas']()[_0x5bf64e(0x290)](_0x130731['upload'],this['frameIndex']),_0xd5a9a6=Math[_0x5bf64e(0x276)](_0x5aeaba/0x100)*0x100;_0x3ec942[_0x5bf64e(0x1c1)]({'item':_0x130731,'prepared':_0x46637d,'bufferOffset':_0xd5a9a6}),_0x5aeaba=_0xd5a9a6+_0x46637d['values'][_0x5bf64e(0x21c)];}const _0x33bac4=this[_0x5bf64e(0x1fd)](_0x5aeaba);await _0x33bac4[_0x5bf64e(0x223)](GPUMapMode[_0x5bf64e(0x28c)]);const _0x19a44d=new Uint8Array(_0x33bac4['getMappedRange']());for(const _0x749a61 of _0x3ec942){const _0x186a55=_0x749a61['prepared'][_0x5bf64e(0x20b)];_0x19a44d['set'](new Uint8Array(_0x186a55[_0x5bf64e(0x1db)],_0x186a55[_0x5bf64e(0x2a6)],_0x186a55[_0x5bf64e(0x21c)]),_0x749a61[_0x5bf64e(0x212)]);}_0x33bac4[_0x5bf64e(0x1b0)]();const _0x5edcbf=_0x40b717[_0x5bf64e(0x270)]({'label':_0x5bf64e(0x29d)});for(const _0x393c5d of _0x3ec942){this[_0x5bf64e(0x1fb)]()[_0x5bf64e(0x1dc)](_0x5edcbf,_0x33bac4,_0x393c5d[_0x5bf64e(0x212)],_0x393c5d[_0x5bf64e(0x238)]);}_0x40b717[_0x5bf64e(0x1ca)][_0x5bf64e(0x25f)]([_0x5edcbf[_0x5bf64e(0x2b6)]()]),await _0x40b717[_0x5bf64e(0x1ca)]['onSubmittedWorkDone'](),await new Promise(_0x533487=>setTimeout(_0x533487,0x0)),this[_0x5bf64e(0x24a)]+=_0x3f1d31[_0x5bf64e(0x1f4)],this['uploadBatchCount']+=0x1,this[_0x5bf64e(0x19b)]=Math[_0x5bf64e(0x20a)](this[_0x5bf64e(0x19b)],_0x4990f8);for(const _0x53bb24 of _0x3f1d31){if(_0x53bb24[_0x5bf64e(0x2bb)]!==this[_0x5bf64e(0x278)]){_0x53bb24[_0x5bf64e(0x1e5)](new DOMException(_0x5bf64e(0x23a),_0x5bf64e(0x1d9)));continue;}if(_0x53bb24[_0x5bf64e(0x275)])this['cacheBrickUpload'](_0x53bb24[_0x5bf64e(0x1e8)]);_0x53bb24[_0x5bf64e(0x1b2)]();}}catch(_0x4b0965){for(const _0x386eff of _0x3f1d31)_0x386eff[_0x5bf64e(0x1e5)](_0x4b0965);}}}[_0x299ab4(0x1fd)](_0x1d2842){const _0x47ebfa=_0x299ab4,_0x1c8681=Math[_0x47ebfa(0x20a)](0x100,Math['ceil'](_0x1d2842/0x100)*0x100);if(this[_0x47ebfa(0x2a7)]&&this[_0x47ebfa(0x25c)]>=_0x1c8681)return this[_0x47ebfa(0x2a7)];return this[_0x47ebfa(0x2a7)]?.[_0x47ebfa(0x1b3)](),this[_0x47ebfa(0x2a7)]=this[_0x47ebfa(0x1b6)]()[_0x47ebfa(0x243)]({'label':'volume\x20brick\x20reusable\x20upload\x20staging','size':_0x1c8681,'usage':GPUBufferUsage['MAP_WRITE']|GPUBufferUsage['COPY_SRC']}),this['uploadStagingBufferSize']=_0x1c8681,this[_0x47ebfa(0x2a7)];}[_0x299ab4(0x1c4)](_0x140730){const _0x1ae065=_0x299ab4;this[_0x1ae065(0x205)]['delete'](_0x140730['logicalIndex']),this['cachedBricks'][_0x1ae065(0x18f)](_0x140730[_0x1ae065(0x28d)],new Float32Array(_0x140730[_0x1ae065(0x20b)]));while(this[_0x1ae065(0x205)]['size']>this[_0x1ae065(0x183)]['atlasCapacity']){const _0x357a1f=this[_0x1ae065(0x205)]['keys']()[_0x1ae065(0x1f0)]()[_0x1ae065(0x198)];if(_0x357a1f===undefined)break;this['cachedBricks'][_0x1ae065(0x204)](_0x357a1f);}}[_0x299ab4(0x1f1)](_0x505a9d){const _0x2319d7=_0x299ab4;for(const _0x13eab6 of this['pendingBrickUploads']['splice'](0x0))_0x13eab6[_0x2319d7(0x1e5)](_0x505a9d);}[_0x299ab4(0x253)](){const _0x2b6cac=_0x299ab4,_0x1c4662=this[_0x2b6cac(0x1c6)]();_0x1c4662[_0x2b6cac(0x185)](this[_0x2b6cac(0x292)],this[_0x2b6cac(0x1ae)]),this[_0x2b6cac(0x27c)]=_0x1c4662[_0x2b6cac(0x21e)](this[_0x2b6cac(0x1f7)]());}['recreateSceneBindGroup'](){const _0x24ba5f=_0x299ab4;if(!this['sceneParamsBuffer']||!this[_0x24ba5f(0x206)]||!this['geometryBindGroupLayout']||!this[_0x24ba5f(0x1f5)])return;this[_0x24ba5f(0x283)]=this[_0x24ba5f(0x1b6)]()['createBindGroup']({'label':_0x24ba5f(0x251),'layout':this['geometryBindGroupLayout'],'entries':[{'binding':0x0,'resource':{'buffer':this[_0x24ba5f(0x1a3)]}}]}),this[_0x24ba5f(0x1a2)]=this[_0x24ba5f(0x1b6)]()[_0x24ba5f(0x21e)]({'label':_0x24ba5f(0x22c),'layout':this[_0x24ba5f(0x1f5)],'entries':[{'binding':0x0,'resource':{'buffer':this[_0x24ba5f(0x1a3)]}},{'binding':0x1,'resource':this[_0x24ba5f(0x206)][_0x24ba5f(0x256)]}]});}[_0x299ab4(0x2aa)](){const _0x431a31=_0x299ab4,_0x36df1a=new Float32Array(SCENE_PARAMS_FLOAT_COUNT);_0x36df1a[_0x431a31(0x18f)](this['camera']['viewProjection'],0x0),_0x36df1a['set'](this[_0x431a31(0x215)][_0x431a31(0x26d)],0x10),_0x36df1a[_0x431a31(0x18f)](this[_0x431a31(0x296)],0x20),_0x36df1a['set'](this[_0x431a31(0x263)],0x30),_0x36df1a[_0x431a31(0x18f)]([...this[_0x431a31(0x215)][_0x431a31(0x224)],0x1],0x40),_0x36df1a['set']([this[_0x431a31(0x27b)],this[_0x431a31(0x1c5)],0x1/this['width'],0x1/this[_0x431a31(0x1c5)]],0x44),_0x36df1a[_0x431a31(0x18f)]([...this[_0x431a31(0x1c9)],0x0],0x48),_0x36df1a[_0x431a31(0x18f)]([...this[_0x431a31(0x282)],0x0],0x4c),_0x36df1a['set']([this['renderMode']==='maximum'?0x1:0x0,this[_0x431a31(0x24f)],this[_0x431a31(0x218)],this[_0x431a31(0x298)]],0x50),_0x36df1a[_0x431a31(0x18f)]([this[_0x431a31(0x292)][_0x431a31(0x1f4)],this[_0x431a31(0x1ae)][_0x431a31(0x1f4)],this[_0x431a31(0x2a5)],this[_0x431a31(0x259)]===_0x431a31(0x274)?0x1:0x0],0x54);const _0x1035ef=this[_0x431a31(0x24b)];_0x1035ef&&(_0x36df1a['set']([0x1,..._0x1035ef[_0x431a31(0x25b)]],0x58),_0x36df1a[_0x431a31(0x18f)]([_0x1035ef[_0x431a31(0x2ba)],_0x1035ef[_0x431a31(0x217)],..._0x1035ef[_0x431a31(0x23e)]],0x5c),_0x36df1a[_0x431a31(0x18f)]([..._0x1035ef[_0x431a31(0x194)],..._0x1035ef[_0x431a31(0x2b2)]],0x60)),this[_0x431a31(0x1b6)]()[_0x431a31(0x1ca)][_0x431a31(0x29c)](this['getSceneParamsBuffer'](),0x0,_0x36df1a);}[_0x299ab4(0x20f)](){const _0x19b12c=_0x299ab4,_0x59c35c=this[_0x19b12c(0x287)],_0x52e9b3=this['atlas'];if(!_0x59c35c||!_0x52e9b3)return;const _0x5b85cc=_0x52e9b3[_0x19b12c(0x28a)],_0xc08f4c=new Uint32Array(VOLUME_PARAMS_BYTE_SIZE/0x4),_0x203d1f=Math[_0x19b12c(0x276)](_0x59c35c[_0x19b12c(0x252)][_0x19b12c(0x1c8)]/_0x59c35c[_0x19b12c(0x1af)]),_0x5cf4dc=Math['ceil'](_0x59c35c[_0x19b12c(0x246)][_0x19b12c(0x1c8)]/_0x59c35c['brickHeight']),_0x51e636=Math[_0x19b12c(0x276)](_0x59c35c[_0x19b12c(0x1dd)][_0x19b12c(0x1c8)]/_0x59c35c['brickDepth']);_0xc08f4c[_0x19b12c(0x18f)]([_0x59c35c['xAxis']['count'],_0x59c35c[_0x19b12c(0x246)][_0x19b12c(0x1c8)],_0x59c35c[_0x19b12c(0x1dd)][_0x19b12c(0x1c8)],0x0],0x0),_0xc08f4c[_0x19b12c(0x18f)]([_0x59c35c['brickWidth'],_0x59c35c['brickHeight'],_0x59c35c[_0x19b12c(0x272)],0x1],0x4),_0xc08f4c[_0x19b12c(0x18f)]([_0x203d1f,_0x5cf4dc,_0x51e636,0x0],0x8),_0xc08f4c['set']([_0x5b85cc[_0x19b12c(0x1c0)],_0x5b85cc[_0x19b12c(0x211)],_0x5b85cc[_0x19b12c(0x1b7)],_0x5b85cc[_0x19b12c(0x27d)]],0xc),_0xc08f4c[_0x19b12c(0x18f)]([(_0x59c35c[_0x19b12c(0x1af)]+0x2)*_0x5b85cc[_0x19b12c(0x1c0)],(_0x59c35c[_0x19b12c(0x235)]+0x2)*_0x5b85cc[_0x19b12c(0x211)],(_0x59c35c[_0x19b12c(0x272)]+0x2)*_0x5b85cc[_0x19b12c(0x1b7)],0x0],0x10);const _0x33c79e=new Float32Array(_0xc08f4c[_0x19b12c(0x1db)]);_0x33c79e['set']([_0x59c35c['noData']??0x0,_0x59c35c[_0x19b12c(0x26e)]===undefined?0x0:0x1,0x0,0x0],0x14),this[_0x19b12c(0x1b6)]()[_0x19b12c(0x1ca)][_0x19b12c(0x29c)](this[_0x19b12c(0x245)](),0x0,_0xc08f4c);}[_0x299ab4(0x1ba)](_0x23c35e,_0x59bc66){const _0x588347=_0x299ab4,_0x3c8de9=_0x23c35e[_0x588347(0x1ad)]({'label':'volume\x20scene\x20geometry\x20pass','colorAttachments':[{'view':_0x59bc66,'clearValue':{'r':0x0,'g':0x0,'b':0x0,'a':0x0},'loadOp':'clear','storeOp':'store'}],'depthStencilAttachment':{'view':this[_0x588347(0x19f)]()[_0x588347(0x256)],'depthClearValue':0x1,'depthLoadOp':_0x588347(0x1c2),'depthStoreOp':_0x588347(0x1df)}});this[_0x588347(0x191)](_0x3c8de9,_0x588347(0x23d)),this[_0x588347(0x2a1)](_0x3c8de9,_0x588347(0x23d)),_0x3c8de9[_0x588347(0x1ac)]();}[_0x299ab4(0x1bb)](_0x33643c,_0x2fb12f){const _0x1b358a=_0x299ab4;if(!this[_0x1b358a(0x1ea)]||!this[_0x1b358a(0x27c)]||!this['sceneBindGroup']||!this[_0x1b358a(0x1fe)])return;const _0xb5ed20=_0x33643c[_0x1b358a(0x1ad)]({'label':_0x1b358a(0x1cc),'colorAttachments':[{'view':_0x2fb12f,'loadOp':'load','storeOp':_0x1b358a(0x1df)}]});_0xb5ed20[_0x1b358a(0x1f9)](this[_0x1b358a(0x1fe)]),_0xb5ed20[_0x1b358a(0x1d7)](0x0,this['sceneBindGroup']),_0xb5ed20[_0x1b358a(0x1d7)](0x1,this[_0x1b358a(0x1ea)]),_0xb5ed20['setBindGroup'](0x2,this[_0x1b358a(0x27c)]),_0xb5ed20[_0x1b358a(0x1e1)](0x3),_0xb5ed20[_0x1b358a(0x1ac)]();}[_0x299ab4(0x279)](_0x4f7915,_0x47a876){const _0x5844c7=_0x299ab4,_0x1777f0=_0x4f7915[_0x5844c7(0x1ad)]({'label':_0x5844c7(0x26b),'colorAttachments':[{'view':_0x47a876,'loadOp':_0x5844c7(0x2a4),'storeOp':_0x5844c7(0x1df)}]});this[_0x5844c7(0x191)](_0x1777f0,_0x5844c7(0x21d)),this['drawSlices'](_0x1777f0,_0x5844c7(0x21d)),_0x1777f0[_0x5844c7(0x1ac)]();}[_0x299ab4(0x191)](_0x183d5d,_0x3ab437){const _0x5b48c6=_0x299ab4,_0x1252f7=this['geometryBindGroup'];if(!_0x1252f7)return;const _0x48f4d6=_0x3ab437===_0x5b48c6(0x23d)?this['sceneTrianglePipeline']:this[_0x5b48c6(0x221)],_0x3d7ecb=_0x3ab437===_0x5b48c6(0x23d)?this['sceneLinePipeline']:this['overlayLinePipeline'];_0x48f4d6&&(_0x183d5d[_0x5b48c6(0x1f9)](_0x48f4d6),_0x183d5d[_0x5b48c6(0x1d7)](0x0,_0x1252f7),this[_0x5b48c6(0x273)]?.['draw'](_0x183d5d,_0x5b48c6(0x261),_0x3ab437),this['axisResources']?.[_0x5b48c6(0x1e1)](_0x183d5d,_0x5b48c6(0x261),_0x3ab437)),_0x3d7ecb&&(_0x183d5d['setPipeline'](_0x3d7ecb),_0x183d5d[_0x5b48c6(0x1d7)](0x0,_0x1252f7),this[_0x5b48c6(0x273)]?.[_0x5b48c6(0x1e1)](_0x183d5d,_0x5b48c6(0x1d2),_0x3ab437),this[_0x5b48c6(0x2b0)]?.[_0x5b48c6(0x1e1)](_0x183d5d,_0x5b48c6(0x1d2),_0x3ab437));}[_0x299ab4(0x2a1)](_0x532097,_0x1a9442){const _0x28a836=_0x299ab4,_0x401b4b=_0x1a9442==='scene'?this[_0x28a836(0x24e)]:this[_0x28a836(0x25d)];if(!_0x401b4b||!this[_0x28a836(0x283)]||!this[_0x28a836(0x1ea)]||!this[_0x28a836(0x27c)])return;_0x532097['setBindGroup'](0x0,this[_0x28a836(0x283)]),_0x532097[_0x28a836(0x1d7)](0x1,this['volumeBindGroup']),_0x532097['setBindGroup'](0x2,this[_0x28a836(0x27c)]),this[_0x28a836(0x186)]?.[_0x28a836(0x1e1)](_0x532097,_0x401b4b,_0x1a9442);}[_0x299ab4(0x27e)](_0x2127fe){const _0x576222=_0x299ab4;void _0x2127fe['lost'][_0x576222(0x220)](_0x225b82=>{const _0x1ceb7a=_0x576222;if(this[_0x1ceb7a(0x2b4)]!==_0x2127fe||this[_0x1ceb7a(0x29e)]===_0x1ceb7a(0x190))return;this['lifecycleState']=_0x1ceb7a(0x228),console[_0x1ceb7a(0x1cd)](_0x1ceb7a(0x268)+_0x225b82[_0x1ceb7a(0x1ff)]+_0x1ceb7a(0x210));const _0x4bffe9=this[_0x1ceb7a(0x1cf)];this[_0x1ceb7a(0x27a)](),_0x4bffe9&&void this[_0x1ceb7a(0x1a8)](_0x4bffe9)[_0x1ceb7a(0x2ae)](_0x1e3aa7=>{const _0x1867a7=_0x1ceb7a;console[_0x1867a7(0x1cd)]('WebGPU\x20volume\x20device\x20restoration\x20failed.\x20WebGPU\x20体积设备恢复失败。',_0x1e3aa7);});});}[_0x299ab4(0x27a)](){const _0x58df52=_0x299ab4;this['uploadGeneration']+=0x1,this[_0x58df52(0x1f1)](new DOMException(_0x58df52(0x20c),_0x58df52(0x1d9))),this[_0x58df52(0x255)]?.[_0x58df52(0x1b3)](),this['transferResources']?.[_0x58df52(0x1b3)](),this[_0x58df52(0x273)]?.['destroy'](),this[_0x58df52(0x186)]?.['destroy'](),this[_0x58df52(0x2b0)]?.[_0x58df52(0x1b3)](),this[_0x58df52(0x206)]?.[_0x58df52(0x1b3)](),this[_0x58df52(0x1a3)]?.[_0x58df52(0x1b3)](),this['volumeParamsBuffer']?.[_0x58df52(0x1b3)](),this['uploadStagingBuffer']?.[_0x58df52(0x1b3)]();try{this[_0x58df52(0x1cb)]?.[_0x58df52(0x1a0)]();}catch{}this[_0x58df52(0x2b4)]?.[_0x58df52(0x1b3)](),this[_0x58df52(0x1d3)]=null,this[_0x58df52(0x2b4)]=null,this['context']=null,this[_0x58df52(0x1f2)]=null,this[_0x58df52(0x1a3)]=null,this[_0x58df52(0x1f3)]=null,this[_0x58df52(0x2a7)]=null,this[_0x58df52(0x25c)]=0x0,this['geometryBindGroupLayout']=null,this[_0x58df52(0x1f5)]=null,this[_0x58df52(0x249)]=null,this[_0x58df52(0x291)]=null,this[_0x58df52(0x1b8)]=null,this['geometryBindGroup']=null,this[_0x58df52(0x1a2)]=null,this[_0x58df52(0x1ea)]=null,this[_0x58df52(0x27c)]=null,this[_0x58df52(0x1fe)]=null,this[_0x58df52(0x225)]=null,this[_0x58df52(0x23c)]=null,this[_0x58df52(0x221)]=null,this[_0x58df52(0x1c7)]=null,this[_0x58df52(0x24e)]=null,this['overlaySlicePipeline']=null,this[_0x58df52(0x206)]=null,this[_0x58df52(0x255)]=null,this[_0x58df52(0x284)]=null,this[_0x58df52(0x273)]=null,this[_0x58df52(0x186)]=null,this[_0x58df52(0x2b0)]=null,this[_0x58df52(0x240)]=![],this[_0x58df52(0x27b)]=0x0,this[_0x58df52(0x1c5)]=0x0;}[_0x299ab4(0x1b6)](){const _0x5c60d5=_0x299ab4;if(!this[_0x5c60d5(0x2b4)])throw new Error('WebGPU\x20volume\x20device\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20device\x20尚未初始化。');return this[_0x5c60d5(0x2b4)];}[_0x299ab4(0x1e4)](){const _0x465d62=_0x299ab4;if(!this['context'])throw new Error(_0x465d62(0x258));return this[_0x465d62(0x1cb)];}['getFormat'](){const _0x320458=_0x299ab4;if(!this[_0x320458(0x1f2)])throw new Error(_0x320458(0x22a));return this[_0x320458(0x1f2)];}[_0x299ab4(0x271)](){const _0x208bde=_0x299ab4;if(!this[_0x208bde(0x1cf)])throw new Error(_0x208bde(0x182));return this['canvas'];}['getAttachments'](){const _0x87e12a=_0x299ab4;if(!this[_0x87e12a(0x206)])throw new Error('WebGPU\x20scene\x20attachments\x20are\x20unavailable.\x20WebGPU\x20场景附件不可用。');return this['attachments'];}[_0x299ab4(0x1fb)](){const _0x5f2310=_0x299ab4;if(!this[_0x5f2310(0x255)])throw new Error('WebGPU\x20volume\x20source\x20must\x20be\x20configured\x20before\x20uploading\x20bricks.\x20上传砖块前必须配置\x20WebGPU\x20体积数据源。');return this[_0x5f2310(0x255)];}[_0x299ab4(0x1c6)](){const _0x5153cd=_0x299ab4;if(!this[_0x5153cd(0x284)])throw new Error(_0x5153cd(0x1a5));return this[_0x5153cd(0x284)];}[_0x299ab4(0x18e)](){const _0x46451e=_0x299ab4;if(!this['profileResources'])throw new Error(_0x46451e(0x18c));return this['profileResources'];}[_0x299ab4(0x257)](){const _0xc363a3=_0x299ab4;if(!this[_0xc363a3(0x186)])throw new Error(_0xc363a3(0x26a));return this['sliceResources'];}[_0x299ab4(0x231)](){const _0x358531=_0x299ab4;if(!this['axisResources'])throw new Error(_0x358531(0x280));return this['axisResources'];}['getSceneBindGroupLayout'](){const _0x550d32=_0x299ab4;if(!this[_0x550d32(0x1f5)])throw new Error(_0x550d32(0x1bd));return this[_0x550d32(0x1f5)];}[_0x299ab4(0x1b1)](){const _0x6c0f16=_0x299ab4;if(!this['geometryBindGroupLayout'])throw new Error('WebGPU\x20geometry\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20几何绑定布局不可用。');return this[_0x6c0f16(0x28e)];}[_0x299ab4(0x1ee)](){const _0x5822c3=_0x299ab4;if(!this['volumeBindGroupLayout'])throw new Error(_0x5822c3(0x1b4));return this['volumeBindGroupLayout'];}[_0x299ab4(0x1f7)](){const _0x4997b0=_0x299ab4;if(!this[_0x4997b0(0x291)])throw new Error(_0x4997b0(0x2b9));return this['transferBindGroupLayout'];}[_0x299ab4(0x227)](){const _0x1908ec=_0x299ab4;if(!this['sliceBindGroupLayout'])throw new Error(_0x1908ec(0x1aa));return this[_0x1908ec(0x1b8)];}[_0x299ab4(0x1ec)](){const _0x5c8c94=_0x299ab4;if(!this[_0x5c8c94(0x1a3)])throw new Error(_0x5c8c94(0x1ed));return this[_0x5c8c94(0x1a3)];}[_0x299ab4(0x245)](){const _0x14f1c8=_0x299ab4;if(!this[_0x14f1c8(0x1f3)])throw new Error(_0x14f1c8(0x2ad));return this[_0x14f1c8(0x1f3)];}}