@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,154 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { LIGHTVOLUME_BINDINGS, LIGHT_VOLUME_FRAG_WGSL, LIGHT_VOLUME_VERT_WGSL, } from '../../shaders/generated/lightVolume.wgsl.js';
|
|
3
|
+
import { vertexBufferLayouts } from './buffers.js';
|
|
4
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
5
|
+
import { shaderModule } from './shaderModules.js';
|
|
6
|
+
export const LIGHT_VOLUME_VERT_FIELDS = LIGHTVOLUME_BINDINGS.LIGHT_VOLUME_VERT.fields;
|
|
7
|
+
export const LIGHT_VOLUME_VERT_SIZE = LIGHTVOLUME_BINDINGS.LIGHT_VOLUME_VERT.uniformSize;
|
|
8
|
+
const VERT_BINDING = LIGHTVOLUME_BINDINGS.LIGHT_VOLUME_VERT.uniforms;
|
|
9
|
+
/*
|
|
10
|
+
* The generated file is `as const`, so indexing it by a computed key is an error until the
|
|
11
|
+
* shape is declared once. Checked against the real object rather than asserted about it, which
|
|
12
|
+
* is what `flatPass.ts` does with the sixteen flat permutations and for the same reason.
|
|
13
|
+
*/
|
|
14
|
+
const FRAGMENT_BINDINGS = LIGHTVOLUME_BINDINGS.lightVolumeFrag;
|
|
15
|
+
/** Everything the generator recorded about one permutation of the fragment stage. */
|
|
16
|
+
export function lightVolumeFragmentBindings(variant) {
|
|
17
|
+
const found = FRAGMENT_BINDINGS[variant];
|
|
18
|
+
if (found === undefined)
|
|
19
|
+
throw new Error(`lightVolumePass: no bindings for variant "${variant}"`);
|
|
20
|
+
return found;
|
|
21
|
+
}
|
|
22
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
23
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
24
|
+
/**
|
|
25
|
+
* The layout this variant binds against. **Both blocks are dynamic.**
|
|
26
|
+
*
|
|
27
|
+
* Unlike the flat pass, where the fragment block holds the lights and the fog and is settled
|
|
28
|
+
* once a frame, every field here belongs to one volume: its strength, its reach, its aperture,
|
|
29
|
+
* its own placement and the camera expressed in its own space. Two beams in a frame have
|
|
30
|
+
* nothing in common to hoist, so both blocks come out of a ring a slot at a time — see
|
|
31
|
+
* `UniformRing` for what a single buffer does to a second draw.
|
|
32
|
+
*/
|
|
33
|
+
export function createLightVolumeBindGroupLayout(device, variant) {
|
|
34
|
+
const fragment = lightVolumeFragmentBindings(variant);
|
|
35
|
+
const entries = [
|
|
36
|
+
{
|
|
37
|
+
binding: VERT_BINDING,
|
|
38
|
+
visibility: VISIBILITY_VERTEX,
|
|
39
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: LIGHT_VOLUME_VERT_SIZE },
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
binding: fragment.uniforms,
|
|
43
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
44
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: fragment.uniformSize },
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
/*
|
|
48
|
+
* Three depth textures, declared `unfilterable-float` beside a `non-filtering` sampler, for
|
|
49
|
+
* the reason `flatPass.ts` gives: a depth format's supported sample types are
|
|
50
|
+
* `UnfilterableFloat | Depth` and never plain `Float`, so an empty `texture: {}` is rejected
|
|
51
|
+
* at bind time. It is also what this shader wants — `sunReach` takes one explicit-level tap
|
|
52
|
+
* per map and asks the hardware to blend nothing.
|
|
53
|
+
*/
|
|
54
|
+
for (const texture of Object.values(fragment.textures)) {
|
|
55
|
+
entries.push({
|
|
56
|
+
binding: texture.texture,
|
|
57
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
58
|
+
texture: { sampleType: 'unfilterable-float' },
|
|
59
|
+
});
|
|
60
|
+
entries.push({
|
|
61
|
+
binding: texture.sampler,
|
|
62
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
63
|
+
sampler: { type: 'non-filtering' },
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return device.createBindGroupLayout({ label: `lightVolume.layout:${variant}`, entries });
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Bind the two rings and one view per declared map.
|
|
70
|
+
*
|
|
71
|
+
* `resolve` is asked by the shader's own name for each map, so the caller supplies what it has
|
|
72
|
+
* and a stand-in for the rest. **The stand-in has to read as unoccluded, not as absent**: the
|
|
73
|
+
* dynamic layer is sampled unconditionally, and `occlusion()` calls any stored depth below the
|
|
74
|
+
* receiver's a blocker — so a stand-in of zero would put the whole beam in shadow, which is a
|
|
75
|
+
* picture rather than an error. A white one-pixel texture is depth 1, the far plane, nothing in
|
|
76
|
+
* the way. `emptyTexture.ts` is the same value on the other backend for the same reason.
|
|
77
|
+
*/
|
|
78
|
+
export function createLightVolumeBindGroup(device, layout, variant, vertices, fragments, resolve) {
|
|
79
|
+
const fragment = lightVolumeFragmentBindings(variant);
|
|
80
|
+
const entries = [
|
|
81
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: LIGHT_VOLUME_VERT_SIZE } },
|
|
82
|
+
{
|
|
83
|
+
binding: fragment.uniforms,
|
|
84
|
+
resource: { buffer: fragments, size: fragment.uniformSize },
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
for (const [name, texture] of Object.entries(fragment.textures)) {
|
|
88
|
+
const supplied = resolve(name);
|
|
89
|
+
entries.push({ binding: texture.texture, resource: supplied.view });
|
|
90
|
+
entries.push({ binding: texture.sampler, resource: supplied.sampler });
|
|
91
|
+
}
|
|
92
|
+
return device.createBindGroup({
|
|
93
|
+
label: `lightVolume.bindGroup:${variant}`,
|
|
94
|
+
layout,
|
|
95
|
+
entries,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The pipeline for one variant and one side of the hull.
|
|
100
|
+
*
|
|
101
|
+
* **`src-alpha, one`, which is `gl.blendFunc(SRC_ALPHA, ONE)` and the whole reason this pass
|
|
102
|
+
* exists.** Alpha blending moves what is behind a surface *toward* it, so an unlit beam drawn
|
|
103
|
+
* that way comes out darker than the sky and sweeps a solid dark wedge across the frame; see
|
|
104
|
+
* the history at the top of `shaders/lightVolume.ts`. The shader puts its energy in the colour
|
|
105
|
+
* and leaves alpha at 1, because a blend that multiplies by alpha squares anything written to
|
|
106
|
+
* both.
|
|
107
|
+
*
|
|
108
|
+
* The alpha channel is left as it was rather than accumulated, which differs from the GL call
|
|
109
|
+
* — `blendFunc` sets both channels — and is invisible here because the swap chain is
|
|
110
|
+
* configured `alphaMode: 'opaque'` and the composited alpha is discarded. It would stop being
|
|
111
|
+
* invisible the day a consumer wants the canvas composited against the page behind it, and
|
|
112
|
+
* that is the line to change.
|
|
113
|
+
*
|
|
114
|
+
* **Depth tested, never written.** A beam passes behind whatever stands in front of it, and
|
|
115
|
+
* occludes nothing itself: a volume of light is not a surface.
|
|
116
|
+
*/
|
|
117
|
+
export function lightVolumePipeline(cache, device, layout, variant, cullMode, present, key) {
|
|
118
|
+
return cache.get(key, () => ({
|
|
119
|
+
label: key,
|
|
120
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
121
|
+
vertex: {
|
|
122
|
+
module: shaderModule(device, {
|
|
123
|
+
label: 'lightVolume.vert',
|
|
124
|
+
code: LIGHT_VOLUME_VERT_WGSL,
|
|
125
|
+
}),
|
|
126
|
+
entryPoint: 'main',
|
|
127
|
+
/*
|
|
128
|
+
* The mesh's own interleaved layout, not a four-attribute one. This shader reads
|
|
129
|
+
* locations 0 to 3, and the pipeline still has to describe every buffer the draw sets —
|
|
130
|
+
* the depth pass has the same shape with one attribute.
|
|
131
|
+
*/
|
|
132
|
+
buffers: vertexBufferLayouts(present),
|
|
133
|
+
},
|
|
134
|
+
fragment: {
|
|
135
|
+
module: shaderModule(device, {
|
|
136
|
+
label: `lightVolume.frag:${variant}`,
|
|
137
|
+
code: LIGHT_VOLUME_FRAG_WGSL[variant] ?? '',
|
|
138
|
+
}),
|
|
139
|
+
entryPoint: 'main',
|
|
140
|
+
targets: [
|
|
141
|
+
{
|
|
142
|
+
format: cache.format,
|
|
143
|
+
blend: {
|
|
144
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one', operation: 'add' },
|
|
145
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one', operation: 'add' },
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
primitive: { topology: 'triangle-list', cullMode },
|
|
151
|
+
multisample: { count: cache.sampleCount },
|
|
152
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { LineSegments } from '../../linePoints.ts';
|
|
2
|
+
import type { UniformFields } from './scatterPass.ts';
|
|
3
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
4
|
+
/**
|
|
5
|
+
* The line pass: a polyline with a real width, four vertices a segment.
|
|
6
|
+
*
|
|
7
|
+
* **The plain sibling of `boltPass.ts`, sharing its quad and nothing after that.** Both turn a
|
|
8
|
+
* segment into a camera-facing quad from `segmentQuads.ts`, because neither filament has a
|
|
9
|
+
* thickness to see around; a bolt is additive light with no model transform and a line is a
|
|
10
|
+
* fogged, alpha-blended thing in the world that moves with whatever it is attached to, hence
|
|
11
|
+
* the extra `uModel` field `LINE_VERT` carries and `BOLT_VERT` does not.
|
|
12
|
+
*
|
|
13
|
+
* The per-frame streams are two positions, not bolt's five — no `along`/`fade`/`seed`/
|
|
14
|
+
* `brightness` to carry, because a line has no envelope. `expandLineSegments` is written here
|
|
15
|
+
* rather than folded into `expandBoltSegments` in `segmentQuads.ts`, for the reason
|
|
16
|
+
* `lineBatch.ts` gives on the WebGL2 side: teaching that function a `LineSegments` shape too
|
|
17
|
+
* would grow a union coupling two renderers that share only a quad.
|
|
18
|
+
*
|
|
19
|
+
* **Uniforms are a `UniformRing`, one slot a draw, not a single block like `boltPass.ts`'s.**
|
|
20
|
+
* A bolt pool is drawn once a frame in every scene that has shipped so far, so a single block
|
|
21
|
+
* happened to be safe there; a polyline is exactly the shape `uniformRing.ts`'s own comment
|
|
22
|
+
* warns about — a waveform, several trails, a plotted curve, all in one frame — and
|
|
23
|
+
* `queue.writeBuffer` does not interleave with recorded draw commands, so a single block
|
|
24
|
+
* written more than once in a frame gives *every* draw that frame the last write. Found on
|
|
25
|
+
* this page's own demo, which draws seven polylines a frame: every stroke rendered at the last
|
|
26
|
+
* one's transform, colour and width, which on WebGPU alone put every shape at the last draw's
|
|
27
|
+
* position and looked exactly like nothing had rendered rather than like a transform bug — see
|
|
28
|
+
* `drawLines` in `webgpu/renderer.ts`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const LINE_VERT_FIELDS: UniformFields;
|
|
31
|
+
export declare const LINE_VERT_SIZE: 160;
|
|
32
|
+
export declare const LINE_FRAG_FIELDS: UniformFields;
|
|
33
|
+
export declare const LINE_FRAG_SIZE: 112;
|
|
34
|
+
/** A polyline batch on the device, behind the surface's opaque handle. */
|
|
35
|
+
export interface GpuLines {
|
|
36
|
+
readonly fromBuffer: GPUBuffer;
|
|
37
|
+
readonly toBuffer: GPUBuffer;
|
|
38
|
+
readonly corners: GPUBuffer;
|
|
39
|
+
readonly indices: GPUBuffer;
|
|
40
|
+
readonly capacity: number;
|
|
41
|
+
/** Staging, expanded from the segment list's per-segment arrays to per-vertex ones. */
|
|
42
|
+
readonly from: Float32Array;
|
|
43
|
+
readonly to: Float32Array;
|
|
44
|
+
dispose(): void;
|
|
45
|
+
}
|
|
46
|
+
export declare function createGpuLines(device: GPUDevice, capacity: number, label: string): GpuLines;
|
|
47
|
+
/**
|
|
48
|
+
* Expand this frame's segments to their four vertices each, into arrays the caller owns.
|
|
49
|
+
*
|
|
50
|
+
* Returns how many segments were written, which is the list's count clamped to the batch's
|
|
51
|
+
* capacity — a caller that overruns loses its tail rather than its frame, the same rule
|
|
52
|
+
* `expandBoltSegments` follows. Reads only `LineSegments.from`/`.to`, the same walk `lineBatch.ts`
|
|
53
|
+
* writes inline in `upload()` on the WebGL2 side.
|
|
54
|
+
*/
|
|
55
|
+
export declare function expandLineSegments(data: LineSegments, capacity: number, from: Float32Array, to: Float32Array): number;
|
|
56
|
+
/** `aFrom`, `aTo`, `aCorner` — one buffer each, at the locations `line.ts` declares. No fourth
|
|
57
|
+
* dynamic attribute: unlike a bolt, a line carries no envelope. */
|
|
58
|
+
export declare function lineVertexLayouts(): GPUVertexBufferLayout[];
|
|
59
|
+
/**
|
|
60
|
+
* `hasDynamicOffset: true` on both bindings, which the ring needs for the reason this file's own
|
|
61
|
+
* top comment gives.
|
|
62
|
+
*
|
|
63
|
+
* **This used to say "unlike `boltPass.ts`", and that stopped being true on 2026-09-02** when
|
|
64
|
+
* bolts, caustics, the flock and the wind streaks all gained rings of their own. A comment naming
|
|
65
|
+
* a neighbour's shortcoming is a comment that goes stale when the neighbour is fixed.
|
|
66
|
+
*/
|
|
67
|
+
export declare function createLineBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
|
|
68
|
+
/** Bound once against the ring's two buffers; every draw supplies its own dynamic offset. */
|
|
69
|
+
export declare function createLineBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer): GPUBindGroup;
|
|
70
|
+
/**
|
|
71
|
+
* The pipeline.
|
|
72
|
+
*
|
|
73
|
+
* **Alpha blended, depth tested, depth not written, nothing culled.** Alpha rather than
|
|
74
|
+
* `boltPipeline`'s additive, matching `LineBatch.drawTo`'s WebGL2 state exactly: a line occludes
|
|
75
|
+
* in colour but must not punch a hole in the depth buffer from its own soft antialiased edge,
|
|
76
|
+
* the same discipline the SDF text pass follows. Nothing culled for the reason `lineBatch.ts`
|
|
77
|
+
* gives: the quad billboards toward the view the same way a bolt's does, so its winding can flip
|
|
78
|
+
* with the camera angle.
|
|
79
|
+
*/
|
|
80
|
+
export declare function linePipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout,
|
|
81
|
+
/**
|
|
82
|
+
* Whether this stroke is *light arriving* rather than a thing in the world.
|
|
83
|
+
*
|
|
84
|
+
* **A second pipeline rather than a second verb, and it does not make a line a bolt.** Blending
|
|
85
|
+
* is pipeline state on this backend, so an additive stroke is a variant with its own cache key —
|
|
86
|
+
* the same arrangement `depthWrite` already has for a translucent mesh. What it is not is a mode
|
|
87
|
+
* flag turning `drawLines` into `drawBolts`: a bolt jitters along its own path because it is
|
|
88
|
+
* lightning, which is a fact about geometry that nothing here touches.
|
|
89
|
+
*/
|
|
90
|
+
additive?: boolean): GPURenderPipeline;
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { LINE_BINDINGS, LINE_FRAG_WGSL, LINE_VERT_WGSL, } from '../../shaders/generated/line.wgsl.js';
|
|
3
|
+
import { buildSegmentQuads } from '../../segmentQuads.js';
|
|
4
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
5
|
+
import { shaderModule } from './shaderModules.js';
|
|
6
|
+
/**
|
|
7
|
+
* The line pass: a polyline with a real width, four vertices a segment.
|
|
8
|
+
*
|
|
9
|
+
* **The plain sibling of `boltPass.ts`, sharing its quad and nothing after that.** Both turn a
|
|
10
|
+
* segment into a camera-facing quad from `segmentQuads.ts`, because neither filament has a
|
|
11
|
+
* thickness to see around; a bolt is additive light with no model transform and a line is a
|
|
12
|
+
* fogged, alpha-blended thing in the world that moves with whatever it is attached to, hence
|
|
13
|
+
* the extra `uModel` field `LINE_VERT` carries and `BOLT_VERT` does not.
|
|
14
|
+
*
|
|
15
|
+
* The per-frame streams are two positions, not bolt's five — no `along`/`fade`/`seed`/
|
|
16
|
+
* `brightness` to carry, because a line has no envelope. `expandLineSegments` is written here
|
|
17
|
+
* rather than folded into `expandBoltSegments` in `segmentQuads.ts`, for the reason
|
|
18
|
+
* `lineBatch.ts` gives on the WebGL2 side: teaching that function a `LineSegments` shape too
|
|
19
|
+
* would grow a union coupling two renderers that share only a quad.
|
|
20
|
+
*
|
|
21
|
+
* **Uniforms are a `UniformRing`, one slot a draw, not a single block like `boltPass.ts`'s.**
|
|
22
|
+
* A bolt pool is drawn once a frame in every scene that has shipped so far, so a single block
|
|
23
|
+
* happened to be safe there; a polyline is exactly the shape `uniformRing.ts`'s own comment
|
|
24
|
+
* warns about — a waveform, several trails, a plotted curve, all in one frame — and
|
|
25
|
+
* `queue.writeBuffer` does not interleave with recorded draw commands, so a single block
|
|
26
|
+
* written more than once in a frame gives *every* draw that frame the last write. Found on
|
|
27
|
+
* this page's own demo, which draws seven polylines a frame: every stroke rendered at the last
|
|
28
|
+
* one's transform, colour and width, which on WebGPU alone put every shape at the last draw's
|
|
29
|
+
* position and looked exactly like nothing had rendered rather than like a transform bug — see
|
|
30
|
+
* `drawLines` in `webgpu/renderer.ts`.
|
|
31
|
+
*/
|
|
32
|
+
export const LINE_VERT_FIELDS = LINE_BINDINGS.LINE_VERT.fields;
|
|
33
|
+
export const LINE_VERT_SIZE = LINE_BINDINGS.LINE_VERT.uniformSize;
|
|
34
|
+
export const LINE_FRAG_FIELDS = LINE_BINDINGS.LINE_FRAG.fields;
|
|
35
|
+
export const LINE_FRAG_SIZE = LINE_BINDINGS.LINE_FRAG.uniformSize;
|
|
36
|
+
const VERT_BINDING = LINE_BINDINGS.LINE_VERT.uniforms;
|
|
37
|
+
const FRAG_BINDING = LINE_BINDINGS.LINE_FRAG.uniforms;
|
|
38
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
39
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
40
|
+
const USAGE_VERTEX = 0x0020 | 0x0008; // VERTEX | COPY_DST
|
|
41
|
+
const USAGE_INDEX = 0x0010 | 0x0008; // INDEX | COPY_DST
|
|
42
|
+
export function createGpuLines(device, capacity, label) {
|
|
43
|
+
const verts = capacity * 4;
|
|
44
|
+
const geometry = buildSegmentQuads(capacity);
|
|
45
|
+
const dynamic = (floats, name) => device.createBuffer({
|
|
46
|
+
label: `${label}.${name}`,
|
|
47
|
+
size: Math.max(4, floats * 4),
|
|
48
|
+
usage: USAGE_VERTEX,
|
|
49
|
+
});
|
|
50
|
+
const fromBuffer = dynamic(verts * 3, 'from');
|
|
51
|
+
const toBuffer = dynamic(verts * 3, 'to');
|
|
52
|
+
const corners = device.createBuffer({
|
|
53
|
+
label: `${label}.corners`,
|
|
54
|
+
size: Math.max(4, geometry.corners.byteLength),
|
|
55
|
+
usage: USAGE_VERTEX,
|
|
56
|
+
});
|
|
57
|
+
device.queue.writeBuffer(corners, 0, geometry.corners);
|
|
58
|
+
const indices = device.createBuffer({
|
|
59
|
+
label: `${label}.indices`,
|
|
60
|
+
size: Math.max(4, geometry.indices.byteLength),
|
|
61
|
+
usage: USAGE_INDEX,
|
|
62
|
+
});
|
|
63
|
+
device.queue.writeBuffer(indices, 0, geometry.indices);
|
|
64
|
+
return {
|
|
65
|
+
fromBuffer,
|
|
66
|
+
toBuffer,
|
|
67
|
+
corners,
|
|
68
|
+
indices,
|
|
69
|
+
capacity,
|
|
70
|
+
from: new Float32Array(verts * 3),
|
|
71
|
+
to: new Float32Array(verts * 3),
|
|
72
|
+
dispose() {
|
|
73
|
+
fromBuffer.destroy();
|
|
74
|
+
toBuffer.destroy();
|
|
75
|
+
corners.destroy();
|
|
76
|
+
indices.destroy();
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Expand this frame's segments to their four vertices each, into arrays the caller owns.
|
|
82
|
+
*
|
|
83
|
+
* Returns how many segments were written, which is the list's count clamped to the batch's
|
|
84
|
+
* capacity — a caller that overruns loses its tail rather than its frame, the same rule
|
|
85
|
+
* `expandBoltSegments` follows. Reads only `LineSegments.from`/`.to`, the same walk `lineBatch.ts`
|
|
86
|
+
* writes inline in `upload()` on the WebGL2 side.
|
|
87
|
+
*/
|
|
88
|
+
export function expandLineSegments(data, capacity, from, to) {
|
|
89
|
+
const count = Math.min(data.count, capacity);
|
|
90
|
+
for (let s = 0; s < count; s++) {
|
|
91
|
+
const fx = data.from[s * 3];
|
|
92
|
+
const fy = data.from[s * 3 + 1];
|
|
93
|
+
const fz = data.from[s * 3 + 2];
|
|
94
|
+
const tx = data.to[s * 3];
|
|
95
|
+
const ty = data.to[s * 3 + 1];
|
|
96
|
+
const tz = data.to[s * 3 + 2];
|
|
97
|
+
for (let c = 0; c < 4; c++) {
|
|
98
|
+
const v = s * 4 + c;
|
|
99
|
+
from[v * 3] = fx;
|
|
100
|
+
from[v * 3 + 1] = fy;
|
|
101
|
+
from[v * 3 + 2] = fz;
|
|
102
|
+
to[v * 3] = tx;
|
|
103
|
+
to[v * 3 + 1] = ty;
|
|
104
|
+
to[v * 3 + 2] = tz;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return count;
|
|
108
|
+
}
|
|
109
|
+
/** `aFrom`, `aTo`, `aCorner` — one buffer each, at the locations `line.ts` declares. No fourth
|
|
110
|
+
* dynamic attribute: unlike a bolt, a line carries no envelope. */
|
|
111
|
+
export function lineVertexLayouts() {
|
|
112
|
+
return [
|
|
113
|
+
{
|
|
114
|
+
arrayStride: 12,
|
|
115
|
+
attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }],
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
arrayStride: 12,
|
|
119
|
+
attributes: [{ shaderLocation: 1, offset: 0, format: 'float32x3' }],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
arrayStride: 8,
|
|
123
|
+
attributes: [{ shaderLocation: 2, offset: 0, format: 'float32x2' }],
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* `hasDynamicOffset: true` on both bindings, which the ring needs for the reason this file's own
|
|
129
|
+
* top comment gives.
|
|
130
|
+
*
|
|
131
|
+
* **This used to say "unlike `boltPass.ts`", and that stopped being true on 2026-09-02** when
|
|
132
|
+
* bolts, caustics, the flock and the wind streaks all gained rings of their own. A comment naming
|
|
133
|
+
* a neighbour's shortcoming is a comment that goes stale when the neighbour is fixed.
|
|
134
|
+
*/
|
|
135
|
+
export function createLineBindGroupLayout(device) {
|
|
136
|
+
return device.createBindGroupLayout({
|
|
137
|
+
label: 'line.layout',
|
|
138
|
+
entries: [
|
|
139
|
+
{
|
|
140
|
+
binding: VERT_BINDING,
|
|
141
|
+
visibility: VISIBILITY_VERTEX,
|
|
142
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: LINE_VERT_SIZE },
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
binding: FRAG_BINDING,
|
|
146
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
147
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: LINE_FRAG_SIZE },
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/** Bound once against the ring's two buffers; every draw supplies its own dynamic offset. */
|
|
153
|
+
export function createLineBindGroup(device, layout, vertices, fragments) {
|
|
154
|
+
return device.createBindGroup({
|
|
155
|
+
label: 'line.bindGroup',
|
|
156
|
+
layout,
|
|
157
|
+
entries: [
|
|
158
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: LINE_VERT_SIZE } },
|
|
159
|
+
{ binding: FRAG_BINDING, resource: { buffer: fragments, size: LINE_FRAG_SIZE } },
|
|
160
|
+
],
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The pipeline.
|
|
165
|
+
*
|
|
166
|
+
* **Alpha blended, depth tested, depth not written, nothing culled.** Alpha rather than
|
|
167
|
+
* `boltPipeline`'s additive, matching `LineBatch.drawTo`'s WebGL2 state exactly: a line occludes
|
|
168
|
+
* in colour but must not punch a hole in the depth buffer from its own soft antialiased edge,
|
|
169
|
+
* the same discipline the SDF text pass follows. Nothing culled for the reason `lineBatch.ts`
|
|
170
|
+
* gives: the quad billboards toward the view the same way a bolt's does, so its winding can flip
|
|
171
|
+
* with the camera angle.
|
|
172
|
+
*/
|
|
173
|
+
export function linePipeline(cache, device, layout,
|
|
174
|
+
/**
|
|
175
|
+
* Whether this stroke is *light arriving* rather than a thing in the world.
|
|
176
|
+
*
|
|
177
|
+
* **A second pipeline rather than a second verb, and it does not make a line a bolt.** Blending
|
|
178
|
+
* is pipeline state on this backend, so an additive stroke is a variant with its own cache key —
|
|
179
|
+
* the same arrangement `depthWrite` already has for a translucent mesh. What it is not is a mode
|
|
180
|
+
* flag turning `drawLines` into `drawBolts`: a bolt jitters along its own path because it is
|
|
181
|
+
* lightning, which is a fact about geometry that nothing here touches.
|
|
182
|
+
*/
|
|
183
|
+
additive = false) {
|
|
184
|
+
return cache.get(additive ? 'line:additive' : 'line', () => ({
|
|
185
|
+
label: additive ? 'line.additive' : 'line',
|
|
186
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
187
|
+
vertex: {
|
|
188
|
+
module: shaderModule(device, { label: 'line.vert', code: LINE_VERT_WGSL }),
|
|
189
|
+
entryPoint: 'main',
|
|
190
|
+
buffers: lineVertexLayouts(),
|
|
191
|
+
},
|
|
192
|
+
fragment: {
|
|
193
|
+
module: shaderModule(device, { label: 'line.frag', code: LINE_FRAG_WGSL }),
|
|
194
|
+
entryPoint: 'main',
|
|
195
|
+
targets: [
|
|
196
|
+
{
|
|
197
|
+
format: cache.format,
|
|
198
|
+
/* The additive arm is `boltPass`'s exactly, because it is the same statement about the
|
|
199
|
+
same kind of thing: light adds to what is behind it and never covers it. */
|
|
200
|
+
blend: additive
|
|
201
|
+
? {
|
|
202
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one', operation: 'add' },
|
|
203
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one', operation: 'add' },
|
|
204
|
+
}
|
|
205
|
+
: {
|
|
206
|
+
color: {
|
|
207
|
+
srcFactor: 'src-alpha',
|
|
208
|
+
dstFactor: 'one-minus-src-alpha',
|
|
209
|
+
operation: 'add',
|
|
210
|
+
},
|
|
211
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
},
|
|
216
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
217
|
+
multisample: { count: cache.sampleCount },
|
|
218
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A mesh's morph deltas as an `rgba32float` texture, on WebGPU.
|
|
3
|
+
*
|
|
4
|
+
* The twin of the WebGL2 module of this name, and **`rgba` where that one is `rgb`**: WebGPU has
|
|
5
|
+
* no three-channel float format at all, so the fourth channel is padding the shader ignores. That
|
|
6
|
+
* is a quarter of the texture holding nothing, and it is the format list rather than a choice —
|
|
7
|
+
* naming it here so the difference between the two files is not read as an oversight.
|
|
8
|
+
*/
|
|
9
|
+
export declare class MorphTexture {
|
|
10
|
+
private texture;
|
|
11
|
+
private cachedView;
|
|
12
|
+
readonly width: number;
|
|
13
|
+
readonly rows: number;
|
|
14
|
+
readonly targetCount: number;
|
|
15
|
+
constructor(device: GPUDevice, deltas: Float32Array, vertices: number, targets: number);
|
|
16
|
+
view(): GPUTextureView | null;
|
|
17
|
+
dispose(): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { morphTextureRows, morphTextureWidth } from '../../skinPalette.js';
|
|
2
|
+
/**
|
|
3
|
+
* A mesh's morph deltas as an `rgba32float` texture, on WebGPU.
|
|
4
|
+
*
|
|
5
|
+
* The twin of the WebGL2 module of this name, and **`rgba` where that one is `rgb`**: WebGPU has
|
|
6
|
+
* no three-channel float format at all, so the fourth channel is padding the shader ignores. That
|
|
7
|
+
* is a quarter of the texture holding nothing, and it is the format list rather than a choice —
|
|
8
|
+
* naming it here so the difference between the two files is not read as an oversight.
|
|
9
|
+
*/
|
|
10
|
+
export class MorphTexture {
|
|
11
|
+
texture = null;
|
|
12
|
+
cachedView = null;
|
|
13
|
+
width;
|
|
14
|
+
rows;
|
|
15
|
+
targetCount;
|
|
16
|
+
constructor(device, deltas, vertices, targets) {
|
|
17
|
+
this.targetCount = targets;
|
|
18
|
+
this.width = morphTextureWidth(vertices, targets);
|
|
19
|
+
this.rows = morphTextureRows(vertices, targets);
|
|
20
|
+
this.texture = device.createTexture({
|
|
21
|
+
label: `morph.deltas:${targets}x${vertices}`,
|
|
22
|
+
size: { width: this.width, height: this.rows },
|
|
23
|
+
format: 'rgba32float',
|
|
24
|
+
usage: TEXTURE_USAGE.TEXTURE_BINDING | TEXTURE_USAGE.COPY_DST,
|
|
25
|
+
});
|
|
26
|
+
/* Three floats a delta widened to four, and padded to the full rectangle for the reason the
|
|
27
|
+
WebGL2 twin gives: a short last row is what an upload walks off the end of. */
|
|
28
|
+
const padded = new Float32Array(this.width * this.rows * 4);
|
|
29
|
+
const count = Math.min(deltas.length / 3, this.width * this.rows);
|
|
30
|
+
for (let i = 0; i < count; i++) {
|
|
31
|
+
padded[i * 4] = deltas[i * 3];
|
|
32
|
+
padded[i * 4 + 1] = deltas[i * 3 + 1];
|
|
33
|
+
padded[i * 4 + 2] = deltas[i * 3 + 2];
|
|
34
|
+
}
|
|
35
|
+
device.queue.writeTexture({ texture: this.texture }, padded, { bytesPerRow: this.width * 16, rowsPerImage: this.rows }, { width: this.width, height: this.rows });
|
|
36
|
+
}
|
|
37
|
+
view() {
|
|
38
|
+
if (this.texture === null)
|
|
39
|
+
return null;
|
|
40
|
+
if (this.cachedView === null)
|
|
41
|
+
this.cachedView = this.texture.createView();
|
|
42
|
+
return this.cachedView;
|
|
43
|
+
}
|
|
44
|
+
dispose() {
|
|
45
|
+
this.texture?.destroy();
|
|
46
|
+
this.texture = null;
|
|
47
|
+
this.cachedView = null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/* Spelled out, because the global is not in the TypeScript lib this package compiles against. */
|
|
51
|
+
const TEXTURE_USAGE = { COPY_DST: 0x02, TEXTURE_BINDING: 0x04 };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { UniformFields } from './scatterPass.ts';
|
|
2
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The panel pass: two triangles in screen space, one colour, one alpha.
|
|
5
|
+
*
|
|
6
|
+
* The plain surface an overlay is read against — what `renderer.ts` says about `fillPanel`
|
|
7
|
+
* applies here unchanged, including why neither `beginInset` nor a plate of glyph cubes can
|
|
8
|
+
* stand in for it.
|
|
9
|
+
*
|
|
10
|
+
* **The corners are a vertex buffer rather than `vertex_index` arithmetic**, because the GLSL
|
|
11
|
+
* is the source of truth and it declares `aCorner`. Six vertices, uploaded once.
|
|
12
|
+
*/
|
|
13
|
+
export declare const PANEL_VERT_FIELDS: UniformFields;
|
|
14
|
+
export declare const PANEL_VERT_SIZE: 96;
|
|
15
|
+
export declare const PANEL_FRAG_FIELDS: UniformFields;
|
|
16
|
+
export declare const PANEL_FRAG_SIZE: 16;
|
|
17
|
+
export declare const PANEL_VERTEX_COUNT: number;
|
|
18
|
+
export declare function createPanelCorners(device: GPUDevice): GPUBuffer;
|
|
19
|
+
export declare function createPanelBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
|
|
20
|
+
/**
|
|
21
|
+
* Bound once against both rings, and addressed by dynamic offset per panel.
|
|
22
|
+
*
|
|
23
|
+
* **A ring rather than one buffer, because a frame draws more than one.** The loader alone
|
|
24
|
+
* draws a track and a fill, and `queue.writeBuffer` does not interleave with recorded commands
|
|
25
|
+
* — so a single block written twice would give both panels the second colour. That is the bug
|
|
26
|
+
* that left a flame leaning forty degrees in still air, one pass higher up.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createPanelBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer): GPUBindGroup;
|
|
29
|
+
/**
|
|
30
|
+
* The pipeline.
|
|
31
|
+
*
|
|
32
|
+
* **Nothing culled, nothing depth-tested, nothing written to depth.** This is furniture drawn
|
|
33
|
+
* over a finished frame: it must neither be occluded by the scene nor occlude what comes after
|
|
34
|
+
* it. `renderer.ts` disables all three by hand for the same draw, and records that leaving
|
|
35
|
+
* culling on drew nothing at all, silently — a screen-space quad has no meaningful facing.
|
|
36
|
+
*/
|
|
37
|
+
export declare function panelPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout): GPURenderPipeline;
|