@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,124 @@
|
|
|
1
|
+
import type { InstanceData } from './instancedMesh.ts';
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
/**
|
|
4
|
+
* A pool's per-particle stream, as a particle material reads it.
|
|
5
|
+
*
|
|
6
|
+
* Separate from `InstanceData` — which is a *scatter* stream, built for placing
|
|
7
|
+
* thousands of static plants — because the two want different things and sharing
|
|
8
|
+
* one of them cost this engine its whole particle look. A blade of grass needs a
|
|
9
|
+
* yaw and a wind response and is opaque; a puff of smoke needs an **age**, a
|
|
10
|
+
* **seed** and an **opacity**, and has no wind of its own because its velocity
|
|
11
|
+
* already carries it.
|
|
12
|
+
*
|
|
13
|
+
* Lacking those three, the scatter path had to fake the one that matters: a
|
|
14
|
+
* particle "faded" by having its colour multiplied toward black, which is a real
|
|
15
|
+
* fade only if the material is additive. Drawn through the opaque foliage shader
|
|
16
|
+
* it is not a fade at all — it is a grain turning into a black cube — and that,
|
|
17
|
+
* rather than any tuning, is why every effect built on this read as raw.
|
|
18
|
+
*/
|
|
19
|
+
export interface ParticleInstances {
|
|
20
|
+
/** World position, three floats each. */
|
|
21
|
+
positions: Float32Array;
|
|
22
|
+
/** Metres across, and radians of roll about the particle's own axis. */
|
|
23
|
+
sizes: Float32Array;
|
|
24
|
+
spins: Float32Array;
|
|
25
|
+
/** Linear colour, three floats each. */
|
|
26
|
+
colors: Float32Array;
|
|
27
|
+
/** Opacity, 0 to 1 — a real one, not a colour standing in for it. */
|
|
28
|
+
alphas: Float32Array;
|
|
29
|
+
/** Age as a share of this particle's own life, for anything that evolves. */
|
|
30
|
+
ages: Float32Array;
|
|
31
|
+
/** Per-particle randomness, so neighbours never animate together. */
|
|
32
|
+
seeds: Float32Array;
|
|
33
|
+
/** Current velocity, three floats each: what a streak is stretched along. */
|
|
34
|
+
velocities: Float32Array;
|
|
35
|
+
count: number;
|
|
36
|
+
capacity: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A pool of short-lived particles, simulated on the CPU and drawn as instances.
|
|
40
|
+
*
|
|
41
|
+
* Deliberately not a new GPU path: `InstancedMesh` already uploads instance
|
|
42
|
+
* data per frame and already knows how to draw thousands of copies of one mesh
|
|
43
|
+
* in a single call, so a particle system is *only* the simulation. That keeps
|
|
44
|
+
* the whole thing testable — none of what follows needs a GL context — and
|
|
45
|
+
* keeps WebGL where the standing rule says it lives.
|
|
46
|
+
*
|
|
47
|
+
* A ring buffer, not a free list. Emission is continuous and the oldest
|
|
48
|
+
* particle is always the right one to reuse, so the bookkeeping a free list
|
|
49
|
+
* exists for is bookkeeping nobody needs; and overrunning it degrades by
|
|
50
|
+
* dropping the oldest, which is invisible, rather than by refusing to emit,
|
|
51
|
+
* which is visible exactly when the effect matters most.
|
|
52
|
+
*/
|
|
53
|
+
export interface ParticlePoolOptions {
|
|
54
|
+
capacity: number;
|
|
55
|
+
/** Seconds a particle lives. */
|
|
56
|
+
lifeSec: number;
|
|
57
|
+
/** Size at birth and at death, metres. */
|
|
58
|
+
sizeStart: number;
|
|
59
|
+
sizeEnd: number;
|
|
60
|
+
/** Colour at birth and at death. */
|
|
61
|
+
colorStart: Vec3;
|
|
62
|
+
colorEnd: Vec3;
|
|
63
|
+
/** Downward acceleration. Smoke wants a little; grit wants a lot. */
|
|
64
|
+
gravity: number;
|
|
65
|
+
/** How fast motion decays, per second. */
|
|
66
|
+
drag: number;
|
|
67
|
+
/** Constant upward push, for anything that behaves like smoke. */
|
|
68
|
+
rise: number;
|
|
69
|
+
/**
|
|
70
|
+
* Opacity at birth and at death. Omitted means the old behaviour exactly —
|
|
71
|
+
* fully opaque, fading by colour — so no existing pool changes by a bit.
|
|
72
|
+
*/
|
|
73
|
+
alphaStart?: number;
|
|
74
|
+
alphaEnd?: number;
|
|
75
|
+
}
|
|
76
|
+
export declare class ParticlePool {
|
|
77
|
+
private readonly options;
|
|
78
|
+
readonly instances: InstanceData;
|
|
79
|
+
/** The same particles, as a particle material wants them. See `ParticleInstances`. */
|
|
80
|
+
readonly particles: ParticleInstances;
|
|
81
|
+
private readonly x;
|
|
82
|
+
private readonly y;
|
|
83
|
+
private readonly z;
|
|
84
|
+
private readonly vx;
|
|
85
|
+
private readonly vy;
|
|
86
|
+
private readonly vz;
|
|
87
|
+
private readonly age;
|
|
88
|
+
private readonly life;
|
|
89
|
+
private readonly spin;
|
|
90
|
+
private readonly scale;
|
|
91
|
+
/**
|
|
92
|
+
* The seed the caller emitted with, kept as well as hashed into `spin`.
|
|
93
|
+
*
|
|
94
|
+
* A material that animates — noise-eroded smoke, a stuttering spark — needs a
|
|
95
|
+
* per-particle constant to offset its own animation by, and a rotation is the
|
|
96
|
+
* wrong number for it: two particles a radian apart are visually unrelated but
|
|
97
|
+
* arithmetically adjacent, so noise sampled at the spin makes neighbours ripple
|
|
98
|
+
* together.
|
|
99
|
+
*/
|
|
100
|
+
private readonly seedOf;
|
|
101
|
+
private next;
|
|
102
|
+
constructor(options: ParticlePoolOptions);
|
|
103
|
+
/** How many particles are alive. */
|
|
104
|
+
get live(): number;
|
|
105
|
+
/**
|
|
106
|
+
* Add one particle.
|
|
107
|
+
*
|
|
108
|
+
* `seed` drives the per-particle variation instead of `Math.random`, so a
|
|
109
|
+
* caller inside a deterministic system can pass a tick count and get the same
|
|
110
|
+
* plume twice — which a replay needs, since the same run has to look the same
|
|
111
|
+
* on the way to being a clip.
|
|
112
|
+
*/
|
|
113
|
+
emit(x: number, y: number, z: number, vx: number, vy: number, vz: number, seed: number, sizeScale?: number, lifeScale?: number): void;
|
|
114
|
+
/**
|
|
115
|
+
* Advance every particle and rebuild the instance buffer.
|
|
116
|
+
*
|
|
117
|
+
* Compacting as it goes: live particles are written to the front of the
|
|
118
|
+
* instance data, so the draw call submits exactly the live count and dead
|
|
119
|
+
* particles cost nothing but the loop iteration.
|
|
120
|
+
*/
|
|
121
|
+
update(dt: number): void;
|
|
122
|
+
/** Drop everything, for a respawn or a scene change. */
|
|
123
|
+
clear(): void;
|
|
124
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { createInstanceData, writeInstance } from './instancedMesh.js';
|
|
2
|
+
function createParticleInstances(capacity) {
|
|
3
|
+
return {
|
|
4
|
+
positions: new Float32Array(capacity * 3),
|
|
5
|
+
sizes: new Float32Array(capacity),
|
|
6
|
+
spins: new Float32Array(capacity),
|
|
7
|
+
colors: new Float32Array(capacity * 3),
|
|
8
|
+
alphas: new Float32Array(capacity),
|
|
9
|
+
ages: new Float32Array(capacity),
|
|
10
|
+
seeds: new Float32Array(capacity),
|
|
11
|
+
velocities: new Float32Array(capacity * 3),
|
|
12
|
+
count: 0,
|
|
13
|
+
capacity,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export class ParticlePool {
|
|
17
|
+
options;
|
|
18
|
+
instances;
|
|
19
|
+
/** The same particles, as a particle material wants them. See `ParticleInstances`. */
|
|
20
|
+
particles;
|
|
21
|
+
x;
|
|
22
|
+
y;
|
|
23
|
+
z;
|
|
24
|
+
vx;
|
|
25
|
+
vy;
|
|
26
|
+
vz;
|
|
27
|
+
age;
|
|
28
|
+
life;
|
|
29
|
+
spin;
|
|
30
|
+
scale;
|
|
31
|
+
/**
|
|
32
|
+
* The seed the caller emitted with, kept as well as hashed into `spin`.
|
|
33
|
+
*
|
|
34
|
+
* A material that animates — noise-eroded smoke, a stuttering spark — needs a
|
|
35
|
+
* per-particle constant to offset its own animation by, and a rotation is the
|
|
36
|
+
* wrong number for it: two particles a radian apart are visually unrelated but
|
|
37
|
+
* arithmetically adjacent, so noise sampled at the spin makes neighbours ripple
|
|
38
|
+
* together.
|
|
39
|
+
*/
|
|
40
|
+
seedOf;
|
|
41
|
+
next = 0;
|
|
42
|
+
constructor(options) {
|
|
43
|
+
this.options = options;
|
|
44
|
+
const { capacity } = options;
|
|
45
|
+
if (!Number.isInteger(capacity) || capacity <= 0) {
|
|
46
|
+
throw new Error('A particle pool needs a positive integer capacity.');
|
|
47
|
+
}
|
|
48
|
+
if (options.lifeSec <= 0)
|
|
49
|
+
throw new Error('Particles need a positive lifetime.');
|
|
50
|
+
this.instances = createInstanceData(capacity);
|
|
51
|
+
this.particles = createParticleInstances(capacity);
|
|
52
|
+
this.x = new Float32Array(capacity);
|
|
53
|
+
this.y = new Float32Array(capacity);
|
|
54
|
+
this.z = new Float32Array(capacity);
|
|
55
|
+
this.vx = new Float32Array(capacity);
|
|
56
|
+
this.vy = new Float32Array(capacity);
|
|
57
|
+
this.vz = new Float32Array(capacity);
|
|
58
|
+
this.age = new Float32Array(capacity).fill(Infinity);
|
|
59
|
+
this.life = new Float32Array(capacity);
|
|
60
|
+
this.spin = new Float32Array(capacity);
|
|
61
|
+
this.scale = new Float32Array(capacity).fill(1);
|
|
62
|
+
this.seedOf = new Float32Array(capacity);
|
|
63
|
+
}
|
|
64
|
+
/** How many particles are alive. */
|
|
65
|
+
get live() {
|
|
66
|
+
let count = 0;
|
|
67
|
+
for (let i = 0; i < this.age.length; i++) {
|
|
68
|
+
if (this.age[i] !== Infinity && this.age[i] < this.life[i])
|
|
69
|
+
count++;
|
|
70
|
+
}
|
|
71
|
+
return count;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Add one particle.
|
|
75
|
+
*
|
|
76
|
+
* `seed` drives the per-particle variation instead of `Math.random`, so a
|
|
77
|
+
* caller inside a deterministic system can pass a tick count and get the same
|
|
78
|
+
* plume twice — which a replay needs, since the same run has to look the same
|
|
79
|
+
* on the way to being a clip.
|
|
80
|
+
*/
|
|
81
|
+
emit(x, y, z, vx, vy, vz, seed, sizeScale = 1, lifeScale = 1) {
|
|
82
|
+
const i = this.next;
|
|
83
|
+
this.next = (this.next + 1) % this.instances.capacity;
|
|
84
|
+
this.x[i] = x;
|
|
85
|
+
this.y[i] = y;
|
|
86
|
+
this.z[i] = z;
|
|
87
|
+
this.vx[i] = vx;
|
|
88
|
+
this.vy[i] = vy;
|
|
89
|
+
this.vz[i] = vz;
|
|
90
|
+
this.age[i] = 0;
|
|
91
|
+
this.life[i] = this.options.lifeSec * lifeScale;
|
|
92
|
+
// Hashed rather than sequential: neighbouring particles must not share a
|
|
93
|
+
// rotation, or a plume reads as a single object turning.
|
|
94
|
+
const hash = Math.sin(seed * 12.9898 + i * 78.233) * 43758.5453;
|
|
95
|
+
this.spin[i] = (hash - Math.floor(hash)) * Math.PI * 2;
|
|
96
|
+
this.scale[i] = sizeScale;
|
|
97
|
+
this.seedOf[i] = seed;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Advance every particle and rebuild the instance buffer.
|
|
101
|
+
*
|
|
102
|
+
* Compacting as it goes: live particles are written to the front of the
|
|
103
|
+
* instance data, so the draw call submits exactly the live count and dead
|
|
104
|
+
* particles cost nothing but the loop iteration.
|
|
105
|
+
*/
|
|
106
|
+
update(dt) {
|
|
107
|
+
const o = this.options;
|
|
108
|
+
let count = 0;
|
|
109
|
+
for (let i = 0; i < this.age.length; i++) {
|
|
110
|
+
const age = this.age[i];
|
|
111
|
+
if (age === Infinity)
|
|
112
|
+
continue;
|
|
113
|
+
const life = this.life[i];
|
|
114
|
+
const next = age + dt;
|
|
115
|
+
if (next >= life) {
|
|
116
|
+
this.age[i] = Infinity;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
this.age[i] = next;
|
|
120
|
+
const decay = Math.max(0, 1 - o.drag * dt);
|
|
121
|
+
let vx = this.vx[i] * decay;
|
|
122
|
+
let vy = this.vy[i] * decay;
|
|
123
|
+
let vz = this.vz[i] * decay;
|
|
124
|
+
vy += (o.rise - o.gravity) * dt;
|
|
125
|
+
this.vx[i] = vx;
|
|
126
|
+
this.vy[i] = vy;
|
|
127
|
+
this.vz[i] = vz;
|
|
128
|
+
const px = this.x[i] + vx * dt;
|
|
129
|
+
const py = this.y[i] + vy * dt;
|
|
130
|
+
const pz = this.z[i] + vz * dt;
|
|
131
|
+
this.x[i] = px;
|
|
132
|
+
this.y[i] = py;
|
|
133
|
+
this.z[i] = pz;
|
|
134
|
+
const t = next / life;
|
|
135
|
+
const size = (o.sizeStart + (o.sizeEnd - o.sizeStart) * t) * this.scale[i];
|
|
136
|
+
const r = o.colorStart[0] + (o.colorEnd[0] - o.colorStart[0]) * t;
|
|
137
|
+
const g = o.colorStart[1] + (o.colorEnd[1] - o.colorStart[1]) * t;
|
|
138
|
+
const b = o.colorStart[2] + (o.colorEnd[2] - o.colorStart[2]) * t;
|
|
139
|
+
/*
|
|
140
|
+
* Colour carries the fade rather than an alpha channel: the instanced
|
|
141
|
+
* path multiplies a tint into the base mesh and has no per-instance
|
|
142
|
+
* opacity, and for an additive puff darkening to nothing *is* fading out.
|
|
143
|
+
* It also means the effect needs no blend-state change.
|
|
144
|
+
*/
|
|
145
|
+
const fade = 1 - t * t;
|
|
146
|
+
writeInstance(this.instances, count, px, py, pz, size, this.spin[i], r * fade, g * fade, b * fade, 0, 0, 0);
|
|
147
|
+
/*
|
|
148
|
+
* The same particle for a material that has a real opacity channel. Colour
|
|
149
|
+
* is written *unfaded* here, because dimming it is the scatter path's
|
|
150
|
+
* workaround and doing both would fade twice — a puff that vanished at half
|
|
151
|
+
* its life while still occluding what was behind it.
|
|
152
|
+
*/
|
|
153
|
+
const p = this.particles;
|
|
154
|
+
const alphaStart = o.alphaStart ?? 1;
|
|
155
|
+
const alphaEnd = o.alphaEnd ?? 0;
|
|
156
|
+
p.positions[count * 3] = px;
|
|
157
|
+
p.positions[count * 3 + 1] = py;
|
|
158
|
+
p.positions[count * 3 + 2] = pz;
|
|
159
|
+
p.sizes[count] = size;
|
|
160
|
+
p.spins[count] = this.spin[i];
|
|
161
|
+
p.colors[count * 3] = r;
|
|
162
|
+
p.colors[count * 3 + 1] = g;
|
|
163
|
+
p.colors[count * 3 + 2] = b;
|
|
164
|
+
p.alphas[count] = alphaStart + (alphaEnd - alphaStart) * t;
|
|
165
|
+
p.ages[count] = t;
|
|
166
|
+
p.seeds[count] = this.seedOf[i];
|
|
167
|
+
p.velocities[count * 3] = vx;
|
|
168
|
+
p.velocities[count * 3 + 1] = vy;
|
|
169
|
+
p.velocities[count * 3 + 2] = vz;
|
|
170
|
+
count++;
|
|
171
|
+
}
|
|
172
|
+
this.instances.count = count;
|
|
173
|
+
this.particles.count = count;
|
|
174
|
+
}
|
|
175
|
+
/** Drop everything, for a respawn or a scene change. */
|
|
176
|
+
clear() {
|
|
177
|
+
this.age.fill(Infinity);
|
|
178
|
+
this.instances.count = 0;
|
|
179
|
+
this.particles.count = 0;
|
|
180
|
+
this.next = 0;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { type HandleRegistry } from './handleRegistry.ts';
|
|
2
|
+
import type { FrameResource } from './frame/index.ts';
|
|
3
|
+
/**
|
|
4
|
+
* A pass a package contributes, and the two contexts it is handed.
|
|
5
|
+
*
|
|
6
|
+
* **This is the one thing that makes a rendering package possible.** The renderer's verb surface
|
|
7
|
+
* is fixed and nothing outside `render/` can add to it, so `@driftengine/splats`, `ui2d` and `xr`
|
|
8
|
+
* had nowhere at all to put a draw call. `RENDERING.md` and the render graph design both name
|
|
9
|
+
* that as the thing blocking the package architecture rather than any shortage of machinery.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* What a registered pass is handed once, at registration, to build its resources.
|
|
13
|
+
*
|
|
14
|
+
* **Backend-specific on purpose.** A neutral device abstraction would be a second renderer API
|
|
15
|
+
* and an enormous one, and it would buy nothing: a package drawing Gaussian splats has a
|
|
16
|
+
* different shader, a different buffer layout and a different sort on each backend, so it
|
|
17
|
+
* branches whatever this looks like. A union makes the branch explicit and typed instead of
|
|
18
|
+
* hidden behind a lowest common denominator.
|
|
19
|
+
*
|
|
20
|
+
* `format` and `samples` ride along on the WebGPU side because a render pipeline cannot be built
|
|
21
|
+
* without them and a package has no other way to learn what the frame is.
|
|
22
|
+
*
|
|
23
|
+
* **`depthFormat` rides along for the same reason, and was missing for the same length of time
|
|
24
|
+
* nobody depth-tested through this seam (2026-08-25).** A pipeline that reads the depth buffer
|
|
25
|
+
* cannot be built without it either, and the only contributed pass in the tree hard-coded
|
|
26
|
+
* `depth24plus` with `depthCompare: 'always'` — invisible while a pass does not depth-test, and
|
|
27
|
+
* wrong the first time one does. Splats are that first one: a Gaussian is composed *into* the
|
|
28
|
+
* scene and has to be occluded by the geometry standing in front of it, which is a depth test
|
|
29
|
+
* against the frame's own attachment.
|
|
30
|
+
*
|
|
31
|
+
* What it costs: one more field every backend must answer honestly, which is the 2026-08-13 rule
|
|
32
|
+
* and not an accident. What would make it wrong: a frame with no depth attachment at all, which
|
|
33
|
+
* this renderer does not have and which would want the field to be nullable rather than absent.
|
|
34
|
+
*/
|
|
35
|
+
export type PassDevice = {
|
|
36
|
+
/**
|
|
37
|
+
* Pre-multiply a projection by this before uploading it. Identity on WebGL2.
|
|
38
|
+
*
|
|
39
|
+
* **The two APIs do not agree about which way clip space points, and the engine settles it in
|
|
40
|
+
* the matrix rather than in the shaders** — see `CLIP_CORRECTION`, whose own comment gives the
|
|
41
|
+
* reason: the shaders are generated from the GLSL the WebGL2 path uses, and a Y flip written
|
|
42
|
+
* into them would be a difference no generator could keep honest. WebGPU's framebuffer origin
|
|
43
|
+
* is the top-left and OpenGL's is the bottom-left, and depth clips to [0, 1] rather than
|
|
44
|
+
* [-1, 1].
|
|
45
|
+
*
|
|
46
|
+
* A contributed pass takes its camera from its caller, so it never sees the corrected matrix the
|
|
47
|
+
* renderer built for its own verbs. Without this it would have to copy four numbers — and a
|
|
48
|
+
* copied convention is one that silently disagrees the day the original changes. The splat pass
|
|
49
|
+
* drew the world upside down on WebGPU until this existed, which is the same first frame this
|
|
50
|
+
* backend ever produced: a colonnade hanging from the ceiling.
|
|
51
|
+
*/
|
|
52
|
+
readonly clipCorrection: Float32Array;
|
|
53
|
+
} & ({
|
|
54
|
+
readonly backend: 'webgl2';
|
|
55
|
+
readonly gl: WebGL2RenderingContext;
|
|
56
|
+
} | {
|
|
57
|
+
readonly backend: 'webgpu';
|
|
58
|
+
readonly device: GPUDevice;
|
|
59
|
+
readonly format: GPUTextureFormat;
|
|
60
|
+
readonly depthFormat: GPUTextureFormat;
|
|
61
|
+
readonly samples: number;
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* What it is handed each frame, at the point the caller asked for it.
|
|
65
|
+
*
|
|
66
|
+
* On WebGL2 the framebuffer the frame is going into is already bound, so the context is the
|
|
67
|
+
* whole of it. On WebGPU the encoder is the pass, and it is the frame's own or the mirror's
|
|
68
|
+
* depending on where the caller invoked it — which is the caller's business and not this
|
|
69
|
+
* object's.
|
|
70
|
+
*/
|
|
71
|
+
export type PassContext = {
|
|
72
|
+
/**
|
|
73
|
+
* The grade this frame wants, and whether it wants one at all.
|
|
74
|
+
*
|
|
75
|
+
* **A contributed pass is a forward pass, so the 2026-08-17 rule binds it too**: with a
|
|
76
|
+
* composite the resolve grades and a pass that also graded would apply the curve twice; without
|
|
77
|
+
* one, each pass is the last thing to touch the frame and each must grade itself. The renderer
|
|
78
|
+
* decides which by whether it has a scene target, and that decision was private — so until this
|
|
79
|
+
* field a package could only guess, and both guesses are wrong half the time.
|
|
80
|
+
*
|
|
81
|
+
* 0 is none, and is what a frame with a composite reports. `OUTPUT_TRANSFORM_GLSL` is exported
|
|
82
|
+
* from the barrel so the pass applies the same curve rather than a copy of it.
|
|
83
|
+
*/
|
|
84
|
+
readonly outputTransform: number;
|
|
85
|
+
/** The exposure that goes with it. 1 where the composite will apply the real one. */
|
|
86
|
+
readonly outputExposure: number;
|
|
87
|
+
} & ({
|
|
88
|
+
readonly backend: 'webgl2';
|
|
89
|
+
readonly gl: WebGL2RenderingContext;
|
|
90
|
+
} | {
|
|
91
|
+
readonly backend: 'webgpu';
|
|
92
|
+
readonly pass: GPURenderPassEncoder;
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* What a pass is handed once a frame, before the frame's own target exists.
|
|
96
|
+
*
|
|
97
|
+
* **A sibling of `PassContext` rather than a widening of it**, because the two carry different
|
|
98
|
+
* things and one of them cannot be nested inside the other. `draw` is invoked *inside* an open
|
|
99
|
+
* render pass on WebGPU, and a render pass cannot contain another; so a pass that wants to render
|
|
100
|
+
* into a target of its own needs a `GPUCommandEncoder` instead, and that is what this is.
|
|
101
|
+
*
|
|
102
|
+
* **The window it runs in already existed.** `beginFrame` creates the frame's command encoder and
|
|
103
|
+
* then defers opening the frame's render pass until the first draw that wants one — which
|
|
104
|
+
* `ensurePass` does for a measured reason about mirrors and tile memory. So there is a point at
|
|
105
|
+
* which an encoder exists and no render pass is open, and commands recorded on one encoder execute
|
|
106
|
+
* in recording order. A pass-owned target filled there has completed before any frame pass could
|
|
107
|
+
* sample it, **with the graph learning nothing and nothing reordered**.
|
|
108
|
+
*
|
|
109
|
+
* **On WebGL2 the contract is a restore rather than an ordering.** There is no verb-level graph on
|
|
110
|
+
* that backend and it was withdrawn on purpose, so there is nothing to schedule against. `prepare`
|
|
111
|
+
* is called before the frame's target is bound, with the **default framebuffer bound**, and must
|
|
112
|
+
* leave it bound. That is the same promise `draw` already makes about the program, the vertex
|
|
113
|
+
* array, the blend and depth state and the viewport — one step stronger, because a framebuffer
|
|
114
|
+
* left bound takes the whole frame with it rather than one draw. The asymmetry with WebGPU is real
|
|
115
|
+
* and is not papered over: there the ordering is a property of the encoder, and here it is a
|
|
116
|
+
* property of the caller's politeness.
|
|
117
|
+
*/
|
|
118
|
+
export type PrepareContext = {
|
|
119
|
+
readonly backend: 'webgl2';
|
|
120
|
+
readonly gl: WebGL2RenderingContext;
|
|
121
|
+
} | {
|
|
122
|
+
readonly backend: 'webgpu';
|
|
123
|
+
readonly encoder: GPUCommandEncoder;
|
|
124
|
+
};
|
|
125
|
+
export interface PassDefinition {
|
|
126
|
+
/** For diagnostics, and for the label a backend gives the work. */
|
|
127
|
+
readonly label: string;
|
|
128
|
+
/**
|
|
129
|
+
* Attachments this pass samples.
|
|
130
|
+
*
|
|
131
|
+
* **Reads only, and that asymmetry is deliberate.** What a pass *writes* is wherever the
|
|
132
|
+
* caller is drawing, and is not negotiable: every built-in verb writes the current target and
|
|
133
|
+
* the executor replays a flush's nodes into one open pass, so a node declaring some other
|
|
134
|
+
* write-set schedules as a separate pass that nothing opens. Letting a package name its writes
|
|
135
|
+
* would hand it the single declaration nothing can enforce, whose failure mode is a scene
|
|
136
|
+
* quietly losing draws.
|
|
137
|
+
*
|
|
138
|
+
* A read, by contrast, is exactly what the scheduler needs from outside: declare `mirrorColor`
|
|
139
|
+
* and the frame stops deriving a discard for an attachment this pass is about to sample.
|
|
140
|
+
*/
|
|
141
|
+
readonly reads?: readonly FrameResource[];
|
|
142
|
+
/**
|
|
143
|
+
* Fill a target the pass **owns**, once a frame, before anything opens the frame's own.
|
|
144
|
+
*
|
|
145
|
+
* **Shipped 2026-08-27, to the design this comment used to carry as a plan.** A package's own
|
|
146
|
+
* shadow map, blur pyramid or picking buffer: rendered here, sampled from `draw`. What a pass
|
|
147
|
+
* writes into the *frame* stays refused for the reason `reads` gives above, and a pass-owned
|
|
148
|
+
* target is outside that set by construction, which is what makes this declarable when a write
|
|
149
|
+
* to the frame is not. `createPassAttachment` builds one from the `PassDevice` this pass was
|
|
150
|
+
* handed at `init`; the pass releases it in its own `dispose`.
|
|
151
|
+
*
|
|
152
|
+
* **Called at one fixed point, for every pass that declares it, in registration order** — which
|
|
153
|
+
* must not become dependency ordering. Gate 1.2 withdrew that with a reason on record and this
|
|
154
|
+
* does not reintroduce it: registration order is an order, not a dependency graph, and a pass
|
|
155
|
+
* that needs another's output has to be registered after it and know that it does.
|
|
156
|
+
*
|
|
157
|
+
* **It costs nothing for a pass that does not declare it.** Both renderers keep a count of the
|
|
158
|
+
* passes that do and skip the whole step at zero, rather than walking the registry every frame
|
|
159
|
+
* to find out that nobody wants it.
|
|
160
|
+
*
|
|
161
|
+
* Allocates nothing, like `draw`. On WebGL2, leaves the default framebuffer bound — see
|
|
162
|
+
* `PrepareContext`, which is where that contract is written out.
|
|
163
|
+
*/
|
|
164
|
+
prepare?(ctx: PrepareContext): void;
|
|
165
|
+
/** Build pipelines, buffers and textures. Called once, when the pass is registered. */
|
|
166
|
+
init?(device: PassDevice): void;
|
|
167
|
+
/**
|
|
168
|
+
* Draw. Called once a frame, at the point the caller invoked `drawPass`.
|
|
169
|
+
*
|
|
170
|
+
* **Allocates nothing.** This is a per-frame hot path and the engine's own rule about them
|
|
171
|
+
* binds a contributor exactly as it binds the renderer.
|
|
172
|
+
*
|
|
173
|
+
* **Leaves the context as it found it.** On WebGL2 that means the program, the bound vertex
|
|
174
|
+
* array, the blend and depth state and the viewport; the renderer's own verbs assume what they
|
|
175
|
+
* left. On WebGPU the pass encoder's pipeline and bind groups are set by every verb before it
|
|
176
|
+
* draws, so only the viewport and the scissor persist and only those two matter.
|
|
177
|
+
*/
|
|
178
|
+
draw(ctx: PassContext): void;
|
|
179
|
+
/** Release what `init` built. Called on `unregisterPass` and when the renderer is disposed. */
|
|
180
|
+
dispose?(device: PassDevice): void;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* A registered pass, as the caller holds it.
|
|
184
|
+
*
|
|
185
|
+
* A slot and a generation packed into one number rather than a bare index, so a handle kept past
|
|
186
|
+
* `unregisterPass` answers nothing instead of answering to whoever took the slot next. A package
|
|
187
|
+
* that was torn down and goes on drawing reads as a leak and is a use-after-free.
|
|
188
|
+
*/
|
|
189
|
+
export type PassHandle = number;
|
|
190
|
+
export { drainRegistry, registerIn, unregisterIn } from './handleRegistry.ts';
|
|
191
|
+
/** The pass registry: the generic slot table with the definition type filled in. */
|
|
192
|
+
export type PassRegistry = HandleRegistry<PassDefinition>;
|
|
193
|
+
export declare function createPassRegistry(): PassRegistry;
|
|
194
|
+
/** The pass a handle names, or `undefined` if it names one that has been released. */
|
|
195
|
+
export declare function passAt(registry: PassRegistry, handle: PassHandle): PassDefinition | undefined;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createHandleRegistry, definitionAt } from './handleRegistry.js';
|
|
2
|
+
export { drainRegistry, registerIn, unregisterIn } from './handleRegistry.js';
|
|
3
|
+
export function createPassRegistry() {
|
|
4
|
+
return createHandleRegistry();
|
|
5
|
+
}
|
|
6
|
+
/** The pass a handle names, or `undefined` if it names one that has been released. */
|
|
7
|
+
export function passAt(registry, handle) {
|
|
8
|
+
return definitionAt(registry, handle);
|
|
9
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { PassDevice } from './pass.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A render target a contributed pass owns: it renders into this and samples it later.
|
|
4
|
+
*
|
|
5
|
+
* **The asymmetry with `PassDefinition.reads` is the whole design and is worth reading first.**
|
|
6
|
+
* What a pass *writes into the frame* is not negotiable and is refused: every built-in verb writes
|
|
7
|
+
* the current target, the executor replays a flush's nodes into one open pass, and a node
|
|
8
|
+
* declaring some other write-set would schedule as a pass nothing opens — so letting a package
|
|
9
|
+
* name its writes hands it the one declaration nothing can enforce. A target the pass *owns* is
|
|
10
|
+
* outside that set by construction, which is exactly what makes it declarable when a write to the
|
|
11
|
+
* frame is not.
|
|
12
|
+
*
|
|
13
|
+
* What it is for: a package's own shadow map, blur pyramid, picking buffer or intermediate. A
|
|
14
|
+
* `@driftengine/splats` pass wanting a depth prepass of its own, a UI package wanting a cached
|
|
15
|
+
* layer, an XR package wanting a per-eye scratch.
|
|
16
|
+
*
|
|
17
|
+
* **Two implementations behind one call**, the same split `PassDevice` itself takes, and for the
|
|
18
|
+
* same reason: a neutral device abstraction would be a second renderer API and would buy nothing,
|
|
19
|
+
* because a package's shader, buffer layout and pipeline differ per backend anyway. The union
|
|
20
|
+
* makes the branch explicit and typed.
|
|
21
|
+
*
|
|
22
|
+
* **Single-sampled, and that is a decision rather than an omission.** A multisampled pass-owned
|
|
23
|
+
* target needs a resolve target beside it and a decision about who allocates it, and no
|
|
24
|
+
* contributed pass has asked. *What that costs* is that a pass wanting antialiased geometry of its
|
|
25
|
+
* own supersamples instead. *What would reverse it* is a contributed pass that needs it, at which
|
|
26
|
+
* point `samples` joins the options and the resolve target is created with the colour one.
|
|
27
|
+
*
|
|
28
|
+
* **`dispose` is the pass's to call**, from its own `dispose`, and nothing calls it for you: the
|
|
29
|
+
* renderer knows what it created and this is not that. A target left undisposed is a texture the
|
|
30
|
+
* driver holds until the context goes.
|
|
31
|
+
*/
|
|
32
|
+
export interface PassAttachmentOptions {
|
|
33
|
+
/** For the label a backend gives the texture, and for diagnostics. */
|
|
34
|
+
readonly label?: string;
|
|
35
|
+
readonly width: number;
|
|
36
|
+
readonly height: number;
|
|
37
|
+
/**
|
|
38
|
+
* Eight bits a channel, or half floats.
|
|
39
|
+
*
|
|
40
|
+
* Two rather than the format zoo either API offers, because these are the two a pass drawing
|
|
41
|
+
* into its own target wants: a picking buffer or a cached layer is `rgba8`, and anything
|
|
42
|
+
* carrying light before a tone curve is `rgba16float`. A third would need a reason.
|
|
43
|
+
*/
|
|
44
|
+
readonly format?: 'rgba8' | 'rgba16float';
|
|
45
|
+
/** Whether to attach a depth buffer. Default true, because a pass with geometry wants one. */
|
|
46
|
+
readonly depth?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export type PassTarget = {
|
|
49
|
+
readonly width: number;
|
|
50
|
+
readonly height: number;
|
|
51
|
+
/**
|
|
52
|
+
* Free the GPU objects. Call it from the pass's own `dispose`, and call it before creating a
|
|
53
|
+
* replacement — **resizing is dispose-and-recreate** rather than a method, because a resize is
|
|
54
|
+
* not a per-frame path and a mutable target would be one more thing to keep consistent.
|
|
55
|
+
*/
|
|
56
|
+
dispose(): void;
|
|
57
|
+
} & ({
|
|
58
|
+
readonly backend: 'webgl2';
|
|
59
|
+
/** Bind this, draw, and bind `null` again. See `PassDefinition.prepare`. */
|
|
60
|
+
readonly framebuffer: WebGLFramebuffer;
|
|
61
|
+
readonly colour: WebGLTexture;
|
|
62
|
+
readonly depth: WebGLTexture | null;
|
|
63
|
+
} | {
|
|
64
|
+
readonly backend: 'webgpu';
|
|
65
|
+
readonly colour: GPUTexture;
|
|
66
|
+
readonly colourView: GPUTextureView;
|
|
67
|
+
readonly depth: GPUTexture | null;
|
|
68
|
+
readonly depthView: GPUTextureView | null;
|
|
69
|
+
/** What a pipeline drawing into this must declare. */
|
|
70
|
+
readonly format: GPUTextureFormat;
|
|
71
|
+
readonly depthFormat: GPUTextureFormat | null;
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Build one. Called from a pass's `init`, or from its `prepare` when the size has changed.
|
|
75
|
+
*
|
|
76
|
+
* **Restores the default framebuffer on WebGL2**, rather than whatever was bound before. Both
|
|
77
|
+
* points where a pass may call this — `init`, outside a frame, and `prepare`, whose contract is
|
|
78
|
+
* that the default framebuffer is bound on entry and on exit — have the default bound, so
|
|
79
|
+
* restoring to it is restoring what was there. Reading the binding back to restore it exactly
|
|
80
|
+
* would be a synchronous driver query in return for covering a case the contract forbids.
|
|
81
|
+
*
|
|
82
|
+
* Fails fast on a size that cannot work, which is the init-time rule: a zero-sized attachment is a
|
|
83
|
+
* framebuffer that is never complete, and a driver reports that as a black draw rather than an
|
|
84
|
+
* error.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createPassAttachment(device: PassDevice, options: PassAttachmentOptions): PassTarget;
|