@meimu/mutracer 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSES/Classroom-CC0.txt +121 -0
- package/README.md +7 -7
- package/THIRD_PARTY_NOTICES.md +13 -8
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +10407 -8353
- package/docs/api.md +200 -10
- package/docs/denoising.md +30 -15
- package/docs/materials.md +1 -1
- package/docs/performance.md +5 -2
- package/docs/progressive-rendering.md +32 -1
- package/docs/threejs.md +14 -5
- package/docs/updates.md +44 -2
- package/docs/viewer.md +11 -6
- package/lib/Display.d.ts +13 -2
- package/lib/Display.js +27 -6
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +2 -0
- package/lib/Engine.js +52 -25
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +44 -9
- package/lib/Render.js +115 -17
- package/lib/Render.js.map +1 -1
- package/lib/RenderLoop.d.ts +7 -1
- package/lib/RenderLoop.js +94 -13
- package/lib/RenderLoop.js.map +1 -1
- package/lib/main.d.ts +6 -3
- package/lib/main.js +1 -0
- package/lib/main.js.map +1 -1
- package/lib/math/access.d.ts +4 -0
- package/lib/math/access.js +10 -0
- package/lib/math/access.js.map +1 -0
- package/lib/math/mat3.d.ts +4 -0
- package/lib/math/mat3.js +54 -0
- package/lib/math/mat3.js.map +1 -0
- package/lib/math/mat4.d.ts +19 -0
- package/lib/math/mat4.js +413 -0
- package/lib/math/mat4.js.map +1 -0
- package/lib/math/storage.d.ts +6 -0
- package/lib/math/storage.js +22 -0
- package/lib/math/storage.js.map +1 -0
- package/lib/math/types.d.ts +3 -0
- package/lib/math/types.js +2 -0
- package/lib/math/types.js.map +1 -0
- package/lib/math/vec2.d.ts +13 -0
- package/lib/math/vec2.js +52 -0
- package/lib/math/vec2.js.map +1 -0
- package/lib/math/vec3.d.ts +23 -0
- package/lib/math/vec3.js +139 -0
- package/lib/math/vec3.js.map +1 -0
- package/lib/math.d.ts +5 -17
- package/lib/math.js +5 -55
- package/lib/math.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/oidn.js +4 -2
- package/lib/oidn.js.map +1 -1
- package/lib/oidnBundledWeights.cdn.d.ts +2 -2
- package/lib/renderer/AovPrimitiveCache.d.ts +10 -0
- package/lib/renderer/AovPrimitiveCache.js +48 -0
- package/lib/renderer/AovPrimitiveCache.js.map +1 -0
- package/lib/renderer/Box3.d.ts +5 -0
- package/lib/renderer/Box3.js +9 -0
- package/lib/renderer/Box3.js.map +1 -0
- package/lib/renderer/GPUTraceQueue.d.ts +10 -0
- package/lib/renderer/GPUTraceQueue.js +31 -0
- package/lib/renderer/GPUTraceQueue.js.map +1 -0
- package/lib/renderer/MaterialData.d.ts +15 -0
- package/lib/renderer/MaterialData.js +61 -0
- package/lib/renderer/MaterialData.js.map +1 -0
- package/lib/renderer/MaterialTable.d.ts +11 -98
- package/lib/renderer/MaterialTable.js +34 -412
- package/lib/renderer/MaterialTable.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +32 -13
- package/lib/renderer/RenderingPipeline.js +1 -17
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/TileRender.d.ts +0 -1
- package/lib/renderer/TileRender.js +14 -1
- package/lib/renderer/TileRender.js.map +1 -1
- package/lib/renderer/WGPUAov.d.ts +39 -0
- package/lib/renderer/WGPUAov.js +239 -0
- package/lib/renderer/WGPUAov.js.map +1 -0
- package/lib/renderer/WGPUBindlessMaterialData.d.ts +17 -0
- package/lib/renderer/WGPUBindlessMaterialData.js +48 -0
- package/lib/renderer/WGPUBindlessMaterialData.js.map +1 -0
- package/lib/renderer/WGPUBindlessTextures.d.ts +47 -0
- package/lib/renderer/WGPUBindlessTextures.js +180 -0
- package/lib/renderer/WGPUBindlessTextures.js.map +1 -0
- package/lib/renderer/WGPUBloomPass.js +17 -97
- package/lib/renderer/WGPUBloomPass.js.map +1 -1
- package/lib/renderer/WGPUComputePass.d.ts +1 -1
- package/lib/renderer/WGPUComputePass.js.map +1 -1
- package/lib/renderer/WGPUEnvMapDistribution.d.ts +12 -0
- package/lib/renderer/WGPUEnvMapDistribution.js +150 -0
- package/lib/renderer/WGPUEnvMapDistribution.js.map +1 -0
- package/lib/renderer/WGPUFullQuadPass.js +10 -9
- package/lib/renderer/WGPUFullQuadPass.js.map +1 -1
- package/lib/renderer/WGPUJNLMDenoiser.d.ts +1 -20
- package/lib/renderer/WGPUJNLMDenoiser.js +4 -267
- package/lib/renderer/WGPUJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WGPURayTraceOutput.js +26 -17
- package/lib/renderer/WGPURayTraceOutput.js.map +1 -1
- package/lib/renderer/WGPURayTracePass.d.ts +36 -40
- package/lib/renderer/WGPURayTracePass.js +399 -550
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.d.ts +5 -3
- package/lib/renderer/WGPURenderingPipeline.js +239 -60
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WGPUShaderCache.d.ts +2 -2
- package/lib/renderer/WGPUShaderCache.js +10 -5
- package/lib/renderer/WGPUShaderCache.js.map +1 -1
- package/lib/renderer/WGPUShaderCapabilities.d.ts +10 -0
- package/lib/renderer/WGPUShaderCapabilities.js +54 -0
- package/lib/renderer/WGPUShaderCapabilities.js.map +1 -0
- package/lib/renderer/WGPUSkyBaker.d.ts +13 -0
- package/lib/renderer/WGPUSkyBaker.js +85 -0
- package/lib/renderer/WGPUSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLAov.d.ts +41 -0
- package/lib/renderer/WebGLAov.js +106 -0
- package/lib/renderer/WebGLAov.js.map +1 -0
- package/lib/renderer/WebGLFullQuadPass.d.ts +5 -3
- package/lib/renderer/WebGLFullQuadPass.js +18 -2
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.d.ts +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +83 -74
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WebGLRayTraceOutputPass.js +7 -4
- package/lib/renderer/WebGLRayTraceOutputPass.js.map +1 -1
- package/lib/renderer/WebGLRayTracePass.d.ts +12 -2
- package/lib/renderer/WebGLRayTracePass.js +82 -7
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +116 -8
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.d.ts +39 -0
- package/lib/renderer/WebGLSkyBaker.js +422 -0
- package/lib/renderer/WebGLSkyBaker.js.map +1 -0
- package/lib/renderer/WebGLSkySource.d.ts +9 -0
- package/lib/renderer/WebGLSkySource.js +28 -0
- package/lib/renderer/WebGLSkySource.js.map +1 -0
- package/lib/renderer/accumulationTarget.d.ts +5 -0
- package/lib/renderer/accumulationTarget.js.map +1 -1
- package/lib/renderer/aov.d.ts +42 -0
- package/lib/renderer/aov.js +50 -0
- package/lib/renderer/aov.js.map +1 -0
- package/lib/renderer/aovDisplay.d.ts +14 -0
- package/lib/renderer/aovDisplay.js +32 -0
- package/lib/renderer/aovDisplay.js.map +1 -0
- package/lib/renderer/aovScene.d.ts +21 -0
- package/lib/renderer/aovScene.js +139 -0
- package/lib/renderer/aovScene.js.map +1 -0
- package/lib/renderer/binnedSahBvh.js +2 -1
- package/lib/renderer/binnedSahBvh.js.map +1 -1
- package/lib/renderer/bvhAccel.d.ts +20 -10
- package/lib/renderer/bvhAccel.js +168 -58
- package/lib/renderer/bvhAccel.js.map +1 -1
- package/lib/renderer/bvhWorkerBuild.d.ts +1 -0
- package/lib/renderer/cameraSnapshot.js +2 -1
- package/lib/renderer/cameraSnapshot.js.map +1 -1
- package/lib/renderer/cameraUniform.d.ts +2 -0
- package/lib/renderer/cameraUniform.js +12 -0
- package/lib/renderer/cameraUniform.js.map +1 -0
- package/lib/renderer/committedScene.js +4 -0
- package/lib/renderer/committedScene.js.map +1 -1
- package/lib/renderer/denoiser.d.ts +3 -11
- package/lib/renderer/denoiser.js.map +1 -1
- package/lib/renderer/depthQuery.js +4 -1
- package/lib/renderer/depthQuery.js.map +1 -1
- package/lib/renderer/displacementPreparation.d.ts +11 -0
- package/lib/renderer/displacementPreparation.js +351 -0
- package/lib/renderer/displacementPreparation.js.map +1 -0
- package/lib/renderer/displacementRange.d.ts +1 -0
- package/lib/renderer/displacementRange.js +9 -0
- package/lib/renderer/displacementRange.js.map +1 -0
- package/lib/renderer/displayParityDiagnostics.d.ts +11 -0
- package/lib/renderer/displayParityDiagnostics.js +2 -0
- package/lib/renderer/displayParityDiagnostics.js.map +1 -0
- package/lib/renderer/envMapCreation.d.ts +9 -8
- package/lib/renderer/envMapCreation.js +36 -12
- package/lib/renderer/envMapCreation.js.map +1 -1
- package/lib/renderer/envMapDistribution.d.ts +12 -2
- package/lib/renderer/envMapDistribution.js +43 -34
- package/lib/renderer/envMapDistribution.js.map +1 -1
- package/lib/renderer/geometryBvhBounds.d.ts +4 -0
- package/lib/renderer/geometryBvhBounds.js +82 -0
- package/lib/renderer/geometryBvhBounds.js.map +1 -0
- package/lib/renderer/geometryUpdateState.d.ts +32 -0
- package/lib/renderer/geometryUpdateState.js +2 -0
- package/lib/renderer/geometryUpdateState.js.map +1 -0
- package/lib/renderer/geometryUpdates.d.ts +17 -9
- package/lib/renderer/geometryUpdates.js +92 -33
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/aovDisplay.frag.d.ts +3 -0
- package/lib/renderer/glsl/aovDisplay.frag.js +54 -0
- package/lib/renderer/glsl/aovDisplay.frag.js.map +1 -0
- package/lib/renderer/glsl/aovReflectance.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js +87 -0
- package/lib/renderer/glsl/aovReflectance.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.d.ts +2 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +135 -0
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js.map +1 -0
- package/lib/renderer/glsl/aovTrace.frag.d.ts +2 -0
- package/lib/renderer/glsl/aovTrace.frag.js +121 -0
- package/lib/renderer/glsl/aovTrace.frag.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/envMap.glsl.js +80 -74
- package/lib/renderer/glsl/chunks/envMap.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/intersect.glsl.js +429 -429
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +144 -144
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +801 -801
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +6 -6
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +49 -49
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +80 -80
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +102 -102
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +20 -17
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampling.glsl.js +93 -93
- package/lib/renderer/glsl/chunks/sobol.glsl.js +79 -79
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +12 -12
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js.map +1 -1
- package/lib/renderer/glsl/depthQuery.frag.js +7 -7
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +17 -9
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js.map +1 -1
- package/lib/renderer/glsl/rayTrace.frag.js +191 -191
- package/lib/renderer/glsl/shadowCatcher.frag.js +25 -20
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +65 -60
- package/lib/renderer/glsl/webglPipeline.frag.js.map +1 -1
- package/lib/renderer/lightConstants.d.ts +10 -0
- package/lib/renderer/lightConstants.js +11 -0
- package/lib/renderer/lightConstants.js.map +1 -0
- package/lib/renderer/lightCore.d.ts +12 -0
- package/lib/renderer/lightCore.js +13 -0
- package/lib/renderer/lightCore.js.map +1 -0
- package/lib/renderer/lightSampling.d.ts +20 -17
- package/lib/renderer/lightSampling.js +123 -56
- package/lib/renderer/lightSampling.js.map +1 -1
- package/lib/renderer/lightsData.d.ts +21 -0
- package/lib/renderer/lightsData.js +192 -0
- package/lib/renderer/lightsData.js.map +1 -0
- package/lib/renderer/lightsUtil.d.ts +3 -26
- package/lib/renderer/lightsUtil.js +3 -153
- package/lib/renderer/lightsUtil.js.map +1 -1
- package/lib/renderer/materialBufferData.d.ts +70 -0
- package/lib/renderer/materialBufferData.js +2 -0
- package/lib/renderer/materialBufferData.js.map +1 -0
- package/lib/renderer/materialConstants.d.ts +11 -0
- package/lib/renderer/materialConstants.js +11 -0
- package/lib/renderer/materialConstants.js.map +1 -1
- package/lib/renderer/materialCore.d.ts +8 -0
- package/lib/renderer/materialCore.js +9 -0
- package/lib/renderer/materialCore.js.map +1 -0
- package/lib/renderer/materialEmission.d.ts +2 -2
- package/lib/renderer/materialEmission.js +3 -3
- package/lib/renderer/materialEmission.js.map +1 -1
- package/lib/renderer/materialLayout.d.ts +2 -101
- package/lib/renderer/materialLayout.js +110 -172
- package/lib/renderer/materialLayout.js.map +1 -1
- package/lib/renderer/materialLayoutSchema.d.ts +26 -0
- package/lib/renderer/materialLayoutSchema.js +172 -0
- package/lib/renderer/materialLayoutSchema.js.map +1 -0
- package/lib/renderer/materialParams.d.ts +69 -0
- package/lib/renderer/materialParams.js +272 -0
- package/lib/renderer/materialParams.js.map +1 -0
- package/lib/renderer/materialTextureSlots.d.ts +14 -324
- package/lib/renderer/materialTextureSlots.js +21 -8
- package/lib/renderer/materialTextureSlots.js.map +1 -1
- package/lib/renderer/materialTextures.d.ts +6 -0
- package/lib/renderer/{texturesFromMaterials.js → materialTextures.js} +1 -2
- package/lib/renderer/materialTextures.js.map +1 -0
- package/lib/renderer/mergeMeshesToGeometry.js +6 -147
- package/lib/renderer/mergeMeshesToGeometry.js.map +1 -1
- package/lib/renderer/meshInstances.d.ts +4 -21
- package/lib/renderer/meshInstances.js +10 -56
- package/lib/renderer/meshInstances.js.map +1 -1
- package/lib/renderer/oidnNetwork.d.ts +2 -2
- package/lib/renderer/oidnNetwork.js +1 -1
- package/lib/renderer/oidnNetwork.js.map +1 -1
- package/lib/renderer/openPbrEnergyLut.js +850 -846
- package/lib/renderer/openPbrEnergyLut.js.map +1 -1
- package/lib/renderer/ownedDenoiser.d.ts +9 -0
- package/lib/renderer/ownedDenoiser.js +2 -0
- package/lib/renderer/ownedDenoiser.js.map +1 -0
- package/lib/renderer/packedMeshInstances.d.ts +23 -0
- package/lib/renderer/packedMeshInstances.js +80 -0
- package/lib/renderer/packedMeshInstances.js.map +1 -0
- package/lib/renderer/prepareMeshBVH.d.ts +12 -47
- package/lib/renderer/prepareMeshBVH.js +21 -642
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/proceduralEnvironmentPower.d.ts +3 -0
- package/lib/renderer/proceduralEnvironmentPower.js +8 -0
- package/lib/renderer/proceduralEnvironmentPower.js.map +1 -0
- package/lib/renderer/progressiveScheduler.d.ts +1 -0
- package/lib/renderer/progressiveScheduler.js +3 -0
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +3 -1
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/renderingLimits.d.ts +9 -0
- package/lib/renderer/renderingLimits.js +18 -0
- package/lib/renderer/renderingLimits.js.map +1 -0
- package/lib/renderer/sceneAssembly.d.ts +73 -0
- package/lib/renderer/sceneAssembly.js +109 -0
- package/lib/renderer/sceneAssembly.js.map +1 -0
- package/lib/renderer/sceneChangeCore.d.ts +39 -0
- package/lib/renderer/sceneChangeCore.js +307 -0
- package/lib/renderer/sceneChangeCore.js.map +1 -0
- package/lib/renderer/sceneChangeDetector.d.ts +3 -6
- package/lib/renderer/sceneChangeDetector.js +24 -150
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLayoutSchema.d.ts +118 -0
- package/lib/renderer/sceneLayoutSchema.js +111 -0
- package/lib/renderer/sceneLayoutSchema.js.map +1 -0
- package/lib/renderer/sceneLightChanges.d.ts +3 -3
- package/lib/renderer/sceneLightChanges.js.map +1 -1
- package/lib/renderer/scenePreparation.d.ts +55 -0
- package/lib/renderer/scenePreparation.js +360 -0
- package/lib/renderer/scenePreparation.js.map +1 -0
- package/lib/renderer/scratchSampling.js +18 -18
- package/lib/renderer/scratchSampling.js.map +1 -1
- package/lib/renderer/shader.d.ts +2 -0
- package/lib/renderer/shader.js +2 -0
- package/lib/renderer/shader.js.map +1 -1
- package/lib/renderer/shaderCapabilities.d.ts +23 -0
- package/lib/renderer/shaderCapabilities.js +55 -0
- package/lib/renderer/shaderCapabilities.js.map +1 -0
- package/lib/renderer/shaderCapacity.d.ts +2 -0
- package/lib/renderer/shaderCapacity.js +5 -0
- package/lib/renderer/shaderCapacity.js.map +1 -0
- package/lib/renderer/skyModel.d.ts +9 -0
- package/lib/renderer/skyModel.js +10 -0
- package/lib/renderer/skyModel.js.map +1 -0
- package/lib/renderer/textureAtlas.d.ts +60 -0
- package/lib/renderer/textureAtlas.js +145 -0
- package/lib/renderer/textureAtlas.js.map +1 -0
- package/lib/renderer/textureAtlasPixels.d.ts +7 -0
- package/lib/renderer/textureAtlasPixels.js +68 -0
- package/lib/renderer/textureAtlasPixels.js.map +1 -0
- package/lib/renderer/util.d.ts +1 -1
- package/lib/renderer/util.js.map +1 -1
- package/lib/renderer/webgl.d.ts +9 -2
- package/lib/renderer/webgl.js +54 -9
- package/lib/renderer/webgl.js.map +1 -1
- package/lib/renderer/wgpuBindless.d.ts +26 -0
- package/lib/renderer/wgpuBindless.js +95 -0
- package/lib/renderer/wgpuBindless.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.d.ts +2 -0
- package/lib/renderer/wgpuBindlessSource.js +51 -0
- package/lib/renderer/wgpuBindlessSource.js.map +1 -0
- package/lib/renderer/wgpuMaterialConstants.d.ts +4 -0
- package/lib/renderer/wgpuMaterialConstants.js +52 -0
- package/lib/renderer/wgpuMaterialConstants.js.map +1 -0
- package/lib/renderer/wgpuSceneUniform.d.ts +42 -0
- package/lib/renderer/wgpuSceneUniform.js +125 -0
- package/lib/renderer/wgpuSceneUniform.js.map +1 -0
- package/lib/renderer/wgpuShaderSource.d.ts +15 -0
- package/lib/renderer/wgpuShaderSource.js +31 -0
- package/lib/renderer/wgpuShaderSource.js.map +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +70 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +98 -0
- package/lib/renderer/wgsl/aovReflectance.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +135 -0
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +5 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js +38 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +21 -0
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js +115 -0
- package/lib/renderer/wgsl/aovTrace.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/bloom.wgsl.d.ts +13 -0
- package/lib/renderer/wgsl/bloom.wgsl.js +92 -0
- package/lib/renderer/wgsl/bloom.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +43 -37
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +13 -1
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +742 -705
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +16 -16
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +3 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +84 -82
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +855 -857
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +139 -139
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +2 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +42 -32
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +152 -148
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +239 -232
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +26 -13
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +91 -91
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js +1 -0
- package/lib/renderer/wgsl/chunks/shadowCatcherAccumulation.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +83 -83
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +12 -12
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +8 -3
- package/lib/renderer/wgsl/compose.frag.wgsl.js +143 -118
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.js +7 -7
- package/lib/renderer/wgsl/jnlm.compute.d.ts +25 -0
- package/lib/renderer/wgsl/jnlm.compute.js +315 -0
- package/lib/renderer/wgsl/jnlm.compute.js.map +1 -0
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +28 -28
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.d.ts +1 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +17 -0
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.d.ts +1 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js +198 -0
- package/lib/renderer/wgsl/proceduralSky.compute.js.map +1 -0
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +17 -1
- package/lib/renderer/wgsl/rayTrace.compute.js +612 -393
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/Camera.js +7 -3
- package/lib/scene/Camera.js.map +1 -1
- package/lib/scene/EnvironmentLight.d.ts +5 -9
- package/lib/scene/EnvironmentLight.js +4 -14
- package/lib/scene/EnvironmentLight.js.map +1 -1
- package/lib/scene/EnvironmentLightState.d.ts +18 -0
- package/lib/scene/EnvironmentLightState.js +19 -0
- package/lib/scene/EnvironmentLightState.js.map +1 -0
- package/lib/scene/Geometry.d.ts +12 -6
- package/lib/scene/Geometry.js +37 -13
- package/lib/scene/Geometry.js.map +1 -1
- package/lib/scene/InstanceState.d.ts +39 -0
- package/lib/scene/InstanceState.js +77 -0
- package/lib/scene/InstanceState.js.map +1 -0
- package/lib/scene/InstancedMesh.d.ts +1 -1
- package/lib/scene/InstancedMesh.js +3 -0
- package/lib/scene/InstancedMesh.js.map +1 -1
- package/lib/scene/MaterialState.d.ts +209 -0
- package/lib/scene/MaterialState.js +231 -0
- package/lib/scene/MaterialState.js.map +1 -0
- package/lib/scene/Mesh.d.ts +4 -6
- package/lib/scene/Mesh.js +3 -11
- package/lib/scene/Mesh.js.map +1 -1
- package/lib/scene/MeshState.d.ts +20 -0
- package/lib/scene/MeshState.js +35 -0
- package/lib/scene/MeshState.js.map +1 -0
- package/lib/scene/OpenPBRMaterial.d.ts +6 -168
- package/lib/scene/OpenPBRMaterial.js +5 -223
- package/lib/scene/OpenPBRMaterial.js.map +1 -1
- package/lib/scene/PixelTexture.d.ts +6 -0
- package/lib/scene/PixelTexture.js +10 -0
- package/lib/scene/PixelTexture.js.map +1 -0
- package/lib/scene/ProceduralSky.d.ts +24 -0
- package/lib/scene/ProceduralSky.js +40 -0
- package/lib/scene/ProceduralSky.js.map +1 -0
- package/lib/scene/RectLight.d.ts +2 -13
- package/lib/scene/RectLight.js +3 -21
- package/lib/scene/RectLight.js.map +1 -1
- package/lib/scene/RectLightState.d.ts +31 -0
- package/lib/scene/RectLightState.js +26 -0
- package/lib/scene/RectLightState.js.map +1 -0
- package/lib/scene/Scene.d.ts +15 -4
- package/lib/scene/Scene.js.map +1 -1
- package/lib/scene/SceneNode.js +7 -6
- package/lib/scene/SceneNode.js.map +1 -1
- package/lib/scene/Texture.d.ts +10 -41
- package/lib/scene/Texture.js +4 -33
- package/lib/scene/Texture.js.map +1 -1
- package/lib/scene/TextureState.d.ts +35 -0
- package/lib/scene/TextureState.js +35 -0
- package/lib/scene/TextureState.js.map +1 -0
- package/lib/scene/attributeData.d.ts +4 -0
- package/lib/scene/attributeData.js +10 -0
- package/lib/scene/attributeData.js.map +1 -0
- package/lib/scene/lightState.d.ts +8 -0
- package/lib/scene/lightState.js +2 -0
- package/lib/scene/lightState.js.map +1 -0
- package/lib/scene/openPbrSchema.d.ts +7 -12
- package/lib/scene/openPbrSchema.js +273 -28
- package/lib/scene/openPbrSchema.js.map +1 -1
- package/lib/scene/skyParameters.d.ts +20 -0
- package/lib/scene/skyParameters.js +28 -0
- package/lib/scene/skyParameters.js.map +1 -0
- package/lib/scene/textureData.d.ts +9 -0
- package/lib/scene/textureData.js +2 -0
- package/lib/scene/textureData.js.map +1 -0
- package/lib/scene/texturePixels.d.ts +6 -0
- package/lib/scene/texturePixels.js +10 -0
- package/lib/scene/texturePixels.js.map +1 -0
- package/lib/settings/display.d.ts +33 -0
- package/lib/settings/display.js +7 -0
- package/lib/settings/display.js.map +1 -1
- package/lib/settings/render.d.ts +25 -3
- package/lib/settings/render.js +3 -1
- package/lib/settings/render.js.map +1 -1
- package/lib/tinybvh/tinybvh.wasm +0 -0
- package/lib/util/commonGeometry.js +7 -7
- package/lib/util/commonGeometry.js.map +1 -1
- package/lib/util/fromTHREE.d.ts +4 -1
- package/lib/util/fromTHREE.js +18 -5
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/util/geometry.js +42 -29
- package/lib/util/geometry.js.map +1 -1
- package/lib/util/loadRGBE.js +3 -4
- package/lib/util/loadRGBE.js.map +1 -1
- package/lib/util/studioLighting.d.ts +18 -0
- package/lib/util/studioLighting.js +36 -0
- package/lib/util/studioLighting.js.map +1 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/llms.txt +4 -0
- package/package.json +31 -5
- package/lib/renderer/texturesFromMaterials.d.ts +0 -6
- package/lib/renderer/texturesFromMaterials.js.map +0 -1
package/lib/Engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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","sourcesContent":["import InstancedMesh from './scene/InstancedMesh.js';\nimport { bvhConfig, engineSettingsKey, workerCount, textureBudget } from './settings/engine.js';\nimport {createCanvas} from './util/canvas.js';\nimport Camera from './scene/Camera.js';\nimport {getRecommendedDeviceDescriptor, validateDevice} from './renderer/deviceRequirements.js';\nimport { cameraSnapshot } from './renderer/cameraSnapshot.js';\nimport type { Scene } from './scene/Scene.js';\nimport type Mesh from './scene/Mesh.js';\nimport type Geometry from './scene/Geometry.js';\nimport Display from './Display.js';\nimport type Render from './Render.js';\nimport { Events } from './util/events.js';\nimport { SceneChangeDetector, snapshotFields, snapshotsEqual } from './renderer/sceneChangeDetector.js';\nimport { CommittedScene } from './renderer/committedScene.js';\nimport { validateSceneLights } from './renderer/lightsUtil.js';\nimport { ensureMeshGeometryAttributes, meshNeedsStaticBvh, getPreparedMeshGeometry } from './renderer/prepareMeshBVH.js';\nimport { getGeometryBvh, type BvhBuildConfig } from './renderer/geometryBvh.js';\nimport { prepareStaticBvhs } from './renderer/staticBvhPreparation.js';\nimport { canUseBvhWorker, BvhWorkerPool, resolveBvhWorkerCount } from './renderer/bvhWorkerClient.js';\nimport { DEFAULT_MAX_TEXTURE_ARRAY_BYTES } from './renderer/MaterialTable.js';\nimport { packDepthSampleArea, type DepthSampleArea } from './renderer/depthQuery.js';\nimport { makeWGPURenderTargets } from './renderer/WGPURenderingPipeline.js';\nimport { makeWebGLRenderTargets } from './renderer/WebGLRenderingPipeline.js';\nimport { WebGLDevice as WebGLRenderer } from './renderer/webgl.js';\nimport type { RenderPipeline, RenderTarget } from './renderer/renderPipeline.js';\nimport type { RenderingDiagnostics } from './renderer/RenderingPipeline.js';\nimport type { TinyBvhLayout } from './tinybvh/TinyBvhBuilder.js';\nimport type {OwnedDenoiser} from './renderer/denoiser.js';\nimport type {Denoiser} from './Render.js';\nexport type { DepthSampleArea } from './renderer/depthQuery.js';\n\n/** BLAS implementation; default builtin. */\nexport type BVHBuilder = 'tinybvh' | 'builtin';\n/** Optional CPU preparation settings. */\nexport interface PrepareOptions {\n /** Completed BLAS fraction 0–1. Default undefined. */ onProgress?: (progress: number) => void;\n /** Cancels preparation. Default undefined. */ signal?: AbortSignal;\n}\n/** Engine construction settings. */\nexport interface EngineParams {\n /** Default display canvas. Default a new HTML canvas, or OffscreenCanvas without document. */ canvas?: HTMLCanvasElement | OffscreenCanvas;\n /** Backend selection. Default auto, with WebGL fallback. webgpu requires WebGPU. */ backend?: 'auto' | 'webgpu' | 'webgl';\n /** Caller-owned WebGPU device. Default undefined uses a shared device. Implies webgpu; incompatible with webgl. */ device?: GPUDevice;\n}\n/** Material-atlas device limits. */\nexport interface TextureAtlasLimits { maxTextureArrayLayers: number; maxTextureDimension2D: number; }\n/** Initialization result. */\nexport interface EngineInfo {\n backend: 'webgpu' | 'webgl'; adapterName: string; webgpuFallbackReason?: string; limits: TextureAtlasLimits;\n}\n/** Device and target diagnostics; Per-target GPU bytes exclude shared scene, temporary passes and driver costs. */\nexport interface EngineDiagnostics extends RenderingDiagnostics {\n backend: 'webgpu' | 'webgl' | undefined; adapterName: string;\n width: number; height: number; lastError?: string; webgpuFallbackReason?: string;\n}\ninterface EngineEvents {\n progress: { stage: 'device' | 'bvh' | 'shaders'; progress: number };\n error: Error;\n devicelost: { reason: string; recovering: boolean };\n}\nlet globalGPUDevice: GPUDevice | null = null;\nlet globalGPUAdapterInfo: GPUAdapterInfo | null = null;\nlet globalGPURequest: Promise<GPUDevice> | undefined;\nasync function sharedDevice(gpu: GPU): Promise<GPUDevice> {\n if (globalGPUDevice) return globalGPUDevice;\n if (!globalGPURequest) {\n const request = (async () => {\n const adapter = await gpu.requestAdapter({powerPreference: 'high-performance'}) ?? await gpu.requestAdapter();\n if (!adapter) throw new Error('No WebGPU adapter is available');\n const device = await adapter.requestDevice(getRecommendedDeviceDescriptor(adapter));\n globalGPUAdapterInfo = (adapter as GPUAdapter & {info?: GPUAdapterInfo}).info ?? null;\n globalGPUDevice = device;\n void device.lost.then(() => { if (globalGPUDevice === device) globalGPUDevice = null; });\n return device;\n })();\n globalGPURequest = request;\n void request.finally(() => { if (globalGPURequest === request) globalGPURequest = undefined; }).catch(() => {});\n }\n return globalGPURequest;\n}\n\n/** Shared device, committed scene/camera, CPU preparation and denoiser ownership. */\nexport default class Engine {\n /** Source scene, accepted only by update(). Default undefined. */ scene: Scene | undefined;\n /** Source camera, accepted only by update(). Default undefined. */ camera: Camera | undefined;\n /** Default canvas and display settings. */ readonly display: Display;\n /** Static BLAS builder. Default builtin. */ bvhBuilder: BVHBuilder = 'builtin';\n /** Static BLAS layout. Default bvh2; dynamic geometry uses bvh2. */ bvhLayout: TinyBvhLayout = 'bvh2';\n /** Enable TinyBVH spatial splits. Default false. */ bvhSpatialSplits = false;\n /** Material texture budget in bytes. Default 384 MiB. */ textureAtlasBudgetBytes = DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n /** Maximum CPU BVH workers. Default auto (hardware concurrency minus one, clamped 1–4). */\n get bvhWorkerCount(): number | 'auto' { return this._bvhWorkerCount; }\n set bvhWorkerCount(count: number | 'auto') { resolveBvhWorkerCount(count); this._bvhWorkerCount = count; }\n private _bvhWorkerCount: number | 'auto' = 'auto';\n private _bvhWorkerPool?: BvhWorkerPool;\n private _bvhPreparationRevision = 0;\n private _bvhPreparation?: Promise<void>;\n private _bvhPreparationTail: Promise<unknown> = Promise.resolve();\n private _tinyBvhUnavailable = false;\n private _bvhWorkerUnavailable = false;\n private _bvhPreparedGeometry = new WeakMap<Mesh, [Geometry, number]>();\n private _lastBvhBuild?: { geometryCount: number; bvhTimeMs: number };\n private _lastBvhSettings = '';\n private _lastBudget = -1;\n private _shaderProgress = '';\n private _events = new Events<EngineEvents>();\n private _pipeline?: RenderPipeline;\n private _webglRenderer?: WebGLRenderer;\n private _gpuDevice?: GPUDevice;\n private _suppliedDevice?: GPUDevice;\n private readonly _ownsDeviceSelection: boolean;\n private _deviceRevision = 0;\n private _lossController?: AbortController;\n private _deviceLossError?: Error;\n private _webglListening = false;\n private _webglLost = false;\n private _recoverWebGL = false;\n private _contextRestore?: {promise: Promise<void>; resolve: () => void; reject: (error: Error) => void};\n private _gpuAdapterInfo?: GPUAdapterInfo;\n private _backendChoice: NonNullable<EngineParams['backend']>;\n private _initPromise?: Promise<EngineInfo>;\n private _info?: EngineInfo;\n private _pipelineInitError?: Error;\n private _webgpuFallbackReason?: string;\n private _reportedErrors = new WeakSet<Error>();\n private _loggedErrorMessages = new Set<string>();\n private _sceneChangeDetector: SceneChangeDetector;\n private _snapshot = new CommittedScene();\n private _sourceScene?: Scene;\n private _committedScene?: Scene;\n private _sourceCamera?: Camera;\n private _committedCamera?: Camera;\n private _cameraFields: unknown[] = [];\n private _sceneRevision = 0;\n private _cameraRevision = 0;\n private _uploadedRevision = -1;\n private _pendingMeshes: 'none' | 'incremental' | 'full' = 'full';\n private _pendingTransforms = new Set<Mesh>();\n private _pendingColors = new Set<InstancedMesh>();\n private _pendingGeometries = new Set<Geometry>();\n private _pendingMaterials = new Set<import('./scene/OpenPBRMaterial.js').default>();\n private _pendingLights = true;\n private _pendingBackground = true;\n private _disposed = false;\n private _readingDepth = false;\n private _renders = new Set<Render>();\n private _targetCounter = 0;\n private _presented?: RenderTarget;\n private _denoisers = new Set<OwnedDenoiser>();\n private _denoiserCache = new Map<string, {references: number; value?: OwnedDenoiser; pending?: Promise<OwnedDenoiser>}>();\n private _denoiserEntries = new WeakMap<OwnedDenoiser, {key: string; references: number; value?: OwnedDenoiser; pending?: Promise<OwnedDenoiser>}>();\n private _weights = new Map<string, Promise<ArrayBuffer>>();\n private _customPrepared = new WeakMap<Denoiser, {device: GPUDevice; width: number; height: number}>();\n private _denoiseTail: Promise<unknown> = Promise.resolve();\n private _lastError: Error | undefined;\n /** Most recent synchronous engine/render failure. Default undefined. */\n get lastError() { return this._lastError; }\n /** @internal */ _setRenderError(error?: Error) { this._lastError = error ?? this._pipelineInitError; }\n\n constructor(params: EngineParams = {}) {\n if (params.device && params.backend === 'webgl') throw new Error('A supplied GPUDevice cannot use the webgl backend.');\n this._suppliedDevice = params.device;\n this._ownsDeviceSelection = !params.device;\n this._backendChoice = params.device ? 'webgpu' : params.backend ?? 'auto';\n this._sceneChangeDetector = new SceneChangeDetector();\n this.display = Display._create(this, params.canvas ?? createCanvas());\n }\n /** Initializes once; concurrent/repeated calls share the result. */\n init(): Promise<EngineInfo> {\n return this._initPromise ??= (async () => {\n if (this._disposed) throw new Error('Engine is disposed.');\n if (this._pipelineInitError && !this._ownsDeviceSelection) throw this._pipelineInitError;\n const revision = this._deviceRevision;\n if (this._contextRestore) await this._contextRestore.promise;\n if (this._disposed) throw new Error('Engine is disposed.');\n await this._initPipeline(this._backendChoice !== 'webgl' && !this._recoverWebGL);\n if (revision !== this._deviceRevision) throw this._deviceLossError;\n if (this._pipelineInitError) throw this._pipelineInitError;\n if (this._disposed) { this._pipeline?.dispose(); throw new Error('Engine is disposed.'); }\n const gl = this._webglRenderer?.gl, limits = this._gpuDevice?.limits;\n this._info = { backend: this._gpuDevice ? 'webgpu' : 'webgl', adapterName: this._adapterName(), webgpuFallbackReason: this._webgpuFallbackReason,\n limits: { maxTextureArrayLayers: limits?.maxTextureArrayLayers ?? gl?.getParameter(gl.MAX_ARRAY_TEXTURE_LAYERS), maxTextureDimension2D: limits?.maxTextureDimension2D ?? gl?.getParameter(gl.MAX_TEXTURE_SIZE) } };\n this._upload();\n return this._info;\n })();\n }\n /** Initialization info. Default undefined until init resolves. */ get info() { return this._info; }\n /** Active backend. Default undefined until initialization completes. */ get backend() { return this._info?.backend; }\n /** GPU device. Default undefined before initialization and on WebGL. */ get device() { return this._gpuDevice; }\n /** Subscribes to shared progress/errors/device loss; returns unsubscribe. */\n on<K extends keyof EngineEvents>(event: K, listener: (value: EngineEvents[K]) => void): () => void { return this._events.on(event, listener); }\n\n /** The sole external edit detection/commit point. Returns whether inputs changed. */\n update(): boolean {\n if (this._disposed) throw new Error('Engine is disposed.');\n this._lastError = this._pipelineInitError;\n let changed = false, resetTiming = false;\n const cameraFields = this.camera ? snapshotFields(this.camera) : [];\n if (this.camera !== this._sourceCamera || !snapshotsEqual(cameraFields, this._cameraFields)) {\n this._sourceCamera = this.camera; this._cameraFields = cameraFields;\n this._committedCamera = this.camera ? cameraSnapshot(this.camera) : undefined; this._cameraRevision++; changed = true;\n }\n const bvhSettings = engineSettingsKey(this, 'bvh');\n const force = bvhSettings !== this._lastBvhSettings || textureBudget(this) !== this._lastBudget;\n if (this.scene !== this._sourceScene || force) this._sceneChangeDetector.reset();\n if (this.scene) {\n validateSceneLights(this.scene.lights, error => this._notifyError(error));\n ensureMeshGeometryAttributes(this.scene.meshes);\n const changes = this._sceneChangeDetector.detect(this.scene);\n resetTiming = changes.meshes === 'full' || this.scene !== this._sourceScene || force;\n if (changes.meshes !== 'none' || changes.lights || changes.background || this.scene !== this._sourceScene || force) {\n this._committedScene = this._snapshot.capture(this.scene, changes);\n if (changes.meshes === 'full' || force || this.scene !== this._sourceScene) this._pendingMeshes = 'full';\n else if (changes.meshes === 'incremental' && this._pendingMeshes !== 'full') this._pendingMeshes = 'incremental';\n for (const mesh of changes.transforms) this._pendingTransforms.add(this._snapshot.mirror(mesh));\n for (const mesh of changes.colors) this._pendingColors.add(this._snapshot.mirror(mesh));\n for (const geometry of changes.geometries) this._pendingGeometries.add(this._snapshot.mirror(geometry));\n for (const material of changes.materials) this._pendingMaterials.add(this._snapshot.mirror(material));\n this._pendingLights ||= changes.lights;\n this._pendingBackground ||= changes.background;\n this._sceneRevision++; changed = true;\n }\n this._sceneChangeDetector.commit();\n } else if (this._sourceScene) { this._committedScene = undefined; this._pendingMeshes = 'full'; this._pendingLights = true; this._pendingBackground = true; this._sceneRevision++; changed = true; }\n this._sourceScene = this.scene; this._lastBvhSettings = bvhSettings; this._lastBudget = textureBudget(this);\n if (!this._pipeline) void this.init().catch(() => {});\n if (changed) for (const render of this._renders) render._inputsChanged(resetTiming);\n this._upload();\n return changed;\n }\n private _upload() {\n const pipeline = this._pipeline;\n if (!pipeline || this._disposed || this._bvhPreparation || this._uploadedRevision === this._sceneRevision) return;\n const scene = this._committedScene ?? { meshes: [], lights: [] };\n if (this._needsBVHPreparation(scene.meshes)) {\n const task = this.prepare(scene); this._bvhPreparation = task;\n void task.then(() => { if (this._bvhPreparation === task) this._bvhPreparation = undefined; this._upload(); }, error => { if (this._bvhPreparation === task) this._bvhPreparation = undefined; this._notifyError(error); });\n return;\n }\n const budgetChanged = pipeline.setTextureAtlasBudget(this._lastBudget >= 0 ? this._lastBudget : textureBudget(this));\n if (this._pendingMeshes !== 'none' || budgetChanged) pipeline.setMeshes(scene.meshes, this._pendingMeshes === 'full' || budgetChanged ? undefined : {\n transforms: [...this._pendingTransforms], colors: [...this._pendingColors], geometries: [...this._pendingGeometries], materials: [...this._pendingMaterials]\n });\n if (this._pendingLights) pipeline.setLights(scene.lights);\n if (this._pendingBackground) pipeline.setBackground(scene.background);\n this._pendingMeshes = 'none'; this._pendingLights = false; this._pendingBackground = false;\n this._pendingTransforms.clear(); this._pendingColors.clear(); this._pendingGeometries.clear(); this._pendingMaterials.clear();\n this._uploadedRevision = this._sceneRevision;\n }\n private _bvhConfig(): BvhBuildConfig { return bvhConfig(this); }\n /** Builds static CPU BVHs for this scene without replacing GPU inputs. Options default undefined. */\n prepare(scene: Scene, options: PrepareOptions = {}): Promise<void> {\n const revision = this._bvhPreparationRevision;\n const preparation = this._bvhPreparationTail.then(async () => {\n const isCancelled = () => revision !== this._bvhPreparationRevision || options.signal?.aborted === true;\n if (isCancelled()) return;\n const meshes = scene.meshes;\n const useWorker = canUseBvhWorker() && !this._bvhWorkerUnavailable;\n if (useWorker) {\n const count = workerCount(this);\n if (this._bvhWorkerPool?.size !== count) {\n this._bvhWorkerPool?.dispose();\n this._bvhWorkerPool = new BvhWorkerPool(count);\n }\n }\n const config = this._bvhConfig();\n const result = await prepareStaticBvhs(meshes, {\n config,\n ...config,\n builder: this.bvhBuilder === 'tinybvh' && !this._tinyBvhUnavailable ? 'tinybvh' : 'builtin',\n useWorker, workerPool: this._bvhWorkerPool, isCancelled,\n rebuild: false, onProgress: progress => {\n if (this._bvhPreparation === preparation) this._events.emit('progress', {stage: 'bvh', progress});\n options.onProgress?.(progress);\n }\n });\n if (isCancelled()) return;\n if (result.workerUnavailable && !this._bvhWorkerUnavailable) {\n this._bvhWorkerUnavailable = true;\n this._bvhWorkerPool?.dispose();\n this._bvhWorkerPool = undefined;\n console.warn('BVH preparation failed; falling back to the calling-thread BVH builder.');\n }\n if (result.tinyBvhUnavailable && !this._tinyBvhUnavailable) {\n this._tinyBvhUnavailable = true;\n console.warn('BVH preparation failed; falling back to the built-in BVH builder.');\n }\n result.failedMeshes.forEach(mesh => {\n this._bvhPreparedGeometry.set(mesh, [mesh.geometry, mesh.geometry.version]);\n });\n\n this._lastBvhBuild = { geometryCount: result.geometryCount, bvhTimeMs: result.bvhTimeMs };\n });\n this._bvhPreparationTail = preparation.catch(() => undefined);\n const signal = options.signal;\n if (!signal) return preparation;\n return new Promise<void>((resolve, reject) => {\n const aborted = () => reject(signal.reason ?? new DOMException('BVH preparation aborted', 'AbortError'));\n if (signal.aborted) { aborted(); return; }\n signal.addEventListener('abort', aborted, { once: true });\n preparation.then(resolve, reject).finally(() => signal.removeEventListener('abort', aborted));\n });\n }\n\n private _needsBVHPreparation(meshes: Mesh[]) {\n if (this._bvhPreparation) return true;\n if ((this.bvhBuilder !== 'tinybvh' || this._tinyBvhUnavailable) &&\n (!canUseBvhWorker() || this._bvhWorkerUnavailable)) {\n return meshes.some(mesh => !!getGeometryBvh(getPreparedMeshGeometry(mesh)) && meshNeedsStaticBvh(mesh, this._bvhConfig()));\n }\n return meshes.some((mesh) => {\n const prepared = this._bvhPreparedGeometry.get(mesh);\n const attempted = prepared?.[0] === mesh.geometry &&\n prepared[1] === mesh.geometry.version;\n return !attempted && meshNeedsStaticBvh(mesh, this._bvhConfig());\n });\n }\n\n private async _initPipeline(preferWebGPU: boolean) {\n let gpuCreated = false;\n try {\n\n this._events.emit('progress', {stage: 'device', progress: 0});\n this._pipelineInitError = undefined;\n if (preferWebGPU && (this._suppliedDevice || (typeof navigator !== 'undefined' && navigator.gpu))) {\n try {\n const gpu = typeof navigator !== 'undefined' ? navigator.gpu : undefined;\n const gpuDevice = this._suppliedDevice ?? await sharedDevice(gpu!);\n const gpuAdapterInfo = this._suppliedDevice\n ? (gpuDevice as GPUDevice & {adapterInfo?: GPUAdapterInfo}).adapterInfo : globalGPUAdapterInfo;\n if (this._disposed) return;\n validateDevice(gpuDevice);\n this._gpuAdapterInfo = gpuAdapterInfo ?? undefined;\n this._gpuDevice = gpuDevice;\n this._pipeline = makeWGPURenderTargets(this.display.canvas, gpuDevice, {\n presentationFormat: gpu?.getPreferredCanvasFormat() ?? 'bgra8unorm'\n });\n this._watchDevice(gpuDevice);\n gpuCreated = true;\n } catch (e) {\n if (this._backendChoice === 'webgpu') throw e;\n this._webgpuFallbackReason = e instanceof Error ? e.message : String(e);\n this._gpuDevice = undefined;\n this._gpuAdapterInfo = undefined;\n }\n }\n if (!gpuCreated) {\n if (this._backendChoice === 'webgpu') throw new Error('WebGPU is not available in this environment');\n if (preferWebGPU && !this._webgpuFallbackReason) {\n this._webgpuFallbackReason = 'WebGPU is not available in this environment';\n }\n this._webglRenderer = new WebGLRenderer({\n canvas: this.display.canvas,\n alpha: true,\n depth: true,\n stencil: false,\n antialias: false,\n pixelRatio: 1,\n preserveDrawingBuffer: true,\n // PENDING\n premultipliedAlpha: false,\n parallelShaderCompile: true,\n powerPreference: 'high-performance'\n });\n\n this._pipeline = makeWebGLRenderTargets(this._webglRenderer);\n if (!this._webglListening) {\n this._webglListening = true;\n this.display.canvas.addEventListener('webglcontextlost', this._onContextLost);\n this.display.canvas.addEventListener('webglcontextrestored', this._onContextRestored);\n }\n this._recoverWebGL = false;\n }\n\n\n } catch (error) {\n this._pipelineInitError = error instanceof Error ? error : new Error(String(error));\n this._lastError = this._pipelineInitError;\n this._notifyError(this._pipelineInitError);\n } finally {\n\n this._events.emit('progress', {stage: 'device', progress: 1});\n }\n }\n\n private _onContextLost = (event: Event) => {\n event.preventDefault();\n if (this._disposed || this._webglLost) return;\n this._webglLost = true; this._recoverWebGL = true;\n let resolve!: () => void, reject!: (error: Error) => void;\n const promise = new Promise<void>((done, fail) => {resolve = done; reject = fail;});\n void promise.catch(() => {});\n this._contextRestore = {promise, resolve, reject};\n const error = new Error(`WebGL context lost: ${(event as WebGLContextEvent).statusMessage || 'context is unavailable'}`);\n this._invalidateDevice(error, true);\n this._events.emit('devicelost', {reason: 'webglcontextlost', recovering: true});\n };\n private _onContextRestored = () => {\n if (this._disposed || !this._webglLost) return;\n this._webglLost = false;\n const restore = this._contextRestore; this._contextRestore = undefined; restore?.resolve();\n };\n private _watchDevice(device: GPUDevice) {\n void device.lost.then(info => {\n if (this._disposed || this._gpuDevice !== device) return;\n if (globalGPUDevice === device) globalGPUDevice = null;\n const recovering = this._ownsDeviceSelection;\n const error = new Error(`WebGPU device lost (${info.reason}): ${info.message || 'device is unavailable'}`);\n this._invalidateDevice(error, recovering);\n this._events.emit('devicelost', {reason: info.reason, recovering});\n if (!recovering) this._notifyError(error);\n });\n }\n private _invalidateDevice(error: Error, recovering: boolean) {\n this._deviceLossError = error; this._deviceRevision++;\n this._lossController?.abort(error); this._lossController = undefined;\n for (const render of this._renders) render._deviceLost(recovering);\n this._pipeline?.dispose(); this._pipeline = undefined;\n this._webglRenderer?.dispose(); this._webglRenderer = undefined;\n this._gpuDevice = undefined; this._gpuAdapterInfo = undefined;\n this._info = undefined; this._initPromise = undefined;\n this._pipelineInitError = recovering ? undefined : error; this._lastError = error;\n this._presented = undefined; this._shaderProgress = '';\n this._uploadedRevision = -1; this._pendingMeshes = 'full'; this._pendingLights = true; this._pendingBackground = true;\n this._sceneRevision++;\n this._customPrepared = new WeakMap();\n for (const filter of [...this._denoisers]) {\n const entry = this._denoiserEntries.get(filter); if (entry) entry.references = 1;\n this._releaseDenoiser(filter);\n }\n this._denoiserCache.clear();\n }\n /** Replaces a caller-owned device after validation. Only available on engines\n * constructed with device; the next update/refine uploads the committed scene.\n */\n async setDevice(device: GPUDevice): Promise<void> {\n if (this._disposed) throw new Error('Engine is disposed.');\n if (this._ownsDeviceSelection) throw new Error('setDevice requires an engine constructed with device.');\n try { validateDevice(device); }\n catch (error) {this._lastError = this._notifyError(error); throw error;}\n if (this._gpuDevice === device && !this._pipelineInitError) return;\n this._invalidateDevice(new Error('WebGPU device replaced during converge.'), true);\n this._suppliedDevice = device;\n }\n /** @internal Device loss rejects pending waits without relying on driver completion. */\n _awaitDevice<T>(work: Promise<T>): Promise<T> {\n const signal = (this._lossController ??= new AbortController()).signal;\n return new Promise((resolve, reject) => {\n const lost = () => reject(signal.reason);\n signal.addEventListener('abort', lost, {once: true});\n work.then(resolve, reject).finally(() => signal.removeEventListener('abort', lost));\n });\n }\n /** @internal */ get _deviceGeneration() { return this._deviceRevision; }\n /** @internal */ get _lostError() { return this._deviceLossError; }\n\n private _adapterName() {\n if (this._gpuAdapterInfo) return this._gpuAdapterInfo.description || this._gpuAdapterInfo.vendor || 'WebGPU';\n const gl = this._webglRenderer?.gl, extension = gl?.getExtension('WEBGL_debug_renderer_info');\n return extension && gl ? gl.getParameter(extension.UNMASKED_RENDERER_WEBGL) : this._webglRenderer ? 'WebGL 2' : this._gpuDevice ? 'WebGPU' : '';\n }\n /** @internal */ _reportShaderProgress() {\n const compilation = this._pipeline?.getDiagnostics().shaderCompilation;\n if (!compilation) return;\n const key = `${compilation.status}/${compilation.completedPipelineCount}/${compilation.pipelineCount}`;\n if (key === this._shaderProgress) return;\n this._shaderProgress = key;\n this._events.emit('progress', {stage: 'shaders', progress: compilation.pipelineCount ? compilation.completedPipelineCount / compilation.pipelineCount : 1});\n }\n /** Current shared preparation and resident target statistics. Default undefined before any work. */\n getDiagnostics(): EngineDiagnostics | undefined {\n if (!this._pipeline && !this._lastBvhBuild) return;\n const values = this._pipeline?.getDiagnostics();\n return { ...values, bvh: {...values?.bvh, lastBuild: this._lastBvhBuild}, backend: this.backend, adapterName: this._adapterName(), width: this.display.canvas.width, height: this.display.canvas.height,\n lastError: this.lastError?.message, webgpuFallbackReason: this._webgpuFallbackReason,\n presentedTarget: this._presented?.label, presentedComplete: this._presented?.presentationComplete ?? false };\n }\n /** Queries a 7×7 depth grid using the committed engine camera. Default undefined until GPU data is ready. */\n async readDepthSamples(area: DepthSampleArea): Promise<Float32Array | undefined> {\n packDepthSampleArea(area, 1);\n if (!this._ready || !this._committedCamera || this._readingDepth) return;\n this._readingDepth = true;\n try {\n const camera = cameraSnapshot(this._committedCamera);\n camera.aspect ??= this.display.canvas.width / this.display.canvas.height;\n const result = await this._pipeline!.readDepthSamples(camera, area);\n return this._disposed ? undefined : result;\n }\n finally { this._readingDepth = false; }\n }\n /** Releases all renders, shared resources, CPU workers and owned denoisers. */\n dispose() {\n if (this._disposed) return;\n this._disposed = true; this._bvhPreparationRevision++;\n this._lossController?.abort(new Error('Engine is disposed.')); this._lossController = undefined;\n this._contextRestore?.reject(new Error('Engine is disposed.')); this._contextRestore = undefined;\n if (this._webglListening) {\n this.display.canvas.removeEventListener('webglcontextlost', this._onContextLost);\n this.display.canvas.removeEventListener('webglcontextrestored', this._onContextRestored);\n }\n for (const render of [...this._renders]) render.dispose();\n this._pipeline?.dispose(); this._pipeline = undefined; this._webglRenderer?.dispose(); this._bvhWorkerPool?.dispose();\n for (const denoiser of [...this._denoisers]) { const entry = this._denoiserEntries.get(denoiser); if (entry) entry.references = 1; this._releaseDenoiser(denoiser); }\n this._denoiserCache.clear();\n this._weights.clear(); this._events.clear();\n }\n /** @internal */ get _initializationError() { return this._pipelineInitError; }\n /** @internal */ get _ready() { return !!this._pipeline && this._uploadedRevision === this._sceneRevision && !!this._committedScene && !!this._committedCamera && !this._disposed; }\n /** @internal */ get _inputs() { return {scene: this._sceneRevision, camera: this._cameraRevision, value: this._committedCamera}; }\n /** @internal */ _register(render: Render) { if (this._disposed) throw new Error('Engine is disposed.'); this._renders.add(render); }\n /** @internal */ _unregister(render: Render) { this._renders.delete(render); }\n /** @internal */ _createTarget() { return this._pipeline?.createTarget(`render-${++this._targetCounter}`); }\n /** @internal */ _releaseTarget(target: RenderTarget) { if (this._presented === target) this._presented = undefined; this._pipeline?.releaseTarget(target); }\n /** @internal */ _present(target: RenderTarget) { target.activate(); target.present(); this._presented = target; }\n /** @internal */ _notifyError(value: unknown): Error {\n const error = value instanceof Error ? value : new Error(String(value));\n if (!this._loggedErrorMessages.has(error.message)) { this._loggedErrorMessages.add(error.message); console.error(`Path tracing failed: ${error.message}`, error); }\n if (!this._reportedErrors.has(error)) { this._reportedErrors.add(error); this._events.emit('error', error); }\n return error;\n }\n /** @internal */ _getWeights(url: string, load: () => Promise<ArrayBuffer>) {\n let pending = this._weights.get(url);\n if (!pending) { pending = load(); this._weights.set(url, pending); void pending.catch(() => { if (this._weights.get(url) === pending) this._weights.delete(url); }); }\n return pending;\n }\n /** @internal */ _retainDenoiser<T extends OwnedDenoiser>(key: string, create: () => T): T {\n let entry = this._denoiserCache.get(key);\n if (!entry?.value) {\n const value = this._ownDenoiser(create());\n const next = {key, references: 0, value};\n this._denoiserCache.set(key, next); this._denoiserEntries.set(value, next); entry = next;\n }\n entry.references++; return entry.value as T;\n }\n /** @internal */ async _acquireDenoiser(key: string, create: () => Promise<Extract<OwnedDenoiser, {kind: 'oidn'}>>): Promise<Extract<OwnedDenoiser, {kind: 'oidn'}>> {\n let entry = this._denoiserCache.get(key);\n if (!entry) {\n const next: {key: string; references: number; value?: OwnedDenoiser; pending?: Promise<OwnedDenoiser>} = {key, references: 0};\n const revision = this._deviceRevision;\n next.pending = create().then(filter => {\n if (revision !== this._deviceRevision) { this._disposeDenoiser(filter); throw this._deviceLossError; }\n next.value = this._ownDenoiser(filter); this._denoiserEntries.set(filter, next); return filter; });\n this._denoiserCache.set(key, next); entry = next;\n }\n entry.references++;\n try { return (entry.value ?? await entry.pending!) as Extract<OwnedDenoiser, {kind: 'oidn'}>; }\n catch (error) { entry.references--; if (this._denoiserCache.get(key) === entry) this._denoiserCache.delete(key); throw error; }\n }\n /** @internal */ _ownDenoiser<T extends OwnedDenoiser>(denoiser: T): T {\n if (this._disposed) { this._disposeDenoiser(denoiser); throw new Error('Engine is disposed.'); }\n this._denoisers.add(denoiser); return denoiser;\n }\n /** @internal */ _releaseDenoiser(denoiser: OwnedDenoiser) {\n const entry = this._denoiserEntries.get(denoiser);\n if (entry && --entry.references > 0) return;\n if (entry && this._denoiserCache.get(entry.key) === entry) this._denoiserCache.delete(entry.key);\n this._denoiserEntries.delete(denoiser);\n if (!this._denoisers.delete(denoiser)) return;\n this._disposeDenoiser(denoiser);\n }\n private _disposeDenoiser(denoiser: OwnedDenoiser) {\n if (denoiser.kind === 'oidn') { denoiser.denoiser.auxiliaryDenoisers?.albedo.dispose(); denoiser.denoiser.auxiliaryDenoisers?.normal.dispose(); }\n denoiser.denoiser.dispose();\n }\n /** @internal Called only while holding the shared inference lease. */\n async _prepareCustomDenoiser(denoiser: Denoiser, width: number, height: number) {\n const device = this.device;\n if (!device) throw new Error('Custom denoising requires WebGPU.');\n const previous = this._customPrepared.get(denoiser);\n if (previous?.device === device && previous.width === width && previous.height === height) return;\n await denoiser.prepare?.({device, width, height});\n this._customPrepared.set(denoiser, {device, width, height});\n }\n /** @internal */ _enqueueDenoise<T>(work: () => Promise<T>): Promise<T> {\n const task = this._denoiseTail.then(async () => {\n const device = this._gpuDevice, generation = this._deviceRevision;\n try { return await work(); }\n finally {\n // Cancelling tiled OIDN stops future tiles, not the commands already\n // submitted. Keep the shared scratch lease until those commands finish\n // so rapid edits cannot pile up inference or resize its inputs in flight.\n // A lost/disposed device must release the lease without waiting for a\n // queue that may never complete.\n if (device && device === this._gpuDevice && generation === this._deviceRevision && !this._disposed) {\n await this._awaitDevice(device.queue.onSubmittedWorkDone()).catch(() => {});\n }\n }\n });\n this._denoiseTail = task.catch(() => {}); return task;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAC,8BAA8B,EAAE,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAC,aAAa,EAAE,oBAAoB,EAAgC,MAAM,4BAA4B,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACzH,OAAO,EAAE,cAAc,EAAuB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAwB,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAuCnE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiC,CAAC;AAC/D,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,IAAsB;IAC1D,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YACpB,IAAI,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,EAAC,eAAe,EAAE,kBAAkB,EAAC,CAAC,IAAI,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;YAC5G,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,IAAI,MAAiB,EAAE,cAAkC,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,GAAG,UAAU,EAAE,gBAAgB,EAAE,CAAC,GAAG,UAAU,CAAC,gBAAgB,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,EAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC1J,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO;oBAAE,MAAM,KAAK,CAAC;gBAC1B,cAAc,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,EAAC,eAAe,EAAE,kBAAkB,EAAC,CAAC,IAAI,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;gBAC5G,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACjF,MAAM,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC1E,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;gBAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,OAAO,EAAC,MAAM,EAAE,WAAW,EAAG,OAAgD,CAAC,IAAI,EAAE,cAAc,EAAC,CAAC;QACvG,CAAC,CAAC,EAAE,CAAC;QACL,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC;QACxB,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;YAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,kEAAkE,CAAC,KAAK,CAAoB;IAC5F,mEAAmE,CAAC,MAAM,CAAqB;IAC/F,2CAA2C,CAAU,OAAO,CAAU;IACtE,4CAA4C,CAAC,UAAU,GAAe,SAAS,CAAC;IAChF,oEAAoE,CAAC,SAAS,GAAkB,MAAM,CAAC;IACvG,oDAAoD,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC9E,yDAAyD,CAAC,uBAAuB,GAAG,+BAA+B,CAAC;IACpH,2FAA2F;IAC3F,IAAI,cAAc,KAAsB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACtE,IAAI,cAAc,CAAC,KAAsB,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC;IAClG,eAAe,GAAoB,MAAM,CAAC;IAC1C,cAAc,CAAiB;IAC/B,uBAAuB,GAAG,CAAC,CAAC;IAC5B,eAAe,CAAiB;IAChC,mBAAmB,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1D,mBAAmB,GAAG,KAAK,CAAC;IAC5B,qBAAqB,GAAG,KAAK,CAAC;IAC9B,oBAAoB,GAAG,IAAI,OAAO,EAA4B,CAAC;IAC/D,aAAa,CAAgD;IAC7D,gBAAgB,GAAG,EAAE,CAAC;IACtB,WAAW,GAAG,CAAC,CAAC,CAAC;IACjB,eAAe,GAAG,EAAE,CAAC;IACrB,OAAO,GAAG,IAAI,MAAM,EAAgB,CAAC;IACrC,SAAS,CAAkB;IAC3B,cAAc,CAAiB;IAC/B,UAAU,CAAa;IACvB,eAAe,CAAa;IACnB,oBAAoB,CAAU;IACvC,eAAe,GAAG,CAAC,CAAC;IACpB,eAAe,CAAmB;IAClC,gBAAgB,CAAS;IACzB,eAAe,GAAG,KAAK,CAAC;IACxB,UAAU,GAAG,KAAK,CAAC;IACnB,aAAa,GAAG,KAAK,CAAC;IACtB,eAAe,CAAiF;IAChG,eAAe,CAAkB;IACjC,cAAc,CAAuC;IAC5C,eAAe,CAAmB;IAC3C,YAAY,CAAuB;IACnC,KAAK,CAAc;IACnB,kBAAkB,CAAS;IAC3B,qBAAqB,CAAU;IAC/B,eAAe,GAAG,IAAI,OAAO,EAAS,CAAC;IACvC,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,oBAAoB,CAAsB;IAC1C,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;IACjC,YAAY,CAAS;IACrB,eAAe,CAAS;IACxB,aAAa,CAAU;IACvB,gBAAgB,CAAU;IAC1B,aAAa,GAAc,EAAE,CAAC;IAC9B,cAAc,GAAG,CAAC,CAAC;IACnB,eAAe,GAAG,CAAC,CAAC;IACpB,iBAAiB,GAAG,CAAC,CAAC,CAAC;IACvB,cAAc,GAAoC,MAAM,CAAC;IACzD,kBAAkB,GAAG,IAAI,GAAG,EAAQ,CAAC;IACrC,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC1C,kBAAkB,GAAG,IAAI,GAAG,EAAY,CAAC;IACzC,iBAAiB,GAAG,IAAI,GAAG,EAAgD,CAAC;IAC5E,cAAc,GAAG,IAAI,CAAC;IACtB,kBAAkB,GAAG,IAAI,CAAC;IAC1B,SAAS,GAAG,KAAK,CAAC;IAClB,aAAa,GAAG,KAAK,CAAC;IACtB,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,cAAc,GAAG,CAAC,CAAC;IACnB,UAAU,CAAgB;IAC1B,UAAU,GAAG,IAAI,GAAG,EAAiB,CAAC;IACtC,cAAc,GAAG,IAAI,GAAG,EAAyF,CAAC;IAClH,gBAAgB,GAAG,IAAI,OAAO,EAA6G,CAAC;IAC5I,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;IACnD,eAAe,GAAG,IAAI,OAAO,EAAgE,CAAC;IAC9F,YAAY,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IACnD,UAAU,CAAoB;IACtC,wEAAwE;IACxE,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C,gBAAgB,CAAC,eAAe,CAAC,KAAa,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEvG,YAAY,SAAuB,EAAE;QACnC,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACvH,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC;QACxD,IAAI,CAAC,oBAAoB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QAC1E,IAAI,CAAC,oBAAoB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,oEAAoE;IACpE,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,KAAK,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,oBAAoB;gBAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC;YACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACtC,IAAI,IAAI,CAAC,eAAe;gBAAE,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YAC7D,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjF,IAAI,QAAQ,KAAK,IAAI,CAAC,eAAe;gBAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC;YACnE,IAAI,IAAI,CAAC,kBAAkB;gBAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC;YAC3D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAAC,CAAC;YAC1F,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;YACrE,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;gBAC9I,MAAM,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,IAAI,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,IAAI,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;YACrN,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,kEAAkE,CAAC,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACpG,wEAAwE,CAAC,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACtH,wEAAwE,CAAC,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACjH,6EAA6E;IAC7E,EAAE,CAA+B,KAAQ,EAAE,QAA0C,IAAgB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/I,qFAAqF;IACrF,MAAM;QACJ,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC1C,IAAI,OAAO,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5F,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;YAAC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;YACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;QACxH,CAAC;QACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,WAAW,KAAK,IAAI,CAAC,gBAAgB,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC;QAChG,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,IAAI,KAAK;YAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QACjF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7D,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;YACrF,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;gBACnH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACnE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY;oBAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;qBACpG,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM;oBAAE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;gBACjH,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU;oBAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChG,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,MAAM;oBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxF,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,UAAU;oBAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxG,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS;oBAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACtG,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC;gBACvC,IAAI,CAAC,kBAAkB,KAAK,OAAO,CAAC,UAAU,CAAC;gBAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAAC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YAAC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;QAAC,CAAC;QACpM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QAAC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;QAAC,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5G,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,IAAI,OAAO;YAAE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC;IACO,OAAO;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,cAAc;YAAE,OAAO;QAClH,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACjE,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9D,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;gBAAE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;gBAAE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5N,OAAO;QACT,CAAC;QACD,MAAM,aAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QACrH,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,aAAa;YAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClJ,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;aAC7J,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,cAAc;YAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,kBAAkB;YAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAAC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAC3F,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC9H,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC;IAC/C,CAAC;IACO,UAAU,KAAqB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChE,qGAAqG;IACrG,OAAO,CAAC,KAAY,EAAE,UAA0B,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC3D,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,uBAAuB,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;YACxG,IAAI,WAAW,EAAE;gBAAE,OAAO;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,MAAM,SAAS,GAAG,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;YACnE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;oBACxC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;oBAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;gBAC7C,MAAM;gBACN,GAAG,MAAM;gBACT,OAAO,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBAC3F,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW;gBACvD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;oBACrC,IAAI,IAAI,CAAC,eAAe,KAAK,WAAW;wBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAC;oBAClG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;aACF,CAAC,CAAC;YACH,IAAI,WAAW,EAAE;gBAAE,OAAO;YAC1B,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC5D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBAClC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,MAAM,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,GAAG,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5F,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM;YAAE,OAAO,WAAW,CAAC;QAChC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,YAAY,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC,CAAC;YACzG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC1C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,MAAc;QACzC,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,mBAAmB,CAAC;YAC3D,CAAC,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7H,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ;gBAC/C,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxC,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,YAAqB;QAC/C,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;YACpC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClG,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;oBACzE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,GAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACjG,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,MAAO,CAAC,MAAM,CAAC;oBACzD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe;wBACzC,CAAC,CAAE,SAAwD,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC;oBAChG,MAAM,gBAAgB,GAA6B,EAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAC,CAAC;oBACrF,IAAI,IAAI,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;wBACpC,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBACzD,gBAAgB,CAAC,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC;wBAC1K,IAAI,CAAC,gBAAgB,CAAC,cAAc;4BAAE,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;oBAC3E,CAAC;oBACD,IAAI,IAAI,CAAC,SAAS;wBAAE,OAAO;oBAC3B,cAAc,CAAC,SAAS,CAAC,CAAC;oBAC1B,IAAI,CAAC,eAAe,GAAG,cAAc,IAAI,SAAS,CAAC;oBACnD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;oBAC5B,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE;wBACrE,kBAAkB,EAAE,GAAG,EAAE,wBAAwB,EAAE,IAAI,YAAY,EAAE,gBAAgB;qBACtF,CAAC,CAAC;oBACH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC7B,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ;wBAAE,MAAM,CAAC,CAAC;oBAC9C,IAAI,CAAC,qBAAqB,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;oBAC5B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACrG,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAChD,IAAI,CAAC,qBAAqB,GAAG,6CAA6C,CAAC;gBAC7E,CAAC;gBACD,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC;oBACtC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC3B,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,IAAI;oBACX,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,CAAC;oBACb,qBAAqB,EAAE,IAAI;oBAC3B,UAAU;oBACV,kBAAkB,EAAE,KAAK;oBACzB,qBAAqB,EAAE,IAAI;oBAC3B,eAAe,EAAE,kBAAkB;iBACpC,CAAC,CAAC;gBAEH,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC9E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACxF,CAAC;gBACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC7B,CAAC;QAGH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YAET,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,cAAc,GAAG,CAAC,KAAY,EAAE,EAAE;QACxC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAClD,IAAI,OAAoB,EAAE,MAA+B,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAE,OAAO,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC;QACpF,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,uBAAwB,KAA2B,CAAC,aAAa,IAAI,wBAAwB,EAAE,CAAC,CAAC;QACzH,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IACM,kBAAkB,GAAG,GAAG,EAAE;QAChC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC/C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QAAC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAC;IAC7F,CAAC,CAAC;IACM,YAAY,CAAC,MAAiB;QACpC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;gBAAE,OAAO;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,IAAI,uBAAuB,EAAE,CAAC,CAAC;YAC3G,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IACO,iBAAiB,CAAC,KAAY,EAAE,UAAmB;QACzD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACtD,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACrE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QACtD,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAAC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAC9D,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAClF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACtH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAAC,IAAI,KAAK;gBAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YACjF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,MAAiB;QAC/B,IAAI,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,oBAAoB;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACxG,IAAI,CAAC;YAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC/B,OAAO,KAAK,EAAE,CAAC;YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC;QAAA,CAAC;QACxE,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACnE,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,EAAE,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;IAChC,CAAC;IACD,wFAAwF;IACxF,YAAY,CAAI,IAAgB;QAC9B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC;QACvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC;IACD,gBAAgB,CAAC,IAAI,iBAAiB,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzE,gBAAgB,CAAC,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE3D,YAAY;QAClB,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,QAAQ,CAAC;QAC7G,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC;QAC9F,OAAO,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAClJ,CAAC;IACD,gBAAgB,CAAC,qBAAqB;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC,iBAAiB,CAAC;QACvE,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,sBAAsB,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;QACvG,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe;YAAE,OAAO;QACzC,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,sBAAsB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;IAC9J,CAAC;IACD,oGAAoG;IACpG,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,MAAM,EAAE,gBAAgB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACrE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,OAAgB;YACzD,cAAc,EAAE,IAAI,CAAC,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC,CAAC,SAAS;YACpH,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,IAAI,CAAC;YAChH,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;SACrG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACf,OAAO,EAAE,GAAG,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAC,GAAG,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;YACvN,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,CAAC,qBAAqB;YACpF,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,IAAI,KAAK,EAAE,CAAC;IACjH,CAAC;IACD,6GAA6G;IAC7G,KAAK,CAAC,gBAAgB,CAAC,IAAqB;QAC1C,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QACzE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7C,CAAC;gBACO,CAAC;YAAC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAAC,CAAC;IACzC,CAAC;IACD,+EAA+E;IAC/E,OAAO;QACL,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACtD,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAChG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACjF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3F,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QACtH,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAAC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAC,IAAI,KAAK;gBAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QACrK,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,gBAAgB,CAAC,IAAI,oBAAoB,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/E,gBAAgB,CAAC,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACpL,gBAAgB,CAAC,IAAI,OAAO,KAAK,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAC,CAAC,CAAC,CAAC;IACnI,gBAAgB,CAAC,SAAS,CAAC,MAAc,IAAI,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrI,gBAAgB,CAAC,WAAW,CAAC,MAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9E,gBAAgB,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5G,gBAAgB,CAAC,cAAc,CAAC,MAAoB,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;QAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7J,gBAAgB,CAAC,QAAQ,CAAC,MAAoB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;IAClH,gBAAgB,CAAC,YAAY,CAAC,KAAc;QAC1C,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QACnK,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAC7G,OAAO,KAAK,CAAC;IACf,CAAC;IACD,gBAAgB,CAAC,WAAW,CAAC,GAAW,EAAE,IAAgC;QACxE,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAAC,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACtK,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,gBAAgB,CAAC,eAAe,CAA0B,GAAW,EAAE,MAAe;QACpF,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,EAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAC,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC;QAC3F,CAAC;QACD,KAAK,CAAC,UAAU,EAAE,CAAC;QAAC,OAAO,KAAK,CAAC,KAAU,CAAC;IAC9C,CAAC;IACD,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,MAA6D;QAChH,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,GAA+F,EAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAC,CAAC;YAC9H,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACpC,IAAI,QAAQ,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;oBAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC;gBAAC,CAAC;gBACtG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAAC,OAAO,MAAM,CAAC;YAAC,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,KAAK,CAAC,OAAQ,CAA2C,CAAC;QAAC,CAAC;QAC/F,OAAO,KAAK,EAAE,CAAC;YAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;gBAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;IACjI,CAAC;IACD,gBAAgB,CAAC,YAAY,CAA0B,QAAW;QAChE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAAC,CAAC;QAChG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAAC,OAAO,QAAQ,CAAC;IACjD,CAAC;IACD,gBAAgB,CAAC,gBAAgB,CAAC,QAAuB;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,KAAK,IAAI,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC;YAAE,OAAO;QAC5C,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;YAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC9C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACO,gBAAgB,CAAC,QAAuB;QAC9C,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QACjJ,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IACD,sEAAsE;IACtE,KAAK,CAAC,sBAAsB,CAAC,QAAkB,EAAE,KAAa,EAAE,MAAc;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QAClG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC;QAClD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC;IAC9D,CAAC;IACD,gBAAgB,CAAC,eAAe,CAAI,IAAsB;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;YAClE,IAAI,CAAC;gBAAC,OAAO,MAAM,IAAI,EAAE,CAAC;YAAC,CAAC;oBACpB,CAAC;gBACP,qEAAqE;gBACrE,uEAAuE;gBACvE,0EAA0E;gBAC1E,sEAAsE;gBACtE,iCAAiC;gBACjC,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IACxD,CAAC;CACF","sourcesContent":["import InstancedMesh from './scene/InstancedMesh.js';\nimport { bvhConfig, engineSettingsKey, workerCount, textureBudget } from './settings/engine.js';\nimport {createCanvas} from './util/canvas.js';\nimport Camera from './scene/Camera.js';\nimport {getRecommendedDeviceDescriptor, validateDevice} from './renderer/deviceRequirements.js';\nimport {probeBindless, resourceTableFeature, type MaterialTextureSelection} from './renderer/wgpuBindless.js';\nimport { cameraSnapshot } from './renderer/cameraSnapshot.js';\nimport type { Scene } from './scene/Scene.js';\nimport type Mesh from './scene/Mesh.js';\nimport type Geometry from './scene/Geometry.js';\nimport Display from './Display.js';\nimport type Render from './Render.js';\nimport { Events } from './util/events.js';\nimport { SceneChangeDetector, snapshotFields, snapshotsEqual } from './renderer/sceneChangeDetector.js';\nimport { CommittedScene } from './renderer/committedScene.js';\nimport { validateSceneLights } from './renderer/lightsUtil.js';\nimport { ensureMeshGeometryAttributes, meshNeedsStaticBvh, getPreparedMeshGeometry } from './renderer/prepareMeshBVH.js';\nimport { getGeometryBvh, type BvhBuildConfig } from './renderer/geometryBvh.js';\nimport { prepareStaticBvhs } from './renderer/staticBvhPreparation.js';\nimport { canUseBvhWorker, BvhWorkerPool, resolveBvhWorkerCount } from './renderer/bvhWorkerClient.js';\nimport { DEFAULT_MAX_TEXTURE_ARRAY_BYTES } from './renderer/MaterialTable.js';\nimport { packDepthSampleArea, type DepthSampleArea } from './renderer/depthQuery.js';\nimport { makeWGPURenderTargets } from './renderer/WGPURenderingPipeline.js';\nimport { makeWebGLRenderTargets } from './renderer/WebGLRenderingPipeline.js';\nimport { WebGLDevice as WebGLRenderer } from './renderer/webgl.js';\nimport type { RenderPipeline, RenderTarget } from './renderer/renderPipeline.js';\nimport type { RenderingDiagnostics } from './renderer/RenderingPipeline.js';\nimport type { TinyBvhLayout } from './tinybvh/TinyBvhBuilder.js';\nimport type {OwnedDenoiser} from './renderer/ownedDenoiser.js';\nimport type {Denoiser} from './Render.js';\nexport type { DepthSampleArea } from './renderer/depthQuery.js';\n\n/** BLAS implementation; default builtin. */\nexport type BVHBuilder = 'tinybvh' | 'builtin';\n/** Optional CPU preparation settings. */\nexport interface PrepareOptions {\n /** Completed BLAS fraction 0–1. Default undefined. */ onProgress?: (progress: number) => void;\n /** Cancels preparation. Default undefined. */ signal?: AbortSignal;\n}\n/** Engine construction settings. */\nexport interface EngineParams {\n /** Default display canvas. Default a new HTML canvas, or OffscreenCanvas without document. */ canvas?: HTMLCanvasElement | OffscreenCanvas;\n /** Backend selection. Default auto, with WebGL fallback. webgpu requires WebGPU. */ backend?: 'auto' | 'webgpu' | 'webgl';\n /** Caller-owned WebGPU device. Default undefined uses a shared device. Implies webgpu; incompatible with webgl. */ device?: GPUDevice;\n /** Material texture bindings. Default atlas; auto tries WebGPU bindless textures and falls back to atlas when unavailable. Fixed at construction. */ textureBinding?: 'atlas' | 'auto';\n}\n/** Material-atlas device limits. */\nexport interface TextureAtlasLimits { maxTextureArrayLayers: number; maxTextureDimension2D: number; }\n/** Initialization result. */\nexport interface EngineInfo {\n backend: 'webgpu' | 'webgl'; adapterName: string; webgpuFallbackReason?: string; limits: TextureAtlasLimits;\n}\n/** Device and target diagnostics; Per-target GPU bytes exclude shared scene, temporary passes and driver costs. */\nexport interface EngineDiagnostics extends RenderingDiagnostics {\n backend: 'webgpu' | 'webgl' | undefined; adapterName: string;\n width: number; height: number; lastError?: string; webgpuFallbackReason?: string;\n}\ninterface EngineEvents {\n progress: { stage: 'device' | 'bvh' | 'shaders'; progress: number };\n error: Error;\n devicelost: { reason: string; recovering: boolean };\n}\ninterface SharedDevice {device: GPUDevice; adapterInfo?: GPUAdapterInfo; fallbackReason?: string;}\nconst sharedDevices = new Map<string, Promise<SharedDevice>>();\nasync function sharedDevice(gpu: GPU, mode: 'atlas' | 'auto'): Promise<SharedDevice> {\n let request = sharedDevices.get(mode);\n if (!request) {\n request = (async () => {\n let adapter = await gpu.requestAdapter({powerPreference: 'high-performance'}) ?? await gpu.requestAdapter();\n if (!adapter) throw new Error('No WebGPU adapter is available');\n const descriptor = getRecommendedDeviceDescriptor(adapter);\n const support = mode === 'auto' ? resourceTableFeature(adapter.features) : undefined;\n let device: GPUDevice, fallbackReason: string | undefined;\n try {\n device = await adapter.requestDevice(support ? {...descriptor, requiredFeatures: [...descriptor.requiredFeatures ?? [], support.feature]} : descriptor);\n } catch (error) {\n if (!support) throw error;\n fallbackReason = error instanceof Error ? error.message : String(error);\n const retry = await gpu.requestAdapter({powerPreference: 'high-performance'}) ?? await gpu.requestAdapter();\n if (!retry) throw new Error('No WebGPU adapter is available for atlas fallback');\n device = await retry.requestDevice(getRecommendedDeviceDescriptor(retry));\n adapter = retry;\n }\n const current = request;\n void device.lost.then(() => { if (sharedDevices.get(mode) === current) sharedDevices.delete(mode); });\n return {device, adapterInfo: (adapter as GPUAdapter & {info?: GPUAdapterInfo}).info, fallbackReason};\n })();\n sharedDevices.set(mode, request);\n const current = request;\n void request.catch(() => { if (sharedDevices.get(mode) === current) sharedDevices.delete(mode); });\n }\n return request;\n}\n\n/** Shared device, committed scene/camera, CPU preparation and denoiser ownership. */\nexport default class Engine {\n /** Source scene, accepted only by update(). Default undefined. */ scene: Scene | undefined;\n /** Source camera, accepted only by update(). Default undefined. */ camera: Camera | undefined;\n /** Default canvas and display settings. */ readonly display: Display;\n /** Static BLAS builder. Default builtin. */ bvhBuilder: BVHBuilder = 'builtin';\n /** Static BLAS layout. Default bvh2; dynamic geometry uses bvh2. */ bvhLayout: TinyBvhLayout = 'bvh2';\n /** Enable TinyBVH spatial splits. Default false. */ bvhSpatialSplits = false;\n /** Material texture budget in bytes. Default 384 MiB. */ textureAtlasBudgetBytes = DEFAULT_MAX_TEXTURE_ARRAY_BYTES;\n /** Maximum CPU BVH workers. Default auto (hardware concurrency minus one, clamped 1–4). */\n get bvhWorkerCount(): number | 'auto' { return this._bvhWorkerCount; }\n set bvhWorkerCount(count: number | 'auto') { resolveBvhWorkerCount(count); this._bvhWorkerCount = count; }\n private _bvhWorkerCount: number | 'auto' = 'auto';\n private _bvhWorkerPool?: BvhWorkerPool;\n private _bvhPreparationRevision = 0;\n private _bvhPreparation?: Promise<void>;\n private _bvhPreparationTail: Promise<unknown> = Promise.resolve();\n private _tinyBvhUnavailable = false;\n private _bvhWorkerUnavailable = false;\n private _bvhPreparedGeometry = new WeakMap<Mesh, [Geometry, number]>();\n private _lastBvhBuild?: { geometryCount: number; bvhTimeMs: number };\n private _lastBvhSettings = '';\n private _lastBudget = -1;\n private _shaderProgress = '';\n private _events = new Events<EngineEvents>();\n private _pipeline?: RenderPipeline;\n private _webglRenderer?: WebGLRenderer;\n private _gpuDevice?: GPUDevice;\n private _suppliedDevice?: GPUDevice;\n private readonly _ownsDeviceSelection: boolean;\n private _deviceRevision = 0;\n private _lossController?: AbortController;\n private _deviceLossError?: Error;\n private _webglListening = false;\n private _webglLost = false;\n private _recoverWebGL = false;\n private _contextRestore?: {promise: Promise<void>; resolve: () => void; reject: (error: Error) => void};\n private _gpuAdapterInfo?: GPUAdapterInfo;\n private _backendChoice: NonNullable<EngineParams['backend']>;\n private readonly _textureBinding: 'atlas' | 'auto';\n private _initPromise?: Promise<EngineInfo>;\n private _info?: EngineInfo;\n private _pipelineInitError?: Error;\n private _webgpuFallbackReason?: string;\n private _reportedErrors = new WeakSet<Error>();\n private _loggedErrorMessages = new Set<string>();\n private _sceneChangeDetector: SceneChangeDetector;\n private _snapshot = new CommittedScene();\n private _sourceScene?: Scene;\n private _committedScene?: Scene;\n private _sourceCamera?: Camera;\n private _committedCamera?: Camera;\n private _cameraFields: unknown[] = [];\n private _sceneRevision = 0;\n private _cameraRevision = 0;\n private _uploadedRevision = -1;\n private _pendingMeshes: 'none' | 'incremental' | 'full' = 'full';\n private _pendingTransforms = new Set<Mesh>();\n private _pendingColors = new Set<InstancedMesh>();\n private _pendingGeometries = new Set<Geometry>();\n private _pendingMaterials = new Set<import('./scene/OpenPBRMaterial.js').default>();\n private _pendingLights = true;\n private _pendingBackground = true;\n private _disposed = false;\n private _readingDepth = false;\n private _renders = new Set<Render>();\n private _targetCounter = 0;\n private _presented?: RenderTarget;\n private _denoisers = new Set<OwnedDenoiser>();\n private _denoiserCache = new Map<string, {references: number; value?: OwnedDenoiser; pending?: Promise<OwnedDenoiser>}>();\n private _denoiserEntries = new WeakMap<OwnedDenoiser, {key: string; references: number; value?: OwnedDenoiser; pending?: Promise<OwnedDenoiser>}>();\n private _weights = new Map<string, Promise<ArrayBuffer>>();\n private _customPrepared = new WeakMap<Denoiser, {device: GPUDevice; width: number; height: number}>();\n private _denoiseTail: Promise<unknown> = Promise.resolve();\n private _lastError: Error | undefined;\n /** Most recent synchronous engine/render failure. Default undefined. */\n get lastError() { return this._lastError; }\n /** @internal */ _setRenderError(error?: Error) { this._lastError = error ?? this._pipelineInitError; }\n\n constructor(params: EngineParams = {}) {\n if (params.device && params.backend === 'webgl') throw new Error('A supplied GPUDevice cannot use the webgl backend.');\n this._suppliedDevice = params.device;\n this._textureBinding = params.textureBinding ?? 'atlas';\n this._ownsDeviceSelection = !params.device;\n this._backendChoice = params.device ? 'webgpu' : params.backend ?? 'auto';\n this._sceneChangeDetector = new SceneChangeDetector();\n this.display = Display._create(this, params.canvas ?? createCanvas());\n }\n /** Initializes once; concurrent/repeated calls share the result. */\n init(): Promise<EngineInfo> {\n return this._initPromise ??= (async () => {\n if (this._disposed) throw new Error('Engine is disposed.');\n if (this._pipelineInitError && !this._ownsDeviceSelection) throw this._pipelineInitError;\n const revision = this._deviceRevision;\n if (this._contextRestore) await this._contextRestore.promise;\n if (this._disposed) throw new Error('Engine is disposed.');\n await this._initPipeline(this._backendChoice !== 'webgl' && !this._recoverWebGL);\n if (revision !== this._deviceRevision) throw this._deviceLossError;\n if (this._pipelineInitError) throw this._pipelineInitError;\n if (this._disposed) { this._pipeline?.dispose(); throw new Error('Engine is disposed.'); }\n const gl = this._webglRenderer?.gl, limits = this._gpuDevice?.limits;\n this._info = { backend: this._gpuDevice ? 'webgpu' : 'webgl', adapterName: this._adapterName(), webgpuFallbackReason: this._webgpuFallbackReason,\n limits: { maxTextureArrayLayers: limits?.maxTextureArrayLayers ?? gl?.getParameter(gl.MAX_ARRAY_TEXTURE_LAYERS), maxTextureDimension2D: limits?.maxTextureDimension2D ?? gl?.getParameter(gl.MAX_TEXTURE_SIZE) } };\n this._upload();\n return this._info;\n })();\n }\n /** Initialization info. Default undefined until init resolves. */ get info() { return this._info; }\n /** Active backend. Default undefined until initialization completes. */ get backend() { return this._info?.backend; }\n /** GPU device. Default undefined before initialization and on WebGL. */ get device() { return this._gpuDevice; }\n /** Subscribes to shared progress/errors/device loss; returns unsubscribe. */\n on<K extends keyof EngineEvents>(event: K, listener: (value: EngineEvents[K]) => void): () => void { return this._events.on(event, listener); }\n\n /** The sole external edit detection/commit point. Returns whether inputs changed. */\n update(): boolean {\n if (this._disposed) throw new Error('Engine is disposed.');\n this._lastError = this._pipelineInitError;\n let changed = false, resetTiming = false;\n const cameraFields = this.camera ? snapshotFields(this.camera) : [];\n if (this.camera !== this._sourceCamera || !snapshotsEqual(cameraFields, this._cameraFields)) {\n this._sourceCamera = this.camera; this._cameraFields = cameraFields;\n this._committedCamera = this.camera ? cameraSnapshot(this.camera) : undefined; this._cameraRevision++; changed = true;\n }\n const bvhSettings = engineSettingsKey(this, 'bvh');\n const force = bvhSettings !== this._lastBvhSettings || textureBudget(this) !== this._lastBudget;\n if (this.scene !== this._sourceScene || force) this._sceneChangeDetector.reset();\n if (this.scene) {\n validateSceneLights(this.scene.lights, error => this._notifyError(error));\n ensureMeshGeometryAttributes(this.scene.meshes);\n const changes = this._sceneChangeDetector.detect(this.scene);\n resetTiming = changes.meshes === 'full' || this.scene !== this._sourceScene || force;\n if (changes.meshes !== 'none' || changes.lights || changes.background || this.scene !== this._sourceScene || force) {\n this._committedScene = this._snapshot.capture(this.scene, changes);\n if (changes.meshes === 'full' || force || this.scene !== this._sourceScene) this._pendingMeshes = 'full';\n else if (changes.meshes === 'incremental' && this._pendingMeshes !== 'full') this._pendingMeshes = 'incremental';\n for (const mesh of changes.transforms) this._pendingTransforms.add(this._snapshot.mirror(mesh));\n for (const mesh of changes.colors) this._pendingColors.add(this._snapshot.mirror(mesh));\n for (const geometry of changes.geometries) this._pendingGeometries.add(this._snapshot.mirror(geometry));\n for (const material of changes.materials) this._pendingMaterials.add(this._snapshot.mirror(material));\n this._pendingLights ||= changes.lights;\n this._pendingBackground ||= changes.background;\n this._sceneRevision++; changed = true;\n }\n this._sceneChangeDetector.commit();\n } else if (this._sourceScene) { this._committedScene = undefined; this._pendingMeshes = 'full'; this._pendingLights = true; this._pendingBackground = true; this._sceneRevision++; changed = true; }\n this._sourceScene = this.scene; this._lastBvhSettings = bvhSettings; this._lastBudget = textureBudget(this);\n if (!this._pipeline) void this.init().catch(() => {});\n if (changed) for (const render of this._renders) render._inputsChanged(resetTiming);\n this._upload();\n return changed;\n }\n private _upload() {\n const pipeline = this._pipeline;\n if (!pipeline || this._disposed || this._bvhPreparation || this._uploadedRevision === this._sceneRevision) return;\n const scene = this._committedScene ?? { meshes: [], lights: [] };\n if (this._needsBVHPreparation(scene.meshes)) {\n const task = this.prepare(scene); this._bvhPreparation = task;\n void task.then(() => { if (this._bvhPreparation === task) this._bvhPreparation = undefined; this._upload(); }, error => { if (this._bvhPreparation === task) this._bvhPreparation = undefined; this._notifyError(error); });\n return;\n }\n const budgetChanged = pipeline.setTextureAtlasBudget(this._lastBudget >= 0 ? this._lastBudget : textureBudget(this));\n if (this._pendingMeshes !== 'none' || budgetChanged) pipeline.setMeshes(scene.meshes, this._pendingMeshes === 'full' || budgetChanged ? undefined : {\n transforms: [...this._pendingTransforms], colors: [...this._pendingColors], geometries: [...this._pendingGeometries], materials: [...this._pendingMaterials]\n });\n if (this._pendingLights) pipeline.setLights(scene.lights);\n if (this._pendingBackground) pipeline.setBackground(scene.background);\n this._pendingMeshes = 'none'; this._pendingLights = false; this._pendingBackground = false;\n this._pendingTransforms.clear(); this._pendingColors.clear(); this._pendingGeometries.clear(); this._pendingMaterials.clear();\n this._uploadedRevision = this._sceneRevision;\n }\n private _bvhConfig(): BvhBuildConfig { return bvhConfig(this); }\n /** Builds static CPU BVHs for this scene without replacing GPU inputs. Options default undefined. */\n prepare(scene: Scene, options: PrepareOptions = {}): Promise<void> {\n const revision = this._bvhPreparationRevision;\n const preparation = this._bvhPreparationTail.then(async () => {\n const isCancelled = () => revision !== this._bvhPreparationRevision || options.signal?.aborted === true;\n if (isCancelled()) return;\n const meshes = scene.meshes;\n const useWorker = canUseBvhWorker() && !this._bvhWorkerUnavailable;\n if (useWorker) {\n const count = workerCount(this);\n if (this._bvhWorkerPool?.size !== count) {\n this._bvhWorkerPool?.dispose();\n this._bvhWorkerPool = new BvhWorkerPool(count);\n }\n }\n const config = this._bvhConfig();\n const result = await prepareStaticBvhs(meshes, {\n config,\n ...config,\n builder: this.bvhBuilder === 'tinybvh' && !this._tinyBvhUnavailable ? 'tinybvh' : 'builtin',\n useWorker, workerPool: this._bvhWorkerPool, isCancelled,\n rebuild: false, onProgress: progress => {\n if (this._bvhPreparation === preparation) this._events.emit('progress', {stage: 'bvh', progress});\n options.onProgress?.(progress);\n }\n });\n if (isCancelled()) return;\n if (result.workerUnavailable && !this._bvhWorkerUnavailable) {\n this._bvhWorkerUnavailable = true;\n this._bvhWorkerPool?.dispose();\n this._bvhWorkerPool = undefined;\n console.warn('BVH preparation failed; falling back to the calling-thread BVH builder.');\n }\n if (result.tinyBvhUnavailable && !this._tinyBvhUnavailable) {\n this._tinyBvhUnavailable = true;\n console.warn('BVH preparation failed; falling back to the built-in BVH builder.');\n }\n result.failedMeshes.forEach(mesh => {\n this._bvhPreparedGeometry.set(mesh, [mesh.geometry, mesh.geometry.version]);\n });\n\n this._lastBvhBuild = { geometryCount: result.geometryCount, bvhTimeMs: result.bvhTimeMs };\n });\n this._bvhPreparationTail = preparation.catch(() => undefined);\n const signal = options.signal;\n if (!signal) return preparation;\n return new Promise<void>((resolve, reject) => {\n const aborted = () => reject(signal.reason ?? new DOMException('BVH preparation aborted', 'AbortError'));\n if (signal.aborted) { aborted(); return; }\n signal.addEventListener('abort', aborted, { once: true });\n preparation.then(resolve, reject).finally(() => signal.removeEventListener('abort', aborted));\n });\n }\n\n private _needsBVHPreparation(meshes: Mesh[]) {\n if (this._bvhPreparation) return true;\n if ((this.bvhBuilder !== 'tinybvh' || this._tinyBvhUnavailable) &&\n (!canUseBvhWorker() || this._bvhWorkerUnavailable)) {\n return meshes.some(mesh => !!getGeometryBvh(getPreparedMeshGeometry(mesh)) && meshNeedsStaticBvh(mesh, this._bvhConfig()));\n }\n return meshes.some((mesh) => {\n const prepared = this._bvhPreparedGeometry.get(mesh);\n const attempted = prepared?.[0] === mesh.geometry &&\n prepared[1] === mesh.geometry.version;\n return !attempted && meshNeedsStaticBvh(mesh, this._bvhConfig());\n });\n }\n\n private async _initPipeline(preferWebGPU: boolean) {\n let gpuCreated = false;\n try {\n\n this._events.emit('progress', {stage: 'device', progress: 0});\n this._pipelineInitError = undefined;\n if (preferWebGPU && (this._suppliedDevice || (typeof navigator !== 'undefined' && navigator.gpu))) {\n try {\n const gpu = typeof navigator !== 'undefined' ? navigator.gpu : undefined;\n const shared = this._suppliedDevice ? undefined : await sharedDevice(gpu!, this._textureBinding);\n const gpuDevice = this._suppliedDevice ?? shared!.device;\n const gpuAdapterInfo = this._suppliedDevice\n ? (gpuDevice as GPUDevice & {adapterInfo?: GPUAdapterInfo}).adapterInfo : shared?.adapterInfo;\n const materialTextures: MaterialTextureSelection = {requested: this._textureBinding};\n if (this._textureBinding === 'auto') {\n const support = resourceTableFeature(gpuDevice.features);\n materialTextures.fallbackReason = shared?.fallbackReason ?? (support ? await probeBindless(gpuDevice, support) : 'Resource-table feature is not enabled on this device.');\n if (!materialTextures.fallbackReason) materialTextures.support = support;\n }\n if (this._disposed) return;\n validateDevice(gpuDevice);\n this._gpuAdapterInfo = gpuAdapterInfo ?? undefined;\n this._gpuDevice = gpuDevice;\n this._pipeline = makeWGPURenderTargets(this.display.canvas, gpuDevice, {\n presentationFormat: gpu?.getPreferredCanvasFormat() ?? 'bgra8unorm', materialTextures\n });\n this._watchDevice(gpuDevice);\n gpuCreated = true;\n } catch (e) {\n if (this._backendChoice === 'webgpu') throw e;\n this._webgpuFallbackReason = e instanceof Error ? e.message : String(e);\n this._gpuDevice = undefined;\n this._gpuAdapterInfo = undefined;\n }\n }\n if (!gpuCreated) {\n if (this._backendChoice === 'webgpu') throw new Error('WebGPU is not available in this environment');\n if (preferWebGPU && !this._webgpuFallbackReason) {\n this._webgpuFallbackReason = 'WebGPU is not available in this environment';\n }\n this._webglRenderer = new WebGLRenderer({\n canvas: this.display.canvas,\n alpha: true,\n depth: true,\n stencil: false,\n antialias: false,\n pixelRatio: 1,\n preserveDrawingBuffer: true,\n // PENDING\n premultipliedAlpha: false,\n parallelShaderCompile: true,\n powerPreference: 'high-performance'\n });\n\n this._pipeline = makeWebGLRenderTargets(this._webglRenderer);\n if (!this._webglListening) {\n this._webglListening = true;\n this.display.canvas.addEventListener('webglcontextlost', this._onContextLost);\n this.display.canvas.addEventListener('webglcontextrestored', this._onContextRestored);\n }\n this._recoverWebGL = false;\n }\n\n\n } catch (error) {\n this._pipelineInitError = error instanceof Error ? error : new Error(String(error));\n this._lastError = this._pipelineInitError;\n this._notifyError(this._pipelineInitError);\n } finally {\n\n this._events.emit('progress', {stage: 'device', progress: 1});\n }\n }\n\n private _onContextLost = (event: Event) => {\n event.preventDefault();\n if (this._disposed || this._webglLost) return;\n this._webglLost = true; this._recoverWebGL = true;\n let resolve!: () => void, reject!: (error: Error) => void;\n const promise = new Promise<void>((done, fail) => {resolve = done; reject = fail;});\n void promise.catch(() => {});\n this._contextRestore = {promise, resolve, reject};\n const error = new Error(`WebGL context lost: ${(event as WebGLContextEvent).statusMessage || 'context is unavailable'}`);\n this._invalidateDevice(error, true);\n this._events.emit('devicelost', {reason: 'webglcontextlost', recovering: true});\n };\n private _onContextRestored = () => {\n if (this._disposed || !this._webglLost) return;\n this._webglLost = false;\n const restore = this._contextRestore; this._contextRestore = undefined; restore?.resolve();\n };\n private _watchDevice(device: GPUDevice) {\n void device.lost.then(info => {\n if (this._disposed || this._gpuDevice !== device) return;\n const recovering = this._ownsDeviceSelection;\n const error = new Error(`WebGPU device lost (${info.reason}): ${info.message || 'device is unavailable'}`);\n this._invalidateDevice(error, recovering);\n this._events.emit('devicelost', {reason: info.reason, recovering});\n if (!recovering) this._notifyError(error);\n });\n }\n private _invalidateDevice(error: Error, recovering: boolean) {\n this._deviceLossError = error; this._deviceRevision++;\n this._lossController?.abort(error); this._lossController = undefined;\n for (const render of this._renders) render._deviceLost(recovering);\n this._pipeline?.dispose(); this._pipeline = undefined;\n this._webglRenderer?.dispose(); this._webglRenderer = undefined;\n this._gpuDevice = undefined; this._gpuAdapterInfo = undefined;\n this._info = undefined; this._initPromise = undefined;\n this._pipelineInitError = recovering ? undefined : error; this._lastError = error;\n this._presented = undefined; this._shaderProgress = '';\n this._uploadedRevision = -1; this._pendingMeshes = 'full'; this._pendingLights = true; this._pendingBackground = true;\n this._sceneRevision++;\n this._customPrepared = new WeakMap();\n for (const filter of [...this._denoisers]) {\n const entry = this._denoiserEntries.get(filter); if (entry) entry.references = 1;\n this._releaseDenoiser(filter);\n }\n this._denoiserCache.clear();\n }\n /** Replaces a caller-owned device after validation. Only available on engines\n * constructed with device; the next update/refine uploads the committed scene.\n */\n async setDevice(device: GPUDevice): Promise<void> {\n if (this._disposed) throw new Error('Engine is disposed.');\n if (this._ownsDeviceSelection) throw new Error('setDevice requires an engine constructed with device.');\n try { validateDevice(device); }\n catch (error) {this._lastError = this._notifyError(error); throw error;}\n if (this._gpuDevice === device && !this._pipelineInitError) return;\n this._invalidateDevice(new Error('WebGPU device replaced during converge.'), true);\n this._suppliedDevice = device;\n }\n /** @internal Device loss rejects pending waits without relying on driver completion. */\n _awaitDevice<T>(work: Promise<T>): Promise<T> {\n const signal = (this._lossController ??= new AbortController()).signal;\n return new Promise((resolve, reject) => {\n const lost = () => reject(signal.reason);\n signal.addEventListener('abort', lost, {once: true});\n work.then(resolve, reject).finally(() => signal.removeEventListener('abort', lost));\n });\n }\n /** @internal */ get _deviceGeneration() { return this._deviceRevision; }\n /** @internal */ get _lostError() { return this._deviceLossError; }\n\n private _adapterName() {\n if (this._gpuAdapterInfo) return this._gpuAdapterInfo.description || this._gpuAdapterInfo.vendor || 'WebGPU';\n const gl = this._webglRenderer?.gl, extension = gl?.getExtension('WEBGL_debug_renderer_info');\n return extension && gl ? gl.getParameter(extension.UNMASKED_RENDERER_WEBGL) : this._webglRenderer ? 'WebGL 2' : this._gpuDevice ? 'WebGPU' : '';\n }\n /** @internal */ _reportShaderProgress() {\n const compilation = this._pipeline?.getDiagnostics().shaderCompilation;\n if (!compilation) return;\n const key = `${compilation.status}/${compilation.completedPipelineCount}/${compilation.pipelineCount}`;\n if (key === this._shaderProgress) return;\n this._shaderProgress = key;\n this._events.emit('progress', {stage: 'shaders', progress: compilation.pipelineCount ? compilation.completedPipelineCount / compilation.pipelineCount : 1});\n }\n /** Current shared preparation and resident target statistics. Default undefined before any work. */\n getDiagnostics(): EngineDiagnostics | undefined {\n if (!this._pipeline && !this._lastBvhBuild) return;\n const values = this._pipeline?.getDiagnostics();\n const materialTextures = values?.materialTextures ?? (this._pipeline ? {\n requested: this._textureBinding, active: 'atlas' as const,\n fallbackReason: this._textureBinding === 'auto' ? 'Bindless textures require a supported WebGPU device.' : undefined,\n textureCount: values?.textureAtlas?.textureCount ?? 0, estimatedBytes: values?.textureAtlas?.estimatedBytes ?? 0,\n scale: values?.textureAtlas?.scale ?? 1, metadataBytes: 0, resourceTableCapacity: 0, retiredBytes: 0\n } : undefined);\n return { ...values, materialTextures, bvh: {...values?.bvh, lastBuild: this._lastBvhBuild}, backend: this.backend, adapterName: this._adapterName(), width: this.display.canvas.width, height: this.display.canvas.height,\n lastError: this.lastError?.message, webgpuFallbackReason: this._webgpuFallbackReason,\n presentedTarget: this._presented?.label, presentedComplete: this._presented?.presentationComplete ?? false };\n }\n /** Queries a 7×7 depth grid using the committed engine camera. Default undefined until GPU data is ready. */\n async readDepthSamples(area: DepthSampleArea): Promise<Float32Array | undefined> {\n packDepthSampleArea(area, 1);\n if (!this._ready || !this._committedCamera || this._readingDepth) return;\n this._readingDepth = true;\n try {\n const camera = cameraSnapshot(this._committedCamera);\n camera.aspect ??= this.display.canvas.width / this.display.canvas.height;\n const result = await this._pipeline!.readDepthSamples(camera, area);\n return this._disposed ? undefined : result;\n }\n finally { this._readingDepth = false; }\n }\n /** Releases all renders, shared resources, CPU workers and owned denoisers. */\n dispose() {\n if (this._disposed) return;\n this._disposed = true; this._bvhPreparationRevision++;\n this._lossController?.abort(new Error('Engine is disposed.')); this._lossController = undefined;\n this._contextRestore?.reject(new Error('Engine is disposed.')); this._contextRestore = undefined;\n if (this._webglListening) {\n this.display.canvas.removeEventListener('webglcontextlost', this._onContextLost);\n this.display.canvas.removeEventListener('webglcontextrestored', this._onContextRestored);\n }\n for (const render of [...this._renders]) render.dispose();\n this._pipeline?.dispose(); this._pipeline = undefined; this._webglRenderer?.dispose(); this._bvhWorkerPool?.dispose();\n for (const denoiser of [...this._denoisers]) { const entry = this._denoiserEntries.get(denoiser); if (entry) entry.references = 1; this._releaseDenoiser(denoiser); }\n this._denoiserCache.clear();\n this._weights.clear(); this._events.clear();\n }\n /** @internal */ get _initializationError() { return this._pipelineInitError; }\n /** @internal */ get _ready() { return !!this._pipeline && this._uploadedRevision === this._sceneRevision && !!this._committedScene && !!this._committedCamera && !this._disposed; }\n /** @internal */ get _inputs() { return {scene: this._sceneRevision, camera: this._cameraRevision, value: this._committedCamera}; }\n /** @internal */ _register(render: Render) { if (this._disposed) throw new Error('Engine is disposed.'); this._renders.add(render); }\n /** @internal */ _unregister(render: Render) { this._renders.delete(render); }\n /** @internal */ _createTarget() { return this._pipeline?.createTarget(`render-${++this._targetCounter}`); }\n /** @internal */ _releaseTarget(target: RenderTarget) { if (this._presented === target) this._presented = undefined; this._pipeline?.releaseTarget(target); }\n /** @internal */ _present(target: RenderTarget) { target.activate(); target.present(); this._presented = target; }\n /** @internal */ _notifyError(value: unknown): Error {\n const error = value instanceof Error ? value : new Error(String(value));\n if (!this._loggedErrorMessages.has(error.message)) { this._loggedErrorMessages.add(error.message); console.error(`Path tracing failed: ${error.message}`, error); }\n if (!this._reportedErrors.has(error)) { this._reportedErrors.add(error); this._events.emit('error', error); }\n return error;\n }\n /** @internal */ _getWeights(url: string, load: () => Promise<ArrayBuffer>) {\n let pending = this._weights.get(url);\n if (!pending) { pending = load(); this._weights.set(url, pending); void pending.catch(() => { if (this._weights.get(url) === pending) this._weights.delete(url); }); }\n return pending;\n }\n /** @internal */ _retainDenoiser<T extends OwnedDenoiser>(key: string, create: () => T): T {\n let entry = this._denoiserCache.get(key);\n if (!entry?.value) {\n const value = this._ownDenoiser(create());\n const next = {key, references: 0, value};\n this._denoiserCache.set(key, next); this._denoiserEntries.set(value, next); entry = next;\n }\n entry.references++; return entry.value as T;\n }\n /** @internal */ async _acquireDenoiser(key: string, create: () => Promise<Extract<OwnedDenoiser, {kind: 'oidn'}>>): Promise<Extract<OwnedDenoiser, {kind: 'oidn'}>> {\n let entry = this._denoiserCache.get(key);\n if (!entry) {\n const next: {key: string; references: number; value?: OwnedDenoiser; pending?: Promise<OwnedDenoiser>} = {key, references: 0};\n const revision = this._deviceRevision;\n next.pending = create().then(filter => {\n if (revision !== this._deviceRevision) { this._disposeDenoiser(filter); throw this._deviceLossError; }\n next.value = this._ownDenoiser(filter); this._denoiserEntries.set(filter, next); return filter; });\n this._denoiserCache.set(key, next); entry = next;\n }\n entry.references++;\n try { return (entry.value ?? await entry.pending!) as Extract<OwnedDenoiser, {kind: 'oidn'}>; }\n catch (error) { entry.references--; if (this._denoiserCache.get(key) === entry) this._denoiserCache.delete(key); throw error; }\n }\n /** @internal */ _ownDenoiser<T extends OwnedDenoiser>(denoiser: T): T {\n if (this._disposed) { this._disposeDenoiser(denoiser); throw new Error('Engine is disposed.'); }\n this._denoisers.add(denoiser); return denoiser;\n }\n /** @internal */ _releaseDenoiser(denoiser: OwnedDenoiser) {\n const entry = this._denoiserEntries.get(denoiser);\n if (entry && --entry.references > 0) return;\n if (entry && this._denoiserCache.get(entry.key) === entry) this._denoiserCache.delete(entry.key);\n this._denoiserEntries.delete(denoiser);\n if (!this._denoisers.delete(denoiser)) return;\n this._disposeDenoiser(denoiser);\n }\n private _disposeDenoiser(denoiser: OwnedDenoiser) {\n if (denoiser.kind === 'oidn') { denoiser.denoiser.auxiliaryDenoisers?.albedo.dispose(); denoiser.denoiser.auxiliaryDenoisers?.normal.dispose(); }\n denoiser.denoiser.dispose();\n }\n /** @internal Called only while holding the shared inference lease. */\n async _prepareCustomDenoiser(denoiser: Denoiser, width: number, height: number) {\n const device = this.device;\n if (!device) throw new Error('Custom denoising requires WebGPU.');\n const previous = this._customPrepared.get(denoiser);\n if (previous?.device === device && previous.width === width && previous.height === height) return;\n await denoiser.prepare?.({device, width, height});\n this._customPrepared.set(denoiser, {device, width, height});\n }\n /** @internal */ _enqueueDenoise<T>(work: () => Promise<T>): Promise<T> {\n const task = this._denoiseTail.then(async () => {\n const device = this._gpuDevice, generation = this._deviceRevision;\n try { return await work(); }\n finally {\n // Cancelling tiled OIDN stops future tiles, not the commands already\n // submitted. Keep the shared scratch lease until those commands finish\n // so rapid edits cannot pile up inference or resize its inputs in flight.\n // A lost/disposed device must release the lease without waiting for a\n // queue that may never complete.\n if (device && device === this._gpuDevice && generation === this._deviceRevision && !this._disposed) {\n await this._awaitDevice(device.queue.onSubmittedWorkDone()).catch(() => {});\n }\n }\n });\n this._denoiseTail = task.catch(() => {}); return task;\n }\n}\n"]}
|
package/lib/Render.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AovKind } from './renderer/aov.js';
|
|
1
2
|
import type Engine from './Engine.js';
|
|
2
3
|
import type Camera from './scene/Camera.js';
|
|
3
4
|
import type { AlphaBlendStrategy } from './renderer/RenderingPipeline.js';
|
|
@@ -13,6 +14,12 @@ export interface SampleEvent {
|
|
|
13
14
|
}
|
|
14
15
|
/** State of one independent accumulation. Default preparing. */
|
|
15
16
|
export type RenderStatus = 'preparing' | 'compiling' | 'converging' | 'denoising' | 'finished' | 'error';
|
|
17
|
+
/** Execution overrides for one refine call; accumulated samples are retained. */
|
|
18
|
+
export interface RefineOptions {
|
|
19
|
+
/** Batch several samples in this call. Default this render's batchSamples. */ batchSamples?: boolean;
|
|
20
|
+
/** Positive finite WebGPU queue budget in milliseconds; capped by timeBudgetMs, ignored on WebGL. Default timeBudgetMs. */ targetBatchTimeMs?: number;
|
|
21
|
+
/** Leave the displayed image unchanged, for calls between display frames; the next presentation or pixel read updates it once with every new sample. Ignored on WebGL. Default false. */ deferResolve?: boolean;
|
|
22
|
+
}
|
|
16
23
|
/** When a render filters its complete samples. Default converged. */
|
|
17
24
|
export type DenoiseSchedule = 'converged' | 'progressive' | 'every-sample';
|
|
18
25
|
/** Caller-owned WebGPU filter. Render/Engine never dispose it; calls on one engine are serialized. */
|
|
@@ -31,6 +38,7 @@ export interface Denoiser {
|
|
|
31
38
|
}
|
|
32
39
|
/** Borrowed, tightly packed rgba32float buffers, top row first, width*height*16 bytes of image data. */
|
|
33
40
|
export interface DenoiseInput {
|
|
41
|
+
/** Requested primary-surface buffers, top row first; id is rgba32uint, others rgba32float. Default undefined. Borrowed until denoise settles. */ aovs?: Readonly<Partial<Record<AovKind, GPUBuffer>>>;
|
|
34
42
|
/** Engine WebGPU device; may change after device loss/recovery. */ device: GPUDevice;
|
|
35
43
|
/** Actual internal width, including backend alignment. */ width: number;
|
|
36
44
|
/** Actual internal height, including backend alignment. */ height: number;
|
|
@@ -41,6 +49,7 @@ export interface DenoiseInput {
|
|
|
41
49
|
}
|
|
42
50
|
/** Third-party WebGPU filter; ignored with one warning on WebGL. */
|
|
43
51
|
export interface CustomDenoiserOptions {
|
|
52
|
+
/** Optional AOV inputs; automatically enables their passes for this render. Default []. */ aovs?: readonly AovKind[];
|
|
44
53
|
/** Required implementation selector. */ type: 'custom';
|
|
45
54
|
/** Required caller-owned instance, keyed by object identity; never serialized or released by Render/Engine. */ denoiser: Denoiser;
|
|
46
55
|
/** When to filter complete samples. Default converged. */ schedule?: DenoiseSchedule;
|
|
@@ -58,7 +67,7 @@ interface OIDNSettings {
|
|
|
58
67
|
/** Execution backend. Default auto (native WGSL unless WebNN is selected). */ engine?: OIDNEngine;
|
|
59
68
|
/** WGSL precision. Default auto (fp16 when shader-f16 is available). */ precision?: OIDNPrecision;
|
|
60
69
|
/** Adaptive tile controller. Default enabled with minTileSize 256, initialTileSize 432, targetTileTimeMs 16, adjustmentStep 16. */ dynamicTile?: OIDNDynamicTileSetting;
|
|
61
|
-
/** Maximum OIDN tile
|
|
70
|
+
/** Maximum OIDN output tile edge in pixels. Default `512`. */ maxTileSize?: number;
|
|
62
71
|
/** Abort weight downloads. Default undefined; does not distinguish cached networks. */ signal?: AbortSignal;
|
|
63
72
|
}
|
|
64
73
|
/** OIDN configuration on WebGPU: choose a packaged model or an explicit network URL. */
|
|
@@ -81,6 +90,8 @@ export type OIDNDenoiserOptions = OIDNSettings & ({
|
|
|
81
90
|
export type DenoiserOptions = JNLMDenoiserOptions | OIDNDenoiserOptions | CustomDenoiserOptions;
|
|
82
91
|
/** Optional per-render execution and image-quality settings. */
|
|
83
92
|
export interface RenderSettings {
|
|
93
|
+
/** Optional surface outputs. Default []; disabled outputs allocate no AOV resources. */ aovs?: readonly AovKind[];
|
|
94
|
+
/** Independent AOV sample cap, positive integer. Default 16. */ aovSamples?: number;
|
|
84
95
|
/** Maximum complete samples. Default 2048. */ maxSamples?: number;
|
|
85
96
|
/**
|
|
86
97
|
* Maximum scattering depth, rounded and clamped to [1, 20] (NaN becomes 1).
|
|
@@ -99,7 +110,8 @@ export interface RenderSettings {
|
|
|
99
110
|
/** Minimum transmissive path alpha, using path depth. Default 1. Changes restart this accumulation. */ transmissiveOutputAlphaMin?: number;
|
|
100
111
|
/** Tile execution budget in milliseconds. Default 21. */ timeBudgetMs?: number;
|
|
101
112
|
/** Maximum tiles per frame. Default Infinity. */ maxTiles?: number;
|
|
102
|
-
/**
|
|
113
|
+
/** Let one refine submit several samples, up to timeBudgetMs of GPU work; WebGPU requires GPU timestamps. RenderLoop also keeps batching between display frames. Default false. */ batchSamples?: boolean;
|
|
114
|
+
/** @deprecated Use batchSamples; this alias will be removed in a later release. Default false. */ allowMultipleSamplesPerFrame?: boolean;
|
|
103
115
|
/** Adapt scale to frame timing; minScale must not exceed resolutionScale. Default false. */ adaptiveResolution?: {
|
|
104
116
|
targetFrameMs: number;
|
|
105
117
|
minScale: number;
|
|
@@ -144,6 +156,8 @@ export interface ConvergeResult {
|
|
|
144
156
|
}
|
|
145
157
|
/** One independently configured image and its accumulation, owned by an engine. */
|
|
146
158
|
export default class Render {
|
|
159
|
+
/** Enabled surface outputs. Default []; readPixels rejects outputs not enabled here. */ aovs: readonly AovKind[];
|
|
160
|
+
/** Independent AOV sample cap. Default 16. */ aovSamples: number;
|
|
147
161
|
/** Maximum complete samples. Default 2048. */ maxSamples: number;
|
|
148
162
|
/**
|
|
149
163
|
* Maximum scattering depth, rounded and clamped to [1, 20] (NaN becomes 1).
|
|
@@ -162,7 +176,10 @@ export default class Render {
|
|
|
162
176
|
/** Minimum transmissive path alpha. Default 1. Changing it restarts this render. */ transmissiveOutputAlphaMin: number;
|
|
163
177
|
/** Execution budget in milliseconds. Default 21. */ timeBudgetMs: number;
|
|
164
178
|
/** Maximum tiles per frame. Default Infinity. */ maxTiles: number;
|
|
165
|
-
/**
|
|
179
|
+
/** Let one refine submit several samples within timeBudgetMs; WebGPU requires GPU timestamps. Default false. */ batchSamples: boolean;
|
|
180
|
+
/** @deprecated Use batchSamples; this alias will be removed in a later release. Default false. */
|
|
181
|
+
get allowMultipleSamplesPerFrame(): boolean;
|
|
182
|
+
set allowMultipleSamplesPerFrame(value: boolean);
|
|
166
183
|
/** Adaptive resolution controller, or false. Default false. */ adaptiveResolution: {
|
|
167
184
|
targetFrameMs: number;
|
|
168
185
|
minScale: number;
|
|
@@ -192,6 +209,7 @@ export default class Render {
|
|
|
192
209
|
private _status;
|
|
193
210
|
private _disposed;
|
|
194
211
|
private _busy;
|
|
212
|
+
private _refineOptions?;
|
|
195
213
|
private _offlineCamera;
|
|
196
214
|
private _input;
|
|
197
215
|
private _adaptiveScale;
|
|
@@ -222,11 +240,18 @@ export default class Render {
|
|
|
222
240
|
constructor(engine: Engine, options?: RenderOptions);
|
|
223
241
|
/** Actual target width; before allocation uses the requested dimensions. */ get width(): number;
|
|
224
242
|
/** Actual target height; before allocation uses the requested dimensions. */ get height(): number;
|
|
225
|
-
/** Complete samples since the last restart; stale engine inputs report 0. Default 0. */
|
|
243
|
+
/** Complete beauty samples since the last restart; stale engine inputs report 0. Default 0. */
|
|
226
244
|
get samples(): number;
|
|
227
|
-
/** Whether complete samples reached maxSamples. Default false. */ get converged(): boolean;
|
|
245
|
+
/** Whether complete beauty samples reached maxSamples. Default false. */ get converged(): boolean;
|
|
228
246
|
/** Current execution state. Default preparing. */ get status(): RenderStatus;
|
|
229
247
|
private get _current();
|
|
248
|
+
/** Latest WebGPU full beauty sample estimate in milliseconds. Default undefined; also undefined for stale inputs, during converge or without GPU timestamps. */
|
|
249
|
+
get gpuSampleTimeMs(): number | undefined;
|
|
250
|
+
/** Waits for the next release of WebGPU sampling queue capacity. Resolves immediately if no sampling is queued or on WebGL; does not submit work. Throws after disposal. */
|
|
251
|
+
whenReadyToRefine(): Promise<void>;
|
|
252
|
+
/** Complete surface-output samples since restart; stale inputs report 0. Independent of beauty samples. Default 0. */
|
|
253
|
+
get aovSamplesRendered(): number;
|
|
254
|
+
private _refineAov;
|
|
230
255
|
private _validate;
|
|
231
256
|
private _size;
|
|
232
257
|
private _settings;
|
|
@@ -234,8 +259,8 @@ export default class Render {
|
|
|
234
259
|
private _trace;
|
|
235
260
|
private _adaptResolution;
|
|
236
261
|
private _cancelAdaptiveFrames;
|
|
237
|
-
/** Accumulates within this frame's budget. Rejects calls during converge or after disposal. */
|
|
238
|
-
refine(): RenderStatus;
|
|
262
|
+
/** Accumulates within this frame's budget. Default undefined traces beauty and requested AOVs. Pass an enabled AOV kind to refine surface outputs only, without beauty or denoising; progress is aovSamplesRendered. Options default to this render's execution settings. Rejects calls during converge or after disposal. */
|
|
263
|
+
refine(channel?: AovKind, options?: RefineOptions): RenderStatus;
|
|
239
264
|
private _refine;
|
|
240
265
|
private _refineOne;
|
|
241
266
|
private _schedule;
|
|
@@ -247,11 +272,21 @@ export default class Render {
|
|
|
247
272
|
private _warmDenoiser;
|
|
248
273
|
private _cancelDenoise;
|
|
249
274
|
private _maybeDenoise;
|
|
250
|
-
/** Reads native RGBA
|
|
251
|
-
readPixels(kind
|
|
275
|
+
/** Reads native RGBA, top row first; id uses uint32, other kinds float32. Default hdr. Beauty/guide reads are empty until a beauty sample completes. AOV reads require explicit aovs enablement. Custom denoised output is resolved linear HDR ray color before display background/catcher composition; built-ins retain their native display-space output. Unavailable denoised output falls back to hdr. */
|
|
276
|
+
readPixels(kind: 'id'): Promise<{
|
|
277
|
+
width: number;
|
|
278
|
+
height: number;
|
|
279
|
+
data: Uint32Array;
|
|
280
|
+
}>;
|
|
281
|
+
readPixels(kind?: 'hdr' | 'denoised' | 'albedo' | 'normal' | Exclude<AovKind, 'id'>): Promise<{
|
|
282
|
+
width: number;
|
|
283
|
+
height: number;
|
|
252
284
|
data: Float32Array;
|
|
285
|
+
}>;
|
|
286
|
+
readPixels(kind: 'hdr' | 'denoised' | 'albedo' | 'normal' | AovKind): Promise<{
|
|
253
287
|
width: number;
|
|
254
288
|
height: number;
|
|
289
|
+
data: Float32Array | Uint32Array;
|
|
255
290
|
}>;
|
|
256
291
|
/** Borrows a read-only WebGPU texture; undefined on WebGL or before a complete sample. Kind is required. HDR is native resolved linear ray color before denoising/display composition, with DenoiseInput.color normalization and coverage. Display is the latest compose, including filters and display passes. Valid only until this render's next refine/converge, display present/setSize, restart/dispose or device loss; never retain, write or destroy it. */
|
|
257
292
|
getOutputTexture(kind: 'hdr' | 'display'): GPUTexture | undefined;
|