@driftengine/core 3.61.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/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +9 -0
- package/dist/behavior/behaviorTree.d.ts +140 -0
- package/dist/behavior/behaviorTree.js +289 -0
- package/dist/build/shaderComments.d.ts +64 -0
- package/dist/build/shaderComments.js +0 -0
- package/dist/cinematic/player.d.ts +80 -0
- package/dist/cinematic/player.js +184 -0
- package/dist/cinematic/script.d.ts +63 -0
- package/dist/cinematic/script.js +141 -0
- package/dist/core/bootGate.d.ts +37 -0
- package/dist/core/bootGate.js +47 -0
- package/dist/core/loadTracker.d.ts +78 -0
- package/dist/core/loadTracker.js +106 -0
- package/dist/core/loop.d.ts +118 -0
- package/dist/core/loop.js +84 -0
- package/dist/core/messageQueue.d.ts +61 -0
- package/dist/core/messageQueue.js +104 -0
- package/dist/core/onceSet.d.ts +27 -0
- package/dist/core/onceSet.js +62 -0
- package/dist/core/preferences.d.ts +47 -0
- package/dist/core/preferences.js +140 -0
- package/dist/core/remoteSave.d.ts +154 -0
- package/dist/core/remoteSave.js +249 -0
- package/dist/core/rng.d.ts +64 -0
- package/dist/core/rng.js +72 -0
- package/dist/core/stepBudget.d.ts +91 -0
- package/dist/core/stepBudget.js +105 -0
- package/dist/core/storage.d.ts +52 -0
- package/dist/core/storage.js +85 -0
- package/dist/core/tickTrace.d.ts +72 -0
- package/dist/core/tickTrace.js +102 -0
- package/dist/core/timeCurve.d.ts +83 -0
- package/dist/core/timeCurve.js +107 -0
- package/dist/core/withDefaults.d.ts +21 -0
- package/dist/core/withDefaults.js +29 -0
- package/dist/dev/contactProbe.d.ts +41 -0
- package/dist/dev/contactProbe.js +58 -0
- package/dist/dev/fpsMeter.d.ts +45 -0
- package/dist/dev/fpsMeter.js +86 -0
- package/dist/environment/celestialClock.d.ts +141 -0
- package/dist/environment/celestialClock.js +262 -0
- package/dist/geometry/decal.d.ts +61 -0
- package/dist/geometry/decal.js +178 -0
- package/dist/geometry/filmPatch.d.ts +35 -0
- package/dist/geometry/filmPatch.js +112 -0
- package/dist/geometry/growable.d.ts +70 -0
- package/dist/geometry/growable.js +167 -0
- package/dist/geometry/lightVolume.d.ts +76 -0
- package/dist/geometry/lightVolume.js +65 -0
- package/dist/geometry/meshBuilder.d.ts +426 -0
- package/dist/geometry/meshBuilder.js +1184 -0
- package/dist/geometry/pixelFont.d.ts +59 -0
- package/dist/geometry/pixelFont.js +179 -0
- package/dist/geometry/ribbon.d.ts +101 -0
- package/dist/geometry/ribbon.js +546 -0
- package/dist/geometry/shellFill.d.ts +101 -0
- package/dist/geometry/shellFill.js +203 -0
- package/dist/geometry/spline.d.ts +162 -0
- package/dist/geometry/spline.js +527 -0
- package/dist/geometry/tangents.d.ts +30 -0
- package/dist/geometry/tangents.js +142 -0
- package/dist/geometry/textMesh.d.ts +51 -0
- package/dist/geometry/textMesh.js +57 -0
- package/dist/geometry/treeBuilder.d.ts +37 -0
- package/dist/geometry/treeBuilder.js +56 -0
- package/dist/host/display.d.ts +135 -0
- package/dist/host/display.js +114 -0
- package/dist/host/files.d.ts +25 -0
- package/dist/host/files.js +44 -0
- package/dist/host/lifecycle.d.ts +45 -0
- package/dist/host/lifecycle.js +28 -0
- package/dist/host/platformServices.d.ts +23 -0
- package/dist/host/platformServices.js +1 -0
- package/dist/host/screen.d.ts +49 -0
- package/dist/host/screen.js +90 -0
- package/dist/index.d.ts +289 -0
- package/dist/index.js +320 -0
- package/dist/input/actionMap.d.ts +181 -0
- package/dist/input/actionMap.js +314 -0
- package/dist/input/activeDevice.d.ts +55 -0
- package/dist/input/activeDevice.js +83 -0
- package/dist/input/gamepadIdentity.d.ts +43 -0
- package/dist/input/gamepadIdentity.js +108 -0
- package/dist/input/gamepadMapping.d.ts +56 -0
- package/dist/input/gamepadMapping.js +91 -0
- package/dist/input/input.d.ts +281 -0
- package/dist/input/input.js +703 -0
- package/dist/input/inputHarness.d.ts +42 -0
- package/dist/input/inputHarness.js +193 -0
- package/dist/input/rightGesture.d.ts +57 -0
- package/dist/input/rightGesture.js +49 -0
- package/dist/input/rumble.d.ts +71 -0
- package/dist/input/rumble.js +119 -0
- package/dist/input/touchControls.d.ts +138 -0
- package/dist/input/touchControls.js +352 -0
- package/dist/input/typingTarget.d.ts +6 -0
- package/dist/input/typingTarget.js +27 -0
- package/dist/math/bounds.d.ts +61 -0
- package/dist/math/bounds.js +121 -0
- package/dist/math/color.d.ts +8 -0
- package/dist/math/color.js +35 -0
- package/dist/math/exact.d.ts +66 -0
- package/dist/math/exact.js +262 -0
- package/dist/math/frustum.d.ts +44 -0
- package/dist/math/frustum.js +90 -0
- package/dist/math/intersect.d.ts +76 -0
- package/dist/math/intersect.js +185 -0
- package/dist/math/scalar.d.ts +51 -0
- package/dist/math/scalar.js +99 -0
- package/dist/math/spring.d.ts +59 -0
- package/dist/math/spring.js +88 -0
- package/dist/nav/navGraph.d.ts +71 -0
- package/dist/nav/navGraph.js +111 -0
- package/dist/nav/navPath.d.ts +93 -0
- package/dist/nav/navPath.js +162 -0
- package/dist/nav/navSearch.d.ts +74 -0
- package/dist/nav/navSearch.js +198 -0
- package/dist/physics/boxSurface.d.ts +48 -0
- package/dist/physics/boxSurface.js +73 -0
- package/dist/physics/colliderSurface.d.ts +46 -0
- package/dist/physics/colliderSurface.js +146 -0
- package/dist/physics/compositeSurface.d.ts +33 -0
- package/dist/physics/compositeSurface.js +108 -0
- package/dist/physics/heightSurface.d.ts +103 -0
- package/dist/physics/heightSurface.js +153 -0
- package/dist/physics/ribbonSurface.d.ts +239 -0
- package/dist/physics/ribbonSurface.js +522 -0
- package/dist/render/ambientOcclusionPass.d.ts +53 -0
- package/dist/render/ambientOcclusionPass.js +179 -0
- package/dist/render/areaLights.d.ts +116 -0
- package/dist/render/areaLights.js +91 -0
- package/dist/render/areaShadowSet.d.ts +184 -0
- package/dist/render/areaShadowSet.js +277 -0
- package/dist/render/atmosphere.d.ts +94 -0
- package/dist/render/atmosphere.js +91 -0
- package/dist/render/backend/api.d.ts +496 -0
- package/dist/render/backend/api.js +1 -0
- package/dist/render/backend/budget.d.ts +82 -0
- package/dist/render/backend/budget.js +99 -0
- package/dist/render/backend/createRenderer.d.ts +135 -0
- package/dist/render/backend/createRenderer.js +201 -0
- package/dist/render/backend/deadline.d.ts +24 -0
- package/dist/render/backend/deadline.js +38 -0
- package/dist/render/backend/probe.d.ts +30 -0
- package/dist/render/backend/probe.js +129 -0
- package/dist/render/backend/select.d.ts +70 -0
- package/dist/render/backend/select.js +249 -0
- package/dist/render/backend/timer.d.ts +50 -0
- package/dist/render/backend/timer.js +1 -0
- package/dist/render/backend/webgl2/instanced.d.ts +21 -0
- package/dist/render/backend/webgl2/instanced.js +42 -0
- package/dist/render/backend/webgl2/morphTexture.d.ts +21 -0
- package/dist/render/backend/webgl2/morphTexture.js +55 -0
- package/dist/render/backend/webgl2/renderer.d.ts +3027 -0
- package/dist/render/backend/webgl2/renderer.js +6041 -0
- package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +32 -0
- package/dist/render/backend/webgl2/skinPaletteTexture.js +68 -0
- package/dist/render/backend/webgpu/boltPass.d.ts +42 -0
- package/dist/render/backend/webgpu/boltPass.js +160 -0
- package/dist/render/backend/webgpu/buffers.d.ts +159 -0
- package/dist/render/backend/webgpu/buffers.js +402 -0
- package/dist/render/backend/webgpu/causticsPass.d.ts +36 -0
- package/dist/render/backend/webgpu/causticsPass.js +138 -0
- package/dist/render/backend/webgpu/clusterBinner.d.ts +51 -0
- package/dist/render/backend/webgpu/clusterBinner.js +206 -0
- package/dist/render/backend/webgpu/depthPass.d.ts +114 -0
- package/dist/render/backend/webgpu/depthPass.js +228 -0
- package/dist/render/backend/webgpu/device.d.ts +52 -0
- package/dist/render/backend/webgpu/device.js +121 -0
- package/dist/render/backend/webgpu/drawCommand.d.ts +43 -0
- package/dist/render/backend/webgpu/drawCommand.js +54 -0
- package/dist/render/backend/webgpu/environmentTexels.d.ts +28 -0
- package/dist/render/backend/webgpu/environmentTexels.js +79 -0
- package/dist/render/backend/webgpu/filmPass.d.ts +29 -0
- package/dist/render/backend/webgpu/filmPass.js +97 -0
- package/dist/render/backend/webgpu/flatPass.d.ts +213 -0
- package/dist/render/backend/webgpu/flatPass.js +482 -0
- package/dist/render/backend/webgpu/flockPass.d.ts +34 -0
- package/dist/render/backend/webgpu/flockPass.js +129 -0
- package/dist/render/backend/webgpu/gpuTimestamps.d.ts +94 -0
- package/dist/render/backend/webgpu/gpuTimestamps.js +213 -0
- package/dist/render/backend/webgpu/insetPass.d.ts +19 -0
- package/dist/render/backend/webgpu/insetPass.js +108 -0
- package/dist/render/backend/webgpu/instanced.d.ts +27 -0
- package/dist/render/backend/webgpu/instanced.js +49 -0
- package/dist/render/backend/webgpu/lightVolumePass.d.ts +75 -0
- package/dist/render/backend/webgpu/lightVolumePass.js +154 -0
- package/dist/render/backend/webgpu/linePass.d.ts +90 -0
- package/dist/render/backend/webgpu/linePass.js +220 -0
- package/dist/render/backend/webgpu/morphTexture.d.ts +18 -0
- package/dist/render/backend/webgpu/morphTexture.js +51 -0
- package/dist/render/backend/webgpu/panelPass.d.ts +37 -0
- package/dist/render/backend/webgpu/panelPass.js +114 -0
- package/dist/render/backend/webgpu/particlePass.d.ts +89 -0
- package/dist/render/backend/webgpu/particlePass.js +280 -0
- package/dist/render/backend/webgpu/pipelineCache.d.ts +93 -0
- package/dist/render/backend/webgpu/pipelineCache.js +140 -0
- package/dist/render/backend/webgpu/plumePass.d.ts +69 -0
- package/dist/render/backend/webgpu/plumePass.js +213 -0
- package/dist/render/backend/webgpu/pointShadowPass.d.ts +88 -0
- package/dist/render/backend/webgpu/pointShadowPass.js +280 -0
- package/dist/render/backend/webgpu/postPass.d.ts +342 -0
- package/dist/render/backend/webgpu/postPass.js +366 -0
- package/dist/render/backend/webgpu/probePass.d.ts +108 -0
- package/dist/render/backend/webgpu/probePass.js +188 -0
- package/dist/render/backend/webgpu/reflectionPass.d.ts +29 -0
- package/dist/render/backend/webgpu/reflectionPass.js +87 -0
- package/dist/render/backend/webgpu/renderer.d.ts +3082 -0
- package/dist/render/backend/webgpu/renderer.js +10911 -0
- package/dist/render/backend/webgpu/scatterPass.d.ts +95 -0
- package/dist/render/backend/webgpu/scatterPass.js +266 -0
- package/dist/render/backend/webgpu/sdfTextPass.d.ts +86 -0
- package/dist/render/backend/webgpu/sdfTextPass.js +190 -0
- package/dist/render/backend/webgpu/shaderModules.d.ts +9 -0
- package/dist/render/backend/webgpu/shaderModules.js +45 -0
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +23 -0
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +208 -0
- package/dist/render/backend/webgpu/skinPaletteRing.d.ts +67 -0
- package/dist/render/backend/webgpu/skinPaletteRing.js +97 -0
- package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +17 -0
- package/dist/render/backend/webgpu/skinPaletteTexture.js +68 -0
- package/dist/render/backend/webgpu/skyPass.d.ts +102 -0
- package/dist/render/backend/webgpu/skyPass.js +70 -0
- package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +41 -0
- package/dist/render/backend/webgpu/surfaceTexturePass.js +228 -0
- package/dist/render/backend/webgpu/textPass.d.ts +73 -0
- package/dist/render/backend/webgpu/textPass.js +190 -0
- package/dist/render/backend/webgpu/uniformRing.d.ts +133 -0
- package/dist/render/backend/webgpu/uniformRing.js +208 -0
- package/dist/render/backend/webgpu/waterPass.d.ts +73 -0
- package/dist/render/backend/webgpu/waterPass.js +160 -0
- package/dist/render/backend/webgpu/windStreakPass.d.ts +46 -0
- package/dist/render/backend/webgpu/windStreakPass.js +153 -0
- package/dist/render/billboard.d.ts +27 -0
- package/dist/render/billboard.js +79 -0
- package/dist/render/bloomChain.d.ts +66 -0
- package/dist/render/bloomChain.js +83 -0
- package/dist/render/bloomPass.d.ts +54 -0
- package/dist/render/bloomPass.js +219 -0
- package/dist/render/boltBatch.d.ts +39 -0
- package/dist/render/boltBatch.js +121 -0
- package/dist/render/boltPool.d.ts +135 -0
- package/dist/render/boltPool.js +259 -0
- package/dist/render/boom.d.ts +46 -0
- package/dist/render/boom.js +81 -0
- package/dist/render/camera.d.ts +119 -0
- package/dist/render/camera.js +304 -0
- package/dist/render/causticsRenderer.d.ts +63 -0
- package/dist/render/causticsRenderer.js +119 -0
- package/dist/render/cinematicCamera.d.ts +102 -0
- package/dist/render/cinematicCamera.js +227 -0
- package/dist/render/clusteredLights.d.ts +260 -0
- package/dist/render/clusteredLights.js +479 -0
- package/dist/render/colourGrade.d.ts +62 -0
- package/dist/render/colourGrade.js +91 -0
- package/dist/render/compute.d.ts +74 -0
- package/dist/render/compute.js +8 -0
- package/dist/render/contextLoss.d.ts +32 -0
- package/dist/render/contextLoss.js +46 -0
- package/dist/render/debugLines.d.ts +75 -0
- package/dist/render/debugLines.js +281 -0
- package/dist/render/decalPass.d.ts +34 -0
- package/dist/render/decalPass.js +103 -0
- package/dist/render/decalProjector.d.ts +140 -0
- package/dist/render/decalProjector.js +282 -0
- package/dist/render/decalQueue.d.ts +53 -0
- package/dist/render/decalQueue.js +87 -0
- package/dist/render/depthConvention.d.ts +314 -0
- package/dist/render/depthConvention.js +346 -0
- package/dist/render/drawingBuffer.d.ts +52 -0
- package/dist/render/drawingBuffer.js +67 -0
- package/dist/render/emptyTexture.d.ts +60 -0
- package/dist/render/emptyTexture.js +103 -0
- package/dist/render/envProbeArray.d.ts +85 -0
- package/dist/render/envProbeArray.js +164 -0
- package/dist/render/equirectToCube.d.ts +54 -0
- package/dist/render/equirectToCube.js +123 -0
- package/dist/render/flockGeometry.d.ts +23 -0
- package/dist/render/flockGeometry.js +43 -0
- package/dist/render/flockRenderer.d.ts +37 -0
- package/dist/render/flockRenderer.js +70 -0
- package/dist/render/frame/arena.d.ts +32 -0
- package/dist/render/frame/arena.js +65 -0
- package/dist/render/frame/index.d.ts +18 -0
- package/dist/render/frame/index.js +4 -0
- package/dist/render/frame/replay.d.ts +34 -0
- package/dist/render/frame/replay.js +48 -0
- package/dist/render/frame/resources.d.ts +25 -0
- package/dist/render/frame/resources.js +55 -0
- package/dist/render/frame/schedule.d.ts +37 -0
- package/dist/render/frame/schedule.js +61 -0
- package/dist/render/frameView.d.ts +19 -0
- package/dist/render/frameView.js +1 -0
- package/dist/render/gizmo.d.ts +236 -0
- package/dist/render/gizmo.js +727 -0
- package/dist/render/globalMedium.d.ts +124 -0
- package/dist/render/globalMedium.js +100 -0
- package/dist/render/globalMediumPass.d.ts +101 -0
- package/dist/render/globalMediumPass.js +250 -0
- package/dist/render/gpuCapability.d.ts +111 -0
- package/dist/render/gpuCapability.js +194 -0
- package/dist/render/gpuTimer.d.ts +87 -0
- package/dist/render/gpuTimer.js +145 -0
- package/dist/render/halfFloat.d.ts +4 -0
- package/dist/render/halfFloat.js +38 -0
- package/dist/render/handleRegistry.d.ts +54 -0
- package/dist/render/handleRegistry.js +84 -0
- package/dist/render/iesProfile.d.ts +64 -0
- package/dist/render/iesProfile.js +179 -0
- package/dist/render/imageTexels.d.ts +50 -0
- package/dist/render/imageTexels.js +91 -0
- package/dist/render/instancedMesh.d.ts +48 -0
- package/dist/render/instancedMesh.js +127 -0
- package/dist/render/instances.d.ts +69 -0
- package/dist/render/instances.js +52 -0
- package/dist/render/lightBudget.d.ts +397 -0
- package/dist/render/lightBudget.js +524 -0
- package/dist/render/lightMatrix.d.ts +3 -0
- package/dist/render/lightMatrix.js +45 -0
- package/dist/render/lightVolumeDraw.d.ts +132 -0
- package/dist/render/lightVolumeDraw.js +181 -0
- package/dist/render/lineBatch.d.ts +60 -0
- package/dist/render/lineBatch.js +160 -0
- package/dist/render/linePoints.d.ts +33 -0
- package/dist/render/linePoints.js +46 -0
- package/dist/render/livePointShadowSet.d.ts +72 -0
- package/dist/render/livePointShadowSet.js +258 -0
- package/dist/render/lod.d.ts +35 -0
- package/dist/render/lod.js +65 -0
- package/dist/render/mesh.d.ts +177 -0
- package/dist/render/mesh.js +466 -0
- package/dist/render/occlusion.d.ts +81 -0
- package/dist/render/occlusion.js +378 -0
- package/dist/render/oitPass.d.ts +67 -0
- package/dist/render/oitPass.js +213 -0
- package/dist/render/orderIndependent.d.ts +92 -0
- package/dist/render/orderIndependent.js +108 -0
- package/dist/render/particleBatch.d.ts +140 -0
- package/dist/render/particleBatch.js +186 -0
- package/dist/render/particleMaterial.d.ts +54 -0
- package/dist/render/particleMaterial.js +42 -0
- package/dist/render/particlePool.d.ts +124 -0
- package/dist/render/particlePool.js +182 -0
- package/dist/render/pass.d.ts +195 -0
- package/dist/render/pass.js +9 -0
- package/dist/render/passTarget.d.ts +86 -0
- package/dist/render/passTarget.js +121 -0
- package/dist/render/pickable.d.ts +31 -0
- package/dist/render/pickable.js +172 -0
- package/dist/render/planarReflection.d.ts +59 -0
- package/dist/render/planarReflection.js +194 -0
- package/dist/render/planarReflectionDraw.d.ts +31 -0
- package/dist/render/planarReflectionDraw.js +65 -0
- package/dist/render/plumeGeometry.d.ts +25 -0
- package/dist/render/plumeGeometry.js +61 -0
- package/dist/render/plumeMaterial.d.ts +31 -0
- package/dist/render/plumeMaterial.js +64 -0
- package/dist/render/plumeRenderer.d.ts +96 -0
- package/dist/render/plumeRenderer.js +185 -0
- package/dist/render/pointLightSelection.d.ts +175 -0
- package/dist/render/pointLightSelection.js +301 -0
- package/dist/render/pointShadowArray.d.ts +95 -0
- package/dist/render/pointShadowArray.js +219 -0
- package/dist/render/pointShadowBudget.d.ts +118 -0
- package/dist/render/pointShadowBudget.js +221 -0
- package/dist/render/pointShadowImage.d.ts +265 -0
- package/dist/render/pointShadowImage.js +339 -0
- package/dist/render/pointShadowMap.d.ts +93 -0
- package/dist/render/pointShadowMap.js +167 -0
- package/dist/render/pointShadowSystem.d.ts +195 -0
- package/dist/render/pointShadowSystem.js +336 -0
- package/dist/render/prefilterEnvMap.d.ts +124 -0
- package/dist/render/prefilterEnvMap.js +146 -0
- package/dist/render/prefilterPass.d.ts +44 -0
- package/dist/render/prefilterPass.js +98 -0
- package/dist/render/probeGrid.d.ts +122 -0
- package/dist/render/probeGrid.js +174 -0
- package/dist/render/rainField.d.ts +99 -0
- package/dist/render/rainField.js +168 -0
- package/dist/render/reflectionProbe.d.ts +188 -0
- package/dist/render/reflectionProbe.js +437 -0
- package/dist/render/renderQuality.d.ts +699 -0
- package/dist/render/renderQuality.js +293 -0
- package/dist/render/rendererHarness.d.ts +39 -0
- package/dist/render/rendererHarness.js +185 -0
- package/dist/render/resolutionGovernor.d.ts +107 -0
- package/dist/render/resolutionGovernor.js +144 -0
- package/dist/render/scatterDeform.d.ts +17 -0
- package/dist/render/scatterDeform.js +46 -0
- package/dist/render/sceneTarget.d.ts +288 -0
- package/dist/render/sceneTarget.js +856 -0
- package/dist/render/screenSpaceReflection.d.ts +233 -0
- package/dist/render/screenSpaceReflection.js +415 -0
- package/dist/render/sdfFont.d.ts +77 -0
- package/dist/render/sdfFont.js +86 -0
- package/dist/render/sdfTextLayout.d.ts +46 -0
- package/dist/render/sdfTextLayout.js +145 -0
- package/dist/render/sdfTextRenderer.d.ts +75 -0
- package/dist/render/sdfTextRenderer.js +194 -0
- package/dist/render/seaState.d.ts +25 -0
- package/dist/render/seaState.js +34 -0
- package/dist/render/segmentQuads.d.ts +29 -0
- package/dist/render/segmentQuads.js +75 -0
- package/dist/render/shader.d.ts +5 -0
- package/dist/render/shader.js +172 -0
- package/dist/render/shaders/ambientOcclusion.d.ts +45 -0
- package/dist/render/shaders/ambientOcclusion.js +352 -0
- package/dist/render/shaders/arcane.d.ts +19 -0
- package/dist/render/shaders/arcane.js +102 -0
- package/dist/render/shaders/bloom.d.ts +70 -0
- package/dist/render/shaders/bloom.js +227 -0
- package/dist/render/shaders/bolt.d.ts +17 -0
- package/dist/render/shaders/bolt.js +161 -0
- package/dist/render/shaders/caustics.d.ts +38 -0
- package/dist/render/shaders/caustics.js +167 -0
- package/dist/render/shaders/conditionals.d.ts +21 -0
- package/dist/render/shaders/conditionals.js +55 -0
- package/dist/render/shaders/decalProject.d.ts +25 -0
- package/dist/render/shaders/decalProject.js +125 -0
- package/dist/render/shaders/depth.d.ts +14 -0
- package/dist/render/shaders/depth.js +114 -0
- package/dist/render/shaders/depthOfField.d.ts +41 -0
- package/dist/render/shaders/depthOfField.js +139 -0
- package/dist/render/shaders/film.d.ts +15 -0
- package/dist/render/shaders/film.js +283 -0
- package/dist/render/shaders/fire.d.ts +12 -0
- package/dist/render/shaders/fire.js +178 -0
- package/dist/render/shaders/flat/directionalShadow.d.ts +1 -0
- package/dist/render/shaders/flat/directionalShadow.js +195 -0
- package/dist/render/shaders/flat/index.d.ts +135 -0
- package/dist/render/shaders/flat/index.js +387 -0
- package/dist/render/shaders/flat/lobes.d.ts +1 -0
- package/dist/render/shaders/flat/lobes.js +398 -0
- package/dist/render/shaders/flat/main.d.ts +2 -0
- package/dist/render/shaders/flat/main.js +1630 -0
- package/dist/render/shaders/flat/pointShadow.d.ts +1 -0
- package/dist/render/shaders/flat/pointShadow.js +322 -0
- package/dist/render/shaders/flat/preamble.d.ts +15 -0
- package/dist/render/shaders/flat/preamble.js +864 -0
- package/dist/render/shaders/flat/probeGrid.d.ts +21 -0
- package/dist/render/shaders/flat/probeGrid.js +151 -0
- package/dist/render/shaders/flat/surface.d.ts +2 -0
- package/dist/render/shaders/flat/surface.js +40 -0
- package/dist/render/shaders/flock.d.ts +11 -0
- package/dist/render/shaders/flock.js +102 -0
- package/dist/render/shaders/fog.d.ts +37 -0
- package/dist/render/shaders/fog.js +98 -0
- package/dist/render/shaders/fullscreen.d.ts +16 -0
- package/dist/render/shaders/fullscreen.js +27 -0
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +65 -0
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +71 -0
- package/dist/render/shaders/generated/arcane.wgsl.d.ts +90 -0
- package/dist/render/shaders/generated/arcane.wgsl.js +96 -0
- package/dist/render/shaders/generated/bloom.wgsl.d.ts +69 -0
- package/dist/render/shaders/generated/bloom.wgsl.js +75 -0
- package/dist/render/shaders/generated/bolt.wgsl.d.ts +118 -0
- package/dist/render/shaders/generated/bolt.wgsl.js +124 -0
- package/dist/render/shaders/generated/caustics.wgsl.d.ts +118 -0
- package/dist/render/shaders/generated/caustics.wgsl.js +124 -0
- package/dist/render/shaders/generated/decalProject.wgsl.d.ts +61 -0
- package/dist/render/shaders/generated/decalProject.wgsl.js +67 -0
- package/dist/render/shaders/generated/depth.wgsl.d.ts +131 -0
- package/dist/render/shaders/generated/depth.wgsl.js +137 -0
- package/dist/render/shaders/generated/film.wgsl.d.ts +134 -0
- package/dist/render/shaders/generated/film.wgsl.js +140 -0
- package/dist/render/shaders/generated/fire.wgsl.d.ts +128 -0
- package/dist/render/shaders/generated/fire.wgsl.js +134 -0
- package/dist/render/shaders/generated/flat.wgsl.d.ts +9163 -0
- package/dist/render/shaders/generated/flat.wgsl.js +9192 -0
- package/dist/render/shaders/generated/flock.wgsl.d.ts +73 -0
- package/dist/render/shaders/generated/flock.wgsl.js +79 -0
- package/dist/render/shaders/generated/fullscreen.wgsl.d.ts +12 -0
- package/dist/render/shaders/generated/fullscreen.wgsl.js +18 -0
- package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +130 -0
- package/dist/render/shaders/generated/globalMedium.wgsl.js +136 -0
- package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +230 -0
- package/dist/render/shaders/generated/lightVolume.wgsl.js +239 -0
- package/dist/render/shaders/generated/line.wgsl.d.ts +128 -0
- package/dist/render/shaders/generated/line.wgsl.js +134 -0
- package/dist/render/shaders/generated/octahedralResolve.wgsl.d.ts +51 -0
- package/dist/render/shaders/generated/octahedralResolve.wgsl.js +57 -0
- package/dist/render/shaders/generated/oitResolve.wgsl.d.ts +23 -0
- package/dist/render/shaders/generated/oitResolve.wgsl.js +29 -0
- package/dist/render/shaders/generated/panel.wgsl.d.ts +48 -0
- package/dist/render/shaders/generated/panel.wgsl.js +54 -0
- package/dist/render/shaders/generated/particle.wgsl.d.ts +332 -0
- package/dist/render/shaders/generated/particle.wgsl.js +338 -0
- package/dist/render/shaders/generated/prefilter.wgsl.d.ts +61 -0
- package/dist/render/shaders/generated/prefilter.wgsl.js +67 -0
- package/dist/render/shaders/generated/rush.wgsl.d.ts +131 -0
- package/dist/render/shaders/generated/rush.wgsl.js +137 -0
- package/dist/render/shaders/generated/scatter.wgsl.d.ts +195 -0
- package/dist/render/shaders/generated/scatter.wgsl.js +201 -0
- package/dist/render/shaders/generated/sdfText.wgsl.d.ts +69 -0
- package/dist/render/shaders/generated/sdfText.wgsl.js +75 -0
- package/dist/render/shaders/generated/sky.wgsl.d.ts +100 -0
- package/dist/render/shaders/generated/sky.wgsl.js +106 -0
- package/dist/render/shaders/generated/smoke.wgsl.d.ts +85 -0
- package/dist/render/shaders/generated/smoke.wgsl.js +91 -0
- package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +18 -0
- package/dist/render/shaders/generated/ssrResolve.wgsl.js +24 -0
- package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +86 -0
- package/dist/render/shaders/generated/ssrTrace.wgsl.js +92 -0
- package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +46 -0
- package/dist/render/shaders/generated/temporalResolve.wgsl.js +52 -0
- package/dist/render/shaders/generated/text.wgsl.d.ts +98 -0
- package/dist/render/shaders/generated/text.wgsl.js +104 -0
- package/dist/render/shaders/generated/water.wgsl.d.ts +247 -0
- package/dist/render/shaders/generated/water.wgsl.js +253 -0
- package/dist/render/shaders/generated/windStreaks.wgsl.d.ts +73 -0
- package/dist/render/shaders/generated/windStreaks.wgsl.js +79 -0
- package/dist/render/shaders/gerstner.d.ts +21 -0
- package/dist/render/shaders/gerstner.js +110 -0
- package/dist/render/shaders/globalMedium.d.ts +56 -0
- package/dist/render/shaders/globalMedium.js +393 -0
- package/dist/render/shaders/lightVolume.d.ts +61 -0
- package/dist/render/shaders/lightVolume.js +527 -0
- package/dist/render/shaders/line.d.ts +18 -0
- package/dist/render/shaders/line.js +122 -0
- package/dist/render/shaders/morph.d.ts +26 -0
- package/dist/render/shaders/morph.js +61 -0
- package/dist/render/shaders/octahedral.d.ts +76 -0
- package/dist/render/shaders/octahedral.js +161 -0
- package/dist/render/shaders/octahedralResolve.d.ts +25 -0
- package/dist/render/shaders/octahedralResolve.js +81 -0
- package/dist/render/shaders/oitResolve.d.ts +17 -0
- package/dist/render/shaders/oitResolve.js +42 -0
- package/dist/render/shaders/outputTransform.d.ts +37 -0
- package/dist/render/shaders/outputTransform.js +106 -0
- package/dist/render/shaders/panel.d.ts +17 -0
- package/dist/render/shaders/panel.js +50 -0
- package/dist/render/shaders/particle.d.ts +82 -0
- package/dist/render/shaders/particle.js +431 -0
- package/dist/render/shaders/prefilter.d.ts +37 -0
- package/dist/render/shaders/prefilter.js +276 -0
- package/dist/render/shaders/rush.d.ts +21 -0
- package/dist/render/shaders/rush.js +355 -0
- package/dist/render/shaders/scatter.d.ts +14 -0
- package/dist/render/shaders/scatter.js +206 -0
- package/dist/render/shaders/sdfText.d.ts +9 -0
- package/dist/render/shaders/sdfText.js +65 -0
- package/dist/render/shaders/skinning.d.ts +17 -0
- package/dist/render/shaders/skinning.js +59 -0
- package/dist/render/shaders/sky.d.ts +10 -0
- package/dist/render/shaders/sky.js +242 -0
- package/dist/render/shaders/smoke.d.ts +8 -0
- package/dist/render/shaders/smoke.js +88 -0
- package/dist/render/shaders/ssrResolve.d.ts +15 -0
- package/dist/render/shaders/ssrResolve.js +28 -0
- package/dist/render/shaders/ssrTrace.d.ts +22 -0
- package/dist/render/shaders/ssrTrace.js +230 -0
- package/dist/render/shaders/tangentFrame.d.ts +17 -0
- package/dist/render/shaders/tangentFrame.js +70 -0
- package/dist/render/shaders/temporalResolve.d.ts +1 -0
- package/dist/render/shaders/temporalResolve.js +150 -0
- package/dist/render/shaders/text.d.ts +17 -0
- package/dist/render/shaders/text.js +155 -0
- package/dist/render/shaders/vertexChannel.d.ts +39 -0
- package/dist/render/shaders/vertexChannel.js +69 -0
- package/dist/render/shaders/water.d.ts +18 -0
- package/dist/render/shaders/water.js +354 -0
- package/dist/render/shaders/windStreaks.d.ts +14 -0
- package/dist/render/shaders/windStreaks.js +129 -0
- package/dist/render/shadowCasters.d.ts +107 -0
- package/dist/render/shadowCasters.js +1 -0
- package/dist/render/shadowMap.d.ts +10 -0
- package/dist/render/shadowMap.js +80 -0
- package/dist/render/shotPlacement.d.ts +80 -0
- package/dist/render/shotPlacement.js +183 -0
- package/dist/render/skinPalette.d.ts +90 -0
- package/dist/render/skinPalette.js +136 -0
- package/dist/render/ssrPass.d.ts +59 -0
- package/dist/render/ssrPass.js +196 -0
- package/dist/render/surfaceSheet.d.ts +52 -0
- package/dist/render/surfaceSheet.js +99 -0
- package/dist/render/surfaceTexture.d.ts +197 -0
- package/dist/render/surfaceTexture.js +116 -0
- package/dist/render/temporalAa.d.ts +104 -0
- package/dist/render/temporalAa.js +194 -0
- package/dist/render/temporalPass.d.ts +54 -0
- package/dist/render/temporalPass.js +135 -0
- package/dist/render/textLayout.d.ts +88 -0
- package/dist/render/textLayout.js +201 -0
- package/dist/render/textRenderer.d.ts +32 -0
- package/dist/render/textRenderer.js +176 -0
- package/dist/render/thirdPersonCamera.d.ts +272 -0
- package/dist/render/thirdPersonCamera.js +479 -0
- package/dist/render/trample.d.ts +57 -0
- package/dist/render/trample.js +134 -0
- package/dist/render/translucentQueue.d.ts +76 -0
- package/dist/render/translucentQueue.js +90 -0
- package/dist/render/uniformVectorBudget.d.ts +105 -0
- package/dist/render/uniformVectorBudget.js +201 -0
- package/dist/render/uploadStep.d.ts +14 -0
- package/dist/render/uploadStep.js +14 -0
- package/dist/render/vertexDefaults.d.ts +48 -0
- package/dist/render/vertexDefaults.js +111 -0
- package/dist/render/visibility.d.ts +22 -0
- package/dist/render/visibility.js +47 -0
- package/dist/render/waterDraw.d.ts +57 -0
- package/dist/render/waterDraw.js +102 -0
- package/dist/render/waterGrid.d.ts +62 -0
- package/dist/render/waterGrid.js +151 -0
- package/dist/render/waterRenderer.d.ts +163 -0
- package/dist/render/waterRenderer.js +165 -0
- package/dist/render/wind.d.ts +45 -0
- package/dist/render/wind.js +32 -0
- package/dist/render/windField.d.ts +34 -0
- package/dist/render/windField.js +13 -0
- package/dist/render/windStreakDraw.d.ts +73 -0
- package/dist/render/windStreakDraw.js +86 -0
- package/dist/render/windStreakRenderer.d.ts +37 -0
- package/dist/render/windStreakRenderer.js +86 -0
- package/dist/scene/node.d.ts +128 -0
- package/dist/scene/node.js +319 -0
- package/dist/scene/visit.d.ts +38 -0
- package/dist/scene/visit.js +43 -0
- package/dist/ui/clipMime.d.ts +46 -0
- package/dist/ui/clipMime.js +88 -0
- package/dist/ui/exportTarget.d.ts +305 -0
- package/dist/ui/exportTarget.js +368 -0
- package/dist/ui/frameOverlay.d.ts +59 -0
- package/dist/ui/frameOverlay.js +76 -0
- package/dist/ui/framePacer.d.ts +142 -0
- package/dist/ui/framePacer.js +284 -0
- package/dist/ui/frameRecorder.d.ts +188 -0
- package/dist/ui/frameRecorder.js +221 -0
- package/dist/ui/fullscreen.d.ts +72 -0
- package/dist/ui/fullscreen.js +92 -0
- package/dist/ui/pixelCursor.d.ts +28 -0
- package/dist/ui/pixelCursor.js +66 -0
- package/dist/ui/splash.d.ts +86 -0
- package/dist/ui/splash.js +300 -0
- package/dist/ui/stillFrame.d.ts +22 -0
- package/dist/ui/stillFrame.js +40 -0
- package/package.json +60 -0
- package/src/behavior/behaviorTree.ts +346 -0
- package/src/build/shaderComments.ts +0 -0
- package/src/cinematic/player.ts +209 -0
- package/src/cinematic/script.ts +231 -0
- package/src/core/bootGate.ts +49 -0
- package/src/core/loadTracker.ts +144 -0
- package/src/core/loop.ts +211 -0
- package/src/core/messageQueue.ts +145 -0
- package/src/core/onceSet.ts +65 -0
- package/src/core/preferences.ts +177 -0
- package/src/core/remoteSave.ts +347 -0
- package/src/core/rng.ts +101 -0
- package/src/core/stepBudget.ts +136 -0
- package/src/core/storage.ts +114 -0
- package/src/core/tickTrace.ts +129 -0
- package/src/core/timeCurve.ts +175 -0
- package/src/core/withDefaults.ts +28 -0
- package/src/dev/contactProbe.ts +115 -0
- package/src/dev/fpsMeter.ts +101 -0
- package/src/environment/celestialClock.ts +385 -0
- package/src/geometry/decal.ts +260 -0
- package/src/geometry/filmPatch.ts +158 -0
- package/src/geometry/growable.ts +165 -0
- package/src/geometry/lightVolume.ts +161 -0
- package/src/geometry/meshBuilder.ts +1397 -0
- package/src/geometry/pixelFont.ts +189 -0
- package/src/geometry/ribbon.ts +790 -0
- package/src/geometry/shellFill.ts +265 -0
- package/src/geometry/spline.ts +659 -0
- package/src/geometry/tangents.ts +173 -0
- package/src/geometry/textMesh.ts +96 -0
- package/src/geometry/treeBuilder.ts +114 -0
- package/src/host/display.ts +180 -0
- package/src/host/files.ts +77 -0
- package/src/host/lifecycle.ts +63 -0
- package/src/host/platformServices.ts +23 -0
- package/src/host/screen.ts +134 -0
- package/src/index.ts +730 -0
- package/src/input/actionMap.ts +377 -0
- package/src/input/activeDevice.ts +86 -0
- package/src/input/gamepadIdentity.ts +131 -0
- package/src/input/gamepadMapping.ts +121 -0
- package/src/input/input.ts +872 -0
- package/src/input/inputHarness.ts +226 -0
- package/src/input/rightGesture.ts +76 -0
- package/src/input/rumble.ts +138 -0
- package/src/input/touchControls.ts +451 -0
- package/src/input/typingTarget.ts +26 -0
- package/src/math/bounds.ts +153 -0
- package/src/math/color.ts +37 -0
- package/src/math/exact.ts +274 -0
- package/src/math/frustum.ts +115 -0
- package/src/math/intersect.ts +228 -0
- package/src/math/scalar.ts +109 -0
- package/src/math/spring.ts +106 -0
- package/src/nav/navGraph.ts +168 -0
- package/src/nav/navPath.ts +217 -0
- package/src/nav/navSearch.ts +200 -0
- package/src/physics/boxSurface.ts +96 -0
- package/src/physics/colliderSurface.ts +213 -0
- package/src/physics/compositeSurface.ts +111 -0
- package/src/physics/heightSurface.ts +234 -0
- package/src/physics/ribbonSurface.ts +642 -0
- package/src/render/ambientOcclusionPass.ts +200 -0
- package/src/render/areaLights.ts +194 -0
- package/src/render/areaShadowSet.ts +405 -0
- package/src/render/atmosphere.ts +186 -0
- package/src/render/backend/api.ts +802 -0
- package/src/render/backend/budget.ts +139 -0
- package/src/render/backend/createRenderer.ts +343 -0
- package/src/render/backend/deadline.ts +37 -0
- package/src/render/backend/probe.ts +152 -0
- package/src/render/backend/select.ts +288 -0
- package/src/render/backend/timer.ts +59 -0
- package/src/render/backend/webgl2/instanced.ts +46 -0
- package/src/render/backend/webgl2/morphTexture.ts +58 -0
- package/src/render/backend/webgl2/renderer.ts +7484 -0
- package/src/render/backend/webgl2/skinPaletteTexture.ts +70 -0
- package/src/render/backend/webgpu/boltPass.ts +205 -0
- package/src/render/backend/webgpu/buffers.ts +553 -0
- package/src/render/backend/webgpu/causticsPass.ts +174 -0
- package/src/render/backend/webgpu/clusterBinner.ts +259 -0
- package/src/render/backend/webgpu/depthPass.ts +261 -0
- package/src/render/backend/webgpu/device.ts +148 -0
- package/src/render/backend/webgpu/drawCommand.ts +79 -0
- package/src/render/backend/webgpu/environmentTexels.ts +96 -0
- package/src/render/backend/webgpu/filmPass.ts +123 -0
- package/src/render/backend/webgpu/flatPass.ts +635 -0
- package/src/render/backend/webgpu/flockPass.ts +163 -0
- package/src/render/backend/webgpu/gpuTimestamps.ts +255 -0
- package/src/render/backend/webgpu/insetPass.ts +123 -0
- package/src/render/backend/webgpu/instanced.ts +55 -0
- package/src/render/backend/webgpu/lightVolumePass.ts +203 -0
- package/src/render/backend/webgpu/linePass.ts +270 -0
- package/src/render/backend/webgpu/morphTexture.ts +61 -0
- package/src/render/backend/webgpu/panelPass.ts +138 -0
- package/src/render/backend/webgpu/particlePass.ts +370 -0
- package/src/render/backend/webgpu/pipelineCache.ts +152 -0
- package/src/render/backend/webgpu/plumePass.ts +292 -0
- package/src/render/backend/webgpu/pointShadowPass.ts +368 -0
- package/src/render/backend/webgpu/postPass.ts +470 -0
- package/src/render/backend/webgpu/probePass.ts +218 -0
- package/src/render/backend/webgpu/reflectionPass.ts +137 -0
- package/src/render/backend/webgpu/renderer.ts +13004 -0
- package/src/render/backend/webgpu/scatterPass.ts +354 -0
- package/src/render/backend/webgpu/sdfTextPass.ts +220 -0
- package/src/render/backend/webgpu/shaderModules.ts +49 -0
- package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +219 -0
- package/src/render/backend/webgpu/skinPaletteRing.ts +105 -0
- package/src/render/backend/webgpu/skinPaletteTexture.ts +79 -0
- package/src/render/backend/webgpu/skyPass.ts +85 -0
- package/src/render/backend/webgpu/surfaceTexturePass.ts +257 -0
- package/src/render/backend/webgpu/textPass.ts +224 -0
- package/src/render/backend/webgpu/uniformRing.ts +228 -0
- package/src/render/backend/webgpu/waterPass.ts +211 -0
- package/src/render/backend/webgpu/windStreakPass.ts +196 -0
- package/src/render/billboard.ts +108 -0
- package/src/render/bloomChain.ts +101 -0
- package/src/render/bloomPass.ts +256 -0
- package/src/render/boltBatch.ts +141 -0
- package/src/render/boltPool.ts +360 -0
- package/src/render/boom.ts +123 -0
- package/src/render/camera.ts +348 -0
- package/src/render/causticsRenderer.ts +171 -0
- package/src/render/cinematicCamera.ts +278 -0
- package/src/render/clusteredLights.ts +598 -0
- package/src/render/colourGrade.ts +109 -0
- package/src/render/compute.ts +83 -0
- package/src/render/contextLoss.ts +50 -0
- package/src/render/debugLines.ts +411 -0
- package/src/render/decalPass.ts +124 -0
- package/src/render/decalProjector.ts +390 -0
- package/src/render/decalQueue.ts +110 -0
- package/src/render/depthConvention.ts +383 -0
- package/src/render/drawingBuffer.ts +89 -0
- package/src/render/emptyTexture.ts +130 -0
- package/src/render/envProbeArray.ts +201 -0
- package/src/render/equirectToCube.ts +160 -0
- package/src/render/flockGeometry.ts +53 -0
- package/src/render/flockRenderer.ts +111 -0
- package/src/render/frame/arena.ts +93 -0
- package/src/render/frame/index.ts +29 -0
- package/src/render/frame/replay.ts +50 -0
- package/src/render/frame/resources.ts +61 -0
- package/src/render/frame/schedule.ts +85 -0
- package/src/render/frameView.ts +20 -0
- package/src/render/gizmo.ts +923 -0
- package/src/render/globalMedium.ts +154 -0
- package/src/render/globalMediumPass.ts +323 -0
- package/src/render/gpuCapability.ts +244 -0
- package/src/render/gpuTimer.ts +182 -0
- package/src/render/halfFloat.ts +39 -0
- package/src/render/handleRegistry.ts +96 -0
- package/src/render/iesProfile.ts +215 -0
- package/src/render/imageTexels.ts +109 -0
- package/src/render/instancedMesh.ts +187 -0
- package/src/render/instances.ts +92 -0
- package/src/render/lightBudget.ts +655 -0
- package/src/render/lightMatrix.ts +69 -0
- package/src/render/lightVolumeDraw.ts +216 -0
- package/src/render/lineBatch.ts +180 -0
- package/src/render/linePoints.ts +61 -0
- package/src/render/livePointShadowSet.ts +285 -0
- package/src/render/lod.ts +86 -0
- package/src/render/mesh.ts +536 -0
- package/src/render/occlusion.ts +406 -0
- package/src/render/oitPass.ts +230 -0
- package/src/render/orderIndependent.ts +136 -0
- package/src/render/particleBatch.ts +299 -0
- package/src/render/particleMaterial.ts +84 -0
- package/src/render/particlePool.ts +291 -0
- package/src/render/pass.ts +203 -0
- package/src/render/passTarget.ts +225 -0
- package/src/render/pickable.ts +222 -0
- package/src/render/planarReflection.ts +233 -0
- package/src/render/planarReflectionDraw.ts +87 -0
- package/src/render/plumeGeometry.ts +75 -0
- package/src/render/plumeMaterial.ts +99 -0
- package/src/render/plumeRenderer.ts +272 -0
- package/src/render/pointLightSelection.ts +447 -0
- package/src/render/pointShadowArray.ts +276 -0
- package/src/render/pointShadowBudget.ts +305 -0
- package/src/render/pointShadowImage.ts +470 -0
- package/src/render/pointShadowMap.ts +228 -0
- package/src/render/pointShadowSystem.ts +408 -0
- package/src/render/prefilterEnvMap.ts +162 -0
- package/src/render/prefilterPass.ts +115 -0
- package/src/render/probeGrid.ts +248 -0
- package/src/render/rainField.ts +240 -0
- package/src/render/reflectionProbe.ts +530 -0
- package/src/render/renderQuality.ts +1054 -0
- package/src/render/rendererHarness.ts +214 -0
- package/src/render/resolutionGovernor.ts +189 -0
- package/src/render/scatterDeform.ts +72 -0
- package/src/render/sceneTarget.ts +1032 -0
- package/src/render/screenSpaceReflection.ts +524 -0
- package/src/render/sdfFont.ts +157 -0
- package/src/render/sdfTextLayout.ts +206 -0
- package/src/render/sdfTextRenderer.ts +233 -0
- package/src/render/seaState.ts +55 -0
- package/src/render/segmentQuads.ts +92 -0
- package/src/render/shader.ts +190 -0
- package/src/render/shaders/ambientOcclusion.ts +354 -0
- package/src/render/shaders/arcane.ts +103 -0
- package/src/render/shaders/bloom.ts +232 -0
- package/src/render/shaders/bolt.ts +164 -0
- package/src/render/shaders/caustics.ts +169 -0
- package/src/render/shaders/conditionals.ts +58 -0
- package/src/render/shaders/decalProject.ts +127 -0
- package/src/render/shaders/depth.ts +131 -0
- package/src/render/shaders/depthOfField.ts +141 -0
- package/src/render/shaders/film.ts +285 -0
- package/src/render/shaders/fire.ts +180 -0
- package/src/render/shaders/flat/directionalShadow.ts +196 -0
- package/src/render/shaders/flat/index.ts +502 -0
- package/src/render/shaders/flat/lobes.ts +399 -0
- package/src/render/shaders/flat/main.ts +1631 -0
- package/src/render/shaders/flat/pointShadow.ts +323 -0
- package/src/render/shaders/flat/preamble.ts +875 -0
- package/src/render/shaders/flat/probeGrid.ts +152 -0
- package/src/render/shaders/flat/surface.ts +41 -0
- package/src/render/shaders/flock.ts +103 -0
- package/src/render/shaders/fog.ts +99 -0
- package/src/render/shaders/fullscreen.ts +28 -0
- package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +74 -0
- package/src/render/shaders/generated/arcane.wgsl.ts +98 -0
- package/src/render/shaders/generated/bloom.wgsl.ts +79 -0
- package/src/render/shaders/generated/bolt.wgsl.ts +127 -0
- package/src/render/shaders/generated/caustics.wgsl.ts +127 -0
- package/src/render/shaders/generated/decalProject.wgsl.ts +69 -0
- package/src/render/shaders/generated/depth.wgsl.ts +142 -0
- package/src/render/shaders/generated/film.wgsl.ts +143 -0
- package/src/render/shaders/generated/fire.wgsl.ts +137 -0
- package/src/render/shaders/generated/flat.wgsl.ts +9195 -0
- package/src/render/shaders/generated/flock.wgsl.ts +82 -0
- package/src/render/shaders/generated/fullscreen.wgsl.ts +20 -0
- package/src/render/shaders/generated/globalMedium.wgsl.ts +139 -0
- package/src/render/shaders/generated/lightVolume.wgsl.ts +242 -0
- package/src/render/shaders/generated/line.wgsl.ts +137 -0
- package/src/render/shaders/generated/octahedralResolve.wgsl.ts +60 -0
- package/src/render/shaders/generated/oitResolve.wgsl.ts +31 -0
- package/src/render/shaders/generated/panel.wgsl.ts +57 -0
- package/src/render/shaders/generated/particle.wgsl.ts +343 -0
- package/src/render/shaders/generated/prefilter.wgsl.ts +69 -0
- package/src/render/shaders/generated/rush.wgsl.ts +139 -0
- package/src/render/shaders/generated/scatter.wgsl.ts +205 -0
- package/src/render/shaders/generated/sdfText.wgsl.ts +78 -0
- package/src/render/shaders/generated/sky.wgsl.ts +109 -0
- package/src/render/shaders/generated/smoke.wgsl.ts +93 -0
- package/src/render/shaders/generated/ssrResolve.wgsl.ts +26 -0
- package/src/render/shaders/generated/ssrTrace.wgsl.ts +94 -0
- package/src/render/shaders/generated/temporalResolve.wgsl.ts +54 -0
- package/src/render/shaders/generated/text.wgsl.ts +107 -0
- package/src/render/shaders/generated/water.wgsl.ts +256 -0
- package/src/render/shaders/generated/windStreaks.wgsl.ts +82 -0
- package/src/render/shaders/gerstner.ts +110 -0
- package/src/render/shaders/globalMedium.ts +396 -0
- package/src/render/shaders/lightVolume.ts +546 -0
- package/src/render/shaders/line.ts +125 -0
- package/src/render/shaders/morph.ts +62 -0
- package/src/render/shaders/octahedral.ts +170 -0
- package/src/render/shaders/octahedralResolve.ts +83 -0
- package/src/render/shaders/oitResolve.ts +42 -0
- package/src/render/shaders/outputTransform.ts +107 -0
- package/src/render/shaders/panel.ts +51 -0
- package/src/render/shaders/particle.ts +438 -0
- package/src/render/shaders/prefilter.ts +278 -0
- package/src/render/shaders/rush.ts +357 -0
- package/src/render/shaders/scatter.ts +211 -0
- package/src/render/shaders/sdfText.ts +68 -0
- package/src/render/shaders/skinning.ts +59 -0
- package/src/render/shaders/sky.ts +243 -0
- package/src/render/shaders/smoke.ts +89 -0
- package/src/render/shaders/ssrResolve.ts +28 -0
- package/src/render/shaders/ssrTrace.ts +233 -0
- package/src/render/shaders/tangentFrame.ts +70 -0
- package/src/render/shaders/temporalResolve.ts +151 -0
- package/src/render/shaders/text.ts +156 -0
- package/src/render/shaders/vertexChannel.ts +71 -0
- package/src/render/shaders/water.ts +356 -0
- package/src/render/shaders/windStreaks.ts +130 -0
- package/src/render/shadowCasters.ts +124 -0
- package/src/render/shadowMap.ts +89 -0
- package/src/render/shotPlacement.ts +266 -0
- package/src/render/skinPalette.ts +157 -0
- package/src/render/ssrPass.ts +241 -0
- package/src/render/surfaceSheet.ts +158 -0
- package/src/render/surfaceTexture.ts +310 -0
- package/src/render/temporalAa.ts +221 -0
- package/src/render/temporalPass.ts +153 -0
- package/src/render/textLayout.ts +239 -0
- package/src/render/textRenderer.ts +201 -0
- package/src/render/thirdPersonCamera.ts +578 -0
- package/src/render/trample.ts +140 -0
- package/src/render/translucentQueue.ts +161 -0
- package/src/render/uniformVectorBudget.ts +246 -0
- package/src/render/uploadStep.ts +14 -0
- package/src/render/vertexDefaults.ts +115 -0
- package/src/render/visibility.ts +56 -0
- package/src/render/waterDraw.ts +167 -0
- package/src/render/waterGrid.ts +180 -0
- package/src/render/waterRenderer.ts +352 -0
- package/src/render/wind.ts +79 -0
- package/src/render/windField.ts +50 -0
- package/src/render/windStreakDraw.ts +131 -0
- package/src/render/windStreakRenderer.ts +130 -0
- package/src/scene/node.ts +336 -0
- package/src/scene/visit.ts +82 -0
- package/src/ui/clipMime.ts +109 -0
- package/src/ui/exportTarget.ts +491 -0
- package/src/ui/frameOverlay.ts +159 -0
- package/src/ui/framePacer.ts +351 -0
- package/src/ui/frameRecorder.ts +333 -0
- package/src/ui/fullscreen.ts +113 -0
- package/src/ui/pixelCursor.ts +99 -0
- package/src/ui/splash.ts +347 -0
- package/src/ui/stillFrame.ts +44 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import { boundsOfPositions, createBounds } from '../../../math/bounds.js';
|
|
2
|
+
import { MorphTexture } from './morphTexture.js';
|
|
3
|
+
import { ABSENT_ATTRIBUTE } from '../../vertexDefaults.js';
|
|
4
|
+
import { UPLOAD_BYTES_PER_STEP } from '../../uploadStep.js';
|
|
5
|
+
import { INSTANCE_STRIDE } from '../../instances.js';
|
|
6
|
+
/**
|
|
7
|
+
* Mesh geometry as WebGPU buffers.
|
|
8
|
+
*
|
|
9
|
+
* The vertex layout mirrors `mesh.ts` exactly, locations included, because both backends
|
|
10
|
+
* draw from shaders generated out of the same GLSL. Renumbering an attribute here would
|
|
11
|
+
* bind normals into the colour slot and produce a picture that is lit, plausible and wrong.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Buffer usage flags, named here rather than read off the `GPUBufferUsage` global.
|
|
15
|
+
*
|
|
16
|
+
* The values are normative in the WebGPU specification, so nothing is being guessed. The
|
|
17
|
+
* global does not exist outside a browser, and depending on it would mean the buffer code
|
|
18
|
+
* could only ever be exercised on a device — which is precisely the code most worth testing
|
|
19
|
+
* without one.
|
|
20
|
+
*/
|
|
21
|
+
const USAGE = {
|
|
22
|
+
COPY_DST: 0x0008,
|
|
23
|
+
INDEX: 0x0010,
|
|
24
|
+
VERTEX: 0x0020,
|
|
25
|
+
UNIFORM: 0x0040,
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Bytes reserved per absent attribute in the constants buffer.
|
|
29
|
+
*
|
|
30
|
+
* Sixteen so a `float32x3` starts aligned, and one slot each rather than all sharing offset
|
|
31
|
+
* zero so a reader can see which zero belongs to which attribute.
|
|
32
|
+
*/
|
|
33
|
+
const CONSTANT_SLOT = 16;
|
|
34
|
+
/**
|
|
35
|
+
* Locations 0–9, matching `ATTR_POSITION` … `ATTR_RELIEF` in `mesh.ts`.
|
|
36
|
+
*
|
|
37
|
+
* **All ten, not the four that a simple mesh supplies.** WebGL2 lets the pipeline ignore an
|
|
38
|
+
* attribute the shader declares but the mesh omits; WebGPU validates the whole vertex state
|
|
39
|
+
* against the shader module and rejects the pipeline outright:
|
|
40
|
+
*
|
|
41
|
+
* Vertex attribute slot 9 used in [flat.vert] is not present in the VertexState
|
|
42
|
+
*
|
|
43
|
+
* Six were listed here first, because six is what `Mesh` names in the obvious place. The
|
|
44
|
+
* shader declares ten, and the four extra are exactly the ones added late enough to be easy
|
|
45
|
+
* to miss: emissive colour, roughness, grain and relief.
|
|
46
|
+
*/
|
|
47
|
+
export const VERTEX_LAYOUT = [
|
|
48
|
+
{ name: 'positions', shaderLocation: 0, format: 'float32x3', components: 3, optional: false },
|
|
49
|
+
{ name: 'normals', shaderLocation: 1, format: 'float32x3', components: 3, optional: false },
|
|
50
|
+
{ name: 'colors', shaderLocation: 2, format: 'float32x3', components: 3, optional: false },
|
|
51
|
+
{ name: 'emissive', shaderLocation: 3, format: 'float32', components: 1, optional: false },
|
|
52
|
+
{ name: 'specular', shaderLocation: 4, format: 'float32', components: 1, optional: true },
|
|
53
|
+
{ name: 'uvs', shaderLocation: 5, format: 'float32x2', components: 2, optional: true },
|
|
54
|
+
{ name: 'emissiveColor', shaderLocation: 6, format: 'float32x3', components: 3, optional: true },
|
|
55
|
+
{ name: 'roughness', shaderLocation: 7, format: 'float32', components: 1, optional: true },
|
|
56
|
+
{ name: 'grain', shaderLocation: 8, format: 'float32', components: 1, optional: true },
|
|
57
|
+
{ name: 'relief', shaderLocation: 9, format: 'float32', components: 1, optional: true },
|
|
58
|
+
/* Four components, which makes it the widest the layout carries. See `generateTangents`. */
|
|
59
|
+
{ name: 'tangents', shaderLocation: 10, format: 'float32x4', components: 4, optional: true },
|
|
60
|
+
/*
|
|
61
|
+
* Skinning, at the two locations after the tangent. Thirteen of WebGL2's guaranteed sixteen are
|
|
62
|
+
* now spoken for, which is the budget worth knowing before a fourteenth is proposed.
|
|
63
|
+
*
|
|
64
|
+
* **An instanced pipeline takes these two back**, and the channel below with them, because it
|
|
65
|
+
* cannot skin and cannot bend — see `INSTANCE_ATTRIBUTES`, which is the list of what it reclaims.
|
|
66
|
+
* That is the whole of the remaining budget: eleven base attributes plus five per-instance is
|
|
67
|
+
* exactly sixteen, and there is no room for a fourteenth base attribute and instancing at the
|
|
68
|
+
* same time. The channel below is that fourteenth attribute, and it is refused on an instanced
|
|
69
|
+
* draw for exactly this arithmetic.
|
|
70
|
+
*/
|
|
71
|
+
{ name: 'joints', shaderLocation: 11, format: 'float32x4', components: 4, optional: true },
|
|
72
|
+
{ name: 'weights', shaderLocation: 12, format: 'float32x4', components: 4, optional: true },
|
|
73
|
+
/*
|
|
74
|
+
* The four-lane per-vertex channel: sway, skyDirect, alpha, and one reserved.
|
|
75
|
+
*
|
|
76
|
+
* **Fourteen of WebGL2's guaranteed sixteen are now spoken for, and this is the attribute that
|
|
77
|
+
* made the budget bite.** Eleven base attributes plus five per-instance is exactly sixteen, so
|
|
78
|
+
* an instanced draw has nothing to spare and a mesh carrying this cannot be drawn through that
|
|
79
|
+
* path — `flatVert` refuses the pair rather than dropping the attribute silently.
|
|
80
|
+
*
|
|
81
|
+
* Four components for the price of the one location a `float` would have cost, which is why
|
|
82
|
+
* three lanes and a spare live here instead of three attributes that do not fit.
|
|
83
|
+
*/
|
|
84
|
+
{ name: 'channel', shaderLocation: 13, format: 'float32x4', components: 4, optional: true },
|
|
85
|
+
];
|
|
86
|
+
/**
|
|
87
|
+
* Upload a mesh, all of it, now.
|
|
88
|
+
*
|
|
89
|
+
* The whole of `createGpuMeshIncremental` driven to the end in one call — deliberately, so the
|
|
90
|
+
* two paths cannot write different bytes. The one that spreads the work is the one with the
|
|
91
|
+
* interesting decisions in it; read that.
|
|
92
|
+
*/
|
|
93
|
+
export function createGpuMesh(device, data, dynamic = false) {
|
|
94
|
+
const { mesh, upload } = createGpuMeshIncremental(device, data, dynamic);
|
|
95
|
+
while (upload.next().done !== true)
|
|
96
|
+
;
|
|
97
|
+
return mesh;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Upload a mesh over as many frames as the caller gives it.
|
|
101
|
+
*
|
|
102
|
+
* **The absent-attribute trick is the interesting part.** WebGL2 lets an attribute be
|
|
103
|
+
* *disabled* and read a constant the driver supplies, which is why `mesh.ts` can leave
|
|
104
|
+
* `specular` and `uvs` off entirely and a world with no shiny or textured geometry uploads
|
|
105
|
+
* nothing for them. WebGPU has no disabled attribute: every location in a vertex layout must
|
|
106
|
+
* be backed by a buffer.
|
|
107
|
+
*
|
|
108
|
+
* `arrayStride: 0` is the equivalent and it is exact. A stride of zero means every vertex
|
|
109
|
+
* reads element zero, so a one-element buffer of zeroes serves a mesh of any size. Eight
|
|
110
|
+
* bytes, allocated per mesh that omits the attribute, and **no shader variant** — which is
|
|
111
|
+
* what keeps both backends drawing from one generated set of WGSL instead of two.
|
|
112
|
+
*
|
|
113
|
+
* **Why the work is divisible here and not on the other backend.** This one interleaves every
|
|
114
|
+
* vertex on the CPU into a new array before it writes anything, where `mesh.ts` skips the
|
|
115
|
+
* interleave in favour of three tight buffers and says so in its first line. So the cost is
|
|
116
|
+
* WebGPU's alone and proportional to geometry, which is why a consumer measured the same drive
|
|
117
|
+
* as smooth on WebGL2 and hitching here.
|
|
118
|
+
*
|
|
119
|
+
* **What is paid at creation and not spread:** validation, the bounds, the allocation of the
|
|
120
|
+
* interleave array, the three buffers, and the constants. The bounds are the deliberate one — a
|
|
121
|
+
* streamer places and culls a region from them before a byte of it has landed, so a handle whose
|
|
122
|
+
* bounds were not yet known would not be usable at once, which is the whole promise here.
|
|
123
|
+
*/
|
|
124
|
+
export function createGpuMeshIncremental(device, data, dynamic = false) {
|
|
125
|
+
const bounds = boundsOfPositions(data.positions, createBounds());
|
|
126
|
+
const vertexCount = data.positions.length / 3;
|
|
127
|
+
const supplied = VERTEX_LAYOUT.filter((attribute) => !attribute.optional || data[attribute.name] !== undefined);
|
|
128
|
+
/* Interleaved: one stride holding every attribute the mesh actually supplied. */
|
|
129
|
+
const stride = supplied.reduce((sum, attribute) => sum + attribute.components * 4, 0);
|
|
130
|
+
const step = stride / 4;
|
|
131
|
+
const interleaved = new Float32Array(step * vertexCount);
|
|
132
|
+
/*
|
|
133
|
+
* **Refused here, in one sentence, rather than by the driver a hundred times.**
|
|
134
|
+
*
|
|
135
|
+
* A buffer past `maxBufferSize` is not created; what comes back is an invalid buffer, and
|
|
136
|
+
* every command encoder that so much as binds it is invalidated too. The result is the
|
|
137
|
+
* console reported from outside: one line naming the real cause, then a hundred and
|
|
138
|
+
* twenty-five repeats of *"is invalid due to a previous error"* from the shadow pass and the
|
|
139
|
+
* frame, with the actual number buried at the top and the model simply missing.
|
|
140
|
+
*
|
|
141
|
+
* `select.ts` asks for the adapter's own ceiling, which is 4 GiB on the part this was measured
|
|
142
|
+
* on against a 256 MiB default, so the models that hit this now load. What is left is the part
|
|
143
|
+
* whose adapter caps at the default, and it deserves a sentence naming the model's size and
|
|
144
|
+
* the device's rather than a wall of validation.
|
|
145
|
+
*/
|
|
146
|
+
const byteLength = align4(interleaved.byteLength);
|
|
147
|
+
const ceiling = device.limits.maxBufferSize;
|
|
148
|
+
if (typeof ceiling === 'number' && byteLength > ceiling) {
|
|
149
|
+
throw new Error(`this mesh needs a ${Math.round(byteLength / 1024 / 1024)} MB vertex buffer and this GPU ` +
|
|
150
|
+
`allows ${Math.round(ceiling / 1024 / 1024)} MB, so it cannot be drawn. A model this ` +
|
|
151
|
+
'large has to be split or simplified before it is baked.');
|
|
152
|
+
}
|
|
153
|
+
const vertices = device.createBuffer({
|
|
154
|
+
label: 'mesh.vertices',
|
|
155
|
+
size: byteLength,
|
|
156
|
+
usage: USAGE.VERTEX | USAGE.COPY_DST,
|
|
157
|
+
});
|
|
158
|
+
/*
|
|
159
|
+
* One buffer holding what each omitted attribute reads as, at its own offset and read with a
|
|
160
|
+
* stride of zero. Ninety-six bytes at most, whatever the mesh's size, so it is written now
|
|
161
|
+
* rather than spread.
|
|
162
|
+
*
|
|
163
|
+
* **The values come from `vertexDefaults.ts` and are not all zero.** They were zeroes here,
|
|
164
|
+
* against the constants `mesh.ts` hands WebGL2, and `emissiveColor` is the one that bit:
|
|
165
|
+
* `flat.ts` treats a negative red as "inherit the albedo", so a zero meant *glow black* and
|
|
166
|
+
* every emissive surface whose mesh omitted the attribute stopped emitting on this backend.
|
|
167
|
+
*/
|
|
168
|
+
const constants = device.createBuffer({
|
|
169
|
+
label: 'mesh.constants',
|
|
170
|
+
size: CONSTANT_SLOT * VERTEX_LAYOUT.length,
|
|
171
|
+
usage: USAGE.VERTEX | USAGE.COPY_DST,
|
|
172
|
+
});
|
|
173
|
+
const absent = new Float32Array((CONSTANT_SLOT / 4) * VERTEX_LAYOUT.length);
|
|
174
|
+
for (let slot = 0; slot < VERTEX_LAYOUT.length; slot++) {
|
|
175
|
+
const attribute = VERTEX_LAYOUT[slot];
|
|
176
|
+
const value = ABSENT_ATTRIBUTE[attribute.name];
|
|
177
|
+
if (value === undefined)
|
|
178
|
+
continue;
|
|
179
|
+
absent.set(value, slot * (CONSTANT_SLOT / 4));
|
|
180
|
+
}
|
|
181
|
+
device.queue.writeBuffer(constants, 0, absent);
|
|
182
|
+
const indexBuffer = device.createBuffer({
|
|
183
|
+
label: 'mesh.indices',
|
|
184
|
+
size: align4(data.indices.byteLength),
|
|
185
|
+
usage: USAGE.INDEX | USAGE.COPY_DST,
|
|
186
|
+
});
|
|
187
|
+
/*
|
|
188
|
+
* Where the position and normal fields sit inside one vertex, in floats. Found from the same
|
|
189
|
+
* `supplied` list the interleave walks, so the two cannot disagree — reading them off
|
|
190
|
+
* `VERTEX_LAYOUT` instead would be right until a mesh omits an optional attribute before them,
|
|
191
|
+
* which is the bug `present` already records once in this file.
|
|
192
|
+
*/
|
|
193
|
+
let positionField = -1;
|
|
194
|
+
let normalField = -1;
|
|
195
|
+
let walked = 0;
|
|
196
|
+
for (const attribute of supplied) {
|
|
197
|
+
if (attribute.name === 'positions')
|
|
198
|
+
positionField = walked;
|
|
199
|
+
if (attribute.name === 'normals')
|
|
200
|
+
normalField = walked;
|
|
201
|
+
walked += attribute.components;
|
|
202
|
+
}
|
|
203
|
+
/*
|
|
204
|
+
* The chunks, in whole vertices and whole indices: a step never writes half of either, so the
|
|
205
|
+
* buffer never holds a torn one even for the frame between two steps.
|
|
206
|
+
*/
|
|
207
|
+
const verticesPerStep = Math.max(1, Math.floor(UPLOAD_BYTES_PER_STEP / stride));
|
|
208
|
+
const indexWidth = data.indices.BYTES_PER_ELEMENT;
|
|
209
|
+
const indicesPerStep = Math.max(1, Math.floor(UPLOAD_BYTES_PER_STEP / indexWidth));
|
|
210
|
+
const totalSteps = Math.max(1, Math.ceil(vertexCount / verticesPerStep)) +
|
|
211
|
+
Math.max(1, Math.ceil(data.indices.length / indicesPerStep));
|
|
212
|
+
let uploaded = false;
|
|
213
|
+
function* uploadSteps() {
|
|
214
|
+
let taken = 0;
|
|
215
|
+
for (let from = 0; from < vertexCount; from += verticesPerStep) {
|
|
216
|
+
const to = Math.min(from + verticesPerStep, vertexCount);
|
|
217
|
+
let fieldOffset = 0;
|
|
218
|
+
for (const attribute of supplied) {
|
|
219
|
+
const source = data[attribute.name];
|
|
220
|
+
const width = attribute.components;
|
|
221
|
+
for (let vertex = from; vertex < to; vertex++) {
|
|
222
|
+
for (let component = 0; component < width; component++) {
|
|
223
|
+
interleaved[vertex * step + fieldOffset + component] =
|
|
224
|
+
source[vertex * width + component] ?? 0;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
fieldOffset += width;
|
|
228
|
+
}
|
|
229
|
+
device.queue.writeBuffer(vertices, from * stride, interleaved, from * step, (to - from) * step);
|
|
230
|
+
taken += 1;
|
|
231
|
+
if (taken < totalSteps)
|
|
232
|
+
yield;
|
|
233
|
+
}
|
|
234
|
+
for (let from = 0; from < data.indices.length; from += indicesPerStep) {
|
|
235
|
+
const to = Math.min(from + indicesPerStep, data.indices.length);
|
|
236
|
+
device.queue.writeBuffer(indexBuffer, from * indexWidth, data.indices, from, to - from);
|
|
237
|
+
taken += 1;
|
|
238
|
+
if (taken < totalSteps)
|
|
239
|
+
yield;
|
|
240
|
+
}
|
|
241
|
+
uploaded = true;
|
|
242
|
+
}
|
|
243
|
+
const mesh = {
|
|
244
|
+
vertexBuffers: [vertices, constants],
|
|
245
|
+
indexBuffer,
|
|
246
|
+
indexCount: data.indices.length,
|
|
247
|
+
bounds,
|
|
248
|
+
get complete() {
|
|
249
|
+
return uploaded;
|
|
250
|
+
},
|
|
251
|
+
hasTangents: data.tangents !== undefined,
|
|
252
|
+
isSkinned: data.joints !== undefined,
|
|
253
|
+
hasChannel: data.channel !== undefined,
|
|
254
|
+
morph: data.morphTargets === undefined || data.morphTargetCount === undefined
|
|
255
|
+
? null
|
|
256
|
+
: new MorphTexture(device, data.morphTargets, data.positions.length / 3, data.morphTargetCount),
|
|
257
|
+
update: !dynamic
|
|
258
|
+
? null
|
|
259
|
+
: (target, positions, normals) => {
|
|
260
|
+
if (positions.length !== vertexCount * 3) {
|
|
261
|
+
throw new Error(`this mesh has ${vertexCount} vertices and the update has ${positions.length / 3}. ` +
|
|
262
|
+
"A mesh's vertex count is fixed at creation: the index buffer, the pipeline and " +
|
|
263
|
+
'every other attribute are sized against it.');
|
|
264
|
+
}
|
|
265
|
+
/* Everything that decides whether this is on screen starts from the bounds, so a cloth
|
|
266
|
+
that blew sideways out of its original box would be culled while still visible. */
|
|
267
|
+
boundsOfPositions(positions, bounds);
|
|
268
|
+
for (let vertex = 0; vertex < vertexCount; vertex++) {
|
|
269
|
+
const at = vertex * step;
|
|
270
|
+
interleaved[at + positionField] = positions[vertex * 3] ?? 0;
|
|
271
|
+
interleaved[at + positionField + 1] = positions[vertex * 3 + 1] ?? 0;
|
|
272
|
+
interleaved[at + positionField + 2] = positions[vertex * 3 + 2] ?? 0;
|
|
273
|
+
if (normals === undefined)
|
|
274
|
+
continue;
|
|
275
|
+
interleaved[at + normalField] = normals[vertex * 3] ?? 0;
|
|
276
|
+
interleaved[at + normalField + 1] = normals[vertex * 3 + 1] ?? 0;
|
|
277
|
+
interleaved[at + normalField + 2] = normals[vertex * 3 + 2] ?? 0;
|
|
278
|
+
}
|
|
279
|
+
target.queue.writeBuffer(vertices, 0, interleaved);
|
|
280
|
+
},
|
|
281
|
+
dispose() {
|
|
282
|
+
vertices.destroy();
|
|
283
|
+
constants.destroy();
|
|
284
|
+
indexBuffer.destroy();
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
return { mesh, upload: uploadSteps() };
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* The buffer layouts a pipeline is built with, matching what `createGpuMesh` uploaded.
|
|
291
|
+
*
|
|
292
|
+
* `present` says which optional attributes came from real data. An absent one gets a stride
|
|
293
|
+
* of zero so every vertex reads the single element written for it.
|
|
294
|
+
*/
|
|
295
|
+
/**
|
|
296
|
+
* The per-instance buffer's five attributes: four matrix columns and a tint.
|
|
297
|
+
*
|
|
298
|
+
* **One list, because it answers two questions that must not disagree** — which locations the
|
|
299
|
+
* instance buffer declares, and therefore which locations a base attribute may not also declare.
|
|
300
|
+
* They were two lists: this one, and a `shaderLocation === 11 || shaderLocation === 12` test a few
|
|
301
|
+
* lines below it. That is what shipped a duplicate location 13 the day the per-vertex channel took
|
|
302
|
+
* it — every instanced pipeline, in the colour pass and the shadow pass alike, rejected with
|
|
303
|
+
* *"attribute shader location (13) is used more than once"*, which surfaces as an invalid command
|
|
304
|
+
* buffer two calls later rather than as anything about attributes.
|
|
305
|
+
*
|
|
306
|
+
* `INSTANCE_STRIDE` and the offsets are shared with the other backend through `instances.ts`,
|
|
307
|
+
* because which floats go where is a decision rather than a binding.
|
|
308
|
+
*/
|
|
309
|
+
const INSTANCE_ATTRIBUTES = [
|
|
310
|
+
{ shaderLocation: 11, offset: 0, format: 'float32x4' },
|
|
311
|
+
{ shaderLocation: 12, offset: 16, format: 'float32x4' },
|
|
312
|
+
{ shaderLocation: 13, offset: 32, format: 'float32x4' },
|
|
313
|
+
{ shaderLocation: 14, offset: 48, format: 'float32x4' },
|
|
314
|
+
{ shaderLocation: 15, offset: 64, format: 'float32x3' },
|
|
315
|
+
];
|
|
316
|
+
/** The locations above, as the set the base layout must stand clear of on an instanced draw. */
|
|
317
|
+
const INSTANCE_LOCATIONS = new Set(INSTANCE_ATTRIBUTES.map((attribute) => attribute.shaderLocation));
|
|
318
|
+
export function vertexBufferLayouts(present,
|
|
319
|
+
/**
|
|
320
|
+
* Whether a third buffer carries one placement and colour per instance.
|
|
321
|
+
*
|
|
322
|
+
* Appended rather than woven in, at `stepMode: 'instance'`, so an instanced pipeline binds the
|
|
323
|
+
* mesh's own two buffers unchanged and its batch's third. The flat pipeline binds two of a
|
|
324
|
+
* limit of eight, so there is room, and a mesh needs no second upload to be instanced.
|
|
325
|
+
*/
|
|
326
|
+
instanced = false) {
|
|
327
|
+
const interleaved = [];
|
|
328
|
+
const constants = [];
|
|
329
|
+
let offset = 0;
|
|
330
|
+
VERTEX_LAYOUT.forEach((attribute, index) => {
|
|
331
|
+
/*
|
|
332
|
+
* **The instanced pipeline reclaims the two skinning locations, and it is allowed to because
|
|
333
|
+
* it cannot skin.** Locations 11 and 12 are the joint indices and weights; the INSTANCED
|
|
334
|
+
* shader variant declares neither, and the flat pass refuses a variant that is both. Leaving
|
|
335
|
+
* them declared here is what the device rejected — *"attribute shader location (11) is used
|
|
336
|
+
* more than once"*, reported at pipeline creation and surfacing as an invalid command buffer
|
|
337
|
+
* two calls later.
|
|
338
|
+
*
|
|
339
|
+
* Free for any mesh that may legitimately be instanced: an unskinned mesh supplies neither,
|
|
340
|
+
* so both sit in the constants buffer at `arrayStride: 0` and dropping them moves no offset
|
|
341
|
+
* in the interleaved one. A *skinned* mesh interleaves them, so removing them would shift
|
|
342
|
+
* the stride under every other attribute — which is why `createInstanced` refuses one.
|
|
343
|
+
*/
|
|
344
|
+
const supplied = !attribute.optional || present[String(attribute.name)] === true;
|
|
345
|
+
if (instanced && INSTANCE_LOCATIONS.has(attribute.shaderLocation)) {
|
|
346
|
+
/*
|
|
347
|
+
* **Free to drop only because the mesh does not supply it.** An absent optional attribute
|
|
348
|
+
* sits in the constants buffer at `arrayStride: 0`, so removing it moves no offset in the
|
|
349
|
+
* interleaved one. A *supplied* one is interleaved, and dropping that would shift the stride
|
|
350
|
+
* under every attribute after it and draw scrambled geometry — which is why `createInstanced`
|
|
351
|
+
* refuses a skinned mesh and a channelled one. This is the same refusal one level down,
|
|
352
|
+
* where it cannot be reached around: a caller that finds another way to an instanced layout
|
|
353
|
+
* gets an error rather than a picture.
|
|
354
|
+
*/
|
|
355
|
+
if (supplied) {
|
|
356
|
+
throw new Error(`vertexBufferLayouts: an instanced pipeline claims attribute location ` +
|
|
357
|
+
`${attribute.shaderLocation} for its per-instance buffer, and this mesh supplies ` +
|
|
358
|
+
`"${String(attribute.name)}" there. Dropping a supplied attribute would shift the ` +
|
|
359
|
+
`stride under every attribute after it — draw this mesh without instancing instead.`);
|
|
360
|
+
}
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (supplied) {
|
|
364
|
+
interleaved.push({
|
|
365
|
+
shaderLocation: attribute.shaderLocation,
|
|
366
|
+
offset,
|
|
367
|
+
format: attribute.format,
|
|
368
|
+
});
|
|
369
|
+
offset += attribute.components * 4;
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
constants.push({
|
|
373
|
+
shaderLocation: attribute.shaderLocation,
|
|
374
|
+
offset: index * CONSTANT_SLOT,
|
|
375
|
+
format: attribute.format,
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
const layouts = [{ arrayStride: offset, attributes: interleaved }];
|
|
379
|
+
/*
|
|
380
|
+
* The constants buffer is always bound, even with nothing in it: the pipeline layout has
|
|
381
|
+
* to match the buffers a draw sets, and a mesh supplying every attribute would otherwise
|
|
382
|
+
* need a different layout from one that does not.
|
|
383
|
+
*/
|
|
384
|
+
layouts.push({ arrayStride: 0, attributes: constants });
|
|
385
|
+
/*
|
|
386
|
+
* The four matrix columns and the tint — the five the flat shader's INSTANCED variant declares
|
|
387
|
+
* and exactly the five left once the base mesh has spent eleven of WebGL2's guaranteed sixteen.
|
|
388
|
+
* See `INSTANCE_ATTRIBUTES`, which the filter above reads too.
|
|
389
|
+
*/
|
|
390
|
+
if (instanced) {
|
|
391
|
+
layouts.push({
|
|
392
|
+
arrayStride: INSTANCE_STRIDE,
|
|
393
|
+
stepMode: 'instance',
|
|
394
|
+
attributes: INSTANCE_ATTRIBUTES,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
return layouts;
|
|
398
|
+
}
|
|
399
|
+
/** WebGPU requires a buffer size that is a multiple of four. */
|
|
400
|
+
function align4(bytes) {
|
|
401
|
+
return Math.max(4, Math.ceil(bytes / 4) * 4);
|
|
402
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { UniformFields } from './scatterPass.ts';
|
|
2
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The caustics pass: a surface lit by nearby water.
|
|
5
|
+
*
|
|
6
|
+
* `causticsRenderer.ts` carries the argument for the feature and for its limits, including why
|
|
7
|
+
* the ambient term is not decoration and why either side of the water works. The geometry comes
|
|
8
|
+
* from `buildSheets`, which both backends call, so this owns three buffers and a pipeline.
|
|
9
|
+
*/
|
|
10
|
+
export declare const CAUSTICS_VERT_FIELDS: UniformFields;
|
|
11
|
+
export declare const CAUSTICS_VERT_SIZE: 64;
|
|
12
|
+
export declare const CAUSTICS_FRAG_FIELDS: UniformFields;
|
|
13
|
+
export declare const CAUSTICS_FRAG_SIZE: 144;
|
|
14
|
+
/** A lit surface on the device, behind the API's opaque handle. */
|
|
15
|
+
export interface GpuCaustics {
|
|
16
|
+
readonly vertexBuffers: readonly GPUBuffer[];
|
|
17
|
+
readonly vertexCount: number;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
}
|
|
20
|
+
export declare function createGpuCaustics(device: GPUDevice, positions: Float32Array, locals: Float32Array, params: Float32Array, vertexCount: number): GpuCaustics;
|
|
21
|
+
/** `aRest`, `aLocal`, `aParams` — three arrays on both sides, so three buffers. */
|
|
22
|
+
export declare function causticsVertexLayouts(): GPUVertexBufferLayout[];
|
|
23
|
+
export declare function createCausticsBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
|
|
24
|
+
export declare function createCausticsBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer): GPUBindGroup;
|
|
25
|
+
/**
|
|
26
|
+
* The pipeline.
|
|
27
|
+
*
|
|
28
|
+
* **Added, not blended over**, because this is light arriving at a surface rather than the
|
|
29
|
+
* surface: `gl.blendFunc(ONE, ONE)` on the other backend. Nothing culled, because a sheet is
|
|
30
|
+
* seen from either side — a pool floor from above and a soffit from below.
|
|
31
|
+
*
|
|
32
|
+
* **Depth tested and depth not written**, and the test is the part that matters:
|
|
33
|
+
* `causticsRenderer.ts` records that the sheet sits a couple of centimetres under the surface it
|
|
34
|
+
* lights, so geometry in front of it — a character, a lamp, a parapet — still occludes the light.
|
|
35
|
+
*/
|
|
36
|
+
export declare function causticsPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout): GPURenderPipeline;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { CAUSTICS_BINDINGS, CAUSTICS_FRAG_WGSL, CAUSTICS_VERT_WGSL, } from '../../shaders/generated/caustics.wgsl.js';
|
|
3
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
4
|
+
import { shaderModule } from './shaderModules.js';
|
|
5
|
+
/**
|
|
6
|
+
* The caustics pass: a surface lit by nearby water.
|
|
7
|
+
*
|
|
8
|
+
* `causticsRenderer.ts` carries the argument for the feature and for its limits, including why
|
|
9
|
+
* the ambient term is not decoration and why either side of the water works. The geometry comes
|
|
10
|
+
* from `buildSheets`, which both backends call, so this owns three buffers and a pipeline.
|
|
11
|
+
*/
|
|
12
|
+
export const CAUSTICS_VERT_FIELDS = CAUSTICS_BINDINGS.CAUSTICS_VERT.fields;
|
|
13
|
+
export const CAUSTICS_VERT_SIZE = CAUSTICS_BINDINGS.CAUSTICS_VERT.uniformSize;
|
|
14
|
+
export const CAUSTICS_FRAG_FIELDS = CAUSTICS_BINDINGS.CAUSTICS_FRAG.fields;
|
|
15
|
+
export const CAUSTICS_FRAG_SIZE = CAUSTICS_BINDINGS.CAUSTICS_FRAG.uniformSize;
|
|
16
|
+
const VERT_BINDING = CAUSTICS_BINDINGS.CAUSTICS_VERT.uniforms;
|
|
17
|
+
const FRAG_BINDING = CAUSTICS_BINDINGS.CAUSTICS_FRAG.uniforms;
|
|
18
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
19
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
20
|
+
const USAGE_VERTEX = 0x0020 | 0x0008; // VERTEX | COPY_DST
|
|
21
|
+
export function createGpuCaustics(device, positions, locals, params, vertexCount) {
|
|
22
|
+
const upload = (data, label) => {
|
|
23
|
+
const buffer = device.createBuffer({
|
|
24
|
+
label,
|
|
25
|
+
size: Math.max(4, data.byteLength),
|
|
26
|
+
usage: USAGE_VERTEX,
|
|
27
|
+
});
|
|
28
|
+
device.queue.writeBuffer(buffer, 0, data);
|
|
29
|
+
return buffer;
|
|
30
|
+
};
|
|
31
|
+
const buffers = [
|
|
32
|
+
upload(positions, 'caustics.rest'),
|
|
33
|
+
upload(locals, 'caustics.local'),
|
|
34
|
+
upload(params, 'caustics.params'),
|
|
35
|
+
];
|
|
36
|
+
return {
|
|
37
|
+
vertexBuffers: buffers,
|
|
38
|
+
vertexCount,
|
|
39
|
+
dispose() {
|
|
40
|
+
for (const buffer of buffers)
|
|
41
|
+
buffer.destroy();
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** `aRest`, `aLocal`, `aParams` — three arrays on both sides, so three buffers. */
|
|
46
|
+
export function causticsVertexLayouts() {
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
arrayStride: 12,
|
|
50
|
+
attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
arrayStride: 8,
|
|
54
|
+
attributes: [{ shaderLocation: 1, offset: 0, format: 'float32x2' }],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
arrayStride: 8,
|
|
58
|
+
attributes: [{ shaderLocation: 2, offset: 0, format: 'float32x2' }],
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
export function createCausticsBindGroupLayout(device) {
|
|
63
|
+
return device.createBindGroupLayout({
|
|
64
|
+
label: 'caustics.layout',
|
|
65
|
+
entries: [
|
|
66
|
+
/*
|
|
67
|
+
* **Addressed by a dynamic offset, so a frame can draw more than one batch.**
|
|
68
|
+
*
|
|
69
|
+
* With one buffer rewritten between draws, every batch reads whatever was written last:
|
|
70
|
+
* `queue.write*` calls are ordered on the queue timeline and the encoder is submitted after
|
|
71
|
+
* every one of them. The picture is each batch wearing the last one's colour, width, time
|
|
72
|
+
* and placement. That is the hazard `UniformRing` exists for, recorded in `AGENTS.md` on
|
|
73
|
+
* 2026-08-27, and this pass was one of four still carrying it — invisible for as long as
|
|
74
|
+
* nothing drew two, which is exactly how water kept it for eight releases.
|
|
75
|
+
*
|
|
76
|
+
* WebGL2 needs none of this: it sets uniforms and draws in one stream.
|
|
77
|
+
*/
|
|
78
|
+
{
|
|
79
|
+
binding: VERT_BINDING,
|
|
80
|
+
visibility: VISIBILITY_VERTEX,
|
|
81
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: CAUSTICS_VERT_SIZE },
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
binding: FRAG_BINDING,
|
|
85
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
86
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: CAUSTICS_FRAG_SIZE },
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export function createCausticsBindGroup(device, layout, vertices, fragments) {
|
|
92
|
+
return device.createBindGroup({
|
|
93
|
+
label: 'caustics.bindGroup',
|
|
94
|
+
layout,
|
|
95
|
+
entries: [
|
|
96
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: CAUSTICS_VERT_SIZE } },
|
|
97
|
+
{ binding: FRAG_BINDING, resource: { buffer: fragments, size: CAUSTICS_FRAG_SIZE } },
|
|
98
|
+
],
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The pipeline.
|
|
103
|
+
*
|
|
104
|
+
* **Added, not blended over**, because this is light arriving at a surface rather than the
|
|
105
|
+
* surface: `gl.blendFunc(ONE, ONE)` on the other backend. Nothing culled, because a sheet is
|
|
106
|
+
* seen from either side — a pool floor from above and a soffit from below.
|
|
107
|
+
*
|
|
108
|
+
* **Depth tested and depth not written**, and the test is the part that matters:
|
|
109
|
+
* `causticsRenderer.ts` records that the sheet sits a couple of centimetres under the surface it
|
|
110
|
+
* lights, so geometry in front of it — a character, a lamp, a parapet — still occludes the light.
|
|
111
|
+
*/
|
|
112
|
+
export function causticsPipeline(cache, device, layout) {
|
|
113
|
+
return cache.get('caustics', () => ({
|
|
114
|
+
label: 'caustics',
|
|
115
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
116
|
+
vertex: {
|
|
117
|
+
module: shaderModule(device, { label: 'caustics.vert', code: CAUSTICS_VERT_WGSL }),
|
|
118
|
+
entryPoint: 'main',
|
|
119
|
+
buffers: causticsVertexLayouts(),
|
|
120
|
+
},
|
|
121
|
+
fragment: {
|
|
122
|
+
module: shaderModule(device, { label: 'caustics.frag', code: CAUSTICS_FRAG_WGSL }),
|
|
123
|
+
entryPoint: 'main',
|
|
124
|
+
targets: [
|
|
125
|
+
{
|
|
126
|
+
format: cache.format,
|
|
127
|
+
blend: {
|
|
128
|
+
color: { srcFactor: 'one', dstFactor: 'one', operation: 'add' },
|
|
129
|
+
alpha: { srcFactor: 'one', dstFactor: 'one', operation: 'add' },
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
135
|
+
multisample: { count: cache.sampleCount },
|
|
136
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type ClusterLightSet } from '../../clusteredLights.ts';
|
|
2
|
+
import type { ComputeDefinition } from '../../compute.ts';
|
|
3
|
+
/** What the caller sets before each dispatch. Held rather than passed, so `dispatch` allocates none. */
|
|
4
|
+
export interface ClusterBinnerFrame {
|
|
5
|
+
lights: ClusterLightSet;
|
|
6
|
+
/** Column-major, as gl-matrix builds it. */
|
|
7
|
+
view: Float32Array;
|
|
8
|
+
near: number;
|
|
9
|
+
far: number;
|
|
10
|
+
tanHalfFovY: number;
|
|
11
|
+
aspect: number;
|
|
12
|
+
/** How many shadow uniform slots are live. See `LIGHT_TEXELS` in `clusteredLights.ts`. */
|
|
13
|
+
shadowSlots: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class ClusterBinner {
|
|
16
|
+
/** The table the lit pass samples. Written by the dispatch, never by the CPU on this backend. */
|
|
17
|
+
private texture;
|
|
18
|
+
private view;
|
|
19
|
+
private pipeline;
|
|
20
|
+
private group;
|
|
21
|
+
private params;
|
|
22
|
+
private lightBuffer;
|
|
23
|
+
private device;
|
|
24
|
+
/** Staging for the two uploads, allocated once: `dispatch` is a per-frame path. */
|
|
25
|
+
private readonly paramsStaging;
|
|
26
|
+
private readonly paramsFloats;
|
|
27
|
+
private readonly paramsUints;
|
|
28
|
+
private readonly lightStaging;
|
|
29
|
+
private frame;
|
|
30
|
+
/** The table's view, for whoever binds it into the lit pass. Null before `init`. */
|
|
31
|
+
get tableView(): GPUTextureView | null;
|
|
32
|
+
/** The table itself, which a readback needs and the lit pass does not. */
|
|
33
|
+
get tableTexture(): GPUTexture | null;
|
|
34
|
+
/**
|
|
35
|
+
* The device `init` was handed, for a caller that needs to encode a copy of its own.
|
|
36
|
+
*
|
|
37
|
+
* **Exposed rather than fetched from somewhere else**, because there is nowhere else: a
|
|
38
|
+
* `GPUTexture` does not name its device and `createRenderer` does not return one. The seam
|
|
39
|
+
* hands a definition the device precisely so it can do work of its own outside a dispatch, and
|
|
40
|
+
* a readback is that work.
|
|
41
|
+
*/
|
|
42
|
+
get gpuDevice(): GPUDevice | null;
|
|
43
|
+
/** What the next dispatch bins. Set per frame; nothing is copied until `dispatch`. */
|
|
44
|
+
setFrame(frame: ClusterBinnerFrame): void;
|
|
45
|
+
definition(): ComputeDefinition;
|
|
46
|
+
private build;
|
|
47
|
+
private run;
|
|
48
|
+
private release;
|
|
49
|
+
}
|
|
50
|
+
/** The shadow slots a frame has, which is the fixed budget the pool is sized for. */
|
|
51
|
+
export declare const DEFAULT_SHADOW_SLOTS = 16;
|