@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,123 @@
|
|
|
1
|
+
/** An equirectangular image resampled onto the six faces of a cube. */
|
|
2
|
+
/**
|
|
3
|
+
* The direction a texel stands for, per face.
|
|
4
|
+
*
|
|
5
|
+
* `forward` is the face centre, `basisX` steps across a row and `basisY` down a column, matching
|
|
6
|
+
* `webgpu/probePass.ts`'s `PROBE_FACE_BASIS` exactly — the same table, and it is the same table
|
|
7
|
+
* because getting one sign wrong mirrors a single face, which projects to a plausible-looking
|
|
8
|
+
* wrong answer rather than to an error.
|
|
9
|
+
*
|
|
10
|
+
* **It lived in `irradianceSh.ts` until the spherical-harmonic path was retired**, and it moved
|
|
11
|
+
* here rather than being deleted with it: the capture is still a cube, so a loaded environment
|
|
12
|
+
* still has to know which direction each of its texels stands for. The prefilter's own copy went
|
|
13
|
+
* with the six-face loop, since an octahedral target has no faces at all.
|
|
14
|
+
*/
|
|
15
|
+
export const FACE_BASIS = [
|
|
16
|
+
{ forward: [1, 0, 0], basisX: [0, 0, -1], basisY: [0, -1, 0] },
|
|
17
|
+
{ forward: [-1, 0, 0], basisX: [0, 0, 1], basisY: [0, -1, 0] },
|
|
18
|
+
{ forward: [0, 1, 0], basisX: [1, 0, 0], basisY: [0, 0, 1] },
|
|
19
|
+
{ forward: [0, -1, 0], basisX: [1, 0, 0], basisY: [0, 0, -1] },
|
|
20
|
+
{ forward: [0, 0, 1], basisX: [1, 0, 0], basisY: [0, -1, 0] },
|
|
21
|
+
{ forward: [0, 0, -1], basisX: [-1, 0, 0], basisY: [0, -1, 0] },
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* Resample an equirectangular environment onto six cube faces.
|
|
25
|
+
*
|
|
26
|
+
* **Backend-neutral, and it produces exactly what the projection already takes.** The output is the
|
|
27
|
+
* shape a bake produces — six `size * size * 4` arrays of linear RGBA in
|
|
28
|
+
* cubemap order — so a loaded environment joins the captured path at the same place a bake does,
|
|
29
|
+
* and everything downstream of the cube is one implementation rather than two.
|
|
30
|
+
*
|
|
31
|
+
* **The face basis is imported rather than restated.** This is the fourth place that table would
|
|
32
|
+
* have appeared, and its failure mode is the one the 2026-08-17 rule is about: a mirrored face
|
|
33
|
+
* projects perfectly well onto a wrong answer, and the last time two copies disagreed it took
|
|
34
|
+
* projecting both backends' cubes onto one shared basis to find a sign in the linear Z band.
|
|
35
|
+
*
|
|
36
|
+
* ## The convention, stated because there is no universal one
|
|
37
|
+
*
|
|
38
|
+
* - **Row 0 is the zenith.** `v = acos(y) / pi`, so the top of the image is `+Y`. Inverting this
|
|
39
|
+
* puts the sky underfoot, and every surface is then lit from below with nothing in the picture
|
|
40
|
+
* to say why.
|
|
41
|
+
* - **The centre column is `-Z`.** `u = 0.5 + atan2(x, -z) / 2pi`, which is the engine's own camera
|
|
42
|
+
* convention — yaw 0 looks toward `-Z` and positive yaw turns toward `+X` — so `+X` lands three
|
|
43
|
+
* quarters of the way across. Choosing the mirror of this passes every brightness check and
|
|
44
|
+
* every sky-is-up check, and shows only as a reflection that turns the wrong way.
|
|
45
|
+
*
|
|
46
|
+
* **What it costs** is bilinear sampling per texel of the destination, once, at load. **What would
|
|
47
|
+
* make it wrong** is a source small enough that the cube is upsampling it — at that point the faces
|
|
48
|
+
* carry interpolation rather than image, and the honest answer is a smaller cube.
|
|
49
|
+
*/
|
|
50
|
+
export function equirectToCubeFaces(source, size) {
|
|
51
|
+
if (size <= 0)
|
|
52
|
+
throw new Error(`equirectToCubeFaces: a ${size}-texel face is not buildable`);
|
|
53
|
+
if (source.width <= 0 || source.height <= 0) {
|
|
54
|
+
throw new Error(`equirectToCubeFaces: a ${source.width} by ${source.height} source has nothing to sample`);
|
|
55
|
+
}
|
|
56
|
+
const faces = [];
|
|
57
|
+
for (let face = 0; face < FACE_BASIS.length; face++) {
|
|
58
|
+
const basis = FACE_BASIS[face];
|
|
59
|
+
const pixels = new Float32Array(size * size * 4);
|
|
60
|
+
if (basis === undefined) {
|
|
61
|
+
faces.push(pixels);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
for (let y = 0; y < size; y++) {
|
|
65
|
+
/* Texel centres in [-1, 1], the same mapping the projection uses, so the two agree exactly. */
|
|
66
|
+
const v = ((y + 0.5) / size) * 2 - 1;
|
|
67
|
+
for (let x = 0; x < size; x++) {
|
|
68
|
+
const u = ((x + 0.5) / size) * 2 - 1;
|
|
69
|
+
const dx = basis.forward[0] + basis.basisX[0] * u + basis.basisY[0] * v;
|
|
70
|
+
const dy = basis.forward[1] + basis.basisX[1] * u + basis.basisY[1] * v;
|
|
71
|
+
const dz = basis.forward[2] + basis.basisX[2] * u + basis.basisY[2] * v;
|
|
72
|
+
const inverse = 1 / Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
73
|
+
sampleEquirect(source, dx * inverse, dy * inverse, dz * inverse, pixels, (y * size + x) * 4);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
faces.push(pixels);
|
|
77
|
+
}
|
|
78
|
+
return faces;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* One direction, bilinearly sampled out of the source, written as RGBA at `out`.
|
|
82
|
+
*
|
|
83
|
+
* **Wrapped in longitude and clamped in latitude**, which is what the sphere actually does: the
|
|
84
|
+
* seam at `u = 1` meets `u = 0` and is a real join, while the pole is a point and has no neighbour
|
|
85
|
+
* above it. Clamping both would put a visible seam down the back of every environment; wrapping
|
|
86
|
+
* both would sample the far side of the sky at the zenith.
|
|
87
|
+
*/
|
|
88
|
+
function sampleEquirect(source, dx, dy, dz, out, at) {
|
|
89
|
+
const { width, height, data } = source;
|
|
90
|
+
const u = 0.5 + Math.atan2(dx, -dz) / (2 * Math.PI);
|
|
91
|
+
const v = Math.acos(Math.min(1, Math.max(-1, dy))) / Math.PI;
|
|
92
|
+
/* Texel centres again, so a sample at the exact centre of a texel reads that texel and no other. */
|
|
93
|
+
const fx = u * width - 0.5;
|
|
94
|
+
const fy = v * height - 0.5;
|
|
95
|
+
const x0 = Math.floor(fx);
|
|
96
|
+
const y0 = Math.floor(fy);
|
|
97
|
+
const tx = fx - x0;
|
|
98
|
+
const ty = fy - y0;
|
|
99
|
+
const xa = wrap(x0, width);
|
|
100
|
+
const xb = wrap(x0 + 1, width);
|
|
101
|
+
const ya = clamp(y0, height);
|
|
102
|
+
const yb = clamp(y0 + 1, height);
|
|
103
|
+
for (let channel = 0; channel < 3; channel++) {
|
|
104
|
+
const aa = data[(ya * width + xa) * 3 + channel] ?? 0;
|
|
105
|
+
const ba = data[(ya * width + xb) * 3 + channel] ?? 0;
|
|
106
|
+
const ab = data[(yb * width + xa) * 3 + channel] ?? 0;
|
|
107
|
+
const bb = data[(yb * width + xb) * 3 + channel] ?? 0;
|
|
108
|
+
const top = aa + (ba - aa) * tx;
|
|
109
|
+
const bottom = ab + (bb - ab) * tx;
|
|
110
|
+
out[at + channel] = top + (bottom - top) * ty;
|
|
111
|
+
}
|
|
112
|
+
/* One, because a cube sampler reads four channels whatever an environment meant by the fourth. */
|
|
113
|
+
out[at + 3] = 1;
|
|
114
|
+
}
|
|
115
|
+
/** Longitude wraps: the image's left edge is its right edge. */
|
|
116
|
+
function wrap(value, extent) {
|
|
117
|
+
const wrapped = value % extent;
|
|
118
|
+
return wrapped < 0 ? wrapped + extent : wrapped;
|
|
119
|
+
}
|
|
120
|
+
/** Latitude clamps: there is nothing above the zenith to blend with. */
|
|
121
|
+
function clamp(value, extent) {
|
|
122
|
+
return value < 0 ? 0 : value >= extent ? extent - 1 : value;
|
|
123
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A flock's static geometry, held once so both backends draw the same bird.
|
|
3
|
+
*
|
|
4
|
+
* Two triangles a bird, a body quad split into two wings, with a per-vertex weight that is 1 at
|
|
5
|
+
* a wingtip and 0 at the body so only the tips beat. Every bird's path is computed in the vertex
|
|
6
|
+
* shader from its index and the clock, so this is uploaded once and the frame loop does nothing.
|
|
7
|
+
*
|
|
8
|
+
* Shared rather than restated for the reason `waterGrid.ts` was extracted: a second corner table
|
|
9
|
+
* is a second bird, and a mesh that differs by a wing between backends is not something the
|
|
10
|
+
* parity gate can attribute.
|
|
11
|
+
*/
|
|
12
|
+
/** Corner positions, in wingspans: tip, body front, body back. */
|
|
13
|
+
export declare const FLOCK_CORNERS: readonly (readonly [number, number])[];
|
|
14
|
+
/** 1 at a wingtip, 0 at the body, so only the tips beat. */
|
|
15
|
+
export declare const FLOCK_WING: readonly number[];
|
|
16
|
+
/** The three static attribute streams a flock is drawn from. */
|
|
17
|
+
export interface FlockGeometry {
|
|
18
|
+
readonly corners: Float32Array;
|
|
19
|
+
readonly wings: Float32Array;
|
|
20
|
+
readonly indices: Float32Array;
|
|
21
|
+
readonly vertexCount: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function buildFlockGeometry(count: number): FlockGeometry;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A flock's static geometry, held once so both backends draw the same bird.
|
|
3
|
+
*
|
|
4
|
+
* Two triangles a bird, a body quad split into two wings, with a per-vertex weight that is 1 at
|
|
5
|
+
* a wingtip and 0 at the body so only the tips beat. Every bird's path is computed in the vertex
|
|
6
|
+
* shader from its index and the clock, so this is uploaded once and the frame loop does nothing.
|
|
7
|
+
*
|
|
8
|
+
* Shared rather than restated for the reason `waterGrid.ts` was extracted: a second corner table
|
|
9
|
+
* is a second bird, and a mesh that differs by a wing between backends is not something the
|
|
10
|
+
* parity gate can attribute.
|
|
11
|
+
*/
|
|
12
|
+
/** Corner positions, in wingspans: tip, body front, body back. */
|
|
13
|
+
export const FLOCK_CORNERS = [
|
|
14
|
+
[-1, 0],
|
|
15
|
+
[0, -0.35],
|
|
16
|
+
[0, 0.35],
|
|
17
|
+
[1, 0],
|
|
18
|
+
[0, 0.35],
|
|
19
|
+
[0, -0.35],
|
|
20
|
+
];
|
|
21
|
+
/** 1 at a wingtip, 0 at the body, so only the tips beat. */
|
|
22
|
+
export const FLOCK_WING = [1, 0, 0, 1, 0, 0];
|
|
23
|
+
export function buildFlockGeometry(count) {
|
|
24
|
+
if (count <= 0)
|
|
25
|
+
throw new Error('A flock needs at least one bird.');
|
|
26
|
+
const perBird = FLOCK_CORNERS.length;
|
|
27
|
+
const corners = new Float32Array(count * perBird * 2);
|
|
28
|
+
const wings = new Float32Array(count * perBird);
|
|
29
|
+
const indices = new Float32Array(count * perBird);
|
|
30
|
+
let c = 0;
|
|
31
|
+
let w = 0;
|
|
32
|
+
for (let bird = 0; bird < count; bird++) {
|
|
33
|
+
for (let v = 0; v < perBird; v++) {
|
|
34
|
+
const corner = FLOCK_CORNERS[v];
|
|
35
|
+
corners[c++] = corner[0];
|
|
36
|
+
corners[c++] = corner[1];
|
|
37
|
+
wings[w] = FLOCK_WING[v] ?? 0;
|
|
38
|
+
indices[w] = bird;
|
|
39
|
+
w++;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { corners, wings, indices, vertexCount: count * perBird };
|
|
43
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { FrameView } from './frameView.ts';
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Ambient sky life. Entirely GPU-side: the geometry is uploaded once and every
|
|
5
|
+
* bird's path is computed in the vertex shader from its index and the clock.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately not a simulation. Flocking behaviour would be CPU work every
|
|
8
|
+
* frame, forever, for something nobody looks at directly — and the thing it
|
|
9
|
+
* actually buys, a world that carries on without the player, comes from motion
|
|
10
|
+
* and silhouette rather than from correct boids.
|
|
11
|
+
*/
|
|
12
|
+
export interface FlockParams {
|
|
13
|
+
center: Vec3;
|
|
14
|
+
radius: number;
|
|
15
|
+
height: number;
|
|
16
|
+
count: number;
|
|
17
|
+
/** Metres per second along the orbit. */
|
|
18
|
+
speed: number;
|
|
19
|
+
/**
|
|
20
|
+
* Half the wingspan, in metres: a bird measures `2 * scale` from tip to tip.
|
|
21
|
+
*
|
|
22
|
+
* It said "wingspan, roughly", and it is out by a factor of two, which is not roughly.
|
|
23
|
+
* The corner table below puts the tips at plus and minus one before this multiplies
|
|
24
|
+
* them, so a caller asking for a 1.5 m bird is handed a 3 m one.
|
|
25
|
+
*/
|
|
26
|
+
scale: number;
|
|
27
|
+
}
|
|
28
|
+
export declare class FlockRenderer {
|
|
29
|
+
private readonly program;
|
|
30
|
+
private readonly uniforms;
|
|
31
|
+
private readonly vao;
|
|
32
|
+
private readonly buffers;
|
|
33
|
+
private readonly vertexCount;
|
|
34
|
+
constructor(gl: WebGL2RenderingContext, count: number);
|
|
35
|
+
draw(gl: WebGL2RenderingContext, camera: FrameView, timeSeconds: number, params: FlockParams, tint: Vec3, windX?: number, windZ?: number): void;
|
|
36
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
37
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { compileProgram, uniformLocations } from './shader.js';
|
|
2
|
+
import { FLOCK_FRAG, FLOCK_VERT } from './shaders/flock.js';
|
|
3
|
+
import { buildFlockGeometry } from './flockGeometry.js';
|
|
4
|
+
export class FlockRenderer {
|
|
5
|
+
program;
|
|
6
|
+
uniforms;
|
|
7
|
+
vao;
|
|
8
|
+
buffers = [];
|
|
9
|
+
vertexCount;
|
|
10
|
+
constructor(gl, count) {
|
|
11
|
+
this.program = compileProgram(gl, FLOCK_VERT, FLOCK_FRAG, 'flock');
|
|
12
|
+
this.uniforms = uniformLocations(gl, this.program, 'flockRenderer');
|
|
13
|
+
/* Built in `flockGeometry.ts`, which is also where the count is validated. */
|
|
14
|
+
const geometry = buildFlockGeometry(count);
|
|
15
|
+
const { corners, wings, indices } = geometry;
|
|
16
|
+
this.vertexCount = geometry.vertexCount;
|
|
17
|
+
const vao = gl.createVertexArray();
|
|
18
|
+
if (vao === null)
|
|
19
|
+
throw new Error('FlockRenderer: createVertexArray failed');
|
|
20
|
+
this.vao = vao;
|
|
21
|
+
gl.bindVertexArray(vao);
|
|
22
|
+
const attach = (data, location, size) => {
|
|
23
|
+
const buffer = gl.createBuffer();
|
|
24
|
+
if (buffer === null)
|
|
25
|
+
throw new Error('FlockRenderer: createBuffer failed');
|
|
26
|
+
this.buffers.push(buffer);
|
|
27
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
28
|
+
gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
|
|
29
|
+
gl.enableVertexAttribArray(location);
|
|
30
|
+
gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
|
|
31
|
+
};
|
|
32
|
+
attach(corners, 0, 2);
|
|
33
|
+
attach(wings, 1, 1);
|
|
34
|
+
attach(indices, 2, 1);
|
|
35
|
+
gl.bindVertexArray(null);
|
|
36
|
+
}
|
|
37
|
+
draw(gl, camera, timeSeconds, params, tint, windX = 0, windZ = 0) {
|
|
38
|
+
const u = this.uniforms;
|
|
39
|
+
gl.useProgram(this.program);
|
|
40
|
+
gl.uniformMatrix4fv(u['uViewProj'] ?? null, false, camera.viewProjection);
|
|
41
|
+
/*
|
|
42
|
+
* No `uCameraPos` here, and the shader no longer declares one. It fed the banking that
|
|
43
|
+
* turned a wing plane toward the viewer, and that was reverted with the rest of the flock
|
|
44
|
+
* work when the shape being reported turned out to be the lighthouse beam rather than a
|
|
45
|
+
* bird. What was left behind was a declaration nothing read and an upload every frame to a
|
|
46
|
+
* location that had stopped existing. See AGENTS.md, 2026-08-10.
|
|
47
|
+
*/
|
|
48
|
+
gl.uniform3fv(u['uCenter'] ?? null, params.center);
|
|
49
|
+
gl.uniform1f(u['uRadius'] ?? null, params.radius);
|
|
50
|
+
gl.uniform1f(u['uHeight'] ?? null, params.height);
|
|
51
|
+
gl.uniform1f(u['uSpeed'] ?? null, params.speed);
|
|
52
|
+
gl.uniform1f(u['uCount'] ?? null, params.count);
|
|
53
|
+
gl.uniform1f(u['uScale'] ?? null, params.scale);
|
|
54
|
+
gl.uniform1f(u['uTime'] ?? null, timeSeconds);
|
|
55
|
+
gl.uniform3fv(u['uTint'] ?? null, tint);
|
|
56
|
+
gl.uniform2f(u['uWind'] ?? null, windX, windZ);
|
|
57
|
+
// Birds are flat and seen from both sides as they bank.
|
|
58
|
+
gl.disable(gl.CULL_FACE);
|
|
59
|
+
gl.bindVertexArray(this.vao);
|
|
60
|
+
gl.drawArrays(gl.TRIANGLES, 0, this.vertexCount);
|
|
61
|
+
gl.bindVertexArray(null);
|
|
62
|
+
gl.enable(gl.CULL_FACE);
|
|
63
|
+
}
|
|
64
|
+
dispose(gl) {
|
|
65
|
+
for (const buffer of this.buffers)
|
|
66
|
+
gl.deleteBuffer(buffer);
|
|
67
|
+
gl.deleteVertexArray(this.vao);
|
|
68
|
+
gl.deleteProgram(this.program);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a frame's draws are recorded, without allocating.
|
|
3
|
+
*
|
|
4
|
+
* A recorder is exactly the shape that wants an object per draw, and `AGENTS.md` forbids
|
|
5
|
+
* allocating while a frame is running. So a node is six integers in one `Int32Array` and a
|
|
6
|
+
* draw writes into it and returns: nothing constructed, nothing captured by a closure.
|
|
7
|
+
* `InstanceData` and the particle pools already work this way, so the pattern is established
|
|
8
|
+
* here rather than imported.
|
|
9
|
+
*
|
|
10
|
+
* Growth happens, and it happens where allocation is legal. A frame that records past
|
|
11
|
+
* capacity must not silently drop a draw — that is the failure this is designed against — so
|
|
12
|
+
* it grows, records `highWater`, and the next frame starts large enough for what the last one
|
|
13
|
+
* needed.
|
|
14
|
+
*/
|
|
15
|
+
export declare const NODE_STRIDE = 6;
|
|
16
|
+
export interface Arena {
|
|
17
|
+
nodes: Int32Array;
|
|
18
|
+
count: number;
|
|
19
|
+
/** The most nodes any frame has recorded, so growth converges instead of repeating. */
|
|
20
|
+
highWater: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function createArena(capacity: number): Arena;
|
|
23
|
+
/** Empty the arena for a new frame. Keeps the storage; that is the whole point. */
|
|
24
|
+
export declare function resetArena(arena: Arena): void;
|
|
25
|
+
export declare function nodeCount(arena: Arena): number;
|
|
26
|
+
/** Record one node and return its index. */
|
|
27
|
+
export declare function recordNode(arena: Arena, verb: number, reads: number, writes: number, state: number, matrix: number): number;
|
|
28
|
+
export declare function nodeVerb(arena: Arena, at: number): number;
|
|
29
|
+
export declare function nodeReads(arena: Arena, at: number): number;
|
|
30
|
+
export declare function nodeWrites(arena: Arena, at: number): number;
|
|
31
|
+
export declare function nodeState(arena: Arena, at: number): number;
|
|
32
|
+
export declare function nodeMatrix(arena: Arena, at: number): number;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a frame's draws are recorded, without allocating.
|
|
3
|
+
*
|
|
4
|
+
* A recorder is exactly the shape that wants an object per draw, and `AGENTS.md` forbids
|
|
5
|
+
* allocating while a frame is running. So a node is six integers in one `Int32Array` and a
|
|
6
|
+
* draw writes into it and returns: nothing constructed, nothing captured by a closure.
|
|
7
|
+
* `InstanceData` and the particle pools already work this way, so the pattern is established
|
|
8
|
+
* here rather than imported.
|
|
9
|
+
*
|
|
10
|
+
* Growth happens, and it happens where allocation is legal. A frame that records past
|
|
11
|
+
* capacity must not silently drop a draw — that is the failure this is designed against — so
|
|
12
|
+
* it grows, records `highWater`, and the next frame starts large enough for what the last one
|
|
13
|
+
* needed.
|
|
14
|
+
*/
|
|
15
|
+
export const NODE_STRIDE = 6;
|
|
16
|
+
const VERB = 0;
|
|
17
|
+
const READS = 1;
|
|
18
|
+
const WRITES = 2;
|
|
19
|
+
const STATE = 3;
|
|
20
|
+
const MATRIX = 4;
|
|
21
|
+
export function createArena(capacity) {
|
|
22
|
+
return { nodes: new Int32Array(capacity * NODE_STRIDE), count: 0, highWater: 0 };
|
|
23
|
+
}
|
|
24
|
+
/** Empty the arena for a new frame. Keeps the storage; that is the whole point. */
|
|
25
|
+
export function resetArena(arena) {
|
|
26
|
+
arena.count = 0;
|
|
27
|
+
}
|
|
28
|
+
export function nodeCount(arena) {
|
|
29
|
+
return arena.count;
|
|
30
|
+
}
|
|
31
|
+
/** Record one node and return its index. */
|
|
32
|
+
export function recordNode(arena, verb, reads, writes, state, matrix) {
|
|
33
|
+
const at = arena.count;
|
|
34
|
+
const need = (at + 1) * NODE_STRIDE;
|
|
35
|
+
if (need > arena.nodes.length) {
|
|
36
|
+
const grown = new Int32Array(Math.max(need, arena.nodes.length * 2));
|
|
37
|
+
grown.set(arena.nodes);
|
|
38
|
+
arena.nodes = grown;
|
|
39
|
+
}
|
|
40
|
+
const base = at * NODE_STRIDE;
|
|
41
|
+
arena.nodes[base + VERB] = verb;
|
|
42
|
+
arena.nodes[base + READS] = reads;
|
|
43
|
+
arena.nodes[base + WRITES] = writes;
|
|
44
|
+
arena.nodes[base + STATE] = state;
|
|
45
|
+
arena.nodes[base + MATRIX] = matrix;
|
|
46
|
+
arena.count = at + 1;
|
|
47
|
+
if (arena.count > arena.highWater)
|
|
48
|
+
arena.highWater = arena.count;
|
|
49
|
+
return at;
|
|
50
|
+
}
|
|
51
|
+
export function nodeVerb(arena, at) {
|
|
52
|
+
return arena.nodes[at * NODE_STRIDE + VERB] ?? 0;
|
|
53
|
+
}
|
|
54
|
+
export function nodeReads(arena, at) {
|
|
55
|
+
return arena.nodes[at * NODE_STRIDE + READS] ?? 0;
|
|
56
|
+
}
|
|
57
|
+
export function nodeWrites(arena, at) {
|
|
58
|
+
return arena.nodes[at * NODE_STRIDE + WRITES] ?? 0;
|
|
59
|
+
}
|
|
60
|
+
export function nodeState(arena, at) {
|
|
61
|
+
return arena.nodes[at * NODE_STRIDE + STATE] ?? 0;
|
|
62
|
+
}
|
|
63
|
+
export function nodeMatrix(arena, at) {
|
|
64
|
+
return arena.nodes[at * NODE_STRIDE + MATRIX] ?? 0;
|
|
65
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frame graph's pure half: what a frame touches, how a draw is recorded, and how records
|
|
3
|
+
* become passes.
|
|
4
|
+
*
|
|
5
|
+
* Nothing here imports WebGL or WebGPU. The scheduler is arithmetic, which is what lets the
|
|
6
|
+
* only novel logic in the design be proven by assertion before any renderer is rewritten
|
|
7
|
+
* around it.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately not on the package barrel. Nothing outside `render/` may reach these yet;
|
|
10
|
+
* Phase B is what decides their public shape.
|
|
11
|
+
*/
|
|
12
|
+
export type { FrameResource } from './resources.ts';
|
|
13
|
+
export { FRAME_RESOURCES, RESOURCE_COUNT, maskOf, namesIn, resourceBit } from './resources.ts';
|
|
14
|
+
export type { Arena } from './arena.ts';
|
|
15
|
+
export { NODE_STRIDE, createArena, nodeCount, nodeMatrix, nodeReads, nodeState, nodeVerb, nodeWrites, recordNode, resetArena, } from './arena.ts';
|
|
16
|
+
export type { ScheduledPass } from './schedule.ts';
|
|
17
|
+
export { schedule } from './schedule.ts';
|
|
18
|
+
export { keptNodes, scratchFor } from './replay.ts';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { FRAME_RESOURCES, RESOURCE_COUNT, maskOf, namesIn, resourceBit } from './resources.js';
|
|
2
|
+
export { NODE_STRIDE, createArena, nodeCount, nodeMatrix, nodeReads, nodeState, nodeVerb, nodeWrites, recordNode, resetArena, } from './arena.js';
|
|
3
|
+
export { schedule } from './schedule.js';
|
|
4
|
+
export { keptNodes, scratchFor } from './replay.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ScheduledPass } from './schedule.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The nodes a schedule kept, in the order they are to be replayed.
|
|
4
|
+
*
|
|
5
|
+
* **Separate from the executor because it is the part with an answer to check.** A pass the
|
|
6
|
+
* scheduler dropped writes something nothing reads, and replaying its nodes anyway is what made
|
|
7
|
+
* every capture in the verb migration unable to fail — but no real frame drops a pass today, so
|
|
8
|
+
* the behaviour has nowhere to be observed from inside a renderer test. Here it has.
|
|
9
|
+
*
|
|
10
|
+
* Order inside a pass is the caller's order and is never changed, for the reason `schedule`
|
|
11
|
+
* gives: blending and depth make *after* different from *before*.
|
|
12
|
+
*
|
|
13
|
+
* Allocates nothing. `out` is the caller's, sized with the arena, and the return value says how
|
|
14
|
+
* many of its entries were filled.
|
|
15
|
+
*/
|
|
16
|
+
export declare function keptNodes(passes: ScheduledPass[], count: number, out: Int32Array): number;
|
|
17
|
+
/**
|
|
18
|
+
* A scratch array big enough for `needed` nodes, reusing the one given where it already fits.
|
|
19
|
+
*
|
|
20
|
+
* **`keptNodes` says the caller's array is "sized with the arena", and this is what makes that
|
|
21
|
+
* true.** It was not: the renderer sized its scratch with `MAX_DRAWS_PER_FRAME` while the arena
|
|
22
|
+
* it reads reallocates at twice its capacity whenever a frame outgrows it. `keptNodes` then
|
|
23
|
+
* stopped at `out.length` and the tail of the frame's passes was never replayed — no warning, no
|
|
24
|
+
* error, and a plausible picture missing whatever those passes drew.
|
|
25
|
+
*
|
|
26
|
+
* It was reachable with the draw ring nowhere near full, because a node is recorded per **verb**
|
|
27
|
+
* rather than per draw: overlays, scatter, plumes and text each record one.
|
|
28
|
+
*
|
|
29
|
+
* **What it costs** is a single allocation on the frame that first outgrows the scratch and none
|
|
30
|
+
* afterwards, because the caller keeps what comes back. **What would make it wrong** is a caller
|
|
31
|
+
* that discards the result and calls this again per frame, which is an allocation in a hot path;
|
|
32
|
+
* the arena's own doubling is what keeps the growth finite rather than per-frame.
|
|
33
|
+
*/
|
|
34
|
+
export declare function scratchFor(scratch: Int32Array, needed: number): Int32Array;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The nodes a schedule kept, in the order they are to be replayed.
|
|
3
|
+
*
|
|
4
|
+
* **Separate from the executor because it is the part with an answer to check.** A pass the
|
|
5
|
+
* scheduler dropped writes something nothing reads, and replaying its nodes anyway is what made
|
|
6
|
+
* every capture in the verb migration unable to fail — but no real frame drops a pass today, so
|
|
7
|
+
* the behaviour has nowhere to be observed from inside a renderer test. Here it has.
|
|
8
|
+
*
|
|
9
|
+
* Order inside a pass is the caller's order and is never changed, for the reason `schedule`
|
|
10
|
+
* gives: blending and depth make *after* different from *before*.
|
|
11
|
+
*
|
|
12
|
+
* Allocates nothing. `out` is the caller's, sized with the arena, and the return value says how
|
|
13
|
+
* many of its entries were filled.
|
|
14
|
+
*/
|
|
15
|
+
export function keptNodes(passes, count, out) {
|
|
16
|
+
let at = 0;
|
|
17
|
+
for (let i = 0; i < count; i += 1) {
|
|
18
|
+
const pass = passes[i];
|
|
19
|
+
if (pass === undefined)
|
|
20
|
+
break;
|
|
21
|
+
const end = pass.first + pass.count;
|
|
22
|
+
for (let node = pass.first; node < end && at < out.length; node += 1) {
|
|
23
|
+
out[at] = node;
|
|
24
|
+
at += 1;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return at;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A scratch array big enough for `needed` nodes, reusing the one given where it already fits.
|
|
31
|
+
*
|
|
32
|
+
* **`keptNodes` says the caller's array is "sized with the arena", and this is what makes that
|
|
33
|
+
* true.** It was not: the renderer sized its scratch with `MAX_DRAWS_PER_FRAME` while the arena
|
|
34
|
+
* it reads reallocates at twice its capacity whenever a frame outgrows it. `keptNodes` then
|
|
35
|
+
* stopped at `out.length` and the tail of the frame's passes was never replayed — no warning, no
|
|
36
|
+
* error, and a plausible picture missing whatever those passes drew.
|
|
37
|
+
*
|
|
38
|
+
* It was reachable with the draw ring nowhere near full, because a node is recorded per **verb**
|
|
39
|
+
* rather than per draw: overlays, scatter, plumes and text each record one.
|
|
40
|
+
*
|
|
41
|
+
* **What it costs** is a single allocation on the frame that first outgrows the scratch and none
|
|
42
|
+
* afterwards, because the caller keeps what comes back. **What would make it wrong** is a caller
|
|
43
|
+
* that discards the result and calls this again per frame, which is an allocation in a hot path;
|
|
44
|
+
* the arena's own doubling is what keeps the growth finite rather than per-frame.
|
|
45
|
+
*/
|
|
46
|
+
export function scratchFor(scratch, needed) {
|
|
47
|
+
return scratch.length >= needed ? scratch : new Int32Array(needed);
|
|
48
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every attachment a frame can read or write, as a fixed table.
|
|
3
|
+
*
|
|
4
|
+
* Fixed rather than allocated, because this frame's composition is fixed: the same shadow
|
|
5
|
+
* cascades, the same scene target, the same bloom chain, every frame. The transient allocator
|
|
6
|
+
* and resource aliasing a frame graph is famous for would be machinery with no case here to
|
|
7
|
+
* serve.
|
|
8
|
+
*
|
|
9
|
+
* A mask is a `number` and not a bitset object. Thirty-one bits is more than the table needs,
|
|
10
|
+
* a number compares and combines in one instruction, and the scheduler does this per node.
|
|
11
|
+
*/
|
|
12
|
+
export declare const FRAME_RESOURCES: readonly ['sceneColor', 'sceneDepth', 'canvas', 'cascade0', 'cascade1', 'cascade2', 'pointShadows', 'probeCube', 'mirrorColor', 'mirrorDepth', 'bloomChain', 'aoTarget', 'depthSnapshot', 'inset'];
|
|
13
|
+
export type FrameResource = (typeof FRAME_RESOURCES)[number];
|
|
14
|
+
export declare const RESOURCE_COUNT: 14;
|
|
15
|
+
/** The single bit that stands for one resource. */
|
|
16
|
+
export declare function resourceBit(name: FrameResource): number;
|
|
17
|
+
/** A mask of the named resources, for declaring what a node reads or writes. */
|
|
18
|
+
export declare function maskOf(...names: FrameResource[]): number;
|
|
19
|
+
/**
|
|
20
|
+
* The resources a mask names.
|
|
21
|
+
*
|
|
22
|
+
* For diagnostics and tests rather than for the frame: it allocates an array, so nothing on
|
|
23
|
+
* the per-frame path may call it.
|
|
24
|
+
*/
|
|
25
|
+
export declare function namesIn(mask: number): FrameResource[];
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every attachment a frame can read or write, as a fixed table.
|
|
3
|
+
*
|
|
4
|
+
* Fixed rather than allocated, because this frame's composition is fixed: the same shadow
|
|
5
|
+
* cascades, the same scene target, the same bloom chain, every frame. The transient allocator
|
|
6
|
+
* and resource aliasing a frame graph is famous for would be machinery with no case here to
|
|
7
|
+
* serve.
|
|
8
|
+
*
|
|
9
|
+
* A mask is a `number` and not a bitset object. Thirty-one bits is more than the table needs,
|
|
10
|
+
* a number compares and combines in one instruction, and the scheduler does this per node.
|
|
11
|
+
*/
|
|
12
|
+
export const FRAME_RESOURCES = [
|
|
13
|
+
'sceneColor',
|
|
14
|
+
'sceneDepth',
|
|
15
|
+
'canvas',
|
|
16
|
+
'cascade0',
|
|
17
|
+
'cascade1',
|
|
18
|
+
'cascade2',
|
|
19
|
+
/*
|
|
20
|
+
* The twelve point-shadow cubes are one bit, not twelve. They are baked together and
|
|
21
|
+
* sampled together, and nothing in the frame reads one without the others, so twelve bits
|
|
22
|
+
* would be twelve ways to express one fact — and twelve chances for a node to declare a
|
|
23
|
+
* subset that does not correspond to anything the renderer can actually do.
|
|
24
|
+
*/
|
|
25
|
+
'pointShadows',
|
|
26
|
+
'probeCube',
|
|
27
|
+
'mirrorColor',
|
|
28
|
+
'mirrorDepth',
|
|
29
|
+
'bloomChain',
|
|
30
|
+
'aoTarget',
|
|
31
|
+
'depthSnapshot',
|
|
32
|
+
'inset',
|
|
33
|
+
];
|
|
34
|
+
export const RESOURCE_COUNT = FRAME_RESOURCES.length;
|
|
35
|
+
const BITS = new Map(FRAME_RESOURCES.map((name, i) => [name, 1 << i]));
|
|
36
|
+
/** The single bit that stands for one resource. */
|
|
37
|
+
export function resourceBit(name) {
|
|
38
|
+
return BITS.get(name) ?? 0;
|
|
39
|
+
}
|
|
40
|
+
/** A mask of the named resources, for declaring what a node reads or writes. */
|
|
41
|
+
export function maskOf(...names) {
|
|
42
|
+
let mask = 0;
|
|
43
|
+
for (const name of names)
|
|
44
|
+
mask |= resourceBit(name);
|
|
45
|
+
return mask;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The resources a mask names.
|
|
49
|
+
*
|
|
50
|
+
* For diagnostics and tests rather than for the frame: it allocates an array, so nothing on
|
|
51
|
+
* the per-frame path may call it.
|
|
52
|
+
*/
|
|
53
|
+
export function namesIn(mask) {
|
|
54
|
+
return FRAME_RESOURCES.filter((_, i) => (mask & (1 << i)) !== 0);
|
|
55
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Arena } from './arena.ts';
|
|
2
|
+
/**
|
|
3
|
+
* One render pass: a contiguous run of nodes sharing a write-set, and what happens to the
|
|
4
|
+
* attachments at each end of it.
|
|
5
|
+
*/
|
|
6
|
+
export interface ScheduledPass {
|
|
7
|
+
/** The resources this pass writes. */
|
|
8
|
+
writes: number;
|
|
9
|
+
/** Index of the first node in the run. */
|
|
10
|
+
first: number;
|
|
11
|
+
/** How many nodes the run holds. */
|
|
12
|
+
count: number;
|
|
13
|
+
/** Resources this pass clears rather than loads. */
|
|
14
|
+
clear: number;
|
|
15
|
+
/** Resources safe to discard at the end, because nothing later in the frame reads them. */
|
|
16
|
+
discard: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Group a frame's nodes into passes, and derive what happens to each attachment.
|
|
20
|
+
*
|
|
21
|
+
* **The order is the caller's and is never changed.** Blending and depth make *after*
|
|
22
|
+
* different from *before*, so an immediate-mode API's draw order carries meaning no
|
|
23
|
+
* dependency analysis may override. All this does is group adjacent compatible nodes and work
|
|
24
|
+
* out load and store from the reads that follow.
|
|
25
|
+
*
|
|
26
|
+
* **`liveOut` is what must survive this schedule**, and it is a parameter rather than a
|
|
27
|
+
* constant because the scheduler does not necessarily see the whole frame. During the
|
|
28
|
+
* migration a flush schedules only what has accumulated, so a resource written here may be
|
|
29
|
+
* read after the next flush — invisible from inside this call. The caller knows what is still
|
|
30
|
+
* live; this cannot work it out. The canvas belongs in it always, because nothing ever reads
|
|
31
|
+
* the canvas (it is presented, not sampled) and a purely read-driven rule would conclude it
|
|
32
|
+
* is safe to throw away.
|
|
33
|
+
*
|
|
34
|
+
* Allocates nothing: `out` is supplied by the caller and reused across frames, and the return
|
|
35
|
+
* value says how many of its entries were filled.
|
|
36
|
+
*/
|
|
37
|
+
export declare function schedule(arena: Arena, clearMask: number, liveOut: number, out: ScheduledPass[]): number;
|