m4-w-fast 1.2.1 → 1.2.2
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.
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/intersect.worker.js +2 -2
- package/dist/isoBands.worker.js +1 -1
- package/dist/m4-w-fast.umd.js +1 -1
- package/dist/raster-leaflet/index.cjs +2 -2
- package/dist/raster-leaflet/index.js +1 -1
- package/dist/raster-leaflet/index.mjs +2 -2
- package/dist/raster-leaflet/m4-w-raster-leaflet.umd.js +2 -2
- package/dist/raster-mars3d/cesiumRasterPlaneRenderer.js +1 -1
- package/dist/raster-mars3d/cesiumRasterTextureAdapter.js +1 -1
- package/dist/raster-mars3d/index.cjs +2 -2
- package/dist/raster-mars3d/index.js +1 -1
- package/dist/raster-mars3d/index.mjs +2 -2
- package/dist/raster-mars3d/m4-w-raster-mars3d.umd.js +2 -2
- package/dist/raster-mars3d/mars3dRasterImageryProvider.js +1 -1
- package/dist/raster-mars3d/mars3dRasterPlaneLayer.js +1 -1
- package/dist/raster-mars3d/rasterPlaneGeometry.js +1 -1
- package/dist/raster-mars3d/rasterPlaneGridChunks.js +1 -1
- package/dist/raster-mars3d/rasterPlaneMaterial.js +1 -1
- package/dist/raster-overlay/color.js +1 -1
- package/dist/raster-overlay/core.js +1 -1
- package/dist/raster-overlay/index.cjs +2 -2
- package/dist/raster-overlay/index.js +1 -1
- package/dist/raster-overlay/index.mjs +2 -2
- package/dist/raster-overlay/leaflet-renderers/createRenderer.js +1 -1
- package/dist/raster-overlay/leafletLayer.js +1 -1
- package/dist/raster-overlay/m4-w-raster-overlay.umd.js +2 -2
- package/dist/raster-overlay/query.js +1 -1
- package/dist/raster-overlay/rendering/createRasterRenderer.js +1 -1
- package/dist/raster-overlay/rendering/index.js +1 -1
- package/dist/raster-overlay/rendering/rasterRenderState.js +1 -1
- package/dist/raster-overlay/rendering/webgl2RasterRenderer.js +1 -1
- package/dist/raster-overlay/rendering/webgpuRasterRenderer.js +1 -1
- package/dist/raster-rendering/index.cjs +2 -2
- package/dist/raster-rendering/index.js +1 -1
- package/dist/raster-rendering/index.mjs +2 -2
- package/dist/raster-rendering/m4-w-raster-rendering.umd.js +2 -2
- package/dist/raster-rendering/webgpuRasterTileRenderer.js +1 -1
- package/dist/readFile.js +1 -1
- package/dist/rendering/index.js +1 -1
- package/dist/rendering/webgl2/baseWebgl2Renderer.js +1 -1
- package/dist/rendering/webgl2/index.js +1 -1
- package/dist/rendering/webgl2/webgl2CoverageResources.js +1 -1
- package/dist/rendering/webgl2/webgl2VisualizationResources.js +1 -1
- package/dist/rendering/webgpu/baseWebgpuRenderer.js +1 -1
- package/dist/rendering/webgpu/index.js +1 -1
- package/dist/rendering/webgpu/visualizationParams.js +1 -1
- package/dist/rendering/webgpu/visualizationResources.js +1 -1
- package/dist/rendering/webgpu/webgpuCoverageResources.js +1 -1
- package/dist/road-overlay/coordinateTransform.js +1 -1
- package/dist/road-overlay/index.cjs +2 -2
- package/dist/road-overlay/index.js +1 -1
- package/dist/road-overlay/index.mjs +2 -2
- package/dist/road-overlay/leaflet-renderers/createRenderer.js +1 -1
- package/dist/road-overlay/leafletLayer.js +1 -1
- package/dist/road-overlay/m4-w-road-overlay.umd.js +2 -2
- package/dist/road-overlay/options.js +1 -1
- package/dist/road-overlay/rendering/index.js +1 -1
- package/dist/road-overlay/rendering/roadRenderState.js +1 -1
- package/dist/road-overlay/rendering/webgl2RoadRenderer.js +1 -1
- package/dist/road-overlay/rendering/webgpuRoadRenderer.js +1 -1
- package/dist/road-overlay/roadData.js +1 -1
- package/dist/road-overlay/roadGeometry.js +1 -1
- package/dist/road-overlay/roadMesh.js +1 -1
- package/dist/shared/coordinate-shader/webgl2/index.js +1 -1
- package/dist/shared/coordinate-shader/webgpu/index.js +1 -1
- package/dist/shared/map/index.js +1 -1
- package/dist/shared/map/leaflet.js +1 -1
- package/dist/shared/polygon/contains.js +1 -1
- package/dist/shared/polygon/index.js +1 -1
- package/dist/shared/polygon/polygonMesh.js +1 -1
- package/dist/shared/shader/assemble.js +1 -1
- package/dist/shared/visualization/index.js +1 -1
- package/dist/shared/visualization/shader/webgl2/index.js +1 -1
- package/dist/shared/visualization/shader/webgpu/index.js +1 -1
- package/dist/shared/visualization/utils.js +1 -1
- package/dist/volume-data/index.cjs +1 -0
- package/dist/volume-data/index.d.ts +5 -0
- package/dist/volume-data/index.js +1 -0
- package/dist/volume-data/index.mjs +1 -0
- package/dist/volume-data/input.d.ts +2 -0
- package/dist/volume-data/input.js +1 -0
- package/dist/volume-data/loadVolumeSource.d.ts +2 -0
- package/dist/volume-data/loadVolumeSource.js +1 -0
- package/dist/volume-data/m4-w-volume-data.umd.js +1 -0
- package/dist/volume-data/parserRegistry.d.ts +5 -0
- package/dist/volume-data/parserRegistry.js +1 -0
- package/dist/volume-data/radarGridVolumeMetadata.d.ts +2 -0
- package/dist/volume-data/radarGridVolumeMetadata.js +1 -0
- package/dist/volume-data/radarGridVolumeParser.d.ts +2 -0
- package/dist/volume-data/radarGridVolumeParser.js +1 -0
- package/dist/volume-data/radarGridVolumeSource.d.ts +3 -0
- package/dist/volume-data/radarGridVolumeSource.js +1 -0
- package/dist/volume-data/volumeDataError.d.ts +5 -0
- package/dist/volume-data/volumeDataError.js +1 -0
- package/dist/volume-data/volumeDataTypes.d.ts +54 -0
- package/dist/volume-data/volumeDataTypes.js +1 -0
- package/dist/volume-data/zipArchive.d.ts +6 -0
- package/dist/volume-data/zipArchive.js +1 -0
- package/dist/volume-mars3d/createMars3dVolumeScene.js +1 -1
- package/dist/volume-mars3d/index.cjs +1 -1
- package/dist/volume-mars3d/index.js +1 -1
- package/dist/volume-mars3d/index.mjs +1 -1
- package/dist/volume-mars3d/m4-w-volume-mars3d.umd.js +1 -1
- package/dist/volume-mars3d/mars3dCanvasCompensation.js +1 -1
- package/dist/volume-mars3d/mars3dRaymarchShader.js +1 -1
- package/dist/volume-mars3d/mars3dVolumeLayer.js +1 -1
- package/dist/volume-mars3d/mars3dVolumeRenderer.js +1 -1
- package/dist/volume-mars3d-native/index.cjs +1 -1
- package/dist/volume-mars3d-native/index.js +1 -1
- package/dist/volume-mars3d-native/index.mjs +1 -1
- package/dist/volume-mars3d-native/liveUpdateScheduler.js +1 -1
- package/dist/volume-mars3d-native/m4-w-volume-mars3d-native.umd.js +1 -1
- package/dist/volume-mars3d-native/mars3dNativeSliceLayer.js +1 -1
- package/dist/volume-mars3d-native/mars3dNativeSliceRenderer.js +1 -1
- package/dist/volume-mars3d-native/mars3dNativeVolumeLayer.js +1 -1
- package/dist/volume-mars3d-native/mars3dNativeVolumeRenderer.js +1 -1
- package/dist/volume-mars3d-native/nativeAxisSliceRenderer.js +1 -1
- package/dist/volume-mars3d-native/nativeSliceAtlas.js +1 -1
- package/dist/volume-mars3d-native/nativeVoxelProvider.js +1 -1
- package/dist/volume-mars3d-native/nativeVoxelShader.js +1 -1
- package/dist/volume-mars3d-native/voxelData.js +1 -1
- package/dist/volume-scene/brickLayout.js +1 -1
- package/dist/volume-scene/brickResidency.js +1 -1
- package/dist/volume-scene/camera.js +1 -1
- package/dist/volume-scene/createVolumeScene.js +1 -1
- package/dist/volume-scene/geographicVolume.js +1 -1
- package/dist/volume-scene/inMemoryVolumeSource.js +1 -1
- package/dist/volume-scene/index.cjs +1 -1
- package/dist/volume-scene/index.js +1 -1
- package/dist/volume-scene/index.mjs +1 -1
- package/dist/volume-scene/m4-w-volume-scene.umd.js +1 -1
- package/dist/volume-scene/matrix.js +1 -1
- package/dist/volume-scene/rendering/webgpu/index.js +1 -1
- package/dist/volume-scene/rendering/webgpu/webgpuBrickAtlas.js +1 -1
- package/dist/volume-scene/rendering/webgpu/webgpuSceneAttachments.js +1 -1
- package/dist/volume-scene/rendering/webgpu/webgpuSceneMeshResources.js +1 -1
- package/dist/volume-scene/rendering/webgpu/webgpuSliceResources.js +1 -1
- package/dist/volume-scene/rendering/webgpu/webgpuTransferResources.js +1 -1
- package/dist/volume-scene/rendering/webgpu/webgpuVolumeSceneRenderer.js +1 -1
- package/dist/volume-scene/routeProfileMesh.js +1 -1
- package/dist/volume-scene/sliceInteractionController.js +1 -1
- package/dist/volume-scene/sliceMarkerOverlay.js +1 -1
- package/dist/volume-scene/sliceState.js +1 -1
- package/dist/volume-scene/volumeBrickData.js +1 -1
- package/dist/volume-scene/volumeScene.js +1 -1
- package/dist/volume-scene/volumeTransfer.js +1 -1
- package/dist/volume-scene/volumeValidation.js +1 -1
- package/dist/volume-section/createHorizontalRasterGrid.d.ts +3 -0
- package/dist/volume-section/createHorizontalRasterGrid.js +1 -0
- package/dist/volume-section/createVolumeSection.d.ts +3 -0
- package/dist/volume-section/createVolumeSection.js +1 -0
- package/dist/volume-section/createVolumeSectionRasterGrid.d.ts +3 -0
- package/dist/volume-section/createVolumeSectionRasterGrid.js +1 -0
- package/dist/volume-section/createVolumeSectionRouteProfile.d.ts +3 -0
- package/dist/volume-section/createVolumeSectionRouteProfile.js +1 -0
- package/dist/volume-section/geographic.d.ts +3 -0
- package/dist/volume-section/geographic.js +1 -0
- package/dist/volume-section/gridLayerStatistics.d.ts +9 -0
- package/dist/volume-section/gridLayerStatistics.js +1 -0
- package/dist/volume-section/index.cjs +1 -0
- package/dist/volume-section/index.d.ts +8 -0
- package/dist/volume-section/index.js +1 -0
- package/dist/volume-section/index.mjs +1 -0
- package/dist/volume-section/m4-w-volume-section.umd.js +1 -0
- package/dist/volume-section/routeSampling.d.ts +9 -0
- package/dist/volume-section/routeSampling.js +1 -0
- package/dist/volume-section/volumeSectionTypes.d.ts +39 -0
- package/dist/volume-section/volumeSectionTypes.js +1 -0
- package/package.json +14 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x2859cf=_0x1b5d;function _0x1b5d(_0x2070d6,_0xf6c920){const _0xa78c21=_0xa78c();return _0x1b5d=function(_0x1b5dca,_0x40cc51){_0x1b5dca=_0x1b5dca-0x185;let _0x1cc359=_0xa78c21[_0x1b5dca];return _0x1cc359;},_0x1b5d(_0x2070d6,_0xf6c920);}(function(_0x585531,_0x2bb3bc){const _0x35e7b1=_0x1b5d,_0x3321b1=_0x585531();while(!![]){try{const _0x58fda9=-parseInt(_0x35e7b1(0x382))/0x1*(-parseInt(_0x35e7b1(0x49a))/0x2)+-parseInt(_0x35e7b1(0x1b0))/0x3+parseInt(_0x35e7b1(0x2c6))/0x4*(parseInt(_0x35e7b1(0x19e))/0x5)+-parseInt(_0x35e7b1(0x1f7))/0x6+-parseInt(_0x35e7b1(0x466))/0x7+-parseInt(_0x35e7b1(0x440))/0x8*(-parseInt(_0x35e7b1(0x383))/0x9)+parseInt(_0x35e7b1(0x3e0))/0xa*(parseInt(_0x35e7b1(0x43a))/0xb);if(_0x58fda9===_0x2bb3bc)break;else _0x3321b1['push'](_0x3321b1['shift']());}catch(_0x40de41){_0x3321b1['push'](_0x3321b1['shift']());}}}(_0xa78c,0x5fdfa));const validatePositiveInteger=(_0x3677e4,_0x4b219b)=>{const _0x2cbed3=_0x1b5d;if(!Number[_0x2cbed3(0x2dd)](_0x3677e4)||_0x3677e4<=0x0)throw Error(_0x4b219b+_0x2cbed3(0x238)+_0x4b219b+_0x2cbed3(0x3fd));},validateAxis=(_0x16e4e9,_0x5661f6)=>{const _0x5b9f91=_0x1b5d;if(validatePositiveInteger(_0x16e4e9['count'],_0x5661f6+_0x5b9f91(0x21f)),!Number['isFinite'](_0x16e4e9[_0x5b9f91(0x1df)])||!Number['isFinite'](_0x16e4e9[_0x5b9f91(0x317)]))throw Error(_0x5661f6+'\x20endpoints\x20must\x20be\x20finite.\x20'+_0x5661f6+_0x5b9f91(0x3bf));if(_0x16e4e9[_0x5b9f91(0x251)]===0x1&&_0x16e4e9[_0x5b9f91(0x1df)]!==_0x16e4e9[_0x5b9f91(0x317)])throw Error(_0x5661f6+_0x5b9f91(0x20c)+_0x5661f6+_0x5b9f91(0x227));if(_0x16e4e9[_0x5b9f91(0x251)]>0x1&&_0x16e4e9[_0x5b9f91(0x1df)]===_0x16e4e9[_0x5b9f91(0x317)])throw Error(_0x5661f6+_0x5b9f91(0x28c)+_0x5661f6+'\x20包含多个采样点时步长不能为零。');},validateNoData=(_0x1c02ba,_0x5b09eb)=>{const _0x52c2bc=_0x1b5d;if(_0x1c02ba!==void 0x0&&!Number[_0x52c2bc(0x273)](_0x1c02ba)&&!Number['isNaN'](_0x1c02ba))throw Error(_0x5b09eb+_0x52c2bc(0x37f)+_0x5b09eb+_0x52c2bc(0x274));},rangesEqual=(_0xde4d41,_0x174c71)=>_0xde4d41[_0x2859cf(0x231)]===_0x174c71[_0x2859cf(0x231)]&&_0xde4d41['xCount']===_0x174c71['xCount']&&_0xde4d41[_0x2859cf(0x334)]===_0x174c71[_0x2859cf(0x334)]&&_0xde4d41[_0x2859cf(0x304)]===_0x174c71['levelCount']&&_0xde4d41[_0x2859cf(0x212)]===_0x174c71[_0x2859cf(0x212)]&&_0xde4d41[_0x2859cf(0x21c)]===_0x174c71[_0x2859cf(0x21c)],validateVolumeMetadata=_0x15e9a5=>{const _0x559f44=_0x2859cf;if(validateAxis(_0x15e9a5[_0x559f44(0x1bf)],_0x559f44(0x403)),validateAxis(_0x15e9a5[_0x559f44(0x1de)],_0x559f44(0x437)),validateAxis(_0x15e9a5[_0x559f44(0x203)],_0x559f44(0x337)),validatePositiveInteger(_0x15e9a5[_0x559f44(0x2e4)],_0x559f44(0x45f)),validateNoData(_0x15e9a5[_0x559f44(0x219)],'Volume'),_0x15e9a5[_0x559f44(0x1be)]!==void 0x0&&!Number[_0x559f44(0x273)](_0x15e9a5[_0x559f44(0x1be)]))throw Error(_0x559f44(0x2ff));if(_0x15e9a5[_0x559f44(0x441)]!==void 0x0&&(!Number[_0x559f44(0x2dd)](_0x15e9a5[_0x559f44(0x441)])||_0x15e9a5[_0x559f44(0x441)]<0x0))throw Error(_0x559f44(0x1f4));},validateVolumeTimeIndex=(_0x5d2177,_0x3ad6e4)=>{const _0x169a3c=_0x2859cf;if(!Number[_0x169a3c(0x2dd)](_0x3ad6e4)||_0x3ad6e4<0x0||_0x3ad6e4>=_0x5d2177[_0x169a3c(0x2e4)])throw Error(_0x169a3c(0x3ef)+_0x3ad6e4+'.\x20体积时间索引越界。');},validateVolumeChunkRange=(_0xd7d36b,_0x501402)=>{const _0x10124b=_0x2859cf;let _0x1455a5=[[_0x501402[_0x10124b(0x231)],_0x10124b(0x231)],[_0x501402[_0x10124b(0x434)],'xCount'],[_0x501402[_0x10124b(0x334)],'levelStart'],[_0x501402[_0x10124b(0x304)],_0x10124b(0x304)],[_0x501402['sourceYStart'],_0x10124b(0x212)],[_0x501402[_0x10124b(0x21c)],_0x10124b(0x21c)]];for(let [_0x4e5031,_0x32a004]of _0x1455a5)if(!Number[_0x10124b(0x2dd)](_0x4e5031)||_0x4e5031<0x0||_0x32a004[_0x10124b(0x302)](_0x10124b(0x30a))&&_0x4e5031===0x0)throw Error(_0x10124b(0x3bb)+_0x32a004+_0x10124b(0x21a)+_0x4e5031+_0x10124b(0x1c0)+_0x32a004+_0x10124b(0x3d6));if(_0x501402[_0x10124b(0x231)]+_0x501402[_0x10124b(0x434)]>_0xd7d36b['xAxis'][_0x10124b(0x251)]||_0x501402[_0x10124b(0x334)]+_0x501402[_0x10124b(0x304)]>_0xd7d36b[_0x10124b(0x1de)][_0x10124b(0x251)]||_0x501402[_0x10124b(0x212)]+_0x501402[_0x10124b(0x21c)]>_0xd7d36b['zAxis'][_0x10124b(0x251)])throw Error('Volume\x20chunk\x20range\x20exceeds\x20source\x20dimensions.\x20体积分块范围超出源数据尺寸。');},validateVolumeChunk=(_0x43be0b,_0x885317,_0x48ba05,_0x4d7251)=>{const _0x54a552=_0x2859cf;if(validateVolumeTimeIndex(_0x43be0b,_0x885317[_0x54a552(0x25b)]),validateVolumeChunkRange(_0x43be0b,_0x885317[_0x54a552(0x2b0)]),_0x4d7251!==void 0x0&&_0x885317[_0x54a552(0x25b)]!==_0x4d7251)throw Error(_0x54a552(0x2e6));if(_0x48ba05&&!rangesEqual(_0x885317[_0x54a552(0x2b0)],_0x48ba05))throw Error('Returned\x20volume\x20chunk\x20range\x20does\x20not\x20match\x20the\x20request.\x20返回体积分块范围与请求不一致。');if(_0x885317[_0x54a552(0x456)]!==_0x885317[_0x54a552(0x2b0)][_0x54a552(0x434)]||_0x885317[_0x54a552(0x3de)]!==_0x885317['range'][_0x54a552(0x304)]||_0x885317['depth']!==_0x885317[_0x54a552(0x2b0)][_0x54a552(0x21c)])throw Error(_0x54a552(0x36c));let _0x5e8ba0=_0x885317[_0x54a552(0x456)]*_0x885317[_0x54a552(0x3de)]*_0x885317[_0x54a552(0x42d)];if(!Number[_0x54a552(0x345)](_0x5e8ba0)||_0x885317['values'][_0x54a552(0x326)]!==_0x5e8ba0)throw Error('Volume\x20chunk\x20requires\x20'+_0x5e8ba0+_0x54a552(0x1ec)+_0x885317['values'][_0x54a552(0x326)]+_0x54a552(0x388));},validateVolumeSource=_0x268bcb=>{const _0xbf6b6=_0x2859cf;if(!_0x268bcb||typeof _0x268bcb['readChunk']!=_0xbf6b6(0x339))throw Error(_0xbf6b6(0x462));validateVolumeMetadata(_0x268bcb[_0xbf6b6(0x204)]);},validateBrickShape=_0x5d3cc6=>{const _0xb548f1=_0x2859cf;for(let [_0x28cd18,_0x496b1b]of[[_0x5d3cc6[_0xb548f1(0x456)],_0xb548f1(0x456)],[_0x5d3cc6[_0xb548f1(0x3de)],_0xb548f1(0x3de)],[_0x5d3cc6['depth'],'depth']])if(!Number['isInteger'](_0x28cd18)||_0x28cd18<=0x0)throw Error('Volume\x20brick\x20'+_0x496b1b+'\x20must\x20be\x20a\x20positive\x20integer.\x20体积分块\x20'+_0x496b1b+_0xb548f1(0x3fd));if(!Number['isInteger'](_0x5d3cc6[_0xb548f1(0x2b1)])||_0x5d3cc6[_0xb548f1(0x2b1)]<0x1)throw Error(_0xb548f1(0x3b7));},resolveVolumeBrickShape=(_0xd7578e={})=>{const _0x12809f=_0x2859cf;let _0x23cc7c={'width':_0xd7578e[_0x12809f(0x456)]??0x100,'height':_0xd7578e[_0x12809f(0x3de)]??0x8,'depth':_0xd7578e['depth']??0x100,'halo':_0xd7578e[_0x12809f(0x2b1)]??0x1};return validateBrickShape(_0x23cc7c),_0x23cc7c;},createVolumeBrickLayout=(_0x44207d,_0xe33a27={})=>{const _0x1e206e=_0x2859cf;validateVolumeMetadata(_0x44207d);let _0xaf1898=resolveVolumeBrickShape(_0xe33a27),_0x4d23b0=Math[_0x1e206e(0x1b5)](_0x44207d[_0x1e206e(0x1bf)][_0x1e206e(0x251)]/_0xaf1898[_0x1e206e(0x456)]),_0x3f5b4c=Math['ceil'](_0x44207d['yAxis']['count']/_0xaf1898[_0x1e206e(0x3de)]),_0x5b5289=Math[_0x1e206e(0x1b5)](_0x44207d[_0x1e206e(0x203)][_0x1e206e(0x251)]/_0xaf1898[_0x1e206e(0x42d)]);return{'shape':_0xaf1898,'countX':_0x4d23b0,'countY':_0x3f5b4c,'countZ':_0x5b5289,'brickCount':_0x4d23b0*_0x3f5b4c*_0x5b5289};},createVolumeBrickKey=_0x57dd38=>_0x57dd38['x']+':'+_0x57dd38['y']+':'+_0x57dd38['z'],createVolumeBrickDescriptor=(_0x1a4c51,_0x5c74fd,_0x57f2a2)=>{const _0x197abe=_0x2859cf;if(!Number['isInteger'](_0x57f2a2['x'])||!Number['isInteger'](_0x57f2a2['y'])||!Number[_0x197abe(0x2dd)](_0x57f2a2['z'])||_0x57f2a2['x']<0x0||_0x57f2a2['x']>=_0x5c74fd['countX']||_0x57f2a2['y']<0x0||_0x57f2a2['y']>=_0x5c74fd[_0x197abe(0x454)]||_0x57f2a2['z']<0x0||_0x57f2a2['z']>=_0x5c74fd['countZ'])throw Error('Volume\x20brick\x20coordinate\x20is\x20out\x20of\x20range.\x20体积分块坐标越界。');let _0x56a6df=_0x57f2a2['x']*_0x5c74fd[_0x197abe(0x211)][_0x197abe(0x456)],_0x3757d9=_0x57f2a2['y']*_0x5c74fd[_0x197abe(0x211)][_0x197abe(0x3de)],_0x2d7c1a=_0x57f2a2['z']*_0x5c74fd[_0x197abe(0x211)][_0x197abe(0x42d)],_0xf61f93=Math['min'](_0x5c74fd['shape'][_0x197abe(0x456)],_0x1a4c51[_0x197abe(0x1bf)][_0x197abe(0x251)]-_0x56a6df),_0x2c7956=Math[_0x197abe(0x28e)](_0x5c74fd['shape'][_0x197abe(0x3de)],_0x1a4c51[_0x197abe(0x1de)]['count']-_0x3757d9),_0xaf9530=Math[_0x197abe(0x28e)](_0x5c74fd[_0x197abe(0x211)][_0x197abe(0x42d)],_0x1a4c51[_0x197abe(0x203)][_0x197abe(0x251)]-_0x2d7c1a),_0x2924d6=_0x5c74fd['shape'][_0x197abe(0x2b1)],_0xea6592=Math[_0x197abe(0x284)](0x0,_0x56a6df-_0x2924d6),_0x446028=Math[_0x197abe(0x284)](0x0,_0x3757d9-_0x2924d6),_0x577714=Math[_0x197abe(0x284)](0x0,_0x2d7c1a-_0x2924d6),_0x34ee4a=Math[_0x197abe(0x28e)](_0x1a4c51[_0x197abe(0x1bf)][_0x197abe(0x251)],_0x56a6df+_0xf61f93+_0x2924d6),_0x21419c=Math[_0x197abe(0x28e)](_0x1a4c51[_0x197abe(0x1de)][_0x197abe(0x251)],_0x3757d9+_0x2c7956+_0x2924d6),_0x204b6b=Math[_0x197abe(0x28e)](_0x1a4c51['zAxis'][_0x197abe(0x251)],_0x2d7c1a+_0xaf9530+_0x2924d6),_0x34d9de=_0x5c74fd[_0x197abe(0x211)]['width']+_0x2924d6*0x2,_0x278577=_0x5c74fd[_0x197abe(0x211)][_0x197abe(0x3de)]+_0x2924d6*0x2,_0x1f5207=_0x5c74fd[_0x197abe(0x211)][_0x197abe(0x42d)]+_0x2924d6*0x2;return{'key':createVolumeBrickKey(_0x57f2a2),'coordinate':_0x57f2a2,'coreRange':{'xStart':_0x56a6df,'xCount':_0xf61f93,'levelStart':_0x3757d9,'levelCount':_0x2c7956,'sourceYStart':_0x2d7c1a,'sourceYCount':_0xaf9530},'readRange':{'xStart':_0xea6592,'xCount':_0x34ee4a-_0xea6592,'levelStart':_0x446028,'levelCount':_0x21419c-_0x446028,'sourceYStart':_0x577714,'sourceYCount':_0x204b6b-_0x577714},'physicalWidth':_0x34d9de,'physicalHeight':_0x278577,'physicalDepth':_0x1f5207,'byteLength':_0x34d9de*_0x278577*_0x1f5207*Float32Array[_0x197abe(0x3fc)]};},createVolumeBrickDescriptors=(_0x81dbf8,_0x352091)=>{const _0x4413fd=_0x2859cf;let _0x821ee0=[];for(let _0x57631d=0x0;_0x57631d<_0x352091[_0x4413fd(0x282)];_0x57631d+=0x1)for(let _0x472f04=0x0;_0x472f04<_0x352091['countY'];_0x472f04+=0x1)for(let _0x525a1b=0x0;_0x525a1b<_0x352091[_0x4413fd(0x1e9)];_0x525a1b+=0x1)_0x821ee0[_0x4413fd(0x39a)](createVolumeBrickDescriptor(_0x81dbf8,_0x352091,{'x':_0x525a1b,'y':_0x472f04,'z':_0x57631d}));return _0x821ee0;},EPSILON=1e-8,createMatrix=()=>new Float32Array(0x10),dotVector3=(_0x41de38,_0x44752b)=>_0x41de38[0x0]*_0x44752b[0x0]+_0x41de38[0x1]*_0x44752b[0x1]+_0x41de38[0x2]*_0x44752b[0x2],subtractVector3=(_0x3565eb,_0x742a8f)=>[_0x3565eb[0x0]-_0x742a8f[0x0],_0x3565eb[0x1]-_0x742a8f[0x1],_0x3565eb[0x2]-_0x742a8f[0x2]],crossVector3=(_0x307e6f,_0x149ee1)=>[_0x307e6f[0x1]*_0x149ee1[0x2]-_0x307e6f[0x2]*_0x149ee1[0x1],_0x307e6f[0x2]*_0x149ee1[0x0]-_0x307e6f[0x0]*_0x149ee1[0x2],_0x307e6f[0x0]*_0x149ee1[0x1]-_0x307e6f[0x1]*_0x149ee1[0x0]],normalizeVector3=_0x5de2ba=>{const _0x3c85aa=_0x2859cf;let _0x22c01a=Math[_0x3c85aa(0x348)](_0x5de2ba[0x0],_0x5de2ba[0x1],_0x5de2ba[0x2]);if(_0x22c01a<=EPSILON)throw Error(_0x3c85aa(0x218));return[_0x5de2ba[0x0]/_0x22c01a,_0x5de2ba[0x1]/_0x22c01a,_0x5de2ba[0x2]/_0x22c01a];},createIdentityMatrix=()=>{let _0x243546=createMatrix();return _0x243546[0x0]=0x1,_0x243546[0x5]=0x1,_0x243546[0xa]=0x1,_0x243546[0xf]=0x1,_0x243546;},multiplyMatrices=(_0x5f3723,_0x55321f)=>{let _0x85c668=createMatrix();for(let _0x1cb5fa=0x0;_0x1cb5fa<0x4;_0x1cb5fa+=0x1)for(let _0x6092b2=0x0;_0x6092b2<0x4;_0x6092b2+=0x1){let _0x2374c2=0x0;for(let _0x51a08e=0x0;_0x51a08e<0x4;_0x51a08e+=0x1)_0x2374c2+=_0x5f3723[_0x51a08e*0x4+_0x6092b2]*_0x55321f[_0x1cb5fa*0x4+_0x51a08e];_0x85c668[_0x1cb5fa*0x4+_0x6092b2]=_0x2374c2;}return _0x85c668;},invertMatrix=_0x2fae87=>{const _0x365b70=_0x2859cf;let _0x15fc60=Array[_0x365b70(0x1e5)]({'length':0x4},(_0xc233bf,_0x1deb39)=>{let _0x432c86=new Float64Array(0x8);for(let _0x5cb655=0x0;_0x5cb655<0x4;_0x5cb655+=0x1)_0x432c86[_0x5cb655]=_0x2fae87[_0x5cb655*0x4+_0x1deb39];return _0x432c86[_0x1deb39+0x4]=0x1,_0x432c86;});for(let _0x424bce=0x0;_0x424bce<0x4;_0x424bce+=0x1){let _0x4e15cb=_0x424bce;for(let _0x1ddc31=_0x424bce+0x1;_0x1ddc31<0x4;_0x1ddc31+=0x1)Math['abs'](_0x15fc60[_0x1ddc31][_0x424bce])>Math[_0x365b70(0x35d)](_0x15fc60[_0x4e15cb][_0x424bce])&&(_0x4e15cb=_0x1ddc31);if(Math[_0x365b70(0x35d)](_0x15fc60[_0x4e15cb][_0x424bce])<=EPSILON)throw Error(_0x365b70(0x249));_0x4e15cb!==_0x424bce&&([_0x15fc60[_0x424bce],_0x15fc60[_0x4e15cb]]=[_0x15fc60[_0x4e15cb],_0x15fc60[_0x424bce]]);let _0x5f250c=_0x15fc60[_0x424bce][_0x424bce];for(let _0xebf737=0x0;_0xebf737<0x8;_0xebf737+=0x1)_0x15fc60[_0x424bce][_0xebf737]/=_0x5f250c;for(let _0x840fdc=0x0;_0x840fdc<0x4;_0x840fdc+=0x1){if(_0x840fdc===_0x424bce)continue;let _0x38aee6=_0x15fc60[_0x840fdc][_0x424bce];for(let _0xab6489=0x0;_0xab6489<0x8;_0xab6489+=0x1)_0x15fc60[_0x840fdc][_0xab6489]-=_0x38aee6*_0x15fc60[_0x424bce][_0xab6489];}}let _0x3d36b=createMatrix();for(let _0x1aa61d=0x0;_0x1aa61d<0x4;_0x1aa61d+=0x1)for(let _0x1c41ca=0x0;_0x1c41ca<0x4;_0x1c41ca+=0x1)_0x3d36b[_0x1c41ca*0x4+_0x1aa61d]=_0x15fc60[_0x1aa61d][_0x1c41ca+0x4];return _0x3d36b;},createLookAtMatrix=(_0x3017d8,_0x2248cf,_0x3e17af)=>{let _0x250476=normalizeVector3(subtractVector3(_0x3017d8,_0x2248cf)),_0x14bb2f=normalizeVector3(crossVector3(_0x3e17af,_0x250476)),_0x46c534=crossVector3(_0x250476,_0x14bb2f),_0x4caacc=createIdentityMatrix();return _0x4caacc[0x0]=_0x14bb2f[0x0],_0x4caacc[0x1]=_0x46c534[0x0],_0x4caacc[0x2]=_0x250476[0x0],_0x4caacc[0x4]=_0x14bb2f[0x1],_0x4caacc[0x5]=_0x46c534[0x1],_0x4caacc[0x6]=_0x250476[0x1],_0x4caacc[0x8]=_0x14bb2f[0x2],_0x4caacc[0x9]=_0x46c534[0x2],_0x4caacc[0xa]=_0x250476[0x2],_0x4caacc[0xc]=-dotVector3(_0x14bb2f,_0x3017d8),_0x4caacc[0xd]=-dotVector3(_0x46c534,_0x3017d8),_0x4caacc[0xe]=-dotVector3(_0x250476,_0x3017d8),_0x4caacc;},createPerspectiveMatrix=(_0x12f8d0,_0x1bc199,_0x132be7,_0x358688)=>{const _0x11f4af=_0x2859cf;if(!(_0x12f8d0>0x0&&_0x12f8d0<Math['PI']))throw Error('透视相机视场角必须位于\x200\x20到\x20180\x20度之间。');if(!(_0x1bc199>0x0))throw Error(_0x11f4af(0x281));if(!(_0x132be7>0x0&&_0x358688>_0x132be7))throw Error(_0x11f4af(0x20e));let _0x543366=0x1/Math['tan'](_0x12f8d0/0x2),_0x5d0a7d=createMatrix();return _0x5d0a7d[0x0]=_0x543366/_0x1bc199,_0x5d0a7d[0x5]=_0x543366,_0x5d0a7d[0xa]=_0x358688/(_0x132be7-_0x358688),_0x5d0a7d[0xb]=-0x1,_0x5d0a7d[0xe]=_0x132be7*_0x358688/(_0x132be7-_0x358688),_0x5d0a7d;},createOrthographicMatrix=(_0x5690bd,_0x49b54b,_0x529745,_0x308c70)=>{const _0x5f3a5c=_0x2859cf;if(!(_0x5690bd>0x0&&_0x49b54b>0x0))throw Error('正交相机高度和宽高比必须大于\x200。');if(!(_0x529745>=0x0&&_0x308c70>_0x529745))throw Error(_0x5f3a5c(0x48a));let _0x14fa32=_0x5690bd*_0x49b54b,_0x299263=createIdentityMatrix();return _0x299263[0x0]=0x2/_0x14fa32,_0x299263[0x5]=0x2/_0x5690bd,_0x299263[0xa]=0x1/(_0x529745-_0x308c70),_0x299263[0xe]=_0x529745/(_0x529745-_0x308c70),_0x299263;},createScaleMatrix=(_0x73fcbe,_0x1e3790,_0x279eb4)=>{let _0xd8730e=createIdentityMatrix();return _0xd8730e[0x0]=_0x73fcbe,_0xd8730e[0x5]=_0x1e3790,_0xd8730e[0xa]=_0x279eb4,_0xd8730e;},composeVolumeModelMatrix=(_0x49c3dc,_0x253457)=>{const _0x39d186=_0x2859cf;if(!(_0x253457>0x0)||!Number[_0x39d186(0x273)](_0x253457))throw Error('verticalScale\x20必须是大于\x200\x20的有限数。');let _0x2a4d22=createScaleMatrix(0x1,_0x253457,0x1);return _0x49c3dc?multiplyMatrices(_0x49c3dc,_0x2a4d22):_0x2a4d22;},transformPoint=(_0x41b17d,_0x2cbaa9,_0x54e82f=0x1)=>[_0x41b17d[0x0]*_0x2cbaa9[0x0]+_0x41b17d[0x4]*_0x2cbaa9[0x1]+_0x41b17d[0x8]*_0x2cbaa9[0x2]+_0x41b17d[0xc]*_0x54e82f,_0x41b17d[0x1]*_0x2cbaa9[0x0]+_0x41b17d[0x5]*_0x2cbaa9[0x1]+_0x41b17d[0x9]*_0x2cbaa9[0x2]+_0x41b17d[0xd]*_0x54e82f,_0x41b17d[0x2]*_0x2cbaa9[0x0]+_0x41b17d[0x6]*_0x2cbaa9[0x1]+_0x41b17d[0xa]*_0x2cbaa9[0x2]+_0x41b17d[0xe]*_0x54e82f,_0x41b17d[0x3]*_0x2cbaa9[0x0]+_0x41b17d[0x7]*_0x2cbaa9[0x1]+_0x41b17d[0xb]*_0x2cbaa9[0x2]+_0x41b17d[0xf]*_0x54e82f],projectPointToViewport=(_0x1e9a19,_0x3e3d7f,_0x48ca4c,_0x3735d8)=>{let _0x40d392=transformPoint(_0x1e9a19,_0x3e3d7f);if(_0x40d392[0x3]<=EPSILON)return null;let _0x54162f=0x1/_0x40d392[0x3];return[(_0x40d392[0x0]*_0x54162f*0.5+0.5)*_0x48ca4c,(0.5-_0x40d392[0x1]*_0x54162f*0.5)*_0x3735d8,_0x40d392[0x2]*_0x54162f];},DEFAULT_POSITION=[0x0,0x1,0x2],DEFAULT_TARGET=[0x0,0x0,0x0],DEFAULT_UP=[0x0,0x1,0x0],DEFAULT_PROJECTION={'type':_0x2859cf(0x40e),'fovYDegrees':0x2d,'near':0.01,'far':0x2710},DEGREE_TO_RADIAN=Math['PI']/0xb4,cloneVector=_0x1c7b18=>[_0x1c7b18[0x0],_0x1c7b18[0x1],_0x1c7b18[0x2]],cloneProjection=_0x102a1e=>(_0x102a1e['type'],{..._0x102a1e}),cloneState=_0x432fdb=>({'position':cloneVector(_0x432fdb[_0x2859cf(0x27c)]),'target':cloneVector(_0x432fdb[_0x2859cf(0x2a6)]),'up':cloneVector(_0x432fdb['up']),'projection':cloneProjection(_0x432fdb[_0x2859cf(0x30f)])}),subtractVector=(_0x5947b6,_0x2e1a12)=>[_0x5947b6[0x0]-_0x2e1a12[0x0],_0x5947b6[0x1]-_0x2e1a12[0x1],_0x5947b6[0x2]-_0x2e1a12[0x2]],addVector=(_0x422979,_0x24d8cc)=>[_0x422979[0x0]+_0x24d8cc[0x0],_0x422979[0x1]+_0x24d8cc[0x1],_0x422979[0x2]+_0x24d8cc[0x2]],scaleVector=(_0x36f220,_0x3c436e)=>[_0x36f220[0x0]*_0x3c436e,_0x36f220[0x1]*_0x3c436e,_0x36f220[0x2]*_0x3c436e],crossVector=(_0x55a892,_0x335bee)=>[_0x55a892[0x1]*_0x335bee[0x2]-_0x55a892[0x2]*_0x335bee[0x1],_0x55a892[0x2]*_0x335bee[0x0]-_0x55a892[0x0]*_0x335bee[0x2],_0x55a892[0x0]*_0x335bee[0x1]-_0x55a892[0x1]*_0x335bee[0x0]],normalizeVector=_0x866ff0=>{const _0x430b9f=_0x2859cf;let _0x20ade7=Math[_0x430b9f(0x348)](_0x866ff0[0x0],_0x866ff0[0x1],_0x866ff0[0x2]);return _0x20ade7===0x0?[0x0,0x0,0x0]:scaleVector(_0x866ff0,0x1/_0x20ade7);},clamp$1=(_0x52e53a,_0x7287e6,_0x34b1ee)=>Math['min'](_0x34b1ee,Math[_0x2859cf(0x284)](_0x7287e6,_0x52e53a)),validateProjection=_0x15ffde=>{const _0x28d078=_0x2859cf;if(!(_0x15ffde[_0x28d078(0x498)]>=0x0&&_0x15ffde[_0x28d078(0x465)]>_0x15ffde[_0x28d078(0x498)]))throw Error(_0x28d078(0x48a));if(_0x15ffde[_0x28d078(0x427)]==='perspective'&&!(_0x15ffde['near']>0x0&&_0x15ffde[_0x28d078(0x3f2)]>0x0&&_0x15ffde['fovYDegrees']<0xb4))throw Error(_0x28d078(0x244));if(_0x15ffde[_0x28d078(0x427)]===_0x28d078(0x34a)&&!(_0x15ffde['height']>0x0))throw Error('正交相机高度必须大于\x200。');},resolveInitialState=_0x2a0505=>{const _0x5190ec=_0x2859cf;let _0x11c77d={'position':_0x2a0505['state']?.[_0x5190ec(0x27c)]?cloneVector(_0x2a0505[_0x5190ec(0x2f6)][_0x5190ec(0x27c)]):cloneVector(DEFAULT_POSITION),'target':_0x2a0505[_0x5190ec(0x2f6)]?.['target']?cloneVector(_0x2a0505['state']['target']):cloneVector(DEFAULT_TARGET),'up':_0x2a0505[_0x5190ec(0x2f6)]?.['up']?cloneVector(_0x2a0505[_0x5190ec(0x2f6)]['up']):cloneVector(DEFAULT_UP),'projection':_0x2a0505['state']?.[_0x5190ec(0x30f)]?cloneProjection(_0x2a0505[_0x5190ec(0x2f6)][_0x5190ec(0x30f)]):cloneProjection(DEFAULT_PROJECTION)};return validateProjection(_0x11c77d[_0x5190ec(0x30f)]),_0x11c77d;};var VolumeCamera=class{[_0x2859cf(0x458)];['aspect'];[_0x2859cf(0x34d)];[_0x2859cf(0x28a)];['zoomSpeed'];[_0x2859cf(0x1c9)];[_0x2859cf(0x194)];[_0x2859cf(0x35f)];[_0x2859cf(0x32b)];constructor(_0x1b5b32={}){const _0x4c34cd=_0x2859cf;if(this[_0x4c34cd(0x458)]=resolveInitialState(_0x1b5b32),this['aspect']=_0x1b5b32[_0x4c34cd(0x46b)]??0x1,this[_0x4c34cd(0x34d)]=_0x1b5b32[_0x4c34cd(0x34d)]??0.005,this['panSpeed']=_0x1b5b32[_0x4c34cd(0x28a)]??0x1,this[_0x4c34cd(0x492)]=_0x1b5b32['zoomSpeed']??0.0015,this[_0x4c34cd(0x1c9)]=_0x1b5b32[_0x4c34cd(0x1c9)]??0.001,this[_0x4c34cd(0x194)]=_0x1b5b32[_0x4c34cd(0x194)]??0x1/0x0,this['minimumPitch']=(_0x1b5b32[_0x4c34cd(0x340)]??-0x59)*DEGREE_TO_RADIAN,this[_0x4c34cd(0x32b)]=(_0x1b5b32['maximumPitchDegrees']??0x59)*DEGREE_TO_RADIAN,!(this['aspect']>0x0))throw Error('相机宽高比必须大于\x200。');}get[_0x2859cf(0x2f6)](){const _0x497f0e=_0x2859cf;return cloneState(this[_0x497f0e(0x458)]);}get[_0x2859cf(0x27e)](){const _0x542547=_0x2859cf;let _0x4e4b46=createLookAtMatrix(this[_0x542547(0x458)][_0x542547(0x27c)],this[_0x542547(0x458)]['target'],this[_0x542547(0x458)]['up']),_0x17a915=this[_0x542547(0x20a)](),_0x58c7c1=multiplyMatrices(_0x17a915,_0x4e4b46);return{'view':_0x4e4b46,'projection':_0x17a915,'viewProjection':_0x58c7c1,'inverseViewProjection':invertMatrix(_0x58c7c1)};}['setState'](_0x2cf8d2){const _0x4850de=_0x2859cf;validateProjection(_0x2cf8d2[_0x4850de(0x30f)]),this[_0x4850de(0x458)]=cloneState(_0x2cf8d2);}[_0x2859cf(0x36e)](_0x1b7d9a){const _0x376e87=_0x2859cf;if(!(_0x1b7d9a>0x0)||!Number[_0x376e87(0x273)](_0x1b7d9a))throw Error(_0x376e87(0x349));this[_0x376e87(0x46b)]=_0x1b7d9a;}['setProjectionType'](_0xf16c07){const _0x165633=_0x2859cf;if(_0xf16c07===this[_0x165633(0x458)][_0x165633(0x30f)][_0x165633(0x427)])return;let _0x26ee14=Math['hypot'](...subtractVector(this[_0x165633(0x458)]['position'],this[_0x165633(0x458)][_0x165633(0x2a6)]));if(_0xf16c07===_0x165633(0x34a)){let _0x39836b=this['cameraState'][_0x165633(0x30f)],_0x1b29e0=_0x39836b[_0x165633(0x427)]===_0x165633(0x40e)?_0x39836b['fovYDegrees']*DEGREE_TO_RADIAN:0x2d*DEGREE_TO_RADIAN;this[_0x165633(0x458)][_0x165633(0x30f)]={'type':_0xf16c07,'height':0x2*_0x26ee14*Math[_0x165633(0x3fa)](_0x1b29e0/0x2),'near':_0x39836b[_0x165633(0x498)],'far':_0x39836b[_0x165633(0x465)]};return;}let _0x2f59e5=this[_0x165633(0x458)][_0x165633(0x30f)],_0x3c41ec=_0x2f59e5[_0x165633(0x427)]===_0x165633(0x34a)?_0x2f59e5[_0x165633(0x3de)]/(0x2*Math['tan'](0x2d*DEGREE_TO_RADIAN/0x2)):_0x26ee14,_0x5f1be9=normalizeVector(subtractVector(this[_0x165633(0x458)][_0x165633(0x27c)],this[_0x165633(0x458)][_0x165633(0x2a6)]));this[_0x165633(0x458)][_0x165633(0x27c)]=addVector(this[_0x165633(0x458)][_0x165633(0x2a6)],scaleVector(_0x5f1be9,_0x3c41ec)),this[_0x165633(0x458)][_0x165633(0x30f)]={'type':_0xf16c07,'fovYDegrees':0x2d,'near':_0x2f59e5[_0x165633(0x498)],'far':_0x2f59e5[_0x165633(0x465)]};}['orbit'](_0x552495,_0x48ada0){const _0x8cfa73=_0x2859cf;let _0x1801c3=subtractVector(this[_0x8cfa73(0x458)][_0x8cfa73(0x27c)],this['cameraState'][_0x8cfa73(0x2a6)]),_0x2f41e0=Math[_0x8cfa73(0x348)](..._0x1801c3);if(_0x2f41e0===0x0)return;let _0x1e5298=Math[_0x8cfa73(0x37c)](_0x1801c3[0x0],_0x1801c3[0x2])-_0x552495*this['rotateSpeed'],_0x56b7a9=clamp$1(Math['asin'](_0x1801c3[0x1]/_0x2f41e0)+_0x48ada0*this['rotateSpeed'],this[_0x8cfa73(0x35f)],this[_0x8cfa73(0x32b)]),_0x432fe7=Math['cos'](_0x56b7a9)*_0x2f41e0;this['cameraState']['position']=addVector(this[_0x8cfa73(0x458)][_0x8cfa73(0x2a6)],[Math['sin'](_0x1e5298)*_0x432fe7,Math[_0x8cfa73(0x266)](_0x56b7a9)*_0x2f41e0,Math[_0x8cfa73(0x1bd)](_0x1e5298)*_0x432fe7]);}['pan'](_0x1a0285,_0x548462,_0x434ea7){const _0x4dc897=_0x2859cf;if(!(_0x434ea7>0x0))return;let _0x421053=normalizeVector(subtractVector(this[_0x4dc897(0x458)][_0x4dc897(0x2a6)],this[_0x4dc897(0x458)][_0x4dc897(0x27c)])),_0x5e585a=normalizeVector(crossVector(_0x421053,this[_0x4dc897(0x458)]['up'])),_0x52a9ab=normalizeVector(crossVector(_0x5e585a,_0x421053)),_0x5b82c2=Math[_0x4dc897(0x348)](...subtractVector(this[_0x4dc897(0x458)][_0x4dc897(0x27c)],this[_0x4dc897(0x458)]['target'])),_0x56fa8d=(this[_0x4dc897(0x458)][_0x4dc897(0x30f)][_0x4dc897(0x427)]===_0x4dc897(0x34a)?this[_0x4dc897(0x458)][_0x4dc897(0x30f)][_0x4dc897(0x3de)]:0x2*_0x5b82c2*Math[_0x4dc897(0x3fa)](this[_0x4dc897(0x458)][_0x4dc897(0x30f)][_0x4dc897(0x3f2)]*DEGREE_TO_RADIAN/0x2))/_0x434ea7*this[_0x4dc897(0x28a)],_0x4af541=addVector(scaleVector(_0x5e585a,-_0x1a0285*_0x56fa8d),scaleVector(_0x52a9ab,_0x548462*_0x56fa8d));this[_0x4dc897(0x458)][_0x4dc897(0x27c)]=addVector(this['cameraState'][_0x4dc897(0x27c)],_0x4af541),this[_0x4dc897(0x458)][_0x4dc897(0x2a6)]=addVector(this['cameraState']['target'],_0x4af541);}[_0x2859cf(0x246)](_0x1ce714){const _0x1831cf=_0x2859cf;let _0x5ece5a=Math[_0x1831cf(0x2db)](_0x1ce714*this[_0x1831cf(0x492)]);if(this[_0x1831cf(0x458)][_0x1831cf(0x30f)][_0x1831cf(0x427)]==='orthographic'){this[_0x1831cf(0x458)][_0x1831cf(0x30f)]={...this[_0x1831cf(0x458)][_0x1831cf(0x30f)],'height':Math[_0x1831cf(0x284)](this[_0x1831cf(0x1c9)],this['cameraState'][_0x1831cf(0x30f)][_0x1831cf(0x3de)]*_0x5ece5a)};return;}let _0x331690=subtractVector(this[_0x1831cf(0x458)]['position'],this[_0x1831cf(0x458)][_0x1831cf(0x2a6)]),_0x52a7bd=clamp$1(Math[_0x1831cf(0x348)](..._0x331690)*_0x5ece5a,this[_0x1831cf(0x1c9)],this['maximumDistance']);this[_0x1831cf(0x458)][_0x1831cf(0x27c)]=addVector(this[_0x1831cf(0x458)][_0x1831cf(0x2a6)],scaleVector(normalizeVector(_0x331690),_0x52a7bd));}[_0x2859cf(0x20a)](){const _0x4a40c4=_0x2859cf;let _0x2e5802=this[_0x4a40c4(0x458)][_0x4a40c4(0x30f)];return _0x2e5802[_0x4a40c4(0x427)]===_0x4a40c4(0x40e)?createPerspectiveMatrix(_0x2e5802['fovYDegrees']*DEGREE_TO_RADIAN,this[_0x4a40c4(0x46b)],_0x2e5802[_0x4a40c4(0x498)],_0x2e5802[_0x4a40c4(0x465)]):createOrthographicMatrix(_0x2e5802[_0x4a40c4(0x3de)],this['aspect'],_0x2e5802[_0x4a40c4(0x498)],_0x2e5802[_0x4a40c4(0x465)]);}};const WGS84_SEMI_MAJOR_AXIS_METERS=0x615299,WGS84_SEMI_MINOR_AXIS_METERS=WGS84_SEMI_MAJOR_AXIS_METERS*(0x1-0x1/298.257223563),WGS84_FIRST_ECCENTRICITY_SQUARED=0x1-WGS84_SEMI_MINOR_AXIS_METERS**0x2/WGS84_SEMI_MAJOR_AXIS_METERS**0x2,degreesToRadians=_0x59bdd2=>_0x59bdd2*Math['PI']/0xb4,geodeticToEcef=(_0x446b92,_0x52279a,_0x4bfa17)=>{const _0x4e86cc=_0x2859cf;let _0x22579e=Math[_0x4e86cc(0x266)](_0x52279a),_0x3f5af5=Math[_0x4e86cc(0x1bd)](_0x52279a),_0x542079=Math[_0x4e86cc(0x266)](_0x446b92),_0x37eeb2=Math['cos'](_0x446b92),_0x11aaa2=WGS84_SEMI_MAJOR_AXIS_METERS/Math[_0x4e86cc(0x3e2)](0x1-WGS84_FIRST_ECCENTRICITY_SQUARED*_0x22579e*_0x22579e);return[(_0x11aaa2+_0x4bfa17)*_0x3f5af5*_0x37eeb2,(_0x11aaa2+_0x4bfa17)*_0x3f5af5*_0x542079,(_0x11aaa2*(0x1-WGS84_FIRST_ECCENTRICITY_SQUARED)+_0x4bfa17)*_0x22579e];},validateAxisSpan=(_0x50e338,_0xf2f756,_0x590924)=>{const _0x299f48=_0x2859cf;if(!Number[_0x299f48(0x273)](_0x50e338)||!Number[_0x299f48(0x273)](_0xf2f756)||_0x50e338===_0xf2f756)throw Error(_0x590924+_0x299f48(0x324)+_0x590924+_0x299f48(0x41a));},createGeographicVolumeLayout=(_0x1dec2e,_0x502a64=0x1)=>{const _0x2038a9=_0x2859cf;let _0x15cebe=degreesToRadians(_0x1dec2e[_0x2038a9(0x1bf)]['start']),_0x238c0e=degreesToRadians(_0x1dec2e['xAxis'][_0x2038a9(0x317)]),_0x2dd93b=degreesToRadians(_0x1dec2e[_0x2038a9(0x203)]['start']),_0x12c797=degreesToRadians(_0x1dec2e['zAxis'][_0x2038a9(0x317)]);validateAxisSpan(_0x15cebe,_0x238c0e,'Longitude\x20/\x20经度'),validateAxisSpan(_0x2dd93b,_0x12c797,'Latitude\x20/\x20纬度');let _0x2832d1=_0x1dec2e[_0x2038a9(0x1de)][_0x2038a9(0x1df)],_0xe0f9c2=_0x1dec2e[_0x2038a9(0x1de)][_0x2038a9(0x317)];if(validateAxisSpan(_0x2832d1,_0xe0f9c2,_0x2038a9(0x271)),!(_0x502a64>0x0)||!Number[_0x2038a9(0x273)](_0x502a64))throw Error(_0x2038a9(0x257));let _0x3740cc=_0x2832d1+(_0xe0f9c2-_0x2832d1)*_0x502a64,_0x25ea4e=(_0x15cebe+_0x238c0e)/0x2,_0x3df254=(_0x2dd93b+_0x12c797)/0x2,_0x597289=geodeticToEcef(_0x25ea4e,_0x3df254,0x0),_0x38c5af=Math['abs'](_0x238c0e-_0x15cebe)*WGS84_SEMI_MAJOR_AXIS_METERS*Math['max'](0.01,Math[_0x2038a9(0x1bd)](_0x3df254)),_0x25dfbf=Math['abs'](_0x12c797-_0x2dd93b)*WGS84_SEMI_MAJOR_AXIS_METERS,_0x35c6f9=Math[_0x2038a9(0x284)](_0x38c5af,_0x25dfbf);if(!(_0x35c6f9>0x0)||!Number[_0x2038a9(0x273)](_0x35c6f9))throw Error('Geographic\x20volume\x20normalization\x20must\x20be\x20a\x20positive\x20finite\x20distance.\x20地理体积归一化尺度必须是正有限距离。');let _0x1960eb=[0x1/0x0,0x1/0x0,0x1/0x0],_0x40ced6=[-0x1/0x0,-0x1/0x0,-0x1/0x0];for(let _0x828d0a=0x0;_0x828d0a<=0x8;_0x828d0a+=0x1){let _0x4d857a=_0x2dd93b+(_0x12c797-_0x2dd93b)*_0x828d0a/0x8;for(let _0x4d237f=0x0;_0x4d237f<=0x8;_0x4d237f+=0x1){let _0x4a3b61=_0x15cebe+(_0x238c0e-_0x15cebe)*_0x4d237f/0x8;for(let _0x290306 of[_0x2832d1,_0x3740cc]){let _0x4e8162=geodeticToEcef(_0x4a3b61,_0x4d857a,_0x290306);for(let _0x5630b4=0x0;_0x5630b4<0x3;_0x5630b4+=0x1){let _0x343828=(_0x4e8162[_0x5630b4]-_0x597289[_0x5630b4])/_0x35c6f9;_0x1960eb[_0x5630b4]=Math[_0x2038a9(0x28e)](_0x1960eb[_0x5630b4],_0x343828),_0x40ced6[_0x5630b4]=Math[_0x2038a9(0x284)](_0x40ced6[_0x5630b4],_0x343828);}}}}let _0x50320e=_0x40ced6['map']((_0x1b3256,_0x1b4fe9)=>_0x1b3256-_0x1960eb[_0x1b4fe9]);if(_0x50320e[_0x2038a9(0x1b7)](_0x4bd049=>!(_0x4bd049>0x0)||!Number['isFinite'](_0x4bd049)))throw Error('Geographic\x20volume\x20proxy\x20bounds\x20are\x20invalid.\x20地理体积代理范围无效。');return{'centerEcef':_0x597289,'normalizationMeters':_0x35c6f9,'proxyModelMatrix':[_0x50320e[0x0],0x0,0x0,0x0,0x0,_0x50320e[0x1],0x0,0x0,0x0,0x0,_0x50320e[0x2],0x0,_0x1960eb[0x0],_0x1960eb[0x1],_0x1960eb[0x2],0x1],'transform':{'mode':_0x2038a9(0x27b),'centerEcefScaled':[_0x597289[0x0]/_0x35c6f9,_0x597289[0x1]/_0x35c6f9,_0x597289[0x2]/_0x35c6f9],'semiMajorAxisScaled':WGS84_SEMI_MAJOR_AXIS_METERS/_0x35c6f9,'semiMinorAxisScaled':WGS84_SEMI_MINOR_AXIS_METERS/_0x35c6f9,'longitudeRadians':[_0x15cebe,_0x238c0e],'latitudeRadians':[_0x2dd93b,_0x12c797],'heightScaled':[_0x2832d1/_0x35c6f9,_0x3740cc/_0x35c6f9]}};},ecefToGeographicVolumeLocal=(_0x1b2741,_0x389203)=>[(_0x1b2741[0x0]-_0x389203[_0x2859cf(0x264)][0x0])/_0x389203[_0x2859cf(0x220)],(_0x1b2741[0x1]-_0x389203['centerEcef'][0x1])/_0x389203[_0x2859cf(0x220)],(_0x1b2741[0x2]-_0x389203['centerEcef'][0x2])/_0x389203[_0x2859cf(0x220)]],isMissingValue=(_0x505c3b,_0x5ce37c)=>Number[_0x2859cf(0x3db)](_0x505c3b)||_0x5ce37c!==void 0x0&&_0x505c3b===_0x5ce37c,axisValueToNormalized=(_0x3541d8,_0x1615ed)=>_0x3541d8[_0x2859cf(0x1df)]===_0x3541d8['end']?0x0:(_0x1615ed-_0x3541d8[_0x2859cf(0x1df)])/(_0x3541d8[_0x2859cf(0x317)]-_0x3541d8[_0x2859cf(0x1df)]),validateProfile=_0x46e30d=>{const _0x11b21b=_0x2859cf;if(!_0x46e30d['id'])throw Error(_0x11b21b(0x2e3));if(_0x46e30d[_0x11b21b(0x40c)][_0x11b21b(0x326)]<0x4||_0x46e30d[_0x11b21b(0x40c)][_0x11b21b(0x326)]%0x2!=0x0)throw Error(_0x11b21b(0x303)+_0x46e30d['id']+'\x20的\x20path\x20必须包含至少两个\x20[x,\x20z]\x20点。');if(_0x46e30d[_0x11b21b(0x45e)]['length']<0x2)throw Error('路线剖面\x20'+_0x46e30d['id']+_0x11b21b(0x353));let _0x4a633a=_0x46e30d[_0x11b21b(0x40c)][_0x11b21b(0x326)]/0x2;if(_0x46e30d[_0x11b21b(0x1cd)][_0x11b21b(0x326)]!==_0x4a633a*_0x46e30d[_0x11b21b(0x45e)][_0x11b21b(0x326)])throw Error(_0x11b21b(0x303)+_0x46e30d['id']+_0x11b21b(0x216));if(_0x46e30d['opacity']!==void 0x0&&(!(_0x46e30d['opacity']>=0x0&&_0x46e30d[_0x11b21b(0x446)]<=0x1)||!Number[_0x11b21b(0x273)](_0x46e30d[_0x11b21b(0x446)])))throw Error(_0x11b21b(0x303)+_0x46e30d['id']+_0x11b21b(0x365));for(let _0x517b6a of _0x46e30d[_0x11b21b(0x40c)])if(!Number['isFinite'](_0x517b6a))throw Error(_0x11b21b(0x303)+_0x46e30d['id']+_0x11b21b(0x29b));for(let _0x3743e1 of _0x46e30d[_0x11b21b(0x45e)])if(!Number[_0x11b21b(0x273)](_0x3743e1))throw Error(_0x11b21b(0x303)+_0x46e30d['id']+'\x20的\x20heights\x20包含非有限高度。');return _0x4a633a;},createPositions=(_0x3d3556,_0x318fea,_0x4cb6aa)=>{const _0x1e8720=_0x2859cf;let _0x45733b=new Float32Array(_0x318fea*_0x3d3556[_0x1e8720(0x45e)][_0x1e8720(0x326)]*0x3);for(let _0x19c8a7=0x0;_0x19c8a7<_0x3d3556[_0x1e8720(0x45e)][_0x1e8720(0x326)];_0x19c8a7+=0x1)for(let _0x51c5e0=0x0;_0x51c5e0<_0x318fea;_0x51c5e0+=0x1){let _0xe81590=(_0x19c8a7*_0x318fea+_0x51c5e0)*0x3;_0x45733b[_0xe81590]=axisValueToNormalized(_0x4cb6aa['xAxis'],_0x3d3556['path'][_0x51c5e0*0x2]),_0x45733b[_0xe81590+0x1]=axisValueToNormalized(_0x4cb6aa[_0x1e8720(0x1de)],_0x3d3556[_0x1e8720(0x45e)][_0x19c8a7]),_0x45733b[_0xe81590+0x2]=axisValueToNormalized(_0x4cb6aa[_0x1e8720(0x203)],_0x3d3556[_0x1e8720(0x40c)][_0x51c5e0*0x2+0x1]);}return _0x45733b;},createValues=_0x3b1550=>{const _0xb0cddd=_0x2859cf;let _0x363943=new Float32Array(_0x3b1550[_0xb0cddd(0x1cd)]['length']);for(let _0x4dee8c=0x0;_0x4dee8c<_0x3b1550[_0xb0cddd(0x1cd)][_0xb0cddd(0x326)];_0x4dee8c+=0x1){let _0x11c3bb=_0x3b1550[_0xb0cddd(0x1cd)][_0x4dee8c];_0x363943[_0x4dee8c]=isMissingValue(_0x11c3bb,_0x3b1550[_0xb0cddd(0x219)])?NaN:_0x11c3bb;}return _0x363943;},createIndices=(_0x58617f,_0x3c78f3)=>{let _0x1d6a3e=new Uint32Array((_0x58617f-0x1)*(_0x3c78f3-0x1)*0x6),_0x4edaa4=0x0;for(let _0x59b93f=0x0;_0x59b93f<_0x3c78f3-0x1;_0x59b93f+=0x1)for(let _0x4712df=0x0;_0x4712df<_0x58617f-0x1;_0x4712df+=0x1){let _0x223c58=_0x59b93f*_0x58617f+_0x4712df,_0x513f00=_0x223c58+0x1,_0x5423b8=_0x223c58+_0x58617f,_0x4aa395=_0x5423b8+0x1;_0x1d6a3e[_0x4edaa4]=_0x223c58,_0x1d6a3e[_0x4edaa4+0x1]=_0x513f00,_0x1d6a3e[_0x4edaa4+0x2]=_0x5423b8,_0x1d6a3e[_0x4edaa4+0x3]=_0x5423b8,_0x1d6a3e[_0x4edaa4+0x4]=_0x513f00,_0x1d6a3e[_0x4edaa4+0x5]=_0x4aa395,_0x4edaa4+=0x6;}return _0x1d6a3e;},buildVolumeRouteProfileMesh=(_0x584471,_0x554236)=>{const _0x1c6254=_0x2859cf;let _0x138c1c=validateProfile(_0x584471);return{'id':_0x584471['id'],'positions':createPositions(_0x584471,_0x138c1c,_0x554236),'values':createValues(_0x584471),'indices':createIndices(_0x138c1c,_0x584471['heights'][_0x1c6254(0x326)]),'opacity':_0x584471[_0x1c6254(0x446)]??0x1,'depthMode':_0x584471[_0x1c6254(0x341)]??_0x1c6254(0x3cc),'revision':_0x584471[_0x1c6254(0x441)]};};var volumeRaymarch_default=_0x2859cf(0x2a8),sceneMesh_default='struct\x20SceneParams\x20{\x0a\x20\x20\x20\x20viewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseViewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20modelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseModelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20cameraPosition:\x20vec4f,\x0a\x20\x20\x20\x20viewport:\x20vec4f,\x0a\x20\x20\x20\x20clipMinimum:\x20vec4f,\x0a\x20\x20\x20\x20clipMaximum:\x20vec4f,\x0a\x20\x20\x20\x20render:\x20vec4f,\x0a\x20\x20\x20\x20transfer:\x20vec4f,\x0a\x20\x20\x20\x20geographic0:\x20vec4f,\x0a\x20\x20\x20\x20geographic1:\x20vec4f,\x0a\x20\x20\x20\x20geographic2:\x20vec4f,\x0a}\x0a\x0astruct\x20VertexOutput\x20{\x0a\x20\x20\x20\x20@builtin(position)\x20position:\x20vec4f,\x0a\x20\x20\x20\x20@location(0)\x20color:\x20vec4f,\x0a}\x0a\x0a@group(0)\x20@binding(0)\x20var<uniform>\x20scene:\x20SceneParams;\x0a\x0afn\x20transformScenePosition(position:\x20vec3f)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20scene.viewProjection\x20*\x20scene.modelMatrix\x20*\x20vec4f(position,\x201.0);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20longitude\x20=\x20mix(scene.geographic1.z,\x20scene.geographic1.w,\x20position.x);\x0a\x20\x20\x20\x20let\x20latitude\x20=\x20mix(scene.geographic2.x,\x20scene.geographic2.y,\x20position.z);\x0a\x20\x20\x20\x20let\x20height\x20=\x20mix(scene.geographic2.z,\x20scene.geographic2.w,\x20position.y);\x0a\x20\x20\x20\x20let\x20latitudeSin\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20let\x20latitudeCos\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20let\x20semiMajor\x20=\x20scene.geographic1.x;\x0a\x20\x20\x20\x20let\x20semiMinor\x20=\x20scene.geographic1.y;\x0a\x20\x20\x20\x20let\x20eccentricitySquared\x20=\x201.0\x20-\x20semiMinor\x20*\x20semiMinor\x20/\x20(semiMajor\x20*\x20semiMajor);\x0a\x20\x20\x20\x20let\x20primeVerticalRadius\x20=\x20semiMajor\x20/\x20sqrt(1.0\x20-\x20eccentricitySquared\x20*\x20latitudeSin\x20*\x20latitudeSin);\x0a\x20\x20\x20\x20let\x20ecef\x20=\x20vec3f(\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20cos(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20sin(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20*\x20(1.0\x20-\x20eccentricitySquared)\x20+\x20height)\x20*\x20latitudeSin\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20return\x20scene.viewProjection\x20*\x20vec4f(ecef\x20-\x20scene.geographic0.yzw,\x201.0);\x0a}\x0a\x0a@vertex\x0afn\x20vertexMain(@location(0)\x20position:\x20vec3f,\x20@location(1)\x20color:\x20vec4f)\x20->\x20VertexOutput\x20{\x0a\x20\x20\x20\x20return\x20VertexOutput(transformScenePosition(position),\x20color);\x0a}\x0a\x0a@fragment\x0afn\x20fragmentMain(input:\x20VertexOutput)\x20->\x20@location(0)\x20vec4f\x20{\x0a\x20\x20\x20\x20return\x20vec4f(input.color.rgb\x20*\x20input.color.a,\x20input.color.a);\x0a}\x0a',volumeSlice_default='struct\x20SceneParams\x20{\x0a\x20\x20\x20\x20viewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseViewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20modelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseModelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20cameraPosition:\x20vec4f,\x0a\x20\x20\x20\x20viewport:\x20vec4f,\x0a\x20\x20\x20\x20clipMinimum:\x20vec4f,\x0a\x20\x20\x20\x20clipMaximum:\x20vec4f,\x0a\x20\x20\x20\x20render:\x20vec4f,\x0a\x20\x20\x20\x20transfer:\x20vec4f,\x0a\x20\x20\x20\x20geographic0:\x20vec4f,\x0a\x20\x20\x20\x20geographic1:\x20vec4f,\x0a\x20\x20\x20\x20geographic2:\x20vec4f,\x0a}\x0a\x0astruct\x20VolumeParams\x20{\x0a\x20\x20\x20\x20dimensions:\x20vec4u,\x0a\x20\x20\x20\x20brickInterior:\x20vec4u,\x0a\x20\x20\x20\x20brickCount:\x20vec4u,\x0a\x20\x20\x20\x20atlasSlots:\x20vec4u,\x0a\x20\x20\x20\x20atlasDimensions:\x20vec4u,\x0a\x20\x20\x20\x20valueMeta:\x20vec4f,\x0a}\x0a\x0astruct\x20PageTable\x20{\x20values:\x20array<vec4u>\x20}\x0astruct\x20FloatValues\x20{\x20values:\x20array<f32>\x20}\x0astruct\x20Colors\x20{\x20values:\x20array<vec4f>\x20}\x0astruct\x20SliceParams\x20{\x0a\x20\x20\x20\x20data:\x20vec4f,\x0a\x20\x20\x20\x20plateColor:\x20vec4f,\x0a}\x0astruct\x20VolumeSample\x20{\x20value:\x20f32,\x20valid:\x20bool\x20}\x0a\x0astruct\x20SliceVertexOutput\x20{\x0a\x20\x20\x20\x20@builtin(position)\x20position:\x20vec4f,\x0a\x20\x20\x20\x20@location(0)\x20modelPosition:\x20vec3f,\x0a}\x0a\x0a@group(0)\x20@binding(0)\x20var<uniform>\x20scene:\x20SceneParams;\x0a@group(1)\x20@binding(0)\x20var\x20volumeAtlas0:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(1)\x20var\x20volumeAtlas1:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(2)\x20var\x20volumeAtlas2:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(3)\x20var\x20volumeAtlas3:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(4)\x20var\x20volumeAtlas4:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(5)\x20var\x20volumeAtlas5:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(6)\x20var\x20volumeAtlas6:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(7)\x20var\x20volumeAtlas7:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(8)\x20var<storage,\x20read>\x20pageTable:\x20PageTable;\x0a@group(1)\x20@binding(9)\x20var<uniform>\x20volume:\x20VolumeParams;\x0a@group(2)\x20@binding(0)\x20var<storage,\x20read>\x20colorStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(1)\x20var<storage,\x20read>\x20colorStopColors:\x20Colors;\x0a@group(2)\x20@binding(2)\x20var<storage,\x20read>\x20opacityStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(3)\x20var<storage,\x20read>\x20opacityStopAlphas:\x20FloatValues;\x0a@group(3)\x20@binding(0)\x20var<uniform>\x20slice:\x20SliceParams;\x0a\x0afn\x20invalidVolumeSample()\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(0.0,\x20false);\x0a}\x0a\x0afn\x20validVolumeSample(value:\x20f32)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(value,\x20true);\x0a}\x0a\x0afn\x20getPageIndex(brick:\x20vec3u)\x20->\x20u32\x20{\x0a\x20\x20\x20\x20return\x20brick.x\x20+\x20brick.y\x20*\x20volume.brickCount.x\x20+\x20brick.z\x20*\x20volume.brickCount.x\x20*\x20volume.brickCount.y;\x0a}\x0a\x0afn\x20getSlotCoordinate(slotIndex:\x20u32)\x20->\x20vec3u\x20{\x0a\x20\x20\x20\x20let\x20layerSize\x20=\x20volume.atlasSlots.x\x20*\x20volume.atlasSlots.y;\x0a\x20\x20\x20\x20let\x20z\x20=\x20slotIndex\x20/\x20layerSize;\x0a\x20\x20\x20\x20let\x20remainder\x20=\x20slotIndex\x20-\x20z\x20*\x20layerSize;\x0a\x20\x20\x20\x20let\x20y\x20=\x20remainder\x20/\x20volume.atlasSlots.x;\x0a\x20\x20\x20\x20return\x20vec3u(remainder\x20-\x20y\x20*\x20volume.atlasSlots.x,\x20y,\x20z);\x0a}\x0a\x0afn\x20loadAtlasValue(atlasIndex:\x20u32,\x20coordinate:\x20vec3i)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x200u)\x20{\x20return\x20textureLoad(volumeAtlas0,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x201u)\x20{\x20return\x20textureLoad(volumeAtlas1,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x202u)\x20{\x20return\x20textureLoad(volumeAtlas2,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x203u)\x20{\x20return\x20textureLoad(volumeAtlas3,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x204u)\x20{\x20return\x20textureLoad(volumeAtlas4,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x205u)\x20{\x20return\x20textureLoad(volumeAtlas5,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x206u)\x20{\x20return\x20textureLoad(volumeAtlas6,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20return\x20textureLoad(volumeAtlas7,\x20coordinate,\x200).r;\x0a}\x0a\x0afn\x20loadAtlasVoxel(voxel:\x20vec3i,\x20owningBrick:\x20vec3u)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20page\x20=\x20pageTable.values[getPageIndex(owningBrick)];\x0a\x0a\x20\x20\x20\x20if\x20(page.x\x20==\x200u\x20||\x20page.z\x20==\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20physicalBrick\x20=\x20volume.brickInterior.xyz\x20+\x20vec3u(2u);\x0a\x20\x20\x20\x20let\x20slot\x20=\x20getSlotCoordinate(page.x\x20-\x201u);\x0a\x20\x20\x20\x20let\x20local\x20=\x20voxel\x20-\x20vec3i(owningBrick\x20*\x20volume.brickInterior.xyz)\x20+\x20vec3i(1);\x0a\x20\x20\x20\x20let\x20value\x20=\x20loadAtlasValue(page.w,\x20vec3i(slot\x20*\x20physicalBrick)\x20+\x20local);\x0a\x0a\x20\x20\x20\x20if\x20(value\x20!=\x20value\x20||\x20(volume.valueMeta.y\x20>\x200.5\x20&&\x20value\x20==\x20volume.valueMeta.x))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20validVolumeSample(value);\x0a}\x0a\x0afn\x20sampleVolume(modelPosition:\x20vec3f)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(modelPosition,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20normalized\x20*\x20vec3f(volume.dimensions.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20baseVoxel\x20=\x20vec3i(floor(voxel));\x0a\x20\x20\x20\x20let\x20nextVoxel\x20=\x20min(baseVoxel\x20+\x20vec3i(1),\x20vec3i(volume.dimensions.xyz\x20-\x20vec3u(1u)));\x0a\x20\x20\x20\x20let\x20fraction\x20=\x20voxel\x20-\x20vec3f(baseVoxel);\x0a\x20\x20\x20\x20let\x20owningBrick\x20=\x20min(vec3u(baseVoxel)\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20c000\x20=\x20loadAtlasVoxel(baseVoxel,\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c100\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c010\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c110\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c001\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c101\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c011\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c111\x20=\x20loadAtlasVoxel(nextVoxel,\x20owningBrick);\x0a\x0a\x20\x20\x20\x20if\x20(!c000.valid\x20||\x20!c100.valid\x20||\x20!c010.valid\x20||\x20!c110.valid\x20||\x20!c001.valid\x20||\x20!c101.valid\x20||\x20!c011.valid\x20||\x20!c111.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20bottom\x20=\x20mix(mix(c000.value,\x20c100.value,\x20fraction.x),\x20mix(c010.value,\x20c110.value,\x20fraction.x),\x20fraction.y);\x0a\x20\x20\x20\x20let\x20top\x20=\x20mix(mix(c001.value,\x20c101.value,\x20fraction.x),\x20mix(c011.value,\x20c111.value,\x20fraction.x),\x20fraction.y);\x0a\x20\x20\x20\x20return\x20validVolumeSample(mix(bottom,\x20top,\x20fraction.z));\x0a}\x0a\x0afn\x20sampleColor(value:\x20f32)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.x);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20colorStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20colorStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20colorStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(colorStopColors.values[index],\x20colorStopColors.values[index\x20+\x201u],\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0));\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20colorStopColors.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20sampleOpacity(value:\x20f32)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.y);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20opacityStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20opacityStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20opacityStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(opacityStopAlphas.values[index],\x20opacityStopAlphas.values[index\x20+\x201u],\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0));\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20opacityStopAlphas.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20getPlanePosition(axis:\x20u32,\x20planePosition:\x20f32,\x20corner:\x20vec2f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(axis\x20==\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec3f(planePosition,\x20corner.x,\x20corner.y);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(axis\x20==\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec3f(corner.x,\x20planePosition,\x20corner.y);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20vec3f(corner.x,\x20corner.y,\x20planePosition);\x0a}\x0a\x0afn\x20getCorner(vertexIndex:\x20u32)\x20->\x20vec2f\x20{\x0a\x20\x20\x20\x20let\x20corners\x20=\x20array<vec2f,\x206>(\x0a\x20\x20\x20\x20\x20\x20\x20\x20vec2f(0.0,\x200.0),\x20vec2f(1.0,\x200.0),\x20vec2f(0.0,\x201.0),\x0a\x20\x20\x20\x20\x20\x20\x20\x20vec2f(0.0,\x201.0),\x20vec2f(1.0,\x200.0),\x20vec2f(1.0,\x201.0)\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20return\x20corners[vertexIndex];\x0a}\x0a\x0afn\x20getTessellatedCorner(vertexIndex:\x20u32)\x20->\x20vec2f\x20{\x0a\x20\x20\x20\x20let\x20gridSize\x20=\x2032u;\x0a\x20\x20\x20\x20let\x20cellIndex\x20=\x20vertexIndex\x20/\x206u;\x0a\x20\x20\x20\x20let\x20cellX\x20=\x20cellIndex\x20%\x20gridSize;\x0a\x20\x20\x20\x20let\x20cellY\x20=\x20cellIndex\x20/\x20gridSize;\x0a\x20\x20\x20\x20return\x20(vec2f(f32(cellX),\x20f32(cellY))\x20+\x20getCorner(vertexIndex\x20%\x206u))\x20/\x20f32(gridSize);\x0a}\x0a\x0afn\x20volumeToWorld(position:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20transformed\x20=\x20scene.modelMatrix\x20*\x20vec4f(position,\x201.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20transformed.xyz\x20/\x20transformed.w;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20longitude\x20=\x20mix(scene.geographic1.z,\x20scene.geographic1.w,\x20position.x);\x0a\x20\x20\x20\x20let\x20latitude\x20=\x20mix(scene.geographic2.x,\x20scene.geographic2.y,\x20position.z);\x0a\x20\x20\x20\x20let\x20height\x20=\x20mix(scene.geographic2.z,\x20scene.geographic2.w,\x20position.y);\x0a\x20\x20\x20\x20let\x20latitudeSin\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20let\x20latitudeCos\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20let\x20semiMajor\x20=\x20scene.geographic1.x;\x0a\x20\x20\x20\x20let\x20semiMinor\x20=\x20scene.geographic1.y;\x0a\x20\x20\x20\x20let\x20eccentricitySquared\x20=\x201.0\x20-\x20semiMinor\x20*\x20semiMinor\x20/\x20(semiMajor\x20*\x20semiMajor);\x0a\x20\x20\x20\x20let\x20primeVerticalRadius\x20=\x20semiMajor\x20/\x20sqrt(1.0\x20-\x20eccentricitySquared\x20*\x20latitudeSin\x20*\x20latitudeSin);\x0a\x20\x20\x20\x20let\x20ecef\x20=\x20vec3f(\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20cos(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20sin(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20*\x20(1.0\x20-\x20eccentricitySquared)\x20+\x20height)\x20*\x20latitudeSin\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20return\x20ecef\x20-\x20scene.geographic0.yzw;\x0a}\x0a\x0a@vertex\x0afn\x20vertexMain(@builtin(vertex_index)\x20vertexIndex:\x20u32)\x20->\x20SliceVertexOutput\x20{\x0a\x20\x20\x20\x20let\x20modelPosition\x20=\x20getPlanePosition(u32(slice.data.x),\x20slice.data.y,\x20getTessellatedCorner(vertexIndex));\x0a\x20\x20\x20\x20let\x20clipPosition\x20=\x20scene.viewProjection\x20*\x20vec4f(volumeToWorld(modelPosition),\x201.0);\x0a\x20\x20\x20\x20return\x20SliceVertexOutput(clipPosition,\x20modelPosition);\x0a}\x0a\x0a@fragment\x0afn\x20fragmentMain(input:\x20SliceVertexOutput)\x20->\x20@location(0)\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20sample\x20=\x20sampleVolume(input.modelPosition);\x0a\x20\x20\x20\x20let\x20plateAlpha\x20=\x20slice.plateColor.a;\x0a\x20\x20\x20\x20let\x20platePremultiplied\x20=\x20slice.plateColor.rgb\x20*\x20plateAlpha;\x0a\x0a\x20\x20\x20\x20if\x20(!sample.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plateAlpha\x20<=\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20discard;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec4f(platePremultiplied,\x20plateAlpha);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20color\x20=\x20sampleColor(sample.value);\x0a\x20\x20\x20\x20let\x20alpha\x20=\x20color.a\x20*\x20sampleOpacity(sample.value)\x20*\x20slice.data.z;\x0a\x20\x20\x20\x20//\x20彩色数据覆盖白色透明底板,二者在同一\x20fragment\x20中合成以避免重合面的深度冲突。\x0a\x20\x20\x20\x20//\x20Colored\x20data\x20is\x20composited\x20over\x20the\x20translucent\x20white\x20plate\x20in\x20one\x20fragment\x20to\x20avoid\x20coplanar\x20depth\x20conflicts.\x0a\x20\x20\x20\x20let\x20outputAlpha\x20=\x20alpha\x20+\x20plateAlpha\x20*\x20(1.0\x20-\x20alpha);\x0a\x20\x20\x20\x20let\x20outputColor\x20=\x20color.rgb\x20*\x20alpha\x20+\x20platePremultiplied\x20*\x20(1.0\x20-\x20alpha);\x0a\x20\x20\x20\x20return\x20vec4f(outputColor,\x20outputAlpha);\x0a}\x0a';const validateMetadata=_0x19cbf9=>{const _0x5350a7=_0x2859cf;if([_0x19cbf9[_0x5350a7(0x1bf)]['count'],_0x19cbf9[_0x5350a7(0x1de)][_0x5350a7(0x251)],_0x19cbf9[_0x5350a7(0x203)][_0x5350a7(0x251)],_0x19cbf9[_0x5350a7(0x420)],_0x19cbf9[_0x5350a7(0x2c4)],_0x19cbf9[_0x5350a7(0x3d8)]][_0x5350a7(0x1b7)](_0x4c8c95=>!Number[_0x5350a7(0x2dd)](_0x4c8c95)||_0x4c8c95<=0x0))throw Error('WebGPU\x20volume\x20dimensions\x20must\x20be\x20positive\x20integers.\x20WebGPU\x20体积尺寸必须是正整数。');if(_0x19cbf9[_0x5350a7(0x2b1)]!==0x1)throw Error(_0x5350a7(0x1ee));},getBrickCount=_0x156038=>[Math[_0x2859cf(0x1b5)](_0x156038[_0x2859cf(0x1bf)]['count']/_0x156038[_0x2859cf(0x420)]),Math[_0x2859cf(0x1b5)](_0x156038[_0x2859cf(0x1de)]['count']/_0x156038['brickHeight']),Math['ceil'](_0x156038[_0x2859cf(0x203)][_0x2859cf(0x251)]/_0x156038[_0x2859cf(0x3d8)])],getLogicalBrickCoordinate=(_0x40c63f,_0x5f0268)=>{const _0x34138a=_0x2859cf;let _0x3906c7=_0x5f0268[0x0]*_0x5f0268[0x1],_0x19d112=Math[_0x34138a(0x49c)](_0x40c63f/_0x3906c7),_0xe9faaf=_0x40c63f-_0x19d112*_0x3906c7,_0x218b5c=Math[_0x34138a(0x49c)](_0xe9faaf/_0x5f0268[0x0]);return[_0xe9faaf-_0x218b5c*_0x5f0268[0x0],_0x218b5c,_0x19d112];},analyzeBrickOccupancy=(_0x3d83cc,_0x27ac7d,_0x2f2fe7)=>{const _0xbe3f3f=_0x2859cf;let _0x42dfc3=_0x27ac7d[_0xbe3f3f(0x420)]+0x2,_0x24b1c8=_0x27ac7d['brickHeight']+0x2,_0x2d21bd=getLogicalBrickCoordinate(_0x3d83cc[_0xbe3f3f(0x191)],_0x2f2fe7),_0xed7ed8=Math[_0xbe3f3f(0x28e)](_0x27ac7d[_0xbe3f3f(0x420)],_0x27ac7d[_0xbe3f3f(0x1bf)][_0xbe3f3f(0x251)]-_0x2d21bd[0x0]*_0x27ac7d['brickWidth']),_0x43c284=Math[_0xbe3f3f(0x28e)](_0x27ac7d[_0xbe3f3f(0x2c4)],_0x27ac7d[_0xbe3f3f(0x1de)][_0xbe3f3f(0x251)]-_0x2d21bd[0x1]*_0x27ac7d[_0xbe3f3f(0x2c4)]),_0x337a57=Math[_0xbe3f3f(0x28e)](_0x27ac7d[_0xbe3f3f(0x3d8)],_0x27ac7d[_0xbe3f3f(0x203)]['count']-_0x2d21bd[0x2]*_0x27ac7d[_0xbe3f3f(0x3d8)]);for(let _0x3ee7a8=0x0;_0x3ee7a8<_0x337a57;_0x3ee7a8+=0x1)for(let _0x24ed24=0x0;_0x24ed24<_0x43c284;_0x24ed24+=0x1){let _0x4180f6=((_0x3ee7a8+0x1)*_0x24b1c8+_0x24ed24+0x1)*_0x42dfc3+0x1;for(let _0x3c5c99=0x0;_0x3c5c99<_0xed7ed8;_0x3c5c99+=0x1){let _0x185f1c=_0x3d83cc[_0xbe3f3f(0x1cd)][_0x4180f6+_0x3c5c99];if(_0x185f1c===_0x185f1c&&(_0x27ac7d[_0xbe3f3f(0x219)]===void 0x0||_0x185f1c!==_0x27ac7d[_0xbe3f3f(0x219)]))return{'occupied':!0x0,'coreSampleCount':_0xed7ed8*_0x43c284*_0x337a57};}}return{'occupied':!0x1,'coreSampleCount':_0xed7ed8*_0x43c284*_0x337a57};},findAtlasLayout=(_0x411301,_0x43ad49,_0x5d434c,_0x238fb6,_0xff575a)=>{const _0x17b2a4=_0x2859cf;if(_0x411301<=0x0)return null;let _0x434afd=Math[_0x17b2a4(0x49c)](_0xff575a/_0x43ad49),_0x3da092=Math[_0x17b2a4(0x49c)](_0xff575a/_0x5d434c),_0x336635=Math[_0x17b2a4(0x49c)](_0xff575a/_0x238fb6),_0x315bf9=null;for(let _0x3b4b68=0x1;_0x3b4b68<=_0x434afd;_0x3b4b68+=0x1)for(let _0x4fc268=0x1;_0x4fc268<=_0x3da092;_0x4fc268+=0x1){let _0x1950c8=Math[_0x17b2a4(0x28e)](_0x336635,Math[_0x17b2a4(0x49c)](_0x411301/(_0x3b4b68*_0x4fc268))),_0x33ff07=_0x3b4b68*_0x4fc268*_0x1950c8;_0x1950c8<=0x0||_0x33ff07<=(_0x315bf9?.['slotCount']??0x0)||(_0x315bf9={'slotCountX':_0x3b4b68,'slotCountY':_0x4fc268,'slotCountZ':_0x1950c8,'slotCount':_0x33ff07,'textureCount':0x1,'capacity':_0x33ff07});}return _0x315bf9;},getSlotCoordinate=(_0x17a6ba,_0x3c977b)=>{const _0x33886c=_0x2859cf;let _0x30881a=_0x3c977b[_0x33886c(0x228)]*_0x3c977b['slotCountY'],_0x2cf997=Math['floor'](_0x17a6ba/_0x30881a),_0x402168=_0x17a6ba-_0x2cf997*_0x30881a,_0x3af104=Math[_0x33886c(0x49c)](_0x402168/_0x3c977b[_0x33886c(0x228)]);return[_0x402168-_0x3af104*_0x3c977b['slotCountX'],_0x3af104,_0x2cf997];},findLeastRecentlyUsed=(_0x20b745,_0x504ae9)=>{const _0x51e8c7=_0x2859cf;let _0x5aca14=null;for(let _0x3c4e78 of _0x20b745)_0x3c4e78[_0x51e8c7(0x285)]!==_0x504ae9&&(!_0x5aca14||_0x3c4e78[_0x51e8c7(0x285)]<_0x5aca14[_0x51e8c7(0x285)])&&(_0x5aca14=_0x3c4e78);return _0x5aca14;},createPaddedTextureData=(_0xba0ae9,_0x4a6d75,_0x50f886,_0x6fb34)=>{const _0x2c0417=_0x2859cf;let _0x3a0030=_0x4a6d75*Float32Array[_0x2c0417(0x3fc)],_0x579927=Math[_0x2c0417(0x1b5)](_0x3a0030/0x100)*0x100;if(_0x3a0030===_0x579927)return{'values':_0xba0ae9,'bytesPerRow':_0x579927};let _0x436a26=_0x579927/Float32Array[_0x2c0417(0x3fc)],_0x27487e=new Float32Array(_0x436a26*_0x50f886*_0x6fb34);for(let _0x2dbc18=0x0;_0x2dbc18<_0x6fb34;_0x2dbc18+=0x1)for(let _0x494dd0=0x0;_0x494dd0<_0x50f886;_0x494dd0+=0x1){let _0x5cf014=(_0x2dbc18*_0x50f886+_0x494dd0)*_0x4a6d75,_0x596364=(_0x2dbc18*_0x50f886+_0x494dd0)*_0x436a26;_0x27487e[_0x2c0417(0x252)](_0xba0ae9[_0x2c0417(0x23f)](_0x5cf014,_0x5cf014+_0x4a6d75),_0x596364);}return{'values':_0x27487e,'bytesPerRow':_0x579927};};var WebgpuBrickAtlas=class{['device'];[_0x2859cf(0x33b)];[_0x2859cf(0x1d7)];[_0x2859cf(0x204)]=null;['layout']=null;['atlasTextures']=[];['atlasViews']=[];[_0x2859cf(0x493)]=null;[_0x2859cf(0x487)]=new Uint32Array();[_0x2859cf(0x253)]=new Map();[_0x2859cf(0x3e6)]=new Map();['generation']=0x0;constructor(_0x2fd78b,_0xb6f660=0x20000000,_0x26fc0a=_0xb6f660){const _0x29ab9f=_0x2859cf;if(!Number[_0x29ab9f(0x273)](_0xb6f660)||!Number['isFinite'](_0x26fc0a)||_0xb6f660<=0x0||_0x26fc0a<=0x0)throw Error('WebGPU\x20volume\x20memory\x20limits\x20must\x20be\x20positive.\x20WebGPU\x20体积显存限制必须大于零。');this[_0x29ab9f(0x358)]=_0x2fd78b,this[_0x29ab9f(0x33b)]=Math[_0x29ab9f(0x28e)](_0xb6f660,_0x26fc0a),this[_0x29ab9f(0x1d7)]=_0x26fc0a;}get[_0x2859cf(0x1b2)](){const _0x2c2824=_0x2859cf;if(!this[_0x2c2824(0x204)])throw Error(_0x2c2824(0x43c));return this[_0x2c2824(0x204)];}get['atlasLayout'](){const _0x5b212a=_0x2859cf;if(!this[_0x5b212a(0x2ea)])throw Error('WebGPU\x20volume\x20atlas\x20layout\x20is\x20unavailable.\x20WebGPU\x20体积图集布局不可用。');return this[_0x5b212a(0x2ea)];}get['residentBrickCount'](){const _0x4f3f24=_0x2859cf;return this[_0x4f3f24(0x253)][_0x4f3f24(0x376)];}get['statistics'](){const _0x2be14c=_0x2859cf;if(!this['metadata']||!this[_0x2be14c(0x2ea)])return{'logicalBrickCount':0x0,'atlasCapacity':0x0,'gpuBytes':0x0,'memoryLimitBytes':this['memoryHardLimitBytes'],'budgetLimited':!0x1,'skippedSamples':0x0,'skippedCells':0x0};let _0x1dad7e=getBrickCount(this[_0x2be14c(0x204)]),_0x44c96f=_0x1dad7e[0x0]*_0x1dad7e[0x1]*_0x1dad7e[0x2],_0x1d2809=this[_0x2be14c(0x204)][_0x2be14c(0x420)]+0x2,_0x37f001=this['metadata'][_0x2be14c(0x2c4)]+0x2,_0x2d9c2f=this[_0x2be14c(0x204)][_0x2be14c(0x3d8)]+0x2,_0x33c1d8=_0x1d2809*_0x37f001*_0x2d9c2f*this[_0x2be14c(0x2ea)][_0x2be14c(0x459)]*Float32Array[_0x2be14c(0x3fc)],_0x27eac8=_0x44c96f*0x4*Uint32Array[_0x2be14c(0x3fc)],_0x54b3bd=0x0,_0x149c69=0x0;for(let _0x285f45 of this[_0x2be14c(0x253)][_0x2be14c(0x1cd)]())_0x285f45['occupied']||(_0x149c69+=0x1,_0x54b3bd+=_0x285f45[_0x2be14c(0x2c3)]);return{'logicalBrickCount':_0x44c96f,'atlasCapacity':this['layout'][_0x2be14c(0x459)],'gpuBytes':_0x33c1d8+_0x27eac8,'memoryLimitBytes':this[_0x2be14c(0x1d7)],'budgetLimited':this[_0x2be14c(0x2ea)][_0x2be14c(0x459)]<_0x44c96f,'skippedSamples':_0x54b3bd,'skippedCells':_0x149c69};}['configure'](_0x18755b){const _0x39c2a4=_0x2859cf;validateMetadata(_0x18755b);let _0x4f0e5c=_0x18755b[_0x39c2a4(0x420)]+0x2,_0x40258b=_0x18755b[_0x39c2a4(0x2c4)]+0x2,_0x18d83f=_0x18755b[_0x39c2a4(0x3d8)]+0x2,_0x4f7d23=getBrickCount(_0x18755b),_0x1ab5a1=_0x4f7d23[0x0]*_0x4f7d23[0x1]*_0x4f7d23[0x2],_0x4d6288=_0x1ab5a1*0x4*Uint32Array['BYTES_PER_ELEMENT'],_0x2248e7=Math[_0x39c2a4(0x28e)](this[_0x39c2a4(0x33b)],this[_0x39c2a4(0x1d7)])-_0x4d6288;if(_0x2248e7<=0x0)throw Error(_0x39c2a4(0x22a));let _0x321c03=_0x4f0e5c*_0x40258b*_0x18d83f*Float32Array['BYTES_PER_ELEMENT'],_0x1a1e53=Math[_0x39c2a4(0x28e)](_0x1ab5a1,Math[_0x39c2a4(0x49c)](_0x2248e7/_0x321c03)),_0x881b60=Math[_0x39c2a4(0x284)](0x1,Math[_0x39c2a4(0x49c)](0x4000000/_0x321c03)),_0x118f31=Math[_0x39c2a4(0x28e)](0x8,Math[_0x39c2a4(0x284)](0x1,Math[_0x39c2a4(0x1b5)](_0x1a1e53/_0x881b60))),_0x5d4c4b=findAtlasLayout(Math[_0x39c2a4(0x284)](0x1,Math['floor'](_0x1a1e53/_0x118f31)),_0x4f0e5c,_0x40258b,_0x18d83f,this['device'][_0x39c2a4(0x3e9)][_0x39c2a4(0x2c7)]);if(!_0x5d4c4b)throw Error(_0x39c2a4(0x2d7));let _0xcd4acb={..._0x5d4c4b,'textureCount':_0x118f31,'capacity':_0x5d4c4b[_0x39c2a4(0x43f)]*_0x118f31},_0x1f9ee8=_0x4f0e5c*_0xcd4acb[_0x39c2a4(0x228)],_0x361a35=_0x40258b*_0xcd4acb[_0x39c2a4(0x32d)],_0x236c29=_0x18d83f*_0xcd4acb[_0x39c2a4(0x3e8)],_0x92f509=Array[_0x39c2a4(0x1e5)]({'length':_0x118f31},(_0x460c8e,_0x5c3bcb)=>this[_0x39c2a4(0x358)][_0x39c2a4(0x1e0)]({'label':_0x39c2a4(0x43e)+_0x5c3bcb,'size':[_0x1f9ee8,_0x361a35,_0x236c29],'dimension':'3d','format':'r32float','usage':GPUTextureUsage[_0x39c2a4(0x19d)]|GPUTextureUsage[_0x39c2a4(0x4a3)]|GPUTextureUsage['STORAGE_BINDING']})),_0x22adfb=this[_0x39c2a4(0x358)][_0x39c2a4(0x322)]({'label':_0x39c2a4(0x47c),'size':Math[_0x39c2a4(0x284)](0x10,_0x4d6288),'usage':GPUBufferUsage[_0x39c2a4(0x3e1)]|GPUBufferUsage[_0x39c2a4(0x4a3)]});this[_0x39c2a4(0x3b8)](),this['metadata']={..._0x18755b},this['layout']=_0xcd4acb,this[_0x39c2a4(0x3ca)]=_0x92f509,this[_0x39c2a4(0x210)]=_0x92f509['map'](_0x1ccb08=>_0x1ccb08[_0x39c2a4(0x354)]({'dimension':'3d'})),this[_0x39c2a4(0x493)]=_0x22adfb,this[_0x39c2a4(0x487)]=new Uint32Array(_0x1ab5a1*0x4),this[_0x39c2a4(0x358)][_0x39c2a4(0x24a)][_0x39c2a4(0x2c0)](_0x22adfb,0x0,this[_0x39c2a4(0x487)]);for(let _0x4fc560 of _0x92f509)this[_0x39c2a4(0x2a7)](_0x4fc560,_0x1f9ee8,_0x361a35,_0x236c29);this[_0x39c2a4(0x418)]+=0x1;}[_0x2859cf(0x425)](_0x47a0b1,_0x274047){const _0x5956e7=_0x2859cf;let _0x333cb1=this[_0x5956e7(0x1b2)],_0x1fc214=this[_0x5956e7(0x1eb)],_0x24c309=getBrickCount(_0x333cb1),_0x3961ba=_0x24c309[0x0]*_0x24c309[0x1]*_0x24c309[0x2];if(!Number[_0x5956e7(0x2dd)](_0x47a0b1[_0x5956e7(0x191)])||_0x47a0b1[_0x5956e7(0x191)]<0x0||_0x47a0b1[_0x5956e7(0x191)]>=_0x3961ba)throw Error(_0x5956e7(0x3a1)+_0x47a0b1['logicalIndex']+_0x5956e7(0x363));let _0x580833=_0x333cb1[_0x5956e7(0x420)]+0x2,_0x179ba1=_0x333cb1[_0x5956e7(0x2c4)]+0x2,_0x59e022=_0x333cb1['brickDepth']+0x2,_0x555e9a=_0x580833*_0x179ba1*_0x59e022;if(_0x47a0b1['values'][_0x5956e7(0x326)]!==_0x555e9a)throw Error(_0x5956e7(0x362)+_0x47a0b1[_0x5956e7(0x191)]+_0x5956e7(0x360)+_0x555e9a+'\x20values\x20but\x20received\x20'+_0x47a0b1[_0x5956e7(0x1cd)][_0x5956e7(0x326)]+'.\x20体积砖块数据长度不正确。');let _0x3d43cc=this[_0x5956e7(0x253)][_0x5956e7(0x374)](_0x47a0b1[_0x5956e7(0x191)])??this[_0x5956e7(0x445)](_0x47a0b1[_0x5956e7(0x191)],_0x274047),_0x2afeaa=analyzeBrickOccupancy(_0x47a0b1,_0x333cb1,_0x24c309),_0x34fee8=Math[_0x5956e7(0x49c)](_0x3d43cc[_0x5956e7(0x426)]/_0x1fc214[_0x5956e7(0x43f)]),_0x4a7d95=getSlotCoordinate(_0x3d43cc[_0x5956e7(0x426)]%_0x1fc214[_0x5956e7(0x43f)],_0x1fc214),_0x595aa9=createPaddedTextureData(new Float32Array(_0x47a0b1[_0x5956e7(0x1cd)]),_0x580833,_0x179ba1,_0x59e022);return _0x3d43cc[_0x5956e7(0x285)]=_0x274047,_0x3d43cc[_0x5956e7(0x418)]=this[_0x5956e7(0x418)],_0x3d43cc[_0x5956e7(0x2f0)]=_0x2afeaa['occupied'],_0x3d43cc[_0x5956e7(0x2c3)]=_0x2afeaa[_0x5956e7(0x3d9)],this['writePageEntry'](_0x3d43cc),{'values':_0x595aa9[_0x5956e7(0x1cd)],'bytesPerRow':_0x595aa9[_0x5956e7(0x1a2)],'rowsPerImage':_0x179ba1,'origin':{'x':_0x4a7d95[0x0]*_0x580833,'y':_0x4a7d95[0x1]*_0x179ba1,'z':_0x4a7d95[0x2]*_0x59e022},'extent':[_0x580833,_0x179ba1,_0x59e022],'atlasIndex':_0x34fee8};}[_0x2859cf(0x404)](_0x723022,_0x47e641,_0x965296,_0x3fe9a8){const _0x21c8fd=_0x2859cf;_0x723022['copyBufferToTexture']({'buffer':_0x47e641,'offset':_0x965296,'bytesPerRow':_0x3fe9a8[_0x21c8fd(0x1a2)],'rowsPerImage':_0x3fe9a8[_0x21c8fd(0x3a8)]},{'texture':this[_0x21c8fd(0x3aa)](_0x3fe9a8[_0x21c8fd(0x48c)]),'origin':_0x3fe9a8['origin']},_0x3fe9a8[_0x21c8fd(0x2f7)]);}[_0x2859cf(0x33e)](_0x5a5c6b,_0x24b6fa){const _0x449b12=_0x2859cf;for(let _0x15e804 of _0x5a5c6b){let _0x3e5a7d=this[_0x449b12(0x253)][_0x449b12(0x374)](_0x15e804);_0x3e5a7d&&(_0x3e5a7d[_0x449b12(0x285)]=_0x24b6fa);}}[_0x2859cf(0x3b3)](_0x5b5c7f,_0xbe5508){const _0x2a0af9=_0x2859cf;if(this[_0x2a0af9(0x210)][_0x2a0af9(0x326)]===0x0||!this[_0x2a0af9(0x493)])throw Error(_0x2a0af9(0x260));return this[_0x2a0af9(0x358)][_0x2a0af9(0x3b3)]({'label':'volume\x20atlas\x20bind\x20group','layout':_0x5b5c7f,'entries':[...Array['from']({'length':0x8},(_0x204627,_0xaca0)=>({'binding':_0xaca0,'resource':this[_0x2a0af9(0x210)][_0xaca0]??this[_0x2a0af9(0x210)][0x0]})),{'binding':0x8,'resource':{'buffer':this['pageTableBuffer']}},{'binding':0x9,'resource':{'buffer':_0xbe5508}}]});}[_0x2859cf(0x355)](){const _0x2ed968=_0x2859cf;this['destroyResources'](),this[_0x2ed968(0x204)]=null,this[_0x2ed968(0x2ea)]=null,this[_0x2ed968(0x487)]=new Uint32Array();}['acquireSlot'](_0x18d9c4,_0x4e778d){const _0x5da3b9=_0x2859cf;let _0x9a53d8=this['atlasLayout'],_0x3e23b6=this[_0x5da3b9(0x3e6)][_0x5da3b9(0x376)];if(_0x3e23b6>=_0x9a53d8[_0x5da3b9(0x459)]){let _0x4b69fc=findLeastRecentlyUsed(this[_0x5da3b9(0x3e6)]['values'](),_0x4e778d);if(!_0x4b69fc)throw Error(_0x5da3b9(0x2bf));_0x3e23b6=_0x4b69fc[_0x5da3b9(0x426)],this[_0x5da3b9(0x2dc)](_0x4b69fc[_0x5da3b9(0x191)]),this['residentByLogicalIndex'][_0x5da3b9(0x18e)](_0x4b69fc['logicalIndex']),this['residentBySlotIndex'][_0x5da3b9(0x18e)](_0x3e23b6);}let _0x58ceee={'logicalIndex':_0x18d9c4,'slotIndex':_0x3e23b6,'lastUsedFrame':_0x4e778d,'generation':this[_0x5da3b9(0x418)],'occupied':!0x1,'skippedSampleCount':0x0};return this['residentByLogicalIndex'][_0x5da3b9(0x252)](_0x18d9c4,_0x58ceee),this[_0x5da3b9(0x3e6)][_0x5da3b9(0x252)](_0x3e23b6,_0x58ceee),_0x58ceee;}['writePageEntry'](_0x159725){const _0x311e0b=_0x2859cf;let _0xa4a0bc=_0x159725[_0x311e0b(0x191)]*0x4;this[_0x311e0b(0x487)][_0xa4a0bc]=_0x159725[_0x311e0b(0x426)]%this[_0x311e0b(0x1eb)][_0x311e0b(0x43f)]+0x1,this[_0x311e0b(0x487)][_0xa4a0bc+0x1]=_0x159725[_0x311e0b(0x418)],this[_0x311e0b(0x487)][_0xa4a0bc+0x2]=+!!_0x159725[_0x311e0b(0x2f0)],this[_0x311e0b(0x487)][_0xa4a0bc+0x3]=Math[_0x311e0b(0x49c)](_0x159725['slotIndex']/this[_0x311e0b(0x1eb)][_0x311e0b(0x43f)]),this['device'][_0x311e0b(0x24a)][_0x311e0b(0x2c0)](this['getPageTableBuffer'](),_0xa4a0bc*Uint32Array[_0x311e0b(0x3fc)],this[_0x311e0b(0x487)],_0xa4a0bc,0x4);}[_0x2859cf(0x2dc)](_0x32988b){const _0x48c7b1=_0x2859cf;let _0x5b83e5=_0x32988b*0x4;this[_0x48c7b1(0x487)][_0x48c7b1(0x259)](0x0,_0x5b83e5,_0x5b83e5+0x4),this[_0x48c7b1(0x358)]['queue'][_0x48c7b1(0x2c0)](this[_0x48c7b1(0x39b)](),_0x5b83e5*Uint32Array[_0x48c7b1(0x3fc)],this[_0x48c7b1(0x487)],_0x5b83e5,0x4);}[_0x2859cf(0x3aa)](_0x278bb6){const _0x2d1065=_0x2859cf;let _0x3fc254=this[_0x2d1065(0x3ca)][_0x278bb6];if(!_0x3fc254)throw Error(_0x2d1065(0x1d2));return _0x3fc254;}[_0x2859cf(0x2a7)](_0x2cdeed,_0xc95487,_0x5d861b,_0x1d8590){const _0x35ca2b=_0x2859cf;let _0x236797=this[_0x35ca2b(0x358)]['createShaderModule']({'label':_0x35ca2b(0x193),'code':_0x35ca2b(0x2ad)}),_0x33ec17=this[_0x35ca2b(0x358)][_0x35ca2b(0x3df)]({'label':'volume\x20atlas\x20clear\x20pipeline','layout':'auto','compute':{'module':_0x236797,'entryPoint':_0x35ca2b(0x3f7)}}),_0x1c5999=this[_0x35ca2b(0x358)][_0x35ca2b(0x3b3)]({'label':_0x35ca2b(0x491),'layout':_0x33ec17[_0x35ca2b(0x480)](0x0),'entries':[{'binding':0x0,'resource':_0x2cdeed[_0x35ca2b(0x354)]({'dimension':'3d'})}]}),_0x5ebbde=this[_0x35ca2b(0x358)]['createCommandEncoder']({'label':_0x35ca2b(0x18b)}),_0x46ca76=_0x5ebbde[_0x35ca2b(0x32f)]({'label':_0x35ca2b(0x408)});_0x46ca76[_0x35ca2b(0x208)](_0x33ec17),_0x46ca76['setBindGroup'](0x0,_0x1c5999),_0x46ca76[_0x35ca2b(0x2ed)](Math[_0x35ca2b(0x1b5)](_0xc95487/0x4),Math['ceil'](_0x5d861b/0x4),Math['ceil'](_0x1d8590/0x4)),_0x46ca76[_0x35ca2b(0x317)](),this[_0x35ca2b(0x358)][_0x35ca2b(0x24a)][_0x35ca2b(0x2a5)]([_0x5ebbde[_0x35ca2b(0x1ba)]()]);}[_0x2859cf(0x39b)](){const _0x35768a=_0x2859cf;if(!this['pageTableBuffer'])throw Error(_0x35768a(0x375));return this['pageTableBuffer'];}[_0x2859cf(0x3b8)](){const _0x4f7fcf=_0x2859cf;for(let _0x2b5aa8 of this['atlasTextures'])_0x2b5aa8['destroy']();this[_0x4f7fcf(0x493)]?.[_0x4f7fcf(0x355)](),this[_0x4f7fcf(0x3ca)]=[],this[_0x4f7fcf(0x210)]=[],this['pageTableBuffer']=null,this[_0x4f7fcf(0x253)][_0x4f7fcf(0x314)](),this[_0x4f7fcf(0x3e6)][_0x4f7fcf(0x314)]();}},WebgpuSceneAttachments=class{[_0x2859cf(0x358)];[_0x2859cf(0x467)]=null;[_0x2859cf(0x19b)]=null;[_0x2859cf(0x456)]=0x0;['height']=0x0;constructor(_0x2e20b9){const _0x4ae8ef=_0x2859cf;this[_0x4ae8ef(0x358)]=_0x2e20b9;}get[_0x2859cf(0x1bb)](){const _0x1282b4=_0x2859cf;if(!this[_0x1282b4(0x19b)])throw Error('WebGPU\x20scene\x20depth\x20attachment\x20is\x20not\x20initialized.\x20WebGPU\x20场景深度附件尚未初始化。');return this[_0x1282b4(0x19b)];}['resize'](_0x47427d,_0x12981a){const _0xeeca8=_0x2859cf;if(this[_0xeeca8(0x456)]===_0x47427d&&this[_0xeeca8(0x3de)]===_0x12981a)return;let _0x314e93=this['device'][_0xeeca8(0x1e0)]({'label':'volume\x20scene\x20depth','size':[_0x47427d,_0x12981a],'format':_0xeeca8(0x3ea),'usage':GPUTextureUsage['RENDER_ATTACHMENT']|GPUTextureUsage['TEXTURE_BINDING']}),_0x8d76ab=this[_0xeeca8(0x467)];this[_0xeeca8(0x467)]=_0x314e93,this['depthView']=_0x314e93[_0xeeca8(0x354)](),this[_0xeeca8(0x456)]=_0x47427d,this[_0xeeca8(0x3de)]=_0x12981a,_0x8d76ab?.[_0xeeca8(0x355)]();}[_0x2859cf(0x355)](){const _0x1cd069=_0x2859cf;this['depthTexture']?.[_0x1cd069(0x355)](),this['depthTexture']=null,this[_0x1cd069(0x19b)]=null,this[_0x1cd069(0x456)]=0x0,this['height']=0x0;}},WebgpuSceneMeshResources=class{[_0x2859cf(0x358)];[_0x2859cf(0x3ed)]=[];constructor(_0x186ab3){const _0x4589e1=_0x2859cf;this[_0x4589e1(0x358)]=_0x186ab3;}get['count'](){const _0x597e0f=_0x2859cf;return this[_0x597e0f(0x3ed)]['length'];}['replace'](_0x1623f6){const _0x4563bb=_0x2859cf;let _0x65afa0=[];try{for(let _0x2862cb of _0x1623f6)_0x65afa0[_0x4563bb(0x39a)](this['createResource'](_0x2862cb));}catch(_0x34d0b7){for(let _0x4748fc of _0x65afa0)_0x4748fc[_0x4563bb(0x3ce)][_0x4563bb(0x355)]();throw _0x34d0b7;}this[_0x4563bb(0x3b8)](),this[_0x4563bb(0x3ed)]=_0x65afa0;}[_0x2859cf(0x1db)](_0x501557,_0x36f99f,_0x27a1ca){const _0x3247a0=_0x2859cf;for(let _0x202358 of this[_0x3247a0(0x3ed)])_0x202358[_0x3247a0(0x1ac)]!==_0x36f99f||_0x202358['depthMode']!==_0x27a1ca||(_0x501557['setVertexBuffer'](0x0,_0x202358[_0x3247a0(0x3ce)]),_0x501557[_0x3247a0(0x1db)](_0x202358[_0x3247a0(0x2d5)]));}[_0x2859cf(0x355)](){this['destroyResources']();}[_0x2859cf(0x2af)](_0x355e77){const _0x16533d=_0x2859cf;if(_0x355e77['vertices'][_0x16533d(0x326)]===0x0||_0x355e77[_0x16533d(0x431)][_0x16533d(0x326)]%0x7!=0x0)throw Error(_0x16533d(0x3f6)+_0x355e77['id']+_0x16533d(0x3ac));let _0x5b01bf=new Float32Array(_0x355e77[_0x16533d(0x431)]),_0x305620=this[_0x16533d(0x358)]['createBuffer']({'label':_0x16533d(0x2e9)+_0x355e77['id'],'size':_0x5b01bf['byteLength'],'usage':GPUBufferUsage['VERTEX']|GPUBufferUsage['COPY_DST']});return this[_0x16533d(0x358)][_0x16533d(0x24a)]['writeBuffer'](_0x305620,0x0,_0x5b01bf),{'id':_0x355e77['id'],'topology':_0x355e77[_0x16533d(0x1ac)],'depthMode':_0x355e77[_0x16533d(0x341)],'buffer':_0x305620,'vertexCount':_0x355e77[_0x16533d(0x431)]['length']/0x7};}['destroyResources'](){for(let _0x203211 of this['resources'])_0x203211['buffer']['destroy']();this['resources']=[];}},WebgpuSliceResources=class{[_0x2859cf(0x358)];[_0x2859cf(0x2ea)];['resources']=[];['uniformUpdateCount']=0x0;['resourceRebuildCount']=0x0;constructor(_0x5ed2fc,_0x341224){this['device']=_0x5ed2fc,this['layout']=_0x341224;}get[_0x2859cf(0x251)](){const _0x418b5d=_0x2859cf;return this[_0x418b5d(0x3ed)]['length'];}get['statistics'](){const _0x5cab65=_0x2859cf;return{'uniformUpdateCount':this[_0x5cab65(0x390)],'resourceRebuildCount':this[_0x5cab65(0x424)]};}[_0x2859cf(0x250)](_0x2697e9){const _0x486134=_0x2859cf;let _0x210230=new Map(this[_0x486134(0x3ed)][_0x486134(0x3c0)](_0x23361b=>[_0x23361b['id'],_0x23361b])),_0x5a7a10=[],_0x27dc71=new Set();try{for(let _0x347fb5 of _0x2697e9){if(!_0x347fb5[_0x486134(0x31e)])continue;if(_0x27dc71[_0x486134(0x336)](_0x347fb5['id']))throw Error('Volume\x20slice\x20ID\x20'+_0x347fb5['id']+'\x20is\x20duplicated.\x20体积切面\x20ID\x20重复。');_0x27dc71[_0x486134(0x35c)](_0x347fb5['id']);let _0x2d8e2a=this[_0x486134(0x1a1)](_0x347fb5),_0x4f55e0=_0x210230[_0x486134(0x374)](_0x347fb5['id']);if(!_0x4f55e0){_0x5a7a10[_0x486134(0x39a)](this[_0x486134(0x2af)](_0x347fb5,_0x2d8e2a));continue;}_0x210230['delete'](_0x347fb5['id']),_0x4f55e0[_0x486134(0x341)]=_0x347fb5[_0x486134(0x341)],this['valuesEqual'](_0x4f55e0[_0x486134(0x1cd)],_0x2d8e2a)||(this[_0x486134(0x358)][_0x486134(0x24a)]['writeBuffer'](_0x4f55e0['buffer'],0x0,_0x2d8e2a),_0x4f55e0[_0x486134(0x1cd)]=_0x2d8e2a,this['uniformUpdateCount']+=0x1),_0x5a7a10[_0x486134(0x39a)](_0x4f55e0);}}catch(_0x41152e){for(let _0x360f5f of _0x5a7a10)this[_0x486134(0x3ed)][_0x486134(0x3e7)](_0x360f5f)||_0x360f5f[_0x486134(0x3ce)]['destroy']();throw _0x41152e;}for(let _0x5a90da of _0x210230[_0x486134(0x1cd)]())_0x5a90da[_0x486134(0x3ce)][_0x486134(0x355)]();this[_0x486134(0x3ed)]=_0x5a7a10;}['draw'](_0x39d219,_0x421482,_0x3de822){const _0x26075d=_0x2859cf;_0x39d219[_0x26075d(0x208)](_0x421482);for(let _0x3b7783 of this[_0x26075d(0x3ed)])_0x3b7783[_0x26075d(0x341)]===_0x3de822&&(_0x39d219[_0x26075d(0x44e)](0x3,_0x3b7783[_0x26075d(0x44f)]),_0x39d219['draw'](0x1800));}[_0x2859cf(0x355)](){this['destroyResources']();}[_0x2859cf(0x1a1)](_0x551ab1){const _0x312121=_0x2859cf;if(!Number[_0x312121(0x273)](_0x551ab1['position'])||_0x551ab1['position']<0x0||_0x551ab1[_0x312121(0x27c)]>0x1)throw Error(_0x312121(0x39e)+_0x551ab1['id']+_0x312121(0x49e));let _0x4302b1=_0x551ab1[_0x312121(0x1d4)]==='x'?0x0:_0x551ab1[_0x312121(0x1d4)]==='y'?0x1:0x2,_0x1cc846=_0x551ab1[_0x312121(0x32e)]??[0x0,0x0,0x0,0x0];if(_0x1cc846['some'](_0x2d33c4=>!Number[_0x312121(0x273)](_0x2d33c4)||_0x2d33c4<0x0||_0x2d33c4>0x1))throw Error(_0x312121(0x39e)+_0x551ab1['id']+_0x312121(0x232));return new Float32Array([_0x4302b1,_0x551ab1[_0x312121(0x27c)],_0x551ab1[_0x312121(0x446)]??0x1,0x0,..._0x1cc846]);}['createResource'](_0x48c055,_0x25e21d){const _0xa395f5=_0x2859cf;let _0x57df15=this[_0xa395f5(0x358)][_0xa395f5(0x322)]({'label':_0xa395f5(0x29f)+_0x48c055['id'],'size':0x20,'usage':GPUBufferUsage[_0xa395f5(0x222)]|GPUBufferUsage[_0xa395f5(0x4a3)]});this[_0xa395f5(0x358)][_0xa395f5(0x24a)][_0xa395f5(0x2c0)](_0x57df15,0x0,_0x25e21d);let _0x21ecea=this['device']['createBindGroup']({'layout':this['layout'],'entries':[{'binding':0x0,'resource':{'buffer':_0x57df15}}]});return this[_0xa395f5(0x424)]+=0x1,{'id':_0x48c055['id'],'depthMode':_0x48c055['depthMode'],'buffer':_0x57df15,'bindGroup':_0x21ecea,'values':_0x25e21d};}[_0x2859cf(0x41c)](_0xcfc0b4,_0x5a8739){const _0x562644=_0x2859cf;for(let _0x26b2af=0x0;_0x26b2af<_0xcfc0b4[_0x562644(0x326)];_0x26b2af+=0x1)if(_0xcfc0b4[_0x26b2af]!==_0x5a8739[_0x26b2af])return!0x1;return!0x0;}[_0x2859cf(0x3b8)](){const _0x4fe23c=_0x2859cf;for(let _0x152409 of this[_0x4fe23c(0x3ed)])_0x152409[_0x4fe23c(0x3ce)]['destroy']();this[_0x4fe23c(0x3ed)]=[];}};const createStorageBuffer=(_0x178cc1,_0x111e2e,_0xf09e9e)=>{const _0x2a9412=_0x2859cf;let _0x4dc8c4=_0x178cc1[_0x2a9412(0x322)]({'label':_0xf09e9e,'size':Math['max'](0x4,_0x111e2e[_0x2a9412(0x242)]),'usage':GPUBufferUsage['STORAGE']|GPUBufferUsage[_0x2a9412(0x4a3)]});return _0x111e2e[_0x2a9412(0x242)]>0x0&&_0x178cc1[_0x2a9412(0x24a)][_0x2a9412(0x2c0)](_0x4dc8c4,0x0,_0x111e2e),_0x4dc8c4;},validateStops$1=(_0x20fbec,_0x162c56)=>{const _0x99b77f=_0x2859cf;if(_0x20fbec[_0x99b77f(0x326)]===0x0||_0x162c56['length']===0x0)throw Error(_0x99b77f(0x3f4));for(let _0x1faf3d=0x1;_0x1faf3d<_0x20fbec[_0x99b77f(0x326)];_0x1faf3d+=0x1)if(_0x20fbec[_0x1faf3d][_0x99b77f(0x414)]<_0x20fbec[_0x1faf3d-0x1][_0x99b77f(0x414)])throw Error('Volume\x20color\x20stops\x20must\x20be\x20sorted\x20by\x20value.\x20体积颜色色标必须按数值升序排列。');for(let _0x58e9fc=0x0;_0x58e9fc<_0x162c56[_0x99b77f(0x326)];_0x58e9fc+=0x1){if(_0x162c56[_0x58e9fc][_0x99b77f(0x446)]<0x0||_0x162c56[_0x58e9fc]['opacity']>0x1)throw Error(_0x99b77f(0x34b));if(_0x58e9fc>0x0&&_0x162c56[_0x58e9fc][_0x99b77f(0x414)]<_0x162c56[_0x58e9fc-0x1][_0x99b77f(0x414)])throw Error(_0x99b77f(0x395));}};var WebgpuTransferResources=class{[_0x2859cf(0x358)];['colorValuesBuffer']=null;['colorBuffer']=null;[_0x2859cf(0x38b)]=null;['opacityBuffer']=null;[_0x2859cf(0x455)]=0x0;[_0x2859cf(0x215)]=0x0;constructor(_0xc1cddd){this['device']=_0xc1cddd;}get['counts'](){const _0x47a585=_0x2859cf;return[this[_0x47a585(0x455)],this[_0x47a585(0x215)]];}[_0x2859cf(0x207)](_0xbf8fe3,_0x3dde21){const _0x47b325=_0x2859cf;validateStops$1(_0xbf8fe3,_0x3dde21);let _0x4e579f=new Float32Array(_0xbf8fe3[_0x47b325(0x326)]),_0x325666=new Float32Array(_0xbf8fe3['length']*0x4),_0x30a8fd=new Float32Array(_0x3dde21[_0x47b325(0x326)]),_0x5417a2=new Float32Array(_0x3dde21[_0x47b325(0x326)]);for(let _0x3919da=0x0;_0x3919da<_0xbf8fe3[_0x47b325(0x326)];_0x3919da+=0x1)_0x4e579f[_0x3919da]=_0xbf8fe3[_0x3919da]['value'],_0x325666['set'](_0xbf8fe3[_0x3919da]['color'],_0x3919da*0x4);for(let _0x4080f8=0x0;_0x4080f8<_0x3dde21[_0x47b325(0x326)];_0x4080f8+=0x1)_0x30a8fd[_0x4080f8]=_0x3dde21[_0x4080f8][_0x47b325(0x414)],_0x5417a2[_0x4080f8]=_0x3dde21[_0x4080f8]['opacity'];let _0x6839c4=[createStorageBuffer(this[_0x47b325(0x358)],_0x4e579f,_0x47b325(0x297)),createStorageBuffer(this[_0x47b325(0x358)],_0x325666,_0x47b325(0x24e)),createStorageBuffer(this[_0x47b325(0x358)],_0x30a8fd,_0x47b325(0x29d)),createStorageBuffer(this['device'],_0x5417a2,'volume\x20opacity\x20stop\x20alphas')];this[_0x47b325(0x19c)](),this['colorValuesBuffer']=_0x6839c4[0x0],this['colorBuffer']=_0x6839c4[0x1],this[_0x47b325(0x38b)]=_0x6839c4[0x2],this[_0x47b325(0x419)]=_0x6839c4[0x3],this[_0x47b325(0x455)]=_0xbf8fe3['length'],this[_0x47b325(0x215)]=_0x3dde21[_0x47b325(0x326)];}[_0x2859cf(0x3b3)](_0xa1ee79){const _0x35c6b7=_0x2859cf;if(!this[_0x35c6b7(0x33c)]||!this[_0x35c6b7(0x1e6)]||!this[_0x35c6b7(0x38b)]||!this[_0x35c6b7(0x419)])throw Error(_0x35c6b7(0x301));return this[_0x35c6b7(0x358)][_0x35c6b7(0x3b3)]({'label':'volume\x20transfer\x20bind\x20group','layout':_0xa1ee79,'entries':[{'binding':0x0,'resource':{'buffer':this[_0x35c6b7(0x33c)]}},{'binding':0x1,'resource':{'buffer':this[_0x35c6b7(0x1e6)]}},{'binding':0x2,'resource':{'buffer':this[_0x35c6b7(0x38b)]}},{'binding':0x3,'resource':{'buffer':this[_0x35c6b7(0x419)]}}]});}['destroy'](){const _0x54879a=_0x2859cf;this['destroyBuffers'](),this['colorStopCount']=0x0,this[_0x54879a(0x215)]=0x0;}[_0x2859cf(0x19c)](){const _0x533671=_0x2859cf;this[_0x533671(0x33c)]?.[_0x533671(0x355)](),this[_0x533671(0x1e6)]?.['destroy'](),this[_0x533671(0x38b)]?.[_0x533671(0x355)](),this[_0x533671(0x419)]?.['destroy'](),this['colorValuesBuffer']=null,this[_0x533671(0x1e6)]=null,this[_0x533671(0x38b)]=null,this[_0x533671(0x419)]=null;}};const DEFAULT_MEMORY_TARGET_BYTES=0x200*0x400*0x400,IDENTITY_MATRIX$1=[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':_0x2859cf(0x33f),'dstFactor':_0x2859cf(0x3f1),'operation':'add'},'alpha':{'srcFactor':_0x2859cf(0x33f),'dstFactor':_0x2859cf(0x3f1),'operation':'add'}}),validateMatrix=(_0x4db4e5,_0x480606)=>{const _0x38f6db=_0x2859cf;if(_0x4db4e5[_0x38f6db(0x326)]!==0x10||_0x4db4e5[_0x38f6db(0x1b7)](_0x156756=>!Number[_0x38f6db(0x273)](_0x156756)))throw Error(_0x480606+_0x38f6db(0x34e)+_0x480606+'\x20必须包含十六个有限数值。');},validateNonNegative=(_0x2af55a,_0x18b79e)=>{const _0x132918=_0x2859cf;if(!Number['isFinite'](_0x2af55a)||_0x2af55a<0x0)throw Error(_0x18b79e+_0x132918(0x2d9)+_0x18b79e+_0x132918(0x399));return _0x2af55a;},validatePositive=(_0x1c0978,_0x125b8c)=>{const _0x315ed9=_0x2859cf;if(!Number[_0x315ed9(0x273)](_0x1c0978)||_0x1c0978<=0x0)throw Error(_0x125b8c+_0x315ed9(0x393)+_0x125b8c+_0x315ed9(0x230));return _0x1c0978;},cloneMeshes=_0xda2d6c=>_0xda2d6c[_0x2859cf(0x3c0)](_0x21c4b5=>({..._0x21c4b5,'vertices':new Float32Array(_0x21c4b5[_0x2859cf(0x431)])})),estimateBrickUploadBytes=_0x400eae=>{const _0x24bb9e=_0x2859cf;let _0x15812c=_0x400eae[_0x24bb9e(0x420)]+_0x400eae['halo']*0x2,_0x4677e6=_0x400eae[_0x24bb9e(0x2c4)]+_0x400eae['halo']*0x2,_0x137696=_0x400eae[_0x24bb9e(0x3d8)]+_0x400eae[_0x24bb9e(0x2b1)]*0x2;return Math[_0x24bb9e(0x1b5)](_0x15812c*Float32Array['BYTES_PER_ELEMENT']/0x100)*0x100*_0x4677e6*_0x137696+0x10;};var WebgpuVolumeSceneRenderer=class{[_0x2859cf(0x1e4)];[_0x2859cf(0x24f)]=_0x2859cf(0x1da);[_0x2859cf(0x23c)]=null;[_0x2859cf(0x1f1)]=null;['device']=null;[_0x2859cf(0x45c)]=null;[_0x2859cf(0x2f2)]=null;[_0x2859cf(0x1e2)]=null;[_0x2859cf(0x20d)]=null;[_0x2859cf(0x3c5)]=null;['sceneBindGroupLayout']=null;['volumeBindGroupLayout']=null;[_0x2859cf(0x3ec)]=null;[_0x2859cf(0x312)]=null;[_0x2859cf(0x42e)]=null;[_0x2859cf(0x2bd)]=null;['volumeBindGroup']=null;[_0x2859cf(0x2b2)]=null;[_0x2859cf(0x1e3)]=null;[_0x2859cf(0x1f2)]=null;[_0x2859cf(0x366)]=null;[_0x2859cf(0x1e1)]=null;[_0x2859cf(0x223)]=null;[_0x2859cf(0x3ba)]=null;['overlaySlicePipeline']=null;[_0x2859cf(0x36d)]=null;['atlas']=null;[_0x2859cf(0x1fc)]=null;['profileResources']=null;[_0x2859cf(0x433)]=null;[_0x2859cf(0x4a4)]=null;[_0x2859cf(0x204)]=null;['camera']={'viewProjection':IDENTITY_MATRIX$1,'inverseViewProjection':IDENTITY_MATRIX$1,'cameraPosition':[0x0,0x0,0x2]};[_0x2859cf(0x46c)]=IDENTITY_MATRIX$1;[_0x2859cf(0x25d)]=IDENTITY_MATRIX$1;['clipMinimum']=[0x0,0x0,0x0];[_0x2859cf(0x26c)]=[0x1,0x1,0x1];[_0x2859cf(0x3b9)]=_0x2859cf(0x2e8);[_0x2859cf(0x446)]=0.3;[_0x2859cf(0x1ea)]=0x1;[_0x2859cf(0x3b4)]=0.005;[_0x2859cf(0x328)]=0x1;[_0x2859cf(0x429)]=_0x2859cf(0x2a1);['geographicTransform']=null;[_0x2859cf(0x1ad)]=DEFAULT_COLOR_STOPS;[_0x2859cf(0x37b)]=DEFAULT_OPACITY_STOPS;[_0x2859cf(0x3d2)]=0x0;[_0x2859cf(0x3f0)]=0x0;[_0x2859cf(0x456)]=0x0;['height']=0x0;[_0x2859cf(0x283)]=0x0;[_0x2859cf(0x255)]=0x0;[_0x2859cf(0x2fe)]=[];[_0x2859cf(0x39c)]=[];[_0x2859cf(0x2e1)]=[];['cachedBricks']=new Map();[_0x2859cf(0x37e)]=[];[_0x2859cf(0x335)]=null;[_0x2859cf(0x44d)]=0x0;[_0x2859cf(0x309)]=null;['uploadStagingBufferSize']=0x0;[_0x2859cf(0x490)]=0x0;[_0x2859cf(0x201)]=0x0;['maximumUploadBatchBytes']=0x0;[_0x2859cf(0x311)]=!0x1;[_0x2859cf(0x474)]=null;constructor(_0x5b948c={}){this['options']={..._0x5b948c};}get[_0x2859cf(0x2f6)](){const _0x59a0a2=_0x2859cf;return this[_0x59a0a2(0x24f)];}get[_0x2859cf(0x34f)](){const _0x5a1348=_0x2859cf;let _0x3f0d07=this['atlas']?.['statistics']??{'logicalBrickCount':0x0,'atlasCapacity':0x0,'gpuBytes':0x0,'memoryLimitBytes':this[_0x5a1348(0x1e4)][_0x5a1348(0x1d7)]??this[_0x5a1348(0x1e4)][_0x5a1348(0x33b)]??DEFAULT_MEMORY_TARGET_BYTES,'budgetLimited':!0x1,'skippedSamples':0x0,'skippedCells':0x0},_0x4ca57=this[_0x5a1348(0x433)]?.[_0x5a1348(0x34f)]??{'uniformUpdateCount':0x0,'resourceRebuildCount':0x0};return{'logicalBrickCount':_0x3f0d07[_0x5a1348(0x49f)],'residentBrickCount':this['atlas']?.[_0x5a1348(0x308)]??0x0,'pendingBrickCount':0x0,'atlasCapacity':_0x3f0d07['atlasCapacity'],'gpuBytes':_0x3f0d07['gpuBytes'],'memoryLimitBytes':_0x3f0d07[_0x5a1348(0x4a0)],'budgetLimited':_0x3f0d07[_0x5a1348(0x3b2)],'frameTimeMilliseconds':this[_0x5a1348(0x255)],'submittedFrameCount':this[_0x5a1348(0x3f0)],'uploadedBrickCount':this[_0x5a1348(0x490)],'uploadBatchCount':this[_0x5a1348(0x201)],'maximumUploadBatchBytes':this[_0x5a1348(0x24c)],'sliceUniformUpdateCount':_0x4ca57[_0x5a1348(0x390)],'sliceResourceRebuildCount':_0x4ca57[_0x5a1348(0x424)],'skippedSamples':_0x3f0d07[_0x5a1348(0x2e2)],'skippedCells':_0x3f0d07[_0x5a1348(0x439)]};}[_0x2859cf(0x49b)](_0x214aec){const _0x54c567=_0x2859cf;this[_0x54c567(0x474)]=_0x214aec;}async[_0x2859cf(0x1b3)](_0x2c39d6){const _0x37086d=_0x2859cf;if(this[_0x37086d(0x24f)]==='destroyed')throw Error(_0x37086d(0x2ba));let _0x6d40b5=++this[_0x37086d(0x283)];this[_0x37086d(0x479)](),this[_0x37086d(0x23c)]=_0x2c39d6,this['lifecycleState']=_0x37086d(0x338);let _0x33b1d1=navigator[_0x37086d(0x1cb)];if(!_0x33b1d1)throw this[_0x37086d(0x24f)]=_0x37086d(0x1da),Error(_0x37086d(0x444));let _0x46eae5=await _0x33b1d1[_0x37086d(0x495)]({'powerPreference':this['options'][_0x37086d(0x27d)]??_0x37086d(0x430)});if(_0x6d40b5!==this[_0x37086d(0x283)])return;if(!_0x46eae5)throw this['lifecycleState']=_0x37086d(0x1da),Error(_0x37086d(0x3be));let _0x1c6928=await _0x46eae5['requestDevice']();if(_0x6d40b5!==this['initializationGeneration']){_0x1c6928[_0x37086d(0x355)]();return;}let _0x1437da=_0x2c39d6[_0x37086d(0x1a3)]('webgpu');if(!_0x1437da)throw _0x1c6928[_0x37086d(0x355)](),this[_0x37086d(0x24f)]=_0x37086d(0x1da),Error(_0x37086d(0x368));let _0x1a4779=_0x33b1d1['getPreferredCanvasFormat']();_0x1437da['configure']({'device':_0x1c6928,'format':_0x1a4779,'alphaMode':_0x37086d(0x33d),'usage':GPUTextureUsage['RENDER_ATTACHMENT']|GPUTextureUsage[_0x37086d(0x1d3)]}),this['adapter']=_0x46eae5,this[_0x37086d(0x358)]=_0x1c6928,this['context']=_0x1437da,this['format']=_0x1a4779,_0x1c6928[_0x37086d(0x496)]('validation'),this[_0x37086d(0x378)]();let _0x4fd4ea=await _0x1c6928[_0x37086d(0x279)]();if(_0x4fd4ea)throw this[_0x37086d(0x479)](),this[_0x37086d(0x24f)]='idle',Error(_0x37086d(0x270)+_0x4fd4ea[_0x37086d(0x1dd)]+_0x37086d(0x325));if(this['watchDeviceLost'](_0x1c6928),this['lifecycleState']=_0x37086d(0x436),this['metadata']){this[_0x37086d(0x344)](this[_0x37086d(0x204)]);let _0xbd80e6=Array[_0x37086d(0x1e5)](this[_0x37086d(0x25e)][_0x37086d(0x470)]());await Promise['all'](_0xbd80e6[_0x37086d(0x3c0)](([_0x1e6e33,_0x36c968])=>this[_0x37086d(0x4a2)]({'logicalIndex':_0x1e6e33,'values':_0x36c968},!0x1)));}this['updateTransferResources'](),this[_0x37086d(0x44b)]()[_0x37086d(0x250)](this[_0x37086d(0x2fe)]),this['getSliceResources']()[_0x37086d(0x250)](this['cachedSlices']),this[_0x37086d(0x463)]()['replace'](this[_0x37086d(0x2e1)]),this[_0x37086d(0x19f)](_0x2c39d6[_0x37086d(0x456)]||_0x2c39d6[_0x37086d(0x295)]||0x1,_0x2c39d6[_0x37086d(0x3de)]||_0x2c39d6['clientHeight']||0x1);}[_0x2859cf(0x3f3)](_0xf804b4){const _0x25ce87=_0x2859cf;this[_0x25ce87(0x44d)]+=0x1,this[_0x25ce87(0x469)](new DOMException(_0x25ce87(0x2ca),'AbortError')),this[_0x25ce87(0x204)]={..._0xf804b4},this[_0x25ce87(0x25e)][_0x25ce87(0x314)](),this['uploadedBrickCount']=0x0,this['uploadBatchCount']=0x0,this[_0x25ce87(0x24c)]=0x0,this[_0x25ce87(0x24f)]===_0x25ce87(0x436)&&this['configureSourceResources'](_0xf804b4);}['uploadBrick'](_0x965a60){const _0x364b9e=_0x2859cf;return this[_0x364b9e(0x4a2)](_0x965a60,!0x0);}[_0x2859cf(0x209)](_0x3021b5){const _0x430873=_0x2859cf;this[_0x430873(0x299)]()['touch'](_0x3021b5,this[_0x430873(0x3d2)]);for(let _0x180305 of _0x3021b5){let _0xa390fb=this[_0x430873(0x25e)][_0x430873(0x374)](_0x180305);_0xa390fb&&(this[_0x430873(0x25e)][_0x430873(0x18e)](_0x180305),this[_0x430873(0x25e)][_0x430873(0x252)](_0x180305,_0xa390fb));}}[_0x2859cf(0x28f)](_0x213587){const _0xaaa62a=_0x2859cf;validateMatrix(_0x213587['viewProjection'],_0xaaa62a(0x387)),validateMatrix(_0x213587['inverseViewProjection'],'inverseViewProjection'),this[_0xaaa62a(0x448)]={'viewProjection':[..._0x213587['viewProjection']],'inverseViewProjection':[..._0x213587[_0xaaa62a(0x2bb)]],'cameraPosition':[..._0x213587[_0xaaa62a(0x352)]]};}[_0x2859cf(0x1c1)](_0x38256c){const _0x4f2cbf=_0x2859cf;this[_0x4f2cbf(0x2fe)]=cloneMeshes(_0x38256c),this[_0x4f2cbf(0x44b)]()[_0x4f2cbf(0x250)](_0x38256c);}[_0x2859cf(0x1fd)](_0x45c816){const _0x4505b0=_0x2859cf;this[_0x4505b0(0x39c)]=_0x45c816[_0x4505b0(0x3c0)](_0x71b7d0=>({..._0x71b7d0})),this['getSliceResources']()[_0x4505b0(0x250)](_0x45c816);}['setAxes'](_0x7002d4){const _0x2b33ae=_0x2859cf;this['cachedAxes']=cloneMeshes(_0x7002d4),this[_0x2b33ae(0x463)]()[_0x2b33ae(0x250)](_0x7002d4);}['setTransfer'](_0x289c89,_0x171bcf,_0x360422){const _0x579b6f=_0x2859cf;this['colorStops']=_0x289c89['map'](_0x4d988d=>({'value':_0x4d988d[_0x579b6f(0x414)],'color':[..._0x4d988d[_0x579b6f(0x447)]]})),this[_0x579b6f(0x37b)]=_0x171bcf[_0x579b6f(0x3c0)](_0x1e13e8=>({..._0x1e13e8})),_0x360422&&(this['colorMode']=_0x360422),this[_0x579b6f(0x24f)]===_0x579b6f(0x436)&&this['updateTransferResources']();}[_0x2859cf(0x207)](_0xeea3ec){const _0x1c9ec0=_0x2859cf;_0xeea3ec[_0x1c9ec0(0x46c)]&&(validateMatrix(_0xeea3ec['modelMatrix'],_0x1c9ec0(0x46c)),this[_0x1c9ec0(0x46c)]=[..._0xeea3ec['modelMatrix']]),_0xeea3ec[_0x1c9ec0(0x25d)]&&(validateMatrix(_0xeea3ec[_0x1c9ec0(0x25d)],_0x1c9ec0(0x25d)),this['inverseModelMatrix']=[..._0xeea3ec[_0x1c9ec0(0x25d)]]),_0xeea3ec['clipMinimum']&&(this['clipMinimum']=[..._0xeea3ec[_0x1c9ec0(0x3c7)]]),_0xeea3ec[_0x1c9ec0(0x26c)]&&(this[_0x1c9ec0(0x26c)]=[..._0xeea3ec[_0x1c9ec0(0x26c)]]),_0xeea3ec[_0x1c9ec0(0x3b9)]&&(this['renderMode']=_0xeea3ec[_0x1c9ec0(0x3b9)]),_0xeea3ec['opacity']!==void 0x0&&(this[_0x1c9ec0(0x446)]=validateNonNegative(_0xeea3ec[_0x1c9ec0(0x446)],_0x1c9ec0(0x446))),_0xeea3ec['densityScale']!==void 0x0&&(this[_0x1c9ec0(0x1ea)]=validateNonNegative(_0xeea3ec[_0x1c9ec0(0x1ea)],_0x1c9ec0(0x1ea))),_0xeea3ec['stepLength']!==void 0x0&&(this[_0x1c9ec0(0x3b4)]=validatePositive(_0xeea3ec['stepLength'],_0x1c9ec0(0x3b4))),_0xeea3ec['volumeDimFactor']!==void 0x0&&(this[_0x1c9ec0(0x328)]=validateNonNegative(_0xeea3ec[_0x1c9ec0(0x328)],'volumeDimFactor')),_0xeea3ec[_0x1c9ec0(0x429)]&&(this[_0x1c9ec0(0x429)]=_0xeea3ec[_0x1c9ec0(0x429)]),_0xeea3ec['geographicTransform']!==void 0x0&&(this['geographicTransform']=_0xeea3ec[_0x1c9ec0(0x49d)]?{..._0xeea3ec[_0x1c9ec0(0x49d)]}:null);}[_0x2859cf(0x19f)](_0x1e87f4,_0x3e1652){const _0x26754c=_0x2859cf;if(!Number[_0x26754c(0x2dd)](_0x1e87f4)||!Number[_0x26754c(0x2dd)](_0x3e1652)||_0x1e87f4<=0x0||_0x3e1652<=0x0)throw Error(_0x26754c(0x1f6));let _0x54eff0=this[_0x26754c(0x195)]();_0x54eff0[_0x26754c(0x456)]=_0x1e87f4,_0x54eff0[_0x26754c(0x3de)]=_0x3e1652,this[_0x26754c(0x456)]=_0x1e87f4,this['height']=_0x3e1652,this[_0x26754c(0x398)]()[_0x26754c(0x19f)](_0x1e87f4,_0x3e1652),this[_0x26754c(0x357)]();}['render'](){const _0x17a52d=_0x2859cf;if(this[_0x17a52d(0x24f)]!==_0x17a52d(0x436)||!this[_0x17a52d(0x204)]||this[_0x17a52d(0x456)]<=0x0||this[_0x17a52d(0x3de)]<=0x0||this['frameInFlight'])return!0x1;let _0x41f6ea=performance[_0x17a52d(0x289)]();this['frameIndex']+=0x1,this['writeParams']();let _0x55d683=this['getDevice'](),_0x37ba98=_0x55d683[_0x17a52d(0x1d8)]({'label':_0x17a52d(0x3e5)}),_0x4cb94e=this[_0x17a52d(0x1a3)]()[_0x17a52d(0x2a9)]()[_0x17a52d(0x354)]();return this[_0x17a52d(0x29a)](_0x37ba98,_0x4cb94e),this[_0x17a52d(0x3d1)](_0x37ba98,_0x4cb94e),this[_0x17a52d(0x1ca)](_0x37ba98,_0x4cb94e),_0x55d683[_0x17a52d(0x24a)]['submit']([_0x37ba98[_0x17a52d(0x1ba)]()]),this[_0x17a52d(0x311)]=!0x0,this[_0x17a52d(0x3f0)]+=0x1,this[_0x17a52d(0x255)]=Math[_0x17a52d(0x284)](0.000001,performance[_0x17a52d(0x289)]()-_0x41f6ea),_0x55d683[_0x17a52d(0x24a)][_0x17a52d(0x256)]()[_0x17a52d(0x346)](()=>{const _0x2fdafc=_0x17a52d;this[_0x2fdafc(0x358)]!==_0x55d683||this['lifecycleState']!==_0x2fdafc(0x436)||(this[_0x2fdafc(0x311)]=!0x1,this[_0x2fdafc(0x474)]?.());})[_0x17a52d(0x27a)](()=>{const _0x33d8d3=_0x17a52d;this[_0x33d8d3(0x358)]===_0x55d683&&(this[_0x33d8d3(0x311)]=!0x1);}),!0x0;}async[_0x2859cf(0x23a)](){const _0xcb8bc2=_0x2859cf;if(this[_0xcb8bc2(0x24f)]!==_0xcb8bc2(0x436)||!this['metadata']||this['width']<=0x0||this[_0xcb8bc2(0x3de)]<=0x0)throw Error(_0xcb8bc2(0x1af));let _0x20332f=this['getDevice'](),_0x3a9dcb=this['width']*0x4,_0x22c042=Math[_0xcb8bc2(0x1b5)](_0x3a9dcb/0x100)*0x100,_0x545752=_0x20332f[_0xcb8bc2(0x322)]({'label':_0xcb8bc2(0x245),'size':_0x22c042*this[_0xcb8bc2(0x3de)],'usage':GPUBufferUsage[_0xcb8bc2(0x4a3)]|GPUBufferUsage[_0xcb8bc2(0x2be)]});_0x20332f[_0xcb8bc2(0x496)](_0xcb8bc2(0x327)),this['frameIndex']+=0x1,this[_0xcb8bc2(0x190)]();let _0x1da00e=_0x20332f[_0xcb8bc2(0x1d8)]({'label':_0xcb8bc2(0x384)}),_0xa3e1cb=this[_0xcb8bc2(0x1a3)]()[_0xcb8bc2(0x2a9)](),_0x1c25f0=_0xa3e1cb[_0xcb8bc2(0x354)]();this['encodeScenePass'](_0x1da00e,_0x1c25f0),this[_0xcb8bc2(0x3d1)](_0x1da00e,_0x1c25f0),this[_0xcb8bc2(0x1ca)](_0x1da00e,_0x1c25f0),_0x1da00e['copyTextureToBuffer']({'texture':_0xa3e1cb},{'buffer':_0x545752,'bytesPerRow':_0x22c042,'rowsPerImage':this[_0xcb8bc2(0x3de)]},[this[_0xcb8bc2(0x456)],this[_0xcb8bc2(0x3de)]]),_0x20332f['queue']['submit']([_0x1da00e['finish']()]);let _0xfdfb41=await _0x20332f['popErrorScope']();if(_0xfdfb41)throw _0x545752['destroy'](),Error(_0xcb8bc2(0x196)+_0xfdfb41[_0xcb8bc2(0x1dd)]+'.\x20WebGPU\x20体积帧读取失败。');await _0x545752[_0xcb8bc2(0x450)](GPUMapMode[_0xcb8bc2(0x482)]);let _0xe47ebf=new Uint8Array(_0x545752[_0xcb8bc2(0x329)]()),_0x19d45e=new Uint8Array(_0x3a9dcb*this[_0xcb8bc2(0x3de)]),_0x25e2f7=this['getFormat']()===_0xcb8bc2(0x407);for(let _0x192026=0x0;_0x192026<this[_0xcb8bc2(0x3de)];_0x192026+=0x1){let _0x2a92cb=_0xe47ebf[_0xcb8bc2(0x23f)](_0x192026*_0x22c042,_0x192026*_0x22c042+_0x3a9dcb),_0x5c0c67=_0x192026*_0x3a9dcb;if(!_0x25e2f7){_0x19d45e[_0xcb8bc2(0x252)](_0x2a92cb,_0x5c0c67);continue;}for(let _0x4a5cc5=0x0;_0x4a5cc5<this[_0xcb8bc2(0x456)];_0x4a5cc5+=0x1){let _0x24be07=_0x4a5cc5*0x4,_0x462f3f=_0x5c0c67+_0x24be07;_0x19d45e[_0x462f3f]=_0x2a92cb[_0x24be07+0x2],_0x19d45e[_0x462f3f+0x1]=_0x2a92cb[_0x24be07+0x1],_0x19d45e[_0x462f3f+0x2]=_0x2a92cb[_0x24be07],_0x19d45e[_0x462f3f+0x3]=_0x2a92cb[_0x24be07+0x3];}}return _0x545752[_0xcb8bc2(0x40d)](),_0x545752['destroy'](),this[_0xcb8bc2(0x3f0)]+=0x1,{'width':this[_0xcb8bc2(0x456)],'height':this[_0xcb8bc2(0x3de)],'pixels':_0x19d45e};}['destroy'](){const _0x387fdd=_0x2859cf;this['lifecycleState']!=='destroyed'&&(++this['initializationGeneration'],this[_0x387fdd(0x479)](),this['canvas']=null,this[_0x387fdd(0x204)]=null,this[_0x387fdd(0x474)]=null,this[_0x387fdd(0x24f)]=_0x387fdd(0x2d3));}['createGpuResources'](){const _0x2c03bb=_0x2859cf;let _0x370597=this[_0x2c03bb(0x18f)]();this[_0x2c03bb(0x1e2)]=_0x370597['createBuffer']({'label':_0x2c03bb(0x3bc),'size':0x190,'usage':GPUBufferUsage['UNIFORM']|GPUBufferUsage[_0x2c03bb(0x4a3)]}),this[_0x2c03bb(0x20d)]=_0x370597[_0x2c03bb(0x322)]({'label':_0x2c03bb(0x386),'size':0x60,'usage':GPUBufferUsage[_0x2c03bb(0x222)]|GPUBufferUsage[_0x2c03bb(0x4a3)]}),this[_0x2c03bb(0x3c5)]=_0x370597[_0x2c03bb(0x3fb)]({'label':_0x2c03bb(0x1ae),'entries':[{'binding':0x0,'visibility':GPUShaderStage[_0x2c03bb(0x36b)]|GPUShaderStage[_0x2c03bb(0x1e7)],'buffer':{'type':_0x2c03bb(0x1bc)}}]}),this[_0x2c03bb(0x457)]=_0x370597['createBindGroupLayout']({'label':_0x2c03bb(0x3c8),'entries':[{'binding':0x0,'visibility':GPUShaderStage[_0x2c03bb(0x36b)]|GPUShaderStage[_0x2c03bb(0x1e7)],'buffer':{'type':_0x2c03bb(0x1bc)}},{'binding':0x1,'visibility':GPUShaderStage[_0x2c03bb(0x1e7)],'texture':{'sampleType':'depth'}}]}),this[_0x2c03bb(0x1fa)]=_0x370597[_0x2c03bb(0x3fb)]({'label':'volume\x20atlas\x20bind\x20group\x20layout','entries':[...Array[_0x2c03bb(0x1e5)]({'length':0x8},(_0x10b162,_0xd41137)=>({'binding':_0xd41137,'visibility':GPUShaderStage[_0x2c03bb(0x1e7)],'texture':{'sampleType':_0x2c03bb(0x2df),'viewDimension':'3d'}})),{'binding':0x8,'visibility':GPUShaderStage[_0x2c03bb(0x1e7)],'buffer':{'type':_0x2c03bb(0x396)}},{'binding':0x9,'visibility':GPUShaderStage['FRAGMENT'],'buffer':{'type':_0x2c03bb(0x1bc)}}]}),this[_0x2c03bb(0x3ec)]=_0x370597['createBindGroupLayout']({'label':_0x2c03bb(0x2fc),'entries':[0x0,0x1,0x2,0x3][_0x2c03bb(0x3c0)](_0x55531c=>({'binding':_0x55531c,'visibility':GPUShaderStage['FRAGMENT'],'buffer':{'type':_0x2c03bb(0x396)}}))}),this[_0x2c03bb(0x312)]=_0x370597[_0x2c03bb(0x3fb)]({'label':_0x2c03bb(0x30b),'entries':[{'binding':0x0,'visibility':GPUShaderStage[_0x2c03bb(0x36b)]|GPUShaderStage[_0x2c03bb(0x1e7)],'buffer':{'type':_0x2c03bb(0x1bc)}}]}),this['attachments']=new WebgpuSceneAttachments(_0x370597),this['transferResources']=new WebgpuTransferResources(_0x370597),this[_0x2c03bb(0x319)]=new WebgpuSceneMeshResources(_0x370597),this[_0x2c03bb(0x433)]=new WebgpuSliceResources(_0x370597,this[_0x2c03bb(0x47f)]()),this[_0x2c03bb(0x4a4)]=new WebgpuSceneMeshResources(_0x370597),this[_0x2c03bb(0x3ad)]();}[_0x2859cf(0x3ad)](){const _0x50e111=_0x2859cf;let _0x4bb335=this[_0x50e111(0x18f)](),_0x1a3019=this[_0x50e111(0x254)](),_0xf33ac2=this[_0x50e111(0x31b)](),_0x722e96=this[_0x50e111(0x43d)](),_0x239384=_0x4bb335[_0x50e111(0x206)]({'label':_0x50e111(0x461),'code':sceneMesh_default}),_0x49170c={'module':_0x239384,'entryPoint':_0x50e111(0x186),'buffers':[{'arrayStride':0x1c,'attributes':[{'shaderLocation':0x0,'offset':0x0,'format':_0x50e111(0x3c6)},{'shaderLocation':0x1,'offset':0xc,'format':_0x50e111(0x3f8)}]}]},_0x56c9d6={'module':_0x239384,'entryPoint':_0x50e111(0x265),'targets':[{'format':_0x1a3019,'blend':premultipliedBlend()}]},_0x33cd31=(_0x38b252,_0x517ce5)=>_0x4bb335['createRenderPipeline']({'layout':_0x4bb335[_0x50e111(0x272)]({'bindGroupLayouts':[_0xf33ac2]}),'vertex':_0x49170c,'fragment':_0x56c9d6,'primitive':{'topology':_0x38b252},'depthStencil':_0x517ce5?{'format':_0x50e111(0x3ea),'depthWriteEnabled':!0x0,'depthCompare':_0x50e111(0x42a)}:void 0x0});this[_0x50e111(0x1f2)]=_0x33cd31(_0x50e111(0x2fa),!0x0),this[_0x50e111(0x366)]=_0x33cd31(_0x50e111(0x2d6),!0x0),this['overlayTrianglePipeline']=_0x33cd31('triangle-list',!0x1),this[_0x50e111(0x223)]=_0x33cd31(_0x50e111(0x2d6),!0x1);let _0x57fc39=_0x4bb335[_0x50e111(0x206)]({'label':_0x50e111(0x2b4),'code':volumeRaymarch_default});this[_0x50e111(0x1e3)]=_0x4bb335[_0x50e111(0x278)]({'layout':_0x4bb335['createPipelineLayout']({'bindGroupLayouts':[_0x722e96,this[_0x50e111(0x2fb)](),this[_0x50e111(0x35e)]()]}),'vertex':{'module':_0x57fc39,'entryPoint':'vertexMain'},'fragment':{'module':_0x57fc39,'entryPoint':_0x50e111(0x265),'targets':[{'format':_0x1a3019,'blend':premultipliedBlend()}]},'primitive':{'topology':'triangle-list'}});let _0x4d73ee=_0x4bb335[_0x50e111(0x206)]({'label':_0x50e111(0x1e8),'code':volumeSlice_default}),_0x4978a8=_0x59ab22=>_0x4bb335[_0x50e111(0x278)]({'layout':_0x4bb335['createPipelineLayout']({'bindGroupLayouts':[_0xf33ac2,this[_0x50e111(0x2fb)](),this['getTransferBindGroupLayout'](),this[_0x50e111(0x47f)]()]}),'vertex':{'module':_0x4d73ee,'entryPoint':_0x50e111(0x186)},'fragment':{'module':_0x4d73ee,'entryPoint':_0x50e111(0x265),'targets':[{'format':_0x1a3019,'blend':premultipliedBlend()}]},'primitive':{'topology':_0x50e111(0x2fa)},'depthStencil':_0x59ab22?{'format':_0x50e111(0x3ea),'depthWriteEnabled':!0x0,'depthCompare':_0x50e111(0x42a)}:void 0x0});this[_0x50e111(0x3ba)]=_0x4978a8(!0x0),this[_0x50e111(0x20f)]=_0x4978a8(!0x1);}['configureSourceResources'](_0x364948){const _0x4963f0=_0x2859cf;this[_0x4963f0(0x351)]?.[_0x4963f0(0x355)](),this[_0x4963f0(0x351)]=new WebgpuBrickAtlas(this['getDevice'](),this[_0x4963f0(0x1e4)][_0x4963f0(0x33b)]??DEFAULT_MEMORY_TARGET_BYTES,this[_0x4963f0(0x1e4)][_0x4963f0(0x1d7)]??this[_0x4963f0(0x1e4)][_0x4963f0(0x33b)]??DEFAULT_MEMORY_TARGET_BYTES),this['atlas'][_0x4963f0(0x1a0)](_0x364948),this[_0x4963f0(0x292)](),this[_0x4963f0(0x3b5)]=this[_0x4963f0(0x351)]['createBindGroup'](this[_0x4963f0(0x2fb)](),this[_0x4963f0(0x1a9)]());}[_0x2859cf(0x4a2)](_0x5f31af,_0x4fb0a1){return new Promise((_0x37eb7e,_0xc4ca87)=>{const _0x50ce5e=_0x1b5d;this['pendingBrickUploads'][_0x50ce5e(0x39a)]({'upload':_0x5f31af,'generation':this[_0x50ce5e(0x44d)],'cacheOnSuccess':_0x4fb0a1,'resolve':_0x37eb7e,'reject':_0xc4ca87}),this[_0x50ce5e(0x471)]();});}[_0x2859cf(0x471)](){const _0x3fe47a=_0x2859cf;this[_0x3fe47a(0x335)]||=Promise[_0x3fe47a(0x40a)]()[_0x3fe47a(0x346)](()=>this['processBrickUploads']())[_0x3fe47a(0x373)](()=>{const _0x5515a9=_0x3fe47a;this[_0x5515a9(0x335)]=null,this[_0x5515a9(0x37e)][_0x5515a9(0x326)]>0x0&&this['lifecycleState']===_0x5515a9(0x436)&&this[_0x5515a9(0x471)]();});}async[_0x2859cf(0x294)](){const _0x30a1a8=_0x2859cf;for(;this[_0x30a1a8(0x37e)]['length']>0x0&&this[_0x30a1a8(0x24f)]===_0x30a1a8(0x436)&&this['metadata'];){let _0x253c9e=this[_0x30a1a8(0x18f)](),_0x1e2628=estimateBrickUploadBytes(this[_0x30a1a8(0x204)]),_0x431412=Math[_0x30a1a8(0x28e)](0x4000000,Math[_0x30a1a8(0x284)](_0x1e2628,Math[_0x30a1a8(0x49c)](_0x253c9e[_0x30a1a8(0x3e9)]['maxBufferSize']/0x4))),_0x2741a7=[],_0x23404c=0x0;for(;this[_0x30a1a8(0x37e)][_0x30a1a8(0x326)]>0x0&&_0x2741a7[_0x30a1a8(0x326)]<0x10;){let _0x2c8033=this[_0x30a1a8(0x37e)][0x0];if(_0x2741a7['length']>0x0&&_0x23404c+_0x1e2628>_0x431412)break;if(this[_0x30a1a8(0x37e)][_0x30a1a8(0x2bc)](),_0x2c8033['generation']!==this[_0x30a1a8(0x44d)]){_0x2c8033['reject'](new DOMException('Volume\x20brick\x20upload\x20became\x20stale.\x20体积砖上传已过期。','AbortError'));continue;}_0x2741a7[_0x30a1a8(0x39a)](_0x2c8033),_0x23404c+=_0x1e2628;}if(_0x2741a7[_0x30a1a8(0x326)]!==0x0)try{let _0x2678aa=[],_0x4303b5=0x0;for(let _0x321afa of _0x2741a7){let _0x10c621=this['getAtlas']()[_0x30a1a8(0x425)](_0x321afa['upload'],this[_0x30a1a8(0x3d2)]),_0x4c7470=Math[_0x30a1a8(0x1b5)](_0x4303b5/0x100)*0x100;_0x2678aa[_0x30a1a8(0x39a)]({'item':_0x321afa,'prepared':_0x10c621,'bufferOffset':_0x4c7470}),_0x4303b5=_0x4c7470+_0x10c621[_0x30a1a8(0x1cd)][_0x30a1a8(0x242)];}let _0x142205=this['getUploadStagingBuffer'](_0x4303b5);await _0x142205[_0x30a1a8(0x450)](GPUMapMode[_0x30a1a8(0x2a2)]);let _0x152afe=new Uint8Array(_0x142205['getMappedRange']());for(let _0x2954c6 of _0x2678aa){let _0x24c080=_0x2954c6[_0x30a1a8(0x313)]['values'];_0x152afe['set'](new Uint8Array(_0x24c080[_0x30a1a8(0x3ce)],_0x24c080['byteOffset'],_0x24c080[_0x30a1a8(0x242)]),_0x2954c6[_0x30a1a8(0x46d)]);}_0x142205[_0x30a1a8(0x40d)]();let _0x437000=_0x253c9e[_0x30a1a8(0x1d8)]({'label':_0x30a1a8(0x24b)});for(let _0x4671bc of _0x2678aa)this[_0x30a1a8(0x299)]()[_0x30a1a8(0x404)](_0x437000,_0x142205,_0x4671bc[_0x30a1a8(0x46d)],_0x4671bc[_0x30a1a8(0x313)]);_0x253c9e[_0x30a1a8(0x24a)][_0x30a1a8(0x2a5)]([_0x437000[_0x30a1a8(0x1ba)]()]),await _0x253c9e['queue'][_0x30a1a8(0x256)](),await new Promise(_0x350c44=>setTimeout(_0x350c44,0x0)),this['uploadedBrickCount']+=_0x2741a7[_0x30a1a8(0x326)],this[_0x30a1a8(0x201)]+=0x1,this[_0x30a1a8(0x24c)]=Math['max'](this[_0x30a1a8(0x24c)],_0x23404c);for(let _0x5214d2 of _0x2741a7){if(_0x5214d2[_0x30a1a8(0x418)]!==this[_0x30a1a8(0x44d)]){_0x5214d2[_0x30a1a8(0x460)](new DOMException(_0x30a1a8(0x372),_0x30a1a8(0x45b)));continue;}_0x5214d2[_0x30a1a8(0x333)]&&this[_0x30a1a8(0x48d)](_0x5214d2[_0x30a1a8(0x1a4)]),_0x5214d2[_0x30a1a8(0x40a)]();}}catch(_0x2d343f){for(let _0x433377 of _0x2741a7)_0x433377['reject'](_0x2d343f);}}}[_0x2859cf(0x280)](_0x41effd){const _0x4919fa=_0x2859cf;let _0x78a6cd=Math[_0x4919fa(0x284)](0x100,Math[_0x4919fa(0x1b5)](_0x41effd/0x100)*0x100);return this['uploadStagingBuffer']&&this[_0x4919fa(0x38d)]>=_0x78a6cd?this[_0x4919fa(0x309)]:(this['uploadStagingBuffer']?.['destroy'](),this['uploadStagingBuffer']=this[_0x4919fa(0x18f)]()[_0x4919fa(0x322)]({'label':_0x4919fa(0x3dc),'size':_0x78a6cd,'usage':GPUBufferUsage['MAP_WRITE']|GPUBufferUsage[_0x4919fa(0x1d3)]}),this['uploadStagingBufferSize']=_0x78a6cd,this['uploadStagingBuffer']);}[_0x2859cf(0x48d)](_0x2270d4){const _0x206cc4=_0x2859cf;for(this[_0x206cc4(0x25e)]['delete'](_0x2270d4[_0x206cc4(0x191)]),this[_0x206cc4(0x25e)][_0x206cc4(0x252)](_0x2270d4[_0x206cc4(0x191)],new Float32Array(_0x2270d4[_0x206cc4(0x1cd)]));this[_0x206cc4(0x25e)][_0x206cc4(0x376)]>this[_0x206cc4(0x34f)][_0x206cc4(0x391)];){let _0x266387=this[_0x206cc4(0x25e)][_0x206cc4(0x484)]()[_0x206cc4(0x1d6)]()[_0x206cc4(0x414)];if(_0x266387===void 0x0)break;this[_0x206cc4(0x25e)][_0x206cc4(0x18e)](_0x266387);}}[_0x2859cf(0x469)](_0x27dd67){const _0x212b62=_0x2859cf;for(let _0x147f02 of this['pendingBrickUploads'][_0x212b62(0x22b)](0x0))_0x147f02[_0x212b62(0x460)](_0x27dd67);}[_0x2859cf(0x241)](){const _0x430116=_0x2859cf;let _0x4f9e8b=this['getTransferResources']();_0x4f9e8b[_0x430116(0x207)](this[_0x430116(0x1ad)],this['opacityStops']),this[_0x430116(0x2b2)]=_0x4f9e8b[_0x430116(0x3b3)](this['getTransferBindGroupLayout']());}[_0x2859cf(0x357)](){const _0x41dc0b=_0x2859cf;!this[_0x41dc0b(0x1e2)]||!this[_0x41dc0b(0x36d)]||!this[_0x41dc0b(0x3c5)]||!this[_0x41dc0b(0x457)]||(this[_0x41dc0b(0x42e)]=this[_0x41dc0b(0x18f)]()[_0x41dc0b(0x3b3)]({'label':'volume\x20geometry\x20bind\x20group','layout':this['geometryBindGroupLayout'],'entries':[{'binding':0x0,'resource':{'buffer':this[_0x41dc0b(0x1e2)]}}]}),this[_0x41dc0b(0x2bd)]=this['getDevice']()['createBindGroup']({'label':_0x41dc0b(0x3b6),'layout':this[_0x41dc0b(0x457)],'entries':[{'binding':0x0,'resource':{'buffer':this[_0x41dc0b(0x1e2)]}},{'binding':0x1,'resource':this[_0x41dc0b(0x36d)][_0x41dc0b(0x1bb)]}]}));}['writeParams'](){const _0x2c6447=_0x2859cf;let _0x494899=new Float32Array(0x64);_0x494899[_0x2c6447(0x252)](this[_0x2c6447(0x448)][_0x2c6447(0x387)],0x0),_0x494899[_0x2c6447(0x252)](this['camera']['inverseViewProjection'],0x10),_0x494899[_0x2c6447(0x252)](this[_0x2c6447(0x46c)],0x20),_0x494899[_0x2c6447(0x252)](this[_0x2c6447(0x25d)],0x30),_0x494899[_0x2c6447(0x252)]([...this[_0x2c6447(0x448)][_0x2c6447(0x352)],0x1],0x40),_0x494899[_0x2c6447(0x252)]([this[_0x2c6447(0x456)],this['height'],0x1/this[_0x2c6447(0x456)],0x1/this[_0x2c6447(0x3de)]],0x44),_0x494899[_0x2c6447(0x252)]([...this[_0x2c6447(0x3c7)],0x0],0x48),_0x494899[_0x2c6447(0x252)]([...this[_0x2c6447(0x26c)],0x0],0x4c),_0x494899['set']([+(this[_0x2c6447(0x3b9)]==='maximum'),this[_0x2c6447(0x446)],this[_0x2c6447(0x1ea)],this[_0x2c6447(0x3b4)]],0x50),_0x494899['set']([this[_0x2c6447(0x1ad)][_0x2c6447(0x326)],this[_0x2c6447(0x37b)][_0x2c6447(0x326)],this['volumeDimFactor'],+(this[_0x2c6447(0x429)]===_0x2c6447(0x2b3))],0x54);let _0xfbfc94=this[_0x2c6447(0x49d)];_0xfbfc94&&(_0x494899['set']([0x1,..._0xfbfc94[_0x2c6447(0x3b0)]],0x58),_0x494899[_0x2c6447(0x252)]([_0xfbfc94[_0x2c6447(0x442)],_0xfbfc94['semiMinorAxisScaled'],..._0xfbfc94[_0x2c6447(0x44a)]],0x5c),_0x494899['set']([..._0xfbfc94[_0x2c6447(0x402)],..._0xfbfc94[_0x2c6447(0x330)]],0x60)),this[_0x2c6447(0x18f)]()['queue']['writeBuffer'](this[_0x2c6447(0x2d1)](),0x0,_0x494899);}[_0x2859cf(0x292)](){const _0x5d9312=_0x2859cf;let _0x33fd22=this[_0x5d9312(0x204)],_0x5912aa=this[_0x5d9312(0x351)];if(!_0x33fd22||!_0x5912aa)return;let _0x24096e=_0x5912aa[_0x5d9312(0x1eb)],_0x148838=new Uint32Array(0x60/0x4),_0x4ed674=Math[_0x5d9312(0x1b5)](_0x33fd22[_0x5d9312(0x1bf)]['count']/_0x33fd22['brickWidth']),_0x145b28=Math[_0x5d9312(0x1b5)](_0x33fd22[_0x5d9312(0x1de)][_0x5d9312(0x251)]/_0x33fd22[_0x5d9312(0x2c4)]),_0x27166f=Math[_0x5d9312(0x1b5)](_0x33fd22[_0x5d9312(0x203)][_0x5d9312(0x251)]/_0x33fd22[_0x5d9312(0x3d8)]);_0x148838[_0x5d9312(0x252)]([_0x33fd22['xAxis'][_0x5d9312(0x251)],_0x33fd22['yAxis'][_0x5d9312(0x251)],_0x33fd22[_0x5d9312(0x203)][_0x5d9312(0x251)],0x0],0x0),_0x148838[_0x5d9312(0x252)]([_0x33fd22['brickWidth'],_0x33fd22['brickHeight'],_0x33fd22[_0x5d9312(0x3d8)],0x1],0x4),_0x148838[_0x5d9312(0x252)]([_0x4ed674,_0x145b28,_0x27166f,0x0],0x8),_0x148838['set']([_0x24096e[_0x5d9312(0x228)],_0x24096e[_0x5d9312(0x32d)],_0x24096e[_0x5d9312(0x3e8)],_0x24096e['slotCount']],0xc),_0x148838[_0x5d9312(0x252)]([(_0x33fd22[_0x5d9312(0x420)]+0x2)*_0x24096e['slotCountX'],(_0x33fd22[_0x5d9312(0x2c4)]+0x2)*_0x24096e[_0x5d9312(0x32d)],(_0x33fd22['brickDepth']+0x2)*_0x24096e['slotCountZ'],0x0],0x10),new Float32Array(_0x148838['buffer'])[_0x5d9312(0x252)]([_0x33fd22[_0x5d9312(0x219)]??0x0,_0x33fd22[_0x5d9312(0x219)]===void 0x0?0x0:0x1,0x0,0x0],0x14),this[_0x5d9312(0x18f)]()[_0x5d9312(0x24a)][_0x5d9312(0x2c0)](this['getVolumeParamsBuffer'](),0x0,_0x148838);}[_0x2859cf(0x29a)](_0x243a9f,_0x16b92f){const _0x2fd991=_0x2859cf;let _0x58a709=_0x243a9f[_0x2fd991(0x47d)]({'label':_0x2fd991(0x22c),'colorAttachments':[{'view':_0x16b92f,'clearValue':{'r':0x0,'g':0x0,'b':0x0,'a':0x0},'loadOp':_0x2fd991(0x314),'storeOp':'store'}],'depthStencilAttachment':{'view':this[_0x2fd991(0x398)]()[_0x2fd991(0x1bb)],'depthClearValue':0x1,'depthLoadOp':_0x2fd991(0x314),'depthStoreOp':'store'}});this['drawMeshes'](_0x58a709,_0x2fd991(0x3cc)),this['drawSlices'](_0x58a709,'scene'),_0x58a709[_0x2fd991(0x317)]();}[_0x2859cf(0x3d1)](_0x15003e,_0x479586){const _0x2810ee=_0x2859cf;if(!this[_0x2810ee(0x3b5)]||!this[_0x2810ee(0x2b2)]||!this[_0x2810ee(0x2bd)]||!this[_0x2810ee(0x1e3)])return;let _0x1fce08=_0x15003e['beginRenderPass']({'label':_0x2810ee(0x268),'colorAttachments':[{'view':_0x479586,'loadOp':_0x2810ee(0x286),'storeOp':_0x2810ee(0x367)}]});_0x1fce08['setPipeline'](this[_0x2810ee(0x1e3)]),_0x1fce08[_0x2810ee(0x44e)](0x0,this[_0x2810ee(0x2bd)]),_0x1fce08['setBindGroup'](0x1,this[_0x2810ee(0x3b5)]),_0x1fce08[_0x2810ee(0x44e)](0x2,this['transferBindGroup']),_0x1fce08['draw'](0x3),_0x1fce08[_0x2810ee(0x317)]();}[_0x2859cf(0x1ca)](_0x586bb6,_0x4352d9){const _0x3a5de5=_0x2859cf;let _0x2ddb2f=_0x586bb6[_0x3a5de5(0x47d)]({'label':'volume\x20always\x20visible\x20pass','colorAttachments':[{'view':_0x4352d9,'loadOp':_0x3a5de5(0x286),'storeOp':_0x3a5de5(0x367)}]});this[_0x3a5de5(0x1a5)](_0x2ddb2f,_0x3a5de5(0x1dc)),this[_0x3a5de5(0x464)](_0x2ddb2f,_0x3a5de5(0x1dc)),_0x2ddb2f[_0x3a5de5(0x317)]();}[_0x2859cf(0x1a5)](_0x17c5d5,_0x1c95e9){const _0x592a34=_0x2859cf;let _0x1341f7=this[_0x592a34(0x42e)];if(!_0x1341f7)return;let _0x5a771b=_0x1c95e9===_0x592a34(0x3cc)?this[_0x592a34(0x1f2)]:this[_0x592a34(0x1e1)],_0x33d8b6=_0x1c95e9===_0x592a34(0x3cc)?this[_0x592a34(0x366)]:this[_0x592a34(0x223)];_0x5a771b&&(_0x17c5d5['setPipeline'](_0x5a771b),_0x17c5d5[_0x592a34(0x44e)](0x0,_0x1341f7),this[_0x592a34(0x319)]?.[_0x592a34(0x1db)](_0x17c5d5,'triangle-list',_0x1c95e9),this[_0x592a34(0x4a4)]?.['draw'](_0x17c5d5,_0x592a34(0x2fa),_0x1c95e9)),_0x33d8b6&&(_0x17c5d5[_0x592a34(0x208)](_0x33d8b6),_0x17c5d5[_0x592a34(0x44e)](0x0,_0x1341f7),this[_0x592a34(0x319)]?.[_0x592a34(0x1db)](_0x17c5d5,_0x592a34(0x2d6),_0x1c95e9),this['axisResources']?.[_0x592a34(0x1db)](_0x17c5d5,_0x592a34(0x2d6),_0x1c95e9));}[_0x2859cf(0x464)](_0x225945,_0x37283b){const _0x5b00ad=_0x2859cf;let _0x3de310=_0x37283b===_0x5b00ad(0x3cc)?this['sceneSlicePipeline']:this[_0x5b00ad(0x20f)];!_0x3de310||!this[_0x5b00ad(0x42e)]||!this['volumeBindGroup']||!this[_0x5b00ad(0x2b2)]||(_0x225945[_0x5b00ad(0x44e)](0x0,this[_0x5b00ad(0x42e)]),_0x225945[_0x5b00ad(0x44e)](0x1,this[_0x5b00ad(0x3b5)]),_0x225945[_0x5b00ad(0x44e)](0x2,this[_0x5b00ad(0x2b2)]),this[_0x5b00ad(0x433)]?.['draw'](_0x225945,_0x3de310,_0x37283b));}[_0x2859cf(0x3ee)](_0x338068){const _0x5b3b21=_0x2859cf;_0x338068[_0x5b3b21(0x41b)][_0x5b3b21(0x346)](_0x34fc26=>{const _0x1d0108=_0x5b3b21;if(this[_0x1d0108(0x358)]!==_0x338068||this[_0x1d0108(0x24f)]===_0x1d0108(0x2d3))return;this[_0x1d0108(0x24f)]='lost',console[_0x1d0108(0x1ed)](_0x1d0108(0x1c6)+_0x34fc26['message']+_0x1d0108(0x213));let _0x5dfdbf=this[_0x1d0108(0x23c)];this[_0x1d0108(0x479)](),_0x5dfdbf&&this[_0x1d0108(0x1b3)](_0x5dfdbf)[_0x1d0108(0x27a)](_0x4d5e3a=>{const _0x30980f=_0x1d0108;console[_0x30980f(0x1ed)](_0x30980f(0x26a),_0x4d5e3a);});});}[_0x2859cf(0x479)](){const _0x5bcc87=_0x2859cf;this[_0x5bcc87(0x44d)]+=0x1,this[_0x5bcc87(0x469)](new DOMException(_0x5bcc87(0x2e5),_0x5bcc87(0x45b))),this[_0x5bcc87(0x351)]?.[_0x5bcc87(0x355)](),this[_0x5bcc87(0x1fc)]?.[_0x5bcc87(0x355)](),this[_0x5bcc87(0x319)]?.[_0x5bcc87(0x355)](),this[_0x5bcc87(0x433)]?.[_0x5bcc87(0x355)](),this['axisResources']?.[_0x5bcc87(0x355)](),this[_0x5bcc87(0x36d)]?.['destroy'](),this[_0x5bcc87(0x1e2)]?.[_0x5bcc87(0x355)](),this['volumeParamsBuffer']?.[_0x5bcc87(0x355)](),this[_0x5bcc87(0x309)]?.[_0x5bcc87(0x355)]();try{this[_0x5bcc87(0x45c)]?.['unconfigure']();}catch{}this['device']?.[_0x5bcc87(0x355)](),this['adapter']=null,this[_0x5bcc87(0x358)]=null,this[_0x5bcc87(0x45c)]=null,this[_0x5bcc87(0x2f2)]=null,this[_0x5bcc87(0x1e2)]=null,this[_0x5bcc87(0x20d)]=null,this['uploadStagingBuffer']=null,this[_0x5bcc87(0x38d)]=0x0,this[_0x5bcc87(0x3c5)]=null,this[_0x5bcc87(0x457)]=null,this[_0x5bcc87(0x1fa)]=null,this[_0x5bcc87(0x3ec)]=null,this[_0x5bcc87(0x312)]=null,this[_0x5bcc87(0x42e)]=null,this[_0x5bcc87(0x2bd)]=null,this[_0x5bcc87(0x3b5)]=null,this['transferBindGroup']=null,this[_0x5bcc87(0x1e3)]=null,this[_0x5bcc87(0x1f2)]=null,this[_0x5bcc87(0x366)]=null,this[_0x5bcc87(0x1e1)]=null,this[_0x5bcc87(0x223)]=null,this[_0x5bcc87(0x3ba)]=null,this[_0x5bcc87(0x20f)]=null,this[_0x5bcc87(0x36d)]=null,this[_0x5bcc87(0x351)]=null,this[_0x5bcc87(0x1fc)]=null,this[_0x5bcc87(0x319)]=null,this['sliceResources']=null,this[_0x5bcc87(0x4a4)]=null,this[_0x5bcc87(0x311)]=!0x1,this[_0x5bcc87(0x456)]=0x0,this['height']=0x0;}['getDevice'](){const _0x522393=_0x2859cf;if(!this['device'])throw Error(_0x522393(0x3a5));return this[_0x522393(0x358)];}['getContext'](){const _0x2f9453=_0x2859cf;if(!this[_0x2f9453(0x45c)])throw Error(_0x2f9453(0x2b8));return this[_0x2f9453(0x45c)];}[_0x2859cf(0x254)](){const _0x5489cb=_0x2859cf;if(!this[_0x5489cb(0x2f2)])throw Error(_0x5489cb(0x412));return this[_0x5489cb(0x2f2)];}[_0x2859cf(0x195)](){const _0x17027a=_0x2859cf;if(!this[_0x17027a(0x23c)])throw Error(_0x17027a(0x1a6));return this[_0x17027a(0x23c)];}[_0x2859cf(0x398)](){const _0xdf35b8=_0x2859cf;if(!this[_0xdf35b8(0x36d)])throw Error(_0xdf35b8(0x449));return this['attachments'];}[_0x2859cf(0x299)](){const _0x10650b=_0x2859cf;if(!this[_0x10650b(0x351)])throw Error(_0x10650b(0x38c));return this[_0x10650b(0x351)];}[_0x2859cf(0x438)](){const _0x422e21=_0x2859cf;if(!this['transferResources'])throw Error(_0x422e21(0x405));return this[_0x422e21(0x1fc)];}[_0x2859cf(0x44b)](){const _0x260d93=_0x2859cf;if(!this[_0x260d93(0x319)])throw Error(_0x260d93(0x422));return this[_0x260d93(0x319)];}['getSliceResources'](){const _0x3a1044=_0x2859cf;if(!this['sliceResources'])throw Error(_0x3a1044(0x267));return this[_0x3a1044(0x433)];}[_0x2859cf(0x463)](){const _0x15dd30=_0x2859cf;if(!this[_0x15dd30(0x4a4)])throw Error(_0x15dd30(0x236));return this[_0x15dd30(0x4a4)];}['getSceneBindGroupLayout'](){const _0x607e36=_0x2859cf;if(!this['sceneBindGroupLayout'])throw Error(_0x607e36(0x187));return this[_0x607e36(0x457)];}[_0x2859cf(0x31b)](){const _0x15aa1e=_0x2859cf;if(!this[_0x15aa1e(0x3c5)])throw Error(_0x15aa1e(0x394));return this[_0x15aa1e(0x3c5)];}[_0x2859cf(0x2fb)](){const _0x44817a=_0x2859cf;if(!this[_0x44817a(0x1fa)])throw Error('WebGPU\x20volume\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20体积绑定布局不可用。');return this[_0x44817a(0x1fa)];}[_0x2859cf(0x35e)](){const _0x1182e7=_0x2859cf;if(!this[_0x1182e7(0x3ec)])throw Error('WebGPU\x20transfer\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20传递函数绑定布局不可用。');return this[_0x1182e7(0x3ec)];}[_0x2859cf(0x47f)](){const _0x50c06f=_0x2859cf;if(!this[_0x50c06f(0x312)])throw Error('WebGPU\x20slice\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20切面绑定布局不可用。');return this[_0x50c06f(0x312)];}['getSceneParamsBuffer'](){const _0x2959fc=_0x2859cf;if(!this['sceneParamsBuffer'])throw Error(_0x2959fc(0x22e));return this['sceneParamsBuffer'];}['getVolumeParamsBuffer'](){const _0x4c89df=_0x2859cf;if(!this['volumeParamsBuffer'])throw Error(_0x4c89df(0x237));return this[_0x4c89df(0x20d)];}};const getAxis=(_0x5f5cfa,_0x203aa4)=>_0x203aa4==='x'?_0x5f5cfa[_0x2859cf(0x1bf)]:_0x203aa4==='y'?_0x5f5cfa['yAxis']:_0x5f5cfa[_0x2859cf(0x203)],clampPosition=(_0x56f194,_0x5840ab,_0xd7ef2d)=>{const _0x3a6872=_0x2859cf;if(!Number['isFinite'](_0xd7ef2d))throw Error(_0x3a6872(0x21d));let _0x420dd6=getAxis(_0x56f194,_0x5840ab),_0x228659=Math[_0x3a6872(0x28e)](_0x420dd6[_0x3a6872(0x1df)],_0x420dd6[_0x3a6872(0x317)]),_0x330b80=Math[_0x3a6872(0x284)](_0x420dd6[_0x3a6872(0x1df)],_0x420dd6[_0x3a6872(0x317)]);return Math[_0x3a6872(0x28e)](_0x330b80,Math[_0x3a6872(0x284)](_0x228659,_0xd7ef2d));},clonePreview=_0x266b12=>_0x266b12?{..._0x266b12}:null,cloneLockedSlice=_0x7efe0c=>({..._0x7efe0c}),validateAxes=_0x4e9f4c=>{const _0x260466=_0x2859cf;for(let _0x499eb6 of[_0x4e9f4c[_0x260466(0x1bf)],_0x4e9f4c[_0x260466(0x1de)],_0x4e9f4c[_0x260466(0x203)]]){if(!Number[_0x260466(0x273)](_0x499eb6[_0x260466(0x1df)])||!Number[_0x260466(0x273)](_0x499eb6[_0x260466(0x317)]))throw Error(_0x260466(0x26f));if(!(Number[_0x260466(0x2dd)](_0x499eb6[_0x260466(0x251)])&&_0x499eb6[_0x260466(0x251)]>0x0))throw Error(_0x260466(0x20b));if(_0x499eb6[_0x260466(0x251)]>0x1&&_0x499eb6[_0x260466(0x1df)]===_0x499eb6[_0x260466(0x317)])throw Error(_0x260466(0x2b9));}},volumeAxisValueToNormalized=(_0x1906e2,_0x24eb63)=>_0x1906e2['start']===_0x1906e2['end']?0x0:(_0x24eb63-_0x1906e2[_0x2859cf(0x1df)])/(_0x1906e2[_0x2859cf(0x317)]-_0x1906e2[_0x2859cf(0x1df)]),normalizedToVolumeAxisValue=(_0x2554c9,_0x1a378b)=>_0x2554c9[_0x2859cf(0x1df)]+_0x1a378b*(_0x2554c9[_0x2859cf(0x317)]-_0x2554c9[_0x2859cf(0x1df)]);var SliceState=class{[_0x2859cf(0x3ae)];['listeners']=new Set();['onLimitReached'];[_0x2859cf(0x1f9)];[_0x2859cf(0x341)];['nextId']=0x1;[_0x2859cf(0x370)]=null;[_0x2859cf(0x3ff)]=[];[_0x2859cf(0x263)]=_0x2859cf(0x229);[_0x2859cf(0x328)];constructor(_0x3a5a89,_0x13c7a2={}){const _0x82c9e6=_0x2859cf;if(validateAxes(_0x3a5a89),this['axes']={'xAxis':{..._0x3a5a89[_0x82c9e6(0x1bf)]},'yAxis':{..._0x3a5a89[_0x82c9e6(0x1de)]},'zAxis':{..._0x3a5a89[_0x82c9e6(0x203)]}},this[_0x82c9e6(0x328)]=_0x13c7a2[_0x82c9e6(0x328)]??0.25,this['depthMode']=_0x13c7a2[_0x82c9e6(0x341)]??_0x82c9e6(0x3cc),this['maxLockedSlices']=_0x13c7a2[_0x82c9e6(0x1f9)]??0xc,this['onLimitReached']=_0x13c7a2[_0x82c9e6(0x3da)],!(this[_0x82c9e6(0x328)]>=0x0&&this[_0x82c9e6(0x328)]<=0x1))throw Error(_0x82c9e6(0x1f8));if(this[_0x82c9e6(0x341)]!==_0x82c9e6(0x3cc)&&this['depthMode']!==_0x82c9e6(0x1dc))throw Error('切面深度模式无效\x20/\x20Slice\x20depth\x20mode\x20is\x20invalid');if(!(Number['isInteger'](this[_0x82c9e6(0x1f9)])&&this['maxLockedSlices']>0x0))throw Error('maxLockedSlices\x20必须是正整数。');}get[_0x2859cf(0x276)](){const _0x2f4e83=_0x2859cf;return clonePreview(this[_0x2f4e83(0x370)]);}get[_0x2859cf(0x21b)](){const _0x3649b2=_0x2859cf;return this[_0x3649b2(0x3ff)][_0x3649b2(0x3c0)](cloneLockedSlice);}get[_0x2859cf(0x483)](){return this['mode'];}get[_0x2859cf(0x47b)](){const _0x188e96=_0x2859cf;return{'preview':this[_0x188e96(0x276)],'lockedSlices':this[_0x188e96(0x21b)],'toolMode':this['mode'],'volumeDimFactor':this[_0x188e96(0x328)]};}['subscribe'](_0x2a90b9){const _0x26d1a9=_0x2859cf;return this[_0x26d1a9(0x428)][_0x26d1a9(0x35c)](_0x2a90b9),_0x2a90b9(this['snapshot']),()=>this[_0x26d1a9(0x428)]['delete'](_0x2a90b9);}get['axisDefinitions'](){const _0x52197e=_0x2859cf;return{'xAxis':{...this[_0x52197e(0x3ae)]['xAxis']},'yAxis':{...this[_0x52197e(0x3ae)][_0x52197e(0x1de)]},'zAxis':{...this[_0x52197e(0x3ae)]['zAxis']}};}[_0x2859cf(0x26d)](_0x48bff2){const _0x14c3e4=_0x2859cf;validateAxes(_0x48bff2),this[_0x14c3e4(0x3ae)]={'xAxis':{..._0x48bff2[_0x14c3e4(0x1bf)]},'yAxis':{..._0x48bff2[_0x14c3e4(0x1de)]},'zAxis':{..._0x48bff2[_0x14c3e4(0x203)]}},this[_0x14c3e4(0x370)]&&(this['currentPreview']['position']=clampPosition(this[_0x14c3e4(0x3ae)],this[_0x14c3e4(0x370)][_0x14c3e4(0x1d4)],this[_0x14c3e4(0x370)]['position'])),this['slices']=this[_0x14c3e4(0x3ff)][_0x14c3e4(0x3c0)](_0x482537=>({..._0x482537,'position':clampPosition(this[_0x14c3e4(0x3ae)],_0x482537['axis'],_0x482537[_0x14c3e4(0x27c)])})),this['notify']();}[_0x2859cf(0x1ef)](_0x5019e5){const _0x287787=_0x2859cf;this['mode']!==_0x5019e5&&(this[_0x287787(0x263)]=_0x5019e5,(_0x5019e5===null||_0x5019e5!==_0x287787(0x229)&&this['currentPreview']?.[_0x287787(0x1d4)]!==_0x5019e5)&&(this[_0x287787(0x370)]=null),this[_0x287787(0x33a)]());}['updatePreview'](_0xf35690,_0x13face){const _0x510bb7=_0x2859cf;if(this[_0x510bb7(0x263)]===null||this['mode']!==_0x510bb7(0x229)&&this[_0x510bb7(0x263)]!==_0xf35690)return;let _0x549765=clampPosition(this[_0x510bb7(0x3ae)],_0xf35690,_0x13face);this['currentPreview']?.[_0x510bb7(0x1d4)]===_0xf35690&&this[_0x510bb7(0x370)][_0x510bb7(0x27c)]===_0x549765||(this['currentPreview']={'axis':_0xf35690,'position':_0x549765},this[_0x510bb7(0x33a)]());}['clearPreview'](){const _0x27a5a3=_0x2859cf;this[_0x27a5a3(0x370)]&&(this[_0x27a5a3(0x370)]=null,this['notify']());}[_0x2859cf(0x3d0)](_0x10d6e6=this[_0x2859cf(0x341)]){const _0x5d5ccb=_0x2859cf;return this[_0x5d5ccb(0x370)]?this[_0x5d5ccb(0x476)](this[_0x5d5ccb(0x370)][_0x5d5ccb(0x1d4)],this[_0x5d5ccb(0x370)][_0x5d5ccb(0x27c)],_0x10d6e6):null;}[_0x2859cf(0x476)](_0x2d86a5,_0x4a0aef,_0x53c477=this[_0x2859cf(0x341)]){const _0x561501=_0x2859cf;if(this[_0x561501(0x3ff)]['length']>=this[_0x561501(0x1f9)])return this[_0x561501(0x3da)]?.(this[_0x561501(0x1f9)]),null;let _0x250106={'id':'volume-slice-'+this[_0x561501(0x46f)],'axis':_0x2d86a5,'position':clampPosition(this[_0x561501(0x3ae)],_0x2d86a5,_0x4a0aef),'depthMode':_0x53c477,'visible':!0x0};return this[_0x561501(0x46f)]+=0x1,this['slices']=[...this['slices'],_0x250106],this[_0x561501(0x33a)](),cloneLockedSlice(_0x250106);}[_0x2859cf(0x39d)](_0x3df579,_0x225ad3){const _0x5c98aa=_0x2859cf;let _0x21415c=this[_0x5c98aa(0x3ff)][_0x5c98aa(0x248)](_0x5a39ce=>_0x5a39ce['id']===_0x3df579);if(_0x21415c<0x0)return;let _0x51c5cc=this[_0x5c98aa(0x3ff)][_0x21415c],_0x21c175=clampPosition(this[_0x5c98aa(0x3ae)],_0x51c5cc['axis'],_0x225ad3);_0x21c175!==_0x51c5cc[_0x5c98aa(0x27c)]&&(this['slices']=this[_0x5c98aa(0x3ff)]['map'](_0x50cd7d=>_0x50cd7d['id']===_0x3df579?{..._0x50cd7d,'position':_0x21c175}:_0x50cd7d),this[_0x5c98aa(0x33a)]());}[_0x2859cf(0x2cb)](_0x2687c5){const _0x19472d=_0x2859cf;let _0x490ae6=this['slices'][_0x19472d(0x29e)](_0x55e2ea=>_0x55e2ea['id']!==_0x2687c5);_0x490ae6[_0x19472d(0x326)]!==this['slices']['length']&&(this['slices']=_0x490ae6,this['notify']());}[_0x2859cf(0x41d)](){const _0x546c10=_0x2859cf;this[_0x546c10(0x3ff)][_0x546c10(0x326)]!==0x0&&(this[_0x546c10(0x3ff)]=[],this[_0x546c10(0x33a)]());}[_0x2859cf(0x33a)](){const _0x33d5ae=_0x2859cf;let _0x3fe5e9=this[_0x33d5ae(0x47b)];for(let _0x29ae32 of this[_0x33d5ae(0x428)])_0x29ae32(_0x3fe5e9);}};function _0xa78c(){const _0x568040=['WebGPU\x20volume\x20atlas\x20has\x20no\x20evictable\x20slot.\x20WebGPU\x20体积图集没有可驱逐的槽位。','writeBuffer','markers','brickSortCount','skippedSampleCount','brickHeight','sliceDepthMode','176188HStlBu','maxTextureDimension3D','distance','static','Volume\x20brick\x20upload\x20was\x20superseded\x20by\x20a\x20new\x20source.\x20体积砖上传已被新数据源替代。','removeSlice','endX','toLowerCase','The\x20maximum\x20locked\x20slice\x20count\x20has\x20been\x20reached.\x20已达到最大锁定切面数量。','sliceId','pointercancel','getSceneParamsBuffer','moved','destroyed','actualFrameIntervalMilliseconds','vertexCount','line-list','Unable\x20to\x20allocate\x20a\x20WebGPU\x20R32F\x20volume\x20atlas\x20within\x20device\x20limits.\x20无法在设备限制内分配\x20WebGPU\x20R32F\x20体积图集。','handlePointerDown','\x20must\x20be\x20a\x20non-negative\x20finite\x20value.\x20','getEffectiveQuality','exp','clearPageEntry','isInteger','minZ','unfilterable-float','proxyModelMatrix','cachedAxes','skippedSamples','路线剖面\x20id\x20不能为空。','timeCount','WebGPU\x20volume\x20resources\x20were\x20released.\x20WebGPU\x20体积资源已释放。','Returned\x20volume\x20chunk\x20timeIndex\x20does\x20not\x20match\x20the\x20request.\x20返回体积分块的时间索引与请求不一致。','split','composite','volume\x20scene\x20mesh\x20','layout','syncPreview','cartesian','dispatchWorkgroups','flushBrickSchedule','.\x20体积\x20timeIndex\x20越界。','occupied','balanced','format','sourceGeneration','clipBox','requestBrickSchedule','state','extent','rgb(','transform','triangle-list','getVolumeBindGroupLayout','volume\x20transfer\x20bind\x20group\x20layout','autoFrameCount','cachedProfiles','Volume\x20valueScale\x20must\x20be\x20finite.\x20体积\x20valueScale\x20必须是有限数值。','previewMarker','WebGPU\x20volume\x20transfer\x20resources\x20are\x20incomplete.\x20WebGPU\x20体积传递函数资源不完整。','endsWith','路线剖面\x20','levelCount','Volume\x20opacity\x20stops\x20cannot\x20be\x20empty.\x20体积透明度节点不能为空。','abort','readRange','residentBrickCount','uploadStagingBuffer','Count','volume\x20slice\x20bind\x20group\x20layout','background','pendingKeys','3px\x206px','projection','onInteractionStart','frameInFlight','sliceBindGroupLayout','prepared','clear','transparent','1px\x20solid\x20rgb(255\x20255\x20255\x20/\x2065%)','end','mouse','profileResources','minY','getGeometryBindGroupLayout','个色标范围的\x20min\x20必须小于\x20max','initialized','visible','render','zIndex','aborted','createBuffer','requestRender','\x20axis\x20must\x20contain\x20two\x20different\x20finite\x20endpoints.\x20','.\x20创建\x20WebGPU\x20体积管线失败。','length','validation','volumeDimFactor','getMappedRange','overlayContainer','maximumPitch','createSliceState','slotCountY','plateColor','beginComputePass','heightScaled','slicePlateColor','clearPreview','cacheOnSuccess','levelStart','uploadPump','has','Volume\x20Z\x20axis','initializing','function','notify','memoryTargetBytes','colorValuesBuffer','premultiplied','touch','one','minimumPitchDegrees','depthMode','The\x20current\x20WebGPU\x20volume\x20atlas\x20requires\x20halo:\x201.\x20当前\x20WebGPU\x20体积图集要求\x20halo\x20为\x201。','configureModel','configureSourceResources','isSafeInteger','then','translate(-50%,\x20-100%)','hypot','相机宽高比必须是大于\x200\x20的有限数。','orthographic','Volume\x20opacity\x20stops\x20must\x20be\x20between\x20zero\x20and\x20one.\x20体积透明度色标必须位于零到一之间。','handleFrameAvailable','rotateSpeed','\x20must\x20contain\x20sixteen\x20finite\x20values.\x20','statistics','rgb(17\x2024\x2039\x20/\x2082%)','atlas','cameraPosition','\x20至少需要两个高度层。','createView','destroy','findAxisHit','recreateSceneBindGroup','device','Volume\x20opacity\x20stop\x20values\x20must\x20be\x20finite\x20and\x20strictly\x20increasing.\x20体积透明度节点值必须有限且严格递增。','coreRange','lastSubmittedFrameTimestamp','add','abs','getTransferBindGroupLayout','minimumPitch','\x20requires\x20','center','Volume\x20brick\x20','.\x20体积逻辑砖块索引无效。','coordinate','\x20的\x20opacity\x20必须位于\x200\x20到\x201。','sceneLinePipeline','store','Failed\x20to\x20create\x20a\x20WebGPU\x20canvas\x20context\x20for\x20the\x20volume\x20scene.\x20无法为体积场景创建\x20WebGPU\x20Canvas\x20上下文。','frameRequest','getBoundingClientRect','VERTEX','Returned\x20volume\x20chunk\x20dimensions\x20do\x20not\x20match\x20its\x20range.\x20返回体积分块尺寸与范围不一致。','attachments','setAspect','Alpha\x20颜色通道必须在0\x20~\x201之间','currentPreview','mixed','Volume\x20brick\x20upload\x20became\x20stale.\x20体积砖上传已过期。','finally','get','WebGPU\x20volume\x20page\x20table\x20is\x20unavailable.\x20WebGPU\x20体积页表不可用。','size','append','createGpuResources','padding','rgb\x20颜色通道数量不正确:\x20','opacityStops','atan2','resetBrickRequests','pendingBrickUploads','\x20noData\x20must\x20be\x20finite\x20or\x20NaN.\x20','create','0.72','43743fyzyoB','18toiNId','volume\x20frame\x20capture','interactionController','volume\x20metadata\x20params','viewProjection','.\x20体积分块数值数量与尺寸不一致。','devicePixelRatio','locked','opacityValuesBuffer','WebGPU\x20volume\x20source\x20must\x20be\x20configured\x20before\x20uploading\x20bricks.\x20上传砖块前必须配置\x20WebGPU\x20体积数据源。','uploadStagingBufferSize','positions','pointerId','uniformUpdateCount','atlasCapacity','viewProjectionMatrix','\x20must\x20be\x20a\x20positive\x20finite\x20value.\x20','WebGPU\x20geometry\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20几何绑定布局不可用。','Volume\x20opacity\x20stops\x20must\x20be\x20sorted\x20by\x20value.\x20体积透明度色标必须按数值升序排列。','read-only-storage','colorStops\x20不能为空','getAttachments','\x20必须是非负有限数值。','push','getPageTableBuffer','cachedSlices','updateLockedSlice','Volume\x20slice\x20','hitTolerance','#fff','Invalid\x20logical\x20volume\x20brick\x20index:\x20','style','stopPropagation','autoFrameIntervalTotal','WebGPU\x20volume\x20device\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20device\x20尚未初始化。','toUpperCase','interactionRenderScale','rowsPerImage','clientHeight','getAtlasTexture','level','\x20must\x20contain\x20position\x20and\x20RGBA\x20values\x20for\x20every\x20vertex.\x20场景网格顶点必须包含位置和\x20RGBA。','createPipelines','axes','beginLockedSliceDrag','centerEcefScaled','minX','budgetLimited','createBindGroup','stepLength','volumeBindGroup','volume\x20scene\x20bind\x20group','Volume\x20brick\x20halo\x20must\x20be\x20a\x20positive\x20integer.\x20体积分块\x20halo\x20必须是正整数。','destroyResources','renderMode','sceneSlicePipeline','Volume\x20chunk\x20','volume\x20scene\x20params','preventDefault','Failed\x20to\x20acquire\x20a\x20WebGPU\x20adapter\x20for\x20the\x20volume\x20scene.\x20无法为体积场景获取\x20WebGPU\x20adapter。','\x20端点必须是有限数值。','map','requestControllers','touchAction','endY','performance','geometryBindGroupLayout','float32x3','clipMinimum','volume\x20scene\x20bind\x20group\x20layout','wheel','atlasTextures','coordinateSystem','scene','sort','buffer','round','lockPreview','encodeVolumePass','frameIndex','updateSlice','Volume\x20chunk\x20request\x20was\x20aborted.\x20体积块请求已取消。','gap','\x20无效。','display','brickDepth','coreSampleCount','onLimitReached','isNaN','volume\x20brick\x20reusable\x20upload\x20staging','uploadBrick','height','createComputePipeline','20xhTNfP','STORAGE','sqrt','axisDefinitions','bindSliceInteraction','volume\x20scene\x20frame','residentBySlotIndex','includes','slotCountZ','limits','depth32float','renderDirty','transferBindGroupLayout','resources','watchDeviceLost','Volume\x20timeIndex\x20is\x20out\x20of\x20range:\x20','submittedFrameCount','one-minus-src-alpha','fovYDegrees','setSource','Volume\x20color\x20and\x20opacity\x20stops\x20cannot\x20be\x20empty.\x20体积颜色和透明度色标不能为空。','createLayout','Scene\x20mesh\x20','main','float32x4','bindSliceState','tan','createBindGroupLayout','BYTES_PER_ELEMENT','\x20必须是正整数。','hideAllMarkers','slices','eventDisposers','aria-label','latitudeRadians','Volume\x20X\x20axis','encodePreparedBrickUpload','WebGPU\x20transfer\x20resources\x20are\x20unavailable.\x20WebGPU\x20传递函数资源不可用。','showDebugGeometry','bgra8unorm','volume\x20atlas\x20clear\x20pass','volume-slice-preview','resolve','pointer','path','unmap','perspective','axisHysteresis','scheduleBricks','onSliceError','WebGPU\x20volume\x20format\x20is\x20not\x20initialized.\x20WebGPU\x20体积格式尚未初始化。','left','value','managed','profiles',',\x20count=','generation','opacityBuffer','\x20轴必须包含两个不同的有限端点。','lost','valuesEqual','clearLockedSlices','webgpu','pixelRatioCap','brickWidth','previousContainerPosition','WebGPU\x20profile\x20resources\x20are\x20unavailable.\x20WebGPU\x20剖面资源不可用。','textContent','resourceRebuildCount','prepareBrickUpload','slotIndex','type','listeners','colorMode','less','viewportHeight','startX','depth','geometryBindGroup','verticalScale','high-performance','vertices','flushSliceState','sliceResources','xCount','positionMarker','ready','Volume\x20Y\x20axis','getTransferResources','skippedCells','153241MjDmVo','colorInputs','WebGPU\x20volume\x20atlas\x20is\x20not\x20configured.\x20WebGPU\x20体积图集尚未配置。','getSceneBindGroupLayout','volume\x20brick\x20atlas\x20','slotCount','2422984kzpxGr','revision','semiMajorAxisScaled','remove','WebGPU\x20is\x20required\x20for\x20the\x20volume\x20scene\x20but\x20is\x20unavailable.\x20体积场景需要\x20WebGPU,但当前环境不可用。','acquireSlot','opacity','color','camera','WebGPU\x20scene\x20attachments\x20are\x20unavailable.\x20WebGPU\x20场景附件不可用。','longitudeRadians','getProfileResources','name','uploadGeneration','setBindGroup','bindGroup','mapAsync','activeInteractions','setAttribute','toFixed','countY','colorStopCount','width','sceneBindGroupLayout','cameraState','capacity','volumeCamera','AbortError','context','parseInt','heights','Volume\x20timeCount','reject','volume\x20scene\x20mesh\x20shader','Volume\x20source\x20must\x20provide\x20readChunk().\x20体积数据源必须提供\x20readChunk()。','getAxisResources','drawSlices','far','2037658Ondxzh','depthTexture','previousAxis','rejectPendingBrickUploads','autoQuality','aspect','modelMatrix','bufferOffset','relative','nextId','entries','scheduleUploadPump','chunk','不支持的\x20hex\x20颜色格式:\x20','frameAvailableCallback','onSlicesChange','lockSlice','interactionElement','startsWith','releaseGpuResources','不支持的\x20rgb\x20颜色格式:\x20','snapshot','volume\x20brick\x20page\x20table','beginRenderPass','syncLockedMarkers','getSliceBindGroupLayout','getBindGroupLayout','interactionStepScale','READ','toolMode','keys','flex','删除切面','pageTableValues','startY','getStepLength','相机裁剪距离必须满足\x200\x20<=\x20near\x20<\x20far。','handlePointerLeave','atlasIndex','cacheBrickUpload','pointermove','sliceInteraction','uploadedBrickCount','volume\x20atlas\x20clear\x20bind\x20group','zoomSpeed','pageTableBuffer','pan','requestAdapter','pushErrorScope','button','near','hitRadius','22CTwySW','setFrameAvailableCallback','floor','geographicTransform','\x20position\x20must\x20be\x20normalized\x20to\x20zero\x20through\x20one.\x20体积切面位置必须归一化到零至一。','logicalBrickCount','memoryLimitBytes','rebuildProfiles','enqueueBrickUpload','COPY_DST','axisResources','onInteractionEnd','vertexMain','WebGPU\x20scene\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20场景绑定布局不可用。','formatPosition','desiredKeys','volume-bounds','volume\x20atlas\x20clear','recordFrameInterval','Volume\x20opacity\x20must\x20be\x20within\x20[0,\x201].\x20体积透明度必须位于\x20[0,\x201]。','delete','getDevice','writeParams','logicalIndex','axisHysteresisPixels','volume\x20atlas\x20clear\x20shader','maximumDistance','getCanvas','WebGPU\x20volume\x20frame\x20capture\x20failed:\x20','descriptors','find','nowrap','inherit','depthView','destroyBuffers','TEXTURE_BINDING','15jVIYZF','resize','configure','createValues','bytesPerRow','getContext','upload','drawMeshes','WebGPU\x20volume\x20canvas\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20Canvas\x20尚未初始化。','\x20必须是大于\x200\x20的有限数。','whiteSpace','getVolumeParamsBuffer','clientX','unsubscribe','topology','colorStops','volume\x20geometry\x20bind\x20group\x20layout','WebGPU\x20volume\x20renderer\x20is\x20not\x20ready\x20for\x20frame\x20capture.\x20WebGPU\x20体积渲染器尚不能读取帧。','1170504IodYfd','不支持的颜色格式:\x20','volumeMetadata','initialize','RGB\x20颜色通道必须在\x200\x20~\x20255\x20之间','ceil','getInteractionKind','some','external','maxZ','finish','sceneDepthView','uniform','cos','valueScale','xAxis','.\x20体积分块\x20','setProfiles','container','createElement','viewportWidth','trim','WebGPU\x20volume\x20device\x20was\x20lost:\x20','geographic-wgs84','beginInteraction','minimumDistance','encodeOverlayPass','gpu','createLockedMarker','values','getEffectiveRenderScale',',\x20size=','hasPointerCapture','maxX','WebGPU\x20volume\x20atlas\x20texture\x20is\x20unavailable.\x20WebGPU\x20体积图集纹理不可用。','COPY_SRC','axis','activePointer','next','memoryHardLimitBytes','createCommandEncoder','pointerup','idle','draw','always-visible','message','yAxis','start','createTexture','overlayTrianglePipeline','sceneParamsBuffer','volumePipeline','options','from','colorBuffer','FRAGMENT','volume\x20slice\x20shader','countX','densityScale','atlasLayout','\x20values\x20but\x20received\x20','error','WebGPU\x20volume\x20bricks\x20require\x20halo\x201.\x20WebGPU\x20体积砖块要求\x20halo\x20为\x201。','setToolMode','bindControls','adapter','sceneTrianglePipeline','contextmenu','Volume\x20revision\x20must\x20be\x20a\x20non-negative\x20integer.\x20体积\x20revision\x20必须是非负整数。','div','WebGPU\x20volume\x20scene\x20dimensions\x20must\x20be\x20positive\x20integers.\x20WebGPU\x20体积场景尺寸必须是正整数。','1037772FDflNG','volumeDimFactor\x20必须位于\x200\x20到\x201。','maxLockedSlices','volumeBindGroupLayout','applyHit','transferResources','setSlices','clientY','cursor','setTransfer','uploadBatchCount','lastTimingFrameTimestamp','zAxis','metadata','removeEventListener','createShaderModule','update','setPipeline','touchBricks','createProjectionMatrix','切面轴采样数必须是正整数。','\x20with\x20one\x20sample\x20must\x20use\x20equal\x20endpoints.\x20','volumeParamsBuffer','相机裁剪距离必须满足\x200\x20<\x20near\x20<\x20far。','overlaySlicePipeline','atlasViews','shape','sourceYStart','.\x20WebGPU\x20体积设备已丢失。','absolute','opacityStopCount','\x20的\x20values\x20长度与\x20path、heights\x20不匹配。','signal','无法归一化长度为零的三维向量。','noData','\x20is\x20invalid:\x20','lockedSlices','sourceYCount','切面位置必须是有限数。','key','\x20count','normalizationMeters','maximum','UNIFORM','overlayLinePipeline','updatePreview','maxY','slice','\x20只有一个采样点时端点必须相等。','slotCountX','auto','WebGPU\x20volume\x20page\x20table\x20exceeds\x20the\x20configured\x20memory\x20limit.\x20WebGPU\x20体积页表超过显存限制。','splice','volume\x20scene\x20geometry\x20pass','configureSource','WebGPU\x20scene\x20params\x20buffer\x20is\x20unavailable.\x20WebGPU\x20场景参数\x20Buffer\x20不可用。','deltaY','\x20必须是正有限数值。','xStart','\x20plate\x20color\x20must\x20use\x20values\x20from\x20zero\x20through\x20one.\x20体积切面底板颜色必须位于零至一。','handlePointerMove','isInteracting','loadedKeys','WebGPU\x20axis\x20resources\x20are\x20unavailable.\x20WebGPU\x20轴线资源不可用。','WebGPU\x20volume\x20params\x20buffer\x20is\x20unavailable.\x20WebGPU\x20体积参数\x20Buffer\x20不可用。','\x20must\x20be\x20a\x20positive\x20integer.\x20','endInteraction','captureFrame','navigationMode','canvas','pointerleave','renderer','subarray','markerOverlay','updateTransferResources','byteLength','quality','透视相机参数无效。','volume\x20frame\x20readback','dolly','kind','findIndex','矩阵不可逆。','queue','volume\x20brick\x20upload\x20batch\x20flush','maximumUploadBatchBytes','top','volume\x20color\x20stop\x20colors','lifecycleState','replace','count','set','residentByLogicalIndex','getFormat','lastFrameTimeMilliseconds','onSubmittedWorkDone','verticalScale\x20must\x20be\x20a\x20positive\x20finite\x20value.\x20verticalScale\x20必须是大于\x200\x20的有限数。','0\x202px','fill','subscribe','timeIndex','font','inverseModelMatrix','cachedBricks','baseModelMatrix','WebGPU\x20volume\x20atlas\x20resources\x20are\x20incomplete.\x20WebGPU\x20体积图集资源不完整。','border','borderRadius','mode','centerEcef','fragmentMain','sin','WebGPU\x20slice\x20resources\x20are\x20unavailable.\x20WebGPU\x20切面资源不可用。','volume\x20raymarch\x20pass','12px/1.2\x20sans-serif','WebGPU\x20volume\x20device\x20restoration\x20failed.\x20WebGPU\x20体积设备恢复失败。','4px','clipMaximum','setAxes','indices','切面轴端点必须是有限数。','Failed\x20to\x20create\x20WebGPU\x20volume\x20pipelines:\x20','Height\x20/\x20高度','createPipelineLayout','isFinite','\x20noData\x20必须是有限数值或\x20NaN。','renderScale','preview','个色标范围不能是NaN','createRenderPipeline','popErrorScope','catch','wgs84','position','powerPreference','matrices','pendingSliceSnapshot','getUploadStagingBuffer','相机宽高比必须大于\x200。','countZ','initializationGeneration','max','lastUsedFrame','load','source','brickScheduleDirty','now','panSpeed','Geographic\x20WGS84\x20volume\x20scenes\x20manage\x20their\x20own\x20model\x20transform.\x20WGS84\x20地理体积场景自行管理模型变换。','\x20with\x20multiple\x20samples\x20must\x20have\x20a\x20non-zero\x20step.\x20','orbit','min','setCamera','volume-axes','updateAutoQuality','writeVolumeParams','pointerdown','processBrickUploads','clientWidth','forEach','volume\x20color\x20stop\x20values','sliceState','getAtlas','encodeScenePass','\x20的\x20path\x20包含非有限坐标。','addEventListener','volume\x20opacity\x20stop\x20values','filter','volume\x20slice\x20','A\x20destroyed\x20volume\x20scene\x20cannot\x20capture\x20a\x20frame.\x20已销毁的体积场景不能读取帧。','smooth','WRITE','backend','setState','submit','target','clearAtlasTexture','struct\x20SceneParams\x20{\x0a\x20\x20\x20\x20viewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseViewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20modelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseModelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20cameraPosition:\x20vec4f,\x0a\x20\x20\x20\x20viewport:\x20vec4f,\x0a\x20\x20\x20\x20clipMinimum:\x20vec4f,\x0a\x20\x20\x20\x20clipMaximum:\x20vec4f,\x0a\x20\x20\x20\x20render:\x20vec4f,\x0a\x20\x20\x20\x20transfer:\x20vec4f,\x0a\x20\x20\x20\x20geographic0:\x20vec4f,\x0a\x20\x20\x20\x20geographic1:\x20vec4f,\x0a\x20\x20\x20\x20geographic2:\x20vec4f,\x0a}\x0a\x0astruct\x20VolumeParams\x20{\x0a\x20\x20\x20\x20dimensions:\x20vec4u,\x0a\x20\x20\x20\x20brickInterior:\x20vec4u,\x0a\x20\x20\x20\x20brickCount:\x20vec4u,\x0a\x20\x20\x20\x20atlasSlots:\x20vec4u,\x0a\x20\x20\x20\x20atlasDimensions:\x20vec4u,\x0a\x20\x20\x20\x20valueMeta:\x20vec4f,\x0a}\x0a\x0astruct\x20PageTable\x20{\x0a\x20\x20\x20\x20values:\x20array<vec4u>,\x0a}\x0a\x0astruct\x20FloatValues\x20{\x0a\x20\x20\x20\x20values:\x20array<f32>,\x0a}\x0a\x0astruct\x20Colors\x20{\x0a\x20\x20\x20\x20values:\x20array<vec4f>,\x0a}\x0a\x0astruct\x20VolumeSample\x20{\x0a\x20\x20\x20\x20value:\x20f32,\x0a\x20\x20\x20\x20valid:\x20bool,\x0a}\x0a\x0astruct\x20RayInterval\x20{\x0a\x20\x20\x20\x20minimum:\x20f32,\x0a\x20\x20\x20\x20maximum:\x20f32,\x0a\x20\x20\x20\x20valid:\x20bool,\x0a}\x0a\x0a@group(0)\x20@binding(0)\x20var<uniform>\x20scene:\x20SceneParams;\x0a@group(0)\x20@binding(1)\x20var\x20sceneDepth:\x20texture_depth_2d;\x0a@group(1)\x20@binding(0)\x20var\x20volumeAtlas0:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(1)\x20var\x20volumeAtlas1:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(2)\x20var\x20volumeAtlas2:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(3)\x20var\x20volumeAtlas3:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(4)\x20var\x20volumeAtlas4:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(5)\x20var\x20volumeAtlas5:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(6)\x20var\x20volumeAtlas6:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(7)\x20var\x20volumeAtlas7:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(8)\x20var<storage,\x20read>\x20pageTable:\x20PageTable;\x0a@group(1)\x20@binding(9)\x20var<uniform>\x20volume:\x20VolumeParams;\x0a@group(2)\x20@binding(0)\x20var<storage,\x20read>\x20colorStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(1)\x20var<storage,\x20read>\x20colorStopColors:\x20Colors;\x0a@group(2)\x20@binding(2)\x20var<storage,\x20read>\x20opacityStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(3)\x20var<storage,\x20read>\x20opacityStopAlphas:\x20FloatValues;\x0a\x0afn\x20invalidVolumeSample()\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(0.0,\x20false);\x0a}\x0a\x0afn\x20validVolumeSample(value:\x20f32)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(value,\x20true);\x0a}\x0a\x0afn\x20transformPoint(matrix:\x20mat4x4f,\x20point:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20let\x20transformed\x20=\x20matrix\x20*\x20vec4f(point,\x201.0);\x0a\x20\x20\x20\x20return\x20transformed.xyz\x20/\x20transformed.w;\x0a}\x0a\x0afn\x20reconstructWorldPosition(ndc:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20return\x20transformPoint(scene.inverseViewProjection,\x20ndc);\x0a}\x0a\x0a//\x20地理模式将局部\x20ECEF\x20采样点反算为经纬高归一化坐标;代理盒仅限制射线范围,不决定体积形状。\x0a//\x20Geographic\x20mode\x20converts\x20each\x20local\x20ECEF\x20sample\x20back\x20to\x20normalized\x20longitude,\x20latitude,\x20and\x20altitude;\x20the\x20proxy\x20box\x20only\x20limits\x20the\x20ray\x20interval\x20and\x20does\x20not\x20define\x20the\x20volume\x20shape.\x0afn\x20worldToVolume(worldPosition:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20transformPoint(scene.inverseModelMatrix,\x20worldPosition);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20ecef\x20=\x20worldPosition\x20+\x20scene.geographic0.yzw;\x0a\x20\x20\x20\x20let\x20semiMajor\x20=\x20scene.geographic1.x;\x0a\x20\x20\x20\x20let\x20semiMinor\x20=\x20scene.geographic1.y;\x0a\x20\x20\x20\x20let\x20eccentricitySquared\x20=\x201.0\x20-\x20semiMinor\x20*\x20semiMinor\x20/\x20(semiMajor\x20*\x20semiMajor);\x0a\x20\x20\x20\x20let\x20secondEccentricitySquared\x20=\x20(semiMajor\x20*\x20semiMajor\x20-\x20semiMinor\x20*\x20semiMinor)\x20/\x20(semiMinor\x20*\x20semiMinor);\x0a\x20\x20\x20\x20let\x20horizontal\x20=\x20length(ecef.xy);\x0a\x20\x20\x20\x20let\x20theta\x20=\x20atan2(ecef.z\x20*\x20semiMajor,\x20horizontal\x20*\x20semiMinor);\x0a\x20\x20\x20\x20let\x20thetaSin\x20=\x20sin(theta);\x0a\x20\x20\x20\x20let\x20thetaCos\x20=\x20cos(theta);\x0a\x20\x20\x20\x20let\x20latitude\x20=\x20atan2(\x0a\x20\x20\x20\x20\x20\x20\x20\x20ecef.z\x20+\x20secondEccentricitySquared\x20*\x20semiMinor\x20*\x20thetaSin\x20*\x20thetaSin\x20*\x20thetaSin,\x0a\x20\x20\x20\x20\x20\x20\x20\x20horizontal\x20-\x20eccentricitySquared\x20*\x20semiMajor\x20*\x20thetaCos\x20*\x20thetaCos\x20*\x20thetaCos\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20let\x20latitudeSin\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20let\x20primeVerticalRadius\x20=\x20semiMajor\x20/\x20sqrt(1.0\x20-\x20eccentricitySquared\x20*\x20latitudeSin\x20*\x20latitudeSin);\x0a\x20\x20\x20\x20let\x20height\x20=\x20horizontal\x20/\x20max(0.000001,\x20abs(cos(latitude)))\x20-\x20primeVerticalRadius;\x0a\x20\x20\x20\x20let\x20longitude\x20=\x20atan2(ecef.y,\x20ecef.x);\x0a\x20\x20\x20\x20return\x20vec3f(\x0a\x20\x20\x20\x20\x20\x20\x20\x20(longitude\x20-\x20scene.geographic1.z)\x20/\x20(scene.geographic1.w\x20-\x20scene.geographic1.z),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(height\x20-\x20scene.geographic2.z)\x20/\x20(scene.geographic2.w\x20-\x20scene.geographic2.z),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(latitude\x20-\x20scene.geographic2.x)\x20/\x20(scene.geographic2.y\x20-\x20scene.geographic2.x)\x0a\x20\x20\x20\x20);\x0a}\x0a\x0afn\x20proxyToVolume(proxyPosition:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20proxyPosition;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20worldToVolume(transformPoint(scene.modelMatrix,\x20proxyPosition));\x0a}\x0a\x0afn\x20isInsideVolume(position:\x20vec3f)\x20->\x20bool\x20{\x0a\x20\x20\x20\x20return\x20all(position\x20>=\x20scene.clipMinimum.xyz)\x20&&\x20all(position\x20<=\x20scene.clipMaximum.xyz);\x0a}\x0a\x0afn\x20intersectAxis(origin:\x20f32,\x20direction:\x20f32,\x20minimumValue:\x20f32,\x20maximumValue:\x20f32)\x20->\x20vec2f\x20{\x0a\x20\x20\x20\x20if\x20(abs(direction)\x20<\x200.000001)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(origin\x20<\x20minimumValue\x20||\x20origin\x20>\x20maximumValue)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec2f(1.0,\x20-1.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec2f(-1e20,\x201e20);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20first\x20=\x20(minimumValue\x20-\x20origin)\x20/\x20direction;\x0a\x20\x20\x20\x20let\x20second\x20=\x20(maximumValue\x20-\x20origin)\x20/\x20direction;\x0a\x20\x20\x20\x20return\x20vec2f(min(first,\x20second),\x20max(first,\x20second));\x0a}\x0a\x0afn\x20intersectClipBox(origin:\x20vec3f,\x20direction:\x20vec3f)\x20->\x20RayInterval\x20{\x0a\x20\x20\x20\x20let\x20x\x20=\x20intersectAxis(origin.x,\x20direction.x,\x20scene.clipMinimum.x,\x20scene.clipMaximum.x);\x0a\x20\x20\x20\x20let\x20y\x20=\x20intersectAxis(origin.y,\x20direction.y,\x20scene.clipMinimum.y,\x20scene.clipMaximum.y);\x0a\x20\x20\x20\x20let\x20z\x20=\x20intersectAxis(origin.z,\x20direction.z,\x20scene.clipMinimum.z,\x20scene.clipMaximum.z);\x0a\x20\x20\x20\x20let\x20minimumDistance\x20=\x20max(max(x.x,\x20y.x),\x20z.x);\x0a\x20\x20\x20\x20let\x20maximumDistance\x20=\x20min(min(x.y,\x20y.y),\x20z.y);\x0a\x20\x20\x20\x20return\x20RayInterval(max(0.0,\x20minimumDistance),\x20maximumDistance,\x20maximumDistance\x20>=\x20max(0.0,\x20minimumDistance));\x0a}\x0a\x0afn\x20getPageIndex(brick:\x20vec3u)\x20->\x20u32\x20{\x0a\x20\x20\x20\x20return\x20brick.x\x20+\x20brick.y\x20*\x20volume.brickCount.x\x20+\x20brick.z\x20*\x20volume.brickCount.x\x20*\x20volume.brickCount.y;\x0a}\x0a\x0afn\x20getSlotCoordinate(slotIndex:\x20u32)\x20->\x20vec3u\x20{\x0a\x20\x20\x20\x20let\x20layerSize\x20=\x20volume.atlasSlots.x\x20*\x20volume.atlasSlots.y;\x0a\x20\x20\x20\x20let\x20z\x20=\x20slotIndex\x20/\x20layerSize;\x0a\x20\x20\x20\x20let\x20remainder\x20=\x20slotIndex\x20-\x20z\x20*\x20layerSize;\x0a\x20\x20\x20\x20let\x20y\x20=\x20remainder\x20/\x20volume.atlasSlots.x;\x0a\x20\x20\x20\x20let\x20x\x20=\x20remainder\x20-\x20y\x20*\x20volume.atlasSlots.x;\x0a\x20\x20\x20\x20return\x20vec3u(x,\x20y,\x20z);\x0a}\x0a\x0afn\x20loadAtlasValue(atlasIndex:\x20u32,\x20coordinate:\x20vec3i)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x200u)\x20{\x20return\x20textureLoad(volumeAtlas0,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x201u)\x20{\x20return\x20textureLoad(volumeAtlas1,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x202u)\x20{\x20return\x20textureLoad(volumeAtlas2,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x203u)\x20{\x20return\x20textureLoad(volumeAtlas3,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x204u)\x20{\x20return\x20textureLoad(volumeAtlas4,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x205u)\x20{\x20return\x20textureLoad(volumeAtlas5,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x206u)\x20{\x20return\x20textureLoad(volumeAtlas6,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20return\x20textureLoad(volumeAtlas7,\x20coordinate,\x200).r;\x0a}\x0a\x0afn\x20loadAtlasVoxel(voxel:\x20vec3i,\x20owningBrick:\x20vec3u)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20page\x20=\x20pageTable.values[getPageIndex(owningBrick)];\x0a\x0a\x20\x20\x20\x20if\x20(page.x\x20==\x200u\x20||\x20page.z\x20==\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20slot\x20=\x20getSlotCoordinate(page.x\x20-\x201u);\x0a\x20\x20\x20\x20let\x20physicalBrick\x20=\x20volume.brickInterior.xyz\x20+\x20vec3u(2u);\x0a\x20\x20\x20\x20let\x20brickStart\x20=\x20vec3i(owningBrick\x20*\x20volume.brickInterior.xyz);\x0a\x20\x20\x20\x20let\x20local\x20=\x20voxel\x20-\x20brickStart\x20+\x20vec3i(1);\x0a\x20\x20\x20\x20let\x20atlasCoordinate\x20=\x20vec3i(slot\x20*\x20physicalBrick)\x20+\x20local;\x0a\x20\x20\x20\x20let\x20value\x20=\x20loadAtlasValue(page.w,\x20atlasCoordinate);\x0a\x0a\x20\x20\x20\x20if\x20(value\x20!=\x20value\x20||\x20(volume.valueMeta.y\x20>\x200.5\x20&&\x20value\x20==\x20volume.valueMeta.x))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20validVolumeSample(value);\x0a}\x0a\x0afn\x20sampleVolume(modelPosition:\x20vec3f)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(modelPosition,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20normalized\x20*\x20vec3f(volume.dimensions.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20baseVoxel\x20=\x20vec3i(floor(voxel));\x0a\x20\x20\x20\x20let\x20maximumVoxel\x20=\x20vec3i(volume.dimensions.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20nextVoxel\x20=\x20min(baseVoxel\x20+\x20vec3i(1),\x20maximumVoxel);\x0a\x20\x20\x20\x20let\x20fraction\x20=\x20voxel\x20-\x20vec3f(baseVoxel);\x0a\x20\x20\x20\x20let\x20owningBrick\x20=\x20min(vec3u(max(baseVoxel,\x20vec3i(0)))\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20c000\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20baseVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c100\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c010\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c110\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c001\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c101\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c011\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c111\x20=\x20loadAtlasVoxel(nextVoxel,\x20owningBrick);\x0a\x0a\x20\x20\x20\x20if\x20(!c000.valid\x20||\x20!c100.valid\x20||\x20!c010.valid\x20||\x20!c110.valid\x20||\x20!c001.valid\x20||\x20!c101.valid\x20||\x20!c011.valid\x20||\x20!c111.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20bottom0\x20=\x20mix(c000.value,\x20c100.value,\x20fraction.x);\x0a\x20\x20\x20\x20let\x20bottom1\x20=\x20mix(c010.value,\x20c110.value,\x20fraction.x);\x0a\x20\x20\x20\x20let\x20top0\x20=\x20mix(c001.value,\x20c101.value,\x20fraction.x);\x0a\x20\x20\x20\x20let\x20top1\x20=\x20mix(c011.value,\x20c111.value,\x20fraction.x);\x0a\x20\x20\x20\x20return\x20validVolumeSample(mix(mix(bottom0,\x20bottom1,\x20fraction.y),\x20mix(top0,\x20top1,\x20fraction.y),\x20fraction.z));\x0a}\x0a\x0a//\x20体积分步只读取当前最近体素,避免对最终透明的样本执行八次纹理读取;高精度切面仍使用独立的三线性采样。\x0a//\x20Raymarch\x20steps\x20read\x20the\x20nearest\x20voxel\x20so\x20transparent\x20samples\x20avoid\x20eight\x20texture\x20loads;\x20high-detail\x20slices\x20keep\x20their\x20separate\x20trilinear\x20sampling.\x0afn\x20sampleVolumeNearest(modelPosition:\x20vec3f)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(modelPosition,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20maximumVoxel\x20=\x20volume.dimensions.xyz\x20-\x20vec3u(1u);\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20vec3i(round(normalized\x20*\x20vec3f(maximumVoxel)));\x0a\x20\x20\x20\x20let\x20owningBrick\x20=\x20min(vec3u(max(voxel,\x20vec3i(0)))\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20return\x20loadAtlasVoxel(voxel,\x20owningBrick);\x0a}\x0a\x0afn\x20sampleColor(value:\x20f32)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.x);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20colorStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20colorStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20colorStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ratio\x20=\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(colorStopColors.values[index],\x20colorStopColors.values[index\x20+\x201u],\x20ratio);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20colorStopColors.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20sampleOpacity(value:\x20f32)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.y);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20opacityStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20opacityStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20opacityStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ratio\x20=\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(opacityStopAlphas.values[index],\x20opacityStopAlphas.values[index\x20+\x201u],\x20ratio);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20opacityStopAlphas.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20nextBrickAxisDistance(position:\x20f32,\x20direction:\x20f32,\x20minimumValue:\x20f32,\x20maximumValue:\x20f32)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20if\x20(direction\x20>\x200.000001)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20max(scene.render.w,\x20(maximumValue\x20-\x20position)\x20/\x20direction\x20+\x20scene.render.w\x20*\x200.25);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(direction\x20<\x20-0.000001)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20max(scene.render.w,\x20(minimumValue\x20-\x20position)\x20/\x20direction\x20+\x20scene.render.w\x20*\x200.25);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x201e20;\x0a}\x0a\x0afn\x20getEmptyBrickSkipDistance(position:\x20vec3f,\x20direction:\x20vec3f)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(position,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20maximumVoxel\x20=\x20volume.dimensions.xyz\x20-\x20vec3u(1u);\x0a\x20\x20\x20\x20let\x20safeMaximumVoxel\x20=\x20max(maximumVoxel,\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20vec3u(floor(normalized\x20*\x20vec3f(maximumVoxel)));\x0a\x20\x20\x20\x20let\x20brick\x20=\x20min(voxel\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20page\x20=\x20pageTable.values[getPageIndex(brick)];\x0a\x0a\x20\x20\x20\x20if\x20(page.x\x20!=\x200u\x20&&\x20page.z\x20!=\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x200.0;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20minimumPosition\x20=\x20vec3f(brick\x20*\x20volume.brickInterior.xyz)\x20/\x20vec3f(safeMaximumVoxel);\x0a\x20\x20\x20\x20let\x20maximumPosition\x20=\x20vec3f(min((brick\x20+\x20vec3u(1u))\x20*\x20volume.brickInterior.xyz,\x20maximumVoxel))\x20/\x20vec3f(safeMaximumVoxel);\x0a\x20\x20\x20\x20return\x20min(\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextBrickAxisDistance(normalized.x,\x20direction.x,\x20minimumPosition.x,\x20maximumPosition.x),\x0a\x20\x20\x20\x20\x20\x20\x20\x20min(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nextBrickAxisDistance(normalized.y,\x20direction.y,\x20minimumPosition.y,\x20maximumPosition.y),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nextBrickAxisDistance(normalized.z,\x20direction.z,\x20minimumPosition.z,\x20maximumPosition.z)\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20);\x0a}\x0a\x0afn\x20getDepthDistance(pixel:\x20vec2i,\x20ndcXY:\x20vec2f,\x20rayOrigin:\x20vec3f,\x20rayDirection:\x20vec3f)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20depth\x20=\x20textureLoad(sceneDepth,\x20pixel,\x200);\x0a\x0a\x20\x20\x20\x20if\x20(depth\x20>=\x201.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x201e20;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20depthWorld\x20=\x20reconstructWorldPosition(vec3f(ndcXY,\x20depth));\x0a\x20\x20\x20\x20let\x20depthModel\x20=\x20transformPoint(scene.inverseModelMatrix,\x20depthWorld);\x0a\x20\x20\x20\x20return\x20max(0.0,\x20dot(depthModel\x20-\x20rayOrigin,\x20rayDirection));\x0a}\x0a\x0afn\x20raymarchComposite(origin:\x20vec3f,\x20direction:\x20vec3f,\x20interval:\x20RayInterval)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20var\x20accumulated\x20=\x20vec4f(0.0);\x0a\x20\x20\x20\x20var\x20distance\x20=\x20interval.minimum;\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20<\x204096u\x20&&\x20distance\x20<=\x20interval.maximum\x20&&\x20accumulated.a\x20<\x200.985;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20proxyPosition\x20=\x20origin\x20+\x20direction\x20*\x20distance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20skipDistance\x20=\x20select(0.0,\x20getEmptyBrickSkipDistance(proxyPosition,\x20direction),\x20scene.geographic0.x\x20<\x200.5);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(skipDistance\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20skipDistance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20volumePosition\x20=\x20proxyToVolume(proxyPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isInsideVolume(volumePosition))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20sample\x20=\x20sampleVolumeNearest(volumePosition);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(sample.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20sampleAlpha\x20=\x20sampleOpacity(sample.value);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(sampleAlpha\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20color\x20=\x20sampleColor(sample.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20alpha\x20=\x201.0\x20-\x20exp(-sampleAlpha\x20*\x20scene.render.z\x20*\x20scene.render.w);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20contribution\x20=\x20(1.0\x20-\x20accumulated.a)\x20*\x20alpha;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20accumulated\x20=\x20vec4f(accumulated.rgb\x20+\x20color.rgb\x20*\x20contribution,\x20accumulated.a\x20+\x20contribution);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20finalAlpha\x20=\x20accumulated.a\x20*\x20scene.render.y\x20*\x20scene.transfer.z;\x0a\x20\x20\x20\x20return\x20vec4f(accumulated.rgb\x20*\x20scene.render.y\x20*\x20scene.transfer.z,\x20finalAlpha);\x0a}\x0a\x0afn\x20raymarchMaximum(origin:\x20vec3f,\x20direction:\x20vec3f,\x20interval:\x20RayInterval)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20var\x20maximumValue\x20=\x20-1e30;\x0a\x20\x20\x20\x20var\x20found\x20=\x20false;\x0a\x20\x20\x20\x20var\x20distance\x20=\x20interval.minimum;\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20<\x204096u\x20&&\x20distance\x20<=\x20interval.maximum;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20proxyPosition\x20=\x20origin\x20+\x20direction\x20*\x20distance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20skipDistance\x20=\x20select(0.0,\x20getEmptyBrickSkipDistance(proxyPosition,\x20direction),\x20scene.geographic0.x\x20<\x200.5);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(skipDistance\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20skipDistance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20volumePosition\x20=\x20proxyToVolume(proxyPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isInsideVolume(volumePosition))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20sample\x20=\x20sampleVolumeNearest(volumePosition);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(sample.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20maximumValue\x20=\x20max(maximumValue,\x20sample.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20found\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!found)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec4f(0.0);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20color\x20=\x20sampleColor(maximumValue);\x0a\x20\x20\x20\x20let\x20alpha\x20=\x20sampleOpacity(maximumValue)\x20*\x20scene.render.y\x20*\x20scene.transfer.z;\x0a\x20\x20\x20\x20return\x20vec4f(color.rgb\x20*\x20alpha,\x20alpha);\x0a}\x0a\x0a@vertex\x0afn\x20vertexMain(@builtin(vertex_index)\x20vertexIndex:\x20u32)\x20->\x20@builtin(position)\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20x\x20=\x20f32(i32(vertexIndex\x20&\x201u)\x20*\x204\x20-\x201);\x0a\x20\x20\x20\x20let\x20y\x20=\x20f32(i32(vertexIndex\x20>>\x201u)\x20*\x204\x20-\x201);\x0a\x20\x20\x20\x20return\x20vec4f(x,\x20y,\x200.0,\x201.0);\x0a}\x0a\x0a@fragment\x0afn\x20fragmentMain(@builtin(position)\x20fragmentPosition:\x20vec4f)\x20->\x20@location(0)\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20ndcXY\x20=\x20vec2f(fragmentPosition.x\x20/\x20scene.viewport.x\x20*\x202.0\x20-\x201.0,\x201.0\x20-\x20fragmentPosition.y\x20/\x20scene.viewport.y\x20*\x202.0);\x0a\x20\x20\x20\x20let\x20nearWorld\x20=\x20reconstructWorldPosition(vec3f(ndcXY,\x200.0));\x0a\x20\x20\x20\x20let\x20farWorld\x20=\x20reconstructWorldPosition(vec3f(ndcXY,\x201.0));\x0a\x20\x20\x20\x20let\x20nearModel\x20=\x20transformPoint(scene.inverseModelMatrix,\x20nearWorld);\x0a\x20\x20\x20\x20let\x20farModel\x20=\x20transformPoint(scene.inverseModelMatrix,\x20farWorld);\x0a\x20\x20\x20\x20let\x20direction\x20=\x20normalize(farModel\x20-\x20nearModel);\x0a\x20\x20\x20\x20var\x20interval\x20=\x20intersectClipBox(nearModel,\x20direction);\x0a\x0a\x20\x20\x20\x20if\x20(!interval.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20discard;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20interval.maximum\x20=\x20min(interval.maximum,\x20getDepthDistance(vec2i(fragmentPosition.xy),\x20ndcXY,\x20nearModel,\x20direction));\x0a\x0a\x20\x20\x20\x20if\x20(interval.maximum\x20<\x20interval.minimum)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20discard;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(scene.render.x\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20raymarchMaximum(nearModel,\x20direction,\x20interval);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20raymarchComposite(nearModel,\x20direction,\x20interval);\x0a}\x0a','getCurrentTexture','brickScheduleCount','element','none','\x0a@group(0)\x20@binding(0)\x20var\x20atlas:\x20texture_storage_3d<r32float,\x20write>;\x0a\x0a@compute\x20@workgroup_size(4,\x204,\x204)\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','handlePointerUp','createResource','range','halo','transferBindGroup','step','volume\x20raymarch\x20shader','getFrame','loadBrick','handleWindowPointerMove','WebGPU\x20volume\x20context\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20context\x20尚未初始化。','多采样点切面轴的起止值不能相等。','A\x20destroyed\x20WebGPU\x20volume\x20renderer\x20cannot\x20be\x20initialized\x20again.\x20已销毁的\x20WebGPU\x20体积渲染器不能再次初始化。','inverseViewProjection','shift','sceneBindGroup','MAP_READ'];_0xa78c=function(){return _0x568040;};return _0xa78c();}const axisEndpoints=_0xa29e51=>_0xa29e51==='x'?[[0x0,0x0,0x0],[0x1,0x0,0x0]]:_0xa29e51==='y'?[[0x0,0x0,0x0],[0x0,0x1,0x0]]:[[0x0,0x0,0x0],[0x0,0x0,0x1]],projectAxis=(_0x1cbf86,_0x58d289)=>{const _0x5da280=_0x2859cf;let _0x18f777=multiplyMatrices(_0x58d289[_0x5da280(0x392)],_0x58d289['modelMatrix']),[_0x5ecb98,_0x24ef79]=axisEndpoints(_0x1cbf86),_0x2afd30=projectPointToViewport(_0x18f777,_0x5ecb98,_0x58d289[_0x5da280(0x1c4)],_0x58d289[_0x5da280(0x42b)]),_0x42ea35=projectPointToViewport(_0x18f777,_0x24ef79,_0x58d289[_0x5da280(0x1c4)],_0x58d289[_0x5da280(0x42b)]);return!_0x2afd30||!_0x42ea35?null:{'axis':_0x1cbf86,'startX':_0x2afd30[0x0],'startY':_0x2afd30[0x1],'endX':_0x42ea35[0x0],'endY':_0x42ea35[0x1]};},hitProjectedAxis=(_0x1c9613,_0xfcba10,_0x2a2f4a)=>{const _0x572e69=_0x2859cf;let _0x29202f=_0x1c9613[_0x572e69(0x2cc)]-_0x1c9613['startX'],_0x428ba6=_0x1c9613[_0x572e69(0x3c3)]-_0x1c9613[_0x572e69(0x488)],_0x388c45=_0x29202f*_0x29202f+_0x428ba6*_0x428ba6,_0x17f40a=_0x388c45===0x0?0x0:((_0xfcba10-_0x1c9613[_0x572e69(0x42c)])*_0x29202f+(_0x2a2f4a-_0x1c9613[_0x572e69(0x488)])*_0x428ba6)/_0x388c45,_0x49d513=Math[_0x572e69(0x28e)](0x1,Math[_0x572e69(0x284)](0x0,_0x17f40a)),_0x595ddb=_0x1c9613[_0x572e69(0x42c)]+_0x49d513*_0x29202f,_0xb01cc=_0x1c9613[_0x572e69(0x488)]+_0x49d513*_0x428ba6;return{'axis':_0x1c9613[_0x572e69(0x1d4)],'distance':Math[_0x572e69(0x348)](_0xfcba10-_0x595ddb,_0x2a2f4a-_0xb01cc),'normalizedPosition':_0x49d513};},eventViewportPoint=(_0x470146,_0x37e3f2,_0x4ab136)=>{const _0x11a52e=_0x2859cf;let _0xc267c=_0x37e3f2[_0x11a52e(0x36a)]();return[_0xc267c[_0x11a52e(0x456)]===0x0?0x0:(_0x470146[_0x11a52e(0x1aa)]-_0xc267c[_0x11a52e(0x413)])*_0x4ab136['viewportWidth']/_0xc267c[_0x11a52e(0x456)],_0xc267c['height']===0x0?0x0:(_0x470146[_0x11a52e(0x1fe)]-_0xc267c[_0x11a52e(0x24d)])*_0x4ab136[_0x11a52e(0x42b)]/_0xc267c[_0x11a52e(0x3de)]];},realAxisPosition=(_0x4c95ad,_0xe7ec9a,_0x33484f)=>{const _0x343aeb=_0x2859cf;let _0xa7220e=_0x4c95ad[_0x343aeb(0x3e3)];return normalizedToVolumeAxisValue(_0xe7ec9a==='x'?_0xa7220e[_0x343aeb(0x1bf)]:_0xe7ec9a==='y'?_0xa7220e[_0x343aeb(0x1de)]:_0xa7220e[_0x343aeb(0x203)],_0x33484f);};var SliceInteractionController=class{[_0x2859cf(0x2ab)];[_0x2859cf(0x2f6)];['getFrame'];[_0x2859cf(0x39f)];[_0x2859cf(0x40f)];[_0x2859cf(0x310)];['onInteractionEnd'];[_0x2859cf(0x1d5)]=null;[_0x2859cf(0x468)]=null;['initialized']=!0x1;constructor(_0x745a16,_0x17c96a,_0x632545,_0x204ffd={}){const _0x20185b=_0x2859cf;this[_0x20185b(0x2ab)]=_0x745a16,this['state']=_0x17c96a,this[_0x20185b(0x2b5)]=_0x632545,this[_0x20185b(0x39f)]=_0x204ffd['hitTolerancePixels']??0xa,this[_0x20185b(0x40f)]=_0x204ffd[_0x20185b(0x192)]??0x4,this['onInteractionStart']=_0x204ffd[_0x20185b(0x310)],this['onInteractionEnd']=_0x204ffd[_0x20185b(0x185)];}[_0x2859cf(0x1b3)](){const _0x43d1c2=_0x2859cf;this[_0x43d1c2(0x31d)]||(this['initialized']=!0x0,this[_0x43d1c2(0x2ab)][_0x43d1c2(0x29c)](_0x43d1c2(0x293),this[_0x43d1c2(0x2d8)],!0x0),this[_0x43d1c2(0x2ab)]['addEventListener'](_0x43d1c2(0x48e),this[_0x43d1c2(0x233)],!0x0),this[_0x43d1c2(0x2ab)][_0x43d1c2(0x29c)](_0x43d1c2(0x23d),this[_0x43d1c2(0x48b)],!0x0),window[_0x43d1c2(0x29c)](_0x43d1c2(0x48e),this[_0x43d1c2(0x2b7)],!0x0),window[_0x43d1c2(0x29c)](_0x43d1c2(0x1d9),this['handlePointerUp'],!0x0),window[_0x43d1c2(0x29c)]('pointercancel',this[_0x43d1c2(0x2ae)],!0x0));}[_0x2859cf(0x3af)](_0x1df784,_0x4beb13){const _0x1f5c5e=_0x2859cf;let _0x362e99=this[_0x1f5c5e(0x2f6)][_0x1f5c5e(0x21b)]['find'](_0x579c4a=>_0x579c4a['id']===_0x1df784);_0x362e99&&(this[_0x1f5c5e(0x1d5)]={'kind':_0x1f5c5e(0x38a),'axis':_0x362e99[_0x1f5c5e(0x1d4)],'pointerId':_0x4beb13[_0x1f5c5e(0x38f)],'sliceId':_0x1df784,'startX':_0x4beb13[_0x1f5c5e(0x1aa)],'startY':_0x4beb13[_0x1f5c5e(0x1fe)],'moved':!0x1},this['onInteractionStart']?.(),_0x4beb13['preventDefault'](),_0x4beb13[_0x1f5c5e(0x3a3)]());}[_0x2859cf(0x355)](){const _0x376fa2=_0x2859cf;this[_0x376fa2(0x31d)]&&(this['initialized']=!0x1,this['element'][_0x376fa2(0x205)](_0x376fa2(0x293),this[_0x376fa2(0x2d8)],!0x0),this[_0x376fa2(0x2ab)][_0x376fa2(0x205)]('pointermove',this[_0x376fa2(0x233)],!0x0),this[_0x376fa2(0x2ab)][_0x376fa2(0x205)](_0x376fa2(0x23d),this['handlePointerLeave'],!0x0),window[_0x376fa2(0x205)](_0x376fa2(0x48e),this[_0x376fa2(0x2b7)],!0x0),window[_0x376fa2(0x205)](_0x376fa2(0x1d9),this[_0x376fa2(0x2ae)],!0x0),window[_0x376fa2(0x205)](_0x376fa2(0x2d0),this[_0x376fa2(0x2ae)],!0x0),this[_0x376fa2(0x1d5)]&&this['onInteractionEnd']?.(),this[_0x376fa2(0x1d5)]=null,this['previousAxis']=null,this[_0x376fa2(0x2f6)]['clearPreview']());}['findAxisHit'](_0x33979a,_0x3d5d13){const _0x808d7=_0x2859cf;let _0xb76f62=this[_0x808d7(0x2b5)]();if(!_0xb76f62)return null;let [_0x181752,_0x3ac98b]=eventViewportPoint(_0x33979a,this[_0x808d7(0x2ab)],_0xb76f62),_0x3589ba=this[_0x808d7(0x2f6)]['toolMode'];if(_0x3589ba===null)return null;let _0x44abc8=(_0x3d5d13?[_0x3d5d13]:_0x3589ba==='auto'?['x','y','z']:[_0x3589ba])['map'](_0x5dc729=>projectAxis(_0x5dc729,_0xb76f62))[_0x808d7(0x29e)](_0x2bc841=>_0x2bc841!==null)[_0x808d7(0x3c0)](_0x34bada=>hitProjectedAxis(_0x34bada,_0x181752,_0x3ac98b));if(_0x44abc8[_0x808d7(0x326)]===0x0)return null;_0x44abc8[_0x808d7(0x3cd)]((_0x4298fb,_0x1297d4)=>_0x4298fb[_0x808d7(0x2c8)]-_0x1297d4[_0x808d7(0x2c8)]);let _0x27e583=_0x44abc8[0x0];if(!_0x3d5d13&&this['previousAxis']){let _0x4624cd=_0x44abc8[_0x808d7(0x198)](_0x5c73d6=>_0x5c73d6[_0x808d7(0x1d4)]===this[_0x808d7(0x468)]);_0x4624cd&&_0x4624cd[_0x808d7(0x2c8)]<=_0x27e583[_0x808d7(0x2c8)]+this[_0x808d7(0x40f)]&&(_0x27e583=_0x4624cd);}return!_0x3d5d13&&_0x27e583[_0x808d7(0x2c8)]>this['hitTolerance']?null:_0x27e583;}[_0x2859cf(0x1fb)](_0x5c07a2,_0x26228d){const _0x55b467=_0x2859cf;let _0x5c3768=realAxisPosition(this[_0x55b467(0x2f6)],_0x5c07a2[_0x55b467(0x1d4)],_0x5c07a2['normalizedPosition']);_0x26228d?this['state'][_0x55b467(0x39d)](_0x26228d,_0x5c3768):this[_0x55b467(0x2f6)][_0x55b467(0x224)](_0x5c07a2[_0x55b467(0x1d4)],_0x5c3768),this[_0x55b467(0x468)]=_0x5c07a2[_0x55b467(0x1d4)];}['handlePointerDown']=_0x49e367=>{const _0x29cbbf=_0x2859cf;if(_0x49e367[_0x29cbbf(0x497)]!==0x0||this[_0x29cbbf(0x1d5)])return;let _0xc04e75=this['findAxisHit'](_0x49e367);_0xc04e75&&(this['applyHit'](_0xc04e75),this['activePointer']={'kind':_0x29cbbf(0x276),'axis':_0xc04e75[_0x29cbbf(0x1d4)],'pointerId':_0x49e367[_0x29cbbf(0x38f)],'startX':_0x49e367[_0x29cbbf(0x1aa)],'startY':_0x49e367[_0x29cbbf(0x1fe)],'moved':!0x1},this[_0x29cbbf(0x310)]?.(),this[_0x29cbbf(0x2ab)]['setPointerCapture']?.(_0x49e367['pointerId']),_0x49e367['preventDefault'](),_0x49e367[_0x29cbbf(0x3a3)]());};[_0x2859cf(0x233)]=_0x8877fb=>{const _0x52a608=_0x2859cf;if(this[_0x52a608(0x1d5)])return;let _0x5e2d56=this['findAxisHit'](_0x8877fb);if(!_0x5e2d56){this[_0x52a608(0x468)]=null,this[_0x52a608(0x2f6)][_0x52a608(0x332)]();return;}this[_0x52a608(0x1fb)](_0x5e2d56);};[_0x2859cf(0x2b7)]=_0x3cf492=>{const _0x3c46ae=_0x2859cf;let _0x470777=this['activePointer'];if(!_0x470777||_0x470777[_0x3c46ae(0x38f)]!==_0x3cf492['pointerId'])return;let _0x18b615=this[_0x3c46ae(0x356)](_0x3cf492,_0x470777[_0x3c46ae(0x1d4)]);_0x18b615&&(Math[_0x3c46ae(0x348)](_0x3cf492[_0x3c46ae(0x1aa)]-_0x470777['startX'],_0x3cf492['clientY']-_0x470777['startY'])>0x4&&(_0x470777[_0x3c46ae(0x2d2)]=!0x0),this['applyHit'](_0x18b615,_0x470777[_0x3c46ae(0x2cf)]),_0x3cf492[_0x3c46ae(0x3bd)](),_0x3cf492[_0x3c46ae(0x3a3)]());};[_0x2859cf(0x2ae)]=_0x505abd=>{const _0x13a3ea=_0x2859cf;let _0x48a949=this[_0x13a3ea(0x1d5)];!_0x48a949||_0x48a949[_0x13a3ea(0x38f)]!==_0x505abd[_0x13a3ea(0x38f)]||(_0x48a949[_0x13a3ea(0x247)]===_0x13a3ea(0x276)&&!_0x48a949['moved']&&this[_0x13a3ea(0x2f6)][_0x13a3ea(0x3d0)](),this[_0x13a3ea(0x2ab)][_0x13a3ea(0x1d0)]?.(_0x505abd[_0x13a3ea(0x38f)])&&this['element']['releasePointerCapture'](_0x505abd[_0x13a3ea(0x38f)]),this[_0x13a3ea(0x1d5)]=null,this[_0x13a3ea(0x185)]?.(),_0x505abd[_0x13a3ea(0x3bd)](),_0x505abd['stopPropagation']());};[_0x2859cf(0x48b)]=()=>{const _0x408391=_0x2859cf;this['activePointer']||this[_0x408391(0x2f6)][_0x408391(0x332)]();};};const axisLabel=_0x563693=>_0x563693[_0x2859cf(0x3a6)](),defaultFormatPosition=(_0x2fdaec,_0x4627e8)=>axisLabel(_0x2fdaec)+'\x20'+Number(_0x4627e8[_0x2859cf(0x453)](0x4)),getAxisDefinition=(_0x5e349b,_0x9a683f)=>{const _0x3fa108=_0x2859cf;let _0x3ab706=_0x5e349b[_0x3fa108(0x3e3)];return _0x9a683f==='x'?_0x3ab706[_0x3fa108(0x1bf)]:_0x9a683f==='y'?_0x3ab706[_0x3fa108(0x1de)]:_0x3ab706[_0x3fa108(0x203)];},markerModelPoint=(_0x24e88e,_0x2ee7bc)=>{const _0x2588e4=_0x2859cf;let _0xb98f8a=volumeAxisValueToNormalized(getAxisDefinition(_0x24e88e,_0x2ee7bc[_0x2588e4(0x1d4)]),_0x2ee7bc['position']);return _0x2ee7bc['axis']==='x'?[_0xb98f8a,0x0,0x0]:_0x2ee7bc['axis']==='y'?[0x0,_0xb98f8a,0x0]:[0x0,0x0,_0xb98f8a];},applyMarkerBaseStyle=_0x210a0e=>{const _0x5bcc73=_0x2859cf;_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x27c)]=_0x5bcc73(0x214),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x320)]='1',_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x3d7)]=_0x5bcc73(0x485),_0x210a0e[_0x5bcc73(0x3a2)]['alignItems']=_0x5bcc73(0x361),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x3d5)]=_0x5bcc73(0x26b),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x379)]=_0x5bcc73(0x30e),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x261)]=_0x5bcc73(0x316),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x262)]=_0x5bcc73(0x26b),_0x210a0e[_0x5bcc73(0x3a2)]['color']=_0x5bcc73(0x3a0),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x30c)]=_0x5bcc73(0x350),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x25c)]=_0x5bcc73(0x269),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x1a8)]=_0x5bcc73(0x199),_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x2f9)]=_0x5bcc73(0x347),_0x210a0e[_0x5bcc73(0x3a2)]['userSelect']='none',_0x210a0e[_0x5bcc73(0x3a2)][_0x5bcc73(0x3c2)]='none';},createDeleteButton=()=>{const _0x3da012=_0x2859cf;let _0x2d71e3=document[_0x3da012(0x1c3)](_0x3da012(0x497));return _0x2d71e3[_0x3da012(0x427)]=_0x3da012(0x497),_0x2d71e3[_0x3da012(0x423)]='×',_0x2d71e3[_0x3da012(0x452)](_0x3da012(0x401),_0x3da012(0x486)),_0x2d71e3[_0x3da012(0x3a2)][_0x3da012(0x379)]=_0x3da012(0x258),_0x2d71e3[_0x3da012(0x3a2)]['border']='0',_0x2d71e3[_0x3da012(0x3a2)][_0x3da012(0x447)]=_0x3da012(0x19a),_0x2d71e3[_0x3da012(0x3a2)]['background']=_0x3da012(0x315),_0x2d71e3['style'][_0x3da012(0x1ff)]=_0x3da012(0x40b),_0x2d71e3;};var SliceMarkerOverlay=class{[_0x2859cf(0x1c2)];[_0x2859cf(0x2f6)];[_0x2859cf(0x2b5)];[_0x2859cf(0x385)];[_0x2859cf(0x188)];[_0x2859cf(0x2c1)]=new Map();[_0x2859cf(0x421)];[_0x2859cf(0x1ab)];[_0x2859cf(0x300)]=null;constructor(_0x4b2773,_0x33553f,_0x41a166,_0x4fa536={}){const _0x2c315b=_0x2859cf;this['container']=_0x4b2773,this['state']=_0x33553f,this[_0x2c315b(0x2b5)]=_0x41a166,this[_0x2c315b(0x385)]=_0x4fa536[_0x2c315b(0x385)],this[_0x2c315b(0x188)]=_0x4fa536['formatPosition']??defaultFormatPosition,this[_0x2c315b(0x421)]=_0x4b2773[_0x2c315b(0x3a2)][_0x2c315b(0x27c)],getComputedStyle(_0x4b2773)[_0x2c315b(0x27c)]===_0x2c315b(0x2c9)&&(_0x4b2773['style'][_0x2c315b(0x27c)]=_0x2c315b(0x46e)),this[_0x2c315b(0x1ab)]=_0x33553f[_0x2c315b(0x25a)](()=>this[_0x2c315b(0x207)]());}['update'](){const _0x49d3f2=_0x2859cf;let _0x47f21e=this['state'][_0x49d3f2(0x47b)];this[_0x49d3f2(0x2eb)](_0x47f21e[_0x49d3f2(0x276)]),this[_0x49d3f2(0x47e)](_0x47f21e[_0x49d3f2(0x21b)]);let _0x5a4e7e=this[_0x49d3f2(0x2b5)]();if(!_0x5a4e7e){this[_0x49d3f2(0x3fe)]();return;}_0x47f21e[_0x49d3f2(0x276)]&&this[_0x49d3f2(0x300)]&&this[_0x49d3f2(0x435)](this['previewMarker'],_0x47f21e['preview'],_0x5a4e7e);for(let _0x490889 of _0x47f21e[_0x49d3f2(0x21b)]){let _0x20f114=this[_0x49d3f2(0x2c1)][_0x49d3f2(0x374)](_0x490889['id']);_0x20f114&&this['positionMarker'](_0x20f114,_0x490889,_0x5a4e7e);}}[_0x2859cf(0x355)](){const _0x16cfb1=_0x2859cf;this['unsubscribe'](),this['previewMarker']?.[_0x16cfb1(0x443)](),this[_0x16cfb1(0x300)]=null;for(let _0x5c6b71 of this[_0x16cfb1(0x2c1)][_0x16cfb1(0x1cd)]())_0x5c6b71[_0x16cfb1(0x443)]();this['markers']['clear'](),this[_0x16cfb1(0x1c2)][_0x16cfb1(0x3a2)][_0x16cfb1(0x27c)]=this['previousContainerPosition'];}[_0x2859cf(0x2eb)](_0x1216d4){const _0x260abe=_0x2859cf;if(!_0x1216d4){this['previewMarker']?.[_0x260abe(0x443)](),this[_0x260abe(0x300)]=null;return;}this[_0x260abe(0x300)]||(this[_0x260abe(0x300)]=document[_0x260abe(0x1c3)](_0x260abe(0x1f5)),applyMarkerBaseStyle(this[_0x260abe(0x300)]),this['previewMarker'][_0x260abe(0x3a2)]['pointerEvents']=_0x260abe(0x2ac),this[_0x260abe(0x300)][_0x260abe(0x3a2)][_0x260abe(0x446)]=_0x260abe(0x381),this[_0x260abe(0x1c2)]['append'](this['previewMarker'])),this['previewMarker']['textContent']=this[_0x260abe(0x188)](_0x1216d4[_0x260abe(0x1d4)],_0x1216d4[_0x260abe(0x27c)]);}[_0x2859cf(0x47e)](_0x819838){const _0x459d52=_0x2859cf;let _0x216e7a=new Set(_0x819838['map'](_0x3f0e55=>_0x3f0e55['id']));for(let [_0x1f7c4b,_0x1f00bc]of this[_0x459d52(0x2c1)])_0x216e7a[_0x459d52(0x336)](_0x1f7c4b)||(_0x1f00bc[_0x459d52(0x443)](),this[_0x459d52(0x2c1)][_0x459d52(0x18e)](_0x1f7c4b));for(let _0x258ff4 of _0x819838){let _0x232775=this['markers'][_0x459d52(0x374)](_0x258ff4['id']);_0x232775||(_0x232775=this[_0x459d52(0x1cc)](_0x258ff4['id']),this[_0x459d52(0x2c1)][_0x459d52(0x252)](_0x258ff4['id'],_0x232775),this[_0x459d52(0x1c2)]['append'](_0x232775));let _0x3c3036=_0x232775['firstChild'];_0x3c3036&&(_0x3c3036[_0x459d52(0x423)]=this[_0x459d52(0x188)](_0x258ff4[_0x459d52(0x1d4)],_0x258ff4[_0x459d52(0x27c)]));}}[_0x2859cf(0x1cc)](_0x18b26e){const _0xe1207b=_0x2859cf;let _0x17f709=document[_0xe1207b(0x1c3)]('div');applyMarkerBaseStyle(_0x17f709),_0x17f709[_0xe1207b(0x3a2)]['cursor']='grab',_0x17f709['append'](document['createTextNode'](''));let _0x36e025=createDeleteButton();return _0x36e025[_0xe1207b(0x29c)](_0xe1207b(0x293),_0x58abb0=>_0x58abb0['stopPropagation']()),_0x36e025[_0xe1207b(0x29c)]('click',_0x184a63=>{const _0x1384e2=_0xe1207b;_0x184a63['stopPropagation'](),this[_0x1384e2(0x2f6)]['removeSlice'](_0x18b26e);}),_0x17f709['addEventListener'](_0xe1207b(0x293),_0x4f08e6=>this[_0xe1207b(0x385)]?.[_0xe1207b(0x3af)](_0x18b26e,_0x4f08e6)),_0x17f709[_0xe1207b(0x377)](_0x36e025),_0x17f709;}['positionMarker'](_0x5e0512,_0xb4633,_0xbf6eca){const _0x386b3f=_0x2859cf;let _0x4c93b2=projectPointToViewport(multiplyMatrices(_0xbf6eca[_0x386b3f(0x392)],_0xbf6eca['modelMatrix']),markerModelPoint(this[_0x386b3f(0x2f6)],_0xb4633),_0xbf6eca[_0x386b3f(0x1c4)],_0xbf6eca[_0x386b3f(0x42b)]);if(!_0x4c93b2||_0x4c93b2[0x2]<0x0||_0x4c93b2[0x2]>0x1){_0x5e0512[_0x386b3f(0x3a2)][_0x386b3f(0x3d7)]=_0x386b3f(0x2ac);return;}_0x5e0512[_0x386b3f(0x3a2)]['display']=_0x386b3f(0x485),_0x5e0512[_0x386b3f(0x3a2)][_0x386b3f(0x413)]=_0x4c93b2[0x0]+'px',_0x5e0512['style'][_0x386b3f(0x24d)]=_0x4c93b2[0x1]+'px';}[_0x2859cf(0x3fe)](){const _0x4a4937=_0x2859cf;this['previewMarker']&&(this['previewMarker'][_0x4a4937(0x3a2)][_0x4a4937(0x3d7)]=_0x4a4937(0x2ac));for(let _0x273e46 of this[_0x4a4937(0x2c1)]['values']())_0x273e46[_0x4a4937(0x3a2)][_0x4a4937(0x3d7)]=_0x4a4937(0x2ac);}};const clamp=(_0x144c28,_0x3ccf7e)=>Math[_0x2859cf(0x28e)](_0x3ccf7e-0x1,Math[_0x2859cf(0x284)](0x0,_0x144c28)),createPhysicalBrickValues=(_0x54e598,_0x21c248,_0x15fc25,_0x3379ca)=>{const _0x28316f=_0x2859cf;validateVolumeChunk(_0x54e598,_0x3379ca,_0x15fc25[_0x28316f(0x307)]);let _0x37e130=_0x21c248['width']+_0x21c248[_0x28316f(0x2b1)]*0x2,_0x3c330a=_0x21c248['height']+_0x21c248[_0x28316f(0x2b1)]*0x2,_0x5665a6=_0x21c248[_0x28316f(0x42d)]+_0x21c248[_0x28316f(0x2b1)]*0x2,_0x4f76cb=new Float32Array(_0x37e130*_0x3c330a*_0x5665a6);for(let _0x33266d=0x0;_0x33266d<_0x5665a6;_0x33266d+=0x1){let _0x378dfc=clamp(_0x15fc25[_0x28316f(0x35a)]['sourceYStart']+_0x33266d-_0x21c248[_0x28316f(0x2b1)],_0x54e598[_0x28316f(0x203)][_0x28316f(0x251)])-_0x3379ca[_0x28316f(0x2b0)][_0x28316f(0x212)];for(let _0x520343=0x0;_0x520343<_0x3c330a;_0x520343+=0x1){let _0x2b7879=clamp(_0x15fc25['coreRange'][_0x28316f(0x334)]+_0x520343-_0x21c248[_0x28316f(0x2b1)],_0x54e598['yAxis'][_0x28316f(0x251)])-_0x3379ca[_0x28316f(0x2b0)][_0x28316f(0x334)];for(let _0x3b16bc=0x0;_0x3b16bc<_0x37e130;_0x3b16bc+=0x1){let _0x12d115=clamp(_0x15fc25[_0x28316f(0x35a)][_0x28316f(0x231)]+_0x3b16bc-_0x21c248[_0x28316f(0x2b1)],_0x54e598[_0x28316f(0x1bf)][_0x28316f(0x251)])-_0x3379ca[_0x28316f(0x2b0)][_0x28316f(0x231)];_0x4f76cb[(_0x33266d*_0x3c330a+_0x520343)*_0x37e130+_0x3b16bc]=_0x3379ca[_0x28316f(0x1cd)][(_0x378dfc*_0x3379ca['height']+_0x2b7879)*_0x3379ca[_0x28316f(0x456)]+_0x12d115];}}}return _0x4f76cb;},normalizeColorStops=_0x25add4=>{const _0x4f785f=_0x2859cf;if(_0x25add4[_0x4f785f(0x326)]===0x0)throw Error(_0x4f785f(0x397));return _0x25add4[_0x4f785f(0x3c0)]((_0x1f7184,_0x4ef6bb)=>{const _0x4b8f72=_0x4f785f;if(Number['isNaN'](_0x1f7184['min'])||Number[_0x4b8f72(0x3db)](_0x1f7184[_0x4b8f72(0x284)]))throw TypeError('第'+(_0x4ef6bb+0x1)+_0x4b8f72(0x277));if(_0x1f7184[_0x4b8f72(0x28e)]>=_0x1f7184[_0x4b8f72(0x284)])throw Error('第'+(_0x4ef6bb+0x1)+_0x4b8f72(0x31c));return{'min':_0x1f7184[_0x4b8f72(0x28e)],'max':_0x1f7184[_0x4b8f72(0x284)],'color':parseRasterColor(_0x1f7184['color'])};})[_0x4f785f(0x3cd)]((_0xdba0dd,_0x482157)=>_0xdba0dd[_0x4f785f(0x28e)]-_0x482157[_0x4f785f(0x28e)]);},parseRasterColor=_0x5cec19=>{const _0x5c02c3=_0x2859cf;let _0x3205df=_0x5cec19[_0x5c02c3(0x1c5)]()[_0x5c02c3(0x2cd)]();if(_0x3205df[_0x5c02c3(0x478)]('#'))return parseHexColor(_0x3205df);if(_0x3205df[_0x5c02c3(0x478)]('rgba('))return parseRgbColor(_0x3205df,!0x0);if(_0x3205df['startsWith'](_0x5c02c3(0x2f8)))return parseRgbColor(_0x3205df,!0x1);throw Error(_0x5c02c3(0x1b1)+_0x5cec19);},parseHexColor=_0x5d8dd5=>{const _0x12c3e5=_0x2859cf;if(_0x5d8dd5[_0x12c3e5(0x326)]===0x4)return normalizeRgb(Number[_0x12c3e5(0x45d)](''+_0x5d8dd5[0x1]+_0x5d8dd5[0x1],0x10),Number['parseInt'](''+_0x5d8dd5[0x2]+_0x5d8dd5[0x2],0x10),Number[_0x12c3e5(0x45d)](''+_0x5d8dd5[0x3]+_0x5d8dd5[0x3],0x10),0x1);if(_0x5d8dd5[_0x12c3e5(0x326)]===0x7)return normalizeRgb(Number[_0x12c3e5(0x45d)](_0x5d8dd5[_0x12c3e5(0x226)](0x1,0x3),0x10),Number[_0x12c3e5(0x45d)](_0x5d8dd5[_0x12c3e5(0x226)](0x3,0x5),0x10),Number[_0x12c3e5(0x45d)](_0x5d8dd5[_0x12c3e5(0x226)](0x5,0x7),0x10),0x1);throw Error(_0x12c3e5(0x473)+_0x5d8dd5);},parseRgbColor=(_0xe5775d,_0x4ffc66)=>{const _0x1bbe43=_0x2859cf;let _0x4cf28e=_0xe5775d['match'](/^rgba?\(([^)]+)\)$/);if(!_0x4cf28e)throw Error(_0x1bbe43(0x47a)+_0xe5775d);let _0x566f0d=_0x4cf28e[0x1][_0x1bbe43(0x2e7)](',')[_0x1bbe43(0x3c0)](_0x3be99b=>_0x3be99b[_0x1bbe43(0x1c5)]()),_0x143547=_0x4ffc66?0x4:0x3;if(_0x566f0d[_0x1bbe43(0x326)]!==_0x143547)throw Error(_0x1bbe43(0x37a)+_0xe5775d);return normalizeRgb(Number(_0x566f0d[0x0]),Number(_0x566f0d[0x1]),Number(_0x566f0d[0x2]),_0x4ffc66?Number(_0x566f0d[0x3]):0x1);},normalizeRgb=(_0x3bf12a,_0xa8fa09,_0x46eab6,_0x34f3ad)=>{const _0x2907bd=_0x2859cf;if(!isValidRgbChannel(_0x3bf12a)||!isValidRgbChannel(_0xa8fa09)||!isValidRgbChannel(_0x46eab6))throw Error(_0x2907bd(0x1b4));if(!Number['isFinite'](_0x34f3ad)||_0x34f3ad<0x0||_0x34f3ad>0x1)throw Error(_0x2907bd(0x36f));return[_0x3bf12a/0xff,_0xa8fa09/0xff,_0x46eab6/0xff,_0x34f3ad];},isValidRgbChannel=_0x5e6d75=>Number[_0x2859cf(0x273)](_0x5e6d75)&&_0x5e6d75>=0x0&&_0x5e6d75<=0xff,validateStops=_0x121ee7=>{const _0x4b68c7=_0x2859cf;if(_0x121ee7['length']===0x0)throw Error(_0x4b68c7(0x305));let _0x2c7abb=-0x1/0x0;for(let _0x5cfeaa of _0x121ee7){if(!Number['isFinite'](_0x5cfeaa[_0x4b68c7(0x414)])||_0x5cfeaa['value']<=_0x2c7abb)throw Error(_0x4b68c7(0x359));if(!Number[_0x4b68c7(0x273)](_0x5cfeaa[_0x4b68c7(0x446)])||_0x5cfeaa[_0x4b68c7(0x446)]<0x0||_0x5cfeaa['opacity']>0x1)throw Error(_0x4b68c7(0x18d));_0x2c7abb=_0x5cfeaa[_0x4b68c7(0x414)];}},findTransferInterval=(_0x551f42,_0x5f2246)=>{const _0x237f89=_0x2859cf;if(_0x551f42<=_0x5f2246[0x0])return[0x0,0x0,0x0];for(let _0xbb0d66=0x1;_0xbb0d66<_0x5f2246[_0x237f89(0x326)];_0xbb0d66+=0x1)if(_0x551f42<=_0x5f2246[_0xbb0d66]){let _0x4d67ba=_0x5f2246[_0xbb0d66]-_0x5f2246[_0xbb0d66-0x1];return[_0xbb0d66-0x1,_0xbb0d66,_0x4d67ba===0x0?0x0:Math[_0x237f89(0x28e)](0x1,Math['max'](0x0,(_0x551f42-_0x5f2246[_0xbb0d66-0x1])/_0x4d67ba))];}let _0x54af4c=_0x5f2246[_0x237f89(0x326)]-0x1;return[_0x54af4c,_0x54af4c,0x0];},prepareWebgpuVolumeTransfer=(_0xac6a3c,_0x483c76)=>{validateStops(_0x483c76);let _0x4fc433=normalizeColorStops([..._0xac6a3c]);return{'colorStops':_0x4fc433['flatMap']((_0x239c53,_0x1eaa5c)=>{const _0x1f02c1=_0x1b5d;let _0x2c630b=_0x4fc433[Math['min'](_0x1eaa5c+0x1,_0x4fc433[_0x1f02c1(0x326)]-0x1)][_0x1f02c1(0x447)];return[{'value':_0x239c53['min'],'color':_0x239c53[_0x1f02c1(0x447)]},{'value':_0x239c53[_0x1f02c1(0x284)],'color':_0x2c630b}];}),'opacityStops':_0x483c76['map'](_0x41bae2=>({..._0x41bae2}))};},sampleVolumeTransferColor=(_0x5363d0,_0x1b3649,_0xb9bb74,_0x48bc9a)=>{const _0x46ad4f=_0x2859cf;if(!Number[_0x46ad4f(0x273)](_0x5363d0))return[0x0,0x0,0x0,0x0];let [_0x21cff8,_0x53dbfa,_0x455675]=findTransferInterval(_0x5363d0,_0x1b3649[_0x46ad4f(0x3c0)](_0x26cd64=>_0x26cd64[_0x46ad4f(0x414)])),_0x22e859=_0x1b3649[_0x21cff8],_0x436f56=_0x1b3649[_0x53dbfa],_0x4468f7=_0x48bc9a===_0x46ad4f(0x2b3)?0x0:_0x455675;return[_0x22e859[_0x46ad4f(0x447)][0x0]+(_0x436f56[_0x46ad4f(0x447)][0x0]-_0x22e859['color'][0x0])*_0x4468f7,_0x22e859[_0x46ad4f(0x447)][0x1]+(_0x436f56[_0x46ad4f(0x447)][0x1]-_0x22e859[_0x46ad4f(0x447)][0x1])*_0x4468f7,_0x22e859[_0x46ad4f(0x447)][0x2]+(_0x436f56[_0x46ad4f(0x447)][0x2]-_0x22e859['color'][0x2])*_0x4468f7,(_0x22e859[_0x46ad4f(0x447)][0x3]+(_0x436f56[_0x46ad4f(0x447)][0x3]-_0x22e859['color'][0x3])*_0x4468f7)*_0xb9bb74];},sampleVolumeTransferOpacity=(_0x3b3164,_0x50c79c,_0xa383d0)=>{const _0x476d8a=_0x2859cf;if(!Number[_0x476d8a(0x273)](_0x3b3164))return 0x0;let [_0x56111c,_0x5dc9fb,_0x3bf55d]=findTransferInterval(_0x3b3164,_0x50c79c['map'](_0x57fe9c=>_0x57fe9c[_0x476d8a(0x414)])),_0x865094=_0xa383d0===_0x476d8a(0x2b3)?0x0:_0x3bf55d;return _0x50c79c[_0x56111c][_0x476d8a(0x446)]+(_0x50c79c[_0x5dc9fb][_0x476d8a(0x446)]-_0x50c79c[_0x56111c][_0x476d8a(0x446)])*_0x865094;},DEFAULT_CAMERA={'position':[1.4,1.2,2.1],'target':[0.5,0.5,0.5],'up':[0x0,0x1,0x0],'projection':{'type':_0x2859cf(0x40e),'fovYDegrees':0x2d,'near':0.01,'far':0x64}},IDENTITY_MATRIX=[0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1],clamp01=_0x2d9562=>Math['min'](0x1,Math[_0x2859cf(0x284)](0x0,_0x2d9562)),qualityStepLength=_0x1f7ae5=>_0x1f7ae5===_0x2859cf(0x3c4)?0.012:_0x1f7ae5===_0x2859cf(0x243)?0.0025:_0x1f7ae5===_0x2859cf(0x2f1)?0.005:0.006,qualityUploadCount=_0x16341d=>_0x16341d===_0x2859cf(0x3c4)?0x8:_0x16341d===_0x2859cf(0x243)?0x2:0x4,nextAutoQuality=(_0x58152b,_0x163ae3)=>_0x163ae3>0x18?_0x58152b===_0x2859cf(0x243)?_0x2859cf(0x2f1):_0x2859cf(0x3c4):_0x163ae3<0xe?_0x58152b==='performance'?_0x2859cf(0x2f1):'quality':_0x58152b,validatePositiveOption=(_0x4bfa6f,_0x4a8ee4)=>{const _0x3a5ffb=_0x2859cf;if(!Number[_0x3a5ffb(0x273)](_0x4bfa6f)||_0x4bfa6f<=0x0)throw Error(_0x4a8ee4+'\x20must\x20be\x20a\x20positive\x20finite\x20number.\x20'+_0x4a8ee4+_0x3a5ffb(0x1a7));return _0x4bfa6f;},normalizeClipBox=(_0x5ed398,_0x2bdea9)=>{const _0xee479e=_0x2859cf;if(!_0x2bdea9)return{'minimum':[0x0,0x0,0x0],'maximum':[0x1,0x1,0x1]};let _0x42e285=clamp01(volumeAxisValueToNormalized(_0x5ed398[_0xee479e(0x204)][_0xee479e(0x1bf)],_0x2bdea9[_0xee479e(0x3b1)])),_0x2e875d=clamp01(volumeAxisValueToNormalized(_0x5ed398[_0xee479e(0x204)][_0xee479e(0x1bf)],_0x2bdea9[_0xee479e(0x1d1)])),_0x35b46c=clamp01(volumeAxisValueToNormalized(_0x5ed398['metadata'][_0xee479e(0x1de)],_0x2bdea9[_0xee479e(0x31a)])),_0x3d2da8=clamp01(volumeAxisValueToNormalized(_0x5ed398[_0xee479e(0x204)][_0xee479e(0x1de)],_0x2bdea9[_0xee479e(0x225)])),_0x509397=clamp01(volumeAxisValueToNormalized(_0x5ed398[_0xee479e(0x204)][_0xee479e(0x203)],_0x2bdea9[_0xee479e(0x2de)])),_0x5789c6=clamp01(volumeAxisValueToNormalized(_0x5ed398[_0xee479e(0x204)][_0xee479e(0x203)],_0x2bdea9[_0xee479e(0x1b9)]));return{'minimum':[Math[_0xee479e(0x28e)](_0x42e285,_0x2e875d),Math[_0xee479e(0x28e)](_0x35b46c,_0x3d2da8),Math['min'](_0x509397,_0x5789c6)],'maximum':[Math['max'](_0x42e285,_0x2e875d),Math[_0xee479e(0x284)](_0x35b46c,_0x3d2da8),Math[_0xee479e(0x284)](_0x509397,_0x5789c6)]};},createAxesMesh=()=>({'id':_0x2859cf(0x290),'topology':_0x2859cf(0x2d6),'depthMode':'always-visible','vertices':new Float32Array([0x0,0x0,0x0,0x1,0.2,0.2,0x1,0x1,0x0,0x0,0x1,0.2,0.2,0x1,0x0,0x0,0x0,0.2,0x1,0.2,0x1,0x0,0x1,0x0,0.2,0x1,0.2,0x1,0x0,0x0,0x0,0.2,0.5,0x1,0x1,0x0,0x0,0x1,0.2,0.5,0x1,0x1])}),createBoundsMesh=()=>{const _0x45251a=_0x2859cf;let _0x15efe5=[0.1,0.53,0.56,0.62],_0xd42dd1=[[0x0,0x0,0x0],[0x1,0x0,0x0],[0x0,0x1,0x0],[0x1,0x1,0x0],[0x0,0x0,0x1],[0x1,0x0,0x1],[0x0,0x1,0x1],[0x1,0x1,0x1]],_0x38ffdc=[[0x0,0x1],[0x0,0x2],[0x1,0x3],[0x2,0x3],[0x4,0x5],[0x4,0x6],[0x5,0x7],[0x6,0x7],[0x0,0x4],[0x1,0x5],[0x2,0x6],[0x3,0x7]],_0x5f3b46=new Float32Array(_0x38ffdc[_0x45251a(0x326)]*0x2*0x7),_0x535e7c=0x0;for(let _0x165788 of _0x38ffdc)for(let _0x3cd854 of _0x165788)_0x5f3b46['set']([..._0xd42dd1[_0x3cd854],..._0x15efe5],_0x535e7c),_0x535e7c+=0x7;return{'id':_0x45251a(0x18a),'topology':'line-list','depthMode':_0x45251a(0x3cc),'vertices':_0x5f3b46};},createProfileSceneMesh=(_0xc26f71,_0x3efe18,_0x307932,_0xb5fb68)=>{const _0x24152d=_0x2859cf;let _0x2bdb9e=new Float32Array(_0xc26f71[_0x24152d(0x26e)][_0x24152d(0x326)]*0x7);for(let _0x22d053=0x0;_0x22d053<_0xc26f71['indices'][_0x24152d(0x326)];_0x22d053+=0x1){let _0x3b44db=_0xc26f71[_0x24152d(0x26e)][_0x22d053],_0x3b8a7b=_0x3b44db*0x3,_0x2245b9=sampleVolumeTransferOpacity(_0xc26f71['values'][_0x3b44db],_0x307932,_0xb5fb68),_0x2c76fd=sampleVolumeTransferColor(_0xc26f71['values'][_0x3b44db],_0x3efe18,_0xc26f71[_0x24152d(0x446)]*_0x2245b9,_0xb5fb68);_0x2bdb9e[_0x24152d(0x252)]([_0xc26f71[_0x24152d(0x38e)][_0x3b8a7b],_0xc26f71[_0x24152d(0x38e)][_0x3b8a7b+0x1],_0xc26f71[_0x24152d(0x38e)][_0x3b8a7b+0x2],_0x2c76fd[0x0]*_0x2c76fd[0x3],_0x2c76fd[0x1]*_0x2c76fd[0x3],_0x2c76fd[0x2]*_0x2c76fd[0x3],_0x2c76fd[0x3]],_0x22d053*0x7);}return{'id':_0xc26f71['id'],'topology':_0x24152d(0x2fa),'depthMode':_0xc26f71[_0x24152d(0x341)],'vertices':_0x2bdb9e};},descriptorDistance=(_0x5d26e8,_0x436ad2,_0x541e42)=>{const _0x4a6ef5=_0x2859cf;let _0x25d441=(_0x5d26e8[_0x4a6ef5(0x364)]['x']+0.5)/_0x436ad2[_0x4a6ef5(0x1e9)],_0x6aaa39=(_0x5d26e8['coordinate']['y']+0.5)/_0x436ad2['countY'],_0x3f3b6d=(_0x5d26e8[_0x4a6ef5(0x364)]['z']+0.5)/_0x436ad2[_0x4a6ef5(0x282)];return Math['hypot'](_0x25d441-_0x541e42['position'][0x0],_0x6aaa39-_0x541e42[_0x4a6ef5(0x27c)][0x1],_0x3f3b6d-_0x541e42['position'][0x2]);},descriptorLogicalIndex=(_0x3e3aac,_0x2b8942)=>(_0x3e3aac['coordinate']['z']*_0x2b8942['countY']+_0x3e3aac[_0x2859cf(0x364)]['y'])*_0x2b8942[_0x2859cf(0x1e9)]+_0x3e3aac[_0x2859cf(0x364)]['x'],descriptorContainsSlice=(_0x25fd87,_0x573a06,_0x132253,_0x5df3de)=>{const _0x4ac21f=_0x2859cf;let _0x527cb6=_0x132253==='x'?{'start':_0x25fd87[_0x4ac21f(0x35a)][_0x4ac21f(0x231)],'count':_0x25fd87['coreRange'][_0x4ac21f(0x434)],'size':_0x573a06[_0x4ac21f(0x204)][_0x4ac21f(0x1bf)][_0x4ac21f(0x251)]}:_0x132253==='y'?{'start':_0x25fd87['coreRange'][_0x4ac21f(0x334)],'count':_0x25fd87[_0x4ac21f(0x35a)][_0x4ac21f(0x304)],'size':_0x573a06[_0x4ac21f(0x204)]['yAxis'][_0x4ac21f(0x251)]}:{'start':_0x25fd87[_0x4ac21f(0x35a)]['sourceYStart'],'count':_0x25fd87[_0x4ac21f(0x35a)][_0x4ac21f(0x21c)],'size':_0x573a06[_0x4ac21f(0x204)][_0x4ac21f(0x203)]['count']};return _0x5df3de>=_0x527cb6[_0x4ac21f(0x1df)]/_0x527cb6[_0x4ac21f(0x376)]&&_0x5df3de<=(_0x527cb6[_0x4ac21f(0x1df)]+_0x527cb6['count'])/_0x527cb6['size'];},descriptorContainsProfile=(_0x125e1a,_0x335ff4,_0xdb559c)=>{const _0x29479f=_0x2859cf;let _0x38de63=_0x125e1a[_0x29479f(0x35a)]['xStart']/_0x335ff4[_0x29479f(0x204)]['xAxis'][_0x29479f(0x251)],_0x50b344=(_0x125e1a[_0x29479f(0x35a)][_0x29479f(0x231)]+_0x125e1a[_0x29479f(0x35a)][_0x29479f(0x434)])/_0x335ff4[_0x29479f(0x204)][_0x29479f(0x1bf)]['count'],_0x3689fe=_0x125e1a[_0x29479f(0x35a)][_0x29479f(0x334)]/_0x335ff4[_0x29479f(0x204)][_0x29479f(0x1de)][_0x29479f(0x251)],_0x4fde3a=(_0x125e1a[_0x29479f(0x35a)][_0x29479f(0x334)]+_0x125e1a[_0x29479f(0x35a)][_0x29479f(0x304)])/_0x335ff4[_0x29479f(0x204)][_0x29479f(0x1de)][_0x29479f(0x251)],_0x421bae=_0x125e1a['coreRange'][_0x29479f(0x212)]/_0x335ff4[_0x29479f(0x204)][_0x29479f(0x203)][_0x29479f(0x251)],_0x9daabd=(_0x125e1a[_0x29479f(0x35a)][_0x29479f(0x212)]+_0x125e1a[_0x29479f(0x35a)][_0x29479f(0x21c)])/_0x335ff4['metadata'][_0x29479f(0x203)][_0x29479f(0x251)];return _0xdb559c[_0x29479f(0x1b7)](_0x51c5d3=>{const _0x5db643=_0x29479f;let _0x511333=volumeAxisValueToNormalized(_0x335ff4[_0x5db643(0x204)][_0x5db643(0x1de)],_0x51c5d3[_0x5db643(0x45e)][0x0]),_0x395c73=volumeAxisValueToNormalized(_0x335ff4[_0x5db643(0x204)][_0x5db643(0x1de)],_0x51c5d3[_0x5db643(0x45e)][_0x51c5d3['heights'][_0x5db643(0x326)]-0x1]);if(Math[_0x5db643(0x284)](_0x511333,_0x395c73)<_0x3689fe||Math[_0x5db643(0x28e)](_0x511333,_0x395c73)>_0x4fde3a)return!0x1;for(let _0x4b189d=0x0;_0x4b189d<_0x51c5d3[_0x5db643(0x40c)]['length'];_0x4b189d+=0x2){let _0x11730c=volumeAxisValueToNormalized(_0x335ff4[_0x5db643(0x204)][_0x5db643(0x1bf)],_0x51c5d3[_0x5db643(0x40c)][_0x4b189d]),_0x3d12a6=volumeAxisValueToNormalized(_0x335ff4[_0x5db643(0x204)][_0x5db643(0x203)],_0x51c5d3[_0x5db643(0x40c)][_0x4b189d+0x1]);if(_0x11730c>=_0x38de63&&_0x11730c<=_0x50b344&&_0x3d12a6>=_0x421bae&&_0x3d12a6<=_0x9daabd)return!0x0;}return!0x1;});},descriptorDemandPriority=(_0x15a37a,_0x5c93b8,_0x57dc85,_0x32beec)=>{const _0x723a4b=_0x2859cf;let _0xf9a029=_0x57dc85[_0x723a4b(0x276)];if(_0xf9a029){let _0x36a455=_0xf9a029[_0x723a4b(0x1d4)]==='x'?_0x5c93b8[_0x723a4b(0x204)][_0x723a4b(0x1bf)]:_0xf9a029[_0x723a4b(0x1d4)]==='y'?_0x5c93b8[_0x723a4b(0x204)][_0x723a4b(0x1de)]:_0x5c93b8[_0x723a4b(0x204)][_0x723a4b(0x203)];if(descriptorContainsSlice(_0x15a37a,_0x5c93b8,_0xf9a029[_0x723a4b(0x1d4)],volumeAxisValueToNormalized(_0x36a455,_0xf9a029[_0x723a4b(0x27c)])))return 0x0;}for(let _0x57284d of _0x57dc85[_0x723a4b(0x21b)]){let _0xc16e36=_0x57284d['axis']==='x'?_0x5c93b8[_0x723a4b(0x204)]['xAxis']:_0x57284d[_0x723a4b(0x1d4)]==='y'?_0x5c93b8[_0x723a4b(0x204)]['yAxis']:_0x5c93b8[_0x723a4b(0x204)][_0x723a4b(0x203)];if(_0x57284d[_0x723a4b(0x31e)]&&descriptorContainsSlice(_0x15a37a,_0x5c93b8,_0x57284d[_0x723a4b(0x1d4)],volumeAxisValueToNormalized(_0xc16e36,_0x57284d[_0x723a4b(0x27c)])))return 0x1;}return descriptorContainsProfile(_0x15a37a,_0x5c93b8,_0x32beec)?0x2:0x3;};var VolumeScene=class VolumeScene{[_0x2859cf(0x2a3)]=_0x2859cf(0x41e);[_0x2859cf(0x23e)];['volumeCamera'];[_0x2859cf(0x23c)];[_0x2859cf(0x3b9)];['interactionElement'];[_0x2859cf(0x400)]=[];[_0x2859cf(0x287)];[_0x2859cf(0x2ea)];[_0x2859cf(0x197)];[_0x2859cf(0x298)];[_0x2859cf(0x1ad)];[_0x2859cf(0x43b)];[_0x2859cf(0x37b)];[_0x2859cf(0x416)]=[];[_0x2859cf(0x25b)];[_0x2859cf(0x2f3)]=0x0;[_0x2859cf(0x235)]=new Set();['pendingKeys']=new Map();['desiredKeys']=new Set();[_0x2859cf(0x369)]=0x0;[_0x2859cf(0x2d3)]=!0x1;[_0x2859cf(0x25f)];[_0x2859cf(0x42f)];[_0x2859cf(0x3cb)];['clipBox'];[_0x2859cf(0x243)];[_0x2859cf(0x46a)]=_0x2859cf(0x2f1);['autoFrameCount']=0x0;[_0x2859cf(0x3a4)]=0x0;[_0x2859cf(0x429)];[_0x2859cf(0x40b)]=null;[_0x2859cf(0x23b)];[_0x2859cf(0x41f)];['renderScale'];[_0x2859cf(0x3a7)];['interactionStepScale'];[_0x2859cf(0x451)]=new Set();[_0x2859cf(0x3eb)]=!0x0;[_0x2859cf(0x288)]=!0x1;['brickScheduleCount']=0x0;[_0x2859cf(0x2c2)]=0x0;[_0x2859cf(0x27f)]=null;[_0x2859cf(0x2c5)];[_0x2859cf(0x331)];['onSlicesChange'];[_0x2859cf(0x35b)]=0x0;['lastTimingFrameTimestamp']=0x0;[_0x2859cf(0x2d4)]=0x0;[_0x2859cf(0x3c1)]=new Set();['sliceInteraction']=null;[_0x2859cf(0x240)]=null;constructor(_0x274dd8,_0x141d70){const _0x130f87=_0x2859cf;this['renderer']=_0x141d70,this[_0x130f87(0x23c)]=_0x274dd8['canvas'],this[_0x130f87(0x477)]=_0x274dd8['interactionElement']??_0x274dd8[_0x130f87(0x23c)],this[_0x130f87(0x3b9)]=_0x274dd8[_0x130f87(0x3b9)]??'managed',this[_0x130f87(0x287)]=_0x274dd8[_0x130f87(0x287)],this['timeIndex']=_0x274dd8[_0x130f87(0x25b)]??0x0,this['layout']=this[_0x130f87(0x3f5)](_0x274dd8),this['descriptors']=createVolumeBrickDescriptors(this[_0x130f87(0x287)]['metadata'],this[_0x130f87(0x2ea)]),this['volumeCamera']=new VolumeCamera({'state':_0x274dd8[_0x130f87(0x448)]??DEFAULT_CAMERA}),this['sliceState']=this[_0x130f87(0x32c)](_0x274dd8);let _0x5d2e2e=prepareWebgpuVolumeTransfer(_0x274dd8[_0x130f87(0x1ad)],_0x274dd8[_0x130f87(0x37b)]);if(this[_0x130f87(0x1ad)]=_0x5d2e2e[_0x130f87(0x1ad)],this['colorInputs']=_0x274dd8[_0x130f87(0x1ad)],this[_0x130f87(0x37b)]=_0x274dd8[_0x130f87(0x37b)],this[_0x130f87(0x25f)]=_0x274dd8[_0x130f87(0x46c)]??IDENTITY_MATRIX,this['verticalScale']=validatePositiveOption(_0x274dd8[_0x130f87(0x42f)]??0x1,_0x130f87(0x42f)),this[_0x130f87(0x3cb)]=_0x274dd8['coordinateSystem']??_0x130f87(0x2ec),this[_0x130f87(0x3cb)]===_0x130f87(0x1c7)&&_0x274dd8[_0x130f87(0x46c)])throw Error(_0x130f87(0x28b));this[_0x130f87(0x2f4)]=_0x274dd8['clipBox']??null,this['quality']=_0x274dd8[_0x130f87(0x243)]??_0x130f87(0x229),this[_0x130f87(0x23b)]=_0x274dd8['navigationMode']??_0x130f87(0x28d),this['pixelRatioCap']=validatePositiveOption(_0x274dd8[_0x130f87(0x41f)]??0x2,_0x130f87(0x41f)),this[_0x130f87(0x275)]=validatePositiveOption(_0x274dd8[_0x130f87(0x275)]??0x1,'renderScale'),this['interactionRenderScale']=validatePositiveOption(_0x274dd8['interactionRenderScale']??0.6,_0x130f87(0x3a7)),this[_0x130f87(0x481)]=validatePositiveOption(_0x274dd8[_0x130f87(0x481)]??0x1,_0x130f87(0x481)),this[_0x130f87(0x429)]=_0x274dd8['colorMode']??_0x130f87(0x2a1),this[_0x130f87(0x2c5)]=_0x274dd8['sliceInteraction']?.[_0x130f87(0x341)]??_0x130f87(0x3cc),this[_0x130f87(0x331)]=_0x274dd8[_0x130f87(0x48f)]?.[_0x130f87(0x32e)],this[_0x130f87(0x475)]=_0x274dd8[_0x130f87(0x48f)]?.[_0x130f87(0x475)],this[_0x130f87(0x23e)][_0x130f87(0x49b)](()=>this[_0x130f87(0x34c)]()),this[_0x130f87(0x23e)][_0x130f87(0x200)](_0x5d2e2e['colorStops'],_0x5d2e2e['opacityStops']);let _0x3655a6=_0x274dd8[_0x130f87(0x406)]??this['coordinateSystem']===_0x130f87(0x2ec);this[_0x130f87(0x23e)]['setAxes'](_0x3655a6?[createBoundsMesh(),createAxesMesh()]:[]),this['renderer'][_0x130f87(0x207)]({'renderMode':_0x274dd8['mode']??_0x130f87(0x2e8),'colorMode':this['colorMode'],'opacity':_0x274dd8[_0x130f87(0x446)]??0.3,'densityScale':_0x274dd8[_0x130f87(0x1ea)]??0x1,'stepLength':this['getStepLength'](),'volumeDimFactor':this['sliceState']['volumeDimFactor']}),this[_0x130f87(0x22d)](),this[_0x130f87(0x343)](),this[_0x130f87(0x3f9)](),this[_0x130f87(0x3e4)](_0x274dd8),this[_0x130f87(0x1f0)]();}static async[_0x2859cf(0x380)](_0x42d70d){const _0x1d6aca=_0x2859cf;if(validateVolumeSource(_0x42d70d[_0x1d6aca(0x287)]),validateVolumeTimeIndex(_0x42d70d[_0x1d6aca(0x287)][_0x1d6aca(0x204)],_0x42d70d[_0x1d6aca(0x25b)]??0x0),(_0x42d70d[_0x1d6aca(0x472)]?.[_0x1d6aca(0x2b1)]??0x1)!==0x1)throw Error(_0x1d6aca(0x342));let _0x364711=_0x42d70d[_0x1d6aca(0x472)]?.[_0x1d6aca(0x33b)]??0x20000000,_0x292296=new WebgpuVolumeSceneRenderer({'memoryTargetBytes':_0x364711,'memoryHardLimitBytes':_0x42d70d[_0x1d6aca(0x472)]?.[_0x1d6aca(0x4a0)]??_0x364711});await _0x292296['initialize'](_0x42d70d['canvas']);let _0xbc0b9e=new VolumeScene(_0x42d70d,_0x292296);return _0xbc0b9e[_0x1d6aca(0x19f)](),_0xbc0b9e['scheduleBricks'](),_0xbc0b9e[_0x1d6aca(0x3b9)]===_0x1d6aca(0x415)&&_0xbc0b9e[_0x1d6aca(0x323)](),_0xbc0b9e;}get[_0x2859cf(0x448)](){const _0x5a1fd7=_0x2859cf;return this['volumeCamera'][_0x5a1fd7(0x2f6)];}get[_0x2859cf(0x21b)](){const _0xa47d03=_0x2859cf;return this[_0xa47d03(0x298)][_0xa47d03(0x21b)];}get[_0x2859cf(0x34f)](){const _0x4ea305=_0x2859cf;let _0x2a4b7c=this[_0x4ea305(0x3b9)]===_0x4ea305(0x1b8)||this['isInteracting']()||performance[_0x4ea305(0x289)]()-this[_0x4ea305(0x35b)]<=0xfa?this[_0x4ea305(0x2d4)]:0x0;return{...this[_0x4ea305(0x23e)]['statistics'],'pendingBrickCount':this[_0x4ea305(0x30d)][_0x4ea305(0x376)],'brickScheduleCount':this[_0x4ea305(0x2aa)],'brickSortCount':this[_0x4ea305(0x2c2)],'actualFrameIntervalMilliseconds':_0x2a4b7c,'estimatedFps':_0x2a4b7c>0x0?0x3e8/_0x2a4b7c:0x0,'effectiveQuality':this['getEffectiveQuality'](),'effectiveRenderScale':this[_0x4ea305(0x1ce)](),'interactionKind':this['getInteractionKind']()};}['update'](_0x2c586e){const _0x1dca53=_0x2859cf;_0x2c586e['camera']&&this[_0x1dca53(0x28f)](_0x2c586e['camera']),_0x2c586e[_0x1dca53(0x46c)]&&(this[_0x1dca53(0x25f)]=[..._0x2c586e['modelMatrix']]),_0x2c586e[_0x1dca53(0x42f)]!==void 0x0&&(this[_0x1dca53(0x42f)]=validatePositiveOption(_0x2c586e[_0x1dca53(0x42f)],_0x1dca53(0x42f))),_0x2c586e[_0x1dca53(0x2f4)]!==void 0x0&&(this[_0x1dca53(0x2f4)]=_0x2c586e[_0x1dca53(0x2f4)]),_0x2c586e[_0x1dca53(0x243)]&&(this[_0x1dca53(0x243)]=_0x2c586e[_0x1dca53(0x243)]),_0x2c586e[_0x1dca53(0x23b)]&&(this['navigationMode']=_0x2c586e[_0x1dca53(0x23b)]);let _0x324c8f=!0x1;if(_0x2c586e[_0x1dca53(0x41f)]!==void 0x0&&(this[_0x1dca53(0x41f)]=validatePositiveOption(_0x2c586e[_0x1dca53(0x41f)],_0x1dca53(0x41f)),_0x324c8f=!0x0),_0x2c586e[_0x1dca53(0x275)]!==void 0x0&&(this[_0x1dca53(0x275)]=validatePositiveOption(_0x2c586e['renderScale'],_0x1dca53(0x275)),_0x324c8f=!0x0),_0x2c586e[_0x1dca53(0x3a7)]!==void 0x0&&(this[_0x1dca53(0x3a7)]=validatePositiveOption(_0x2c586e['interactionRenderScale'],_0x1dca53(0x3a7)),_0x324c8f=this[_0x1dca53(0x234)]()),_0x2c586e['interactionStepScale']!==void 0x0&&(this['interactionStepScale']=validatePositiveOption(_0x2c586e[_0x1dca53(0x481)],_0x1dca53(0x481))),_0x2c586e['colorMode']&&(this[_0x1dca53(0x429)]=_0x2c586e[_0x1dca53(0x429)]),_0x2c586e[_0x1dca53(0x1ad)]||_0x2c586e[_0x1dca53(0x37b)]){let _0x3d6ae7=prepareWebgpuVolumeTransfer(_0x2c586e[_0x1dca53(0x1ad)]??this[_0x1dca53(0x43b)],_0x2c586e['opacityStops']??this[_0x1dca53(0x37b)]);this[_0x1dca53(0x1ad)]=_0x3d6ae7[_0x1dca53(0x1ad)],this[_0x1dca53(0x43b)]=_0x2c586e[_0x1dca53(0x1ad)]??this['colorInputs'],this[_0x1dca53(0x37b)]=_0x2c586e[_0x1dca53(0x37b)]??this[_0x1dca53(0x37b)],this[_0x1dca53(0x23e)][_0x1dca53(0x200)](_0x3d6ae7[_0x1dca53(0x1ad)],_0x3d6ae7[_0x1dca53(0x37b)]),this[_0x1dca53(0x4a1)]();}_0x2c586e[_0x1dca53(0x429)]&&!_0x2c586e[_0x1dca53(0x1ad)]&&!_0x2c586e['opacityStops']&&this[_0x1dca53(0x4a1)](),this[_0x1dca53(0x23e)][_0x1dca53(0x207)]({'renderMode':_0x2c586e[_0x1dca53(0x263)],'colorMode':_0x2c586e[_0x1dca53(0x429)],'opacity':_0x2c586e[_0x1dca53(0x446)],'densityScale':_0x2c586e[_0x1dca53(0x1ea)],'stepLength':this[_0x1dca53(0x489)]()}),this['configureModel'](),_0x324c8f&&this[_0x1dca53(0x19f)](),this[_0x1dca53(0x323)]();}[_0x2859cf(0x28f)](_0x3865f8){const _0x220086=_0x2859cf;this[_0x220086(0x45a)][_0x220086(0x2a4)](_0x3865f8),this[_0x220086(0x2f5)](),this[_0x220086(0x323)]();}['setTimeIndex'](_0x53b76b){const _0x3ed4a7=_0x2859cf;validateVolumeTimeIndex(this['source'][_0x3ed4a7(0x204)],_0x53b76b),_0x53b76b!==this['timeIndex']&&(this['timeIndex']=_0x53b76b,this['resetBrickRequests']());}[_0x2859cf(0x3f3)](_0x447aa7){const _0x11b449=_0x2859cf;validateVolumeSource(_0x447aa7),this['source']=_0x447aa7,this[_0x11b449(0x25b)]=Math[_0x11b449(0x28e)](this['timeIndex'],_0x447aa7[_0x11b449(0x204)][_0x11b449(0x2e4)]-0x1),this['layout']=createVolumeBrickLayout(_0x447aa7['metadata'],this[_0x11b449(0x2ea)]['shape']),this[_0x11b449(0x197)]=createVolumeBrickDescriptors(_0x447aa7[_0x11b449(0x204)],this['layout']),this[_0x11b449(0x298)][_0x11b449(0x26d)](_0x447aa7[_0x11b449(0x204)]),this[_0x11b449(0x22d)](),this['configureModel'](),this['resetBrickRequests'](),this['rebuildProfiles'](),this[_0x11b449(0x323)]();}['setRouteProfiles'](_0x563259){const _0x39a78f=_0x2859cf;this[_0x39a78f(0x416)]=_0x563259,this[_0x39a78f(0x4a1)](),this['requestBrickSchedule'](),this[_0x39a78f(0x323)]();}['setSliceTool'](_0x3d79a4){const _0x3a8bbc=_0x2859cf;this['sliceState'][_0x3a8bbc(0x1ef)](_0x3d79a4);}[_0x2859cf(0x1c8)](_0xc0631d){const _0x38beb0=_0x2859cf;if(this['destroyed']||this['activeInteractions']['has'](_0xc0631d))return;let _0x280353=!this[_0x38beb0(0x234)]();this[_0x38beb0(0x451)]['add'](_0xc0631d),_0x280353&&(this[_0x38beb0(0x202)]=0x0,this[_0x38beb0(0x19f)]());}[_0x2859cf(0x239)](_0x1c4d21){const _0x786a01=_0x2859cf;this['destroyed']||!this[_0x786a01(0x451)][_0x786a01(0x18e)](_0x1c4d21)||this[_0x786a01(0x234)]()||(this[_0x786a01(0x202)]=0x0,this[_0x786a01(0x19f)]());}[_0x2859cf(0x476)](_0x12f39,_0x211296){const _0x399030=_0x2859cf;this['sliceState'][_0x399030(0x224)](_0x12f39,_0x211296);let _0x456987=this[_0x399030(0x298)][_0x399030(0x3d0)]();if(!_0x456987)throw Error(_0x399030(0x2ce));return _0x456987;}[_0x2859cf(0x3d3)](_0x2b752c,_0x5db0c4){const _0x2296a6=_0x2859cf;this['sliceState'][_0x2296a6(0x39d)](_0x2b752c,_0x5db0c4);}[_0x2859cf(0x2cb)](_0x183c62){const _0x4f13cc=_0x2859cf;this[_0x4f13cc(0x298)][_0x4f13cc(0x2cb)](_0x183c62);}[_0x2859cf(0x41d)](){const _0x2292c8=_0x2859cf;this[_0x2292c8(0x298)][_0x2292c8(0x41d)]();}[_0x2859cf(0x19f)](){const _0x515bc5=_0x2859cf;let _0x670121=Math[_0x515bc5(0x28e)](window[_0x515bc5(0x389)]||0x1,this[_0x515bc5(0x41f)])*this[_0x515bc5(0x1ce)](),_0x58d1b7=Math['max'](0x1,Math[_0x515bc5(0x3cf)](this[_0x515bc5(0x23c)][_0x515bc5(0x295)]*_0x670121||this['canvas']['width']||0x1)),_0x46cb67=Math[_0x515bc5(0x284)](0x1,Math[_0x515bc5(0x3cf)](this[_0x515bc5(0x23c)][_0x515bc5(0x3a9)]*_0x670121||this['canvas']['height']||0x1));this[_0x515bc5(0x45a)][_0x515bc5(0x36e)](_0x58d1b7/_0x46cb67),(this['canvas'][_0x515bc5(0x456)]!==_0x58d1b7||this[_0x515bc5(0x23c)][_0x515bc5(0x3de)]!==_0x46cb67)&&this['renderer']['resize'](_0x58d1b7,_0x46cb67),this['requestRender']();}[_0x2859cf(0x31f)](){const _0x2e0511=_0x2859cf;if(this[_0x2e0511(0x2d3)])return;this[_0x2e0511(0x432)](),this[_0x2e0511(0x2ee)]();let _0x5afbd7=this[_0x2e0511(0x45a)][_0x2e0511(0x27e)];if(this[_0x2e0511(0x23e)][_0x2e0511(0x28f)]({'viewProjection':Array[_0x2e0511(0x1e5)](_0x5afbd7[_0x2e0511(0x387)]),'inverseViewProjection':Array[_0x2e0511(0x1e5)](_0x5afbd7['inverseViewProjection']),'cameraPosition':this[_0x2e0511(0x45a)][_0x2e0511(0x2f6)]['position']}),this['renderer'][_0x2e0511(0x207)]({'stepLength':this[_0x2e0511(0x489)]()}),!this[_0x2e0511(0x23e)][_0x2e0511(0x31f)]()){this['renderDirty']=!0x0;return;}this[_0x2e0511(0x3eb)]=!0x1,this['recordFrameInterval'](performance['now']()),this['markerOverlay']?.[_0x2e0511(0x207)]();}[_0x2859cf(0x23a)](){const _0x510822=_0x2859cf;if(this['destroyed'])return Promise[_0x510822(0x460)](Error(_0x510822(0x2a0)));this['flushSliceState'](),this['flushBrickSchedule']();let _0x1b29df=this[_0x510822(0x45a)]['matrices'];return this[_0x510822(0x23e)][_0x510822(0x28f)]({'viewProjection':Array[_0x510822(0x1e5)](_0x1b29df['viewProjection']),'inverseViewProjection':Array[_0x510822(0x1e5)](_0x1b29df[_0x510822(0x2bb)]),'cameraPosition':this[_0x510822(0x45a)]['state']['position']}),this[_0x510822(0x23e)][_0x510822(0x23a)]();}[_0x2859cf(0x355)](){const _0x489422=_0x2859cf;if(!this[_0x489422(0x2d3)]){this[_0x489422(0x2d3)]=!0x0,this[_0x489422(0x2f3)]+=0x1;for(let _0x400be4 of this[_0x489422(0x3c1)])_0x400be4[_0x489422(0x306)]();this[_0x489422(0x3c1)][_0x489422(0x314)](),cancelAnimationFrame(this[_0x489422(0x369)]),this['renderer'][_0x489422(0x49b)](null),this[_0x489422(0x400)]['splice'](0x0)[_0x489422(0x296)](_0x363aa8=>_0x363aa8()),this[_0x489422(0x23e)][_0x489422(0x355)](),this[_0x489422(0x48f)]?.[_0x489422(0x355)](),this[_0x489422(0x240)]?.['destroy'](),this['loadedKeys'][_0x489422(0x314)](),this['pendingKeys'][_0x489422(0x314)](),this[_0x489422(0x189)]['clear'](),this['activeInteractions'][_0x489422(0x314)](),this[_0x489422(0x27f)]=null;}}[_0x2859cf(0x3f5)](_0x52ab42){const _0x23207a=_0x2859cf;return createVolumeBrickLayout(_0x52ab42[_0x23207a(0x287)]['metadata'],{'width':_0x52ab42['chunk']?.[_0x23207a(0x456)],'height':_0x52ab42['chunk']?.[_0x23207a(0x3de)],'depth':_0x52ab42[_0x23207a(0x472)]?.[_0x23207a(0x42d)],'halo':_0x52ab42[_0x23207a(0x472)]?.[_0x23207a(0x2b1)]});}[_0x2859cf(0x2da)](){const _0x475cc3=_0x2859cf;return this['quality']===_0x475cc3(0x229)?this['autoQuality']:this[_0x475cc3(0x243)];}[_0x2859cf(0x489)](){const _0x561a30=_0x2859cf;let _0x29de85=qualityStepLength(this[_0x561a30(0x2da)]());return(this[_0x561a30(0x3cb)]===_0x561a30(0x1c7)?_0x29de85*0.05:_0x29de85)*(this[_0x561a30(0x234)]()?this[_0x561a30(0x481)]:0x1);}['isInteracting'](){const _0x41c761=_0x2859cf;return this['activeInteractions'][_0x41c761(0x376)]>0x0;}[_0x2859cf(0x1b6)](){const _0x1bfb0d=_0x2859cf;return this[_0x1bfb0d(0x451)][_0x1bfb0d(0x376)]===0x0?_0x1bfb0d(0x1da):this[_0x1bfb0d(0x451)][_0x1bfb0d(0x376)]>0x1?_0x1bfb0d(0x371):this[_0x1bfb0d(0x451)]['values']()['next']()['value']??'idle';}['getEffectiveRenderScale'](){const _0x4b705c=_0x2859cf;return this[_0x4b705c(0x275)]*(this[_0x4b705c(0x234)]()?this[_0x4b705c(0x3a7)]:0x1);}[_0x2859cf(0x18c)](_0x478b17){const _0x3f4d4f=_0x2859cf;if(this[_0x3f4d4f(0x35b)]=_0x478b17,!(this[_0x3f4d4f(0x3b9)]==='external'||this[_0x3f4d4f(0x234)]())){this['lastTimingFrameTimestamp']=0x0;return;}if(this[_0x3f4d4f(0x202)]>0x0){let _0x127131=_0x478b17-this['lastTimingFrameTimestamp'];_0x127131>0x0&&_0x127131<=0xfa&&(this[_0x3f4d4f(0x2d4)]=this['actualFrameIntervalMilliseconds']===0x0?_0x127131:this[_0x3f4d4f(0x2d4)]*0.8+_0x127131*0.2,this[_0x3f4d4f(0x291)](_0x127131));}this[_0x3f4d4f(0x202)]=_0x478b17;}[_0x2859cf(0x291)](_0x15d68e){const _0x2b9051=_0x2859cf;if(this['quality']!==_0x2b9051(0x229)||(this[_0x2b9051(0x2fd)]+=0x1,this[_0x2b9051(0x3a4)]+=_0x15d68e,this[_0x2b9051(0x2fd)]<0x1e))return;let _0xf9aefe=this[_0x2b9051(0x3a4)]/this[_0x2b9051(0x2fd)];if(this[_0x2b9051(0x2fd)]=0x0,this['autoFrameIntervalTotal']=0x0,this[_0x2b9051(0x234)]()&&_0xf9aefe<0xe)return;let _0x575fcc=nextAutoQuality(this[_0x2b9051(0x46a)],_0xf9aefe);_0x575fcc!==this['autoQuality']&&(this[_0x2b9051(0x46a)]=_0x575fcc,this['requestBrickSchedule'](),this[_0x2b9051(0x323)]());}['createSliceState'](_0x2abfa9){const _0x2b17c3=_0x2859cf;return new SliceState(_0x2abfa9[_0x2b17c3(0x287)][_0x2b17c3(0x204)],{'volumeDimFactor':_0x2abfa9[_0x2b17c3(0x48f)]?.[_0x2b17c3(0x328)],'depthMode':_0x2abfa9['sliceInteraction']?.[_0x2b17c3(0x341)],'maxLockedSlices':_0x2abfa9[_0x2b17c3(0x48f)]?.[_0x2b17c3(0x1f9)],'onLimitReached':_0x445c5f=>_0x2abfa9[_0x2b17c3(0x48f)]?.[_0x2b17c3(0x411)]?.(Error('Maximum\x20locked\x20slice\x20count\x20is\x20'+_0x445c5f+'.\x20最大锁定切面数量为\x20'+_0x445c5f+'。'))});}[_0x2859cf(0x3f9)](){const _0x3b6ebf=_0x2859cf;let _0x2585f6=this[_0x3b6ebf(0x298)]['subscribe'](_0x4a3360=>{const _0x2fe9e=_0x3b6ebf;this[_0x2fe9e(0x27f)]=_0x4a3360,this[_0x2fe9e(0x323)]();});this[_0x3b6ebf(0x400)]['push'](_0x2585f6);}[_0x2859cf(0x432)](){const _0x35d7b2=_0x2859cf;let _0x420220=this[_0x35d7b2(0x27f)];if(!_0x420220)return;this[_0x35d7b2(0x27f)]=null;let _0x19f607=[];if(_0x420220[_0x35d7b2(0x276)]){let _0x45743a=_0x420220[_0x35d7b2(0x276)][_0x35d7b2(0x1d4)]==='x'?this[_0x35d7b2(0x287)][_0x35d7b2(0x204)][_0x35d7b2(0x1bf)]:_0x420220[_0x35d7b2(0x276)][_0x35d7b2(0x1d4)]==='y'?this[_0x35d7b2(0x287)][_0x35d7b2(0x204)][_0x35d7b2(0x1de)]:this[_0x35d7b2(0x287)]['metadata'][_0x35d7b2(0x203)];_0x19f607[_0x35d7b2(0x39a)]({'id':_0x35d7b2(0x409),'axis':_0x420220[_0x35d7b2(0x276)]['axis'],'position':clamp01(volumeAxisValueToNormalized(_0x45743a,_0x420220[_0x35d7b2(0x276)]['position'])),'depthMode':this[_0x35d7b2(0x2c5)],'visible':!0x0,'opacity':0.72,'plateColor':this[_0x35d7b2(0x331)]});}for(let _0x59c6e0 of _0x420220[_0x35d7b2(0x21b)]){let _0x3b0965=_0x59c6e0['axis']==='x'?this['source']['metadata']['xAxis']:_0x59c6e0[_0x35d7b2(0x1d4)]==='y'?this[_0x35d7b2(0x287)][_0x35d7b2(0x204)][_0x35d7b2(0x1de)]:this[_0x35d7b2(0x287)]['metadata']['zAxis'];_0x19f607[_0x35d7b2(0x39a)]({..._0x59c6e0,'position':clamp01(volumeAxisValueToNormalized(_0x3b0965,_0x59c6e0[_0x35d7b2(0x27c)])),'opacity':0x1,'plateColor':this[_0x35d7b2(0x331)]});}this['renderer'][_0x35d7b2(0x1fd)](_0x19f607),this['renderer'][_0x35d7b2(0x207)]({'volumeDimFactor':_0x420220[_0x35d7b2(0x276)]||_0x420220[_0x35d7b2(0x21b)][_0x35d7b2(0x1b7)](_0x521057=>_0x521057['visible'])?_0x420220[_0x35d7b2(0x328)]:0x1}),this[_0x35d7b2(0x475)]?.(_0x420220[_0x35d7b2(0x21b)]),this[_0x35d7b2(0x288)]=!0x0;}['bindSliceInteraction'](_0x370ccd){const _0x7264c1=_0x2859cf;let _0x4d3b78=()=>({'viewProjectionMatrix':this['volumeCamera'][_0x7264c1(0x27e)]['viewProjection'],'modelMatrix':composeVolumeModelMatrix(this[_0x7264c1(0x25f)],this[_0x7264c1(0x42f)]),'viewportWidth':Math[_0x7264c1(0x284)](0x1,this[_0x7264c1(0x23c)][_0x7264c1(0x295)]),'viewportHeight':Math['max'](0x1,this[_0x7264c1(0x23c)][_0x7264c1(0x3a9)])});this[_0x7264c1(0x48f)]=new SliceInteractionController(this[_0x7264c1(0x477)],this['sliceState'],_0x4d3b78,{'hitTolerancePixels':_0x370ccd[_0x7264c1(0x48f)]?.[_0x7264c1(0x499)],'onInteractionStart':()=>this[_0x7264c1(0x1c8)](_0x7264c1(0x226)),'onInteractionEnd':()=>this[_0x7264c1(0x239)](_0x7264c1(0x226))}),this[_0x7264c1(0x48f)][_0x7264c1(0x1b3)](),_0x370ccd[_0x7264c1(0x32a)]&&(this['markerOverlay']=new SliceMarkerOverlay(_0x370ccd[_0x7264c1(0x32a)],this[_0x7264c1(0x298)],_0x4d3b78,{'interactionController':this[_0x7264c1(0x48f)]}));}[_0x2859cf(0x1f0)](){const _0x135359=_0x2859cf;let _0x4134d2=_0x177799=>{const _0x593fdd=_0x1b5d;_0x177799['button']!==0x0&&_0x177799[_0x593fdd(0x497)]!==0x2||(this[_0x593fdd(0x40b)]={'id':_0x177799[_0x593fdd(0x38f)],'x':_0x177799[_0x593fdd(0x1aa)],'y':_0x177799[_0x593fdd(0x1fe)],'pan':_0x177799[_0x593fdd(0x497)]===0x2||_0x177799['pointerType']!==_0x593fdd(0x318)&&this[_0x593fdd(0x23b)]===_0x593fdd(0x494)},this['beginInteraction'](_0x593fdd(0x448)),this[_0x593fdd(0x477)]['setPointerCapture']?.(_0x177799[_0x593fdd(0x38f)]),_0x177799[_0x593fdd(0x3bd)]());},_0xee862=_0x57d27b=>{const _0x2f435e=_0x1b5d;if(!this[_0x2f435e(0x40b)]||this[_0x2f435e(0x40b)]['id']!==_0x57d27b[_0x2f435e(0x38f)])return;let _0x4b2e88=_0x57d27b[_0x2f435e(0x1aa)]-this[_0x2f435e(0x40b)]['x'],_0x42bde5=_0x57d27b[_0x2f435e(0x1fe)]-this[_0x2f435e(0x40b)]['y'];this[_0x2f435e(0x40b)]['x']=_0x57d27b[_0x2f435e(0x1aa)],this[_0x2f435e(0x40b)]['y']=_0x57d27b[_0x2f435e(0x1fe)],this[_0x2f435e(0x40b)]['pan']?this[_0x2f435e(0x45a)][_0x2f435e(0x494)](_0x4b2e88,_0x42bde5,this[_0x2f435e(0x23c)][_0x2f435e(0x3a9)]):this[_0x2f435e(0x45a)][_0x2f435e(0x28d)](_0x4b2e88,_0x42bde5),this[_0x2f435e(0x2f5)](),this[_0x2f435e(0x323)]();},_0x3d22db=_0x270685=>{const _0x47e033=_0x1b5d;this[_0x47e033(0x40b)]?.['id']===_0x270685[_0x47e033(0x38f)]&&(this[_0x47e033(0x40b)]=null,this[_0x47e033(0x239)]('camera'));},_0x166e2a=_0x38f73b=>{const _0x1f5061=_0x1b5d;_0x38f73b['preventDefault'](),this['volumeCamera'][_0x1f5061(0x246)](_0x38f73b[_0x1f5061(0x22f)]),this[_0x1f5061(0x2f5)](),this[_0x1f5061(0x323)]();},_0x5ea105=_0x5194d9=>_0x5194d9[_0x135359(0x3bd)]();this[_0x135359(0x477)][_0x135359(0x29c)](_0x135359(0x293),_0x4134d2),this[_0x135359(0x477)][_0x135359(0x29c)](_0x135359(0x48e),_0xee862),this[_0x135359(0x477)][_0x135359(0x29c)](_0x135359(0x1d9),_0x3d22db),this[_0x135359(0x477)][_0x135359(0x29c)]('pointercancel',_0x3d22db),this['interactionElement'][_0x135359(0x29c)](_0x135359(0x3c9),_0x166e2a,{'passive':!0x1}),this[_0x135359(0x477)][_0x135359(0x29c)](_0x135359(0x1f3),_0x5ea105),this[_0x135359(0x400)][_0x135359(0x39a)](()=>this[_0x135359(0x477)][_0x135359(0x205)](_0x135359(0x293),_0x4134d2),()=>this[_0x135359(0x477)][_0x135359(0x205)](_0x135359(0x48e),_0xee862),()=>this[_0x135359(0x477)][_0x135359(0x205)]('pointerup',_0x3d22db),()=>this['interactionElement'][_0x135359(0x205)](_0x135359(0x2d0),_0x3d22db),()=>this[_0x135359(0x477)]['removeEventListener'](_0x135359(0x3c9),_0x166e2a),()=>this[_0x135359(0x477)][_0x135359(0x205)](_0x135359(0x1f3),_0x5ea105));}['configureSource'](){const _0x343816=_0x2859cf;this[_0x343816(0x23e)][_0x343816(0x3f3)]({'xAxis':this[_0x343816(0x287)][_0x343816(0x204)][_0x343816(0x1bf)],'yAxis':this[_0x343816(0x287)][_0x343816(0x204)][_0x343816(0x1de)],'zAxis':this[_0x343816(0x287)][_0x343816(0x204)][_0x343816(0x203)],'brickWidth':this[_0x343816(0x2ea)][_0x343816(0x211)][_0x343816(0x456)],'brickHeight':this[_0x343816(0x2ea)][_0x343816(0x211)][_0x343816(0x3de)],'brickDepth':this[_0x343816(0x2ea)][_0x343816(0x211)][_0x343816(0x42d)],'halo':0x1,'noData':this['source'][_0x343816(0x204)][_0x343816(0x219)]});}[_0x2859cf(0x343)](){const _0x24bd31=_0x2859cf;if(this[_0x24bd31(0x3cb)]===_0x24bd31(0x1c7)){let _0x1ff015=createGeographicVolumeLayout(this[_0x24bd31(0x287)]['metadata'],this['verticalScale']);this[_0x24bd31(0x23e)]['update']({'modelMatrix':_0x1ff015[_0x24bd31(0x2e0)],'inverseModelMatrix':Array[_0x24bd31(0x1e5)](invertMatrix(_0x1ff015[_0x24bd31(0x2e0)])),'geographicTransform':_0x1ff015[_0x24bd31(0x2f9)],'clipMinimum':[0x0,0x0,0x0],'clipMaximum':[0x1,0x1,0x1]}),this[_0x24bd31(0x323)]();return;}let _0x2401b8=composeVolumeModelMatrix(this['baseModelMatrix'],this[_0x24bd31(0x42f)]),_0xb0fecd=normalizeClipBox(this[_0x24bd31(0x287)],this['clipBox']);this['renderer'][_0x24bd31(0x207)]({'modelMatrix':Array[_0x24bd31(0x1e5)](_0x2401b8),'inverseModelMatrix':Array[_0x24bd31(0x1e5)](invertMatrix(_0x2401b8)),'geographicTransform':null,'clipMinimum':_0xb0fecd['minimum'],'clipMaximum':_0xb0fecd[_0x24bd31(0x221)]}),this[_0x24bd31(0x323)]();}[_0x2859cf(0x4a1)](){const _0x55a5a7=_0x2859cf;let _0x4ddcac=this[_0x55a5a7(0x416)][_0x55a5a7(0x3c0)](_0x4f5d8a=>createProfileSceneMesh(buildVolumeRouteProfileMesh(_0x4f5d8a,this[_0x55a5a7(0x287)][_0x55a5a7(0x204)]),this[_0x55a5a7(0x1ad)],this[_0x55a5a7(0x37b)],this[_0x55a5a7(0x429)]));this['renderer']['setProfiles'](_0x4ddcac),this[_0x55a5a7(0x323)]();}[_0x2859cf(0x37d)](){const _0x43b7d6=_0x2859cf;this['sourceGeneration']+=0x1;for(let _0x144316 of this[_0x43b7d6(0x3c1)])_0x144316['abort']();this[_0x43b7d6(0x3c1)][_0x43b7d6(0x314)](),this[_0x43b7d6(0x235)]['clear'](),this[_0x43b7d6(0x30d)]['clear'](),this[_0x43b7d6(0x189)][_0x43b7d6(0x314)](),this[_0x43b7d6(0x22d)](),this[_0x43b7d6(0x410)]();}[_0x2859cf(0x2f5)](){const _0x396ab6=_0x2859cf;this[_0x396ab6(0x288)]=!0x0,this['requestRender']();}[_0x2859cf(0x2ee)](){const _0x5a3a40=_0x2859cf;this[_0x5a3a40(0x288)]&&(this[_0x5a3a40(0x288)]=!0x1,this['scheduleBricks']());}[_0x2859cf(0x410)](){const _0x27483c=_0x2859cf;if(this[_0x27483c(0x2d3)])return;this['brickScheduleDirty']=!0x1,this[_0x27483c(0x2aa)]+=0x1;let _0x17108f=this['renderer']['statistics']['atlasCapacity'];if(_0x17108f<=0x0)return;let _0x651012=_0x17108f>=this[_0x27483c(0x197)]['length'];if(_0x651012&&this[_0x27483c(0x189)][_0x27483c(0x376)]===this[_0x27483c(0x197)][_0x27483c(0x326)]&&this['loadedKeys'][_0x27483c(0x376)]===this[_0x27483c(0x197)][_0x27483c(0x326)]&&this[_0x27483c(0x30d)]['size']===0x0)return;let _0x3c125d;_0x651012?_0x3c125d=this[_0x27483c(0x197)]:(this['brickSortCount']+=0x1,_0x3c125d=[...this['descriptors']][_0x27483c(0x3cd)]((_0x2ebcb9,_0xd2fbee)=>descriptorDemandPriority(_0x2ebcb9,this[_0x27483c(0x287)],this[_0x27483c(0x298)],this[_0x27483c(0x416)])-descriptorDemandPriority(_0xd2fbee,this[_0x27483c(0x287)],this['sliceState'],this['profiles'])||descriptorDistance(_0x2ebcb9,this[_0x27483c(0x2ea)],this[_0x27483c(0x45a)]['state'])-descriptorDistance(_0xd2fbee,this['layout'],this[_0x27483c(0x45a)][_0x27483c(0x2f6)]))['slice'](0x0,_0x17108f));let _0x23435c=new Set(_0x3c125d['map'](_0x216835=>_0x216835[_0x27483c(0x21e)]));this['desiredKeys']=_0x23435c,_0x651012||this[_0x27483c(0x23e)]['touchBricks'](_0x3c125d[_0x27483c(0x29e)](_0xe827e=>this[_0x27483c(0x235)][_0x27483c(0x336)](_0xe827e[_0x27483c(0x21e)]))[_0x27483c(0x3c0)](_0x50b2b2=>descriptorLogicalIndex(_0x50b2b2,this[_0x27483c(0x2ea)])));for(let _0x53ddc2 of this[_0x27483c(0x235)])_0x23435c[_0x27483c(0x336)](_0x53ddc2)||this[_0x27483c(0x235)]['delete'](_0x53ddc2);let _0x466553=Math['max'](0x0,qualityUploadCount(this[_0x27483c(0x2da)]())-this[_0x27483c(0x30d)][_0x27483c(0x376)]),_0x204b04=_0x3c125d['filter'](_0x26496c=>!this['loadedKeys'][_0x27483c(0x336)](_0x26496c[_0x27483c(0x21e)])&&!this[_0x27483c(0x30d)][_0x27483c(0x336)](_0x26496c[_0x27483c(0x21e)]))[_0x27483c(0x226)](0x0,_0x466553);for(let _0x5c4356 of _0x204b04)this[_0x27483c(0x2b6)](_0x5c4356);}['loadBrick'](_0x5ac2ea){const _0x2cc157=_0x2859cf;let _0x9a46b4=this[_0x2cc157(0x2f3)],_0x2796b2=this['source'],_0x3ff5d4=this[_0x2cc157(0x25b)],_0x52260f=new AbortController();this[_0x2cc157(0x3c1)][_0x2cc157(0x35c)](_0x52260f),this[_0x2cc157(0x30d)][_0x2cc157(0x252)](_0x5ac2ea[_0x2cc157(0x21e)],_0x9a46b4),Promise[_0x2cc157(0x40a)](_0x2796b2['readChunk'](_0x3ff5d4,_0x5ac2ea[_0x2cc157(0x307)],_0x52260f[_0x2cc157(0x217)]))[_0x2cc157(0x346)](async _0x44cc6b=>{const _0x139b0d=_0x2cc157;if(this['destroyed']||_0x9a46b4!==this[_0x139b0d(0x2f3)]||_0x2796b2!==this['source']||_0x3ff5d4!==this[_0x139b0d(0x25b)]||!this['desiredKeys'][_0x139b0d(0x336)](_0x5ac2ea[_0x139b0d(0x21e)]))return;let _0x3f6eb1=createPhysicalBrickValues(_0x2796b2[_0x139b0d(0x204)],this[_0x139b0d(0x2ea)][_0x139b0d(0x211)],_0x5ac2ea,_0x44cc6b),_0x1a21b2=descriptorLogicalIndex(_0x5ac2ea,this[_0x139b0d(0x2ea)]);await this[_0x139b0d(0x23e)][_0x139b0d(0x3dd)]({'logicalIndex':_0x1a21b2,'values':_0x3f6eb1}),!(this[_0x139b0d(0x2d3)]||_0x9a46b4!==this[_0x139b0d(0x2f3)]||_0x2796b2!==this[_0x139b0d(0x287)]||_0x3ff5d4!==this[_0x139b0d(0x25b)]||!this[_0x139b0d(0x189)]['has'](_0x5ac2ea[_0x139b0d(0x21e)]))&&(this[_0x139b0d(0x235)][_0x139b0d(0x35c)](_0x5ac2ea[_0x139b0d(0x21e)]),this[_0x139b0d(0x323)]());})['catch'](_0x18327f=>{const _0x1c86df=_0x2cc157;_0x18327f instanceof DOMException&&_0x18327f[_0x1c86df(0x44c)]===_0x1c86df(0x45b)||console[_0x1c86df(0x1ed)](_0x18327f);})['finally'](()=>{const _0x169e31=_0x2cc157;this[_0x169e31(0x3c1)][_0x169e31(0x18e)](_0x52260f),this[_0x169e31(0x30d)][_0x169e31(0x374)](_0x5ac2ea['key'])===_0x9a46b4&&this[_0x169e31(0x30d)][_0x169e31(0x18e)](_0x5ac2ea['key']),_0x9a46b4===this[_0x169e31(0x2f3)]&&this[_0x169e31(0x410)]();});}[_0x2859cf(0x34c)](){const _0x5427f7=_0x2859cf;this['renderDirty']&&this[_0x5427f7(0x323)]();}[_0x2859cf(0x323)](){const _0x44c61f=_0x2859cf;this['destroyed']||(this[_0x44c61f(0x3eb)]=!0x0,!(this['renderMode']!==_0x44c61f(0x415)||this[_0x44c61f(0x369)]!==0x0)&&(this['frameRequest']=requestAnimationFrame(()=>{const _0x4831e4=_0x44c61f;this['frameRequest']=0x0,!(this[_0x4831e4(0x2d3)]||!this[_0x4831e4(0x3eb)])&&this[_0x4831e4(0x31f)]();})));}};const createVolumeScene=_0x4e8127=>VolumeScene[_0x2859cf(0x380)](_0x4e8127),validateIndexRange=(_0x5284a2,_0x27e38d,_0x419bb6,_0x50f007)=>{const _0x4f377b=_0x2859cf;if(!Number[_0x4f377b(0x2dd)](_0x5284a2)||!Number['isInteger'](_0x27e38d)||_0x5284a2<0x0||_0x27e38d<=0x0||_0x5284a2+_0x27e38d>_0x419bb6)throw Error(_0x50f007+'\x20range\x20is\x20invalid:\x20start='+_0x5284a2+_0x4f377b(0x417)+_0x27e38d+_0x4f377b(0x1cf)+_0x419bb6+'.\x20'+_0x50f007+'\x20范围无效。');},validateRange=(_0x51569f,_0x10a509)=>{const _0x1e4c2d=_0x2859cf;validateIndexRange(_0x10a509['xStart'],_0x10a509[_0x1e4c2d(0x434)],_0x51569f['xAxis'][_0x1e4c2d(0x251)],'X'),validateIndexRange(_0x10a509[_0x1e4c2d(0x334)],_0x10a509['levelCount'],_0x51569f[_0x1e4c2d(0x1de)][_0x1e4c2d(0x251)],_0x1e4c2d(0x3ab)),validateIndexRange(_0x10a509[_0x1e4c2d(0x212)],_0x10a509['sourceYCount'],_0x51569f[_0x1e4c2d(0x203)][_0x1e4c2d(0x251)],'sourceY');},validateData=_0x552c43=>{const _0x12d707=_0x2859cf;validateVolumeMetadata(_0x552c43);let _0x3da0d6=_0x552c43[_0x12d707(0x1bf)][_0x12d707(0x251)]*_0x552c43['yAxis'][_0x12d707(0x251)]*_0x552c43[_0x12d707(0x203)][_0x12d707(0x251)]*_0x552c43['timeCount'];if(_0x552c43[_0x12d707(0x1cd)][_0x12d707(0x326)]!==_0x3da0d6)throw Error('Volume\x20requires\x20'+_0x3da0d6+_0x12d707(0x1ec)+_0x552c43[_0x12d707(0x1cd)]['length']+'.\x20体积数据长度与维度不匹配。');},createInMemoryVolumeSource=_0xdb51e=>{validateData(_0xdb51e);let {values:_0xde9659,..._0x1288e7}=_0xdb51e;return{'metadata':_0x1288e7,'readChunk'(_0x37fc0c,_0x5f4384,_0x5bec86){const _0x43fd66=_0x1b5d;if(_0x5bec86?.[_0x43fd66(0x321)])throw new DOMException(_0x43fd66(0x3d4),_0x43fd66(0x45b));if(!Number[_0x43fd66(0x2dd)](_0x37fc0c)||_0x37fc0c<0x0||_0x37fc0c>=_0xdb51e[_0x43fd66(0x2e4)])throw Error('Volume\x20timeIndex\x20is\x20out\x20of\x20range:\x20'+_0x37fc0c+_0x43fd66(0x2ef));validateRange(_0xdb51e,_0x5f4384);let _0x27a19c=new Float32Array(_0x5f4384[_0x43fd66(0x434)]*_0x5f4384[_0x43fd66(0x304)]*_0x5f4384[_0x43fd66(0x21c)]),_0x4567ef=_0xdb51e['xAxis'][_0x43fd66(0x251)],_0x9ef737=_0xdb51e[_0x43fd66(0x1de)][_0x43fd66(0x251)],_0x1a2323=_0xdb51e[_0x43fd66(0x203)][_0x43fd66(0x251)],_0x1a1419=_0x37fc0c*_0x4567ef*_0x9ef737*_0x1a2323;for(let _0x1f634b=0x0;_0x1f634b<_0x5f4384[_0x43fd66(0x21c)];_0x1f634b+=0x1)for(let _0xc28fe2=0x0;_0xc28fe2<_0x5f4384[_0x43fd66(0x304)];_0xc28fe2+=0x1){let _0xe61faf=_0x1a1419+(((_0x5f4384['sourceYStart']+_0x1f634b)*_0x9ef737+_0x5f4384[_0x43fd66(0x334)]+_0xc28fe2)*_0x4567ef+_0x5f4384[_0x43fd66(0x231)]),_0x57b901=(_0x1f634b*_0x5f4384[_0x43fd66(0x304)]+_0xc28fe2)*_0x5f4384[_0x43fd66(0x434)];_0x27a19c[_0x43fd66(0x252)](_0xde9659[_0x43fd66(0x23f)](_0xe61faf,_0xe61faf+_0x5f4384[_0x43fd66(0x434)]),_0x57b901);}return{'timeIndex':_0x37fc0c,'range':{..._0x5f4384},'width':_0x5f4384[_0x43fd66(0x434)],'height':_0x5f4384['levelCount'],'depth':_0x5f4384[_0x43fd66(0x21c)],'values':_0x27a19c};}};};export{VolumeCamera,createGeographicVolumeLayout,createInMemoryVolumeSource,createVolumeScene,ecefToGeographicVolumeLocal,normalizedToVolumeAxisValue,volumeAxisValueToNormalized};
|
|
1
|
+
const _0x124919=_0x2335;function _0x4f79(){const _0x451801=['interactionRenderScale','left','values','onInteractionStart','endInteraction','positions','\x20requires\x20','brickSortCount','axisHysteresis','.\x20WebGPU\x20体积设备已丢失。','vertices','popErrorScope','colorInputs','Volume\x20opacity\x20stops\x20must\x20be\x20sorted\x20by\x20value.\x20体积透明度色标必须按数值升序排列。','maximumPitch','source','12px/1.2\x20sans-serif','filter','volume\x20brick\x20upload\x20batch\x20flush','\x20轴必须包含两个不同的有限端点。','createPipelineLayout','hitRadius','removeEventListener','createElement','finish','indices','options','setAxes','tan','resourceRebuildCount','hideAllMarkers','upload','halo','WebGPU\x20volume\x20page\x20table\x20exceeds\x20the\x20configured\x20memory\x20limit.\x20WebGPU\x20体积页表超过显存限制。','A\x20destroyed\x20volume\x20scene\x20cannot\x20capture\x20a\x20frame.\x20已销毁的体积场景不能读取帧。','maximumUploadBatchBytes','getSliceResources','then','clearLockedSlices','zAxis','rgba(','MAP_WRITE','find','startX','setSource','notify','opacityStopCount','depthTexture','min','updateLockedSlice','getDevice','vertexMain','setVertexBuffer','start','volumeCamera','sliceId','type','bindSliceInteraction','0\x202px','cameraState','正交相机高度必须大于\x200。','\x20with\x20multiple\x20samples\x20must\x20have\x20a\x20non-zero\x20step.\x20','sceneDepthView','volume\x20atlas\x20clear','overlaySlicePipeline','WebGPU\x20volume\x20atlas\x20is\x20not\x20configured.\x20WebGPU\x20体积图集尚未配置。','pendingBrickUploads','2695540BzjVpM','depthMode','\x20无效。','touchBricks','normalizationMeters','limits','WebGPU\x20slice\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20切面绑定布局不可用。','writeBuffer','cursor','configureSource','RGB\x20颜色通道必须在\x200\x20~\x20255\x20之间','copyTextureToBuffer','toUpperCase','r32float','viewProjection','one-minus-src-alpha','beginLockedSliceDrag','createSliceState','append','pageTableValues','clientX','validation','normalizedPosition','WebGPU\x20volume\x20atlas\x20has\x20no\x20evictable\x20slot.\x20WebGPU\x20体积图集没有可驱逐的槽位。','getAtlas','.\x20体积数据长度与维度不匹配。','renderMode','reject','exp','相机宽高比必须大于\x200。','createBuffer','yAxis','sliceResources','opacityValuesBuffer','premultiplied','top','.\x20WebGPU\x20体积帧读取失败。','\x20endpoints\x20must\x20be\x20finite.\x20','wgs84','managed','rowsPerImage','mode','destroy','store','brickScheduleCount','proxyModelMatrix','WebGPU\x20volume\x20scene\x20dimensions\x20must\x20be\x20positive\x20integers.\x20WebGPU\x20体积场景尺寸必须是正整数。','矩阵不可逆。','axes','inverseViewProjection','longitudeRadians','subarray','4px','\x20count','Volume\x20opacity\x20must\x20be\x20within\x20[0,\x201].\x20体积透明度必须位于\x20[0,\x201]。','skippedSamples','pointerleave','colorValuesBuffer','Returned\x20volume\x20chunk\x20timeIndex\x20does\x20not\x20match\x20the\x20request.\x20返回体积分块的时间索引与请求不一致。','recreateSceneBindGroup','set','rejectPendingBrickUploads','sourceYCount','height','volumeBindGroupLayout','createComputePipeline','sceneLinePipeline','recordFrameInterval','requestRender','切面深度模式无效\x20/\x20Slice\x20depth\x20mode\x20is\x20invalid','setPointerCapture','snapshot','handleFrameAvailable','get','\x20is\x20invalid:\x20','topology','slotCountX','3XIAVcp','submit','writeParams','end','releaseGpuResources','\x20position\x20must\x20be\x20normalized\x20to\x20zero\x20through\x20one.\x20体积切面位置必须归一化到零至一。','includes','setCamera','volume\x20scene\x20mesh\x20shader','size','geometryBindGroup','atlasCapacity','entries','9362787qwOFIF','push','countZ','colorStops','one','lastSubmittedFrameTimestamp','相机裁剪距离必须满足\x200\x20<\x20near\x20<\x20far。','isNaN','pointercancel','bindControls','bindGroup','\x20must\x20be\x20a\x20positive\x20integer.\x20','resources','maxX','deltaY','setAspect','device','volume\x20always\x20visible\x20pass','unconfigure','uploadedBrickCount','getPageTableBuffer','floor','coreSampleCount','createBindGroupLayout','volume\x20frame\x20readback','perspective','uploadStagingBufferSize','\x20noData\x20必须是有限数值或\x20NaN。','autoFrameIntervalTotal','volume\x20geometry\x20bind\x20group','Maximum\x20locked\x20slice\x20count\x20is\x20','startsWith','setProfiles','WebGPU\x20volume\x20device\x20was\x20lost:\x20','encodeOverlayPass','abort','handlePointerLeave','occupied','textContent','colorStops\x20不能为空','display','AbortError','setSlices','maxY','createTextNode','slices','\x20的\x20heights\x20包含非有限高度。','Volume\x20source\x20must\x20provide\x20readChunk().\x20体积数据源必须提供\x20readChunk()。','clipMaximum','actualFrameIntervalMilliseconds','volume\x20transfer\x20bind\x20group\x20layout','Volume\x20slice\x20','createView','residentByLogicalIndex','renderDirty','ready','border','The\x20maximum\x20locked\x20slice\x20count\x20has\x20been\x20reached.\x20已达到最大锁定切面数量。','WebGPU\x20volume\x20source\x20must\x20be\x20configured\x20before\x20uploading\x20bricks.\x20上传砖块前必须配置\x20WebGPU\x20体积数据源。','minimumPitch','catch','configureSourceResources','geographic-wgs84','add','syncLockedMarkers','Volume\x20brick\x20upload\x20was\x20superseded\x20by\x20a\x20new\x20source.\x20体积砖上传已被新数据源替代。','skippedCells','rebuildProfiles','sceneParamsBuffer','getAxisResources','setTransfer','createRenderPipeline','.\x20体积\x20timeIndex\x20越界。','residentBrickCount','WebGPU\x20volume\x20bricks\x20require\x20halo\x201.\x20WebGPU\x20体积砖块要求\x20halo\x20为\x201。','minimumPitchDegrees','uploadBatchCount','applyHit','panSpeed','路线剖面\x20id\x20不能为空。','balanced','loadBrick','READ','autoFrameCount','vertexCount','memoryLimitBytes','frameRequest','sliceBindGroupLayout','391264vZvbQP','wheel','volume-slice-','readRange','hitTolerancePixels','volume\x20atlas\x20clear\x20shader','div','enqueueBrickUpload','splice','preview','UNIFORM','triangle-list','无法归一化长度为零的三维向量。','volume-slice-preview','translate(-50%,\x20-100%)','activeInteractions','counts','minZ','setToolMode','max','smooth','scheduleBricks','skippedSampleCount','chunk','Volume\x20brick\x20upload\x20became\x20stale.\x20体积砖上传已过期。','orthographic','isSafeInteger','WebGPU\x20volume\x20format\x20is\x20not\x20initialized.\x20WebGPU\x20体积格式尚未初始化。','previewMarker','0.72','webgpu','Geographic\x20volume\x20normalization\x20must\x20be\x20a\x20positive\x20finite\x20distance.\x20地理体积归一化尺度必须是正有限距离。','from','markers','update','STORAGE','mixed','onSliceError','background','Volume\x20timeIndex\x20is\x20out\x20of\x20range:\x20','getSliceBindGroupLayout','WebGPU\x20scene\x20params\x20buffer\x20is\x20unavailable.\x20WebGPU\x20场景参数\x20Buffer\x20不可用。','pointerEvents','FRAGMENT','isInteger','verticalScale','minY','rgb\x20颜色通道数量不正确:\x20','cacheBrickUpload','maxLockedSlices\x20必须是正整数。','getVolumeBindGroupLayout','getTransferResources','interactionElement','WebGPU\x20profile\x20resources\x20are\x20unavailable.\x20WebGPU\x20剖面资源不可用。','\x20必须是非负有限数值。','createLayout','setBindGroup','volume\x20atlas\x20clear\x20pipeline','performance','slotIndex','正交相机高度和宽高比必须大于\x200。','element','zoomSpeed','count','opacityStops','maximumDistance','rgb(17\x2024\x2039\x20/\x2082%)','profileResources','format','volume\x20geometry\x20bind\x20group\x20layout','configureModel','BYTES_PER_ELEMENT','nowrap','getAttachments','pointerType','sceneTrianglePipeline','modelMatrix','Geographic\x20volume\x20proxy\x20bounds\x20are\x20invalid.\x20地理体积代理范围无效。','atlasIndex','2470382JuHXbR','button','clientHeight','abs','axis','writePageEntry','buffer','levelStart','\x20的\x20path\x20包含非有限坐标。','logicalIndex','Failed\x20to\x20acquire\x20a\x20WebGPU\x20adapter\x20for\x20the\x20volume\x20scene.\x20无法为体积场景获取\x20WebGPU\x20adapter。','struct\x20SceneParams\x20{\x0a\x20\x20\x20\x20viewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseViewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20modelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseModelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20cameraPosition:\x20vec4f,\x0a\x20\x20\x20\x20viewport:\x20vec4f,\x0a\x20\x20\x20\x20clipMinimum:\x20vec4f,\x0a\x20\x20\x20\x20clipMaximum:\x20vec4f,\x0a\x20\x20\x20\x20render:\x20vec4f,\x0a\x20\x20\x20\x20transfer:\x20vec4f,\x0a\x20\x20\x20\x20geographic0:\x20vec4f,\x0a\x20\x20\x20\x20geographic1:\x20vec4f,\x0a\x20\x20\x20\x20geographic2:\x20vec4f,\x0a}\x0a\x0astruct\x20VolumeParams\x20{\x0a\x20\x20\x20\x20dimensions:\x20vec4u,\x0a\x20\x20\x20\x20brickInterior:\x20vec4u,\x0a\x20\x20\x20\x20brickCount:\x20vec4u,\x0a\x20\x20\x20\x20atlasSlots:\x20vec4u,\x0a\x20\x20\x20\x20atlasDimensions:\x20vec4u,\x0a\x20\x20\x20\x20valueMeta:\x20vec4f,\x0a}\x0a\x0astruct\x20PageTable\x20{\x20values:\x20array<vec4u>\x20}\x0astruct\x20FloatValues\x20{\x20values:\x20array<f32>\x20}\x0astruct\x20Colors\x20{\x20values:\x20array<vec4f>\x20}\x0astruct\x20SliceParams\x20{\x0a\x20\x20\x20\x20data:\x20vec4f,\x0a\x20\x20\x20\x20plateColor:\x20vec4f,\x0a}\x0astruct\x20VolumeSample\x20{\x20value:\x20f32,\x20valid:\x20bool\x20}\x0a\x0astruct\x20SliceVertexOutput\x20{\x0a\x20\x20\x20\x20@builtin(position)\x20position:\x20vec4f,\x0a\x20\x20\x20\x20@location(0)\x20modelPosition:\x20vec3f,\x0a}\x0a\x0a@group(0)\x20@binding(0)\x20var<uniform>\x20scene:\x20SceneParams;\x0a@group(1)\x20@binding(0)\x20var\x20volumeAtlas0:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(1)\x20var\x20volumeAtlas1:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(2)\x20var\x20volumeAtlas2:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(3)\x20var\x20volumeAtlas3:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(4)\x20var\x20volumeAtlas4:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(5)\x20var\x20volumeAtlas5:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(6)\x20var\x20volumeAtlas6:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(7)\x20var\x20volumeAtlas7:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(8)\x20var<storage,\x20read>\x20pageTable:\x20PageTable;\x0a@group(1)\x20@binding(9)\x20var<uniform>\x20volume:\x20VolumeParams;\x0a@group(2)\x20@binding(0)\x20var<storage,\x20read>\x20colorStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(1)\x20var<storage,\x20read>\x20colorStopColors:\x20Colors;\x0a@group(2)\x20@binding(2)\x20var<storage,\x20read>\x20opacityStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(3)\x20var<storage,\x20read>\x20opacityStopAlphas:\x20FloatValues;\x0a@group(3)\x20@binding(0)\x20var<uniform>\x20slice:\x20SliceParams;\x0a\x0afn\x20invalidVolumeSample()\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(0.0,\x20false);\x0a}\x0a\x0afn\x20validVolumeSample(value:\x20f32)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(value,\x20true);\x0a}\x0a\x0afn\x20getPageIndex(brick:\x20vec3u)\x20->\x20u32\x20{\x0a\x20\x20\x20\x20return\x20brick.x\x20+\x20brick.y\x20*\x20volume.brickCount.x\x20+\x20brick.z\x20*\x20volume.brickCount.x\x20*\x20volume.brickCount.y;\x0a}\x0a\x0afn\x20getSlotCoordinate(slotIndex:\x20u32)\x20->\x20vec3u\x20{\x0a\x20\x20\x20\x20let\x20layerSize\x20=\x20volume.atlasSlots.x\x20*\x20volume.atlasSlots.y;\x0a\x20\x20\x20\x20let\x20z\x20=\x20slotIndex\x20/\x20layerSize;\x0a\x20\x20\x20\x20let\x20remainder\x20=\x20slotIndex\x20-\x20z\x20*\x20layerSize;\x0a\x20\x20\x20\x20let\x20y\x20=\x20remainder\x20/\x20volume.atlasSlots.x;\x0a\x20\x20\x20\x20return\x20vec3u(remainder\x20-\x20y\x20*\x20volume.atlasSlots.x,\x20y,\x20z);\x0a}\x0a\x0afn\x20loadAtlasValue(atlasIndex:\x20u32,\x20coordinate:\x20vec3i)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x200u)\x20{\x20return\x20textureLoad(volumeAtlas0,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x201u)\x20{\x20return\x20textureLoad(volumeAtlas1,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x202u)\x20{\x20return\x20textureLoad(volumeAtlas2,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x203u)\x20{\x20return\x20textureLoad(volumeAtlas3,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x204u)\x20{\x20return\x20textureLoad(volumeAtlas4,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x205u)\x20{\x20return\x20textureLoad(volumeAtlas5,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x206u)\x20{\x20return\x20textureLoad(volumeAtlas6,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20return\x20textureLoad(volumeAtlas7,\x20coordinate,\x200).r;\x0a}\x0a\x0afn\x20loadAtlasVoxel(voxel:\x20vec3i,\x20owningBrick:\x20vec3u)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20page\x20=\x20pageTable.values[getPageIndex(owningBrick)];\x0a\x0a\x20\x20\x20\x20if\x20(page.x\x20==\x200u\x20||\x20page.z\x20==\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20physicalBrick\x20=\x20volume.brickInterior.xyz\x20+\x20vec3u(2u);\x0a\x20\x20\x20\x20let\x20slot\x20=\x20getSlotCoordinate(page.x\x20-\x201u);\x0a\x20\x20\x20\x20let\x20local\x20=\x20voxel\x20-\x20vec3i(owningBrick\x20*\x20volume.brickInterior.xyz)\x20+\x20vec3i(1);\x0a\x20\x20\x20\x20let\x20value\x20=\x20loadAtlasValue(page.w,\x20vec3i(slot\x20*\x20physicalBrick)\x20+\x20local);\x0a\x0a\x20\x20\x20\x20if\x20(value\x20!=\x20value\x20||\x20(volume.valueMeta.y\x20>\x200.5\x20&&\x20value\x20==\x20volume.valueMeta.x))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20validVolumeSample(value);\x0a}\x0a\x0afn\x20sampleVolume(modelPosition:\x20vec3f)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(modelPosition,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20normalized\x20*\x20vec3f(volume.dimensions.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20baseVoxel\x20=\x20vec3i(floor(voxel));\x0a\x20\x20\x20\x20let\x20nextVoxel\x20=\x20min(baseVoxel\x20+\x20vec3i(1),\x20vec3i(volume.dimensions.xyz\x20-\x20vec3u(1u)));\x0a\x20\x20\x20\x20let\x20fraction\x20=\x20voxel\x20-\x20vec3f(baseVoxel);\x0a\x20\x20\x20\x20let\x20owningBrick\x20=\x20min(vec3u(baseVoxel)\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20c000\x20=\x20loadAtlasVoxel(baseVoxel,\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c100\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c010\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c110\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c001\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c101\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c011\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c111\x20=\x20loadAtlasVoxel(nextVoxel,\x20owningBrick);\x0a\x0a\x20\x20\x20\x20if\x20(!c000.valid\x20||\x20!c100.valid\x20||\x20!c010.valid\x20||\x20!c110.valid\x20||\x20!c001.valid\x20||\x20!c101.valid\x20||\x20!c011.valid\x20||\x20!c111.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20bottom\x20=\x20mix(mix(c000.value,\x20c100.value,\x20fraction.x),\x20mix(c010.value,\x20c110.value,\x20fraction.x),\x20fraction.y);\x0a\x20\x20\x20\x20let\x20top\x20=\x20mix(mix(c001.value,\x20c101.value,\x20fraction.x),\x20mix(c011.value,\x20c111.value,\x20fraction.x),\x20fraction.y);\x0a\x20\x20\x20\x20return\x20validVolumeSample(mix(bottom,\x20top,\x20fraction.z));\x0a}\x0a\x0afn\x20sampleColor(value:\x20f32)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.x);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20colorStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20colorStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20colorStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(colorStopColors.values[index],\x20colorStopColors.values[index\x20+\x201u],\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0));\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20colorStopColors.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20sampleOpacity(value:\x20f32)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.y);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20opacityStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20opacityStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20opacityStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(opacityStopAlphas.values[index],\x20opacityStopAlphas.values[index\x20+\x201u],\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0));\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20opacityStopAlphas.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20getPlanePosition(axis:\x20u32,\x20planePosition:\x20f32,\x20corner:\x20vec2f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(axis\x20==\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec3f(planePosition,\x20corner.x,\x20corner.y);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(axis\x20==\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec3f(corner.x,\x20planePosition,\x20corner.y);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20vec3f(corner.x,\x20corner.y,\x20planePosition);\x0a}\x0a\x0afn\x20getCorner(vertexIndex:\x20u32)\x20->\x20vec2f\x20{\x0a\x20\x20\x20\x20let\x20corners\x20=\x20array<vec2f,\x206>(\x0a\x20\x20\x20\x20\x20\x20\x20\x20vec2f(0.0,\x200.0),\x20vec2f(1.0,\x200.0),\x20vec2f(0.0,\x201.0),\x0a\x20\x20\x20\x20\x20\x20\x20\x20vec2f(0.0,\x201.0),\x20vec2f(1.0,\x200.0),\x20vec2f(1.0,\x201.0)\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20return\x20corners[vertexIndex];\x0a}\x0a\x0afn\x20getTessellatedCorner(vertexIndex:\x20u32)\x20->\x20vec2f\x20{\x0a\x20\x20\x20\x20let\x20gridSize\x20=\x2032u;\x0a\x20\x20\x20\x20let\x20cellIndex\x20=\x20vertexIndex\x20/\x206u;\x0a\x20\x20\x20\x20let\x20cellX\x20=\x20cellIndex\x20%\x20gridSize;\x0a\x20\x20\x20\x20let\x20cellY\x20=\x20cellIndex\x20/\x20gridSize;\x0a\x20\x20\x20\x20return\x20(vec2f(f32(cellX),\x20f32(cellY))\x20+\x20getCorner(vertexIndex\x20%\x206u))\x20/\x20f32(gridSize);\x0a}\x0a\x0afn\x20volumeToWorld(position:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20transformed\x20=\x20scene.modelMatrix\x20*\x20vec4f(position,\x201.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20transformed.xyz\x20/\x20transformed.w;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20longitude\x20=\x20mix(scene.geographic1.z,\x20scene.geographic1.w,\x20position.x);\x0a\x20\x20\x20\x20let\x20latitude\x20=\x20mix(scene.geographic2.x,\x20scene.geographic2.y,\x20position.z);\x0a\x20\x20\x20\x20let\x20height\x20=\x20mix(scene.geographic2.z,\x20scene.geographic2.w,\x20position.y);\x0a\x20\x20\x20\x20let\x20latitudeSin\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20let\x20latitudeCos\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20let\x20semiMajor\x20=\x20scene.geographic1.x;\x0a\x20\x20\x20\x20let\x20semiMinor\x20=\x20scene.geographic1.y;\x0a\x20\x20\x20\x20let\x20eccentricitySquared\x20=\x201.0\x20-\x20semiMinor\x20*\x20semiMinor\x20/\x20(semiMajor\x20*\x20semiMajor);\x0a\x20\x20\x20\x20let\x20primeVerticalRadius\x20=\x20semiMajor\x20/\x20sqrt(1.0\x20-\x20eccentricitySquared\x20*\x20latitudeSin\x20*\x20latitudeSin);\x0a\x20\x20\x20\x20let\x20ecef\x20=\x20vec3f(\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20cos(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20sin(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20*\x20(1.0\x20-\x20eccentricitySquared)\x20+\x20height)\x20*\x20latitudeSin\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20return\x20ecef\x20-\x20scene.geographic0.yzw;\x0a}\x0a\x0a@vertex\x0afn\x20vertexMain(@builtin(vertex_index)\x20vertexIndex:\x20u32)\x20->\x20SliceVertexOutput\x20{\x0a\x20\x20\x20\x20let\x20modelPosition\x20=\x20getPlanePosition(u32(slice.data.x),\x20slice.data.y,\x20getTessellatedCorner(vertexIndex));\x0a\x20\x20\x20\x20let\x20clipPosition\x20=\x20scene.viewProjection\x20*\x20vec4f(volumeToWorld(modelPosition),\x201.0);\x0a\x20\x20\x20\x20return\x20SliceVertexOutput(clipPosition,\x20modelPosition);\x0a}\x0a\x0a@fragment\x0afn\x20fragmentMain(input:\x20SliceVertexOutput)\x20->\x20@location(0)\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20sample\x20=\x20sampleVolume(input.modelPosition);\x0a\x20\x20\x20\x20let\x20plateAlpha\x20=\x20slice.plateColor.a;\x0a\x20\x20\x20\x20let\x20platePremultiplied\x20=\x20slice.plateColor.rgb\x20*\x20plateAlpha;\x0a\x0a\x20\x20\x20\x20if\x20(!sample.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(plateAlpha\x20<=\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20discard;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec4f(platePremultiplied,\x20plateAlpha);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20color\x20=\x20sampleColor(sample.value);\x0a\x20\x20\x20\x20let\x20alpha\x20=\x20color.a\x20*\x20sampleOpacity(sample.value)\x20*\x20slice.data.z;\x0a\x20\x20\x20\x20//\x20彩色数据覆盖白色透明底板,二者在同一\x20fragment\x20中合成以避免重合面的深度冲突。\x0a\x20\x20\x20\x20//\x20Colored\x20data\x20is\x20composited\x20over\x20the\x20translucent\x20white\x20plate\x20in\x20one\x20fragment\x20to\x20avoid\x20coplanar\x20depth\x20conflicts.\x0a\x20\x20\x20\x20let\x20outputAlpha\x20=\x20alpha\x20+\x20plateAlpha\x20*\x20(1.0\x20-\x20alpha);\x0a\x20\x20\x20\x20let\x20outputColor\x20=\x20color.rgb\x20*\x20alpha\x20+\x20platePremultiplied\x20*\x20(1.0\x20-\x20alpha);\x0a\x20\x20\x20\x20return\x20vec4f(outputColor,\x20outputAlpha);\x0a}\x0a','signal','auto','length','depthView','getCurrentTexture','map','findIndex','updateTransferResources','depth','inverseModelMatrix','minimum','onSlicesChange','fill','Volume\x20valueScale\x20must\x20be\x20finite.\x20体积\x20valueScale\x20必须是有限数值。','cartesian','brickHeight','lockSlice','WebGPU\x20volume\x20context\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20context\x20尚未初始化。','WebGPU\x20is\x20required\x20for\x20the\x20volume\x20scene\x20but\x20is\x20unavailable.\x20体积场景需要\x20WebGPU,但当前环境不可用。','\x20must\x20contain\x20sixteen\x20finite\x20values.\x20','startY','volumeMetadata','volume\x20raymarch\x20pass','endX','overlayTrianglePipeline','WebGPU\x20volume\x20atlas\x20texture\x20is\x20unavailable.\x20WebGPU\x20体积图集纹理不可用。','createResource','copyBufferToTexture','previousAxis','volume\x20atlas\x20clear\x20pass','volumeDimFactor\x20必须位于\x200\x20到\x201。','state','prepareBrickUpload','dolly','WebGPU\x20transfer\x20resources\x20are\x20unavailable.\x20WebGPU\x20传递函数资源不可用。','touch','prepared','overlayContainer','line-list','Volume\x20chunk\x20','createLockedMarker','revision','initialize','range','TEXTURE_BINDING','level','WebGPU\x20volume\x20device\x20restoration\x20failed.\x20WebGPU\x20体积设备恢复失败。','latitudeRadians','volume\x20opacity\x20stop\x20values','next','verticalScale\x20must\x20be\x20a\x20positive\x20finite\x20value.\x20verticalScale\x20必须是大于\x200\x20的有限数。','residentBySlotIndex','slotCount','now','valuesEqual','volume\x20scene\x20params','setFrameAvailableCallback','WebGPU\x20volume\x20frame\x20capture\x20failed:\x20','style','transferBindGroup','far','depth32float','updateAutoQuality','Volume\x20Z\x20axis','composite','queue','preventDefault','requestBrickSchedule','Height\x20/\x20高度','timeCount','syncPreview','slice','colorStopCount','remove','volumeBindGroup','shift','getFrame','viewportHeight','pendingSliceSnapshot','beginInteraction','destroyed','container','bufferOffset','requestAdapter','\x20is\x20duplicated.\x20体积切面\x20ID\x20重复。','volume\x20scene\x20depth','noData','requestDevice','atlasLayout','flushSliceState','setRouteProfiles','createTexture','切面位置必须是有限数。','3px\x206px','drawMeshes','drawSlices','.\x20创建\x20WebGPU\x20体积管线失败。','uniformUpdateCount','devicePixelRatio','pageTableBuffer','lockPreview','opacityBuffer','attachments','pointer','.\x20体积时间索引越界。','getFormat','backend','maxZ','bindSliceState','WRITE','aborted','Volume\x20slice\x20ID\x20','cachedProfiles','frameInFlight','atlasTextures','getPreferredCanvasFormat','color','VERTEX','createProjectionMatrix','.\x20体积逻辑砖块索引无效。','contextmenu','367299tmCdVa','uploadBrick','orbit','near','createBindGroup','render','width','positionMarker','initializing','none','volume\x20frame\x20capture','shape','camera','updatePreview','stopPropagation','submittedFrameCount','frameIndex','MAP_READ','verticalScale\x20必须是大于\x200\x20的有限数。','\x20values\x20but\x20received\x20','getVolumeParamsBuffer','相机宽高比必须是大于\x200\x20的有限数。','onSubmittedWorkDone','pointerId','requestControllers','setProjectionType','441VvVILn','volume\x20atlas\x20bind\x20group','configure','WebGPU\x20volume\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20体积绑定布局不可用。','切面轴采样数必须是正整数。','zIndex','createCommandEncoder','click','previousContainerPosition','isFinite','scene','lastUsedFrame','volume\x20color\x20stop\x20values','\x20包含多个采样点时步长不能为零。','.\x20最大锁定切面数量为\x20','cachedBricks','loadedKeys','uploadGeneration','addEventListener','brickDepth','onInteractionEnd','Volume\x20requires\x20','pointerup','lockedSlices','getInteractionKind','\x20must\x20be\x20a\x20positive\x20finite\x20number.\x20','encodeVolumePass','透视相机参数无效。','context','listeners','Latitude\x20/\x20纬度','lifecycleState','captureFrame','desiredKeys','geometryBindGroupLayout','split','透视相机视场角必须位于\x200\x20到\x20180\x20度之间。','main','lastFrameTimeMilliseconds','COPY_SRC','center','flatMap','getMappedRange','hypot','path','clientWidth','\x0a@group(0)\x20@binding(0)\x20var\x20atlas:\x20texture_storage_3d<r32float,\x20write>;\x0a\x0a@compute\x20@workgroup_size(4,\x204,\x204)\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','RENDER_ATTACHMENT','centerEcefScaled','colorBuffer','\x20must\x20be\x20a\x20positive\x20finite\x20value.\x20','resetBrickRequests','getTransferBindGroupLayout','axisResources','handlePointerDown','9236244pQpLhm','axisDefinitions','minimumDistance','sceneBindGroup','gpuBytes','transferBindGroupLayout','getEffectiveQuality','clear','float32x4','Volume\x20chunk\x20requires\x20','Volume\x20opacity\x20stop\x20values\x20must\x20be\x20finite\x20and\x20strictly\x20increasing.\x20体积透明度节点值必须有限且严格递增。','sliceDepthMode','transparent','volume\x20scene\x20geometry\x20pass','brickScheduleDirty','sin','Invalid\x20logical\x20volume\x20brick\x20index:\x20','scheduleUploadPump','WebGPU\x20volume\x20transfer\x20resources\x20are\x20incomplete.\x20WebGPU\x20体积传递函数资源不完整。','heightScaled','getGeometryBindGroupLayout','getSceneBindGroupLayout','less','descriptors','\x20range\x20is\x20invalid:\x20start=','COPY_DST','origin','renderer','不支持的\x20rgb\x20颜色格式:\x20','semiMinorAxisScaled','idle','createValues','budgetLimited','autoQuality','slotCountY','clearPageEntry','activePointer','valueScale','semiMajorAxisScaled','createShaderModule','visible','transform','toolMode','pan','Volume\x20chunk\x20request\x20was\x20aborted.\x20体积块请求已取消。','viewportWidth','\x20只有一个采样点时端点必须相等。','onLimitReached','volumeParamsBuffer','WebGPU\x20scene\x20attachments\x20are\x20unavailable.\x20WebGPU\x20场景附件不可用。','setAttribute','1273404yfYfUX','position','Volume\x20revision\x20must\x20be\x20a\x20non-negative\x20integer.\x20体积\x20revision\x20必须是非负整数。','interactionController','\x20必须是大于\x200\x20的有限数。','beginComputePass','timeIndex','coordinate','replace','trim','initialized','canvas','cos','pendingKeys','load','padding','createGpuResources','slicePlateColor','maximumPitchDegrees','Volume\x20brick\x20','\x20必须是正整数。','relative','clipMinimum','high-performance','flushBrickSchedule','powerPreference','unsubscribe','formatPosition','xCount','WebGPU\x20volume\x20atlas\x20layout\x20is\x20unavailable.\x20WebGPU\x20体积图集布局不可用。','\x20的\x20path\x20必须包含至少两个\x20[x,\x20z]\x20点。','getEffectiveRenderScale','value','getSceneParamsBuffer','coreRange','showDebugGeometry','clientY','delete','sceneBindGroupLayout','handleWindowPointerMove','uploadStagingBuffer','updateSlice','nextId','xStart','slotCountZ','Volume\x20timeCount','minX','struct\x20SceneParams\x20{\x0a\x20\x20\x20\x20viewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseViewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20modelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseModelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20cameraPosition:\x20vec4f,\x0a\x20\x20\x20\x20viewport:\x20vec4f,\x0a\x20\x20\x20\x20clipMinimum:\x20vec4f,\x0a\x20\x20\x20\x20clipMaximum:\x20vec4f,\x0a\x20\x20\x20\x20render:\x20vec4f,\x0a\x20\x20\x20\x20transfer:\x20vec4f,\x0a\x20\x20\x20\x20geographic0:\x20vec4f,\x0a\x20\x20\x20\x20geographic1:\x20vec4f,\x0a\x20\x20\x20\x20geographic2:\x20vec4f,\x0a}\x0a\x0astruct\x20VolumeParams\x20{\x0a\x20\x20\x20\x20dimensions:\x20vec4u,\x0a\x20\x20\x20\x20brickInterior:\x20vec4u,\x0a\x20\x20\x20\x20brickCount:\x20vec4u,\x0a\x20\x20\x20\x20atlasSlots:\x20vec4u,\x0a\x20\x20\x20\x20atlasDimensions:\x20vec4u,\x0a\x20\x20\x20\x20valueMeta:\x20vec4f,\x0a}\x0a\x0astruct\x20PageTable\x20{\x0a\x20\x20\x20\x20values:\x20array<vec4u>,\x0a}\x0a\x0astruct\x20FloatValues\x20{\x0a\x20\x20\x20\x20values:\x20array<f32>,\x0a}\x0a\x0astruct\x20Colors\x20{\x0a\x20\x20\x20\x20values:\x20array<vec4f>,\x0a}\x0a\x0astruct\x20VolumeSample\x20{\x0a\x20\x20\x20\x20value:\x20f32,\x0a\x20\x20\x20\x20valid:\x20bool,\x0a}\x0a\x0astruct\x20RayInterval\x20{\x0a\x20\x20\x20\x20minimum:\x20f32,\x0a\x20\x20\x20\x20maximum:\x20f32,\x0a\x20\x20\x20\x20valid:\x20bool,\x0a}\x0a\x0a@group(0)\x20@binding(0)\x20var<uniform>\x20scene:\x20SceneParams;\x0a@group(0)\x20@binding(1)\x20var\x20sceneDepth:\x20texture_depth_2d;\x0a@group(1)\x20@binding(0)\x20var\x20volumeAtlas0:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(1)\x20var\x20volumeAtlas1:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(2)\x20var\x20volumeAtlas2:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(3)\x20var\x20volumeAtlas3:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(4)\x20var\x20volumeAtlas4:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(5)\x20var\x20volumeAtlas5:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(6)\x20var\x20volumeAtlas6:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(7)\x20var\x20volumeAtlas7:\x20texture_3d<f32>;\x0a@group(1)\x20@binding(8)\x20var<storage,\x20read>\x20pageTable:\x20PageTable;\x0a@group(1)\x20@binding(9)\x20var<uniform>\x20volume:\x20VolumeParams;\x0a@group(2)\x20@binding(0)\x20var<storage,\x20read>\x20colorStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(1)\x20var<storage,\x20read>\x20colorStopColors:\x20Colors;\x0a@group(2)\x20@binding(2)\x20var<storage,\x20read>\x20opacityStopValues:\x20FloatValues;\x0a@group(2)\x20@binding(3)\x20var<storage,\x20read>\x20opacityStopAlphas:\x20FloatValues;\x0a\x0afn\x20invalidVolumeSample()\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(0.0,\x20false);\x0a}\x0a\x0afn\x20validVolumeSample(value:\x20f32)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20return\x20VolumeSample(value,\x20true);\x0a}\x0a\x0afn\x20transformPoint(matrix:\x20mat4x4f,\x20point:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20let\x20transformed\x20=\x20matrix\x20*\x20vec4f(point,\x201.0);\x0a\x20\x20\x20\x20return\x20transformed.xyz\x20/\x20transformed.w;\x0a}\x0a\x0afn\x20reconstructWorldPosition(ndc:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20return\x20transformPoint(scene.inverseViewProjection,\x20ndc);\x0a}\x0a\x0a//\x20地理模式将局部\x20ECEF\x20采样点反算为经纬高归一化坐标;代理盒仅限制射线范围,不决定体积形状。\x0a//\x20Geographic\x20mode\x20converts\x20each\x20local\x20ECEF\x20sample\x20back\x20to\x20normalized\x20longitude,\x20latitude,\x20and\x20altitude;\x20the\x20proxy\x20box\x20only\x20limits\x20the\x20ray\x20interval\x20and\x20does\x20not\x20define\x20the\x20volume\x20shape.\x0afn\x20worldToVolume(worldPosition:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20transformPoint(scene.inverseModelMatrix,\x20worldPosition);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20ecef\x20=\x20worldPosition\x20+\x20scene.geographic0.yzw;\x0a\x20\x20\x20\x20let\x20semiMajor\x20=\x20scene.geographic1.x;\x0a\x20\x20\x20\x20let\x20semiMinor\x20=\x20scene.geographic1.y;\x0a\x20\x20\x20\x20let\x20eccentricitySquared\x20=\x201.0\x20-\x20semiMinor\x20*\x20semiMinor\x20/\x20(semiMajor\x20*\x20semiMajor);\x0a\x20\x20\x20\x20let\x20secondEccentricitySquared\x20=\x20(semiMajor\x20*\x20semiMajor\x20-\x20semiMinor\x20*\x20semiMinor)\x20/\x20(semiMinor\x20*\x20semiMinor);\x0a\x20\x20\x20\x20let\x20horizontal\x20=\x20length(ecef.xy);\x0a\x20\x20\x20\x20let\x20theta\x20=\x20atan2(ecef.z\x20*\x20semiMajor,\x20horizontal\x20*\x20semiMinor);\x0a\x20\x20\x20\x20let\x20thetaSin\x20=\x20sin(theta);\x0a\x20\x20\x20\x20let\x20thetaCos\x20=\x20cos(theta);\x0a\x20\x20\x20\x20let\x20latitude\x20=\x20atan2(\x0a\x20\x20\x20\x20\x20\x20\x20\x20ecef.z\x20+\x20secondEccentricitySquared\x20*\x20semiMinor\x20*\x20thetaSin\x20*\x20thetaSin\x20*\x20thetaSin,\x0a\x20\x20\x20\x20\x20\x20\x20\x20horizontal\x20-\x20eccentricitySquared\x20*\x20semiMajor\x20*\x20thetaCos\x20*\x20thetaCos\x20*\x20thetaCos\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20let\x20latitudeSin\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20let\x20primeVerticalRadius\x20=\x20semiMajor\x20/\x20sqrt(1.0\x20-\x20eccentricitySquared\x20*\x20latitudeSin\x20*\x20latitudeSin);\x0a\x20\x20\x20\x20let\x20height\x20=\x20horizontal\x20/\x20max(0.000001,\x20abs(cos(latitude)))\x20-\x20primeVerticalRadius;\x0a\x20\x20\x20\x20let\x20longitude\x20=\x20atan2(ecef.y,\x20ecef.x);\x0a\x20\x20\x20\x20return\x20vec3f(\x0a\x20\x20\x20\x20\x20\x20\x20\x20(longitude\x20-\x20scene.geographic1.z)\x20/\x20(scene.geographic1.w\x20-\x20scene.geographic1.z),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(height\x20-\x20scene.geographic2.z)\x20/\x20(scene.geographic2.w\x20-\x20scene.geographic2.z),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(latitude\x20-\x20scene.geographic2.x)\x20/\x20(scene.geographic2.y\x20-\x20scene.geographic2.x)\x0a\x20\x20\x20\x20);\x0a}\x0a\x0afn\x20proxyToVolume(proxyPosition:\x20vec3f)\x20->\x20vec3f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20proxyPosition;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20worldToVolume(transformPoint(scene.modelMatrix,\x20proxyPosition));\x0a}\x0a\x0afn\x20isInsideVolume(position:\x20vec3f)\x20->\x20bool\x20{\x0a\x20\x20\x20\x20return\x20all(position\x20>=\x20scene.clipMinimum.xyz)\x20&&\x20all(position\x20<=\x20scene.clipMaximum.xyz);\x0a}\x0a\x0afn\x20intersectAxis(origin:\x20f32,\x20direction:\x20f32,\x20minimumValue:\x20f32,\x20maximumValue:\x20f32)\x20->\x20vec2f\x20{\x0a\x20\x20\x20\x20if\x20(abs(direction)\x20<\x200.000001)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(origin\x20<\x20minimumValue\x20||\x20origin\x20>\x20maximumValue)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec2f(1.0,\x20-1.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec2f(-1e20,\x201e20);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20first\x20=\x20(minimumValue\x20-\x20origin)\x20/\x20direction;\x0a\x20\x20\x20\x20let\x20second\x20=\x20(maximumValue\x20-\x20origin)\x20/\x20direction;\x0a\x20\x20\x20\x20return\x20vec2f(min(first,\x20second),\x20max(first,\x20second));\x0a}\x0a\x0afn\x20intersectClipBox(origin:\x20vec3f,\x20direction:\x20vec3f)\x20->\x20RayInterval\x20{\x0a\x20\x20\x20\x20let\x20x\x20=\x20intersectAxis(origin.x,\x20direction.x,\x20scene.clipMinimum.x,\x20scene.clipMaximum.x);\x0a\x20\x20\x20\x20let\x20y\x20=\x20intersectAxis(origin.y,\x20direction.y,\x20scene.clipMinimum.y,\x20scene.clipMaximum.y);\x0a\x20\x20\x20\x20let\x20z\x20=\x20intersectAxis(origin.z,\x20direction.z,\x20scene.clipMinimum.z,\x20scene.clipMaximum.z);\x0a\x20\x20\x20\x20let\x20minimumDistance\x20=\x20max(max(x.x,\x20y.x),\x20z.x);\x0a\x20\x20\x20\x20let\x20maximumDistance\x20=\x20min(min(x.y,\x20y.y),\x20z.y);\x0a\x20\x20\x20\x20return\x20RayInterval(max(0.0,\x20minimumDistance),\x20maximumDistance,\x20maximumDistance\x20>=\x20max(0.0,\x20minimumDistance));\x0a}\x0a\x0afn\x20getPageIndex(brick:\x20vec3u)\x20->\x20u32\x20{\x0a\x20\x20\x20\x20return\x20brick.x\x20+\x20brick.y\x20*\x20volume.brickCount.x\x20+\x20brick.z\x20*\x20volume.brickCount.x\x20*\x20volume.brickCount.y;\x0a}\x0a\x0afn\x20getSlotCoordinate(slotIndex:\x20u32)\x20->\x20vec3u\x20{\x0a\x20\x20\x20\x20let\x20layerSize\x20=\x20volume.atlasSlots.x\x20*\x20volume.atlasSlots.y;\x0a\x20\x20\x20\x20let\x20z\x20=\x20slotIndex\x20/\x20layerSize;\x0a\x20\x20\x20\x20let\x20remainder\x20=\x20slotIndex\x20-\x20z\x20*\x20layerSize;\x0a\x20\x20\x20\x20let\x20y\x20=\x20remainder\x20/\x20volume.atlasSlots.x;\x0a\x20\x20\x20\x20let\x20x\x20=\x20remainder\x20-\x20y\x20*\x20volume.atlasSlots.x;\x0a\x20\x20\x20\x20return\x20vec3u(x,\x20y,\x20z);\x0a}\x0a\x0afn\x20loadAtlasValue(atlasIndex:\x20u32,\x20coordinate:\x20vec3i)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x200u)\x20{\x20return\x20textureLoad(volumeAtlas0,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x201u)\x20{\x20return\x20textureLoad(volumeAtlas1,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x202u)\x20{\x20return\x20textureLoad(volumeAtlas2,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x203u)\x20{\x20return\x20textureLoad(volumeAtlas3,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x204u)\x20{\x20return\x20textureLoad(volumeAtlas4,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x205u)\x20{\x20return\x20textureLoad(volumeAtlas5,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20if\x20(atlasIndex\x20==\x206u)\x20{\x20return\x20textureLoad(volumeAtlas6,\x20coordinate,\x200).r;\x20}\x0a\x20\x20\x20\x20return\x20textureLoad(volumeAtlas7,\x20coordinate,\x200).r;\x0a}\x0a\x0afn\x20loadAtlasVoxel(voxel:\x20vec3i,\x20owningBrick:\x20vec3u)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20page\x20=\x20pageTable.values[getPageIndex(owningBrick)];\x0a\x0a\x20\x20\x20\x20if\x20(page.x\x20==\x200u\x20||\x20page.z\x20==\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20slot\x20=\x20getSlotCoordinate(page.x\x20-\x201u);\x0a\x20\x20\x20\x20let\x20physicalBrick\x20=\x20volume.brickInterior.xyz\x20+\x20vec3u(2u);\x0a\x20\x20\x20\x20let\x20brickStart\x20=\x20vec3i(owningBrick\x20*\x20volume.brickInterior.xyz);\x0a\x20\x20\x20\x20let\x20local\x20=\x20voxel\x20-\x20brickStart\x20+\x20vec3i(1);\x0a\x20\x20\x20\x20let\x20atlasCoordinate\x20=\x20vec3i(slot\x20*\x20physicalBrick)\x20+\x20local;\x0a\x20\x20\x20\x20let\x20value\x20=\x20loadAtlasValue(page.w,\x20atlasCoordinate);\x0a\x0a\x20\x20\x20\x20if\x20(value\x20!=\x20value\x20||\x20(volume.valueMeta.y\x20>\x200.5\x20&&\x20value\x20==\x20volume.valueMeta.x))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20validVolumeSample(value);\x0a}\x0a\x0afn\x20sampleVolume(modelPosition:\x20vec3f)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(modelPosition,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20normalized\x20*\x20vec3f(volume.dimensions.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20baseVoxel\x20=\x20vec3i(floor(voxel));\x0a\x20\x20\x20\x20let\x20maximumVoxel\x20=\x20vec3i(volume.dimensions.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20nextVoxel\x20=\x20min(baseVoxel\x20+\x20vec3i(1),\x20maximumVoxel);\x0a\x20\x20\x20\x20let\x20fraction\x20=\x20voxel\x20-\x20vec3f(baseVoxel);\x0a\x20\x20\x20\x20let\x20owningBrick\x20=\x20min(vec3u(max(baseVoxel,\x20vec3i(0)))\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20c000\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20baseVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c100\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c010\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c110\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20nextVoxel.y,\x20baseVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c001\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c101\x20=\x20loadAtlasVoxel(vec3i(nextVoxel.x,\x20baseVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c011\x20=\x20loadAtlasVoxel(vec3i(baseVoxel.x,\x20nextVoxel.y,\x20nextVoxel.z),\x20owningBrick);\x0a\x20\x20\x20\x20let\x20c111\x20=\x20loadAtlasVoxel(nextVoxel,\x20owningBrick);\x0a\x0a\x20\x20\x20\x20if\x20(!c000.valid\x20||\x20!c100.valid\x20||\x20!c010.valid\x20||\x20!c110.valid\x20||\x20!c001.valid\x20||\x20!c101.valid\x20||\x20!c011.valid\x20||\x20!c111.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20invalidVolumeSample();\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20bottom0\x20=\x20mix(c000.value,\x20c100.value,\x20fraction.x);\x0a\x20\x20\x20\x20let\x20bottom1\x20=\x20mix(c010.value,\x20c110.value,\x20fraction.x);\x0a\x20\x20\x20\x20let\x20top0\x20=\x20mix(c001.value,\x20c101.value,\x20fraction.x);\x0a\x20\x20\x20\x20let\x20top1\x20=\x20mix(c011.value,\x20c111.value,\x20fraction.x);\x0a\x20\x20\x20\x20return\x20validVolumeSample(mix(mix(bottom0,\x20bottom1,\x20fraction.y),\x20mix(top0,\x20top1,\x20fraction.y),\x20fraction.z));\x0a}\x0a\x0a//\x20体积分步只读取当前最近体素,避免对最终透明的样本执行八次纹理读取;高精度切面仍使用独立的三线性采样。\x0a//\x20Raymarch\x20steps\x20read\x20the\x20nearest\x20voxel\x20so\x20transparent\x20samples\x20avoid\x20eight\x20texture\x20loads;\x20high-detail\x20slices\x20keep\x20their\x20separate\x20trilinear\x20sampling.\x0afn\x20sampleVolumeNearest(modelPosition:\x20vec3f)\x20->\x20VolumeSample\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(modelPosition,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20maximumVoxel\x20=\x20volume.dimensions.xyz\x20-\x20vec3u(1u);\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20vec3i(round(normalized\x20*\x20vec3f(maximumVoxel)));\x0a\x20\x20\x20\x20let\x20owningBrick\x20=\x20min(vec3u(max(voxel,\x20vec3i(0)))\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20return\x20loadAtlasVoxel(voxel,\x20owningBrick);\x0a}\x0a\x0afn\x20sampleColor(value:\x20f32)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.x);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20colorStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20colorStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20colorStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20colorStopColors.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ratio\x20=\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(colorStopColors.values[index],\x20colorStopColors.values[index\x20+\x201u],\x20ratio);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20colorStopColors.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20sampleOpacity(value:\x20f32)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20count\x20=\x20u32(scene.transfer.y);\x0a\x0a\x20\x20\x20\x20if\x20(count\x20==\x201u\x20||\x20value\x20<=\x20opacityStopValues.values[0u])\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[0u];\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20+\x201u\x20<\x20count;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20start\x20=\x20opacityStopValues.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20opacityStopValues.values[index\x20+\x201u];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(value\x20<\x20end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(scene.transfer.w\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20opacityStopAlphas.values[index];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ratio\x20=\x20clamp((value\x20-\x20start)\x20/\x20max(end\x20-\x20start,\x200.000001),\x200.0,\x201.0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20mix(opacityStopAlphas.values[index],\x20opacityStopAlphas.values[index\x20+\x201u],\x20ratio);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20opacityStopAlphas.values[count\x20-\x201u];\x0a}\x0a\x0afn\x20nextBrickAxisDistance(position:\x20f32,\x20direction:\x20f32,\x20minimumValue:\x20f32,\x20maximumValue:\x20f32)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20if\x20(direction\x20>\x200.000001)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20max(scene.render.w,\x20(maximumValue\x20-\x20position)\x20/\x20direction\x20+\x20scene.render.w\x20*\x200.25);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if\x20(direction\x20<\x20-0.000001)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20max(scene.render.w,\x20(minimumValue\x20-\x20position)\x20/\x20direction\x20+\x20scene.render.w\x20*\x200.25);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x201e20;\x0a}\x0a\x0afn\x20getEmptyBrickSkipDistance(position:\x20vec3f,\x20direction:\x20vec3f)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20normalized\x20=\x20clamp(position,\x20vec3f(0.0),\x20vec3f(1.0));\x0a\x20\x20\x20\x20let\x20maximumVoxel\x20=\x20volume.dimensions.xyz\x20-\x20vec3u(1u);\x0a\x20\x20\x20\x20let\x20safeMaximumVoxel\x20=\x20max(maximumVoxel,\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20voxel\x20=\x20vec3u(floor(normalized\x20*\x20vec3f(maximumVoxel)));\x0a\x20\x20\x20\x20let\x20brick\x20=\x20min(voxel\x20/\x20volume.brickInterior.xyz,\x20volume.brickCount.xyz\x20-\x20vec3u(1u));\x0a\x20\x20\x20\x20let\x20page\x20=\x20pageTable.values[getPageIndex(brick)];\x0a\x0a\x20\x20\x20\x20if\x20(page.x\x20!=\x200u\x20&&\x20page.z\x20!=\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x200.0;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20minimumPosition\x20=\x20vec3f(brick\x20*\x20volume.brickInterior.xyz)\x20/\x20vec3f(safeMaximumVoxel);\x0a\x20\x20\x20\x20let\x20maximumPosition\x20=\x20vec3f(min((brick\x20+\x20vec3u(1u))\x20*\x20volume.brickInterior.xyz,\x20maximumVoxel))\x20/\x20vec3f(safeMaximumVoxel);\x0a\x20\x20\x20\x20return\x20min(\x0a\x20\x20\x20\x20\x20\x20\x20\x20nextBrickAxisDistance(normalized.x,\x20direction.x,\x20minimumPosition.x,\x20maximumPosition.x),\x0a\x20\x20\x20\x20\x20\x20\x20\x20min(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nextBrickAxisDistance(normalized.y,\x20direction.y,\x20minimumPosition.y,\x20maximumPosition.y),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nextBrickAxisDistance(normalized.z,\x20direction.z,\x20minimumPosition.z,\x20maximumPosition.z)\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20);\x0a}\x0a\x0afn\x20getDepthDistance(pixel:\x20vec2i,\x20ndcXY:\x20vec2f,\x20rayOrigin:\x20vec3f,\x20rayDirection:\x20vec3f)\x20->\x20f32\x20{\x0a\x20\x20\x20\x20let\x20depth\x20=\x20textureLoad(sceneDepth,\x20pixel,\x200);\x0a\x0a\x20\x20\x20\x20if\x20(depth\x20>=\x201.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x201e20;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20depthWorld\x20=\x20reconstructWorldPosition(vec3f(ndcXY,\x20depth));\x0a\x20\x20\x20\x20let\x20depthModel\x20=\x20transformPoint(scene.inverseModelMatrix,\x20depthWorld);\x0a\x20\x20\x20\x20return\x20max(0.0,\x20dot(depthModel\x20-\x20rayOrigin,\x20rayDirection));\x0a}\x0a\x0afn\x20raymarchComposite(origin:\x20vec3f,\x20direction:\x20vec3f,\x20interval:\x20RayInterval)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20var\x20accumulated\x20=\x20vec4f(0.0);\x0a\x20\x20\x20\x20var\x20distance\x20=\x20interval.minimum;\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20<\x204096u\x20&&\x20distance\x20<=\x20interval.maximum\x20&&\x20accumulated.a\x20<\x200.985;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20proxyPosition\x20=\x20origin\x20+\x20direction\x20*\x20distance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20skipDistance\x20=\x20select(0.0,\x20getEmptyBrickSkipDistance(proxyPosition,\x20direction),\x20scene.geographic0.x\x20<\x200.5);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(skipDistance\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20skipDistance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20volumePosition\x20=\x20proxyToVolume(proxyPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isInsideVolume(volumePosition))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20sample\x20=\x20sampleVolumeNearest(volumePosition);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(sample.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20sampleAlpha\x20=\x20sampleOpacity(sample.value);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(sampleAlpha\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20color\x20=\x20sampleColor(sample.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20alpha\x20=\x201.0\x20-\x20exp(-sampleAlpha\x20*\x20scene.render.z\x20*\x20scene.render.w);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20contribution\x20=\x20(1.0\x20-\x20accumulated.a)\x20*\x20alpha;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20accumulated\x20=\x20vec4f(accumulated.rgb\x20+\x20color.rgb\x20*\x20contribution,\x20accumulated.a\x20+\x20contribution);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20finalAlpha\x20=\x20accumulated.a\x20*\x20scene.render.y\x20*\x20scene.transfer.z;\x0a\x20\x20\x20\x20return\x20vec4f(accumulated.rgb\x20*\x20scene.render.y\x20*\x20scene.transfer.z,\x20finalAlpha);\x0a}\x0a\x0afn\x20raymarchMaximum(origin:\x20vec3f,\x20direction:\x20vec3f,\x20interval:\x20RayInterval)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20var\x20maximumValue\x20=\x20-1e30;\x0a\x20\x20\x20\x20var\x20found\x20=\x20false;\x0a\x20\x20\x20\x20var\x20distance\x20=\x20interval.minimum;\x0a\x0a\x20\x20\x20\x20for\x20(var\x20index\x20=\x200u;\x20index\x20<\x204096u\x20&&\x20distance\x20<=\x20interval.maximum;\x20index\x20=\x20index\x20+\x201u)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20proxyPosition\x20=\x20origin\x20+\x20direction\x20*\x20distance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20skipDistance\x20=\x20select(0.0,\x20getEmptyBrickSkipDistance(proxyPosition,\x20direction),\x20scene.geographic0.x\x20<\x200.5);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(skipDistance\x20>\x200.0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20skipDistance;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20volumePosition\x20=\x20proxyToVolume(proxyPosition);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!isInsideVolume(volumePosition))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20sample\x20=\x20sampleVolumeNearest(volumePosition);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(sample.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20maximumValue\x20=\x20max(maximumValue,\x20sample.value);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20found\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20distance\x20=\x20distance\x20+\x20scene.render.w;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(!found)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20vec4f(0.0);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20color\x20=\x20sampleColor(maximumValue);\x0a\x20\x20\x20\x20let\x20alpha\x20=\x20sampleOpacity(maximumValue)\x20*\x20scene.render.y\x20*\x20scene.transfer.z;\x0a\x20\x20\x20\x20return\x20vec4f(color.rgb\x20*\x20alpha,\x20alpha);\x0a}\x0a\x0a@vertex\x0afn\x20vertexMain(@builtin(vertex_index)\x20vertexIndex:\x20u32)\x20->\x20@builtin(position)\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20x\x20=\x20f32(i32(vertexIndex\x20&\x201u)\x20*\x204\x20-\x201);\x0a\x20\x20\x20\x20let\x20y\x20=\x20f32(i32(vertexIndex\x20>>\x201u)\x20*\x204\x20-\x201);\x0a\x20\x20\x20\x20return\x20vec4f(x,\x20y,\x200.0,\x201.0);\x0a}\x0a\x0a@fragment\x0afn\x20fragmentMain(@builtin(position)\x20fragmentPosition:\x20vec4f)\x20->\x20@location(0)\x20vec4f\x20{\x0a\x20\x20\x20\x20let\x20ndcXY\x20=\x20vec2f(fragmentPosition.x\x20/\x20scene.viewport.x\x20*\x202.0\x20-\x201.0,\x201.0\x20-\x20fragmentPosition.y\x20/\x20scene.viewport.y\x20*\x202.0);\x0a\x20\x20\x20\x20let\x20nearWorld\x20=\x20reconstructWorldPosition(vec3f(ndcXY,\x200.0));\x0a\x20\x20\x20\x20let\x20farWorld\x20=\x20reconstructWorldPosition(vec3f(ndcXY,\x201.0));\x0a\x20\x20\x20\x20let\x20nearModel\x20=\x20transformPoint(scene.inverseModelMatrix,\x20nearWorld);\x0a\x20\x20\x20\x20let\x20farModel\x20=\x20transformPoint(scene.inverseModelMatrix,\x20farWorld);\x0a\x20\x20\x20\x20let\x20direction\x20=\x20normalize(farModel\x20-\x20nearModel);\x0a\x20\x20\x20\x20var\x20interval\x20=\x20intersectClipBox(nearModel,\x20direction);\x0a\x0a\x20\x20\x20\x20if\x20(!interval.valid)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20discard;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20interval.maximum\x20=\x20min(interval.maximum,\x20getDepthDistance(vec2i(fragmentPosition.xy),\x20ndcXY,\x20nearModel,\x20direction));\x0a\x0a\x20\x20\x20\x20if\x20(interval.maximum\x20<\x20interval.minimum)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20discard;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20if\x20(scene.render.x\x20>\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20raymarchMaximum(nearModel,\x20direction,\x20interval);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20raymarchComposite(nearModel,\x20direction,\x20interval);\x0a}\x0a','getBindGroupLayout','sceneSlicePipeline','processBrickUploads','countX','byteLength','handlePointerMove','1px\x20solid\x20rgb(255\x20255\x20255\x20/\x2065%)','WebGPU\x20volume\x20device\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20device\x20尚未初始化。','baseModelMatrix','多采样点切面轴的起止值不能相等。','quality','writeVolumeParams','bytesPerRow','mapAsync','always-visible','key','#fff','destroyResources','uniform','aspect','getContext','uploadPump','setSliceTool','maxLockedSlices','WebGPU\x20scene\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20场景绑定布局不可用。','WebGPU\x20volume\x20resources\x20were\x20released.\x20WebGPU\x20体积资源已释放。','initializationGeneration','clearAtlasTexture','frameAvailableCallback','centerEcef','readChunk','sourceGeneration','volume\x20slice\x20bind\x20group\x20layout','navigationMode','maximum','create','subscribe',',\x20count=','absolute','clearPreview','clipBox','pointermove','sourceYStart','Volume\x20X\x20axis','projection','Unable\x20to\x20allocate\x20a\x20WebGPU\x20R32F\x20volume\x20atlas\x20within\x20device\x20limits.\x20无法在设备限制内分配\x20WebGPU\x20R32F\x20体积图集。','opacity','Count','createPipelines','volume\x20scene\x20bind\x20group\x20layout','byteOffset','fragmentMain','getCanvas','volumePipeline','memoryTargetBytes','\x20axis\x20must\x20contain\x20two\x20different\x20finite\x20endpoints.\x20','sliceState','whiteSpace','generation','endY','bgra8unorm','unfilterable-float','flex','volume\x20color\x20stop\x20colors','atlas','heights','adapter','viewProjectionMatrix','maxTextureDimension3D','densityScale','\x20至少需要两个高度层。','interactionStepScale','target','some','destroyBuffers','sliceInteraction','\x20noData\x20must\x20be\x20finite\x20or\x20NaN.\x20','static','pixelRatioCap','Volume\x20opacity\x20stops\x20cannot\x20be\x20empty.\x20体积透明度节点不能为空。','eventDisposers','getProfileResources','rgb(','renderScale','handlePointerUp','STORAGE_BINDING','statistics','getUploadStagingBuffer','WebGPU\x20volume\x20page\x20table\x20is\x20unavailable.\x20WebGPU\x20体积页表不可用。','draw','resize','parseInt','hitTolerance','releasePointerCapture','currentPreview','volumeDimFactor','beginRenderPass','xAxis','fovYDegrees','atlasViews','brickWidth','float32x3','相机裁剪距离必须满足\x200\x20<=\x20near\x20<\x20far。','\x20must\x20be\x20a\x20non-negative\x20finite\x20value.\x20','lost','markerOverlay','isInteracting','removeSlice','\x20的\x20values\x20长度与\x20path、heights\x20不匹配。','step','overlayLinePipeline','rotateSpeed','Returned\x20volume\x20chunk\x20dimensions\x20do\x20not\x20match\x20its\x20range.\x20返回体积分块尺寸与范围不一致。','WebGPU\x20volume\x20params\x20buffer\x20is\x20unavailable.\x20WebGPU\x20体积参数\x20Buffer\x20不可用。','memoryHardLimitBytes','WebGPU\x20scene\x20depth\x20attachment\x20is\x20not\x20initialized.\x20WebGPU\x20场景深度附件尚未初始化。','levelCount','getStepLength','Returned\x20volume\x20chunk\x20range\x20does\x20not\x20match\x20the\x20request.\x20返回体积分块范围与请求不一致。','cachedSlices','profiles','WebGPU\x20geometry\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20几何绑定布局不可用。','aria-label','toFixed','read-only-storage','volume\x20slice\x20','\x20with\x20one\x20sample\x20must\x20use\x20equal\x20endpoints.\x20','plateColor','axisHysteresisPixels','keys','hasPointerCapture','distance','atan2','findAxisHit','cachedAxes','lastTimingFrameTimestamp','ceil','WebGPU\x20volume\x20memory\x20limits\x20must\x20be\x20positive.\x20WebGPU\x20体积显存限制必须大于零。','getAtlasTexture','coordinateSystem','transferResources','countY','firstChild','cameraPosition','external','has','sort','layout','inherit','geographicTransform','error','metadata','setPipeline','pointerdown','stepLength','colorMode','touchAction','setState','\x20范围无效。','pushErrorScope','struct\x20SceneParams\x20{\x0a\x20\x20\x20\x20viewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseViewProjection:\x20mat4x4f,\x0a\x20\x20\x20\x20modelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20inverseModelMatrix:\x20mat4x4f,\x0a\x20\x20\x20\x20cameraPosition:\x20vec4f,\x0a\x20\x20\x20\x20viewport:\x20vec4f,\x0a\x20\x20\x20\x20clipMinimum:\x20vec4f,\x0a\x20\x20\x20\x20clipMaximum:\x20vec4f,\x0a\x20\x20\x20\x20render:\x20vec4f,\x0a\x20\x20\x20\x20transfer:\x20vec4f,\x0a\x20\x20\x20\x20geographic0:\x20vec4f,\x0a\x20\x20\x20\x20geographic1:\x20vec4f,\x0a\x20\x20\x20\x20geographic2:\x20vec4f,\x0a}\x0a\x0astruct\x20VertexOutput\x20{\x0a\x20\x20\x20\x20@builtin(position)\x20position:\x20vec4f,\x0a\x20\x20\x20\x20@location(0)\x20color:\x20vec4f,\x0a}\x0a\x0a@group(0)\x20@binding(0)\x20var<uniform>\x20scene:\x20SceneParams;\x0a\x0afn\x20transformScenePosition(position:\x20vec3f)\x20->\x20vec4f\x20{\x0a\x20\x20\x20\x20if\x20(scene.geographic0.x\x20<\x200.5)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20scene.viewProjection\x20*\x20scene.modelMatrix\x20*\x20vec4f(position,\x201.0);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20longitude\x20=\x20mix(scene.geographic1.z,\x20scene.geographic1.w,\x20position.x);\x0a\x20\x20\x20\x20let\x20latitude\x20=\x20mix(scene.geographic2.x,\x20scene.geographic2.y,\x20position.z);\x0a\x20\x20\x20\x20let\x20height\x20=\x20mix(scene.geographic2.z,\x20scene.geographic2.w,\x20position.y);\x0a\x20\x20\x20\x20let\x20latitudeSin\x20=\x20sin(latitude);\x0a\x20\x20\x20\x20let\x20latitudeCos\x20=\x20cos(latitude);\x0a\x20\x20\x20\x20let\x20semiMajor\x20=\x20scene.geographic1.x;\x0a\x20\x20\x20\x20let\x20semiMinor\x20=\x20scene.geographic1.y;\x0a\x20\x20\x20\x20let\x20eccentricitySquared\x20=\x201.0\x20-\x20semiMinor\x20*\x20semiMinor\x20/\x20(semiMajor\x20*\x20semiMajor);\x0a\x20\x20\x20\x20let\x20primeVerticalRadius\x20=\x20semiMajor\x20/\x20sqrt(1.0\x20-\x20eccentricitySquared\x20*\x20latitudeSin\x20*\x20latitudeSin);\x0a\x20\x20\x20\x20let\x20ecef\x20=\x20vec3f(\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20cos(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20+\x20height)\x20*\x20latitudeCos\x20*\x20sin(longitude),\x0a\x20\x20\x20\x20\x20\x20\x20\x20(primeVerticalRadius\x20*\x20(1.0\x20-\x20eccentricitySquared)\x20+\x20height)\x20*\x20latitudeSin\x0a\x20\x20\x20\x20);\x0a\x20\x20\x20\x20return\x20scene.viewProjection\x20*\x20vec4f(ecef\x20-\x20scene.geographic0.yzw,\x201.0);\x0a}\x0a\x0a@vertex\x0afn\x20vertexMain(@location(0)\x20position:\x20vec3f,\x20@location(1)\x20color:\x20vec4f)\x20->\x20VertexOutput\x20{\x0a\x20\x20\x20\x20return\x20VertexOutput(transformScenePosition(position),\x20color);\x0a}\x0a\x0a@fragment\x0afn\x20fragmentMain(input:\x20VertexOutput)\x20->\x20@location(0)\x20vec4f\x20{\x0a\x20\x20\x20\x20return\x20vec4f(input.color.rgb\x20*\x20input.color.a,\x20input.color.a);\x0a}\x0a','路线剖面\x20','round'];_0x4f79=function(){return _0x451801;};return _0x4f79();}(function(_0x45dc14,_0x2b4656){const _0x5bceb4=_0x2335,_0x2f70e5=_0x45dc14();while(!![]){try{const _0x7b659e=-parseInt(_0x5bceb4(0x2c8))/0x1+parseInt(_0x5bceb4(0x243))/0x2*(-parseInt(_0x5bceb4(0x4af))/0x3)+parseInt(_0x5bceb4(0x34c))/0x4+-parseInt(_0x5bceb4(0x462))/0x5+parseInt(_0x5bceb4(0x319))/0x6+-parseInt(_0x5bceb4(0x4bc))/0x7+-parseInt(_0x5bceb4(0x1f4))/0x8*(-parseInt(_0x5bceb4(0x2e2))/0x9);if(_0x7b659e===_0x2b4656)break;else _0x2f70e5['push'](_0x2f70e5['shift']());}catch(_0x3d1d4f){_0x2f70e5['push'](_0x2f70e5['shift']());}}}(_0x4f79,0xbd3a6));const validatePositiveInteger=(_0x18289e,_0x15ba5c)=>{const _0x12526b=_0x2335;if(!Number[_0x12526b(0x220)](_0x18289e)||_0x18289e<=0x0)throw Error(_0x15ba5c+_0x12526b(0x4c7)+_0x15ba5c+_0x12526b(0x360));},validateAxis=(_0x56d435,_0x219619)=>{const _0xb35f6f=_0x2335;if(validatePositiveInteger(_0x56d435['count'],_0x219619+_0xb35f6f(0x497)),!Number[_0xb35f6f(0x2eb)](_0x56d435[_0xb35f6f(0x454)])||!Number['isFinite'](_0x56d435[_0xb35f6f(0x4b2)]))throw Error(_0x219619+_0xb35f6f(0x487)+_0x219619+'\x20端点必须是有限数值。');if(_0x56d435[_0xb35f6f(0x233)]===0x1&&_0x56d435['start']!==_0x56d435[_0xb35f6f(0x4b2)])throw Error(_0x219619+_0xb35f6f(0x3fa)+_0x219619+_0xb35f6f(0x347));if(_0x56d435[_0xb35f6f(0x233)]>0x1&&_0x56d435[_0xb35f6f(0x454)]===_0x56d435[_0xb35f6f(0x4b2)])throw Error(_0x219619+_0xb35f6f(0x45c)+_0x219619+_0xb35f6f(0x2ef));},validateNoData=(_0x59792b,_0x4689b2)=>{const _0x273ab8=_0x2335;if(_0x59792b!==void 0x0&&!Number[_0x273ab8(0x2eb)](_0x59792b)&&!Number['isNaN'](_0x59792b))throw Error(_0x4689b2+_0x273ab8(0x3c8)+_0x4689b2+_0x273ab8(0x4d7));},rangesEqual=(_0x160b3e,_0x58092f)=>_0x160b3e['xStart']===_0x58092f[_0x124919(0x377)]&&_0x160b3e['xCount']===_0x58092f[_0x124919(0x368)]&&_0x160b3e[_0x124919(0x24a)]===_0x58092f['levelStart']&&_0x160b3e[_0x124919(0x3f0)]===_0x58092f['levelCount']&&_0x160b3e[_0x124919(0x3a6)]===_0x58092f['sourceYStart']&&_0x160b3e[_0x124919(0x4a0)]===_0x58092f['sourceYCount'],validateVolumeMetadata=_0x25f9e2=>{const _0x478472=_0x124919;if(validateAxis(_0x25f9e2[_0x478472(0x3dd)],_0x478472(0x3a7)),validateAxis(_0x25f9e2[_0x478472(0x481)],'Volume\x20Y\x20axis'),validateAxis(_0x25f9e2[_0x478472(0x446)],_0x478472(0x28e)),validatePositiveInteger(_0x25f9e2[_0x478472(0x294)],_0x478472(0x379)),validateNoData(_0x25f9e2[_0x478472(0x2a5)],'Volume'),_0x25f9e2[_0x478472(0x33e)]!==void 0x0&&!Number[_0x478472(0x2eb)](_0x25f9e2[_0x478472(0x33e)]))throw Error(_0x478472(0x25c));if(_0x25f9e2[_0x478472(0x278)]!==void 0x0&&(!Number['isInteger'](_0x25f9e2[_0x478472(0x278)])||_0x25f9e2[_0x478472(0x278)]<0x0))throw Error(_0x478472(0x34e));},validateVolumeTimeIndex=(_0x4b9676,_0x1fec09)=>{const _0xaf70fe=_0x124919;if(!Number[_0xaf70fe(0x220)](_0x1fec09)||_0x1fec09<0x0||_0x1fec09>=_0x4b9676['timeCount'])throw Error(_0xaf70fe(0x21b)+_0x1fec09+_0xaf70fe(0x2b7));},validateVolumeChunkRange=(_0x4fb3c7,_0x7ad467)=>{const _0x3d380d=_0x124919;let _0x24b4b1=[[_0x7ad467[_0x3d380d(0x377)],'xStart'],[_0x7ad467[_0x3d380d(0x368)],'xCount'],[_0x7ad467[_0x3d380d(0x24a)],_0x3d380d(0x24a)],[_0x7ad467['levelCount'],_0x3d380d(0x3f0)],[_0x7ad467[_0x3d380d(0x3a6)],_0x3d380d(0x3a6)],[_0x7ad467['sourceYCount'],_0x3d380d(0x4a0)]];for(let [_0x11d8a0,_0x5aba51]of _0x24b4b1)if(!Number[_0x3d380d(0x220)](_0x11d8a0)||_0x11d8a0<0x0||_0x5aba51['endsWith'](_0x3d380d(0x3ab))&&_0x11d8a0===0x0)throw Error(_0x3d380d(0x276)+_0x5aba51+_0x3d380d(0x4ac)+_0x11d8a0+'.\x20体积分块\x20'+_0x5aba51+_0x3d380d(0x464));if(_0x7ad467[_0x3d380d(0x377)]+_0x7ad467[_0x3d380d(0x368)]>_0x4fb3c7[_0x3d380d(0x3dd)]['count']||_0x7ad467[_0x3d380d(0x24a)]+_0x7ad467['levelCount']>_0x4fb3c7[_0x3d380d(0x481)][_0x3d380d(0x233)]||_0x7ad467['sourceYStart']+_0x7ad467[_0x3d380d(0x4a0)]>_0x4fb3c7[_0x3d380d(0x446)]['count'])throw Error('Volume\x20chunk\x20range\x20exceeds\x20source\x20dimensions.\x20体积分块范围超出源数据尺寸。');},validateVolumeChunk=(_0x1f6ed3,_0x346217,_0x551050,_0x3896c9)=>{const _0x3bfe5b=_0x124919;if(validateVolumeTimeIndex(_0x1f6ed3,_0x346217[_0x3bfe5b(0x352)]),validateVolumeChunkRange(_0x1f6ed3,_0x346217['range']),_0x3896c9!==void 0x0&&_0x346217[_0x3bfe5b(0x352)]!==_0x3896c9)throw Error(_0x3bfe5b(0x49c));if(_0x551050&&!rangesEqual(_0x346217[_0x3bfe5b(0x27a)],_0x551050))throw Error(_0x3bfe5b(0x3f2));if(_0x346217[_0x3bfe5b(0x2ce)]!==_0x346217[_0x3bfe5b(0x27a)][_0x3bfe5b(0x368)]||_0x346217['height']!==_0x346217[_0x3bfe5b(0x27a)][_0x3bfe5b(0x3f0)]||_0x346217['depth']!==_0x346217[_0x3bfe5b(0x27a)][_0x3bfe5b(0x4a0)])throw Error(_0x3bfe5b(0x3ec));let _0x9c1638=_0x346217[_0x3bfe5b(0x2ce)]*_0x346217[_0x3bfe5b(0x4a1)]*_0x346217[_0x3bfe5b(0x257)];if(!Number[_0x3bfe5b(0x20e)](_0x9c1638)||_0x346217[_0x3bfe5b(0x421)][_0x3bfe5b(0x251)]!==_0x9c1638)throw Error(_0x3bfe5b(0x322)+_0x9c1638+'\x20values\x20but\x20received\x20'+_0x346217[_0x3bfe5b(0x421)][_0x3bfe5b(0x251)]+'.\x20体积分块数值数量与尺寸不一致。');},validateVolumeSource=_0x22a754=>{const _0x1d87e1=_0x124919;if(!_0x22a754||typeof _0x22a754[_0x1d87e1(0x39a)]!='function')throw Error(_0x1d87e1(0x1cb));validateVolumeMetadata(_0x22a754['metadata']);},validateBrickShape=_0x53030b=>{const _0x4caeb1=_0x124919;for(let [_0x2972c1,_0x2acbb9]of[[_0x53030b['width'],_0x4caeb1(0x2ce)],[_0x53030b['height'],_0x4caeb1(0x4a1)],[_0x53030b[_0x4caeb1(0x257)],_0x4caeb1(0x257)]])if(!Number[_0x4caeb1(0x220)](_0x2972c1)||_0x2972c1<=0x0)throw Error(_0x4caeb1(0x35f)+_0x2acbb9+'\x20must\x20be\x20a\x20positive\x20integer.\x20体积分块\x20'+_0x2acbb9+_0x4caeb1(0x360));if(!Number[_0x4caeb1(0x220)](_0x53030b[_0x4caeb1(0x43f)])||_0x53030b[_0x4caeb1(0x43f)]<0x1)throw Error('Volume\x20brick\x20halo\x20must\x20be\x20a\x20positive\x20integer.\x20体积分块\x20halo\x20必须是正整数。');},resolveVolumeBrickShape=(_0x57360b={})=>{let _0x5db3cb={'width':_0x57360b['width']??0x100,'height':_0x57360b['height']??0x8,'depth':_0x57360b['depth']??0x100,'halo':_0x57360b['halo']??0x1};return validateBrickShape(_0x5db3cb),_0x5db3cb;},createVolumeBrickLayout=(_0x3d53a5,_0x8d5096={})=>{const _0x42d299=_0x124919;validateVolumeMetadata(_0x3d53a5);let _0x233aa0=resolveVolumeBrickShape(_0x8d5096),_0x432ac4=Math[_0x42d299(0x404)](_0x3d53a5[_0x42d299(0x3dd)][_0x42d299(0x233)]/_0x233aa0[_0x42d299(0x2ce)]),_0x5bcb8d=Math['ceil'](_0x3d53a5[_0x42d299(0x481)][_0x42d299(0x233)]/_0x233aa0[_0x42d299(0x4a1)]),_0x563ce8=Math[_0x42d299(0x404)](_0x3d53a5[_0x42d299(0x446)][_0x42d299(0x233)]/_0x233aa0['depth']);return{'shape':_0x233aa0,'countX':_0x432ac4,'countY':_0x5bcb8d,'countZ':_0x563ce8,'brickCount':_0x432ac4*_0x5bcb8d*_0x563ce8};},createVolumeBrickKey=_0x122031=>_0x122031['x']+':'+_0x122031['y']+':'+_0x122031['z'],createVolumeBrickDescriptor=(_0x15f4d2,_0x14de1a,_0x2a5dbb)=>{const _0x8a4d7f=_0x124919;if(!Number[_0x8a4d7f(0x220)](_0x2a5dbb['x'])||!Number[_0x8a4d7f(0x220)](_0x2a5dbb['y'])||!Number[_0x8a4d7f(0x220)](_0x2a5dbb['z'])||_0x2a5dbb['x']<0x0||_0x2a5dbb['x']>=_0x14de1a[_0x8a4d7f(0x37f)]||_0x2a5dbb['y']<0x0||_0x2a5dbb['y']>=_0x14de1a[_0x8a4d7f(0x409)]||_0x2a5dbb['z']<0x0||_0x2a5dbb['z']>=_0x14de1a[_0x8a4d7f(0x4be)])throw Error('Volume\x20brick\x20coordinate\x20is\x20out\x20of\x20range.\x20体积分块坐标越界。');let _0x1759e2=_0x2a5dbb['x']*_0x14de1a[_0x8a4d7f(0x2d3)]['width'],_0x4bcc70=_0x2a5dbb['y']*_0x14de1a[_0x8a4d7f(0x2d3)][_0x8a4d7f(0x4a1)],_0x50ab4d=_0x2a5dbb['z']*_0x14de1a[_0x8a4d7f(0x2d3)][_0x8a4d7f(0x257)],_0x4dfa5a=Math[_0x8a4d7f(0x44f)](_0x14de1a[_0x8a4d7f(0x2d3)][_0x8a4d7f(0x2ce)],_0x15f4d2['xAxis'][_0x8a4d7f(0x233)]-_0x1759e2),_0x4772d3=Math[_0x8a4d7f(0x44f)](_0x14de1a[_0x8a4d7f(0x2d3)][_0x8a4d7f(0x4a1)],_0x15f4d2[_0x8a4d7f(0x481)][_0x8a4d7f(0x233)]-_0x4bcc70),_0x991f67=Math[_0x8a4d7f(0x44f)](_0x14de1a['shape'][_0x8a4d7f(0x257)],_0x15f4d2['zAxis'][_0x8a4d7f(0x233)]-_0x50ab4d),_0x1efdcd=_0x14de1a[_0x8a4d7f(0x2d3)][_0x8a4d7f(0x43f)],_0x56a8bb=Math[_0x8a4d7f(0x207)](0x0,_0x1759e2-_0x1efdcd),_0x223fe1=Math[_0x8a4d7f(0x207)](0x0,_0x4bcc70-_0x1efdcd),_0x2bd49a=Math[_0x8a4d7f(0x207)](0x0,_0x50ab4d-_0x1efdcd),_0x4cf565=Math[_0x8a4d7f(0x44f)](_0x15f4d2['xAxis'][_0x8a4d7f(0x233)],_0x1759e2+_0x4dfa5a+_0x1efdcd),_0x415183=Math[_0x8a4d7f(0x44f)](_0x15f4d2[_0x8a4d7f(0x481)][_0x8a4d7f(0x233)],_0x4bcc70+_0x4772d3+_0x1efdcd),_0x476ae1=Math[_0x8a4d7f(0x44f)](_0x15f4d2[_0x8a4d7f(0x446)][_0x8a4d7f(0x233)],_0x50ab4d+_0x991f67+_0x1efdcd),_0x57004b=_0x14de1a['shape'][_0x8a4d7f(0x2ce)]+_0x1efdcd*0x2,_0xc6a464=_0x14de1a[_0x8a4d7f(0x2d3)]['height']+_0x1efdcd*0x2,_0x5c7ab3=_0x14de1a[_0x8a4d7f(0x2d3)][_0x8a4d7f(0x257)]+_0x1efdcd*0x2;return{'key':createVolumeBrickKey(_0x2a5dbb),'coordinate':_0x2a5dbb,'coreRange':{'xStart':_0x1759e2,'xCount':_0x4dfa5a,'levelStart':_0x4bcc70,'levelCount':_0x4772d3,'sourceYStart':_0x50ab4d,'sourceYCount':_0x991f67},'readRange':{'xStart':_0x56a8bb,'xCount':_0x4cf565-_0x56a8bb,'levelStart':_0x223fe1,'levelCount':_0x415183-_0x223fe1,'sourceYStart':_0x2bd49a,'sourceYCount':_0x476ae1-_0x2bd49a},'physicalWidth':_0x57004b,'physicalHeight':_0xc6a464,'physicalDepth':_0x5c7ab3,'byteLength':_0x57004b*_0xc6a464*_0x5c7ab3*Float32Array['BYTES_PER_ELEMENT']};},createVolumeBrickDescriptors=(_0x5a607f,_0x1a24bc)=>{const _0x1defd9=_0x124919;let _0x4f406a=[];for(let _0x2fc4dd=0x0;_0x2fc4dd<_0x1a24bc[_0x1defd9(0x4be)];_0x2fc4dd+=0x1)for(let _0x518c65=0x0;_0x518c65<_0x1a24bc[_0x1defd9(0x409)];_0x518c65+=0x1)for(let _0x265ef6=0x0;_0x265ef6<_0x1a24bc['countX'];_0x265ef6+=0x1)_0x4f406a[_0x1defd9(0x4bd)](createVolumeBrickDescriptor(_0x5a607f,_0x1a24bc,{'x':_0x265ef6,'y':_0x518c65,'z':_0x2fc4dd}));return _0x4f406a;},EPSILON=1e-8,createMatrix=()=>new Float32Array(0x10),dotVector3=(_0x324ff7,_0x49db0e)=>_0x324ff7[0x0]*_0x49db0e[0x0]+_0x324ff7[0x1]*_0x49db0e[0x1]+_0x324ff7[0x2]*_0x49db0e[0x2],subtractVector3=(_0x4c5355,_0x3f8574)=>[_0x4c5355[0x0]-_0x3f8574[0x0],_0x4c5355[0x1]-_0x3f8574[0x1],_0x4c5355[0x2]-_0x3f8574[0x2]],crossVector3=(_0x1b1f69,_0x2b1468)=>[_0x1b1f69[0x1]*_0x2b1468[0x2]-_0x1b1f69[0x2]*_0x2b1468[0x1],_0x1b1f69[0x2]*_0x2b1468[0x0]-_0x1b1f69[0x0]*_0x2b1468[0x2],_0x1b1f69[0x0]*_0x2b1468[0x1]-_0x1b1f69[0x1]*_0x2b1468[0x0]],normalizeVector3=_0x5b6698=>{const _0x2384b7=_0x124919;let _0x59a5f9=Math[_0x2384b7(0x30d)](_0x5b6698[0x0],_0x5b6698[0x1],_0x5b6698[0x2]);if(_0x59a5f9<=EPSILON)throw Error(_0x2384b7(0x200));return[_0x5b6698[0x0]/_0x59a5f9,_0x5b6698[0x1]/_0x59a5f9,_0x5b6698[0x2]/_0x59a5f9];},createIdentityMatrix=()=>{let _0x58bd38=createMatrix();return _0x58bd38[0x0]=0x1,_0x58bd38[0x5]=0x1,_0x58bd38[0xa]=0x1,_0x58bd38[0xf]=0x1,_0x58bd38;},multiplyMatrices=(_0x3ff5a3,_0x5980df)=>{let _0x55ef68=createMatrix();for(let _0x508039=0x0;_0x508039<0x4;_0x508039+=0x1)for(let _0x533e82=0x0;_0x533e82<0x4;_0x533e82+=0x1){let _0x219212=0x0;for(let _0x34decc=0x0;_0x34decc<0x4;_0x34decc+=0x1)_0x219212+=_0x3ff5a3[_0x34decc*0x4+_0x533e82]*_0x5980df[_0x508039*0x4+_0x34decc];_0x55ef68[_0x508039*0x4+_0x533e82]=_0x219212;}return _0x55ef68;},invertMatrix=_0x279030=>{const _0x5a3382=_0x124919;let _0x4f97c0=Array['from']({'length':0x4},(_0xed847b,_0x1b65fb)=>{let _0x23bd11=new Float64Array(0x8);for(let _0x4eedce=0x0;_0x4eedce<0x4;_0x4eedce+=0x1)_0x23bd11[_0x4eedce]=_0x279030[_0x4eedce*0x4+_0x1b65fb];return _0x23bd11[_0x1b65fb+0x4]=0x1,_0x23bd11;});for(let _0x2168a6=0x0;_0x2168a6<0x4;_0x2168a6+=0x1){let _0x43867b=_0x2168a6;for(let _0x265f2b=_0x2168a6+0x1;_0x265f2b<0x4;_0x265f2b+=0x1)Math[_0x5a3382(0x246)](_0x4f97c0[_0x265f2b][_0x2168a6])>Math[_0x5a3382(0x246)](_0x4f97c0[_0x43867b][_0x2168a6])&&(_0x43867b=_0x265f2b);if(Math[_0x5a3382(0x246)](_0x4f97c0[_0x43867b][_0x2168a6])<=EPSILON)throw Error(_0x5a3382(0x491));_0x43867b!==_0x2168a6&&([_0x4f97c0[_0x2168a6],_0x4f97c0[_0x43867b]]=[_0x4f97c0[_0x43867b],_0x4f97c0[_0x2168a6]]);let _0x40176b=_0x4f97c0[_0x2168a6][_0x2168a6];for(let _0x1f7290=0x0;_0x1f7290<0x8;_0x1f7290+=0x1)_0x4f97c0[_0x2168a6][_0x1f7290]/=_0x40176b;for(let _0x1e8a62=0x0;_0x1e8a62<0x4;_0x1e8a62+=0x1){if(_0x1e8a62===_0x2168a6)continue;let _0x42ad15=_0x4f97c0[_0x1e8a62][_0x2168a6];for(let _0x495298=0x0;_0x495298<0x8;_0x495298+=0x1)_0x4f97c0[_0x1e8a62][_0x495298]-=_0x42ad15*_0x4f97c0[_0x2168a6][_0x495298];}}let _0x41d3e7=createMatrix();for(let _0x22a8ed=0x0;_0x22a8ed<0x4;_0x22a8ed+=0x1)for(let _0x4559bb=0x0;_0x4559bb<0x4;_0x4559bb+=0x1)_0x41d3e7[_0x4559bb*0x4+_0x22a8ed]=_0x4f97c0[_0x22a8ed][_0x4559bb+0x4];return _0x41d3e7;},createLookAtMatrix=(_0x389757,_0x385de1,_0x4b365b)=>{let _0x17e045=normalizeVector3(subtractVector3(_0x389757,_0x385de1)),_0x3438de=normalizeVector3(crossVector3(_0x4b365b,_0x17e045)),_0x4c853d=crossVector3(_0x17e045,_0x3438de),_0x4e34fc=createIdentityMatrix();return _0x4e34fc[0x0]=_0x3438de[0x0],_0x4e34fc[0x1]=_0x4c853d[0x0],_0x4e34fc[0x2]=_0x17e045[0x0],_0x4e34fc[0x4]=_0x3438de[0x1],_0x4e34fc[0x5]=_0x4c853d[0x1],_0x4e34fc[0x6]=_0x17e045[0x1],_0x4e34fc[0x8]=_0x3438de[0x2],_0x4e34fc[0x9]=_0x4c853d[0x2],_0x4e34fc[0xa]=_0x17e045[0x2],_0x4e34fc[0xc]=-dotVector3(_0x3438de,_0x389757),_0x4e34fc[0xd]=-dotVector3(_0x4c853d,_0x389757),_0x4e34fc[0xe]=-dotVector3(_0x17e045,_0x389757),_0x4e34fc;},createPerspectiveMatrix=(_0x112a1a,_0x3663be,_0xc31f2d,_0x4443de)=>{const _0x3386cc=_0x124919;if(!(_0x112a1a>0x0&&_0x112a1a<Math['PI']))throw Error(_0x3386cc(0x306));if(!(_0x3663be>0x0))throw Error(_0x3386cc(0x47f));if(!(_0xc31f2d>0x0&&_0x4443de>_0xc31f2d))throw Error(_0x3386cc(0x4c2));let _0x599573=0x1/Math[_0x3386cc(0x43b)](_0x112a1a/0x2),_0x59aea0=createMatrix();return _0x59aea0[0x0]=_0x599573/_0x3663be,_0x59aea0[0x5]=_0x599573,_0x59aea0[0xa]=_0x4443de/(_0xc31f2d-_0x4443de),_0x59aea0[0xb]=-0x1,_0x59aea0[0xe]=_0xc31f2d*_0x4443de/(_0xc31f2d-_0x4443de),_0x59aea0;},createOrthographicMatrix=(_0x5e8e49,_0x25ca23,_0xf5f3f3,_0x19a658)=>{const _0x48ebaf=_0x124919;if(!(_0x5e8e49>0x0&&_0x25ca23>0x0))throw Error(_0x48ebaf(0x230));if(!(_0xf5f3f3>=0x0&&_0x19a658>_0xf5f3f3))throw Error(_0x48ebaf(0x3e2));let _0x49f414=_0x5e8e49*_0x25ca23,_0x4123f3=createIdentityMatrix();return _0x4123f3[0x0]=0x2/_0x49f414,_0x4123f3[0x5]=0x2/_0x5e8e49,_0x4123f3[0xa]=0x1/(_0xf5f3f3-_0x19a658),_0x4123f3[0xe]=_0xf5f3f3/(_0xf5f3f3-_0x19a658),_0x4123f3;},createScaleMatrix=(_0x5cce84,_0x1ace8f,_0x4998bd)=>{let _0x129503=createIdentityMatrix();return _0x129503[0x0]=_0x5cce84,_0x129503[0x5]=_0x1ace8f,_0x129503[0xa]=_0x4998bd,_0x129503;},composeVolumeModelMatrix=(_0x1afb88,_0x11e9b9)=>{const _0x4557dc=_0x124919;if(!(_0x11e9b9>0x0)||!Number[_0x4557dc(0x2eb)](_0x11e9b9))throw Error(_0x4557dc(0x2da));let _0x326e04=createScaleMatrix(0x1,_0x11e9b9,0x1);return _0x1afb88?multiplyMatrices(_0x1afb88,_0x326e04):_0x326e04;},transformPoint=(_0x55d4a1,_0x144468,_0x39df6b=0x1)=>[_0x55d4a1[0x0]*_0x144468[0x0]+_0x55d4a1[0x4]*_0x144468[0x1]+_0x55d4a1[0x8]*_0x144468[0x2]+_0x55d4a1[0xc]*_0x39df6b,_0x55d4a1[0x1]*_0x144468[0x0]+_0x55d4a1[0x5]*_0x144468[0x1]+_0x55d4a1[0x9]*_0x144468[0x2]+_0x55d4a1[0xd]*_0x39df6b,_0x55d4a1[0x2]*_0x144468[0x0]+_0x55d4a1[0x6]*_0x144468[0x1]+_0x55d4a1[0xa]*_0x144468[0x2]+_0x55d4a1[0xe]*_0x39df6b,_0x55d4a1[0x3]*_0x144468[0x0]+_0x55d4a1[0x7]*_0x144468[0x1]+_0x55d4a1[0xb]*_0x144468[0x2]+_0x55d4a1[0xf]*_0x39df6b],projectPointToViewport=(_0xdd40d5,_0x434ff6,_0x4dfca1,_0x22c948)=>{let _0x569c53=transformPoint(_0xdd40d5,_0x434ff6);if(_0x569c53[0x3]<=EPSILON)return null;let _0x1c41ac=0x1/_0x569c53[0x3];return[(_0x569c53[0x0]*_0x1c41ac*0.5+0.5)*_0x4dfca1,(0.5-_0x569c53[0x1]*_0x1c41ac*0.5)*_0x22c948,_0x569c53[0x2]*_0x1c41ac];},DEFAULT_POSITION=[0x0,0x1,0x2],DEFAULT_TARGET=[0x0,0x0,0x0],DEFAULT_UP=[0x0,0x1,0x0],DEFAULT_PROJECTION={'type':_0x124919(0x4d5),'fovYDegrees':0x2d,'near':0.01,'far':0x2710},DEGREE_TO_RADIAN=Math['PI']/0xb4,cloneVector=_0x133ced=>[_0x133ced[0x0],_0x133ced[0x1],_0x133ced[0x2]],cloneProjection=_0x3a0746=>(_0x3a0746['type'],{..._0x3a0746}),cloneState=_0x2f223d=>({'position':cloneVector(_0x2f223d['position']),'target':cloneVector(_0x2f223d[_0x124919(0x3c4)]),'up':cloneVector(_0x2f223d['up']),'projection':cloneProjection(_0x2f223d[_0x124919(0x3a8)])}),subtractVector=(_0x5b2ae4,_0x19f2ce)=>[_0x5b2ae4[0x0]-_0x19f2ce[0x0],_0x5b2ae4[0x1]-_0x19f2ce[0x1],_0x5b2ae4[0x2]-_0x19f2ce[0x2]],addVector=(_0x49e925,_0x5717f6)=>[_0x49e925[0x0]+_0x5717f6[0x0],_0x49e925[0x1]+_0x5717f6[0x1],_0x49e925[0x2]+_0x5717f6[0x2]],scaleVector=(_0x1e6322,_0x554840)=>[_0x1e6322[0x0]*_0x554840,_0x1e6322[0x1]*_0x554840,_0x1e6322[0x2]*_0x554840],crossVector=(_0x1fe5b0,_0x19546b)=>[_0x1fe5b0[0x1]*_0x19546b[0x2]-_0x1fe5b0[0x2]*_0x19546b[0x1],_0x1fe5b0[0x2]*_0x19546b[0x0]-_0x1fe5b0[0x0]*_0x19546b[0x2],_0x1fe5b0[0x0]*_0x19546b[0x1]-_0x1fe5b0[0x1]*_0x19546b[0x0]],normalizeVector=_0x3bf94a=>{let _0x410f75=Math['hypot'](_0x3bf94a[0x0],_0x3bf94a[0x1],_0x3bf94a[0x2]);return _0x410f75===0x0?[0x0,0x0,0x0]:scaleVector(_0x3bf94a,0x1/_0x410f75);},clamp$1=(_0x466613,_0x35e7af,_0x39d1ee)=>Math[_0x124919(0x44f)](_0x39d1ee,Math[_0x124919(0x207)](_0x35e7af,_0x466613)),validateProjection=_0x770b5a=>{const _0x45c133=_0x124919;if(!(_0x770b5a[_0x45c133(0x2cb)]>=0x0&&_0x770b5a[_0x45c133(0x28b)]>_0x770b5a[_0x45c133(0x2cb)]))throw Error(_0x45c133(0x3e2));if(_0x770b5a[_0x45c133(0x457)]===_0x45c133(0x4d5)&&!(_0x770b5a[_0x45c133(0x2cb)]>0x0&&_0x770b5a[_0x45c133(0x3de)]>0x0&&_0x770b5a['fovYDegrees']<0xb4))throw Error(_0x45c133(0x2fd));if(_0x770b5a[_0x45c133(0x457)]===_0x45c133(0x20d)&&!(_0x770b5a[_0x45c133(0x4a1)]>0x0))throw Error(_0x45c133(0x45b));},resolveInitialState=_0x38b75c=>{const _0x49b86b=_0x124919;let _0x404f1d={'position':_0x38b75c[_0x49b86b(0x26e)]?.['position']?cloneVector(_0x38b75c[_0x49b86b(0x26e)][_0x49b86b(0x34d)]):cloneVector(DEFAULT_POSITION),'target':_0x38b75c[_0x49b86b(0x26e)]?.[_0x49b86b(0x3c4)]?cloneVector(_0x38b75c[_0x49b86b(0x26e)][_0x49b86b(0x3c4)]):cloneVector(DEFAULT_TARGET),'up':_0x38b75c['state']?.['up']?cloneVector(_0x38b75c['state']['up']):cloneVector(DEFAULT_UP),'projection':_0x38b75c[_0x49b86b(0x26e)]?.[_0x49b86b(0x3a8)]?cloneProjection(_0x38b75c[_0x49b86b(0x26e)][_0x49b86b(0x3a8)]):cloneProjection(DEFAULT_PROJECTION)};return validateProjection(_0x404f1d['projection']),_0x404f1d;};var VolumeCamera=class{[_0x124919(0x45a)];[_0x124919(0x38f)];[_0x124919(0x3eb)];[_0x124919(0x1ea)];[_0x124919(0x232)];[_0x124919(0x31b)];['maximumDistance'];[_0x124919(0x1d7)];[_0x124919(0x42d)];constructor(_0x211f49={}){const _0x58c7b2=_0x124919;if(this[_0x58c7b2(0x45a)]=resolveInitialState(_0x211f49),this[_0x58c7b2(0x38f)]=_0x211f49[_0x58c7b2(0x38f)]??0x1,this['rotateSpeed']=_0x211f49[_0x58c7b2(0x3eb)]??0.005,this['panSpeed']=_0x211f49[_0x58c7b2(0x1ea)]??0x1,this[_0x58c7b2(0x232)]=_0x211f49[_0x58c7b2(0x232)]??0.0015,this[_0x58c7b2(0x31b)]=_0x211f49[_0x58c7b2(0x31b)]??0.001,this[_0x58c7b2(0x235)]=_0x211f49[_0x58c7b2(0x235)]??0x1/0x0,this[_0x58c7b2(0x1d7)]=(_0x211f49[_0x58c7b2(0x1e7)]??-0x59)*DEGREE_TO_RADIAN,this[_0x58c7b2(0x42d)]=(_0x211f49[_0x58c7b2(0x35e)]??0x59)*DEGREE_TO_RADIAN,!(this['aspect']>0x0))throw Error('相机宽高比必须大于\x200。');}get[_0x124919(0x26e)](){const _0x54b43c=_0x124919;return cloneState(this[_0x54b43c(0x45a)]);}get['matrices'](){const _0x1874dc=_0x124919;let _0x1c27be=createLookAtMatrix(this['cameraState'][_0x1874dc(0x34d)],this['cameraState']['target'],this[_0x1874dc(0x45a)]['up']),_0x2e9264=this['createProjectionMatrix'](),_0x11c6bb=multiplyMatrices(_0x2e9264,_0x1c27be);return{'view':_0x1c27be,'projection':_0x2e9264,'viewProjection':_0x11c6bb,'inverseViewProjection':invertMatrix(_0x11c6bb)};}[_0x124919(0x419)](_0x203dd7){const _0x1475f3=_0x124919;validateProjection(_0x203dd7[_0x1475f3(0x3a8)]),this[_0x1475f3(0x45a)]=cloneState(_0x203dd7);}[_0x124919(0x4cb)](_0x470e93){const _0x1c8a66=_0x124919;if(!(_0x470e93>0x0)||!Number[_0x1c8a66(0x2eb)](_0x470e93))throw Error(_0x1c8a66(0x2dd));this[_0x1c8a66(0x38f)]=_0x470e93;}[_0x124919(0x2e1)](_0xc1e310){const _0x6447a3=_0x124919;if(_0xc1e310===this[_0x6447a3(0x45a)][_0x6447a3(0x3a8)]['type'])return;let _0x375e7d=Math[_0x6447a3(0x30d)](...subtractVector(this[_0x6447a3(0x45a)][_0x6447a3(0x34d)],this[_0x6447a3(0x45a)]['target']));if(_0xc1e310===_0x6447a3(0x20d)){let _0x33975f=this['cameraState'][_0x6447a3(0x3a8)],_0x1fd913=_0x33975f[_0x6447a3(0x457)]===_0x6447a3(0x4d5)?_0x33975f[_0x6447a3(0x3de)]*DEGREE_TO_RADIAN:0x2d*DEGREE_TO_RADIAN;this[_0x6447a3(0x45a)][_0x6447a3(0x3a8)]={'type':_0xc1e310,'height':0x2*_0x375e7d*Math[_0x6447a3(0x43b)](_0x1fd913/0x2),'near':_0x33975f[_0x6447a3(0x2cb)],'far':_0x33975f[_0x6447a3(0x28b)]};return;}let _0x28df6a=this[_0x6447a3(0x45a)][_0x6447a3(0x3a8)],_0x4c1d64=_0x28df6a['type']==='orthographic'?_0x28df6a[_0x6447a3(0x4a1)]/(0x2*Math[_0x6447a3(0x43b)](0x2d*DEGREE_TO_RADIAN/0x2)):_0x375e7d,_0xc16cd4=normalizeVector(subtractVector(this[_0x6447a3(0x45a)][_0x6447a3(0x34d)],this['cameraState'][_0x6447a3(0x3c4)]));this['cameraState'][_0x6447a3(0x34d)]=addVector(this[_0x6447a3(0x45a)][_0x6447a3(0x3c4)],scaleVector(_0xc16cd4,_0x4c1d64)),this[_0x6447a3(0x45a)]['projection']={'type':_0xc1e310,'fovYDegrees':0x2d,'near':_0x28df6a[_0x6447a3(0x2cb)],'far':_0x28df6a[_0x6447a3(0x28b)]};}[_0x124919(0x2ca)](_0x4a60ae,_0x1d5a8e){const _0x4e1e8c=_0x124919;let _0x5e91c9=subtractVector(this[_0x4e1e8c(0x45a)][_0x4e1e8c(0x34d)],this[_0x4e1e8c(0x45a)][_0x4e1e8c(0x3c4)]),_0xdd5592=Math[_0x4e1e8c(0x30d)](..._0x5e91c9);if(_0xdd5592===0x0)return;let _0x48d14e=Math[_0x4e1e8c(0x400)](_0x5e91c9[0x0],_0x5e91c9[0x2])-_0x4a60ae*this[_0x4e1e8c(0x3eb)],_0x11df99=clamp$1(Math['asin'](_0x5e91c9[0x1]/_0xdd5592)+_0x1d5a8e*this['rotateSpeed'],this['minimumPitch'],this['maximumPitch']),_0x587649=Math[_0x4e1e8c(0x358)](_0x11df99)*_0xdd5592;this[_0x4e1e8c(0x45a)][_0x4e1e8c(0x34d)]=addVector(this['cameraState'][_0x4e1e8c(0x3c4)],[Math['sin'](_0x48d14e)*_0x587649,Math[_0x4e1e8c(0x328)](_0x11df99)*_0xdd5592,Math[_0x4e1e8c(0x358)](_0x48d14e)*_0x587649]);}['pan'](_0x4cd433,_0x3f0786,_0x265d71){const _0x8fa951=_0x124919;if(!(_0x265d71>0x0))return;let _0x514cf2=normalizeVector(subtractVector(this[_0x8fa951(0x45a)][_0x8fa951(0x3c4)],this[_0x8fa951(0x45a)][_0x8fa951(0x34d)])),_0xc0cea=normalizeVector(crossVector(_0x514cf2,this['cameraState']['up'])),_0x18e564=normalizeVector(crossVector(_0xc0cea,_0x514cf2)),_0x39d22f=Math[_0x8fa951(0x30d)](...subtractVector(this[_0x8fa951(0x45a)]['position'],this[_0x8fa951(0x45a)][_0x8fa951(0x3c4)])),_0x87aab5=(this[_0x8fa951(0x45a)]['projection']['type']===_0x8fa951(0x20d)?this[_0x8fa951(0x45a)][_0x8fa951(0x3a8)][_0x8fa951(0x4a1)]:0x2*_0x39d22f*Math[_0x8fa951(0x43b)](this[_0x8fa951(0x45a)][_0x8fa951(0x3a8)]['fovYDegrees']*DEGREE_TO_RADIAN/0x2))/_0x265d71*this[_0x8fa951(0x1ea)],_0x24bfd5=addVector(scaleVector(_0xc0cea,-_0x4cd433*_0x87aab5),scaleVector(_0x18e564,_0x3f0786*_0x87aab5));this[_0x8fa951(0x45a)]['position']=addVector(this['cameraState']['position'],_0x24bfd5),this['cameraState'][_0x8fa951(0x3c4)]=addVector(this[_0x8fa951(0x45a)][_0x8fa951(0x3c4)],_0x24bfd5);}[_0x124919(0x270)](_0x180568){const _0x352c05=_0x124919;let _0x351c6b=Math[_0x352c05(0x47e)](_0x180568*this[_0x352c05(0x232)]);if(this[_0x352c05(0x45a)][_0x352c05(0x3a8)][_0x352c05(0x457)]===_0x352c05(0x20d)){this['cameraState'][_0x352c05(0x3a8)]={...this[_0x352c05(0x45a)][_0x352c05(0x3a8)],'height':Math[_0x352c05(0x207)](this['minimumDistance'],this['cameraState']['projection'][_0x352c05(0x4a1)]*_0x351c6b)};return;}let _0x216c83=subtractVector(this[_0x352c05(0x45a)][_0x352c05(0x34d)],this[_0x352c05(0x45a)][_0x352c05(0x3c4)]),_0x1e31c2=clamp$1(Math['hypot'](..._0x216c83)*_0x351c6b,this[_0x352c05(0x31b)],this[_0x352c05(0x235)]);this[_0x352c05(0x45a)][_0x352c05(0x34d)]=addVector(this[_0x352c05(0x45a)][_0x352c05(0x3c4)],scaleVector(normalizeVector(_0x216c83),_0x1e31c2));}[_0x124919(0x2c5)](){const _0x17b47d=_0x124919;let _0x1b3c4d=this[_0x17b47d(0x45a)]['projection'];return _0x1b3c4d['type']===_0x17b47d(0x4d5)?createPerspectiveMatrix(_0x1b3c4d[_0x17b47d(0x3de)]*DEGREE_TO_RADIAN,this[_0x17b47d(0x38f)],_0x1b3c4d[_0x17b47d(0x2cb)],_0x1b3c4d['far']):createOrthographicMatrix(_0x1b3c4d[_0x17b47d(0x4a1)],this['aspect'],_0x1b3c4d[_0x17b47d(0x2cb)],_0x1b3c4d[_0x17b47d(0x28b)]);}};const WGS84_SEMI_MAJOR_AXIS_METERS=0x615299,WGS84_SEMI_MINOR_AXIS_METERS=WGS84_SEMI_MAJOR_AXIS_METERS*(0x1-0x1/298.257223563),WGS84_FIRST_ECCENTRICITY_SQUARED=0x1-WGS84_SEMI_MINOR_AXIS_METERS**0x2/WGS84_SEMI_MAJOR_AXIS_METERS**0x2,degreesToRadians=_0x392a27=>_0x392a27*Math['PI']/0xb4,geodeticToEcef=(_0x1807d4,_0x5bced6,_0x30b6fb)=>{const _0x132bba=_0x124919;let _0x1eaaed=Math['sin'](_0x5bced6),_0xcce9e9=Math[_0x132bba(0x358)](_0x5bced6),_0x35bdf6=Math[_0x132bba(0x328)](_0x1807d4),_0x5b076b=Math[_0x132bba(0x358)](_0x1807d4),_0x2de279=WGS84_SEMI_MAJOR_AXIS_METERS/Math['sqrt'](0x1-WGS84_FIRST_ECCENTRICITY_SQUARED*_0x1eaaed*_0x1eaaed);return[(_0x2de279+_0x30b6fb)*_0xcce9e9*_0x5b076b,(_0x2de279+_0x30b6fb)*_0xcce9e9*_0x35bdf6,(_0x2de279*(0x1-WGS84_FIRST_ECCENTRICITY_SQUARED)+_0x30b6fb)*_0x1eaaed];},validateAxisSpan=(_0x385f10,_0x5c336b,_0x4907f0)=>{const _0xc580ed=_0x124919;if(!Number[_0xc580ed(0x2eb)](_0x385f10)||!Number['isFinite'](_0x5c336b)||_0x385f10===_0x5c336b)throw Error(_0x4907f0+_0xc580ed(0x3b3)+_0x4907f0+_0xc580ed(0x432));},createGeographicVolumeLayout=(_0x40540d,_0x52743e=0x1)=>{const _0x4debb2=_0x124919;let _0x321f0c=degreesToRadians(_0x40540d[_0x4debb2(0x3dd)]['start']),_0x4c1d89=degreesToRadians(_0x40540d[_0x4debb2(0x3dd)][_0x4debb2(0x4b2)]),_0x5260d4=degreesToRadians(_0x40540d['zAxis'][_0x4debb2(0x454)]),_0x346ae4=degreesToRadians(_0x40540d[_0x4debb2(0x446)]['end']);validateAxisSpan(_0x321f0c,_0x4c1d89,'Longitude\x20/\x20经度'),validateAxisSpan(_0x5260d4,_0x346ae4,_0x4debb2(0x300));let _0x4d2742=_0x40540d['yAxis'][_0x4debb2(0x454)],_0x4ebb4a=_0x40540d['yAxis']['end'];if(validateAxisSpan(_0x4d2742,_0x4ebb4a,_0x4debb2(0x293)),!(_0x52743e>0x0)||!Number[_0x4debb2(0x2eb)](_0x52743e))throw Error(_0x4debb2(0x281));let _0x1a18cd=_0x4d2742+(_0x4ebb4a-_0x4d2742)*_0x52743e,_0x170ccd=(_0x321f0c+_0x4c1d89)/0x2,_0x38a360=(_0x5260d4+_0x346ae4)/0x2,_0x30aa0a=geodeticToEcef(_0x170ccd,_0x38a360,0x0),_0x4ef7ef=Math[_0x4debb2(0x246)](_0x4c1d89-_0x321f0c)*WGS84_SEMI_MAJOR_AXIS_METERS*Math[_0x4debb2(0x207)](0.01,Math['cos'](_0x38a360)),_0x5951f3=Math[_0x4debb2(0x246)](_0x346ae4-_0x5260d4)*WGS84_SEMI_MAJOR_AXIS_METERS,_0xbf3e96=Math['max'](_0x4ef7ef,_0x5951f3);if(!(_0xbf3e96>0x0)||!Number[_0x4debb2(0x2eb)](_0xbf3e96))throw Error(_0x4debb2(0x213));let _0x52b833=[0x1/0x0,0x1/0x0,0x1/0x0],_0x746886=[-0x1/0x0,-0x1/0x0,-0x1/0x0];for(let _0x53b2f5=0x0;_0x53b2f5<=0x8;_0x53b2f5+=0x1){let _0x19f2fc=_0x5260d4+(_0x346ae4-_0x5260d4)*_0x53b2f5/0x8;for(let _0x308a16=0x0;_0x308a16<=0x8;_0x308a16+=0x1){let _0x6209a7=_0x321f0c+(_0x4c1d89-_0x321f0c)*_0x308a16/0x8;for(let _0x466d41 of[_0x4d2742,_0x1a18cd]){let _0x2af039=geodeticToEcef(_0x6209a7,_0x19f2fc,_0x466d41);for(let _0x5a27fa=0x0;_0x5a27fa<0x3;_0x5a27fa+=0x1){let _0x5022f8=(_0x2af039[_0x5a27fa]-_0x30aa0a[_0x5a27fa])/_0xbf3e96;_0x52b833[_0x5a27fa]=Math[_0x4debb2(0x44f)](_0x52b833[_0x5a27fa],_0x5022f8),_0x746886[_0x5a27fa]=Math['max'](_0x746886[_0x5a27fa],_0x5022f8);}}}}let _0x21afaa=_0x746886['map']((_0x38e31c,_0x4f1e04)=>_0x38e31c-_0x52b833[_0x4f1e04]);if(_0x21afaa[_0x4debb2(0x3c5)](_0x42229d=>!(_0x42229d>0x0)||!Number[_0x4debb2(0x2eb)](_0x42229d)))throw Error(_0x4debb2(0x241));return{'centerEcef':_0x30aa0a,'normalizationMeters':_0xbf3e96,'proxyModelMatrix':[_0x21afaa[0x0],0x0,0x0,0x0,0x0,_0x21afaa[0x1],0x0,0x0,0x0,0x0,_0x21afaa[0x2],0x0,_0x52b833[0x0],_0x52b833[0x1],_0x52b833[0x2],0x1],'transform':{'mode':_0x4debb2(0x488),'centerEcefScaled':[_0x30aa0a[0x0]/_0xbf3e96,_0x30aa0a[0x1]/_0xbf3e96,_0x30aa0a[0x2]/_0xbf3e96],'semiMajorAxisScaled':WGS84_SEMI_MAJOR_AXIS_METERS/_0xbf3e96,'semiMinorAxisScaled':WGS84_SEMI_MINOR_AXIS_METERS/_0xbf3e96,'longitudeRadians':[_0x321f0c,_0x4c1d89],'latitudeRadians':[_0x5260d4,_0x346ae4],'heightScaled':[_0x4d2742/_0xbf3e96,_0x1a18cd/_0xbf3e96]}};},ecefToGeographicVolumeLocal=(_0x32c0a0,_0x57b551)=>[(_0x32c0a0[0x0]-_0x57b551[_0x124919(0x399)][0x0])/_0x57b551['normalizationMeters'],(_0x32c0a0[0x1]-_0x57b551[_0x124919(0x399)][0x1])/_0x57b551[_0x124919(0x466)],(_0x32c0a0[0x2]-_0x57b551[_0x124919(0x399)][0x2])/_0x57b551['normalizationMeters']],isMissingValue=(_0x5de9a5,_0x551c17)=>Number['isNaN'](_0x5de9a5)||_0x551c17!==void 0x0&&_0x5de9a5===_0x551c17,axisValueToNormalized=(_0x29d32d,_0x5617f1)=>_0x29d32d[_0x124919(0x454)]===_0x29d32d[_0x124919(0x4b2)]?0x0:(_0x5617f1-_0x29d32d[_0x124919(0x454)])/(_0x29d32d[_0x124919(0x4b2)]-_0x29d32d[_0x124919(0x454)]),validateProfile=_0x33f546=>{const _0x57c5aa=_0x124919;if(!_0x33f546['id'])throw Error(_0x57c5aa(0x1eb));if(_0x33f546['path'][_0x57c5aa(0x251)]<0x4||_0x33f546[_0x57c5aa(0x30e)][_0x57c5aa(0x251)]%0x2!=0x0)throw Error(_0x57c5aa(0x41d)+_0x33f546['id']+_0x57c5aa(0x36a));if(_0x33f546[_0x57c5aa(0x3bd)]['length']<0x2)throw Error(_0x57c5aa(0x41d)+_0x33f546['id']+_0x57c5aa(0x3c2));let _0x264011=_0x33f546['path']['length']/0x2;if(_0x33f546[_0x57c5aa(0x421)][_0x57c5aa(0x251)]!==_0x264011*_0x33f546[_0x57c5aa(0x3bd)][_0x57c5aa(0x251)])throw Error(_0x57c5aa(0x41d)+_0x33f546['id']+_0x57c5aa(0x3e8));if(_0x33f546['opacity']!==void 0x0&&(!(_0x33f546[_0x57c5aa(0x3aa)]>=0x0&&_0x33f546[_0x57c5aa(0x3aa)]<=0x1)||!Number[_0x57c5aa(0x2eb)](_0x33f546['opacity'])))throw Error('路线剖面\x20'+_0x33f546['id']+'\x20的\x20opacity\x20必须位于\x200\x20到\x201。');for(let _0xddc4a5 of _0x33f546[_0x57c5aa(0x30e)])if(!Number['isFinite'](_0xddc4a5))throw Error('路线剖面\x20'+_0x33f546['id']+_0x57c5aa(0x24b));for(let _0x41e873 of _0x33f546[_0x57c5aa(0x3bd)])if(!Number[_0x57c5aa(0x2eb)](_0x41e873))throw Error(_0x57c5aa(0x41d)+_0x33f546['id']+_0x57c5aa(0x1ca));return _0x264011;},createPositions=(_0x210ff0,_0x1e0cad,_0x17223b)=>{const _0x153946=_0x124919;let _0x2c6102=new Float32Array(_0x1e0cad*_0x210ff0[_0x153946(0x3bd)]['length']*0x3);for(let _0x24a44b=0x0;_0x24a44b<_0x210ff0[_0x153946(0x3bd)][_0x153946(0x251)];_0x24a44b+=0x1)for(let _0x5c50f3=0x0;_0x5c50f3<_0x1e0cad;_0x5c50f3+=0x1){let _0x1809e4=(_0x24a44b*_0x1e0cad+_0x5c50f3)*0x3;_0x2c6102[_0x1809e4]=axisValueToNormalized(_0x17223b[_0x153946(0x3dd)],_0x210ff0[_0x153946(0x30e)][_0x5c50f3*0x2]),_0x2c6102[_0x1809e4+0x1]=axisValueToNormalized(_0x17223b[_0x153946(0x481)],_0x210ff0['heights'][_0x24a44b]),_0x2c6102[_0x1809e4+0x2]=axisValueToNormalized(_0x17223b[_0x153946(0x446)],_0x210ff0[_0x153946(0x30e)][_0x5c50f3*0x2+0x1]);}return _0x2c6102;},createValues=_0x269f0d=>{const _0x30c39e=_0x124919;let _0x20682b=new Float32Array(_0x269f0d[_0x30c39e(0x421)][_0x30c39e(0x251)]);for(let _0x526508=0x0;_0x526508<_0x269f0d[_0x30c39e(0x421)][_0x30c39e(0x251)];_0x526508+=0x1){let _0x13a065=_0x269f0d[_0x30c39e(0x421)][_0x526508];_0x20682b[_0x526508]=isMissingValue(_0x13a065,_0x269f0d[_0x30c39e(0x2a5)])?NaN:_0x13a065;}return _0x20682b;},createIndices=(_0x1279b3,_0x1ed0fe)=>{let _0x237173=new Uint32Array((_0x1279b3-0x1)*(_0x1ed0fe-0x1)*0x6),_0x5db1fa=0x0;for(let _0x2972f0=0x0;_0x2972f0<_0x1ed0fe-0x1;_0x2972f0+=0x1)for(let _0x5450c6=0x0;_0x5450c6<_0x1279b3-0x1;_0x5450c6+=0x1){let _0x238ea5=_0x2972f0*_0x1279b3+_0x5450c6,_0x52a1bd=_0x238ea5+0x1,_0x2fc69f=_0x238ea5+_0x1279b3,_0x4fed3f=_0x2fc69f+0x1;_0x237173[_0x5db1fa]=_0x238ea5,_0x237173[_0x5db1fa+0x1]=_0x52a1bd,_0x237173[_0x5db1fa+0x2]=_0x2fc69f,_0x237173[_0x5db1fa+0x3]=_0x2fc69f,_0x237173[_0x5db1fa+0x4]=_0x52a1bd,_0x237173[_0x5db1fa+0x5]=_0x4fed3f,_0x5db1fa+=0x6;}return _0x237173;},buildVolumeRouteProfileMesh=(_0x4ba4d5,_0x4d8b2a)=>{const _0x45fa59=_0x124919;let _0x183233=validateProfile(_0x4ba4d5);return{'id':_0x4ba4d5['id'],'positions':createPositions(_0x4ba4d5,_0x183233,_0x4d8b2a),'values':createValues(_0x4ba4d5),'indices':createIndices(_0x183233,_0x4ba4d5[_0x45fa59(0x3bd)][_0x45fa59(0x251)]),'opacity':_0x4ba4d5[_0x45fa59(0x3aa)]??0x1,'depthMode':_0x4ba4d5[_0x45fa59(0x463)]??'scene','revision':_0x4ba4d5[_0x45fa59(0x278)]};};var volumeRaymarch_default=_0x124919(0x37b),sceneMesh_default=_0x124919(0x41c),volumeSlice_default=_0x124919(0x24e);const validateMetadata=_0x477e26=>{const _0x5068eb=_0x124919;if([_0x477e26[_0x5068eb(0x3dd)][_0x5068eb(0x233)],_0x477e26[_0x5068eb(0x481)][_0x5068eb(0x233)],_0x477e26[_0x5068eb(0x446)][_0x5068eb(0x233)],_0x477e26['brickWidth'],_0x477e26['brickHeight'],_0x477e26[_0x5068eb(0x2f5)]]['some'](_0x89f540=>!Number[_0x5068eb(0x220)](_0x89f540)||_0x89f540<=0x0))throw Error('WebGPU\x20volume\x20dimensions\x20must\x20be\x20positive\x20integers.\x20WebGPU\x20体积尺寸必须是正整数。');if(_0x477e26['halo']!==0x1)throw Error(_0x5068eb(0x1e6));},getBrickCount=_0x158b9d=>[Math[_0x124919(0x404)](_0x158b9d['xAxis'][_0x124919(0x233)]/_0x158b9d[_0x124919(0x3e0)]),Math[_0x124919(0x404)](_0x158b9d[_0x124919(0x481)][_0x124919(0x233)]/_0x158b9d[_0x124919(0x25e)]),Math[_0x124919(0x404)](_0x158b9d[_0x124919(0x446)][_0x124919(0x233)]/_0x158b9d['brickDepth'])],getLogicalBrickCoordinate=(_0x252319,_0x3f4ad1)=>{const _0x127c29=_0x124919;let _0x320eff=_0x3f4ad1[0x0]*_0x3f4ad1[0x1],_0x52d73c=Math[_0x127c29(0x4d1)](_0x252319/_0x320eff),_0x519009=_0x252319-_0x52d73c*_0x320eff,_0x49884e=Math[_0x127c29(0x4d1)](_0x519009/_0x3f4ad1[0x0]);return[_0x519009-_0x49884e*_0x3f4ad1[0x0],_0x49884e,_0x52d73c];},analyzeBrickOccupancy=(_0x3ace36,_0x435148,_0x27245f)=>{const _0x41a382=_0x124919;let _0xee8c71=_0x435148['brickWidth']+0x2,_0x2598b6=_0x435148[_0x41a382(0x25e)]+0x2,_0x571f08=getLogicalBrickCoordinate(_0x3ace36['logicalIndex'],_0x27245f),_0x3a4623=Math['min'](_0x435148[_0x41a382(0x3e0)],_0x435148[_0x41a382(0x3dd)][_0x41a382(0x233)]-_0x571f08[0x0]*_0x435148[_0x41a382(0x3e0)]),_0x29c6dd=Math[_0x41a382(0x44f)](_0x435148[_0x41a382(0x25e)],_0x435148['yAxis']['count']-_0x571f08[0x1]*_0x435148[_0x41a382(0x25e)]),_0x2de4b4=Math[_0x41a382(0x44f)](_0x435148['brickDepth'],_0x435148[_0x41a382(0x446)][_0x41a382(0x233)]-_0x571f08[0x2]*_0x435148['brickDepth']);for(let _0x2f439d=0x0;_0x2f439d<_0x2de4b4;_0x2f439d+=0x1)for(let _0x102803=0x0;_0x102803<_0x29c6dd;_0x102803+=0x1){let _0x2df69e=((_0x2f439d+0x1)*_0x2598b6+_0x102803+0x1)*_0xee8c71+0x1;for(let _0x1ae4ca=0x0;_0x1ae4ca<_0x3a4623;_0x1ae4ca+=0x1){let _0x21f255=_0x3ace36[_0x41a382(0x421)][_0x2df69e+_0x1ae4ca];if(_0x21f255===_0x21f255&&(_0x435148[_0x41a382(0x2a5)]===void 0x0||_0x21f255!==_0x435148[_0x41a382(0x2a5)]))return{'occupied':!0x0,'coreSampleCount':_0x3a4623*_0x29c6dd*_0x2de4b4};}}return{'occupied':!0x1,'coreSampleCount':_0x3a4623*_0x29c6dd*_0x2de4b4};},findAtlasLayout=(_0x5dc517,_0xa1c007,_0x332036,_0x45c821,_0xa300b8)=>{const _0x499f94=_0x124919;if(_0x5dc517<=0x0)return null;let _0xec71d1=Math[_0x499f94(0x4d1)](_0xa300b8/_0xa1c007),_0x57c170=Math[_0x499f94(0x4d1)](_0xa300b8/_0x332036),_0x409d62=Math[_0x499f94(0x4d1)](_0xa300b8/_0x45c821),_0x493874=null;for(let _0x211fc1=0x1;_0x211fc1<=_0xec71d1;_0x211fc1+=0x1)for(let _0x562fe0=0x1;_0x562fe0<=_0x57c170;_0x562fe0+=0x1){let _0x451951=Math[_0x499f94(0x44f)](_0x409d62,Math[_0x499f94(0x4d1)](_0x5dc517/(_0x211fc1*_0x562fe0))),_0x1ae9df=_0x211fc1*_0x562fe0*_0x451951;_0x451951<=0x0||_0x1ae9df<=(_0x493874?.['slotCount']??0x0)||(_0x493874={'slotCountX':_0x211fc1,'slotCountY':_0x562fe0,'slotCountZ':_0x451951,'slotCount':_0x1ae9df,'textureCount':0x1,'capacity':_0x1ae9df});}return _0x493874;},getSlotCoordinate=(_0x5e30ca,_0x1fbdd0)=>{const _0x1d7a81=_0x124919;let _0x25e405=_0x1fbdd0[_0x1d7a81(0x4ae)]*_0x1fbdd0[_0x1d7a81(0x33b)],_0x5da367=Math['floor'](_0x5e30ca/_0x25e405),_0x14b57f=_0x5e30ca-_0x5da367*_0x25e405,_0x943327=Math[_0x1d7a81(0x4d1)](_0x14b57f/_0x1fbdd0[_0x1d7a81(0x4ae)]);return[_0x14b57f-_0x943327*_0x1fbdd0['slotCountX'],_0x943327,_0x5da367];},findLeastRecentlyUsed=(_0x170ddd,_0x45c4fe)=>{const _0x4a8151=_0x124919;let _0x5d824c=null;for(let _0x3d1d04 of _0x170ddd)_0x3d1d04[_0x4a8151(0x2ed)]!==_0x45c4fe&&(!_0x5d824c||_0x3d1d04[_0x4a8151(0x2ed)]<_0x5d824c['lastUsedFrame'])&&(_0x5d824c=_0x3d1d04);return _0x5d824c;},createPaddedTextureData=(_0x76ef6c,_0x49571b,_0x35954c,_0x8088cd)=>{const _0x3a358f=_0x124919;let _0x268bf8=_0x49571b*Float32Array[_0x3a358f(0x23b)],_0x5734e2=Math['ceil'](_0x268bf8/0x100)*0x100;if(_0x268bf8===_0x5734e2)return{'values':_0x76ef6c,'bytesPerRow':_0x5734e2};let _0x4f5b37=_0x5734e2/Float32Array[_0x3a358f(0x23b)],_0x267f3d=new Float32Array(_0x4f5b37*_0x35954c*_0x8088cd);for(let _0x2447f4=0x0;_0x2447f4<_0x8088cd;_0x2447f4+=0x1)for(let _0x4b0dba=0x0;_0x4b0dba<_0x35954c;_0x4b0dba+=0x1){let _0xa21fb2=(_0x2447f4*_0x35954c+_0x4b0dba)*_0x49571b,_0x476ede=(_0x2447f4*_0x35954c+_0x4b0dba)*_0x4f5b37;_0x267f3d[_0x3a358f(0x49e)](_0x76ef6c[_0x3a358f(0x495)](_0xa21fb2,_0xa21fb2+_0x49571b),_0x476ede);}return{'values':_0x267f3d,'bytesPerRow':_0x5734e2};};var WebgpuBrickAtlas=class{[_0x124919(0x4cc)];['memoryTargetBytes'];[_0x124919(0x3ee)];[_0x124919(0x413)]=null;[_0x124919(0x40f)]=null;[_0x124919(0x2c1)]=[];[_0x124919(0x3df)]=[];[_0x124919(0x2b2)]=null;['pageTableValues']=new Uint32Array();[_0x124919(0x1d1)]=new Map();[_0x124919(0x282)]=new Map();[_0x124919(0x3b6)]=0x0;constructor(_0xa634be,_0x2010e2=0x20000000,_0x2db6bc=_0x2010e2){const _0x182e95=_0x124919;if(!Number[_0x182e95(0x2eb)](_0x2010e2)||!Number['isFinite'](_0x2db6bc)||_0x2010e2<=0x0||_0x2db6bc<=0x0)throw Error(_0x182e95(0x405));this[_0x182e95(0x4cc)]=_0xa634be,this[_0x182e95(0x3b2)]=Math[_0x182e95(0x44f)](_0x2010e2,_0x2db6bc),this[_0x182e95(0x3ee)]=_0x2db6bc;}get[_0x124919(0x264)](){const _0x40e3a4=_0x124919;if(!this['metadata'])throw Error(_0x40e3a4(0x460));return this[_0x40e3a4(0x413)];}get[_0x124919(0x2a7)](){const _0x9dbf32=_0x124919;if(!this[_0x9dbf32(0x40f)])throw Error(_0x9dbf32(0x369));return this[_0x9dbf32(0x40f)];}get[_0x124919(0x1e5)](){const _0x21ce5d=_0x124919;return this[_0x21ce5d(0x1d1)][_0x21ce5d(0x4b8)];}get['statistics'](){const _0x5ae904=_0x124919;if(!this[_0x5ae904(0x413)]||!this[_0x5ae904(0x40f)])return{'logicalBrickCount':0x0,'atlasCapacity':0x0,'gpuBytes':0x0,'memoryLimitBytes':this[_0x5ae904(0x3ee)],'budgetLimited':!0x1,'skippedSamples':0x0,'skippedCells':0x0};let _0x21cb6a=getBrickCount(this['metadata']),_0x23ee4d=_0x21cb6a[0x0]*_0x21cb6a[0x1]*_0x21cb6a[0x2],_0x55b02c=this['metadata'][_0x5ae904(0x3e0)]+0x2,_0x358294=this[_0x5ae904(0x413)][_0x5ae904(0x25e)]+0x2,_0x4528aa=this[_0x5ae904(0x413)]['brickDepth']+0x2,_0x3f4922=_0x55b02c*_0x358294*_0x4528aa*this[_0x5ae904(0x40f)]['capacity']*Float32Array[_0x5ae904(0x23b)],_0x217079=_0x23ee4d*0x4*Uint32Array[_0x5ae904(0x23b)],_0x542dbd=0x0,_0x43a692=0x0;for(let _0x35e3a8 of this[_0x5ae904(0x1d1)][_0x5ae904(0x421)]())_0x35e3a8[_0x5ae904(0x1c1)]||(_0x43a692+=0x1,_0x542dbd+=_0x35e3a8[_0x5ae904(0x20a)]);return{'logicalBrickCount':_0x23ee4d,'atlasCapacity':this['layout']['capacity'],'gpuBytes':_0x3f4922+_0x217079,'memoryLimitBytes':this[_0x5ae904(0x3ee)],'budgetLimited':this[_0x5ae904(0x40f)]['capacity']<_0x23ee4d,'skippedSamples':_0x542dbd,'skippedCells':_0x43a692};}[_0x124919(0x2e4)](_0x2fa36a){const _0x42bbba=_0x124919;validateMetadata(_0x2fa36a);let _0x54b4bd=_0x2fa36a[_0x42bbba(0x3e0)]+0x2,_0x155b26=_0x2fa36a[_0x42bbba(0x25e)]+0x2,_0x2a3802=_0x2fa36a[_0x42bbba(0x2f5)]+0x2,_0x30c0f7=getBrickCount(_0x2fa36a),_0x34e6af=_0x30c0f7[0x0]*_0x30c0f7[0x1]*_0x30c0f7[0x2],_0x273966=_0x34e6af*0x4*Uint32Array['BYTES_PER_ELEMENT'],_0x42fa81=Math[_0x42bbba(0x44f)](this[_0x42bbba(0x3b2)],this[_0x42bbba(0x3ee)])-_0x273966;if(_0x42fa81<=0x0)throw Error(_0x42bbba(0x440));let _0x475fc4=_0x54b4bd*_0x155b26*_0x2a3802*Float32Array[_0x42bbba(0x23b)],_0x88ce5=Math[_0x42bbba(0x44f)](_0x34e6af,Math[_0x42bbba(0x4d1)](_0x42fa81/_0x475fc4)),_0x38dd40=Math[_0x42bbba(0x207)](0x1,Math[_0x42bbba(0x4d1)](0x4000000/_0x475fc4)),_0x2193d4=Math[_0x42bbba(0x44f)](0x8,Math['max'](0x1,Math[_0x42bbba(0x404)](_0x88ce5/_0x38dd40))),_0x328646=findAtlasLayout(Math[_0x42bbba(0x207)](0x1,Math[_0x42bbba(0x4d1)](_0x88ce5/_0x2193d4)),_0x54b4bd,_0x155b26,_0x2a3802,this[_0x42bbba(0x4cc)][_0x42bbba(0x467)][_0x42bbba(0x3c0)]);if(!_0x328646)throw Error(_0x42bbba(0x3a9));let _0x3229d0={..._0x328646,'textureCount':_0x2193d4,'capacity':_0x328646[_0x42bbba(0x283)]*_0x2193d4},_0xf2df1c=_0x54b4bd*_0x3229d0[_0x42bbba(0x4ae)],_0x1caa0e=_0x155b26*_0x3229d0['slotCountY'],_0x2c8572=_0x2a3802*_0x3229d0['slotCountZ'],_0x5229c0=Array[_0x42bbba(0x214)]({'length':_0x2193d4},(_0x51bcb1,_0x42c3d6)=>this['device']['createTexture']({'label':'volume\x20brick\x20atlas\x20'+_0x42c3d6,'size':[_0xf2df1c,_0x1caa0e,_0x2c8572],'dimension':'3d','format':_0x42bbba(0x46f),'usage':GPUTextureUsage[_0x42bbba(0x27b)]|GPUTextureUsage['COPY_DST']|GPUTextureUsage[_0x42bbba(0x3d1)]})),_0x2f0351=this[_0x42bbba(0x4cc)][_0x42bbba(0x480)]({'label':'volume\x20brick\x20page\x20table','size':Math['max'](0x10,_0x273966),'usage':GPUBufferUsage[_0x42bbba(0x217)]|GPUBufferUsage['COPY_DST']});this[_0x42bbba(0x38d)](),this[_0x42bbba(0x413)]={..._0x2fa36a},this[_0x42bbba(0x40f)]=_0x3229d0,this['atlasTextures']=_0x5229c0,this[_0x42bbba(0x3df)]=_0x5229c0['map'](_0x1dd3cd=>_0x1dd3cd[_0x42bbba(0x1d0)]({'dimension':'3d'})),this[_0x42bbba(0x2b2)]=_0x2f0351,this[_0x42bbba(0x475)]=new Uint32Array(_0x34e6af*0x4),this['device'][_0x42bbba(0x290)][_0x42bbba(0x469)](_0x2f0351,0x0,this[_0x42bbba(0x475)]);for(let _0x1fbc16 of _0x5229c0)this[_0x42bbba(0x397)](_0x1fbc16,_0xf2df1c,_0x1caa0e,_0x2c8572);this[_0x42bbba(0x3b6)]+=0x1;}[_0x124919(0x26f)](_0x202ca6,_0x1dd3fb){const _0x1b0f0b=_0x124919;let _0x3dff80=this['volumeMetadata'],_0x440407=this[_0x1b0f0b(0x2a7)],_0x4f150f=getBrickCount(_0x3dff80),_0x53419e=_0x4f150f[0x0]*_0x4f150f[0x1]*_0x4f150f[0x2];if(!Number[_0x1b0f0b(0x220)](_0x202ca6[_0x1b0f0b(0x24c)])||_0x202ca6[_0x1b0f0b(0x24c)]<0x0||_0x202ca6[_0x1b0f0b(0x24c)]>=_0x53419e)throw Error(_0x1b0f0b(0x329)+_0x202ca6[_0x1b0f0b(0x24c)]+_0x1b0f0b(0x2c6));let _0x5ae160=_0x3dff80[_0x1b0f0b(0x3e0)]+0x2,_0x92ccd7=_0x3dff80[_0x1b0f0b(0x25e)]+0x2,_0x122af9=_0x3dff80[_0x1b0f0b(0x2f5)]+0x2,_0x88ee04=_0x5ae160*_0x92ccd7*_0x122af9;if(_0x202ca6[_0x1b0f0b(0x421)]['length']!==_0x88ee04)throw Error('Volume\x20brick\x20'+_0x202ca6[_0x1b0f0b(0x24c)]+_0x1b0f0b(0x425)+_0x88ee04+_0x1b0f0b(0x2db)+_0x202ca6['values'][_0x1b0f0b(0x251)]+'.\x20体积砖块数据长度不正确。');let _0x22c558=this['residentByLogicalIndex']['get'](_0x202ca6[_0x1b0f0b(0x24c)])??this['acquireSlot'](_0x202ca6[_0x1b0f0b(0x24c)],_0x1dd3fb),_0x531756=analyzeBrickOccupancy(_0x202ca6,_0x3dff80,_0x4f150f),_0x3c6afb=Math['floor'](_0x22c558[_0x1b0f0b(0x22f)]/_0x440407['slotCount']),_0x5506d0=getSlotCoordinate(_0x22c558[_0x1b0f0b(0x22f)]%_0x440407[_0x1b0f0b(0x283)],_0x440407),_0x106d63=createPaddedTextureData(new Float32Array(_0x202ca6[_0x1b0f0b(0x421)]),_0x5ae160,_0x92ccd7,_0x122af9);return _0x22c558['lastUsedFrame']=_0x1dd3fb,_0x22c558[_0x1b0f0b(0x3b6)]=this['generation'],_0x22c558[_0x1b0f0b(0x1c1)]=_0x531756['occupied'],_0x22c558[_0x1b0f0b(0x20a)]=_0x531756[_0x1b0f0b(0x4d2)],this['writePageEntry'](_0x22c558),{'values':_0x106d63[_0x1b0f0b(0x421)],'bytesPerRow':_0x106d63['bytesPerRow'],'rowsPerImage':_0x92ccd7,'origin':{'x':_0x5506d0[0x0]*_0x5ae160,'y':_0x5506d0[0x1]*_0x92ccd7,'z':_0x5506d0[0x2]*_0x122af9},'extent':[_0x5ae160,_0x92ccd7,_0x122af9],'atlasIndex':_0x3c6afb};}['encodePreparedBrickUpload'](_0xe1f5ac,_0x21915e,_0x3bb94e,_0x58347d){const _0x39c8ce=_0x124919;_0xe1f5ac[_0x39c8ce(0x26a)]({'buffer':_0x21915e,'offset':_0x3bb94e,'bytesPerRow':_0x58347d[_0x39c8ce(0x388)],'rowsPerImage':_0x58347d[_0x39c8ce(0x48a)]},{'texture':this[_0x39c8ce(0x406)](_0x58347d[_0x39c8ce(0x242)]),'origin':_0x58347d[_0x39c8ce(0x333)]},_0x58347d['extent']);}[_0x124919(0x272)](_0x21cfba,_0x33ab5d){const _0x498f78=_0x124919;for(let _0x3e27ad of _0x21cfba){let _0x9a7e7d=this[_0x498f78(0x1d1)][_0x498f78(0x4ab)](_0x3e27ad);_0x9a7e7d&&(_0x9a7e7d['lastUsedFrame']=_0x33ab5d);}}[_0x124919(0x2cc)](_0x5c89b8,_0x652214){const _0x19b7e1=_0x124919;if(this['atlasViews'][_0x19b7e1(0x251)]===0x0||!this[_0x19b7e1(0x2b2)])throw Error('WebGPU\x20volume\x20atlas\x20resources\x20are\x20incomplete.\x20WebGPU\x20体积图集资源不完整。');return this[_0x19b7e1(0x4cc)][_0x19b7e1(0x2cc)]({'label':_0x19b7e1(0x2e3),'layout':_0x5c89b8,'entries':[...Array['from']({'length':0x8},(_0xe15de,_0x466681)=>({'binding':_0x466681,'resource':this[_0x19b7e1(0x3df)][_0x466681]??this[_0x19b7e1(0x3df)][0x0]})),{'binding':0x8,'resource':{'buffer':this[_0x19b7e1(0x2b2)]}},{'binding':0x9,'resource':{'buffer':_0x652214}}]});}['destroy'](){const _0x4659fa=_0x124919;this['destroyResources'](),this['metadata']=null,this[_0x4659fa(0x40f)]=null,this['pageTableValues']=new Uint32Array();}['acquireSlot'](_0x381075,_0x206e24){const _0x53c2a5=_0x124919;let _0x1d541a=this['atlasLayout'],_0x360f2c=this['residentBySlotIndex']['size'];if(_0x360f2c>=_0x1d541a['capacity']){let _0x3ac2e8=findLeastRecentlyUsed(this[_0x53c2a5(0x282)][_0x53c2a5(0x421)](),_0x206e24);if(!_0x3ac2e8)throw Error(_0x53c2a5(0x479));_0x360f2c=_0x3ac2e8[_0x53c2a5(0x22f)],this[_0x53c2a5(0x33c)](_0x3ac2e8[_0x53c2a5(0x24c)]),this['residentByLogicalIndex'][_0x53c2a5(0x371)](_0x3ac2e8['logicalIndex']),this[_0x53c2a5(0x282)]['delete'](_0x360f2c);}let _0x3c2e55={'logicalIndex':_0x381075,'slotIndex':_0x360f2c,'lastUsedFrame':_0x206e24,'generation':this[_0x53c2a5(0x3b6)],'occupied':!0x1,'skippedSampleCount':0x0};return this['residentByLogicalIndex']['set'](_0x381075,_0x3c2e55),this[_0x53c2a5(0x282)][_0x53c2a5(0x49e)](_0x360f2c,_0x3c2e55),_0x3c2e55;}[_0x124919(0x248)](_0x280505){const _0x5a3ed5=_0x124919;let _0x441ce3=_0x280505[_0x5a3ed5(0x24c)]*0x4;this[_0x5a3ed5(0x475)][_0x441ce3]=_0x280505[_0x5a3ed5(0x22f)]%this[_0x5a3ed5(0x2a7)][_0x5a3ed5(0x283)]+0x1,this['pageTableValues'][_0x441ce3+0x1]=_0x280505[_0x5a3ed5(0x3b6)],this[_0x5a3ed5(0x475)][_0x441ce3+0x2]=+!!_0x280505[_0x5a3ed5(0x1c1)],this[_0x5a3ed5(0x475)][_0x441ce3+0x3]=Math[_0x5a3ed5(0x4d1)](_0x280505[_0x5a3ed5(0x22f)]/this[_0x5a3ed5(0x2a7)][_0x5a3ed5(0x283)]),this['device']['queue'][_0x5a3ed5(0x469)](this[_0x5a3ed5(0x4d0)](),_0x441ce3*Uint32Array[_0x5a3ed5(0x23b)],this[_0x5a3ed5(0x475)],_0x441ce3,0x4);}['clearPageEntry'](_0x3ce085){const _0x265961=_0x124919;let _0x1ee9d3=_0x3ce085*0x4;this[_0x265961(0x475)][_0x265961(0x25b)](0x0,_0x1ee9d3,_0x1ee9d3+0x4),this[_0x265961(0x4cc)][_0x265961(0x290)][_0x265961(0x469)](this[_0x265961(0x4d0)](),_0x1ee9d3*Uint32Array[_0x265961(0x23b)],this['pageTableValues'],_0x1ee9d3,0x4);}[_0x124919(0x406)](_0x2b62f7){const _0x36acec=_0x124919;let _0x13fcbc=this['atlasTextures'][_0x2b62f7];if(!_0x13fcbc)throw Error(_0x36acec(0x268));return _0x13fcbc;}[_0x124919(0x397)](_0x9a337e,_0x555fb1,_0xb2f652,_0x3d97e8){const _0x2620bb=_0x124919;let _0x455b51=this[_0x2620bb(0x4cc)][_0x2620bb(0x340)]({'label':_0x2620bb(0x1f9),'code':_0x2620bb(0x310)}),_0x3c9cb5=this['device'][_0x2620bb(0x4a3)]({'label':_0x2620bb(0x22d),'layout':_0x2620bb(0x250),'compute':{'module':_0x455b51,'entryPoint':_0x2620bb(0x307)}}),_0x5aea98=this[_0x2620bb(0x4cc)][_0x2620bb(0x2cc)]({'label':'volume\x20atlas\x20clear\x20bind\x20group','layout':_0x3c9cb5[_0x2620bb(0x37c)](0x0),'entries':[{'binding':0x0,'resource':_0x9a337e[_0x2620bb(0x1d0)]({'dimension':'3d'})}]}),_0x13a1cd=this[_0x2620bb(0x4cc)]['createCommandEncoder']({'label':_0x2620bb(0x45e)}),_0xbec99d=_0x13a1cd[_0x2620bb(0x351)]({'label':_0x2620bb(0x26c)});_0xbec99d[_0x2620bb(0x414)](_0x3c9cb5),_0xbec99d[_0x2620bb(0x22c)](0x0,_0x5aea98),_0xbec99d['dispatchWorkgroups'](Math[_0x2620bb(0x404)](_0x555fb1/0x4),Math['ceil'](_0xb2f652/0x4),Math[_0x2620bb(0x404)](_0x3d97e8/0x4)),_0xbec99d['end'](),this[_0x2620bb(0x4cc)]['queue'][_0x2620bb(0x4b0)]([_0x13a1cd['finish']()]);}[_0x124919(0x4d0)](){const _0x1d5606=_0x124919;if(!this[_0x1d5606(0x2b2)])throw Error(_0x1d5606(0x3d4));return this[_0x1d5606(0x2b2)];}['destroyResources'](){const _0x374d58=_0x124919;for(let _0x2d4dfc of this[_0x374d58(0x2c1)])_0x2d4dfc[_0x374d58(0x48c)]();this[_0x374d58(0x2b2)]?.['destroy'](),this[_0x374d58(0x2c1)]=[],this[_0x374d58(0x3df)]=[],this[_0x374d58(0x2b2)]=null,this[_0x374d58(0x1d1)][_0x374d58(0x320)](),this[_0x374d58(0x282)][_0x374d58(0x320)]();}},WebgpuSceneAttachments=class{[_0x124919(0x4cc)];[_0x124919(0x44e)]=null;[_0x124919(0x252)]=null;[_0x124919(0x2ce)]=0x0;['height']=0x0;constructor(_0x1ffbfb){const _0xa7623d=_0x124919;this[_0xa7623d(0x4cc)]=_0x1ffbfb;}get[_0x124919(0x45d)](){const _0xa19adf=_0x124919;if(!this['depthView'])throw Error(_0xa19adf(0x3ef));return this[_0xa19adf(0x252)];}[_0x124919(0x3d6)](_0x4cdd8c,_0x1929ec){const _0x570193=_0x124919;if(this[_0x570193(0x2ce)]===_0x4cdd8c&&this[_0x570193(0x4a1)]===_0x1929ec)return;let _0x10edcd=this[_0x570193(0x4cc)][_0x570193(0x2aa)]({'label':_0x570193(0x2a4),'size':[_0x4cdd8c,_0x1929ec],'format':_0x570193(0x28c),'usage':GPUTextureUsage[_0x570193(0x311)]|GPUTextureUsage['TEXTURE_BINDING']}),_0x161bc5=this['depthTexture'];this['depthTexture']=_0x10edcd,this[_0x570193(0x252)]=_0x10edcd[_0x570193(0x1d0)](),this[_0x570193(0x2ce)]=_0x4cdd8c,this['height']=_0x1929ec,_0x161bc5?.[_0x570193(0x48c)]();}[_0x124919(0x48c)](){const _0x575472=_0x124919;this[_0x575472(0x44e)]?.['destroy'](),this[_0x575472(0x44e)]=null,this['depthView']=null,this[_0x575472(0x2ce)]=0x0,this[_0x575472(0x4a1)]=0x0;}},WebgpuSceneMeshResources=class{[_0x124919(0x4cc)];[_0x124919(0x4c8)]=[];constructor(_0x260709){const _0x36de94=_0x124919;this[_0x36de94(0x4cc)]=_0x260709;}get[_0x124919(0x233)](){const _0x52991f=_0x124919;return this[_0x52991f(0x4c8)][_0x52991f(0x251)];}['replace'](_0x2cf19){const _0x20f98c=_0x124919;let _0x56b33d=[];try{for(let _0x1ff487 of _0x2cf19)_0x56b33d['push'](this[_0x20f98c(0x269)](_0x1ff487));}catch(_0x45f2bd){for(let _0xb2d4d5 of _0x56b33d)_0xb2d4d5[_0x20f98c(0x249)][_0x20f98c(0x48c)]();throw _0x45f2bd;}this['destroyResources'](),this['resources']=_0x56b33d;}[_0x124919(0x3d5)](_0x2d3d92,_0x1adb1a,_0x22d053){const _0x366f9b=_0x124919;for(let _0x222a26 of this[_0x366f9b(0x4c8)])_0x222a26['topology']!==_0x1adb1a||_0x222a26['depthMode']!==_0x22d053||(_0x2d3d92[_0x366f9b(0x453)](0x0,_0x222a26[_0x366f9b(0x249)]),_0x2d3d92['draw'](_0x222a26[_0x366f9b(0x1f0)]));}[_0x124919(0x48c)](){this['destroyResources']();}[_0x124919(0x269)](_0x43d492){const _0x4a232b=_0x124919;if(_0x43d492[_0x4a232b(0x429)]['length']===0x0||_0x43d492[_0x4a232b(0x429)][_0x4a232b(0x251)]%0x7!=0x0)throw Error('Scene\x20mesh\x20'+_0x43d492['id']+'\x20must\x20contain\x20position\x20and\x20RGBA\x20values\x20for\x20every\x20vertex.\x20场景网格顶点必须包含位置和\x20RGBA。');let _0x355a9c=new Float32Array(_0x43d492[_0x4a232b(0x429)]),_0x16d8b8=this[_0x4a232b(0x4cc)]['createBuffer']({'label':'volume\x20scene\x20mesh\x20'+_0x43d492['id'],'size':_0x355a9c['byteLength'],'usage':GPUBufferUsage[_0x4a232b(0x2c4)]|GPUBufferUsage[_0x4a232b(0x332)]});return this['device'][_0x4a232b(0x290)]['writeBuffer'](_0x16d8b8,0x0,_0x355a9c),{'id':_0x43d492['id'],'topology':_0x43d492[_0x4a232b(0x4ad)],'depthMode':_0x43d492[_0x4a232b(0x463)],'buffer':_0x16d8b8,'vertexCount':_0x43d492['vertices'][_0x4a232b(0x251)]/0x7};}[_0x124919(0x38d)](){const _0x1a5b33=_0x124919;for(let _0x211baf of this[_0x1a5b33(0x4c8)])_0x211baf['buffer'][_0x1a5b33(0x48c)]();this[_0x1a5b33(0x4c8)]=[];}},WebgpuSliceResources=class{['device'];[_0x124919(0x40f)];[_0x124919(0x4c8)]=[];[_0x124919(0x2b0)]=0x0;[_0x124919(0x43c)]=0x0;constructor(_0x3fead9,_0xe87ee3){const _0x2704b6=_0x124919;this['device']=_0x3fead9,this[_0x2704b6(0x40f)]=_0xe87ee3;}get[_0x124919(0x233)](){const _0x14a05=_0x124919;return this[_0x14a05(0x4c8)]['length'];}get[_0x124919(0x3d2)](){const _0xc01f6d=_0x124919;return{'uniformUpdateCount':this[_0xc01f6d(0x2b0)],'resourceRebuildCount':this[_0xc01f6d(0x43c)]};}['replace'](_0x4cd990){const _0x81ebde=_0x124919;let _0x169484=new Map(this[_0x81ebde(0x4c8)][_0x81ebde(0x254)](_0x2bec72=>[_0x2bec72['id'],_0x2bec72])),_0x14f44b=[],_0x9c2be=new Set();try{for(let _0x1a26b3 of _0x4cd990){if(!_0x1a26b3[_0x81ebde(0x341)])continue;if(_0x9c2be[_0x81ebde(0x40d)](_0x1a26b3['id']))throw Error(_0x81ebde(0x2be)+_0x1a26b3['id']+_0x81ebde(0x2a3));_0x9c2be[_0x81ebde(0x1db)](_0x1a26b3['id']);let _0x2c7739=this[_0x81ebde(0x338)](_0x1a26b3),_0x23e901=_0x169484[_0x81ebde(0x4ab)](_0x1a26b3['id']);if(!_0x23e901){_0x14f44b[_0x81ebde(0x4bd)](this[_0x81ebde(0x269)](_0x1a26b3,_0x2c7739));continue;}_0x169484[_0x81ebde(0x371)](_0x1a26b3['id']),_0x23e901['depthMode']=_0x1a26b3['depthMode'],this[_0x81ebde(0x285)](_0x23e901[_0x81ebde(0x421)],_0x2c7739)||(this['device']['queue'][_0x81ebde(0x469)](_0x23e901[_0x81ebde(0x249)],0x0,_0x2c7739),_0x23e901[_0x81ebde(0x421)]=_0x2c7739,this[_0x81ebde(0x2b0)]+=0x1),_0x14f44b[_0x81ebde(0x4bd)](_0x23e901);}}catch(_0x56bedb){for(let _0x54fdde of _0x14f44b)this[_0x81ebde(0x4c8)][_0x81ebde(0x4b5)](_0x54fdde)||_0x54fdde[_0x81ebde(0x249)][_0x81ebde(0x48c)]();throw _0x56bedb;}for(let _0x334501 of _0x169484[_0x81ebde(0x421)]())_0x334501[_0x81ebde(0x249)][_0x81ebde(0x48c)]();this[_0x81ebde(0x4c8)]=_0x14f44b;}[_0x124919(0x3d5)](_0xc1f0d2,_0x12db0c,_0x2377f3){const _0x33d300=_0x124919;_0xc1f0d2[_0x33d300(0x414)](_0x12db0c);for(let _0xcb2ca9 of this[_0x33d300(0x4c8)])_0xcb2ca9['depthMode']===_0x2377f3&&(_0xc1f0d2[_0x33d300(0x22c)](0x3,_0xcb2ca9[_0x33d300(0x4c6)]),_0xc1f0d2[_0x33d300(0x3d5)](0x1800));}['destroy'](){this['destroyResources']();}[_0x124919(0x338)](_0xc4e5a2){const _0x207523=_0x124919;if(!Number[_0x207523(0x2eb)](_0xc4e5a2[_0x207523(0x34d)])||_0xc4e5a2[_0x207523(0x34d)]<0x0||_0xc4e5a2[_0x207523(0x34d)]>0x1)throw Error('Volume\x20slice\x20'+_0xc4e5a2['id']+_0x207523(0x4b4));let _0x356afa=_0xc4e5a2[_0x207523(0x247)]==='x'?0x0:_0xc4e5a2['axis']==='y'?0x1:0x2,_0x42aecc=_0xc4e5a2[_0x207523(0x3fb)]??[0x0,0x0,0x0,0x0];if(_0x42aecc['some'](_0x261ad8=>!Number[_0x207523(0x2eb)](_0x261ad8)||_0x261ad8<0x0||_0x261ad8>0x1))throw Error(_0x207523(0x1cf)+_0xc4e5a2['id']+'\x20plate\x20color\x20must\x20use\x20values\x20from\x20zero\x20through\x20one.\x20体积切面底板颜色必须位于零至一。');return new Float32Array([_0x356afa,_0xc4e5a2[_0x207523(0x34d)],_0xc4e5a2[_0x207523(0x3aa)]??0x1,0x0,..._0x42aecc]);}['createResource'](_0x25f563,_0x3dae52){const _0x3a36d5=_0x124919;let _0x403bcb=this[_0x3a36d5(0x4cc)][_0x3a36d5(0x480)]({'label':_0x3a36d5(0x3f9)+_0x25f563['id'],'size':0x20,'usage':GPUBufferUsage[_0x3a36d5(0x1fe)]|GPUBufferUsage[_0x3a36d5(0x332)]});this['device']['queue']['writeBuffer'](_0x403bcb,0x0,_0x3dae52);let _0x3690cd=this['device'][_0x3a36d5(0x2cc)]({'layout':this[_0x3a36d5(0x40f)],'entries':[{'binding':0x0,'resource':{'buffer':_0x403bcb}}]});return this['resourceRebuildCount']+=0x1,{'id':_0x25f563['id'],'depthMode':_0x25f563[_0x3a36d5(0x463)],'buffer':_0x403bcb,'bindGroup':_0x3690cd,'values':_0x3dae52};}[_0x124919(0x285)](_0x56c14c,_0x368622){const _0x30503d=_0x124919;for(let _0x4ae898=0x0;_0x4ae898<_0x56c14c[_0x30503d(0x251)];_0x4ae898+=0x1)if(_0x56c14c[_0x4ae898]!==_0x368622[_0x4ae898])return!0x1;return!0x0;}[_0x124919(0x38d)](){const _0x2323fb=_0x124919;for(let _0x4e7733 of this[_0x2323fb(0x4c8)])_0x4e7733[_0x2323fb(0x249)][_0x2323fb(0x48c)]();this['resources']=[];}};const createStorageBuffer=(_0x4d7b19,_0x325c70,_0x4595a9)=>{const _0x35e9dc=_0x124919;let _0x58148f=_0x4d7b19[_0x35e9dc(0x480)]({'label':_0x4595a9,'size':Math[_0x35e9dc(0x207)](0x4,_0x325c70['byteLength']),'usage':GPUBufferUsage['STORAGE']|GPUBufferUsage[_0x35e9dc(0x332)]});return _0x325c70[_0x35e9dc(0x380)]>0x0&&_0x4d7b19[_0x35e9dc(0x290)][_0x35e9dc(0x469)](_0x58148f,0x0,_0x325c70),_0x58148f;},validateStops$1=(_0x2c4f5a,_0xabd00b)=>{const _0x39c2be=_0x124919;if(_0x2c4f5a[_0x39c2be(0x251)]===0x0||_0xabd00b[_0x39c2be(0x251)]===0x0)throw Error('Volume\x20color\x20and\x20opacity\x20stops\x20cannot\x20be\x20empty.\x20体积颜色和透明度色标不能为空。');for(let _0x48524e=0x1;_0x48524e<_0x2c4f5a['length'];_0x48524e+=0x1)if(_0x2c4f5a[_0x48524e][_0x39c2be(0x36c)]<_0x2c4f5a[_0x48524e-0x1]['value'])throw Error('Volume\x20color\x20stops\x20must\x20be\x20sorted\x20by\x20value.\x20体积颜色色标必须按数值升序排列。');for(let _0x332e57=0x0;_0x332e57<_0xabd00b[_0x39c2be(0x251)];_0x332e57+=0x1){if(_0xabd00b[_0x332e57][_0x39c2be(0x3aa)]<0x0||_0xabd00b[_0x332e57][_0x39c2be(0x3aa)]>0x1)throw Error('Volume\x20opacity\x20stops\x20must\x20be\x20between\x20zero\x20and\x20one.\x20体积透明度色标必须位于零到一之间。');if(_0x332e57>0x0&&_0xabd00b[_0x332e57]['value']<_0xabd00b[_0x332e57-0x1][_0x39c2be(0x36c)])throw Error(_0x39c2be(0x42c));}};var WebgpuTransferResources=class{[_0x124919(0x4cc)];[_0x124919(0x49b)]=null;[_0x124919(0x313)]=null;[_0x124919(0x483)]=null;['opacityBuffer']=null;[_0x124919(0x297)]=0x0;[_0x124919(0x44d)]=0x0;constructor(_0xc07ea6){const _0x2c7ca8=_0x124919;this[_0x2c7ca8(0x4cc)]=_0xc07ea6;}get[_0x124919(0x204)](){const _0x3f5171=_0x124919;return[this[_0x3f5171(0x297)],this[_0x3f5171(0x44d)]];}[_0x124919(0x216)](_0x445224,_0x5d7832){const _0x327879=_0x124919;validateStops$1(_0x445224,_0x5d7832);let _0x2a7c0f=new Float32Array(_0x445224[_0x327879(0x251)]),_0x4c5d69=new Float32Array(_0x445224['length']*0x4),_0x3b9c93=new Float32Array(_0x5d7832[_0x327879(0x251)]),_0x73a1fc=new Float32Array(_0x5d7832['length']);for(let _0x31c1c5=0x0;_0x31c1c5<_0x445224['length'];_0x31c1c5+=0x1)_0x2a7c0f[_0x31c1c5]=_0x445224[_0x31c1c5]['value'],_0x4c5d69['set'](_0x445224[_0x31c1c5][_0x327879(0x2c3)],_0x31c1c5*0x4);for(let _0x2a223a=0x0;_0x2a223a<_0x5d7832[_0x327879(0x251)];_0x2a223a+=0x1)_0x3b9c93[_0x2a223a]=_0x5d7832[_0x2a223a]['value'],_0x73a1fc[_0x2a223a]=_0x5d7832[_0x2a223a]['opacity'];let _0xef4381=[createStorageBuffer(this[_0x327879(0x4cc)],_0x2a7c0f,_0x327879(0x2ee)),createStorageBuffer(this[_0x327879(0x4cc)],_0x4c5d69,_0x327879(0x3bb)),createStorageBuffer(this[_0x327879(0x4cc)],_0x3b9c93,_0x327879(0x27f)),createStorageBuffer(this[_0x327879(0x4cc)],_0x73a1fc,'volume\x20opacity\x20stop\x20alphas')];this[_0x327879(0x3c6)](),this['colorValuesBuffer']=_0xef4381[0x0],this[_0x327879(0x313)]=_0xef4381[0x1],this[_0x327879(0x483)]=_0xef4381[0x2],this[_0x327879(0x2b4)]=_0xef4381[0x3],this[_0x327879(0x297)]=_0x445224[_0x327879(0x251)],this['opacityStopCount']=_0x5d7832[_0x327879(0x251)];}[_0x124919(0x2cc)](_0x119870){const _0x4139c1=_0x124919;if(!this[_0x4139c1(0x49b)]||!this[_0x4139c1(0x313)]||!this[_0x4139c1(0x483)]||!this['opacityBuffer'])throw Error(_0x4139c1(0x32b));return this[_0x4139c1(0x4cc)][_0x4139c1(0x2cc)]({'label':'volume\x20transfer\x20bind\x20group','layout':_0x119870,'entries':[{'binding':0x0,'resource':{'buffer':this[_0x4139c1(0x49b)]}},{'binding':0x1,'resource':{'buffer':this[_0x4139c1(0x313)]}},{'binding':0x2,'resource':{'buffer':this[_0x4139c1(0x483)]}},{'binding':0x3,'resource':{'buffer':this[_0x4139c1(0x2b4)]}}]});}[_0x124919(0x48c)](){const _0x2c1f73=_0x124919;this[_0x2c1f73(0x3c6)](),this[_0x2c1f73(0x297)]=0x0,this[_0x2c1f73(0x44d)]=0x0;}['destroyBuffers'](){const _0xd0a00b=_0x124919;this[_0xd0a00b(0x49b)]?.[_0xd0a00b(0x48c)](),this[_0xd0a00b(0x313)]?.['destroy'](),this['opacityValuesBuffer']?.[_0xd0a00b(0x48c)](),this[_0xd0a00b(0x2b4)]?.['destroy'](),this[_0xd0a00b(0x49b)]=null,this[_0xd0a00b(0x313)]=null,this[_0xd0a00b(0x483)]=null,this[_0xd0a00b(0x2b4)]=null;}};const DEFAULT_MEMORY_TARGET_BYTES=0x200*0x400*0x400,IDENTITY_MATRIX$1=[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':_0x124919(0x4c0),'dstFactor':_0x124919(0x471),'operation':'add'},'alpha':{'srcFactor':_0x124919(0x4c0),'dstFactor':_0x124919(0x471),'operation':'add'}}),validateMatrix=(_0x2ec6ca,_0x225322)=>{const _0x2a1729=_0x124919;if(_0x2ec6ca['length']!==0x10||_0x2ec6ca['some'](_0x31cc41=>!Number['isFinite'](_0x31cc41)))throw Error(_0x225322+_0x2a1729(0x262)+_0x225322+'\x20必须包含十六个有限数值。');},validateNonNegative=(_0x5bd107,_0x51d04a)=>{const _0x5eccc9=_0x124919;if(!Number[_0x5eccc9(0x2eb)](_0x5bd107)||_0x5bd107<0x0)throw Error(_0x51d04a+_0x5eccc9(0x3e3)+_0x51d04a+_0x5eccc9(0x22a));return _0x5bd107;},validatePositive=(_0x3c7dfc,_0x342030)=>{const _0x515536=_0x124919;if(!Number['isFinite'](_0x3c7dfc)||_0x3c7dfc<=0x0)throw Error(_0x342030+_0x515536(0x314)+_0x342030+'\x20必须是正有限数值。');return _0x3c7dfc;},cloneMeshes=_0xa35e18=>_0xa35e18['map'](_0x9a7b0c=>({..._0x9a7b0c,'vertices':new Float32Array(_0x9a7b0c['vertices'])})),estimateBrickUploadBytes=_0x4ca868=>{const _0x2bbefb=_0x124919;let _0x32cacc=_0x4ca868[_0x2bbefb(0x3e0)]+_0x4ca868[_0x2bbefb(0x43f)]*0x2,_0xeff027=_0x4ca868[_0x2bbefb(0x25e)]+_0x4ca868[_0x2bbefb(0x43f)]*0x2,_0x3dff57=_0x4ca868[_0x2bbefb(0x2f5)]+_0x4ca868[_0x2bbefb(0x43f)]*0x2;return Math[_0x2bbefb(0x404)](_0x32cacc*Float32Array['BYTES_PER_ELEMENT']/0x100)*0x100*_0xeff027*_0x3dff57+0x10;};var WebgpuVolumeSceneRenderer=class{[_0x124919(0x439)];[_0x124919(0x301)]='idle';[_0x124919(0x357)]=null;['adapter']=null;['device']=null;[_0x124919(0x2fe)]=null;[_0x124919(0x238)]=null;['sceneParamsBuffer']=null;[_0x124919(0x349)]=null;[_0x124919(0x304)]=null;[_0x124919(0x372)]=null;[_0x124919(0x4a2)]=null;['transferBindGroupLayout']=null;['sliceBindGroupLayout']=null;[_0x124919(0x4b9)]=null;[_0x124919(0x31c)]=null;[_0x124919(0x299)]=null;['transferBindGroup']=null;[_0x124919(0x3b1)]=null;[_0x124919(0x23f)]=null;[_0x124919(0x4a4)]=null;[_0x124919(0x267)]=null;['overlayLinePipeline']=null;[_0x124919(0x37d)]=null;['overlaySlicePipeline']=null;[_0x124919(0x2b5)]=null;[_0x124919(0x3bc)]=null;[_0x124919(0x408)]=null;[_0x124919(0x237)]=null;[_0x124919(0x482)]=null;[_0x124919(0x317)]=null;[_0x124919(0x413)]=null;[_0x124919(0x2d4)]={'viewProjection':IDENTITY_MATRIX$1,'inverseViewProjection':IDENTITY_MATRIX$1,'cameraPosition':[0x0,0x0,0x2]};[_0x124919(0x240)]=IDENTITY_MATRIX$1;[_0x124919(0x258)]=IDENTITY_MATRIX$1;[_0x124919(0x362)]=[0x0,0x0,0x0];[_0x124919(0x1cc)]=[0x1,0x1,0x1];[_0x124919(0x47c)]=_0x124919(0x28f);[_0x124919(0x3aa)]=0.3;[_0x124919(0x3c1)]=0x1;['stepLength']=0.005;['volumeDimFactor']=0x1;[_0x124919(0x417)]=_0x124919(0x208);['geographicTransform']=null;['colorStops']=DEFAULT_COLOR_STOPS;['opacityStops']=DEFAULT_OPACITY_STOPS;[_0x124919(0x2d8)]=0x0;[_0x124919(0x2d7)]=0x0;[_0x124919(0x2ce)]=0x0;[_0x124919(0x4a1)]=0x0;[_0x124919(0x396)]=0x0;[_0x124919(0x308)]=0x0;['cachedProfiles']=[];['cachedSlices']=[];['cachedAxes']=[];[_0x124919(0x2f1)]=new Map();['pendingBrickUploads']=[];[_0x124919(0x391)]=null;['uploadGeneration']=0x0;['uploadStagingBuffer']=null;[_0x124919(0x4d6)]=0x0;[_0x124919(0x4cf)]=0x0;[_0x124919(0x1e8)]=0x0;[_0x124919(0x442)]=0x0;[_0x124919(0x2c0)]=!0x1;[_0x124919(0x398)]=null;constructor(_0x4919a8={}){const _0x328ea7=_0x124919;this[_0x328ea7(0x439)]={..._0x4919a8};}get[_0x124919(0x26e)](){const _0x4122c3=_0x124919;return this[_0x4122c3(0x301)];}get['statistics'](){const _0x3a5c28=_0x124919;let _0x377bb4=this[_0x3a5c28(0x3bc)]?.['statistics']??{'logicalBrickCount':0x0,'atlasCapacity':0x0,'gpuBytes':0x0,'memoryLimitBytes':this[_0x3a5c28(0x439)][_0x3a5c28(0x3ee)]??this[_0x3a5c28(0x439)][_0x3a5c28(0x3b2)]??DEFAULT_MEMORY_TARGET_BYTES,'budgetLimited':!0x1,'skippedSamples':0x0,'skippedCells':0x0},_0x59c5a3=this[_0x3a5c28(0x482)]?.[_0x3a5c28(0x3d2)]??{'uniformUpdateCount':0x0,'resourceRebuildCount':0x0};return{'logicalBrickCount':_0x377bb4['logicalBrickCount'],'residentBrickCount':this[_0x3a5c28(0x3bc)]?.['residentBrickCount']??0x0,'pendingBrickCount':0x0,'atlasCapacity':_0x377bb4[_0x3a5c28(0x4ba)],'gpuBytes':_0x377bb4[_0x3a5c28(0x31d)],'memoryLimitBytes':_0x377bb4[_0x3a5c28(0x1f1)],'budgetLimited':_0x377bb4[_0x3a5c28(0x339)],'frameTimeMilliseconds':this[_0x3a5c28(0x308)],'submittedFrameCount':this[_0x3a5c28(0x2d7)],'uploadedBrickCount':this[_0x3a5c28(0x4cf)],'uploadBatchCount':this['uploadBatchCount'],'maximumUploadBatchBytes':this['maximumUploadBatchBytes'],'sliceUniformUpdateCount':_0x59c5a3[_0x3a5c28(0x2b0)],'sliceResourceRebuildCount':_0x59c5a3[_0x3a5c28(0x43c)],'skippedSamples':_0x377bb4[_0x3a5c28(0x499)],'skippedCells':_0x377bb4[_0x3a5c28(0x1de)]};}['setFrameAvailableCallback'](_0x134e23){const _0x4bd0c4=_0x124919;this[_0x4bd0c4(0x398)]=_0x134e23;}async[_0x124919(0x279)](_0x4310dc){const _0x47130f=_0x124919;if(this[_0x47130f(0x301)]===_0x47130f(0x29f))throw Error('A\x20destroyed\x20WebGPU\x20volume\x20renderer\x20cannot\x20be\x20initialized\x20again.\x20已销毁的\x20WebGPU\x20体积渲染器不能再次初始化。');let _0x36a721=++this[_0x47130f(0x396)];this['releaseGpuResources'](),this[_0x47130f(0x357)]=_0x4310dc,this['lifecycleState']=_0x47130f(0x2d0);let _0x469302=navigator['gpu'];if(!_0x469302)throw this[_0x47130f(0x301)]='idle',Error(_0x47130f(0x261));let _0x3e1e4e=await _0x469302[_0x47130f(0x2a2)]({'powerPreference':this[_0x47130f(0x439)][_0x47130f(0x365)]??_0x47130f(0x363)});if(_0x36a721!==this[_0x47130f(0x396)])return;if(!_0x3e1e4e)throw this[_0x47130f(0x301)]=_0x47130f(0x337),Error(_0x47130f(0x24d));let _0x32f456=await _0x3e1e4e[_0x47130f(0x2a6)]();if(_0x36a721!==this[_0x47130f(0x396)]){_0x32f456[_0x47130f(0x48c)]();return;}let _0x350591=_0x4310dc[_0x47130f(0x390)](_0x47130f(0x212));if(!_0x350591)throw _0x32f456[_0x47130f(0x48c)](),this[_0x47130f(0x301)]=_0x47130f(0x337),Error('Failed\x20to\x20create\x20a\x20WebGPU\x20canvas\x20context\x20for\x20the\x20volume\x20scene.\x20无法为体积场景创建\x20WebGPU\x20Canvas\x20上下文。');let _0x233783=_0x469302[_0x47130f(0x2c2)]();_0x350591['configure']({'device':_0x32f456,'format':_0x233783,'alphaMode':_0x47130f(0x484),'usage':GPUTextureUsage[_0x47130f(0x311)]|GPUTextureUsage[_0x47130f(0x309)]}),this[_0x47130f(0x3be)]=_0x3e1e4e,this[_0x47130f(0x4cc)]=_0x32f456,this[_0x47130f(0x2fe)]=_0x350591,this[_0x47130f(0x238)]=_0x233783,_0x32f456[_0x47130f(0x41b)]('validation'),this[_0x47130f(0x35c)]();let _0x1964bc=await _0x32f456[_0x47130f(0x42a)]();if(_0x1964bc)throw this['releaseGpuResources'](),this['lifecycleState']=_0x47130f(0x337),Error('Failed\x20to\x20create\x20WebGPU\x20volume\x20pipelines:\x20'+_0x1964bc['message']+_0x47130f(0x2af));if(this['watchDeviceLost'](_0x32f456),this[_0x47130f(0x301)]='ready',this['metadata']){this['configureSourceResources'](this['metadata']);let _0x2b920a=Array[_0x47130f(0x214)](this[_0x47130f(0x2f1)][_0x47130f(0x4bb)]());await Promise['all'](_0x2b920a[_0x47130f(0x254)](([_0x2e0250,_0xe8346f])=>this['enqueueBrickUpload']({'logicalIndex':_0x2e0250,'values':_0xe8346f},!0x1)));}this[_0x47130f(0x256)](),this[_0x47130f(0x3cd)]()[_0x47130f(0x354)](this[_0x47130f(0x2bf)]),this[_0x47130f(0x443)]()[_0x47130f(0x354)](this[_0x47130f(0x3f3)]),this[_0x47130f(0x1e1)]()['replace'](this[_0x47130f(0x402)]),this['resize'](_0x4310dc['width']||_0x4310dc[_0x47130f(0x30f)]||0x1,_0x4310dc[_0x47130f(0x4a1)]||_0x4310dc[_0x47130f(0x245)]||0x1);}[_0x124919(0x44b)](_0x184863){const _0x1a668d=_0x124919;this[_0x1a668d(0x2f3)]+=0x1,this[_0x1a668d(0x49f)](new DOMException(_0x1a668d(0x1dd),_0x1a668d(0x1c5))),this[_0x1a668d(0x413)]={..._0x184863},this[_0x1a668d(0x2f1)][_0x1a668d(0x320)](),this[_0x1a668d(0x4cf)]=0x0,this[_0x1a668d(0x1e8)]=0x0,this[_0x1a668d(0x442)]=0x0,this[_0x1a668d(0x301)]===_0x1a668d(0x1d3)&&this[_0x1a668d(0x1d9)](_0x184863);}[_0x124919(0x2c9)](_0x470af5){return this['enqueueBrickUpload'](_0x470af5,!0x0);}[_0x124919(0x465)](_0xe03020){const _0x316da5=_0x124919;this[_0x316da5(0x47a)]()[_0x316da5(0x272)](_0xe03020,this[_0x316da5(0x2d8)]);for(let _0x178dce of _0xe03020){let _0x1bd842=this['cachedBricks'][_0x316da5(0x4ab)](_0x178dce);_0x1bd842&&(this[_0x316da5(0x2f1)][_0x316da5(0x371)](_0x178dce),this[_0x316da5(0x2f1)][_0x316da5(0x49e)](_0x178dce,_0x1bd842));}}[_0x124919(0x4b6)](_0x7dd7c6){const _0x51de6b=_0x124919;validateMatrix(_0x7dd7c6['viewProjection'],_0x51de6b(0x470)),validateMatrix(_0x7dd7c6['inverseViewProjection'],_0x51de6b(0x493)),this[_0x51de6b(0x2d4)]={'viewProjection':[..._0x7dd7c6['viewProjection']],'inverseViewProjection':[..._0x7dd7c6[_0x51de6b(0x493)]],'cameraPosition':[..._0x7dd7c6[_0x51de6b(0x40b)]]};}[_0x124919(0x1bc)](_0x11a9dd){const _0xbf8974=_0x124919;this[_0xbf8974(0x2bf)]=cloneMeshes(_0x11a9dd),this['getProfileResources']()['replace'](_0x11a9dd);}[_0x124919(0x1c6)](_0x3fa4ec){const _0x4d08b4=_0x124919;this['cachedSlices']=_0x3fa4ec[_0x4d08b4(0x254)](_0x2e7215=>({..._0x2e7215})),this[_0x4d08b4(0x443)]()['replace'](_0x3fa4ec);}[_0x124919(0x43a)](_0x37ee7f){const _0x20f752=_0x124919;this[_0x20f752(0x402)]=cloneMeshes(_0x37ee7f),this[_0x20f752(0x1e1)]()[_0x20f752(0x354)](_0x37ee7f);}['setTransfer'](_0x1f8491,_0x382408,_0x16f6b0){const _0x55098b=_0x124919;this['colorStops']=_0x1f8491[_0x55098b(0x254)](_0xfcf2be=>({'value':_0xfcf2be[_0x55098b(0x36c)],'color':[..._0xfcf2be[_0x55098b(0x2c3)]]})),this[_0x55098b(0x234)]=_0x382408[_0x55098b(0x254)](_0x217952=>({..._0x217952})),_0x16f6b0&&(this[_0x55098b(0x417)]=_0x16f6b0),this[_0x55098b(0x301)]===_0x55098b(0x1d3)&&this[_0x55098b(0x256)]();}[_0x124919(0x216)](_0xd566f1){const _0x2efa08=_0x124919;_0xd566f1['modelMatrix']&&(validateMatrix(_0xd566f1[_0x2efa08(0x240)],_0x2efa08(0x240)),this['modelMatrix']=[..._0xd566f1['modelMatrix']]),_0xd566f1[_0x2efa08(0x258)]&&(validateMatrix(_0xd566f1[_0x2efa08(0x258)],'inverseModelMatrix'),this['inverseModelMatrix']=[..._0xd566f1[_0x2efa08(0x258)]]),_0xd566f1['clipMinimum']&&(this['clipMinimum']=[..._0xd566f1[_0x2efa08(0x362)]]),_0xd566f1[_0x2efa08(0x1cc)]&&(this[_0x2efa08(0x1cc)]=[..._0xd566f1[_0x2efa08(0x1cc)]]),_0xd566f1[_0x2efa08(0x47c)]&&(this[_0x2efa08(0x47c)]=_0xd566f1[_0x2efa08(0x47c)]),_0xd566f1[_0x2efa08(0x3aa)]!==void 0x0&&(this['opacity']=validateNonNegative(_0xd566f1[_0x2efa08(0x3aa)],'opacity')),_0xd566f1['densityScale']!==void 0x0&&(this[_0x2efa08(0x3c1)]=validateNonNegative(_0xd566f1[_0x2efa08(0x3c1)],_0x2efa08(0x3c1))),_0xd566f1['stepLength']!==void 0x0&&(this[_0x2efa08(0x416)]=validatePositive(_0xd566f1['stepLength'],_0x2efa08(0x416))),_0xd566f1['volumeDimFactor']!==void 0x0&&(this[_0x2efa08(0x3db)]=validateNonNegative(_0xd566f1[_0x2efa08(0x3db)],_0x2efa08(0x3db))),_0xd566f1[_0x2efa08(0x417)]&&(this['colorMode']=_0xd566f1[_0x2efa08(0x417)]),_0xd566f1[_0x2efa08(0x411)]!==void 0x0&&(this['geographicTransform']=_0xd566f1[_0x2efa08(0x411)]?{..._0xd566f1[_0x2efa08(0x411)]}:null);}[_0x124919(0x3d6)](_0x3effa7,_0x448706){const _0x422894=_0x124919;if(!Number[_0x422894(0x220)](_0x3effa7)||!Number[_0x422894(0x220)](_0x448706)||_0x3effa7<=0x0||_0x448706<=0x0)throw Error(_0x422894(0x490));let _0x55a411=this[_0x422894(0x3b0)]();_0x55a411[_0x422894(0x2ce)]=_0x3effa7,_0x55a411[_0x422894(0x4a1)]=_0x448706,this[_0x422894(0x2ce)]=_0x3effa7,this['height']=_0x448706,this[_0x422894(0x23d)]()[_0x422894(0x3d6)](_0x3effa7,_0x448706),this[_0x422894(0x49d)]();}[_0x124919(0x2cd)](){const _0x140ae5=_0x124919;if(this['lifecycleState']!==_0x140ae5(0x1d3)||!this['metadata']||this[_0x140ae5(0x2ce)]<=0x0||this[_0x140ae5(0x4a1)]<=0x0||this[_0x140ae5(0x2c0)])return!0x1;let _0x5313a8=performance[_0x140ae5(0x284)]();this[_0x140ae5(0x2d8)]+=0x1,this[_0x140ae5(0x4b1)]();let _0x521acf=this[_0x140ae5(0x451)](),_0x157207=_0x521acf[_0x140ae5(0x2e8)]({'label':'volume\x20scene\x20frame'}),_0x208ce8=this[_0x140ae5(0x390)]()['getCurrentTexture']()[_0x140ae5(0x1d0)]();return this['encodeScenePass'](_0x157207,_0x208ce8),this[_0x140ae5(0x2fc)](_0x157207,_0x208ce8),this[_0x140ae5(0x1be)](_0x157207,_0x208ce8),_0x521acf[_0x140ae5(0x290)][_0x140ae5(0x4b0)]([_0x157207[_0x140ae5(0x437)]()]),this[_0x140ae5(0x2c0)]=!0x0,this['submittedFrameCount']+=0x1,this[_0x140ae5(0x308)]=Math[_0x140ae5(0x207)](0.000001,performance[_0x140ae5(0x284)]()-_0x5313a8),_0x521acf[_0x140ae5(0x290)][_0x140ae5(0x2de)]()['then'](()=>{const _0x4e2cda=_0x140ae5;this['device']!==_0x521acf||this[_0x4e2cda(0x301)]!==_0x4e2cda(0x1d3)||(this[_0x4e2cda(0x2c0)]=!0x1,this['frameAvailableCallback']?.());})['catch'](()=>{const _0x1b9ae3=_0x140ae5;this[_0x1b9ae3(0x4cc)]===_0x521acf&&(this[_0x1b9ae3(0x2c0)]=!0x1);}),!0x0;}async[_0x124919(0x302)](){const _0x2c7b31=_0x124919;if(this['lifecycleState']!=='ready'||!this['metadata']||this[_0x2c7b31(0x2ce)]<=0x0||this[_0x2c7b31(0x4a1)]<=0x0)throw Error('WebGPU\x20volume\x20renderer\x20is\x20not\x20ready\x20for\x20frame\x20capture.\x20WebGPU\x20体积渲染器尚不能读取帧。');let _0x139cfc=this[_0x2c7b31(0x451)](),_0x365421=this[_0x2c7b31(0x2ce)]*0x4,_0x5ba53e=Math[_0x2c7b31(0x404)](_0x365421/0x100)*0x100,_0x2e266d=_0x139cfc[_0x2c7b31(0x480)]({'label':_0x2c7b31(0x4d4),'size':_0x5ba53e*this[_0x2c7b31(0x4a1)],'usage':GPUBufferUsage[_0x2c7b31(0x332)]|GPUBufferUsage[_0x2c7b31(0x2d9)]});_0x139cfc['pushErrorScope'](_0x2c7b31(0x477)),this[_0x2c7b31(0x2d8)]+=0x1,this[_0x2c7b31(0x4b1)]();let _0x317ac7=_0x139cfc['createCommandEncoder']({'label':_0x2c7b31(0x2d2)}),_0x56839a=this[_0x2c7b31(0x390)]()[_0x2c7b31(0x253)](),_0x1fb929=_0x56839a['createView']();this['encodeScenePass'](_0x317ac7,_0x1fb929),this[_0x2c7b31(0x2fc)](_0x317ac7,_0x1fb929),this[_0x2c7b31(0x1be)](_0x317ac7,_0x1fb929),_0x317ac7[_0x2c7b31(0x46d)]({'texture':_0x56839a},{'buffer':_0x2e266d,'bytesPerRow':_0x5ba53e,'rowsPerImage':this[_0x2c7b31(0x4a1)]},[this[_0x2c7b31(0x2ce)],this['height']]),_0x139cfc['queue'][_0x2c7b31(0x4b0)]([_0x317ac7['finish']()]);let _0x297d9a=await _0x139cfc[_0x2c7b31(0x42a)]();if(_0x297d9a)throw _0x2e266d[_0x2c7b31(0x48c)](),Error(_0x2c7b31(0x288)+_0x297d9a['message']+_0x2c7b31(0x486));await _0x2e266d[_0x2c7b31(0x389)](GPUMapMode[_0x2c7b31(0x1ee)]);let _0x4f2584=new Uint8Array(_0x2e266d[_0x2c7b31(0x30c)]()),_0x5c3b10=new Uint8Array(_0x365421*this[_0x2c7b31(0x4a1)]),_0x563786=this[_0x2c7b31(0x2b8)]()===_0x2c7b31(0x3b8);for(let _0x2edb83=0x0;_0x2edb83<this['height'];_0x2edb83+=0x1){let _0x23e91f=_0x4f2584[_0x2c7b31(0x495)](_0x2edb83*_0x5ba53e,_0x2edb83*_0x5ba53e+_0x365421),_0x1cdddd=_0x2edb83*_0x365421;if(!_0x563786){_0x5c3b10[_0x2c7b31(0x49e)](_0x23e91f,_0x1cdddd);continue;}for(let _0x3e5b84=0x0;_0x3e5b84<this[_0x2c7b31(0x2ce)];_0x3e5b84+=0x1){let _0x2bfc3=_0x3e5b84*0x4,_0xf50773=_0x1cdddd+_0x2bfc3;_0x5c3b10[_0xf50773]=_0x23e91f[_0x2bfc3+0x2],_0x5c3b10[_0xf50773+0x1]=_0x23e91f[_0x2bfc3+0x1],_0x5c3b10[_0xf50773+0x2]=_0x23e91f[_0x2bfc3],_0x5c3b10[_0xf50773+0x3]=_0x23e91f[_0x2bfc3+0x3];}}return _0x2e266d['unmap'](),_0x2e266d[_0x2c7b31(0x48c)](),this[_0x2c7b31(0x2d7)]+=0x1,{'width':this[_0x2c7b31(0x2ce)],'height':this['height'],'pixels':_0x5c3b10};}[_0x124919(0x48c)](){const _0x3d68e7=_0x124919;this[_0x3d68e7(0x301)]!==_0x3d68e7(0x29f)&&(++this['initializationGeneration'],this['releaseGpuResources'](),this[_0x3d68e7(0x357)]=null,this[_0x3d68e7(0x413)]=null,this[_0x3d68e7(0x398)]=null,this['lifecycleState']=_0x3d68e7(0x29f));}['createGpuResources'](){const _0x1c7200=_0x124919;let _0x5466f4=this['getDevice']();this[_0x1c7200(0x1e0)]=_0x5466f4[_0x1c7200(0x480)]({'label':_0x1c7200(0x286),'size':0x190,'usage':GPUBufferUsage['UNIFORM']|GPUBufferUsage[_0x1c7200(0x332)]}),this[_0x1c7200(0x349)]=_0x5466f4[_0x1c7200(0x480)]({'label':'volume\x20metadata\x20params','size':0x60,'usage':GPUBufferUsage[_0x1c7200(0x1fe)]|GPUBufferUsage['COPY_DST']}),this['geometryBindGroupLayout']=_0x5466f4[_0x1c7200(0x4d3)]({'label':_0x1c7200(0x239),'entries':[{'binding':0x0,'visibility':GPUShaderStage[_0x1c7200(0x2c4)]|GPUShaderStage[_0x1c7200(0x21f)],'buffer':{'type':_0x1c7200(0x38e)}}]}),this['sceneBindGroupLayout']=_0x5466f4[_0x1c7200(0x4d3)]({'label':_0x1c7200(0x3ad),'entries':[{'binding':0x0,'visibility':GPUShaderStage['VERTEX']|GPUShaderStage[_0x1c7200(0x21f)],'buffer':{'type':_0x1c7200(0x38e)}},{'binding':0x1,'visibility':GPUShaderStage['FRAGMENT'],'texture':{'sampleType':'depth'}}]}),this['volumeBindGroupLayout']=_0x5466f4[_0x1c7200(0x4d3)]({'label':'volume\x20atlas\x20bind\x20group\x20layout','entries':[...Array[_0x1c7200(0x214)]({'length':0x8},(_0x31112c,_0x3e81b5)=>({'binding':_0x3e81b5,'visibility':GPUShaderStage[_0x1c7200(0x21f)],'texture':{'sampleType':_0x1c7200(0x3b9),'viewDimension':'3d'}})),{'binding':0x8,'visibility':GPUShaderStage['FRAGMENT'],'buffer':{'type':_0x1c7200(0x3f8)}},{'binding':0x9,'visibility':GPUShaderStage[_0x1c7200(0x21f)],'buffer':{'type':_0x1c7200(0x38e)}}]}),this[_0x1c7200(0x31e)]=_0x5466f4['createBindGroupLayout']({'label':_0x1c7200(0x1ce),'entries':[0x0,0x1,0x2,0x3][_0x1c7200(0x254)](_0xdfbdf4=>({'binding':_0xdfbdf4,'visibility':GPUShaderStage[_0x1c7200(0x21f)],'buffer':{'type':'read-only-storage'}}))}),this[_0x1c7200(0x1f3)]=_0x5466f4['createBindGroupLayout']({'label':_0x1c7200(0x39c),'entries':[{'binding':0x0,'visibility':GPUShaderStage['VERTEX']|GPUShaderStage[_0x1c7200(0x21f)],'buffer':{'type':'uniform'}}]}),this[_0x1c7200(0x2b5)]=new WebgpuSceneAttachments(_0x5466f4),this[_0x1c7200(0x408)]=new WebgpuTransferResources(_0x5466f4),this[_0x1c7200(0x237)]=new WebgpuSceneMeshResources(_0x5466f4),this[_0x1c7200(0x482)]=new WebgpuSliceResources(_0x5466f4,this['getSliceBindGroupLayout']()),this[_0x1c7200(0x317)]=new WebgpuSceneMeshResources(_0x5466f4),this[_0x1c7200(0x3ac)]();}[_0x124919(0x3ac)](){const _0x5a04e2=_0x124919;let _0x4c303e=this[_0x5a04e2(0x451)](),_0x34c47e=this[_0x5a04e2(0x2b8)](),_0x1b8924=this[_0x5a04e2(0x32d)](),_0x2026a5=this[_0x5a04e2(0x32e)](),_0x5b0cf6=_0x4c303e[_0x5a04e2(0x340)]({'label':_0x5a04e2(0x4b7),'code':sceneMesh_default}),_0x38bc6e={'module':_0x5b0cf6,'entryPoint':_0x5a04e2(0x452),'buffers':[{'arrayStride':0x1c,'attributes':[{'shaderLocation':0x0,'offset':0x0,'format':_0x5a04e2(0x3e1)},{'shaderLocation':0x1,'offset':0xc,'format':_0x5a04e2(0x321)}]}]},_0x42fb6b={'module':_0x5b0cf6,'entryPoint':_0x5a04e2(0x3af),'targets':[{'format':_0x34c47e,'blend':premultipliedBlend()}]},_0x205fa7=(_0x51f1b2,_0x337c44)=>_0x4c303e[_0x5a04e2(0x1e3)]({'layout':_0x4c303e[_0x5a04e2(0x433)]({'bindGroupLayouts':[_0x1b8924]}),'vertex':_0x38bc6e,'fragment':_0x42fb6b,'primitive':{'topology':_0x51f1b2},'depthStencil':_0x337c44?{'format':'depth32float','depthWriteEnabled':!0x0,'depthCompare':_0x5a04e2(0x32f)}:void 0x0});this['sceneTrianglePipeline']=_0x205fa7('triangle-list',!0x0),this['sceneLinePipeline']=_0x205fa7(_0x5a04e2(0x275),!0x0),this[_0x5a04e2(0x267)]=_0x205fa7(_0x5a04e2(0x1ff),!0x1),this[_0x5a04e2(0x3ea)]=_0x205fa7(_0x5a04e2(0x275),!0x1);let _0x3c5ca9=_0x4c303e[_0x5a04e2(0x340)]({'label':'volume\x20raymarch\x20shader','code':volumeRaymarch_default});this[_0x5a04e2(0x3b1)]=_0x4c303e[_0x5a04e2(0x1e3)]({'layout':_0x4c303e[_0x5a04e2(0x433)]({'bindGroupLayouts':[_0x2026a5,this[_0x5a04e2(0x226)](),this['getTransferBindGroupLayout']()]}),'vertex':{'module':_0x3c5ca9,'entryPoint':_0x5a04e2(0x452)},'fragment':{'module':_0x3c5ca9,'entryPoint':'fragmentMain','targets':[{'format':_0x34c47e,'blend':premultipliedBlend()}]},'primitive':{'topology':_0x5a04e2(0x1ff)}});let _0x368f0c=_0x4c303e[_0x5a04e2(0x340)]({'label':'volume\x20slice\x20shader','code':volumeSlice_default}),_0x25ba58=_0x1962fc=>_0x4c303e[_0x5a04e2(0x1e3)]({'layout':_0x4c303e['createPipelineLayout']({'bindGroupLayouts':[_0x1b8924,this[_0x5a04e2(0x226)](),this[_0x5a04e2(0x316)](),this['getSliceBindGroupLayout']()]}),'vertex':{'module':_0x368f0c,'entryPoint':_0x5a04e2(0x452)},'fragment':{'module':_0x368f0c,'entryPoint':_0x5a04e2(0x3af),'targets':[{'format':_0x34c47e,'blend':premultipliedBlend()}]},'primitive':{'topology':_0x5a04e2(0x1ff)},'depthStencil':_0x1962fc?{'format':_0x5a04e2(0x28c),'depthWriteEnabled':!0x0,'depthCompare':_0x5a04e2(0x32f)}:void 0x0});this['sceneSlicePipeline']=_0x25ba58(!0x0),this[_0x5a04e2(0x45f)]=_0x25ba58(!0x1);}['configureSourceResources'](_0x2fcabc){const _0x2bf8fd=_0x124919;this[_0x2bf8fd(0x3bc)]?.[_0x2bf8fd(0x48c)](),this[_0x2bf8fd(0x3bc)]=new WebgpuBrickAtlas(this[_0x2bf8fd(0x451)](),this['options']['memoryTargetBytes']??DEFAULT_MEMORY_TARGET_BYTES,this[_0x2bf8fd(0x439)]['memoryHardLimitBytes']??this['options'][_0x2bf8fd(0x3b2)]??DEFAULT_MEMORY_TARGET_BYTES),this[_0x2bf8fd(0x3bc)][_0x2bf8fd(0x2e4)](_0x2fcabc),this[_0x2bf8fd(0x387)](),this[_0x2bf8fd(0x299)]=this[_0x2bf8fd(0x3bc)]['createBindGroup'](this[_0x2bf8fd(0x226)](),this[_0x2bf8fd(0x2dc)]());}[_0x124919(0x1fb)](_0x1cd2c9,_0x53c4f2){return new Promise((_0x65dcf9,_0x3ad3f4)=>{const _0x5e40a9=_0x2335;this[_0x5e40a9(0x461)]['push']({'upload':_0x1cd2c9,'generation':this[_0x5e40a9(0x2f3)],'cacheOnSuccess':_0x53c4f2,'resolve':_0x65dcf9,'reject':_0x3ad3f4}),this[_0x5e40a9(0x32a)]();});}['scheduleUploadPump'](){const _0x15f7ec=_0x124919;this['uploadPump']||=Promise['resolve']()[_0x15f7ec(0x444)](()=>this[_0x15f7ec(0x37e)]())['finally'](()=>{const _0x58274c=_0x15f7ec;this['uploadPump']=null,this[_0x58274c(0x461)][_0x58274c(0x251)]>0x0&&this[_0x58274c(0x301)]===_0x58274c(0x1d3)&&this[_0x58274c(0x32a)]();});}async[_0x124919(0x37e)](){const _0x3b1819=_0x124919;for(;this['pendingBrickUploads']['length']>0x0&&this[_0x3b1819(0x301)]===_0x3b1819(0x1d3)&&this[_0x3b1819(0x413)];){let _0x4ae90e=this['getDevice'](),_0x1d34d9=estimateBrickUploadBytes(this[_0x3b1819(0x413)]),_0x298f83=Math[_0x3b1819(0x44f)](0x4000000,Math[_0x3b1819(0x207)](_0x1d34d9,Math[_0x3b1819(0x4d1)](_0x4ae90e['limits']['maxBufferSize']/0x4))),_0xbadd1f=[],_0x15d0a5=0x0;for(;this['pendingBrickUploads']['length']>0x0&&_0xbadd1f['length']<0x10;){let _0x4722f1=this[_0x3b1819(0x461)][0x0];if(_0xbadd1f[_0x3b1819(0x251)]>0x0&&_0x15d0a5+_0x1d34d9>_0x298f83)break;if(this[_0x3b1819(0x461)][_0x3b1819(0x29a)](),_0x4722f1[_0x3b1819(0x3b6)]!==this[_0x3b1819(0x2f3)]){_0x4722f1[_0x3b1819(0x47d)](new DOMException(_0x3b1819(0x20c),_0x3b1819(0x1c5)));continue;}_0xbadd1f[_0x3b1819(0x4bd)](_0x4722f1),_0x15d0a5+=_0x1d34d9;}if(_0xbadd1f[_0x3b1819(0x251)]!==0x0)try{let _0x2ad995=[],_0x3315cd=0x0;for(let _0xbc399d of _0xbadd1f){let _0x22af18=this[_0x3b1819(0x47a)]()[_0x3b1819(0x26f)](_0xbc399d['upload'],this[_0x3b1819(0x2d8)]),_0x3eb3ca=Math[_0x3b1819(0x404)](_0x3315cd/0x100)*0x100;_0x2ad995['push']({'item':_0xbc399d,'prepared':_0x22af18,'bufferOffset':_0x3eb3ca}),_0x3315cd=_0x3eb3ca+_0x22af18[_0x3b1819(0x421)][_0x3b1819(0x380)];}let _0x112a63=this[_0x3b1819(0x3d3)](_0x3315cd);await _0x112a63[_0x3b1819(0x389)](GPUMapMode[_0x3b1819(0x2bc)]);let _0x31c269=new Uint8Array(_0x112a63[_0x3b1819(0x30c)]());for(let _0x4be086 of _0x2ad995){let _0x3c96fb=_0x4be086[_0x3b1819(0x273)][_0x3b1819(0x421)];_0x31c269[_0x3b1819(0x49e)](new Uint8Array(_0x3c96fb[_0x3b1819(0x249)],_0x3c96fb[_0x3b1819(0x3ae)],_0x3c96fb[_0x3b1819(0x380)]),_0x4be086['bufferOffset']);}_0x112a63['unmap']();let _0x3b8cf4=_0x4ae90e[_0x3b1819(0x2e8)]({'label':_0x3b1819(0x431)});for(let _0x33e111 of _0x2ad995)this['getAtlas']()['encodePreparedBrickUpload'](_0x3b8cf4,_0x112a63,_0x33e111[_0x3b1819(0x2a1)],_0x33e111[_0x3b1819(0x273)]);_0x4ae90e[_0x3b1819(0x290)][_0x3b1819(0x4b0)]([_0x3b8cf4[_0x3b1819(0x437)]()]),await _0x4ae90e[_0x3b1819(0x290)][_0x3b1819(0x2de)](),await new Promise(_0x50e860=>setTimeout(_0x50e860,0x0)),this[_0x3b1819(0x4cf)]+=_0xbadd1f['length'],this['uploadBatchCount']+=0x1,this[_0x3b1819(0x442)]=Math[_0x3b1819(0x207)](this[_0x3b1819(0x442)],_0x15d0a5);for(let _0x219360 of _0xbadd1f){if(_0x219360[_0x3b1819(0x3b6)]!==this[_0x3b1819(0x2f3)]){_0x219360['reject'](new DOMException(_0x3b1819(0x20c),_0x3b1819(0x1c5)));continue;}_0x219360['cacheOnSuccess']&&this[_0x3b1819(0x224)](_0x219360[_0x3b1819(0x43e)]),_0x219360['resolve']();}}catch(_0x29d1c9){for(let _0x6f6882 of _0xbadd1f)_0x6f6882[_0x3b1819(0x47d)](_0x29d1c9);}}}[_0x124919(0x3d3)](_0x3c55ef){const _0xed39a4=_0x124919;let _0x398a2c=Math[_0xed39a4(0x207)](0x100,Math[_0xed39a4(0x404)](_0x3c55ef/0x100)*0x100);return this[_0xed39a4(0x374)]&&this['uploadStagingBufferSize']>=_0x398a2c?this[_0xed39a4(0x374)]:(this[_0xed39a4(0x374)]?.['destroy'](),this[_0xed39a4(0x374)]=this[_0xed39a4(0x451)]()['createBuffer']({'label':'volume\x20brick\x20reusable\x20upload\x20staging','size':_0x398a2c,'usage':GPUBufferUsage[_0xed39a4(0x448)]|GPUBufferUsage['COPY_SRC']}),this[_0xed39a4(0x4d6)]=_0x398a2c,this[_0xed39a4(0x374)]);}[_0x124919(0x224)](_0x2c3bbc){const _0x567bdc=_0x124919;for(this[_0x567bdc(0x2f1)][_0x567bdc(0x371)](_0x2c3bbc[_0x567bdc(0x24c)]),this[_0x567bdc(0x2f1)][_0x567bdc(0x49e)](_0x2c3bbc['logicalIndex'],new Float32Array(_0x2c3bbc[_0x567bdc(0x421)]));this[_0x567bdc(0x2f1)][_0x567bdc(0x4b8)]>this[_0x567bdc(0x3d2)][_0x567bdc(0x4ba)];){let _0x54b29d=this['cachedBricks'][_0x567bdc(0x3fd)]()[_0x567bdc(0x280)]()[_0x567bdc(0x36c)];if(_0x54b29d===void 0x0)break;this[_0x567bdc(0x2f1)]['delete'](_0x54b29d);}}[_0x124919(0x49f)](_0x1a2718){const _0x3b41ab=_0x124919;for(let _0x44f73b of this[_0x3b41ab(0x461)][_0x3b41ab(0x1fc)](0x0))_0x44f73b[_0x3b41ab(0x47d)](_0x1a2718);}[_0x124919(0x256)](){const _0x271fac=_0x124919;let _0x4b4fcf=this['getTransferResources']();_0x4b4fcf[_0x271fac(0x216)](this[_0x271fac(0x4bf)],this[_0x271fac(0x234)]),this[_0x271fac(0x28a)]=_0x4b4fcf[_0x271fac(0x2cc)](this['getTransferBindGroupLayout']());}['recreateSceneBindGroup'](){const _0x20b8d7=_0x124919;!this[_0x20b8d7(0x1e0)]||!this[_0x20b8d7(0x2b5)]||!this[_0x20b8d7(0x304)]||!this[_0x20b8d7(0x372)]||(this[_0x20b8d7(0x4b9)]=this['getDevice']()[_0x20b8d7(0x2cc)]({'label':_0x20b8d7(0x1b9),'layout':this[_0x20b8d7(0x304)],'entries':[{'binding':0x0,'resource':{'buffer':this[_0x20b8d7(0x1e0)]}}]}),this[_0x20b8d7(0x31c)]=this[_0x20b8d7(0x451)]()['createBindGroup']({'label':'volume\x20scene\x20bind\x20group','layout':this['sceneBindGroupLayout'],'entries':[{'binding':0x0,'resource':{'buffer':this[_0x20b8d7(0x1e0)]}},{'binding':0x1,'resource':this[_0x20b8d7(0x2b5)][_0x20b8d7(0x45d)]}]}));}['writeParams'](){const _0x36dd26=_0x124919;let _0x356d85=new Float32Array(0x64);_0x356d85[_0x36dd26(0x49e)](this['camera'][_0x36dd26(0x470)],0x0),_0x356d85[_0x36dd26(0x49e)](this['camera'][_0x36dd26(0x493)],0x10),_0x356d85['set'](this['modelMatrix'],0x20),_0x356d85[_0x36dd26(0x49e)](this[_0x36dd26(0x258)],0x30),_0x356d85['set']([...this[_0x36dd26(0x2d4)][_0x36dd26(0x40b)],0x1],0x40),_0x356d85[_0x36dd26(0x49e)]([this[_0x36dd26(0x2ce)],this['height'],0x1/this[_0x36dd26(0x2ce)],0x1/this['height']],0x44),_0x356d85[_0x36dd26(0x49e)]([...this[_0x36dd26(0x362)],0x0],0x48),_0x356d85[_0x36dd26(0x49e)]([...this[_0x36dd26(0x1cc)],0x0],0x4c),_0x356d85['set']([+(this[_0x36dd26(0x47c)]===_0x36dd26(0x39e)),this[_0x36dd26(0x3aa)],this[_0x36dd26(0x3c1)],this['stepLength']],0x50),_0x356d85[_0x36dd26(0x49e)]([this[_0x36dd26(0x4bf)]['length'],this[_0x36dd26(0x234)]['length'],this[_0x36dd26(0x3db)],+(this['colorMode']===_0x36dd26(0x3e9))],0x54);let _0x511a95=this[_0x36dd26(0x411)];_0x511a95&&(_0x356d85[_0x36dd26(0x49e)]([0x1,..._0x511a95[_0x36dd26(0x312)]],0x58),_0x356d85[_0x36dd26(0x49e)]([_0x511a95[_0x36dd26(0x33f)],_0x511a95[_0x36dd26(0x336)],..._0x511a95[_0x36dd26(0x494)]],0x5c),_0x356d85[_0x36dd26(0x49e)]([..._0x511a95[_0x36dd26(0x27e)],..._0x511a95[_0x36dd26(0x32c)]],0x60)),this[_0x36dd26(0x451)]()[_0x36dd26(0x290)][_0x36dd26(0x469)](this[_0x36dd26(0x36d)](),0x0,_0x356d85);}[_0x124919(0x387)](){const _0x8290da=_0x124919;let _0xa26eb4=this['metadata'],_0x463a15=this['atlas'];if(!_0xa26eb4||!_0x463a15)return;let _0x42992f=_0x463a15['atlasLayout'],_0x16c66a=new Uint32Array(0x60/0x4),_0x47fc06=Math[_0x8290da(0x404)](_0xa26eb4[_0x8290da(0x3dd)][_0x8290da(0x233)]/_0xa26eb4[_0x8290da(0x3e0)]),_0x4bb094=Math[_0x8290da(0x404)](_0xa26eb4['yAxis'][_0x8290da(0x233)]/_0xa26eb4[_0x8290da(0x25e)]),_0x40a8ef=Math[_0x8290da(0x404)](_0xa26eb4['zAxis']['count']/_0xa26eb4[_0x8290da(0x2f5)]);_0x16c66a['set']([_0xa26eb4[_0x8290da(0x3dd)][_0x8290da(0x233)],_0xa26eb4[_0x8290da(0x481)][_0x8290da(0x233)],_0xa26eb4[_0x8290da(0x446)][_0x8290da(0x233)],0x0],0x0),_0x16c66a[_0x8290da(0x49e)]([_0xa26eb4[_0x8290da(0x3e0)],_0xa26eb4[_0x8290da(0x25e)],_0xa26eb4['brickDepth'],0x1],0x4),_0x16c66a[_0x8290da(0x49e)]([_0x47fc06,_0x4bb094,_0x40a8ef,0x0],0x8),_0x16c66a[_0x8290da(0x49e)]([_0x42992f[_0x8290da(0x4ae)],_0x42992f[_0x8290da(0x33b)],_0x42992f['slotCountZ'],_0x42992f[_0x8290da(0x283)]],0xc),_0x16c66a['set']([(_0xa26eb4['brickWidth']+0x2)*_0x42992f[_0x8290da(0x4ae)],(_0xa26eb4['brickHeight']+0x2)*_0x42992f[_0x8290da(0x33b)],(_0xa26eb4[_0x8290da(0x2f5)]+0x2)*_0x42992f[_0x8290da(0x378)],0x0],0x10),new Float32Array(_0x16c66a[_0x8290da(0x249)])[_0x8290da(0x49e)]([_0xa26eb4[_0x8290da(0x2a5)]??0x0,_0xa26eb4[_0x8290da(0x2a5)]===void 0x0?0x0:0x1,0x0,0x0],0x14),this[_0x8290da(0x451)]()[_0x8290da(0x290)]['writeBuffer'](this[_0x8290da(0x2dc)](),0x0,_0x16c66a);}['encodeScenePass'](_0x22c39c,_0x1d2442){const _0x2a95c6=_0x124919;let _0x554f15=_0x22c39c[_0x2a95c6(0x3dc)]({'label':_0x2a95c6(0x326),'colorAttachments':[{'view':_0x1d2442,'clearValue':{'r':0x0,'g':0x0,'b':0x0,'a':0x0},'loadOp':_0x2a95c6(0x320),'storeOp':_0x2a95c6(0x48d)}],'depthStencilAttachment':{'view':this['getAttachments']()[_0x2a95c6(0x45d)],'depthClearValue':0x1,'depthLoadOp':_0x2a95c6(0x320),'depthStoreOp':_0x2a95c6(0x48d)}});this[_0x2a95c6(0x2ad)](_0x554f15,'scene'),this[_0x2a95c6(0x2ae)](_0x554f15,_0x2a95c6(0x2ec)),_0x554f15[_0x2a95c6(0x4b2)]();}[_0x124919(0x2fc)](_0x1a5fc2,_0x57da46){const _0x37a8a7=_0x124919;if(!this[_0x37a8a7(0x299)]||!this[_0x37a8a7(0x28a)]||!this['sceneBindGroup']||!this['volumePipeline'])return;let _0x591c74=_0x1a5fc2['beginRenderPass']({'label':_0x37a8a7(0x265),'colorAttachments':[{'view':_0x57da46,'loadOp':'load','storeOp':'store'}]});_0x591c74[_0x37a8a7(0x414)](this[_0x37a8a7(0x3b1)]),_0x591c74[_0x37a8a7(0x22c)](0x0,this[_0x37a8a7(0x31c)]),_0x591c74[_0x37a8a7(0x22c)](0x1,this[_0x37a8a7(0x299)]),_0x591c74[_0x37a8a7(0x22c)](0x2,this[_0x37a8a7(0x28a)]),_0x591c74[_0x37a8a7(0x3d5)](0x3),_0x591c74[_0x37a8a7(0x4b2)]();}[_0x124919(0x1be)](_0x13798c,_0xeea1bd){const _0x460b7b=_0x124919;let _0x218158=_0x13798c[_0x460b7b(0x3dc)]({'label':_0x460b7b(0x4cd),'colorAttachments':[{'view':_0xeea1bd,'loadOp':_0x460b7b(0x35a),'storeOp':_0x460b7b(0x48d)}]});this['drawMeshes'](_0x218158,'always-visible'),this[_0x460b7b(0x2ae)](_0x218158,_0x460b7b(0x38a)),_0x218158['end']();}[_0x124919(0x2ad)](_0x2731d3,_0x2c721e){const _0x2a40fb=_0x124919;let _0x12711d=this[_0x2a40fb(0x4b9)];if(!_0x12711d)return;let _0x5e13dc=_0x2c721e===_0x2a40fb(0x2ec)?this['sceneTrianglePipeline']:this['overlayTrianglePipeline'],_0x43a182=_0x2c721e===_0x2a40fb(0x2ec)?this[_0x2a40fb(0x4a4)]:this[_0x2a40fb(0x3ea)];_0x5e13dc&&(_0x2731d3['setPipeline'](_0x5e13dc),_0x2731d3['setBindGroup'](0x0,_0x12711d),this[_0x2a40fb(0x237)]?.[_0x2a40fb(0x3d5)](_0x2731d3,'triangle-list',_0x2c721e),this[_0x2a40fb(0x317)]?.[_0x2a40fb(0x3d5)](_0x2731d3,_0x2a40fb(0x1ff),_0x2c721e)),_0x43a182&&(_0x2731d3[_0x2a40fb(0x414)](_0x43a182),_0x2731d3[_0x2a40fb(0x22c)](0x0,_0x12711d),this[_0x2a40fb(0x237)]?.['draw'](_0x2731d3,_0x2a40fb(0x275),_0x2c721e),this[_0x2a40fb(0x317)]?.[_0x2a40fb(0x3d5)](_0x2731d3,_0x2a40fb(0x275),_0x2c721e));}[_0x124919(0x2ae)](_0x5b5e29,_0x26f927){const _0x83011a=_0x124919;let _0x37bf03=_0x26f927===_0x83011a(0x2ec)?this[_0x83011a(0x37d)]:this[_0x83011a(0x45f)];!_0x37bf03||!this[_0x83011a(0x4b9)]||!this[_0x83011a(0x299)]||!this['transferBindGroup']||(_0x5b5e29['setBindGroup'](0x0,this['geometryBindGroup']),_0x5b5e29['setBindGroup'](0x1,this[_0x83011a(0x299)]),_0x5b5e29[_0x83011a(0x22c)](0x2,this[_0x83011a(0x28a)]),this['sliceResources']?.[_0x83011a(0x3d5)](_0x5b5e29,_0x37bf03,_0x26f927));}['watchDeviceLost'](_0x2b65b8){const _0x419c87=_0x124919;_0x2b65b8[_0x419c87(0x3e4)][_0x419c87(0x444)](_0x17fd15=>{const _0x5acaf0=_0x419c87;if(this[_0x5acaf0(0x4cc)]!==_0x2b65b8||this['lifecycleState']===_0x5acaf0(0x29f))return;this[_0x5acaf0(0x301)]=_0x5acaf0(0x3e4),console[_0x5acaf0(0x412)](_0x5acaf0(0x1bd)+_0x17fd15['message']+_0x5acaf0(0x428));let _0x292602=this['canvas'];this[_0x5acaf0(0x4b3)](),_0x292602&&this[_0x5acaf0(0x279)](_0x292602)[_0x5acaf0(0x1d8)](_0x39b254=>{const _0x4c15f1=_0x5acaf0;console[_0x4c15f1(0x412)](_0x4c15f1(0x27d),_0x39b254);});});}[_0x124919(0x4b3)](){const _0x424c13=_0x124919;this[_0x424c13(0x2f3)]+=0x1,this[_0x424c13(0x49f)](new DOMException(_0x424c13(0x395),'AbortError')),this[_0x424c13(0x3bc)]?.[_0x424c13(0x48c)](),this['transferResources']?.[_0x424c13(0x48c)](),this[_0x424c13(0x237)]?.[_0x424c13(0x48c)](),this[_0x424c13(0x482)]?.[_0x424c13(0x48c)](),this[_0x424c13(0x317)]?.[_0x424c13(0x48c)](),this[_0x424c13(0x2b5)]?.[_0x424c13(0x48c)](),this['sceneParamsBuffer']?.['destroy'](),this['volumeParamsBuffer']?.['destroy'](),this[_0x424c13(0x374)]?.[_0x424c13(0x48c)]();try{this['context']?.[_0x424c13(0x4ce)]();}catch{}this[_0x424c13(0x4cc)]?.['destroy'](),this['adapter']=null,this[_0x424c13(0x4cc)]=null,this[_0x424c13(0x2fe)]=null,this[_0x424c13(0x238)]=null,this['sceneParamsBuffer']=null,this['volumeParamsBuffer']=null,this[_0x424c13(0x374)]=null,this[_0x424c13(0x4d6)]=0x0,this[_0x424c13(0x304)]=null,this[_0x424c13(0x372)]=null,this[_0x424c13(0x4a2)]=null,this['transferBindGroupLayout']=null,this[_0x424c13(0x1f3)]=null,this[_0x424c13(0x4b9)]=null,this[_0x424c13(0x31c)]=null,this['volumeBindGroup']=null,this[_0x424c13(0x28a)]=null,this['volumePipeline']=null,this[_0x424c13(0x23f)]=null,this[_0x424c13(0x4a4)]=null,this[_0x424c13(0x267)]=null,this[_0x424c13(0x3ea)]=null,this[_0x424c13(0x37d)]=null,this[_0x424c13(0x45f)]=null,this[_0x424c13(0x2b5)]=null,this[_0x424c13(0x3bc)]=null,this[_0x424c13(0x408)]=null,this[_0x424c13(0x237)]=null,this[_0x424c13(0x482)]=null,this[_0x424c13(0x317)]=null,this['frameInFlight']=!0x1,this[_0x424c13(0x2ce)]=0x0,this[_0x424c13(0x4a1)]=0x0;}['getDevice'](){const _0x523c2d=_0x124919;if(!this[_0x523c2d(0x4cc)])throw Error(_0x523c2d(0x383));return this[_0x523c2d(0x4cc)];}[_0x124919(0x390)](){const _0x5f519a=_0x124919;if(!this['context'])throw Error(_0x5f519a(0x260));return this['context'];}[_0x124919(0x2b8)](){const _0x59ad86=_0x124919;if(!this[_0x59ad86(0x238)])throw Error(_0x59ad86(0x20f));return this[_0x59ad86(0x238)];}['getCanvas'](){const _0x5f1ed5=_0x124919;if(!this[_0x5f1ed5(0x357)])throw Error('WebGPU\x20volume\x20canvas\x20is\x20not\x20initialized.\x20WebGPU\x20体积\x20Canvas\x20尚未初始化。');return this[_0x5f1ed5(0x357)];}[_0x124919(0x23d)](){const _0x14fb0f=_0x124919;if(!this[_0x14fb0f(0x2b5)])throw Error(_0x14fb0f(0x34a));return this[_0x14fb0f(0x2b5)];}[_0x124919(0x47a)](){const _0x32716d=_0x124919;if(!this[_0x32716d(0x3bc)])throw Error(_0x32716d(0x1d6));return this[_0x32716d(0x3bc)];}[_0x124919(0x227)](){const _0x41e72b=_0x124919;if(!this[_0x41e72b(0x408)])throw Error(_0x41e72b(0x271));return this[_0x41e72b(0x408)];}[_0x124919(0x3cd)](){const _0x1e8c1b=_0x124919;if(!this[_0x1e8c1b(0x237)])throw Error(_0x1e8c1b(0x229));return this[_0x1e8c1b(0x237)];}['getSliceResources'](){const _0x4afb7c=_0x124919;if(!this[_0x4afb7c(0x482)])throw Error('WebGPU\x20slice\x20resources\x20are\x20unavailable.\x20WebGPU\x20切面资源不可用。');return this['sliceResources'];}[_0x124919(0x1e1)](){if(!this['axisResources'])throw Error('WebGPU\x20axis\x20resources\x20are\x20unavailable.\x20WebGPU\x20轴线资源不可用。');return this['axisResources'];}[_0x124919(0x32e)](){const _0x3446f5=_0x124919;if(!this['sceneBindGroupLayout'])throw Error(_0x3446f5(0x394));return this[_0x3446f5(0x372)];}[_0x124919(0x32d)](){const _0x2d4808=_0x124919;if(!this[_0x2d4808(0x304)])throw Error(_0x2d4808(0x3f5));return this[_0x2d4808(0x304)];}[_0x124919(0x226)](){const _0x35c10d=_0x124919;if(!this['volumeBindGroupLayout'])throw Error(_0x35c10d(0x2e5));return this[_0x35c10d(0x4a2)];}[_0x124919(0x316)](){const _0x20c6b8=_0x124919;if(!this[_0x20c6b8(0x31e)])throw Error('WebGPU\x20transfer\x20bind\x20group\x20layout\x20is\x20unavailable.\x20WebGPU\x20传递函数绑定布局不可用。');return this[_0x20c6b8(0x31e)];}[_0x124919(0x21c)](){const _0x463dc6=_0x124919;if(!this[_0x463dc6(0x1f3)])throw Error(_0x463dc6(0x468));return this[_0x463dc6(0x1f3)];}[_0x124919(0x36d)](){const _0x344cac=_0x124919;if(!this[_0x344cac(0x1e0)])throw Error(_0x344cac(0x21d));return this[_0x344cac(0x1e0)];}[_0x124919(0x2dc)](){const _0x59510b=_0x124919;if(!this[_0x59510b(0x349)])throw Error(_0x59510b(0x3ed));return this[_0x59510b(0x349)];}};const getAxis=(_0xc0e241,_0x7b6455)=>_0x7b6455==='x'?_0xc0e241[_0x124919(0x3dd)]:_0x7b6455==='y'?_0xc0e241['yAxis']:_0xc0e241[_0x124919(0x446)],clampPosition=(_0x24407b,_0x45ab00,_0x1190c9)=>{const _0x9c9577=_0x124919;if(!Number[_0x9c9577(0x2eb)](_0x1190c9))throw Error(_0x9c9577(0x2ab));let _0x12678c=getAxis(_0x24407b,_0x45ab00),_0x5b45cb=Math[_0x9c9577(0x44f)](_0x12678c[_0x9c9577(0x454)],_0x12678c[_0x9c9577(0x4b2)]),_0x40f603=Math[_0x9c9577(0x207)](_0x12678c[_0x9c9577(0x454)],_0x12678c[_0x9c9577(0x4b2)]);return Math[_0x9c9577(0x44f)](_0x40f603,Math[_0x9c9577(0x207)](_0x5b45cb,_0x1190c9));},clonePreview=_0x515f44=>_0x515f44?{..._0x515f44}:null,cloneLockedSlice=_0x1c9885=>({..._0x1c9885}),validateAxes=_0x40c55b=>{const _0x4ad23a=_0x124919;for(let _0x2627d2 of[_0x40c55b['xAxis'],_0x40c55b[_0x4ad23a(0x481)],_0x40c55b['zAxis']]){if(!Number['isFinite'](_0x2627d2['start'])||!Number[_0x4ad23a(0x2eb)](_0x2627d2[_0x4ad23a(0x4b2)]))throw Error('切面轴端点必须是有限数。');if(!(Number[_0x4ad23a(0x220)](_0x2627d2['count'])&&_0x2627d2[_0x4ad23a(0x233)]>0x0))throw Error(_0x4ad23a(0x2e6));if(_0x2627d2['count']>0x1&&_0x2627d2[_0x4ad23a(0x454)]===_0x2627d2[_0x4ad23a(0x4b2)])throw Error(_0x4ad23a(0x385));}},volumeAxisValueToNormalized=(_0x10e54a,_0x5e73cf)=>_0x10e54a[_0x124919(0x454)]===_0x10e54a['end']?0x0:(_0x5e73cf-_0x10e54a[_0x124919(0x454)])/(_0x10e54a[_0x124919(0x4b2)]-_0x10e54a['start']),normalizedToVolumeAxisValue=(_0x4ba5a4,_0x31084c)=>_0x4ba5a4[_0x124919(0x454)]+_0x31084c*(_0x4ba5a4[_0x124919(0x4b2)]-_0x4ba5a4[_0x124919(0x454)]);var SliceState=class{[_0x124919(0x492)];[_0x124919(0x2ff)]=new Set();[_0x124919(0x348)];[_0x124919(0x393)];[_0x124919(0x463)];[_0x124919(0x376)]=0x1;[_0x124919(0x3da)]=null;['slices']=[];['mode']=_0x124919(0x250);[_0x124919(0x3db)];constructor(_0x369395,_0x1aa0e7={}){const _0x49b363=_0x124919;if(validateAxes(_0x369395),this[_0x49b363(0x492)]={'xAxis':{..._0x369395[_0x49b363(0x3dd)]},'yAxis':{..._0x369395[_0x49b363(0x481)]},'zAxis':{..._0x369395['zAxis']}},this['volumeDimFactor']=_0x1aa0e7[_0x49b363(0x3db)]??0.25,this[_0x49b363(0x463)]=_0x1aa0e7[_0x49b363(0x463)]??_0x49b363(0x2ec),this[_0x49b363(0x393)]=_0x1aa0e7[_0x49b363(0x393)]??0xc,this[_0x49b363(0x348)]=_0x1aa0e7[_0x49b363(0x348)],!(this['volumeDimFactor']>=0x0&&this['volumeDimFactor']<=0x1))throw Error(_0x49b363(0x26d));if(this[_0x49b363(0x463)]!=='scene'&&this[_0x49b363(0x463)]!=='always-visible')throw Error(_0x49b363(0x4a7));if(!(Number[_0x49b363(0x220)](this[_0x49b363(0x393)])&&this[_0x49b363(0x393)]>0x0))throw Error(_0x49b363(0x225));}get[_0x124919(0x1fd)](){const _0x192fcd=_0x124919;return clonePreview(this[_0x192fcd(0x3da)]);}get[_0x124919(0x2f9)](){const _0x1eb745=_0x124919;return this[_0x1eb745(0x1c9)][_0x1eb745(0x254)](cloneLockedSlice);}get[_0x124919(0x343)](){const _0x2f041e=_0x124919;return this[_0x2f041e(0x48b)];}get['snapshot'](){const _0x5c1221=_0x124919;return{'preview':this[_0x5c1221(0x1fd)],'lockedSlices':this[_0x5c1221(0x2f9)],'toolMode':this['mode'],'volumeDimFactor':this['volumeDimFactor']};}[_0x124919(0x3a0)](_0x493e44){const _0x27aeee=_0x124919;return this[_0x27aeee(0x2ff)][_0x27aeee(0x1db)](_0x493e44),_0x493e44(this[_0x27aeee(0x4a9)]),()=>this[_0x27aeee(0x2ff)]['delete'](_0x493e44);}get[_0x124919(0x31a)](){const _0x20fd21=_0x124919;return{'xAxis':{...this[_0x20fd21(0x492)][_0x20fd21(0x3dd)]},'yAxis':{...this[_0x20fd21(0x492)][_0x20fd21(0x481)]},'zAxis':{...this[_0x20fd21(0x492)][_0x20fd21(0x446)]}};}[_0x124919(0x43a)](_0xfca7ea){const _0x4362b5=_0x124919;validateAxes(_0xfca7ea),this[_0x4362b5(0x492)]={'xAxis':{..._0xfca7ea[_0x4362b5(0x3dd)]},'yAxis':{..._0xfca7ea['yAxis']},'zAxis':{..._0xfca7ea['zAxis']}},this['currentPreview']&&(this['currentPreview'][_0x4362b5(0x34d)]=clampPosition(this['axes'],this['currentPreview'][_0x4362b5(0x247)],this[_0x4362b5(0x3da)]['position'])),this[_0x4362b5(0x1c9)]=this[_0x4362b5(0x1c9)]['map'](_0x225030=>({..._0x225030,'position':clampPosition(this[_0x4362b5(0x492)],_0x225030['axis'],_0x225030[_0x4362b5(0x34d)])})),this['notify']();}[_0x124919(0x206)](_0x3f3cb6){const _0x1f1e76=_0x124919;this[_0x1f1e76(0x48b)]!==_0x3f3cb6&&(this[_0x1f1e76(0x48b)]=_0x3f3cb6,(_0x3f3cb6===null||_0x3f3cb6!==_0x1f1e76(0x250)&&this['currentPreview']?.[_0x1f1e76(0x247)]!==_0x3f3cb6)&&(this[_0x1f1e76(0x3da)]=null),this[_0x1f1e76(0x44c)]());}[_0x124919(0x2d5)](_0x33f319,_0x515d13){const _0x4dc66e=_0x124919;if(this['mode']===null||this[_0x4dc66e(0x48b)]!==_0x4dc66e(0x250)&&this['mode']!==_0x33f319)return;let _0x5e542d=clampPosition(this[_0x4dc66e(0x492)],_0x33f319,_0x515d13);this[_0x4dc66e(0x3da)]?.[_0x4dc66e(0x247)]===_0x33f319&&this[_0x4dc66e(0x3da)][_0x4dc66e(0x34d)]===_0x5e542d||(this['currentPreview']={'axis':_0x33f319,'position':_0x5e542d},this['notify']());}[_0x124919(0x3a3)](){const _0x4d16f2=_0x124919;this[_0x4d16f2(0x3da)]&&(this[_0x4d16f2(0x3da)]=null,this[_0x4d16f2(0x44c)]());}[_0x124919(0x2b3)](_0x26e3d3=this[_0x124919(0x463)]){const _0x47b5ad=_0x124919;return this[_0x47b5ad(0x3da)]?this[_0x47b5ad(0x25f)](this[_0x47b5ad(0x3da)][_0x47b5ad(0x247)],this[_0x47b5ad(0x3da)]['position'],_0x26e3d3):null;}['lockSlice'](_0x251a5b,_0x56ecfd,_0x41dc21=this[_0x124919(0x463)]){const _0x2d775b=_0x124919;if(this['slices']['length']>=this[_0x2d775b(0x393)])return this[_0x2d775b(0x348)]?.(this['maxLockedSlices']),null;let _0x28ffa5={'id':_0x2d775b(0x1f6)+this['nextId'],'axis':_0x251a5b,'position':clampPosition(this[_0x2d775b(0x492)],_0x251a5b,_0x56ecfd),'depthMode':_0x41dc21,'visible':!0x0};return this[_0x2d775b(0x376)]+=0x1,this[_0x2d775b(0x1c9)]=[...this[_0x2d775b(0x1c9)],_0x28ffa5],this[_0x2d775b(0x44c)](),cloneLockedSlice(_0x28ffa5);}[_0x124919(0x450)](_0x51db6e,_0x460c4e){const _0x78b995=_0x124919;let _0x56eaa2=this[_0x78b995(0x1c9)][_0x78b995(0x255)](_0x4e7089=>_0x4e7089['id']===_0x51db6e);if(_0x56eaa2<0x0)return;let _0x16f0f9=this['slices'][_0x56eaa2],_0x6863e9=clampPosition(this[_0x78b995(0x492)],_0x16f0f9[_0x78b995(0x247)],_0x460c4e);_0x6863e9!==_0x16f0f9[_0x78b995(0x34d)]&&(this[_0x78b995(0x1c9)]=this[_0x78b995(0x1c9)][_0x78b995(0x254)](_0x5a77e4=>_0x5a77e4['id']===_0x51db6e?{..._0x5a77e4,'position':_0x6863e9}:_0x5a77e4),this[_0x78b995(0x44c)]());}[_0x124919(0x3e7)](_0x3f16a0){const _0x578c17=_0x124919;let _0x3c0f87=this['slices'][_0x578c17(0x430)](_0xac3f36=>_0xac3f36['id']!==_0x3f16a0);_0x3c0f87[_0x578c17(0x251)]!==this[_0x578c17(0x1c9)][_0x578c17(0x251)]&&(this[_0x578c17(0x1c9)]=_0x3c0f87,this[_0x578c17(0x44c)]());}[_0x124919(0x445)](){const _0x2e4773=_0x124919;this[_0x2e4773(0x1c9)]['length']!==0x0&&(this[_0x2e4773(0x1c9)]=[],this[_0x2e4773(0x44c)]());}[_0x124919(0x44c)](){let _0x5eb6c4=this['snapshot'];for(let _0x41b593 of this['listeners'])_0x41b593(_0x5eb6c4);}};const axisEndpoints=_0x51be95=>_0x51be95==='x'?[[0x0,0x0,0x0],[0x1,0x0,0x0]]:_0x51be95==='y'?[[0x0,0x0,0x0],[0x0,0x1,0x0]]:[[0x0,0x0,0x0],[0x0,0x0,0x1]],projectAxis=(_0x28e628,_0x50d938)=>{const _0x45343a=_0x124919;let _0x65fa1d=multiplyMatrices(_0x50d938[_0x45343a(0x3bf)],_0x50d938['modelMatrix']),[_0x1c818d,_0x150dda]=axisEndpoints(_0x28e628),_0x1d7f20=projectPointToViewport(_0x65fa1d,_0x1c818d,_0x50d938['viewportWidth'],_0x50d938[_0x45343a(0x29c)]),_0x562faa=projectPointToViewport(_0x65fa1d,_0x150dda,_0x50d938[_0x45343a(0x346)],_0x50d938[_0x45343a(0x29c)]);return!_0x1d7f20||!_0x562faa?null:{'axis':_0x28e628,'startX':_0x1d7f20[0x0],'startY':_0x1d7f20[0x1],'endX':_0x562faa[0x0],'endY':_0x562faa[0x1]};},hitProjectedAxis=(_0xb947ba,_0x379e15,_0x217e59)=>{const _0x3f2133=_0x124919;let _0xc25c78=_0xb947ba[_0x3f2133(0x266)]-_0xb947ba['startX'],_0x370f0a=_0xb947ba[_0x3f2133(0x3b7)]-_0xb947ba[_0x3f2133(0x263)],_0x3ac4b0=_0xc25c78*_0xc25c78+_0x370f0a*_0x370f0a,_0x57c91f=_0x3ac4b0===0x0?0x0:((_0x379e15-_0xb947ba[_0x3f2133(0x44a)])*_0xc25c78+(_0x217e59-_0xb947ba['startY'])*_0x370f0a)/_0x3ac4b0,_0x50e2a6=Math[_0x3f2133(0x44f)](0x1,Math[_0x3f2133(0x207)](0x0,_0x57c91f)),_0x72361=_0xb947ba[_0x3f2133(0x44a)]+_0x50e2a6*_0xc25c78,_0x558634=_0xb947ba[_0x3f2133(0x263)]+_0x50e2a6*_0x370f0a;return{'axis':_0xb947ba[_0x3f2133(0x247)],'distance':Math[_0x3f2133(0x30d)](_0x379e15-_0x72361,_0x217e59-_0x558634),'normalizedPosition':_0x50e2a6};},eventViewportPoint=(_0x370067,_0x3a89dd,_0xd938e6)=>{const _0x46e198=_0x124919;let _0x3e6e67=_0x3a89dd['getBoundingClientRect']();return[_0x3e6e67[_0x46e198(0x2ce)]===0x0?0x0:(_0x370067['clientX']-_0x3e6e67[_0x46e198(0x420)])*_0xd938e6[_0x46e198(0x346)]/_0x3e6e67[_0x46e198(0x2ce)],_0x3e6e67[_0x46e198(0x4a1)]===0x0?0x0:(_0x370067[_0x46e198(0x370)]-_0x3e6e67['top'])*_0xd938e6[_0x46e198(0x29c)]/_0x3e6e67[_0x46e198(0x4a1)]];},realAxisPosition=(_0x427c16,_0x5221cc,_0x5e5986)=>{const _0x40e136=_0x124919;let _0x45ce51=_0x427c16[_0x40e136(0x31a)];return normalizedToVolumeAxisValue(_0x5221cc==='x'?_0x45ce51['xAxis']:_0x5221cc==='y'?_0x45ce51[_0x40e136(0x481)]:_0x45ce51[_0x40e136(0x446)],_0x5e5986);};var SliceInteractionController=class{['element'];[_0x124919(0x26e)];[_0x124919(0x29b)];[_0x124919(0x3d8)];[_0x124919(0x427)];[_0x124919(0x422)];[_0x124919(0x2f6)];[_0x124919(0x33d)]=null;[_0x124919(0x26b)]=null;[_0x124919(0x356)]=!0x1;constructor(_0xff48ec,_0x3df012,_0x53959a,_0x203690={}){const _0x3d0f7b=_0x124919;this[_0x3d0f7b(0x231)]=_0xff48ec,this[_0x3d0f7b(0x26e)]=_0x3df012,this['getFrame']=_0x53959a,this[_0x3d0f7b(0x3d8)]=_0x203690[_0x3d0f7b(0x1f8)]??0xa,this[_0x3d0f7b(0x427)]=_0x203690[_0x3d0f7b(0x3fc)]??0x4,this[_0x3d0f7b(0x422)]=_0x203690[_0x3d0f7b(0x422)],this[_0x3d0f7b(0x2f6)]=_0x203690[_0x3d0f7b(0x2f6)];}[_0x124919(0x279)](){const _0x1b120c=_0x124919;this[_0x1b120c(0x356)]||(this['initialized']=!0x0,this[_0x1b120c(0x231)]['addEventListener'](_0x1b120c(0x415),this[_0x1b120c(0x318)],!0x0),this[_0x1b120c(0x231)]['addEventListener'](_0x1b120c(0x3a5),this['handlePointerMove'],!0x0),this[_0x1b120c(0x231)][_0x1b120c(0x2f4)](_0x1b120c(0x49a),this[_0x1b120c(0x1c0)],!0x0),window[_0x1b120c(0x2f4)](_0x1b120c(0x3a5),this[_0x1b120c(0x373)],!0x0),window[_0x1b120c(0x2f4)](_0x1b120c(0x2f8),this[_0x1b120c(0x3d0)],!0x0),window[_0x1b120c(0x2f4)](_0x1b120c(0x4c4),this['handlePointerUp'],!0x0));}['beginLockedSliceDrag'](_0x2a2a3c,_0x49d46e){const _0x16a571=_0x124919;let _0x42b712=this['state'][_0x16a571(0x2f9)]['find'](_0x3214f0=>_0x3214f0['id']===_0x2a2a3c);_0x42b712&&(this[_0x16a571(0x33d)]={'kind':'locked','axis':_0x42b712[_0x16a571(0x247)],'pointerId':_0x49d46e[_0x16a571(0x2df)],'sliceId':_0x2a2a3c,'startX':_0x49d46e[_0x16a571(0x476)],'startY':_0x49d46e[_0x16a571(0x370)],'moved':!0x1},this['onInteractionStart']?.(),_0x49d46e[_0x16a571(0x291)](),_0x49d46e['stopPropagation']());}[_0x124919(0x48c)](){const _0x442b2e=_0x124919;this[_0x442b2e(0x356)]&&(this[_0x442b2e(0x356)]=!0x1,this['element'][_0x442b2e(0x435)](_0x442b2e(0x415),this['handlePointerDown'],!0x0),this[_0x442b2e(0x231)][_0x442b2e(0x435)](_0x442b2e(0x3a5),this[_0x442b2e(0x381)],!0x0),this[_0x442b2e(0x231)][_0x442b2e(0x435)](_0x442b2e(0x49a),this[_0x442b2e(0x1c0)],!0x0),window[_0x442b2e(0x435)](_0x442b2e(0x3a5),this[_0x442b2e(0x373)],!0x0),window[_0x442b2e(0x435)]('pointerup',this[_0x442b2e(0x3d0)],!0x0),window[_0x442b2e(0x435)]('pointercancel',this['handlePointerUp'],!0x0),this[_0x442b2e(0x33d)]&&this[_0x442b2e(0x2f6)]?.(),this[_0x442b2e(0x33d)]=null,this[_0x442b2e(0x26b)]=null,this[_0x442b2e(0x26e)][_0x442b2e(0x3a3)]());}[_0x124919(0x401)](_0x1c79f2,_0x45395c){const _0x16507c=_0x124919;let _0x454bd7=this['getFrame']();if(!_0x454bd7)return null;let [_0x4f1db8,_0x1aade3]=eventViewportPoint(_0x1c79f2,this['element'],_0x454bd7),_0x28730d=this['state'][_0x16507c(0x343)];if(_0x28730d===null)return null;let _0x1ce941=(_0x45395c?[_0x45395c]:_0x28730d===_0x16507c(0x250)?['x','y','z']:[_0x28730d])['map'](_0x44bf9f=>projectAxis(_0x44bf9f,_0x454bd7))[_0x16507c(0x430)](_0x431580=>_0x431580!==null)['map'](_0x36f30d=>hitProjectedAxis(_0x36f30d,_0x4f1db8,_0x1aade3));if(_0x1ce941[_0x16507c(0x251)]===0x0)return null;_0x1ce941[_0x16507c(0x40e)]((_0x3a57c7,_0x298527)=>_0x3a57c7[_0x16507c(0x3ff)]-_0x298527['distance']);let _0x465e40=_0x1ce941[0x0];if(!_0x45395c&&this['previousAxis']){let _0x2adbbc=_0x1ce941[_0x16507c(0x449)](_0x25065f=>_0x25065f[_0x16507c(0x247)]===this['previousAxis']);_0x2adbbc&&_0x2adbbc[_0x16507c(0x3ff)]<=_0x465e40[_0x16507c(0x3ff)]+this[_0x16507c(0x427)]&&(_0x465e40=_0x2adbbc);}return!_0x45395c&&_0x465e40[_0x16507c(0x3ff)]>this[_0x16507c(0x3d8)]?null:_0x465e40;}[_0x124919(0x1e9)](_0x4ccd59,_0xac1d65){const _0x19f5d5=_0x124919;let _0x332d25=realAxisPosition(this[_0x19f5d5(0x26e)],_0x4ccd59['axis'],_0x4ccd59[_0x19f5d5(0x478)]);_0xac1d65?this[_0x19f5d5(0x26e)][_0x19f5d5(0x450)](_0xac1d65,_0x332d25):this[_0x19f5d5(0x26e)][_0x19f5d5(0x2d5)](_0x4ccd59[_0x19f5d5(0x247)],_0x332d25),this[_0x19f5d5(0x26b)]=_0x4ccd59[_0x19f5d5(0x247)];}['handlePointerDown']=_0x37247a=>{const _0x595040=_0x124919;if(_0x37247a['button']!==0x0||this['activePointer'])return;let _0x189b9d=this[_0x595040(0x401)](_0x37247a);_0x189b9d&&(this[_0x595040(0x1e9)](_0x189b9d),this[_0x595040(0x33d)]={'kind':'preview','axis':_0x189b9d['axis'],'pointerId':_0x37247a[_0x595040(0x2df)],'startX':_0x37247a[_0x595040(0x476)],'startY':_0x37247a[_0x595040(0x370)],'moved':!0x1},this[_0x595040(0x422)]?.(),this[_0x595040(0x231)][_0x595040(0x4a8)]?.(_0x37247a['pointerId']),_0x37247a['preventDefault'](),_0x37247a['stopPropagation']());};[_0x124919(0x381)]=_0x1ce675=>{const _0x308428=_0x124919;if(this[_0x308428(0x33d)])return;let _0x33034c=this[_0x308428(0x401)](_0x1ce675);if(!_0x33034c){this[_0x308428(0x26b)]=null,this[_0x308428(0x26e)][_0x308428(0x3a3)]();return;}this['applyHit'](_0x33034c);};['handleWindowPointerMove']=_0x22c35d=>{const _0x409639=_0x124919;let _0x174fd1=this[_0x409639(0x33d)];if(!_0x174fd1||_0x174fd1[_0x409639(0x2df)]!==_0x22c35d[_0x409639(0x2df)])return;let _0x37ea59=this[_0x409639(0x401)](_0x22c35d,_0x174fd1[_0x409639(0x247)]);_0x37ea59&&(Math['hypot'](_0x22c35d[_0x409639(0x476)]-_0x174fd1[_0x409639(0x44a)],_0x22c35d[_0x409639(0x370)]-_0x174fd1[_0x409639(0x263)])>0x4&&(_0x174fd1['moved']=!0x0),this[_0x409639(0x1e9)](_0x37ea59,_0x174fd1[_0x409639(0x456)]),_0x22c35d[_0x409639(0x291)](),_0x22c35d[_0x409639(0x2d6)]());};[_0x124919(0x3d0)]=_0x11b79c=>{const _0x8476d4=_0x124919;let _0xeccfa2=this['activePointer'];!_0xeccfa2||_0xeccfa2[_0x8476d4(0x2df)]!==_0x11b79c[_0x8476d4(0x2df)]||(_0xeccfa2['kind']===_0x8476d4(0x1fd)&&!_0xeccfa2['moved']&&this['state'][_0x8476d4(0x2b3)](),this[_0x8476d4(0x231)][_0x8476d4(0x3fe)]?.(_0x11b79c['pointerId'])&&this[_0x8476d4(0x231)][_0x8476d4(0x3d9)](_0x11b79c[_0x8476d4(0x2df)]),this[_0x8476d4(0x33d)]=null,this[_0x8476d4(0x2f6)]?.(),_0x11b79c[_0x8476d4(0x291)](),_0x11b79c[_0x8476d4(0x2d6)]());};[_0x124919(0x1c0)]=()=>{const _0x268f7f=_0x124919;this[_0x268f7f(0x33d)]||this[_0x268f7f(0x26e)][_0x268f7f(0x3a3)]();};};const axisLabel=_0x10e935=>_0x10e935[_0x124919(0x46e)](),defaultFormatPosition=(_0x307141,_0x547da8)=>axisLabel(_0x307141)+'\x20'+Number(_0x547da8[_0x124919(0x3f7)](0x4)),getAxisDefinition=(_0x3143fd,_0xb1a8f2)=>{const _0x20264b=_0x124919;let _0x49bfc6=_0x3143fd[_0x20264b(0x31a)];return _0xb1a8f2==='x'?_0x49bfc6['xAxis']:_0xb1a8f2==='y'?_0x49bfc6[_0x20264b(0x481)]:_0x49bfc6[_0x20264b(0x446)];},markerModelPoint=(_0x18b1e0,_0x290e03)=>{const _0x1de4ae=_0x124919;let _0x37a2fd=volumeAxisValueToNormalized(getAxisDefinition(_0x18b1e0,_0x290e03[_0x1de4ae(0x247)]),_0x290e03[_0x1de4ae(0x34d)]);return _0x290e03[_0x1de4ae(0x247)]==='x'?[_0x37a2fd,0x0,0x0]:_0x290e03[_0x1de4ae(0x247)]==='y'?[0x0,_0x37a2fd,0x0]:[0x0,0x0,_0x37a2fd];},applyMarkerBaseStyle=_0x36d083=>{const _0x22a8f7=_0x124919;_0x36d083[_0x22a8f7(0x289)]['position']=_0x22a8f7(0x3a2),_0x36d083['style'][_0x22a8f7(0x2e7)]='1',_0x36d083[_0x22a8f7(0x289)][_0x22a8f7(0x1c4)]=_0x22a8f7(0x3ba),_0x36d083[_0x22a8f7(0x289)]['alignItems']=_0x22a8f7(0x30a),_0x36d083[_0x22a8f7(0x289)]['gap']='4px',_0x36d083[_0x22a8f7(0x289)][_0x22a8f7(0x35b)]=_0x22a8f7(0x2ac),_0x36d083[_0x22a8f7(0x289)]['border']=_0x22a8f7(0x382),_0x36d083[_0x22a8f7(0x289)]['borderRadius']=_0x22a8f7(0x496),_0x36d083[_0x22a8f7(0x289)]['color']=_0x22a8f7(0x38c),_0x36d083['style'][_0x22a8f7(0x21a)]=_0x22a8f7(0x236),_0x36d083['style']['font']=_0x22a8f7(0x42f),_0x36d083[_0x22a8f7(0x289)][_0x22a8f7(0x3b5)]=_0x22a8f7(0x23c),_0x36d083[_0x22a8f7(0x289)][_0x22a8f7(0x342)]=_0x22a8f7(0x202),_0x36d083['style']['userSelect']=_0x22a8f7(0x2d1),_0x36d083[_0x22a8f7(0x289)][_0x22a8f7(0x418)]='none';},createDeleteButton=()=>{const _0x3bc9bc=_0x124919;let _0x568d6c=document[_0x3bc9bc(0x436)](_0x3bc9bc(0x244));return _0x568d6c[_0x3bc9bc(0x457)]=_0x3bc9bc(0x244),_0x568d6c[_0x3bc9bc(0x1c2)]='×',_0x568d6c[_0x3bc9bc(0x34b)](_0x3bc9bc(0x3f6),'删除切面'),_0x568d6c[_0x3bc9bc(0x289)]['padding']=_0x3bc9bc(0x459),_0x568d6c[_0x3bc9bc(0x289)][_0x3bc9bc(0x1d4)]='0',_0x568d6c[_0x3bc9bc(0x289)]['color']=_0x3bc9bc(0x410),_0x568d6c[_0x3bc9bc(0x289)][_0x3bc9bc(0x21a)]=_0x3bc9bc(0x325),_0x568d6c[_0x3bc9bc(0x289)][_0x3bc9bc(0x46a)]=_0x3bc9bc(0x2b6),_0x568d6c;};var SliceMarkerOverlay=class{[_0x124919(0x2a0)];[_0x124919(0x26e)];[_0x124919(0x29b)];['interactionController'];[_0x124919(0x367)];[_0x124919(0x215)]=new Map();[_0x124919(0x2ea)];[_0x124919(0x366)];[_0x124919(0x210)]=null;constructor(_0x48a6d6,_0x3cc18a,_0x19ddaf,_0x4a8c02={}){const _0x30dd69=_0x124919;this[_0x30dd69(0x2a0)]=_0x48a6d6,this['state']=_0x3cc18a,this[_0x30dd69(0x29b)]=_0x19ddaf,this[_0x30dd69(0x34f)]=_0x4a8c02[_0x30dd69(0x34f)],this[_0x30dd69(0x367)]=_0x4a8c02['formatPosition']??defaultFormatPosition,this[_0x30dd69(0x2ea)]=_0x48a6d6[_0x30dd69(0x289)][_0x30dd69(0x34d)],getComputedStyle(_0x48a6d6)[_0x30dd69(0x34d)]===_0x30dd69(0x3c9)&&(_0x48a6d6[_0x30dd69(0x289)]['position']=_0x30dd69(0x361)),this[_0x30dd69(0x366)]=_0x3cc18a[_0x30dd69(0x3a0)](()=>this[_0x30dd69(0x216)]());}[_0x124919(0x216)](){const _0xaa0b40=_0x124919;let _0x501e44=this['state'][_0xaa0b40(0x4a9)];this[_0xaa0b40(0x295)](_0x501e44[_0xaa0b40(0x1fd)]),this['syncLockedMarkers'](_0x501e44[_0xaa0b40(0x2f9)]);let _0x5a7b24=this[_0xaa0b40(0x29b)]();if(!_0x5a7b24){this[_0xaa0b40(0x43d)]();return;}_0x501e44[_0xaa0b40(0x1fd)]&&this[_0xaa0b40(0x210)]&&this['positionMarker'](this[_0xaa0b40(0x210)],_0x501e44[_0xaa0b40(0x1fd)],_0x5a7b24);for(let _0x51a730 of _0x501e44[_0xaa0b40(0x2f9)]){let _0x1f9edb=this[_0xaa0b40(0x215)][_0xaa0b40(0x4ab)](_0x51a730['id']);_0x1f9edb&&this[_0xaa0b40(0x2cf)](_0x1f9edb,_0x51a730,_0x5a7b24);}}['destroy'](){const _0x1310d2=_0x124919;this[_0x1310d2(0x366)](),this[_0x1310d2(0x210)]?.[_0x1310d2(0x298)](),this[_0x1310d2(0x210)]=null;for(let _0x25dfa6 of this['markers'][_0x1310d2(0x421)]())_0x25dfa6[_0x1310d2(0x298)]();this[_0x1310d2(0x215)][_0x1310d2(0x320)](),this[_0x1310d2(0x2a0)][_0x1310d2(0x289)][_0x1310d2(0x34d)]=this[_0x1310d2(0x2ea)];}[_0x124919(0x295)](_0x322e3){const _0x122a21=_0x124919;if(!_0x322e3){this[_0x122a21(0x210)]?.['remove'](),this[_0x122a21(0x210)]=null;return;}this[_0x122a21(0x210)]||(this[_0x122a21(0x210)]=document[_0x122a21(0x436)](_0x122a21(0x1fa)),applyMarkerBaseStyle(this[_0x122a21(0x210)]),this[_0x122a21(0x210)][_0x122a21(0x289)][_0x122a21(0x21e)]=_0x122a21(0x2d1),this[_0x122a21(0x210)][_0x122a21(0x289)][_0x122a21(0x3aa)]=_0x122a21(0x211),this[_0x122a21(0x2a0)]['append'](this['previewMarker'])),this['previewMarker'][_0x122a21(0x1c2)]=this['formatPosition'](_0x322e3[_0x122a21(0x247)],_0x322e3['position']);}[_0x124919(0x1dc)](_0x18e202){const _0x2da030=_0x124919;let _0x1c8659=new Set(_0x18e202['map'](_0x2be83a=>_0x2be83a['id']));for(let [_0x2b7611,_0x27979e]of this['markers'])_0x1c8659[_0x2da030(0x40d)](_0x2b7611)||(_0x27979e[_0x2da030(0x298)](),this[_0x2da030(0x215)][_0x2da030(0x371)](_0x2b7611));for(let _0x28f426 of _0x18e202){let _0x4cb4ad=this[_0x2da030(0x215)][_0x2da030(0x4ab)](_0x28f426['id']);_0x4cb4ad||(_0x4cb4ad=this[_0x2da030(0x277)](_0x28f426['id']),this['markers'][_0x2da030(0x49e)](_0x28f426['id'],_0x4cb4ad),this[_0x2da030(0x2a0)]['append'](_0x4cb4ad));let _0x5e5e20=_0x4cb4ad[_0x2da030(0x40a)];_0x5e5e20&&(_0x5e5e20['textContent']=this[_0x2da030(0x367)](_0x28f426[_0x2da030(0x247)],_0x28f426['position']));}}[_0x124919(0x277)](_0x56cb88){const _0x186fc3=_0x124919;let _0x353b90=document['createElement'](_0x186fc3(0x1fa));applyMarkerBaseStyle(_0x353b90),_0x353b90[_0x186fc3(0x289)][_0x186fc3(0x46a)]='grab',_0x353b90[_0x186fc3(0x474)](document[_0x186fc3(0x1c8)](''));let _0x537c9b=createDeleteButton();return _0x537c9b[_0x186fc3(0x2f4)]('pointerdown',_0x58e130=>_0x58e130[_0x186fc3(0x2d6)]()),_0x537c9b['addEventListener'](_0x186fc3(0x2e9),_0x4c5fdf=>{const _0x3b2427=_0x186fc3;_0x4c5fdf['stopPropagation'](),this[_0x3b2427(0x26e)]['removeSlice'](_0x56cb88);}),_0x353b90[_0x186fc3(0x2f4)](_0x186fc3(0x415),_0x2006e4=>this[_0x186fc3(0x34f)]?.[_0x186fc3(0x472)](_0x56cb88,_0x2006e4)),_0x353b90[_0x186fc3(0x474)](_0x537c9b),_0x353b90;}['positionMarker'](_0x4236a8,_0x46859d,_0x43f29e){const _0x187201=_0x124919;let _0x306661=projectPointToViewport(multiplyMatrices(_0x43f29e['viewProjectionMatrix'],_0x43f29e[_0x187201(0x240)]),markerModelPoint(this[_0x187201(0x26e)],_0x46859d),_0x43f29e[_0x187201(0x346)],_0x43f29e[_0x187201(0x29c)]);if(!_0x306661||_0x306661[0x2]<0x0||_0x306661[0x2]>0x1){_0x4236a8[_0x187201(0x289)]['display']=_0x187201(0x2d1);return;}_0x4236a8[_0x187201(0x289)][_0x187201(0x1c4)]=_0x187201(0x3ba),_0x4236a8[_0x187201(0x289)]['left']=_0x306661[0x0]+'px',_0x4236a8[_0x187201(0x289)][_0x187201(0x485)]=_0x306661[0x1]+'px';}['hideAllMarkers'](){const _0x41c755=_0x124919;this[_0x41c755(0x210)]&&(this[_0x41c755(0x210)][_0x41c755(0x289)][_0x41c755(0x1c4)]=_0x41c755(0x2d1));for(let _0x4e1a61 of this[_0x41c755(0x215)][_0x41c755(0x421)]())_0x4e1a61[_0x41c755(0x289)]['display']=_0x41c755(0x2d1);}};const clamp=(_0x41928e,_0x49e4bb)=>Math[_0x124919(0x44f)](_0x49e4bb-0x1,Math['max'](0x0,_0x41928e)),createPhysicalBrickValues=(_0x4771f8,_0x53573d,_0x433e05,_0x294365)=>{const _0x4ac769=_0x124919;validateVolumeChunk(_0x4771f8,_0x294365,_0x433e05[_0x4ac769(0x1f7)]);let _0x26f57a=_0x53573d['width']+_0x53573d[_0x4ac769(0x43f)]*0x2,_0x5240b6=_0x53573d[_0x4ac769(0x4a1)]+_0x53573d[_0x4ac769(0x43f)]*0x2,_0x79ec41=_0x53573d[_0x4ac769(0x257)]+_0x53573d[_0x4ac769(0x43f)]*0x2,_0x127695=new Float32Array(_0x26f57a*_0x5240b6*_0x79ec41);for(let _0x241a48=0x0;_0x241a48<_0x79ec41;_0x241a48+=0x1){let _0x497bab=clamp(_0x433e05[_0x4ac769(0x36e)][_0x4ac769(0x3a6)]+_0x241a48-_0x53573d[_0x4ac769(0x43f)],_0x4771f8[_0x4ac769(0x446)][_0x4ac769(0x233)])-_0x294365[_0x4ac769(0x27a)][_0x4ac769(0x3a6)];for(let _0x130000=0x0;_0x130000<_0x5240b6;_0x130000+=0x1){let _0xd15029=clamp(_0x433e05['coreRange'][_0x4ac769(0x24a)]+_0x130000-_0x53573d['halo'],_0x4771f8['yAxis'][_0x4ac769(0x233)])-_0x294365[_0x4ac769(0x27a)][_0x4ac769(0x24a)];for(let _0x2f0414=0x0;_0x2f0414<_0x26f57a;_0x2f0414+=0x1){let _0x1ab77a=clamp(_0x433e05[_0x4ac769(0x36e)]['xStart']+_0x2f0414-_0x53573d[_0x4ac769(0x43f)],_0x4771f8[_0x4ac769(0x3dd)]['count'])-_0x294365[_0x4ac769(0x27a)][_0x4ac769(0x377)];_0x127695[(_0x241a48*_0x5240b6+_0x130000)*_0x26f57a+_0x2f0414]=_0x294365['values'][(_0x497bab*_0x294365[_0x4ac769(0x4a1)]+_0xd15029)*_0x294365[_0x4ac769(0x2ce)]+_0x1ab77a];}}}return _0x127695;},normalizeColorStops=_0x4c90bf=>{const _0x33e2ba=_0x124919;if(_0x4c90bf[_0x33e2ba(0x251)]===0x0)throw Error(_0x33e2ba(0x1c3));return _0x4c90bf[_0x33e2ba(0x254)]((_0x35cd2b,_0x3beb76)=>{const _0x4bcb6d=_0x33e2ba;if(Number[_0x4bcb6d(0x4c3)](_0x35cd2b[_0x4bcb6d(0x44f)])||Number[_0x4bcb6d(0x4c3)](_0x35cd2b[_0x4bcb6d(0x207)]))throw TypeError('第'+(_0x3beb76+0x1)+'个色标范围不能是NaN');if(_0x35cd2b['min']>=_0x35cd2b[_0x4bcb6d(0x207)])throw Error('第'+(_0x3beb76+0x1)+'个色标范围的\x20min\x20必须小于\x20max');return{'min':_0x35cd2b[_0x4bcb6d(0x44f)],'max':_0x35cd2b[_0x4bcb6d(0x207)],'color':parseRasterColor(_0x35cd2b[_0x4bcb6d(0x2c3)])};})[_0x33e2ba(0x40e)]((_0xc13158,_0x5e572b)=>_0xc13158[_0x33e2ba(0x44f)]-_0x5e572b[_0x33e2ba(0x44f)]);},parseRasterColor=_0x1ef284=>{const _0x216518=_0x124919;let _0x3fec57=_0x1ef284[_0x216518(0x355)]()['toLowerCase']();if(_0x3fec57[_0x216518(0x1bb)]('#'))return parseHexColor(_0x3fec57);if(_0x3fec57[_0x216518(0x1bb)](_0x216518(0x447)))return parseRgbColor(_0x3fec57,!0x0);if(_0x3fec57[_0x216518(0x1bb)](_0x216518(0x3ce)))return parseRgbColor(_0x3fec57,!0x1);throw Error('不支持的颜色格式:\x20'+_0x1ef284);},parseHexColor=_0x4aecde=>{const _0x43b8ff=_0x124919;if(_0x4aecde[_0x43b8ff(0x251)]===0x4)return normalizeRgb(Number[_0x43b8ff(0x3d7)](''+_0x4aecde[0x1]+_0x4aecde[0x1],0x10),Number[_0x43b8ff(0x3d7)](''+_0x4aecde[0x2]+_0x4aecde[0x2],0x10),Number[_0x43b8ff(0x3d7)](''+_0x4aecde[0x3]+_0x4aecde[0x3],0x10),0x1);if(_0x4aecde[_0x43b8ff(0x251)]===0x7)return normalizeRgb(Number['parseInt'](_0x4aecde[_0x43b8ff(0x296)](0x1,0x3),0x10),Number[_0x43b8ff(0x3d7)](_0x4aecde[_0x43b8ff(0x296)](0x3,0x5),0x10),Number[_0x43b8ff(0x3d7)](_0x4aecde[_0x43b8ff(0x296)](0x5,0x7),0x10),0x1);throw Error('不支持的\x20hex\x20颜色格式:\x20'+_0x4aecde);},parseRgbColor=(_0x25ec98,_0x303255)=>{const _0x54b599=_0x124919;let _0x44c910=_0x25ec98['match'](/^rgba?\(([^)]+)\)$/);if(!_0x44c910)throw Error(_0x54b599(0x335)+_0x25ec98);let _0x1ead33=_0x44c910[0x1][_0x54b599(0x305)](',')['map'](_0x2e67cf=>_0x2e67cf[_0x54b599(0x355)]()),_0x1b8db7=_0x303255?0x4:0x3;if(_0x1ead33[_0x54b599(0x251)]!==_0x1b8db7)throw Error(_0x54b599(0x223)+_0x25ec98);return normalizeRgb(Number(_0x1ead33[0x0]),Number(_0x1ead33[0x1]),Number(_0x1ead33[0x2]),_0x303255?Number(_0x1ead33[0x3]):0x1);},normalizeRgb=(_0x14f4af,_0xaf71c2,_0x97bf97,_0xef9576)=>{const _0x524a42=_0x124919;if(!isValidRgbChannel(_0x14f4af)||!isValidRgbChannel(_0xaf71c2)||!isValidRgbChannel(_0x97bf97))throw Error(_0x524a42(0x46c));if(!Number['isFinite'](_0xef9576)||_0xef9576<0x0||_0xef9576>0x1)throw Error('Alpha\x20颜色通道必须在0\x20~\x201之间');return[_0x14f4af/0xff,_0xaf71c2/0xff,_0x97bf97/0xff,_0xef9576];},isValidRgbChannel=_0x49c80b=>Number[_0x124919(0x2eb)](_0x49c80b)&&_0x49c80b>=0x0&&_0x49c80b<=0xff,validateStops=_0x45fa2c=>{const _0x5d28f2=_0x124919;if(_0x45fa2c[_0x5d28f2(0x251)]===0x0)throw Error(_0x5d28f2(0x3cb));let _0x4cc0e8=-0x1/0x0;for(let _0x2e6759 of _0x45fa2c){if(!Number[_0x5d28f2(0x2eb)](_0x2e6759[_0x5d28f2(0x36c)])||_0x2e6759[_0x5d28f2(0x36c)]<=_0x4cc0e8)throw Error(_0x5d28f2(0x323));if(!Number[_0x5d28f2(0x2eb)](_0x2e6759[_0x5d28f2(0x3aa)])||_0x2e6759['opacity']<0x0||_0x2e6759[_0x5d28f2(0x3aa)]>0x1)throw Error(_0x5d28f2(0x498));_0x4cc0e8=_0x2e6759[_0x5d28f2(0x36c)];}},findTransferInterval=(_0x45fbb0,_0x2f6508)=>{const _0x329711=_0x124919;if(_0x45fbb0<=_0x2f6508[0x0])return[0x0,0x0,0x0];for(let _0x373056=0x1;_0x373056<_0x2f6508[_0x329711(0x251)];_0x373056+=0x1)if(_0x45fbb0<=_0x2f6508[_0x373056]){let _0x536018=_0x2f6508[_0x373056]-_0x2f6508[_0x373056-0x1];return[_0x373056-0x1,_0x373056,_0x536018===0x0?0x0:Math[_0x329711(0x44f)](0x1,Math[_0x329711(0x207)](0x0,(_0x45fbb0-_0x2f6508[_0x373056-0x1])/_0x536018))];}let _0x54657a=_0x2f6508[_0x329711(0x251)]-0x1;return[_0x54657a,_0x54657a,0x0];},prepareWebgpuVolumeTransfer=(_0x2e62fa,_0x2e3889)=>{const _0x466080=_0x124919;validateStops(_0x2e3889);let _0x2e70b5=normalizeColorStops([..._0x2e62fa]);return{'colorStops':_0x2e70b5[_0x466080(0x30b)]((_0x64ef72,_0x692a4f)=>{const _0x4695b7=_0x466080;let _0x32452a=_0x2e70b5[Math['min'](_0x692a4f+0x1,_0x2e70b5[_0x4695b7(0x251)]-0x1)]['color'];return[{'value':_0x64ef72[_0x4695b7(0x44f)],'color':_0x64ef72[_0x4695b7(0x2c3)]},{'value':_0x64ef72['max'],'color':_0x32452a}];}),'opacityStops':_0x2e3889['map'](_0x19d80e=>({..._0x19d80e}))};},sampleVolumeTransferColor=(_0x996402,_0x41ee25,_0x2a696b,_0x702e08)=>{const _0x48aae2=_0x124919;if(!Number[_0x48aae2(0x2eb)](_0x996402))return[0x0,0x0,0x0,0x0];let [_0x4f5df4,_0x5f2f0f,_0x3fd46b]=findTransferInterval(_0x996402,_0x41ee25['map'](_0x19397b=>_0x19397b[_0x48aae2(0x36c)])),_0x3cbe67=_0x41ee25[_0x4f5df4],_0x11ca68=_0x41ee25[_0x5f2f0f],_0x4e49b0=_0x702e08==='step'?0x0:_0x3fd46b;return[_0x3cbe67[_0x48aae2(0x2c3)][0x0]+(_0x11ca68['color'][0x0]-_0x3cbe67[_0x48aae2(0x2c3)][0x0])*_0x4e49b0,_0x3cbe67[_0x48aae2(0x2c3)][0x1]+(_0x11ca68[_0x48aae2(0x2c3)][0x1]-_0x3cbe67[_0x48aae2(0x2c3)][0x1])*_0x4e49b0,_0x3cbe67['color'][0x2]+(_0x11ca68[_0x48aae2(0x2c3)][0x2]-_0x3cbe67['color'][0x2])*_0x4e49b0,(_0x3cbe67['color'][0x3]+(_0x11ca68['color'][0x3]-_0x3cbe67[_0x48aae2(0x2c3)][0x3])*_0x4e49b0)*_0x2a696b];},sampleVolumeTransferOpacity=(_0xbccb11,_0x3df969,_0x47e066)=>{const _0x27ee94=_0x124919;if(!Number[_0x27ee94(0x2eb)](_0xbccb11))return 0x0;let [_0x98602,_0x2ddff6,_0x366b5d]=findTransferInterval(_0xbccb11,_0x3df969[_0x27ee94(0x254)](_0x407bcb=>_0x407bcb['value'])),_0xbc1b41=_0x47e066===_0x27ee94(0x3e9)?0x0:_0x366b5d;return _0x3df969[_0x98602][_0x27ee94(0x3aa)]+(_0x3df969[_0x2ddff6]['opacity']-_0x3df969[_0x98602][_0x27ee94(0x3aa)])*_0xbc1b41;},DEFAULT_CAMERA={'position':[1.4,1.2,2.1],'target':[0.5,0.5,0.5],'up':[0x0,0x1,0x0],'projection':{'type':'perspective','fovYDegrees':0x2d,'near':0.01,'far':0x64}},IDENTITY_MATRIX=[0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1],clamp01=_0x390351=>Math[_0x124919(0x44f)](0x1,Math['max'](0x0,_0x390351)),qualityStepLength=_0x2a8488=>_0x2a8488===_0x124919(0x22e)?0.012:_0x2a8488===_0x124919(0x386)?0.0025:_0x2a8488===_0x124919(0x1ec)?0.005:0.006,qualityUploadCount=_0x24e25a=>_0x24e25a===_0x124919(0x22e)?0x8:_0x24e25a===_0x124919(0x386)?0x2:0x4,nextAutoQuality=(_0x33225d,_0x4c3a2e)=>_0x4c3a2e>0x18?_0x33225d===_0x124919(0x386)?_0x124919(0x1ec):_0x124919(0x22e):_0x4c3a2e<0xe?_0x33225d===_0x124919(0x22e)?_0x124919(0x1ec):_0x124919(0x386):_0x33225d,validatePositiveOption=(_0x5a5f61,_0x366f4c)=>{const _0xe263ce=_0x124919;if(!Number['isFinite'](_0x5a5f61)||_0x5a5f61<=0x0)throw Error(_0x366f4c+_0xe263ce(0x2fb)+_0x366f4c+_0xe263ce(0x350));return _0x5a5f61;},normalizeClipBox=(_0x5a1aa2,_0x2b059b)=>{const _0x2ebfb4=_0x124919;if(!_0x2b059b)return{'minimum':[0x0,0x0,0x0],'maximum':[0x1,0x1,0x1]};let _0x2ee72d=clamp01(volumeAxisValueToNormalized(_0x5a1aa2[_0x2ebfb4(0x413)]['xAxis'],_0x2b059b[_0x2ebfb4(0x37a)])),_0x2c8509=clamp01(volumeAxisValueToNormalized(_0x5a1aa2[_0x2ebfb4(0x413)][_0x2ebfb4(0x3dd)],_0x2b059b[_0x2ebfb4(0x4c9)])),_0x4c68d0=clamp01(volumeAxisValueToNormalized(_0x5a1aa2[_0x2ebfb4(0x413)][_0x2ebfb4(0x481)],_0x2b059b[_0x2ebfb4(0x222)])),_0x4c7d11=clamp01(volumeAxisValueToNormalized(_0x5a1aa2[_0x2ebfb4(0x413)][_0x2ebfb4(0x481)],_0x2b059b[_0x2ebfb4(0x1c7)])),_0x22195a=clamp01(volumeAxisValueToNormalized(_0x5a1aa2[_0x2ebfb4(0x413)][_0x2ebfb4(0x446)],_0x2b059b[_0x2ebfb4(0x205)])),_0x5a5b40=clamp01(volumeAxisValueToNormalized(_0x5a1aa2[_0x2ebfb4(0x413)][_0x2ebfb4(0x446)],_0x2b059b[_0x2ebfb4(0x2ba)]));return{'minimum':[Math[_0x2ebfb4(0x44f)](_0x2ee72d,_0x2c8509),Math['min'](_0x4c68d0,_0x4c7d11),Math[_0x2ebfb4(0x44f)](_0x22195a,_0x5a5b40)],'maximum':[Math['max'](_0x2ee72d,_0x2c8509),Math[_0x2ebfb4(0x207)](_0x4c68d0,_0x4c7d11),Math['max'](_0x22195a,_0x5a5b40)]};},createAxesMesh=()=>({'id':'volume-axes','topology':'line-list','depthMode':_0x124919(0x38a),'vertices':new Float32Array([0x0,0x0,0x0,0x1,0.2,0.2,0x1,0x1,0x0,0x0,0x1,0.2,0.2,0x1,0x0,0x0,0x0,0.2,0x1,0.2,0x1,0x0,0x1,0x0,0.2,0x1,0.2,0x1,0x0,0x0,0x0,0.2,0.5,0x1,0x1,0x0,0x0,0x1,0.2,0.5,0x1,0x1])}),createBoundsMesh=()=>{const _0x489c19=_0x124919;let _0x2f5ec8=[0.1,0.53,0.56,0.62],_0x276497=[[0x0,0x0,0x0],[0x1,0x0,0x0],[0x0,0x1,0x0],[0x1,0x1,0x0],[0x0,0x0,0x1],[0x1,0x0,0x1],[0x0,0x1,0x1],[0x1,0x1,0x1]],_0x26b58b=[[0x0,0x1],[0x0,0x2],[0x1,0x3],[0x2,0x3],[0x4,0x5],[0x4,0x6],[0x5,0x7],[0x6,0x7],[0x0,0x4],[0x1,0x5],[0x2,0x6],[0x3,0x7]],_0x3250fa=new Float32Array(_0x26b58b[_0x489c19(0x251)]*0x2*0x7),_0x57da73=0x0;for(let _0x444c64 of _0x26b58b)for(let _0x16b398 of _0x444c64)_0x3250fa[_0x489c19(0x49e)]([..._0x276497[_0x16b398],..._0x2f5ec8],_0x57da73),_0x57da73+=0x7;return{'id':'volume-bounds','topology':_0x489c19(0x275),'depthMode':_0x489c19(0x2ec),'vertices':_0x3250fa};},createProfileSceneMesh=(_0x5ad1ee,_0x74adb2,_0x14ee47,_0x2c4e81)=>{const _0x44b2bb=_0x124919;let _0xe7a48a=new Float32Array(_0x5ad1ee[_0x44b2bb(0x438)][_0x44b2bb(0x251)]*0x7);for(let _0x31287f=0x0;_0x31287f<_0x5ad1ee[_0x44b2bb(0x438)][_0x44b2bb(0x251)];_0x31287f+=0x1){let _0x1228ec=_0x5ad1ee[_0x44b2bb(0x438)][_0x31287f],_0x5a4422=_0x1228ec*0x3,_0x41e590=sampleVolumeTransferOpacity(_0x5ad1ee[_0x44b2bb(0x421)][_0x1228ec],_0x14ee47,_0x2c4e81),_0x32398b=sampleVolumeTransferColor(_0x5ad1ee[_0x44b2bb(0x421)][_0x1228ec],_0x74adb2,_0x5ad1ee[_0x44b2bb(0x3aa)]*_0x41e590,_0x2c4e81);_0xe7a48a[_0x44b2bb(0x49e)]([_0x5ad1ee[_0x44b2bb(0x424)][_0x5a4422],_0x5ad1ee[_0x44b2bb(0x424)][_0x5a4422+0x1],_0x5ad1ee['positions'][_0x5a4422+0x2],_0x32398b[0x0]*_0x32398b[0x3],_0x32398b[0x1]*_0x32398b[0x3],_0x32398b[0x2]*_0x32398b[0x3],_0x32398b[0x3]],_0x31287f*0x7);}return{'id':_0x5ad1ee['id'],'topology':_0x44b2bb(0x1ff),'depthMode':_0x5ad1ee[_0x44b2bb(0x463)],'vertices':_0xe7a48a};},descriptorDistance=(_0x536629,_0x512858,_0x19b951)=>{const _0x18f354=_0x124919;let _0x548857=(_0x536629['coordinate']['x']+0.5)/_0x512858[_0x18f354(0x37f)],_0x172043=(_0x536629[_0x18f354(0x353)]['y']+0.5)/_0x512858[_0x18f354(0x409)],_0x54d8ca=(_0x536629['coordinate']['z']+0.5)/_0x512858[_0x18f354(0x4be)];return Math['hypot'](_0x548857-_0x19b951[_0x18f354(0x34d)][0x0],_0x172043-_0x19b951[_0x18f354(0x34d)][0x1],_0x54d8ca-_0x19b951[_0x18f354(0x34d)][0x2]);},descriptorLogicalIndex=(_0x10cea5,_0x4f4e63)=>(_0x10cea5[_0x124919(0x353)]['z']*_0x4f4e63[_0x124919(0x409)]+_0x10cea5[_0x124919(0x353)]['y'])*_0x4f4e63[_0x124919(0x37f)]+_0x10cea5[_0x124919(0x353)]['x'],descriptorContainsSlice=(_0x23c33,_0x5072b7,_0x15bd0b,_0x1da9fa)=>{const _0x54d4c8=_0x124919;let _0x19f5d3=_0x15bd0b==='x'?{'start':_0x23c33['coreRange'][_0x54d4c8(0x377)],'count':_0x23c33[_0x54d4c8(0x36e)]['xCount'],'size':_0x5072b7[_0x54d4c8(0x413)][_0x54d4c8(0x3dd)][_0x54d4c8(0x233)]}:_0x15bd0b==='y'?{'start':_0x23c33[_0x54d4c8(0x36e)]['levelStart'],'count':_0x23c33[_0x54d4c8(0x36e)][_0x54d4c8(0x3f0)],'size':_0x5072b7[_0x54d4c8(0x413)][_0x54d4c8(0x481)][_0x54d4c8(0x233)]}:{'start':_0x23c33[_0x54d4c8(0x36e)][_0x54d4c8(0x3a6)],'count':_0x23c33[_0x54d4c8(0x36e)][_0x54d4c8(0x4a0)],'size':_0x5072b7[_0x54d4c8(0x413)][_0x54d4c8(0x446)][_0x54d4c8(0x233)]};return _0x1da9fa>=_0x19f5d3[_0x54d4c8(0x454)]/_0x19f5d3[_0x54d4c8(0x4b8)]&&_0x1da9fa<=(_0x19f5d3['start']+_0x19f5d3[_0x54d4c8(0x233)])/_0x19f5d3[_0x54d4c8(0x4b8)];},descriptorContainsProfile=(_0x437d42,_0x55b351,_0xa44716)=>{const _0x2c3ac7=_0x124919;let _0x35000e=_0x437d42['coreRange']['xStart']/_0x55b351[_0x2c3ac7(0x413)]['xAxis'][_0x2c3ac7(0x233)],_0x51221e=(_0x437d42[_0x2c3ac7(0x36e)][_0x2c3ac7(0x377)]+_0x437d42[_0x2c3ac7(0x36e)]['xCount'])/_0x55b351[_0x2c3ac7(0x413)][_0x2c3ac7(0x3dd)][_0x2c3ac7(0x233)],_0x1d4058=_0x437d42[_0x2c3ac7(0x36e)][_0x2c3ac7(0x24a)]/_0x55b351['metadata']['yAxis'][_0x2c3ac7(0x233)],_0x5e689d=(_0x437d42[_0x2c3ac7(0x36e)]['levelStart']+_0x437d42['coreRange'][_0x2c3ac7(0x3f0)])/_0x55b351[_0x2c3ac7(0x413)][_0x2c3ac7(0x481)][_0x2c3ac7(0x233)],_0x1c70a6=_0x437d42[_0x2c3ac7(0x36e)][_0x2c3ac7(0x3a6)]/_0x55b351['metadata'][_0x2c3ac7(0x446)][_0x2c3ac7(0x233)],_0x32ccbb=(_0x437d42[_0x2c3ac7(0x36e)]['sourceYStart']+_0x437d42[_0x2c3ac7(0x36e)][_0x2c3ac7(0x4a0)])/_0x55b351[_0x2c3ac7(0x413)][_0x2c3ac7(0x446)]['count'];return _0xa44716['some'](_0x2ccf24=>{const _0x18616c=_0x2c3ac7;let _0xf0922=volumeAxisValueToNormalized(_0x55b351[_0x18616c(0x413)]['yAxis'],_0x2ccf24['heights'][0x0]),_0x131fd1=volumeAxisValueToNormalized(_0x55b351['metadata'][_0x18616c(0x481)],_0x2ccf24[_0x18616c(0x3bd)][_0x2ccf24[_0x18616c(0x3bd)]['length']-0x1]);if(Math[_0x18616c(0x207)](_0xf0922,_0x131fd1)<_0x1d4058||Math['min'](_0xf0922,_0x131fd1)>_0x5e689d)return!0x1;for(let _0x47be1b=0x0;_0x47be1b<_0x2ccf24[_0x18616c(0x30e)][_0x18616c(0x251)];_0x47be1b+=0x2){let _0x971aaf=volumeAxisValueToNormalized(_0x55b351[_0x18616c(0x413)][_0x18616c(0x3dd)],_0x2ccf24[_0x18616c(0x30e)][_0x47be1b]),_0x471e75=volumeAxisValueToNormalized(_0x55b351[_0x18616c(0x413)][_0x18616c(0x446)],_0x2ccf24[_0x18616c(0x30e)][_0x47be1b+0x1]);if(_0x971aaf>=_0x35000e&&_0x971aaf<=_0x51221e&&_0x471e75>=_0x1c70a6&&_0x471e75<=_0x32ccbb)return!0x0;}return!0x1;});},descriptorDemandPriority=(_0x5bfa3f,_0x4dbb25,_0xa91f99,_0x251d48)=>{const _0x4557ab=_0x124919;let _0x4d0dd7=_0xa91f99[_0x4557ab(0x1fd)];if(_0x4d0dd7){let _0x182d3d=_0x4d0dd7['axis']==='x'?_0x4dbb25[_0x4557ab(0x413)][_0x4557ab(0x3dd)]:_0x4d0dd7[_0x4557ab(0x247)]==='y'?_0x4dbb25['metadata'][_0x4557ab(0x481)]:_0x4dbb25[_0x4557ab(0x413)][_0x4557ab(0x446)];if(descriptorContainsSlice(_0x5bfa3f,_0x4dbb25,_0x4d0dd7['axis'],volumeAxisValueToNormalized(_0x182d3d,_0x4d0dd7[_0x4557ab(0x34d)])))return 0x0;}for(let _0x352cb4 of _0xa91f99['lockedSlices']){let _0xf269fe=_0x352cb4[_0x4557ab(0x247)]==='x'?_0x4dbb25[_0x4557ab(0x413)][_0x4557ab(0x3dd)]:_0x352cb4[_0x4557ab(0x247)]==='y'?_0x4dbb25[_0x4557ab(0x413)][_0x4557ab(0x481)]:_0x4dbb25['metadata'][_0x4557ab(0x446)];if(_0x352cb4[_0x4557ab(0x341)]&&descriptorContainsSlice(_0x5bfa3f,_0x4dbb25,_0x352cb4[_0x4557ab(0x247)],volumeAxisValueToNormalized(_0xf269fe,_0x352cb4['position'])))return 0x1;}return descriptorContainsProfile(_0x5bfa3f,_0x4dbb25,_0x251d48)?0x2:0x3;};var VolumeScene=class VolumeScene{[_0x124919(0x2b9)]=_0x124919(0x212);[_0x124919(0x334)];[_0x124919(0x455)];[_0x124919(0x357)];[_0x124919(0x47c)];['interactionElement'];['eventDisposers']=[];[_0x124919(0x42e)];[_0x124919(0x40f)];[_0x124919(0x330)];[_0x124919(0x3b4)];['colorStops'];[_0x124919(0x42b)];[_0x124919(0x234)];[_0x124919(0x3f4)]=[];['timeIndex'];['sourceGeneration']=0x0;[_0x124919(0x2f2)]=new Set();[_0x124919(0x359)]=new Map();['desiredKeys']=new Set();[_0x124919(0x1f2)]=0x0;[_0x124919(0x29f)]=!0x1;[_0x124919(0x384)];[_0x124919(0x221)];['coordinateSystem'];[_0x124919(0x3a4)];[_0x124919(0x386)];[_0x124919(0x33a)]=_0x124919(0x1ec);[_0x124919(0x1ef)]=0x0;[_0x124919(0x4d8)]=0x0;['colorMode'];[_0x124919(0x2b6)]=null;[_0x124919(0x39d)];[_0x124919(0x3ca)];['renderScale'];[_0x124919(0x41f)];['interactionStepScale'];[_0x124919(0x203)]=new Set();[_0x124919(0x1d2)]=!0x0;[_0x124919(0x327)]=!0x1;['brickScheduleCount']=0x0;[_0x124919(0x426)]=0x0;[_0x124919(0x29d)]=null;[_0x124919(0x324)];[_0x124919(0x35d)];[_0x124919(0x25a)];['lastSubmittedFrameTimestamp']=0x0;[_0x124919(0x403)]=0x0;[_0x124919(0x1cd)]=0x0;['requestControllers']=new Set();[_0x124919(0x3c7)]=null;['markerOverlay']=null;constructor(_0x53cdcc,_0x4bde5d){const _0x4afc4b=_0x124919;this[_0x4afc4b(0x334)]=_0x4bde5d,this[_0x4afc4b(0x357)]=_0x53cdcc['canvas'],this[_0x4afc4b(0x228)]=_0x53cdcc[_0x4afc4b(0x228)]??_0x53cdcc[_0x4afc4b(0x357)],this[_0x4afc4b(0x47c)]=_0x53cdcc['renderMode']??_0x4afc4b(0x489),this[_0x4afc4b(0x42e)]=_0x53cdcc[_0x4afc4b(0x42e)],this[_0x4afc4b(0x352)]=_0x53cdcc[_0x4afc4b(0x352)]??0x0,this[_0x4afc4b(0x40f)]=this[_0x4afc4b(0x22b)](_0x53cdcc),this['descriptors']=createVolumeBrickDescriptors(this['source'][_0x4afc4b(0x413)],this[_0x4afc4b(0x40f)]),this[_0x4afc4b(0x455)]=new VolumeCamera({'state':_0x53cdcc['camera']??DEFAULT_CAMERA}),this[_0x4afc4b(0x3b4)]=this[_0x4afc4b(0x473)](_0x53cdcc);let _0x25b406=prepareWebgpuVolumeTransfer(_0x53cdcc[_0x4afc4b(0x4bf)],_0x53cdcc[_0x4afc4b(0x234)]);if(this[_0x4afc4b(0x4bf)]=_0x25b406['colorStops'],this[_0x4afc4b(0x42b)]=_0x53cdcc['colorStops'],this['opacityStops']=_0x53cdcc[_0x4afc4b(0x234)],this[_0x4afc4b(0x384)]=_0x53cdcc['modelMatrix']??IDENTITY_MATRIX,this[_0x4afc4b(0x221)]=validatePositiveOption(_0x53cdcc[_0x4afc4b(0x221)]??0x1,_0x4afc4b(0x221)),this[_0x4afc4b(0x407)]=_0x53cdcc[_0x4afc4b(0x407)]??_0x4afc4b(0x25d),this[_0x4afc4b(0x407)]===_0x4afc4b(0x1da)&&_0x53cdcc[_0x4afc4b(0x240)])throw Error('Geographic\x20WGS84\x20volume\x20scenes\x20manage\x20their\x20own\x20model\x20transform.\x20WGS84\x20地理体积场景自行管理模型变换。');this[_0x4afc4b(0x3a4)]=_0x53cdcc[_0x4afc4b(0x3a4)]??null,this[_0x4afc4b(0x386)]=_0x53cdcc[_0x4afc4b(0x386)]??_0x4afc4b(0x250),this[_0x4afc4b(0x39d)]=_0x53cdcc[_0x4afc4b(0x39d)]??_0x4afc4b(0x2ca),this['pixelRatioCap']=validatePositiveOption(_0x53cdcc[_0x4afc4b(0x3ca)]??0x2,_0x4afc4b(0x3ca)),this[_0x4afc4b(0x3cf)]=validatePositiveOption(_0x53cdcc[_0x4afc4b(0x3cf)]??0x1,_0x4afc4b(0x3cf)),this[_0x4afc4b(0x41f)]=validatePositiveOption(_0x53cdcc[_0x4afc4b(0x41f)]??0.6,_0x4afc4b(0x41f)),this['interactionStepScale']=validatePositiveOption(_0x53cdcc[_0x4afc4b(0x3c3)]??0x1,_0x4afc4b(0x3c3)),this[_0x4afc4b(0x417)]=_0x53cdcc['colorMode']??'smooth',this[_0x4afc4b(0x324)]=_0x53cdcc[_0x4afc4b(0x3c7)]?.[_0x4afc4b(0x463)]??'scene',this[_0x4afc4b(0x35d)]=_0x53cdcc['sliceInteraction']?.['plateColor'],this[_0x4afc4b(0x25a)]=_0x53cdcc[_0x4afc4b(0x3c7)]?.[_0x4afc4b(0x25a)],this[_0x4afc4b(0x334)][_0x4afc4b(0x287)](()=>this[_0x4afc4b(0x4aa)]()),this[_0x4afc4b(0x334)][_0x4afc4b(0x1e2)](_0x25b406[_0x4afc4b(0x4bf)],_0x25b406[_0x4afc4b(0x234)]);let _0x389025=_0x53cdcc[_0x4afc4b(0x36f)]??this['coordinateSystem']===_0x4afc4b(0x25d);this[_0x4afc4b(0x334)][_0x4afc4b(0x43a)](_0x389025?[createBoundsMesh(),createAxesMesh()]:[]),this[_0x4afc4b(0x334)]['update']({'renderMode':_0x53cdcc[_0x4afc4b(0x48b)]??_0x4afc4b(0x28f),'colorMode':this[_0x4afc4b(0x417)],'opacity':_0x53cdcc[_0x4afc4b(0x3aa)]??0.3,'densityScale':_0x53cdcc[_0x4afc4b(0x3c1)]??0x1,'stepLength':this['getStepLength'](),'volumeDimFactor':this[_0x4afc4b(0x3b4)]['volumeDimFactor']}),this[_0x4afc4b(0x46b)](),this[_0x4afc4b(0x23a)](),this[_0x4afc4b(0x2bb)](),this['bindSliceInteraction'](_0x53cdcc),this[_0x4afc4b(0x4c5)]();}static async[_0x124919(0x39f)](_0x243604){const _0x21212c=_0x124919;if(validateVolumeSource(_0x243604['source']),validateVolumeTimeIndex(_0x243604[_0x21212c(0x42e)][_0x21212c(0x413)],_0x243604[_0x21212c(0x352)]??0x0),(_0x243604[_0x21212c(0x20b)]?.['halo']??0x1)!==0x1)throw Error('The\x20current\x20WebGPU\x20volume\x20atlas\x20requires\x20halo:\x201.\x20当前\x20WebGPU\x20体积图集要求\x20halo\x20为\x201。');let _0x4bfe85=_0x243604[_0x21212c(0x20b)]?.[_0x21212c(0x3b2)]??0x20000000,_0x358248=new WebgpuVolumeSceneRenderer({'memoryTargetBytes':_0x4bfe85,'memoryHardLimitBytes':_0x243604[_0x21212c(0x20b)]?.[_0x21212c(0x1f1)]??_0x4bfe85});await _0x358248[_0x21212c(0x279)](_0x243604[_0x21212c(0x357)]);let _0x5e049a=new VolumeScene(_0x243604,_0x358248);return _0x5e049a[_0x21212c(0x3d6)](),_0x5e049a[_0x21212c(0x209)](),_0x5e049a[_0x21212c(0x47c)]===_0x21212c(0x489)&&_0x5e049a[_0x21212c(0x4a6)](),_0x5e049a;}get['camera'](){const _0x50285c=_0x124919;return this[_0x50285c(0x455)][_0x50285c(0x26e)];}get[_0x124919(0x2f9)](){const _0x4b91bc=_0x124919;return this[_0x4b91bc(0x3b4)][_0x4b91bc(0x2f9)];}get['statistics'](){const _0x318442=_0x124919;let _0x3509d5=this[_0x318442(0x47c)]===_0x318442(0x40c)||this['isInteracting']()||performance[_0x318442(0x284)]()-this['lastSubmittedFrameTimestamp']<=0xfa?this[_0x318442(0x1cd)]:0x0;return{...this['renderer'][_0x318442(0x3d2)],'pendingBrickCount':this['pendingKeys'][_0x318442(0x4b8)],'brickScheduleCount':this[_0x318442(0x48e)],'brickSortCount':this[_0x318442(0x426)],'actualFrameIntervalMilliseconds':_0x3509d5,'estimatedFps':_0x3509d5>0x0?0x3e8/_0x3509d5:0x0,'effectiveQuality':this['getEffectiveQuality'](),'effectiveRenderScale':this['getEffectiveRenderScale'](),'interactionKind':this[_0x318442(0x2fa)]()};}[_0x124919(0x216)](_0x98052e){const _0x29c2ae=_0x124919;_0x98052e[_0x29c2ae(0x2d4)]&&this[_0x29c2ae(0x4b6)](_0x98052e['camera']),_0x98052e['modelMatrix']&&(this['baseModelMatrix']=[..._0x98052e[_0x29c2ae(0x240)]]),_0x98052e[_0x29c2ae(0x221)]!==void 0x0&&(this['verticalScale']=validatePositiveOption(_0x98052e['verticalScale'],_0x29c2ae(0x221))),_0x98052e[_0x29c2ae(0x3a4)]!==void 0x0&&(this[_0x29c2ae(0x3a4)]=_0x98052e[_0x29c2ae(0x3a4)]),_0x98052e[_0x29c2ae(0x386)]&&(this['quality']=_0x98052e['quality']),_0x98052e[_0x29c2ae(0x39d)]&&(this[_0x29c2ae(0x39d)]=_0x98052e[_0x29c2ae(0x39d)]);let _0xadc7ee=!0x1;if(_0x98052e['pixelRatioCap']!==void 0x0&&(this['pixelRatioCap']=validatePositiveOption(_0x98052e[_0x29c2ae(0x3ca)],_0x29c2ae(0x3ca)),_0xadc7ee=!0x0),_0x98052e['renderScale']!==void 0x0&&(this['renderScale']=validatePositiveOption(_0x98052e[_0x29c2ae(0x3cf)],_0x29c2ae(0x3cf)),_0xadc7ee=!0x0),_0x98052e['interactionRenderScale']!==void 0x0&&(this['interactionRenderScale']=validatePositiveOption(_0x98052e['interactionRenderScale'],_0x29c2ae(0x41f)),_0xadc7ee=this[_0x29c2ae(0x3e6)]()),_0x98052e['interactionStepScale']!==void 0x0&&(this[_0x29c2ae(0x3c3)]=validatePositiveOption(_0x98052e[_0x29c2ae(0x3c3)],_0x29c2ae(0x3c3))),_0x98052e[_0x29c2ae(0x417)]&&(this[_0x29c2ae(0x417)]=_0x98052e[_0x29c2ae(0x417)]),_0x98052e[_0x29c2ae(0x4bf)]||_0x98052e[_0x29c2ae(0x234)]){let _0x2b00ff=prepareWebgpuVolumeTransfer(_0x98052e[_0x29c2ae(0x4bf)]??this[_0x29c2ae(0x42b)],_0x98052e[_0x29c2ae(0x234)]??this[_0x29c2ae(0x234)]);this[_0x29c2ae(0x4bf)]=_0x2b00ff[_0x29c2ae(0x4bf)],this[_0x29c2ae(0x42b)]=_0x98052e[_0x29c2ae(0x4bf)]??this[_0x29c2ae(0x42b)],this[_0x29c2ae(0x234)]=_0x98052e['opacityStops']??this[_0x29c2ae(0x234)],this[_0x29c2ae(0x334)]['setTransfer'](_0x2b00ff[_0x29c2ae(0x4bf)],_0x2b00ff[_0x29c2ae(0x234)]),this[_0x29c2ae(0x1df)]();}_0x98052e['colorMode']&&!_0x98052e[_0x29c2ae(0x4bf)]&&!_0x98052e[_0x29c2ae(0x234)]&&this[_0x29c2ae(0x1df)](),this[_0x29c2ae(0x334)]['update']({'renderMode':_0x98052e[_0x29c2ae(0x48b)],'colorMode':_0x98052e['colorMode'],'opacity':_0x98052e[_0x29c2ae(0x3aa)],'densityScale':_0x98052e[_0x29c2ae(0x3c1)],'stepLength':this[_0x29c2ae(0x3f1)]()}),this[_0x29c2ae(0x23a)](),_0xadc7ee&&this[_0x29c2ae(0x3d6)](),this['requestRender']();}['setCamera'](_0x184714){const _0x1e17ae=_0x124919;this['volumeCamera']['setState'](_0x184714),this[_0x1e17ae(0x292)](),this[_0x1e17ae(0x4a6)]();}['setTimeIndex'](_0x283fb6){const _0x39e86d=_0x124919;validateVolumeTimeIndex(this[_0x39e86d(0x42e)][_0x39e86d(0x413)],_0x283fb6),_0x283fb6!==this[_0x39e86d(0x352)]&&(this['timeIndex']=_0x283fb6,this['resetBrickRequests']());}[_0x124919(0x44b)](_0x3fb87c){const _0x57fab5=_0x124919;validateVolumeSource(_0x3fb87c),this[_0x57fab5(0x42e)]=_0x3fb87c,this[_0x57fab5(0x352)]=Math['min'](this[_0x57fab5(0x352)],_0x3fb87c['metadata']['timeCount']-0x1),this[_0x57fab5(0x40f)]=createVolumeBrickLayout(_0x3fb87c[_0x57fab5(0x413)],this['layout'][_0x57fab5(0x2d3)]),this[_0x57fab5(0x330)]=createVolumeBrickDescriptors(_0x3fb87c[_0x57fab5(0x413)],this[_0x57fab5(0x40f)]),this['sliceState'][_0x57fab5(0x43a)](_0x3fb87c[_0x57fab5(0x413)]),this[_0x57fab5(0x46b)](),this[_0x57fab5(0x23a)](),this[_0x57fab5(0x315)](),this[_0x57fab5(0x1df)](),this[_0x57fab5(0x4a6)]();}[_0x124919(0x2a9)](_0x494733){const _0x37a521=_0x124919;this[_0x37a521(0x3f4)]=_0x494733,this['rebuildProfiles'](),this[_0x37a521(0x292)](),this['requestRender']();}[_0x124919(0x392)](_0x406e41){const _0x55fb77=_0x124919;this['sliceState'][_0x55fb77(0x206)](_0x406e41);}[_0x124919(0x29e)](_0x3ea09c){const _0x5ea311=_0x124919;if(this['destroyed']||this[_0x5ea311(0x203)][_0x5ea311(0x40d)](_0x3ea09c))return;let _0x2d8689=!this[_0x5ea311(0x3e6)]();this[_0x5ea311(0x203)][_0x5ea311(0x1db)](_0x3ea09c),_0x2d8689&&(this[_0x5ea311(0x403)]=0x0,this[_0x5ea311(0x3d6)]());}[_0x124919(0x423)](_0x546cbd){const _0x140d3d=_0x124919;this[_0x140d3d(0x29f)]||!this['activeInteractions']['delete'](_0x546cbd)||this[_0x140d3d(0x3e6)]()||(this[_0x140d3d(0x403)]=0x0,this[_0x140d3d(0x3d6)]());}[_0x124919(0x25f)](_0x5d8432,_0x26ca49){const _0x4b54b2=_0x124919;this[_0x4b54b2(0x3b4)]['updatePreview'](_0x5d8432,_0x26ca49);let _0x3d9f95=this[_0x4b54b2(0x3b4)]['lockPreview']();if(!_0x3d9f95)throw Error(_0x4b54b2(0x1d5));return _0x3d9f95;}[_0x124919(0x375)](_0x5dfb60,_0x31b840){const _0x25bd0c=_0x124919;this[_0x25bd0c(0x3b4)][_0x25bd0c(0x450)](_0x5dfb60,_0x31b840);}[_0x124919(0x3e7)](_0x5d96f6){const _0x414779=_0x124919;this['sliceState'][_0x414779(0x3e7)](_0x5d96f6);}[_0x124919(0x445)](){const _0xd4390e=_0x124919;this[_0xd4390e(0x3b4)][_0xd4390e(0x445)]();}[_0x124919(0x3d6)](){const _0x5b19ac=_0x124919;let _0x3e8ae5=Math[_0x5b19ac(0x44f)](window[_0x5b19ac(0x2b1)]||0x1,this[_0x5b19ac(0x3ca)])*this[_0x5b19ac(0x36b)](),_0x5d7c69=Math[_0x5b19ac(0x207)](0x1,Math['round'](this['canvas']['clientWidth']*_0x3e8ae5||this[_0x5b19ac(0x357)][_0x5b19ac(0x2ce)]||0x1)),_0x174780=Math['max'](0x1,Math[_0x5b19ac(0x41e)](this[_0x5b19ac(0x357)]['clientHeight']*_0x3e8ae5||this[_0x5b19ac(0x357)]['height']||0x1));this[_0x5b19ac(0x455)][_0x5b19ac(0x4cb)](_0x5d7c69/_0x174780),(this['canvas']['width']!==_0x5d7c69||this[_0x5b19ac(0x357)][_0x5b19ac(0x4a1)]!==_0x174780)&&this[_0x5b19ac(0x334)][_0x5b19ac(0x3d6)](_0x5d7c69,_0x174780),this['requestRender']();}[_0x124919(0x2cd)](){const _0x48b4f9=_0x124919;if(this[_0x48b4f9(0x29f)])return;this[_0x48b4f9(0x2a8)](),this['flushBrickSchedule']();let _0x4fe08c=this[_0x48b4f9(0x455)]['matrices'];if(this[_0x48b4f9(0x334)][_0x48b4f9(0x4b6)]({'viewProjection':Array[_0x48b4f9(0x214)](_0x4fe08c[_0x48b4f9(0x470)]),'inverseViewProjection':Array['from'](_0x4fe08c[_0x48b4f9(0x493)]),'cameraPosition':this[_0x48b4f9(0x455)]['state'][_0x48b4f9(0x34d)]}),this[_0x48b4f9(0x334)][_0x48b4f9(0x216)]({'stepLength':this[_0x48b4f9(0x3f1)]()}),!this['renderer'][_0x48b4f9(0x2cd)]()){this[_0x48b4f9(0x1d2)]=!0x0;return;}this[_0x48b4f9(0x1d2)]=!0x1,this[_0x48b4f9(0x4a5)](performance[_0x48b4f9(0x284)]()),this[_0x48b4f9(0x3e5)]?.[_0x48b4f9(0x216)]();}[_0x124919(0x302)](){const _0x429efe=_0x124919;if(this[_0x429efe(0x29f)])return Promise['reject'](Error(_0x429efe(0x441)));this[_0x429efe(0x2a8)](),this[_0x429efe(0x364)]();let _0x155ecc=this[_0x429efe(0x455)]['matrices'];return this[_0x429efe(0x334)]['setCamera']({'viewProjection':Array[_0x429efe(0x214)](_0x155ecc[_0x429efe(0x470)]),'inverseViewProjection':Array[_0x429efe(0x214)](_0x155ecc[_0x429efe(0x493)]),'cameraPosition':this[_0x429efe(0x455)]['state']['position']}),this['renderer']['captureFrame']();}[_0x124919(0x48c)](){const _0x209068=_0x124919;if(!this[_0x209068(0x29f)]){this['destroyed']=!0x0,this[_0x209068(0x39b)]+=0x1;for(let _0x171355 of this[_0x209068(0x2e0)])_0x171355[_0x209068(0x1bf)]();this[_0x209068(0x2e0)][_0x209068(0x320)](),cancelAnimationFrame(this['frameRequest']),this[_0x209068(0x334)][_0x209068(0x287)](null),this[_0x209068(0x3cc)][_0x209068(0x1fc)](0x0)['forEach'](_0x1c2b7f=>_0x1c2b7f()),this[_0x209068(0x334)][_0x209068(0x48c)](),this[_0x209068(0x3c7)]?.[_0x209068(0x48c)](),this[_0x209068(0x3e5)]?.['destroy'](),this[_0x209068(0x2f2)]['clear'](),this[_0x209068(0x359)][_0x209068(0x320)](),this[_0x209068(0x303)][_0x209068(0x320)](),this[_0x209068(0x203)][_0x209068(0x320)](),this[_0x209068(0x29d)]=null;}}[_0x124919(0x22b)](_0x2a3872){const _0x8711e5=_0x124919;return createVolumeBrickLayout(_0x2a3872['source'][_0x8711e5(0x413)],{'width':_0x2a3872[_0x8711e5(0x20b)]?.[_0x8711e5(0x2ce)],'height':_0x2a3872['chunk']?.[_0x8711e5(0x4a1)],'depth':_0x2a3872[_0x8711e5(0x20b)]?.['depth'],'halo':_0x2a3872['chunk']?.[_0x8711e5(0x43f)]});}[_0x124919(0x31f)](){const _0x127774=_0x124919;return this['quality']===_0x127774(0x250)?this[_0x127774(0x33a)]:this[_0x127774(0x386)];}[_0x124919(0x3f1)](){const _0x23ad20=_0x124919;let _0x12dbd5=qualityStepLength(this['getEffectiveQuality']());return(this[_0x23ad20(0x407)]===_0x23ad20(0x1da)?_0x12dbd5*0.05:_0x12dbd5)*(this[_0x23ad20(0x3e6)]()?this[_0x23ad20(0x3c3)]:0x1);}[_0x124919(0x3e6)](){const _0xe5b888=_0x124919;return this[_0xe5b888(0x203)][_0xe5b888(0x4b8)]>0x0;}[_0x124919(0x2fa)](){const _0x5dc3ce=_0x124919;return this[_0x5dc3ce(0x203)][_0x5dc3ce(0x4b8)]===0x0?_0x5dc3ce(0x337):this['activeInteractions'][_0x5dc3ce(0x4b8)]>0x1?_0x5dc3ce(0x218):this[_0x5dc3ce(0x203)][_0x5dc3ce(0x421)]()[_0x5dc3ce(0x280)]()[_0x5dc3ce(0x36c)]??_0x5dc3ce(0x337);}[_0x124919(0x36b)](){const _0x5f0125=_0x124919;return this[_0x5f0125(0x3cf)]*(this[_0x5f0125(0x3e6)]()?this[_0x5f0125(0x41f)]:0x1);}['recordFrameInterval'](_0x50437a){const _0x11bdcc=_0x124919;if(this[_0x11bdcc(0x4c1)]=_0x50437a,!(this['renderMode']===_0x11bdcc(0x40c)||this['isInteracting']())){this[_0x11bdcc(0x403)]=0x0;return;}if(this[_0x11bdcc(0x403)]>0x0){let _0x29b3e1=_0x50437a-this[_0x11bdcc(0x403)];_0x29b3e1>0x0&&_0x29b3e1<=0xfa&&(this[_0x11bdcc(0x1cd)]=this[_0x11bdcc(0x1cd)]===0x0?_0x29b3e1:this[_0x11bdcc(0x1cd)]*0.8+_0x29b3e1*0.2,this[_0x11bdcc(0x28d)](_0x29b3e1));}this[_0x11bdcc(0x403)]=_0x50437a;}[_0x124919(0x28d)](_0x113230){const _0x5946c2=_0x124919;if(this[_0x5946c2(0x386)]!==_0x5946c2(0x250)||(this[_0x5946c2(0x1ef)]+=0x1,this[_0x5946c2(0x4d8)]+=_0x113230,this[_0x5946c2(0x1ef)]<0x1e))return;let _0xddad88=this[_0x5946c2(0x4d8)]/this[_0x5946c2(0x1ef)];if(this['autoFrameCount']=0x0,this[_0x5946c2(0x4d8)]=0x0,this[_0x5946c2(0x3e6)]()&&_0xddad88<0xe)return;let _0x5b33fd=nextAutoQuality(this[_0x5946c2(0x33a)],_0xddad88);_0x5b33fd!==this[_0x5946c2(0x33a)]&&(this['autoQuality']=_0x5b33fd,this[_0x5946c2(0x292)](),this[_0x5946c2(0x4a6)]());}[_0x124919(0x473)](_0x54aae7){const _0x139ac3=_0x124919;return new SliceState(_0x54aae7[_0x139ac3(0x42e)][_0x139ac3(0x413)],{'volumeDimFactor':_0x54aae7[_0x139ac3(0x3c7)]?.['volumeDimFactor'],'depthMode':_0x54aae7[_0x139ac3(0x3c7)]?.[_0x139ac3(0x463)],'maxLockedSlices':_0x54aae7[_0x139ac3(0x3c7)]?.[_0x139ac3(0x393)],'onLimitReached':_0x3428d0=>_0x54aae7['sliceInteraction']?.[_0x139ac3(0x219)]?.(Error(_0x139ac3(0x1ba)+_0x3428d0+_0x139ac3(0x2f0)+_0x3428d0+'。'))});}[_0x124919(0x2bb)](){const _0x364209=_0x124919;let _0x260075=this[_0x364209(0x3b4)][_0x364209(0x3a0)](_0x19ae46=>{this['pendingSliceSnapshot']=_0x19ae46,this['requestRender']();});this['eventDisposers'][_0x364209(0x4bd)](_0x260075);}['flushSliceState'](){const _0xd38ea1=_0x124919;let _0x127c24=this[_0xd38ea1(0x29d)];if(!_0x127c24)return;this['pendingSliceSnapshot']=null;let _0x15037b=[];if(_0x127c24[_0xd38ea1(0x1fd)]){let _0x4fdb72=_0x127c24['preview'][_0xd38ea1(0x247)]==='x'?this[_0xd38ea1(0x42e)][_0xd38ea1(0x413)]['xAxis']:_0x127c24[_0xd38ea1(0x1fd)][_0xd38ea1(0x247)]==='y'?this[_0xd38ea1(0x42e)][_0xd38ea1(0x413)][_0xd38ea1(0x481)]:this['source']['metadata'][_0xd38ea1(0x446)];_0x15037b['push']({'id':_0xd38ea1(0x201),'axis':_0x127c24[_0xd38ea1(0x1fd)][_0xd38ea1(0x247)],'position':clamp01(volumeAxisValueToNormalized(_0x4fdb72,_0x127c24['preview']['position'])),'depthMode':this['sliceDepthMode'],'visible':!0x0,'opacity':0.72,'plateColor':this[_0xd38ea1(0x35d)]});}for(let _0x3b1993 of _0x127c24[_0xd38ea1(0x2f9)]){let _0x5965bc=_0x3b1993['axis']==='x'?this[_0xd38ea1(0x42e)][_0xd38ea1(0x413)]['xAxis']:_0x3b1993[_0xd38ea1(0x247)]==='y'?this[_0xd38ea1(0x42e)][_0xd38ea1(0x413)][_0xd38ea1(0x481)]:this['source'][_0xd38ea1(0x413)][_0xd38ea1(0x446)];_0x15037b['push']({..._0x3b1993,'position':clamp01(volumeAxisValueToNormalized(_0x5965bc,_0x3b1993['position'])),'opacity':0x1,'plateColor':this[_0xd38ea1(0x35d)]});}this[_0xd38ea1(0x334)][_0xd38ea1(0x1c6)](_0x15037b),this[_0xd38ea1(0x334)][_0xd38ea1(0x216)]({'volumeDimFactor':_0x127c24[_0xd38ea1(0x1fd)]||_0x127c24[_0xd38ea1(0x2f9)][_0xd38ea1(0x3c5)](_0x36cdde=>_0x36cdde[_0xd38ea1(0x341)])?_0x127c24[_0xd38ea1(0x3db)]:0x1}),this[_0xd38ea1(0x25a)]?.(_0x127c24[_0xd38ea1(0x2f9)]),this['brickScheduleDirty']=!0x0;}[_0x124919(0x458)](_0x304ff7){const _0x3bff3c=_0x124919;let _0x450005=()=>({'viewProjectionMatrix':this[_0x3bff3c(0x455)]['matrices']['viewProjection'],'modelMatrix':composeVolumeModelMatrix(this['baseModelMatrix'],this[_0x3bff3c(0x221)]),'viewportWidth':Math[_0x3bff3c(0x207)](0x1,this[_0x3bff3c(0x357)][_0x3bff3c(0x30f)]),'viewportHeight':Math[_0x3bff3c(0x207)](0x1,this['canvas']['clientHeight'])});this['sliceInteraction']=new SliceInteractionController(this[_0x3bff3c(0x228)],this[_0x3bff3c(0x3b4)],_0x450005,{'hitTolerancePixels':_0x304ff7['sliceInteraction']?.[_0x3bff3c(0x434)],'onInteractionStart':()=>this[_0x3bff3c(0x29e)](_0x3bff3c(0x296)),'onInteractionEnd':()=>this[_0x3bff3c(0x423)]('slice')}),this[_0x3bff3c(0x3c7)]['initialize'](),_0x304ff7[_0x3bff3c(0x274)]&&(this['markerOverlay']=new SliceMarkerOverlay(_0x304ff7['overlayContainer'],this[_0x3bff3c(0x3b4)],_0x450005,{'interactionController':this['sliceInteraction']}));}[_0x124919(0x4c5)](){const _0x73bae0=_0x124919;let _0x322501=_0x546edf=>{const _0x3d117c=_0x2335;_0x546edf[_0x3d117c(0x244)]!==0x0&&_0x546edf[_0x3d117c(0x244)]!==0x2||(this[_0x3d117c(0x2b6)]={'id':_0x546edf[_0x3d117c(0x2df)],'x':_0x546edf[_0x3d117c(0x476)],'y':_0x546edf[_0x3d117c(0x370)],'pan':_0x546edf[_0x3d117c(0x244)]===0x2||_0x546edf[_0x3d117c(0x23e)]!=='mouse'&&this[_0x3d117c(0x39d)]===_0x3d117c(0x344)},this[_0x3d117c(0x29e)](_0x3d117c(0x2d4)),this[_0x3d117c(0x228)]['setPointerCapture']?.(_0x546edf[_0x3d117c(0x2df)]),_0x546edf[_0x3d117c(0x291)]());},_0x1773d7=_0xd970b2=>{const _0x2d90de=_0x2335;if(!this[_0x2d90de(0x2b6)]||this[_0x2d90de(0x2b6)]['id']!==_0xd970b2[_0x2d90de(0x2df)])return;let _0x3aa9b0=_0xd970b2[_0x2d90de(0x476)]-this[_0x2d90de(0x2b6)]['x'],_0x1f5bdb=_0xd970b2[_0x2d90de(0x370)]-this[_0x2d90de(0x2b6)]['y'];this[_0x2d90de(0x2b6)]['x']=_0xd970b2[_0x2d90de(0x476)],this['pointer']['y']=_0xd970b2[_0x2d90de(0x370)],this['pointer'][_0x2d90de(0x344)]?this['volumeCamera']['pan'](_0x3aa9b0,_0x1f5bdb,this['canvas'][_0x2d90de(0x245)]):this['volumeCamera'][_0x2d90de(0x2ca)](_0x3aa9b0,_0x1f5bdb),this['requestBrickSchedule'](),this['requestRender']();},_0x282d83=_0x6577e5=>{const _0x561066=_0x2335;this[_0x561066(0x2b6)]?.['id']===_0x6577e5[_0x561066(0x2df)]&&(this['pointer']=null,this[_0x561066(0x423)](_0x561066(0x2d4)));},_0x1a5fe0=_0x4af5ba=>{const _0x1b73ab=_0x2335;_0x4af5ba[_0x1b73ab(0x291)](),this[_0x1b73ab(0x455)][_0x1b73ab(0x270)](_0x4af5ba[_0x1b73ab(0x4ca)]),this['requestBrickSchedule'](),this[_0x1b73ab(0x4a6)]();},_0x1adea1=_0x1d34eb=>_0x1d34eb[_0x73bae0(0x291)]();this[_0x73bae0(0x228)]['addEventListener'](_0x73bae0(0x415),_0x322501),this[_0x73bae0(0x228)][_0x73bae0(0x2f4)](_0x73bae0(0x3a5),_0x1773d7),this[_0x73bae0(0x228)][_0x73bae0(0x2f4)]('pointerup',_0x282d83),this[_0x73bae0(0x228)]['addEventListener']('pointercancel',_0x282d83),this[_0x73bae0(0x228)][_0x73bae0(0x2f4)]('wheel',_0x1a5fe0,{'passive':!0x1}),this[_0x73bae0(0x228)][_0x73bae0(0x2f4)](_0x73bae0(0x2c7),_0x1adea1),this[_0x73bae0(0x3cc)][_0x73bae0(0x4bd)](()=>this['interactionElement'][_0x73bae0(0x435)](_0x73bae0(0x415),_0x322501),()=>this[_0x73bae0(0x228)][_0x73bae0(0x435)](_0x73bae0(0x3a5),_0x1773d7),()=>this[_0x73bae0(0x228)][_0x73bae0(0x435)](_0x73bae0(0x2f8),_0x282d83),()=>this[_0x73bae0(0x228)][_0x73bae0(0x435)](_0x73bae0(0x4c4),_0x282d83),()=>this[_0x73bae0(0x228)][_0x73bae0(0x435)](_0x73bae0(0x1f5),_0x1a5fe0),()=>this[_0x73bae0(0x228)][_0x73bae0(0x435)](_0x73bae0(0x2c7),_0x1adea1));}['configureSource'](){const _0x4cfeb4=_0x124919;this['renderer'][_0x4cfeb4(0x44b)]({'xAxis':this[_0x4cfeb4(0x42e)][_0x4cfeb4(0x413)][_0x4cfeb4(0x3dd)],'yAxis':this[_0x4cfeb4(0x42e)][_0x4cfeb4(0x413)]['yAxis'],'zAxis':this[_0x4cfeb4(0x42e)][_0x4cfeb4(0x413)][_0x4cfeb4(0x446)],'brickWidth':this[_0x4cfeb4(0x40f)]['shape'][_0x4cfeb4(0x2ce)],'brickHeight':this[_0x4cfeb4(0x40f)][_0x4cfeb4(0x2d3)][_0x4cfeb4(0x4a1)],'brickDepth':this[_0x4cfeb4(0x40f)][_0x4cfeb4(0x2d3)][_0x4cfeb4(0x257)],'halo':0x1,'noData':this[_0x4cfeb4(0x42e)][_0x4cfeb4(0x413)][_0x4cfeb4(0x2a5)]});}[_0x124919(0x23a)](){const _0x76384d=_0x124919;if(this['coordinateSystem']===_0x76384d(0x1da)){let _0x3c76b9=createGeographicVolumeLayout(this[_0x76384d(0x42e)]['metadata'],this[_0x76384d(0x221)]);this[_0x76384d(0x334)][_0x76384d(0x216)]({'modelMatrix':_0x3c76b9[_0x76384d(0x48f)],'inverseModelMatrix':Array[_0x76384d(0x214)](invertMatrix(_0x3c76b9[_0x76384d(0x48f)])),'geographicTransform':_0x3c76b9[_0x76384d(0x342)],'clipMinimum':[0x0,0x0,0x0],'clipMaximum':[0x1,0x1,0x1]}),this[_0x76384d(0x4a6)]();return;}let _0xcaab32=composeVolumeModelMatrix(this[_0x76384d(0x384)],this[_0x76384d(0x221)]),_0x46184b=normalizeClipBox(this[_0x76384d(0x42e)],this[_0x76384d(0x3a4)]);this[_0x76384d(0x334)][_0x76384d(0x216)]({'modelMatrix':Array[_0x76384d(0x214)](_0xcaab32),'inverseModelMatrix':Array[_0x76384d(0x214)](invertMatrix(_0xcaab32)),'geographicTransform':null,'clipMinimum':_0x46184b[_0x76384d(0x259)],'clipMaximum':_0x46184b[_0x76384d(0x39e)]}),this[_0x76384d(0x4a6)]();}[_0x124919(0x1df)](){const _0x299fcf=_0x124919;let _0x22ed8c=this[_0x299fcf(0x3f4)][_0x299fcf(0x254)](_0x52dfce=>createProfileSceneMesh(buildVolumeRouteProfileMesh(_0x52dfce,this[_0x299fcf(0x42e)][_0x299fcf(0x413)]),this[_0x299fcf(0x4bf)],this['opacityStops'],this[_0x299fcf(0x417)]));this[_0x299fcf(0x334)][_0x299fcf(0x1bc)](_0x22ed8c),this[_0x299fcf(0x4a6)]();}['resetBrickRequests'](){const _0x5ced7d=_0x124919;this[_0x5ced7d(0x39b)]+=0x1;for(let _0x31e8ba of this[_0x5ced7d(0x2e0)])_0x31e8ba[_0x5ced7d(0x1bf)]();this[_0x5ced7d(0x2e0)][_0x5ced7d(0x320)](),this[_0x5ced7d(0x2f2)][_0x5ced7d(0x320)](),this['pendingKeys'][_0x5ced7d(0x320)](),this[_0x5ced7d(0x303)][_0x5ced7d(0x320)](),this[_0x5ced7d(0x46b)](),this[_0x5ced7d(0x209)]();}['requestBrickSchedule'](){const _0x200834=_0x124919;this['brickScheduleDirty']=!0x0,this[_0x200834(0x4a6)]();}['flushBrickSchedule'](){const _0x1bae99=_0x124919;this[_0x1bae99(0x327)]&&(this[_0x1bae99(0x327)]=!0x1,this[_0x1bae99(0x209)]());}[_0x124919(0x209)](){const _0x5688ec=_0x124919;if(this[_0x5688ec(0x29f)])return;this['brickScheduleDirty']=!0x1,this[_0x5688ec(0x48e)]+=0x1;let _0x2953ec=this[_0x5688ec(0x334)]['statistics'][_0x5688ec(0x4ba)];if(_0x2953ec<=0x0)return;let _0x52f71a=_0x2953ec>=this['descriptors'][_0x5688ec(0x251)];if(_0x52f71a&&this[_0x5688ec(0x303)]['size']===this['descriptors'][_0x5688ec(0x251)]&&this['loadedKeys'][_0x5688ec(0x4b8)]===this[_0x5688ec(0x330)][_0x5688ec(0x251)]&&this[_0x5688ec(0x359)][_0x5688ec(0x4b8)]===0x0)return;let _0x13b6c0;_0x52f71a?_0x13b6c0=this[_0x5688ec(0x330)]:(this[_0x5688ec(0x426)]+=0x1,_0x13b6c0=[...this['descriptors']]['sort']((_0x3f3f70,_0x5d5f2e)=>descriptorDemandPriority(_0x3f3f70,this[_0x5688ec(0x42e)],this[_0x5688ec(0x3b4)],this[_0x5688ec(0x3f4)])-descriptorDemandPriority(_0x5d5f2e,this[_0x5688ec(0x42e)],this[_0x5688ec(0x3b4)],this[_0x5688ec(0x3f4)])||descriptorDistance(_0x3f3f70,this[_0x5688ec(0x40f)],this[_0x5688ec(0x455)]['state'])-descriptorDistance(_0x5d5f2e,this[_0x5688ec(0x40f)],this['volumeCamera'][_0x5688ec(0x26e)]))[_0x5688ec(0x296)](0x0,_0x2953ec));let _0x4ad814=new Set(_0x13b6c0[_0x5688ec(0x254)](_0x655eff=>_0x655eff[_0x5688ec(0x38b)]));this[_0x5688ec(0x303)]=_0x4ad814,_0x52f71a||this[_0x5688ec(0x334)][_0x5688ec(0x465)](_0x13b6c0[_0x5688ec(0x430)](_0x51810c=>this[_0x5688ec(0x2f2)]['has'](_0x51810c[_0x5688ec(0x38b)]))[_0x5688ec(0x254)](_0xa7391f=>descriptorLogicalIndex(_0xa7391f,this[_0x5688ec(0x40f)])));for(let _0x127b37 of this[_0x5688ec(0x2f2)])_0x4ad814[_0x5688ec(0x40d)](_0x127b37)||this[_0x5688ec(0x2f2)][_0x5688ec(0x371)](_0x127b37);let _0x26d830=Math[_0x5688ec(0x207)](0x0,qualityUploadCount(this[_0x5688ec(0x31f)]())-this[_0x5688ec(0x359)][_0x5688ec(0x4b8)]),_0x599e75=_0x13b6c0['filter'](_0xec7424=>!this[_0x5688ec(0x2f2)][_0x5688ec(0x40d)](_0xec7424['key'])&&!this['pendingKeys']['has'](_0xec7424[_0x5688ec(0x38b)]))[_0x5688ec(0x296)](0x0,_0x26d830);for(let _0x51e150 of _0x599e75)this[_0x5688ec(0x1ed)](_0x51e150);}[_0x124919(0x1ed)](_0x4a301c){const _0x3d93bd=_0x124919;let _0x13cfaf=this[_0x3d93bd(0x39b)],_0x1f26ee=this['source'],_0x472530=this[_0x3d93bd(0x352)],_0x5844f4=new AbortController();this[_0x3d93bd(0x2e0)][_0x3d93bd(0x1db)](_0x5844f4),this['pendingKeys'][_0x3d93bd(0x49e)](_0x4a301c['key'],_0x13cfaf),Promise['resolve'](_0x1f26ee[_0x3d93bd(0x39a)](_0x472530,_0x4a301c[_0x3d93bd(0x1f7)],_0x5844f4[_0x3d93bd(0x24f)]))[_0x3d93bd(0x444)](async _0x4450b7=>{const _0x2000f9=_0x3d93bd;if(this[_0x2000f9(0x29f)]||_0x13cfaf!==this[_0x2000f9(0x39b)]||_0x1f26ee!==this[_0x2000f9(0x42e)]||_0x472530!==this[_0x2000f9(0x352)]||!this[_0x2000f9(0x303)][_0x2000f9(0x40d)](_0x4a301c[_0x2000f9(0x38b)]))return;let _0xcdb99d=createPhysicalBrickValues(_0x1f26ee[_0x2000f9(0x413)],this[_0x2000f9(0x40f)][_0x2000f9(0x2d3)],_0x4a301c,_0x4450b7),_0x2f13dd=descriptorLogicalIndex(_0x4a301c,this[_0x2000f9(0x40f)]);await this[_0x2000f9(0x334)][_0x2000f9(0x2c9)]({'logicalIndex':_0x2f13dd,'values':_0xcdb99d}),!(this[_0x2000f9(0x29f)]||_0x13cfaf!==this[_0x2000f9(0x39b)]||_0x1f26ee!==this[_0x2000f9(0x42e)]||_0x472530!==this[_0x2000f9(0x352)]||!this[_0x2000f9(0x303)][_0x2000f9(0x40d)](_0x4a301c[_0x2000f9(0x38b)]))&&(this['loadedKeys'][_0x2000f9(0x1db)](_0x4a301c[_0x2000f9(0x38b)]),this[_0x2000f9(0x4a6)]());})[_0x3d93bd(0x1d8)](_0x383bae=>{const _0x136fa2=_0x3d93bd;_0x383bae instanceof DOMException&&_0x383bae['name']===_0x136fa2(0x1c5)||console['error'](_0x383bae);})['finally'](()=>{const _0x3a22f1=_0x3d93bd;this[_0x3a22f1(0x2e0)][_0x3a22f1(0x371)](_0x5844f4),this['pendingKeys'][_0x3a22f1(0x4ab)](_0x4a301c['key'])===_0x13cfaf&&this[_0x3a22f1(0x359)][_0x3a22f1(0x371)](_0x4a301c[_0x3a22f1(0x38b)]),_0x13cfaf===this[_0x3a22f1(0x39b)]&&this['scheduleBricks']();});}[_0x124919(0x4aa)](){const _0x10b791=_0x124919;this[_0x10b791(0x1d2)]&&this[_0x10b791(0x4a6)]();}[_0x124919(0x4a6)](){const _0x566cd7=_0x124919;this[_0x566cd7(0x29f)]||(this[_0x566cd7(0x1d2)]=!0x0,!(this[_0x566cd7(0x47c)]!==_0x566cd7(0x489)||this['frameRequest']!==0x0)&&(this[_0x566cd7(0x1f2)]=requestAnimationFrame(()=>{const _0x2307b0=_0x566cd7;this['frameRequest']=0x0,!(this[_0x2307b0(0x29f)]||!this['renderDirty'])&&this['render']();})));}};function _0x2335(_0x416e1b,_0xe84271){const _0x4f79e1=_0x4f79();return _0x2335=function(_0x233556,_0x35a520){_0x233556=_0x233556-0x1b9;let _0x1b96b1=_0x4f79e1[_0x233556];return _0x1b96b1;},_0x2335(_0x416e1b,_0xe84271);}const createVolumeScene=_0x4386c3=>VolumeScene['create'](_0x4386c3),validateIndexRange=(_0x15291a,_0x310d6a,_0x2380b5,_0x3b9220)=>{const _0x25fdb7=_0x124919;if(!Number['isInteger'](_0x15291a)||!Number[_0x25fdb7(0x220)](_0x310d6a)||_0x15291a<0x0||_0x310d6a<=0x0||_0x15291a+_0x310d6a>_0x2380b5)throw Error(_0x3b9220+_0x25fdb7(0x331)+_0x15291a+_0x25fdb7(0x3a1)+_0x310d6a+',\x20size='+_0x2380b5+'.\x20'+_0x3b9220+_0x25fdb7(0x41a));},validateRange=(_0x559f91,_0x2d7749)=>{const _0x5415e9=_0x124919;validateIndexRange(_0x2d7749[_0x5415e9(0x377)],_0x2d7749[_0x5415e9(0x368)],_0x559f91[_0x5415e9(0x3dd)]['count'],'X'),validateIndexRange(_0x2d7749[_0x5415e9(0x24a)],_0x2d7749[_0x5415e9(0x3f0)],_0x559f91[_0x5415e9(0x481)][_0x5415e9(0x233)],_0x5415e9(0x27c)),validateIndexRange(_0x2d7749['sourceYStart'],_0x2d7749[_0x5415e9(0x4a0)],_0x559f91[_0x5415e9(0x446)]['count'],'sourceY');},validateData=_0x24e430=>{const _0x57c7ab=_0x124919;validateVolumeMetadata(_0x24e430);let _0x287918=_0x24e430[_0x57c7ab(0x3dd)][_0x57c7ab(0x233)]*_0x24e430[_0x57c7ab(0x481)][_0x57c7ab(0x233)]*_0x24e430[_0x57c7ab(0x446)]['count']*_0x24e430[_0x57c7ab(0x294)];if(_0x24e430[_0x57c7ab(0x421)][_0x57c7ab(0x251)]!==_0x287918)throw Error(_0x57c7ab(0x2f7)+_0x287918+_0x57c7ab(0x2db)+_0x24e430[_0x57c7ab(0x421)]['length']+_0x57c7ab(0x47b));},createInMemoryVolumeSource=_0xdea074=>{validateData(_0xdea074);let {values:_0x4d365b,..._0x29d4b3}=_0xdea074;return{'metadata':_0x29d4b3,'readChunk'(_0x404743,_0x17d25e,_0x2bc2d2){const _0x1e4dc4=_0x2335;if(_0x2bc2d2?.[_0x1e4dc4(0x2bd)])throw new DOMException(_0x1e4dc4(0x345),_0x1e4dc4(0x1c5));if(!Number[_0x1e4dc4(0x220)](_0x404743)||_0x404743<0x0||_0x404743>=_0xdea074[_0x1e4dc4(0x294)])throw Error(_0x1e4dc4(0x21b)+_0x404743+_0x1e4dc4(0x1e4));validateRange(_0xdea074,_0x17d25e);let _0x766d51=new Float32Array(_0x17d25e[_0x1e4dc4(0x368)]*_0x17d25e[_0x1e4dc4(0x3f0)]*_0x17d25e[_0x1e4dc4(0x4a0)]),_0x2ee13d=_0xdea074[_0x1e4dc4(0x3dd)]['count'],_0x467f54=_0xdea074[_0x1e4dc4(0x481)][_0x1e4dc4(0x233)],_0xb9b3fc=_0xdea074['zAxis'][_0x1e4dc4(0x233)],_0x5cfe15=_0x404743*_0x2ee13d*_0x467f54*_0xb9b3fc;for(let _0x3f40db=0x0;_0x3f40db<_0x17d25e['sourceYCount'];_0x3f40db+=0x1)for(let _0x157200=0x0;_0x157200<_0x17d25e[_0x1e4dc4(0x3f0)];_0x157200+=0x1){let _0x192e27=_0x5cfe15+(((_0x17d25e[_0x1e4dc4(0x3a6)]+_0x3f40db)*_0x467f54+_0x17d25e['levelStart']+_0x157200)*_0x2ee13d+_0x17d25e['xStart']),_0x52faad=(_0x3f40db*_0x17d25e[_0x1e4dc4(0x3f0)]+_0x157200)*_0x17d25e['xCount'];_0x766d51['set'](_0x4d365b[_0x1e4dc4(0x495)](_0x192e27,_0x192e27+_0x17d25e[_0x1e4dc4(0x368)]),_0x52faad);}return{'timeIndex':_0x404743,'range':{..._0x17d25e},'width':_0x17d25e[_0x1e4dc4(0x368)],'height':_0x17d25e['levelCount'],'depth':_0x17d25e[_0x1e4dc4(0x4a0)],'values':_0x766d51};}};};export{VolumeCamera,createGeographicVolumeLayout,createInMemoryVolumeSource,createVolumeScene,ecefToGeographicVolumeLocal,normalizedToVolumeAxisValue,volumeAxisValueToNormalized};
|