@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,496 @@
|
|
|
1
|
+
import type { Bounds } from '../../math/bounds.ts';
|
|
2
|
+
import type { Vec3 } from '../../math/color.ts';
|
|
3
|
+
import type { ReadonlyMat4 } from 'gl-matrix';
|
|
4
|
+
import type { MeshData } from '../mesh.ts';
|
|
5
|
+
import type { ProbeBakeOptions } from '../reflectionProbe.ts';
|
|
6
|
+
import type { Renderer, TranslucentMeshOptions } from './webgl2/renderer.ts';
|
|
7
|
+
import type { MeshInstances } from '../instances.ts';
|
|
8
|
+
import type { SurfaceMaterial } from '../surfaceTexture.ts';
|
|
9
|
+
import type { TextStyle } from '../textLayout.ts';
|
|
10
|
+
import type { SdfFont } from '../sdfFont.ts';
|
|
11
|
+
import type { SdfTextStyle } from '../sdfTextLayout.ts';
|
|
12
|
+
import type { FrameTimer } from './timer.ts';
|
|
13
|
+
/**
|
|
14
|
+
* Geometry on the device, as something a consumer holds and hands back.
|
|
15
|
+
*
|
|
16
|
+
* **Opaque on purpose, and the opacity is forced rather than chosen.** `Mesh` has private
|
|
17
|
+
* fields, which makes it *nominal* in TypeScript: no other type can ever satisfy it, however
|
|
18
|
+
* identical its shape, so a WebGPU mesh cannot be a `Mesh` and the shared surface cannot
|
|
19
|
+
* name one. That is not a flaw in `Mesh` — the privacy is what keeps `WebGLBuffer`s out of
|
|
20
|
+
* reach — it just means the surface has to describe the handle rather than the object.
|
|
21
|
+
*
|
|
22
|
+
* A consumer receives one from `createMesh` and passes it to `drawMesh`. There is nothing to
|
|
23
|
+
* read on it, which is the point: the backend that made it is the only thing that can.
|
|
24
|
+
*/
|
|
25
|
+
export interface MeshHandle {
|
|
26
|
+
readonly bounds: Bounds;
|
|
27
|
+
/**
|
|
28
|
+
* Whether all of this mesh's geometry has reached the device.
|
|
29
|
+
*
|
|
30
|
+
* True for every mesh `createMesh` returns; false between the steps of one from
|
|
31
|
+
* `createMeshIncremental`, until its last. **Nothing incomplete is drawn** — see that method
|
|
32
|
+
* for why, and for what a `done` upload with this still false means.
|
|
33
|
+
*
|
|
34
|
+
* Named here for the reason `bounds` is: both backends' meshes genuinely carry it, so a
|
|
35
|
+
* consumer can ask without reaching past this surface for a backend-specific type.
|
|
36
|
+
*/
|
|
37
|
+
readonly complete: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** A mesh on its way to the device, and the iterator that gets it there. */
|
|
40
|
+
export interface IncrementalMeshHandle {
|
|
41
|
+
/**
|
|
42
|
+
* Usable at once — it can be held, measured against `bounds`, and disposed — but not drawn
|
|
43
|
+
* until the upload finishes.
|
|
44
|
+
*/
|
|
45
|
+
readonly mesh: MeshHandle;
|
|
46
|
+
/**
|
|
47
|
+
* Advance the upload by one bounded step. Done when it returns `done`.
|
|
48
|
+
*
|
|
49
|
+
* The call that returns `done` is the one that does the last step's work rather than an empty
|
|
50
|
+
* call after it, so a mesh takes exactly as many calls as it has chunks and a caller counting
|
|
51
|
+
* stops against a frame budget counts the right number.
|
|
52
|
+
*/
|
|
53
|
+
readonly upload: Iterator<void, void>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* An instanced batch on the device, held by a consumer and handed back.
|
|
57
|
+
*
|
|
58
|
+
* **The second nominal type this surface hit, and for the same reason as `MeshHandle`.**
|
|
59
|
+
* `InstancedMesh` holds `WebGLBuffer`s in private fields, which makes it nominal: no WebGPU
|
|
60
|
+
* object can ever satisfy it however identical its shape. The privacy is right — it is what
|
|
61
|
+
* keeps a VAO out of a consumer's reach — so the surface describes the handle instead.
|
|
62
|
+
*
|
|
63
|
+
* A consumer gets one from `createScatter` and passes it to `drawScatter` and
|
|
64
|
+
* `uploadScatter`. Passing one backend's handle to the other is a caller error.
|
|
65
|
+
*/
|
|
66
|
+
export interface ScatterHandle {
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A mesh made drawable many times over, held by a consumer and handed back.
|
|
70
|
+
*
|
|
71
|
+
* Opaque for the reason `ScatterHandle` is, and distinct from it because what it batches is
|
|
72
|
+
* different: a scatter owns its own base geometry, and this one is *attached to a mesh the
|
|
73
|
+
* consumer already uploaded*. A car body is tens of megabytes and a second copy of it to draw it
|
|
74
|
+
* thirty times would defeat the point.
|
|
75
|
+
*
|
|
76
|
+
* A consumer gets one from `createInstanced` and passes it to `uploadInstanced`,
|
|
77
|
+
* `drawInstanced` and `drawTranslucentInstanced`.
|
|
78
|
+
*/
|
|
79
|
+
export interface InstancedHandle {
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A body of water on the device: its meshes and the numbers its grid settled.
|
|
83
|
+
*
|
|
84
|
+
* Opaque for the reason `MeshHandle` and `ScatterHandle` are — `WaterRenderer` holds
|
|
85
|
+
* `WebGLBuffer`s privately and is therefore nominal. The third of these, and the last one the
|
|
86
|
+
* derivation could not carry without help.
|
|
87
|
+
*/
|
|
88
|
+
export interface WaterHandle {
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* A plume batch on the device. Opaque for the reason `MeshHandle` explains.
|
|
92
|
+
*/
|
|
93
|
+
export interface PlumeHandle {
|
|
94
|
+
}
|
|
95
|
+
/** A particle pool on the device. Opaque for the reason `MeshHandle` explains. */
|
|
96
|
+
export interface ParticleHandle {
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A wind-streak lattice on the device. Opaque for the reason `MeshHandle` explains.
|
|
100
|
+
*
|
|
101
|
+
* **`strengthFor` does not survive the widening, and that is deliberate.** It is on
|
|
102
|
+
* `WindStreakRenderer` so a caller can size its own budget against the same ramp the draw uses;
|
|
103
|
+
* naming it here would oblige every backend to carry a method rather than a lattice. The ramp
|
|
104
|
+
* itself is `windStreakStrength` in `windStreakDraw.ts`, which a consumer can call with the
|
|
105
|
+
* thresholds it chose and which is the one both backends draw with.
|
|
106
|
+
*/
|
|
107
|
+
export interface WindStreakHandle {
|
|
108
|
+
}
|
|
109
|
+
/** A flock on the device. Opaque for the reason `MeshHandle` explains. */
|
|
110
|
+
export interface FlockHandle {
|
|
111
|
+
}
|
|
112
|
+
/** A water-lit surface on the device. Opaque for the reason `MeshHandle` explains. */
|
|
113
|
+
export interface CausticsHandle {
|
|
114
|
+
}
|
|
115
|
+
/** A batch of electrical arcs on the device. Opaque for the reason `MeshHandle` explains. */
|
|
116
|
+
export interface BoltHandle {
|
|
117
|
+
}
|
|
118
|
+
/** A batch of polyline segments on the device. Opaque for the reason `MeshHandle` explains. */
|
|
119
|
+
export interface LineHandle {
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* One text object: a string laid out as instanced glyph cubes. Opaque for the reason
|
|
123
|
+
* `MeshHandle` explains, and opaque *at all* for a reason the others did not have — it used to
|
|
124
|
+
* be a class holding a `WebGL2RenderingContext`, which pinned every caller of it to WebGL2.
|
|
125
|
+
*/
|
|
126
|
+
export interface TextHandle {
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* One SDF text label: a string laid out as flat, textured quads from a distance-field font.
|
|
130
|
+
* Opaque for the reason `MeshHandle` explains, and for `TextHandle`'s own reason too — the
|
|
131
|
+
* concrete class on each backend holds a `WebGL2RenderingContext` or a `GPUDevice`'s buffers
|
|
132
|
+
* privately, so no shared type could name one without this.
|
|
133
|
+
*/
|
|
134
|
+
export interface SdfTextHandle {
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* A caller's image on the device. Opaque for the reason `MeshHandle` explains.
|
|
138
|
+
*
|
|
139
|
+
* The boundary it guards is the interesting one: the engine ships no image assets and fetches
|
|
140
|
+
* nothing, so what goes in is a `TexImageSource` the consumer already has and what comes back
|
|
141
|
+
* is a GPU object with sane sampler state. Where the pixels came from stays theirs.
|
|
142
|
+
*/
|
|
143
|
+
export interface SurfaceTextureHandle {
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The public surface of the renderer, as a type a second backend can be checked against.
|
|
147
|
+
*
|
|
148
|
+
* **Derived rather than written.** `keyof` over a class yields its public members only — every
|
|
149
|
+
* `private` field, and this class has ninety-four of them holding `WebGLProgram`s and
|
|
150
|
+
* `WebGLUniformLocation`s, is excluded automatically. So this is exactly what a consumer can
|
|
151
|
+
* reach and nothing else, without a list anybody has to maintain.
|
|
152
|
+
*
|
|
153
|
+
* The point is that it cannot drift. Add a method to `Renderer` and `WebGPURenderer` stops
|
|
154
|
+
* compiling until it has one too, which is the compile-time form of the failure the
|
|
155
|
+
* 2026-08-02 design spec named as the real risk: a fallback that rots because only the
|
|
156
|
+
* developer's own backend is ever exercised. **That mechanism is free and it is the whole
|
|
157
|
+
* reason this file exists.**
|
|
158
|
+
*
|
|
159
|
+
* Eighty members: up from seventy-five with the five instanced-draw methods, which are widened
|
|
160
|
+
* for the reason the scatter ones are — a batch handle is nominal on WebGL2, holding a
|
|
161
|
+
* `WebGLBuffer` in a private field, so no WebGPU object can satisfy it however identical its
|
|
162
|
+
* shape. It is not meant to be read; it is meant to be enforced.
|
|
163
|
+
*/
|
|
164
|
+
/** What a mesh needs to be told at creation that its geometry cannot say. */
|
|
165
|
+
export interface MeshOptions {
|
|
166
|
+
/**
|
|
167
|
+
* Whether this mesh's positions will be rewritten with `updateMesh`.
|
|
168
|
+
*
|
|
169
|
+
* Costs a `DYNAMIC_DRAW` hint on WebGL2 and a CPU-side copy of the interleaved vertex data on
|
|
170
|
+
* WebGPU, which interleaves every attribute into one buffer and so cannot patch a position
|
|
171
|
+
* without the rest of the vertex in hand. Both are paid only where a consumer asks.
|
|
172
|
+
*/
|
|
173
|
+
readonly dynamic?: boolean;
|
|
174
|
+
}
|
|
175
|
+
export type RendererApi = Omit<{
|
|
176
|
+
[K in keyof Renderer]: Renderer[K];
|
|
177
|
+
}, 'gpuTimer' | 'createMesh' | 'createMeshIncremental' | 'updateMesh' | 'drawMesh' | 'disposeMesh' | 'drawTranslucentMesh' | 'drawLightVolume' | 'drawFilm' | 'createScatter' | 'drawScatter' | 'uploadScatter' | 'disposeScatter' | 'createInstanced' | 'uploadInstanced' | 'drawInstanced' | 'drawTranslucentInstanced' | 'disposeInstanced' | 'createWater' | 'drawWater' | 'disposeWater' | 'createPlumes' | 'drawPlumes' | 'disposePlumes' | 'setPlumeScale' | 'createCaustics' | 'drawCaustics' | 'disposeCaustics' | 'createParticles' | 'drawParticles' | 'disposeParticles' | 'createWindStreaks' | 'drawWindStreaks' | 'disposeWindStreaks' | 'createFlock' | 'drawFlock' | 'disposeFlock' | 'createBolts' | 'drawBolts' | 'disposeBolts' | 'createLines' | 'drawLines' | 'disposeLines' | 'createText' | 'setText' | 'setPlate' | 'drawText' | 'textWidth' | 'disposeText' | 'createSdfText' | 'setSdfText' | 'drawSdfText' | 'disposeSdfText' | 'createSurfaceTexture' | 'updateSurfaceTexture' | 'disposeSurfaceTexture' | 'setSurfaceTexture' | 'setMaterial'> & {
|
|
178
|
+
/** Upload a caller's image. See `SurfaceTextureHandle` for the boundary this guards. */
|
|
179
|
+
createSurfaceTexture(source: TexImageSource, options?: Parameters<Renderer['createSurfaceTexture']>[1]): SurfaceTextureHandle;
|
|
180
|
+
/**
|
|
181
|
+
* Replace a texture's pixels, keeping the GPU object and its sampler state.
|
|
182
|
+
*
|
|
183
|
+
* The binding a draw loop already holds stays valid, so the swap is a swap rather than a
|
|
184
|
+
* rebuild. Not a hot path: it re-uploads the whole image and rebuilds the mip chain.
|
|
185
|
+
*/
|
|
186
|
+
updateSurfaceTexture(texture: SurfaceTextureHandle, source: TexImageSource): void;
|
|
187
|
+
disposeSurfaceTexture(texture: SurfaceTextureHandle): void;
|
|
188
|
+
/**
|
|
189
|
+
* Choose the texture the following `drawMesh` calls sample, or null for none.
|
|
190
|
+
*
|
|
191
|
+
* Pass state, because a texture belongs to a material and a material covers many draws.
|
|
192
|
+
* `bindMeshPass` resets it, so a pass cannot inherit a material from the one before it.
|
|
193
|
+
*/
|
|
194
|
+
setSurfaceTexture(texture: SurfaceTextureHandle | null, uScale?: number, vScale?: number, cutout?: number): void;
|
|
195
|
+
/**
|
|
196
|
+
* Everything the following `drawMesh` calls sample, in one call. Null for none.
|
|
197
|
+
*
|
|
198
|
+
* Pass state, exactly as `setSurfaceTexture` is, and `bindMeshPass` resets it for the same
|
|
199
|
+
* reason. This is the shape the maps of Phase 1.3 arrive through — a field each rather than a
|
|
200
|
+
* setter each — and `setSurfaceTexture` is now a wrapper over it.
|
|
201
|
+
*/
|
|
202
|
+
setMaterial(material: SurfaceMaterial<SurfaceTextureHandle> | null): void;
|
|
203
|
+
/**
|
|
204
|
+
* A 3D text object: one string, drawn as instanced glyph cubes over the scene.
|
|
205
|
+
*
|
|
206
|
+
* Create one per message slot and reuse it — `setText` is a no-op when the string has not
|
|
207
|
+
* changed, and that skip is the difference between a free overlay and a per-frame upload.
|
|
208
|
+
*/
|
|
209
|
+
createText(): TextHandle;
|
|
210
|
+
/** Lay a string out. A no-op when it is the string already laid out. */
|
|
211
|
+
setText(text: TextHandle, content: string): void;
|
|
212
|
+
/**
|
|
213
|
+
* A solid rectangle of cells, for a keycap or a backing plate — not a run of block glyphs,
|
|
214
|
+
* which comes out striped and sized in whole glyph widths. See `TextLayout.setPlate`.
|
|
215
|
+
*/
|
|
216
|
+
setPlate(text: TextHandle, widthCells: number, heightCells: number, bottomCell: number): void;
|
|
217
|
+
/**
|
|
218
|
+
* Draw a laid-out string over the scene.
|
|
219
|
+
*
|
|
220
|
+
* The viewport is the caller's rather than the drawing buffer's, because an overlay is
|
|
221
|
+
* positioned in whatever box the caller is laying out in and that is not always the canvas.
|
|
222
|
+
* `originY` is a baseline, measured from the top.
|
|
223
|
+
*/
|
|
224
|
+
drawText(text: TextHandle, viewportWidth: number, viewportHeight: number, originX: number, originY: number, style: TextStyle, timeSec: number): void;
|
|
225
|
+
/** Width of the string this handle currently holds. See `textWidthPx` for the static form. */
|
|
226
|
+
textWidth(text: TextHandle, cellSize: number): number;
|
|
227
|
+
/** Release a text object. Takes no context; see `Renderer.disposeScatter`. */
|
|
228
|
+
disposeText(text: TextHandle): void;
|
|
229
|
+
/**
|
|
230
|
+
* A text label from an SDF font. Opt-in: a consumer that never calls this pays nothing,
|
|
231
|
+
* which is what keeps `pixelFont.ts`'s no-asset promise true for everybody else.
|
|
232
|
+
*/
|
|
233
|
+
createSdfText(): SdfTextHandle;
|
|
234
|
+
/**
|
|
235
|
+
* Lay a string out against a font, and retain the atlas `drawSdfText` will sample.
|
|
236
|
+
*
|
|
237
|
+
* The engine fetches nothing: `font` was parsed from a metrics document the caller already
|
|
238
|
+
* had, and `atlas` is a texture the caller already uploaded through `createSurfaceTexture`.
|
|
239
|
+
* A no-op, and no re-upload, when neither the text nor the style moved since the last call.
|
|
240
|
+
*/
|
|
241
|
+
setSdfText(text: SdfTextHandle, font: SdfFont, atlas: SurfaceTextureHandle, content: string, style: SdfTextStyle): void;
|
|
242
|
+
/**
|
|
243
|
+
* Draw a laid-out SDF string into the scene, at `model`, against the frame's own
|
|
244
|
+
* view-projection — the same one `drawMesh` uses. See `Renderer.drawSdfText`.
|
|
245
|
+
*/
|
|
246
|
+
drawSdfText(text: SdfTextHandle, model: Float32Array, color: Vec3, opacity: number): void;
|
|
247
|
+
/** Release an SDF text label. Takes no context; see `Renderer.disposeScatter`. */
|
|
248
|
+
disposeSdfText(text: SdfTextHandle): void;
|
|
249
|
+
/** Build a lattice of wind-borne debris. See `WindStreakHandle` for why it is opaque. */
|
|
250
|
+
createWindStreaks(options?: Parameters<Renderer['createWindStreaks']>[0]): WindStreakHandle;
|
|
251
|
+
/** Draw the wind, after the opaque scene. The engine decides whether the camera is under. */
|
|
252
|
+
drawWindStreaks(streaks: WindStreakHandle, camera: Parameters<Renderer['drawWindStreaks']>[1], wind: Parameters<Renderer['drawWindStreaks']>[2], timeSeconds: number, tint: Vec3, env: Parameters<Renderer['drawWindStreaks']>[5]): void;
|
|
253
|
+
/** Release a lattice. Takes no context; see `Renderer.disposeScatter`. */
|
|
254
|
+
disposeWindStreaks(streaks: WindStreakHandle): void;
|
|
255
|
+
/** Scale one plume in a batch, 0 to hide it — a fire that is not always burning. */
|
|
256
|
+
setPlumeScale(plumes: PlumeHandle, index: number, scale: number): void;
|
|
257
|
+
/**
|
|
258
|
+
* A surface lit by nearby water. Null where the profile has water off or there are no sheets,
|
|
259
|
+
* so a scene's own `drawCaustics(null, …)` guard reads the same on either backend.
|
|
260
|
+
*/
|
|
261
|
+
createCaustics(sheets: Parameters<Renderer['createCaustics']>[0]): CausticsHandle | null;
|
|
262
|
+
/** Add the water's light to an already-shaded scene. Draw after the opaque pass. */
|
|
263
|
+
drawCaustics(caustics: CausticsHandle | null, camera: Parameters<Renderer['drawCaustics']>[1], timeSeconds: number, env: Parameters<Renderer['drawCaustics']>[3], windX?: number, windZ?: number, strength?: number): void;
|
|
264
|
+
disposeCaustics(caustics: CausticsHandle | null): void;
|
|
265
|
+
/** Build a flock of `count` birds. See `FlockHandle` for why it is opaque. */
|
|
266
|
+
createFlock(count: number): FlockHandle;
|
|
267
|
+
/** Draw a flock. Every bird's path comes from its index and the clock. */
|
|
268
|
+
drawFlock(flock: FlockHandle, camera: Parameters<Renderer['drawFlock']>[1], timeSeconds: number, params: Parameters<Renderer['drawFlock']>[3], tint: Vec3, windX?: number, windZ?: number): void;
|
|
269
|
+
/** Release a flock. Takes no context; see `Renderer.disposeScatter`. */
|
|
270
|
+
disposeFlock(flock: FlockHandle): void;
|
|
271
|
+
/** Build a batch for electrical arcs. `capacity` is in segments, not arcs. */
|
|
272
|
+
createBolts(segmentCapacity: number, label?: string): BoltHandle;
|
|
273
|
+
/** Draw a pool of arcs, after the opaque scene. */
|
|
274
|
+
drawBolts(batch: BoltHandle, data: Parameters<Renderer['drawBolts']>[1], camera: Parameters<Renderer['drawBolts']>[2], env: Parameters<Renderer['drawBolts']>[3], timeSeconds: number, core: Vec3, edge: Vec3, widthM: number, coreGain: number, minWidthPerMetre?: number): void;
|
|
275
|
+
/** Release a batch of arcs. Takes no context; see `Renderer.disposeScatter`. */
|
|
276
|
+
disposeBolts(batch: BoltHandle): void;
|
|
277
|
+
/**
|
|
278
|
+
* Build a batch for a polyline. `capacity` is in segments, not points.
|
|
279
|
+
*
|
|
280
|
+
* There is no portable wide line: WebGL2 clamps `lineWidth` to one pixel on nearly every
|
|
281
|
+
* driver and WebGPU has no line width at all, so a stroke is a triangle everywhere or it
|
|
282
|
+
* is nowhere. See `Renderer.createLines`.
|
|
283
|
+
*
|
|
284
|
+
* **One handle, one polyline's geometry, for the frame it is drawn in.** Drawing a handle
|
|
285
|
+
* more than once a frame with unchanged content is fine; drawing it more than once with
|
|
286
|
+
* *different* content in the same frame is not — see `Renderer.createLines` for the reason,
|
|
287
|
+
* which is backend-specific: WebGPU reads the last write only, WebGL2 reads whichever content
|
|
288
|
+
* was current at each call. A consumer that wants several polylines whose geometry differs
|
|
289
|
+
* within one frame needs several handles.
|
|
290
|
+
*/
|
|
291
|
+
createLines(segmentCapacity: number, label?: string): LineHandle;
|
|
292
|
+
/**
|
|
293
|
+
* Draw a polyline, after the opaque scene.
|
|
294
|
+
*
|
|
295
|
+
* `widthM` is the stroke's own half-width and `minWidthPerMetre` the floor that keeps a
|
|
296
|
+
* distant line above a pixel. `softness` widens the antialiased edge inward, as a fraction
|
|
297
|
+
* of the half-width; zero is a clean edge. See `Renderer.drawLines`.
|
|
298
|
+
*/
|
|
299
|
+
drawLines(lines: LineHandle, data: Parameters<Renderer['drawLines']>[1], model: Parameters<Renderer['drawLines']>[2], camera: Parameters<Renderer['drawLines']>[3], env: Parameters<Renderer['drawLines']>[4], color: Vec3, widthM: number, opacity: number, softness?: number, minWidthPerMetre?: number, additive?: boolean): void;
|
|
300
|
+
/** Release a batch of line segments. Takes no context; see `Renderer.disposeScatter`. */
|
|
301
|
+
disposeLines(lines: LineHandle): void;
|
|
302
|
+
/** Base geometry plus placement in, handle out. See `ScatterHandle` for why it is opaque. */
|
|
303
|
+
createScatter(base: MeshData, data: Parameters<Renderer['createScatter']>[1]): ScatterHandle;
|
|
304
|
+
/** Draw every live instance of a batch this renderer made, in one call. */
|
|
305
|
+
drawScatter(scatter: ScatterHandle, data: Parameters<Renderer['drawScatter']>[1], camera: Parameters<Renderer['drawScatter']>[2], env: Parameters<Renderer['drawScatter']>[3], windX: number, windZ: number, windGust: number, timeSeconds: number, trample?: Float32Array | null): void;
|
|
306
|
+
/** Push changed instances. Only for batches that move; foliage is uploaded once. */
|
|
307
|
+
uploadScatter(scatter: ScatterHandle, data: Parameters<Renderer['uploadScatter']>[1]): void;
|
|
308
|
+
/** Release a batch this renderer made. Takes no context; see `Renderer.disposeScatter`. */
|
|
309
|
+
disposeScatter(scatter: ScatterHandle): void;
|
|
310
|
+
/**
|
|
311
|
+
* Make a mesh drawable many times over, at up to `capacity` placements.
|
|
312
|
+
*
|
|
313
|
+
* **Takes a mesh already on the device**, unlike `createScatter`, which uploads its own base.
|
|
314
|
+
* The geometry an instanced draw repeats is usually the expensive kind — a loaded model rather
|
|
315
|
+
* than a blade of grass — and a second copy of it is the cost this exists to avoid.
|
|
316
|
+
*
|
|
317
|
+
* **One batch per mesh.** WebGL2 attaches the per-instance attributes to that mesh's own vertex
|
|
318
|
+
* array, of which a mesh has one, so a second batch would rebind the attributes the first draws
|
|
319
|
+
* through and place one batch's instances by the other's matrices. Refused, loudly.
|
|
320
|
+
*
|
|
321
|
+
* **What it gives up** is skinning and morphing on the instanced mesh: the joint attributes
|
|
322
|
+
* want the two locations the matrix does, and a morph weight is per draw, so every instance
|
|
323
|
+
* would wear one expression. Both are refused where the variant is built rather than dropped
|
|
324
|
+
* quietly.
|
|
325
|
+
*/
|
|
326
|
+
createInstanced(mesh: MeshHandle, capacity: number): InstancedHandle;
|
|
327
|
+
/**
|
|
328
|
+
* Push placement and colour to the device. Only `data.count` instances are written.
|
|
329
|
+
*
|
|
330
|
+
* Called per frame for a batch that moves, exactly as `uploadScatter` is for one that does.
|
|
331
|
+
* Allocates nothing: the staging array belongs to the batch.
|
|
332
|
+
*/
|
|
333
|
+
uploadInstanced(batch: InstancedHandle, data: MeshInstances): void;
|
|
334
|
+
/**
|
|
335
|
+
* Draw every live instance of a batch, in one call and one material.
|
|
336
|
+
*
|
|
337
|
+
* The material is whatever `setMaterial` and the surface setters last established, exactly as
|
|
338
|
+
* for `drawMesh` — which is the point: a batch spends **one** slot of the frame's material ring
|
|
339
|
+
* where the same meshes drawn individually spend one each.
|
|
340
|
+
*/
|
|
341
|
+
drawInstanced(batch: InstancedHandle, data: MeshInstances): void;
|
|
342
|
+
/**
|
|
343
|
+
* The blended twin, for an instanced mesh whose material is not opaque.
|
|
344
|
+
*
|
|
345
|
+
* Takes the same options as `drawTranslucentMesh` and for the same reasons — a set of blended
|
|
346
|
+
* surfaces that all write depth rejects itself, so a model whose interior is glass wants
|
|
347
|
+
* `depthWrite: false` here as much as it does there.
|
|
348
|
+
*/
|
|
349
|
+
drawTranslucentInstanced(batch: InstancedHandle, data: MeshInstances, opacity: number, options?: TranslucentMeshOptions): void;
|
|
350
|
+
/** Release a batch. The mesh it was attached to is the caller's and is not released. */
|
|
351
|
+
disposeInstanced(batch: InstancedHandle): void;
|
|
352
|
+
/** Build a body of water. See `WaterHandle` for why it is opaque. */
|
|
353
|
+
createWater(resolution?: number, nearExtent?: number, farHalfExtent?: number): WaterHandle;
|
|
354
|
+
/** Draw a body of water this renderer made, after the opaque scene. */
|
|
355
|
+
drawWater(water: WaterHandle, camera: Parameters<Renderer['drawWater']>[1], timeSeconds: number, settings: Parameters<Renderer['drawWater']>[3], env: Parameters<Renderer['drawWater']>[4], windX?: number, windZ?: number): void;
|
|
356
|
+
/** Release a body of water. Takes no context; see `Renderer.disposeScatter`. */
|
|
357
|
+
disposeWater(water: WaterHandle): void;
|
|
358
|
+
/** Build a plume batch from placements and a named material. */
|
|
359
|
+
createPlumes(plumes: Parameters<Renderer['createPlumes']>[0], options: Parameters<Renderer['createPlumes']>[1]): PlumeHandle;
|
|
360
|
+
/** Draw a plume batch, after the opaque scene. */
|
|
361
|
+
drawPlumes(plumes: PlumeHandle, camera: Parameters<Renderer['drawPlumes']>[1], timeSeconds: number, env: Parameters<Renderer['drawPlumes']>[3], windX?: number, windZ?: number, originX?: number, originY?: number, originZ?: number): void;
|
|
362
|
+
/** Release a plume batch. */
|
|
363
|
+
disposePlumes(plumes: PlumeHandle): void;
|
|
364
|
+
/**
|
|
365
|
+
* Build a particle pool from a capacity and a named material.
|
|
366
|
+
*
|
|
367
|
+
* **`reuse` is re-typed here, and it has to be.** `ParticleBatchOptions.reuse` names the
|
|
368
|
+
* concrete `ParticleBatch`, so the surface handed back a `ParticleHandle` from this very
|
|
369
|
+
* method and then refused to accept it — a consumer that had done everything else right
|
|
370
|
+
* could not share a program without holding the WebGL2 class it had just been moved off.
|
|
371
|
+
* That is the same defect as the one that pinned callers to `Renderer` itself, arrived at
|
|
372
|
+
* from the input side.
|
|
373
|
+
*
|
|
374
|
+
* **WebGPU ignores it, and that is correct rather than a gap.** Its pipelines are cached on
|
|
375
|
+
* `particle:${material}:${blend}` — exactly what decides the program — so pools that would
|
|
376
|
+
* have shared one already do. WebGL2 still needs telling, and still checks that the two
|
|
377
|
+
* materials match.
|
|
378
|
+
*/
|
|
379
|
+
createParticles(capacity: number, options: Omit<Parameters<Renderer['createParticles']>[1], 'reuse'> & {
|
|
380
|
+
readonly reuse?: ParticleHandle;
|
|
381
|
+
}): ParticleHandle;
|
|
382
|
+
/** Draw a pool's live particles, after the opaque scene. */
|
|
383
|
+
drawParticles(batch: ParticleHandle, data: Parameters<Renderer['drawParticles']>[1], camera: Parameters<Renderer['drawParticles']>[2], env: Parameters<Renderer['drawParticles']>[3], timeSeconds: number): void;
|
|
384
|
+
/** Release a particle pool. */
|
|
385
|
+
disposeParticles(batch: ParticleHandle): void;
|
|
386
|
+
/** Draw a wet film over geometry, using a handle as the surface it lies on. */
|
|
387
|
+
drawFilm(mesh: MeshHandle, camera: Parameters<Renderer['drawFilm']>[1], timeSeconds: number, env: Parameters<Renderer['drawFilm']>[3], sheen: number, options?: Parameters<Renderer['drawFilm']>[5]): void;
|
|
388
|
+
/**
|
|
389
|
+
* Light the scene from an environment it did not photograph.
|
|
390
|
+
*
|
|
391
|
+
* Takes the equirectangular image rather than six faces, so the renderer converts at its own
|
|
392
|
+
* probe size and a caller cannot hand it faces of the wrong dimension. Downstream of the cube
|
|
393
|
+
* this is exactly a bake: the same prefilter, the same spherical-harmonic projection.
|
|
394
|
+
*
|
|
395
|
+
* Answers `false` and says why when the profile has no probe — `reflectionProbeSize` defaults to
|
|
396
|
+
* zero, so a consumer that never asked for one gets a refusal in words rather than an
|
|
397
|
+
* environment that silently did nothing.
|
|
398
|
+
*/
|
|
399
|
+
setEnvironmentImage(image: {
|
|
400
|
+
readonly width: number;
|
|
401
|
+
readonly height: number;
|
|
402
|
+
readonly data: Float32Array;
|
|
403
|
+
}, options?: ProbeBakeOptions): boolean;
|
|
404
|
+
/** Draw a volume of light along the view ray, using a handle as its bounding geometry. */
|
|
405
|
+
drawLightVolume(mesh: MeshHandle, model: ReadonlyMat4, camera: Parameters<Renderer['drawLightVolume']>[2], strength: number, reachM: number, spread: number, options?: Parameters<Renderer['drawLightVolume']>[6]): void;
|
|
406
|
+
/**
|
|
407
|
+
* Geometry in, handle out. Widened for the reason `MeshHandle` explains: `Mesh` is nominal.
|
|
408
|
+
*
|
|
409
|
+
* The second member the derivation could not carry, and found the same way as the first —
|
|
410
|
+
* by a second backend failing to compile against it rather than by anybody noticing.
|
|
411
|
+
*/
|
|
412
|
+
createMesh(data: MeshData, options?: MeshOptions): MeshHandle;
|
|
413
|
+
/**
|
|
414
|
+
* Geometry in, handle out — but the geometry lands over as many frames as the caller gives it.
|
|
415
|
+
*
|
|
416
|
+
* **What this is for.** A game streaming a world in squares held a 4 ms frame budget and
|
|
417
|
+
* honoured it exactly, for the half of the work it owned. The other half was one `createMesh`
|
|
418
|
+
* per material group, about two dozen a square, all of them in whichever frame the build
|
|
419
|
+
* happened to finish in and outside every budget. Attributed in the browser over a drive into
|
|
420
|
+
* a town, every frame over 50 ms was `createMesh` and nothing else, and disposal and
|
|
421
|
+
* bookkeeping never reached 2. Spreading a square across its groups would not have been
|
|
422
|
+
* enough: one group was 248,928 of that square's 367,542 triangles, so the group itself had to
|
|
423
|
+
* become divisible, and `createMesh` is where that is decided.
|
|
424
|
+
*
|
|
425
|
+
* Drive `upload` under a frame budget — `StepBudget` is the pump built for it — and the
|
|
426
|
+
* geometry arrives over as many frames as that allows. A mesh of *n* chunks takes exactly *n*
|
|
427
|
+
* calls, and the call that returns `done` is the one that does the last of the work.
|
|
428
|
+
*
|
|
429
|
+
* **A mesh that has not finished arriving is not drawn.** `complete` says so, and `drawMesh`,
|
|
430
|
+
* `drawTranslucentMesh` and `drawLightVolume` skip it in silence. Drawing what had landed was
|
|
431
|
+
* the alternative and is worse — a mesh whose triangle count grows over several frames is a
|
|
432
|
+
* stranger artefact than a square that is briefly absent, and it is the direction a streaming
|
|
433
|
+
* consumer already treats as safe. So a consumer that never drives the iterator gets a mesh
|
|
434
|
+
* that never appears, not a fan of triangles through the origin.
|
|
435
|
+
*
|
|
436
|
+
* **A lost device or context ends the upload.** The iterator reports `done` and the mesh stays
|
|
437
|
+
* incomplete, which is the pair that distinguishes an abandoned upload from a finished one.
|
|
438
|
+
* There is no way to detect a half-uploaded mesh from the outside, so the engine says what it
|
|
439
|
+
* does rather than leaving a consumer to guess.
|
|
440
|
+
*
|
|
441
|
+
* What is paid up front and not spread: validation, the bounds, the buffer allocations and the
|
|
442
|
+
* pipeline warming. The bounds are the deliberate one — a streamer places and culls a region
|
|
443
|
+
* from them before a byte of it has landed.
|
|
444
|
+
*/
|
|
445
|
+
createMeshIncremental(data: MeshData, options?: MeshOptions): IncrementalMeshHandle;
|
|
446
|
+
/**
|
|
447
|
+
* Rewrite a mesh's positions, and its normals where the caller has them.
|
|
448
|
+
*
|
|
449
|
+
* **What this exists for is cloth**, and it is a gap the engine shipped with: `ClothBody` has
|
|
450
|
+
* been in `@driftengine/physics` since 2.9 and nothing could draw its output. A mesh was
|
|
451
|
+
* immutable, so a deforming surface could only be drawn by recreating it every frame — a GPU
|
|
452
|
+
* buffer allocation per frame, which the frame rules forbid — or by splitting it into rigid
|
|
453
|
+
* quads with a matrix each, which caps the resolution at the number of draw calls a consumer
|
|
454
|
+
* can afford. A consumer found it by trying to hang a banner.
|
|
455
|
+
*
|
|
456
|
+
* **Only positions and normals.** Colour, emissive and the rest describe what a surface *is*
|
|
457
|
+
* and do not change because it bent; rewriting them every frame would be uploading unchanged
|
|
458
|
+
* bytes. The vertex *count* is fixed: the index buffer, the pipeline and every other attribute
|
|
459
|
+
* are sized against it, and an update of a different size is refused naming both.
|
|
460
|
+
*
|
|
461
|
+
* The mesh must have been created with `{ dynamic: true }`. That is not ceremony — it decides
|
|
462
|
+
* the buffer hint on one backend and what has to be kept on the other, and a mesh that never
|
|
463
|
+
* deforms should pay for neither.
|
|
464
|
+
*/
|
|
465
|
+
updateMesh(mesh: MeshHandle, positions: Float32Array, normals?: Float32Array): void;
|
|
466
|
+
/** Draw a handle this renderer made. Passing one from the other backend is a caller error. */
|
|
467
|
+
drawMesh(mesh: MeshHandle, model: ReadonlyMat4, depthLayer?: number, tint?: Vec3 | null): void;
|
|
468
|
+
/** Release the geometry behind a handle. */
|
|
469
|
+
disposeMesh(mesh: MeshHandle): void;
|
|
470
|
+
/**
|
|
471
|
+
* Draw a handle with blending, back to front against what is already there.
|
|
472
|
+
*
|
|
473
|
+
* Lit and fogged by default; `options` can turn either off, independently — see
|
|
474
|
+
* `TranslucentMeshOptions` and `Renderer.drawTranslucentMesh` for what each means and why
|
|
475
|
+
* a caller might want one without the other. Both backends read the same defaults, so a
|
|
476
|
+
* call with no fourth argument draws exactly as it did before this existed.
|
|
477
|
+
*
|
|
478
|
+
* `depthWrite` and `depthLayer` are the two that decide how a *set* of blended surfaces
|
|
479
|
+
* resolves against itself: whether this draw claims the depth buffer, and which of two
|
|
480
|
+
* coplanar surfaces wins where they coincide. Per-draw state on WebGL2 and pipeline state on
|
|
481
|
+
* WebGPU, and the same depth either way — `depthOffsetForLayer` is the one decision both read.
|
|
482
|
+
*/
|
|
483
|
+
drawTranslucentMesh(mesh: MeshHandle, model: ReadonlyMat4, opacity: number, options?: TranslucentMeshOptions): void;
|
|
484
|
+
/**
|
|
485
|
+
* Widened, because this is the one member that cannot cross as it stands.
|
|
486
|
+
*
|
|
487
|
+
* `GpuTimer` is a `WebGLQuery` pool. Left derived, it would oblige a WebGPU renderer to
|
|
488
|
+
* produce one, which it cannot do and should not fake. Every other member of this surface
|
|
489
|
+
* is already backend-neutral; the audit that established that is worth repeating before
|
|
490
|
+
* anything else is overridden here, because each override is a place the two backends are
|
|
491
|
+
* allowed to differ and therefore a place the compiler stops helping.
|
|
492
|
+
*/
|
|
493
|
+
readonly gpuTimer: FrameTimer;
|
|
494
|
+
};
|
|
495
|
+
/** Which backend is actually drawing. Reported, never inferred. */
|
|
496
|
+
export type RenderBackend = 'webgl2' | 'webgpu';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a frame asked of a backend, against what that backend allows.
|
|
3
|
+
*
|
|
4
|
+
* **This exists because a ceiling firing was unobservable.** The WebGPU backend holds ten per-frame
|
|
5
|
+
* ceilings — draws, material changes, overlays, water bodies, light volumes, plumes, three kinds of
|
|
6
|
+
* effect batch and the scatter shadow round — and past any of them it skips the work and writes one
|
|
7
|
+
* `console.warn` for the lifetime of the renderer. WebGL2 holds none of them and draws everything.
|
|
8
|
+
* So a scene over a ceiling renders differently on the two backends, silently, and a consumer
|
|
9
|
+
* developing against WebGL2 has no way to see it coming.
|
|
10
|
+
*
|
|
11
|
+
* **The cost of that was measured from outside.** A consumer spent weeks on ground that
|
|
12
|
+
* vanished and reappeared as the camera moved; its own report still lists, as the decisive
|
|
13
|
+
* experiment nobody has run, *"ask the reporter for the console"*. It wrote a draw counter and a
|
|
14
|
+
* per-material `reach` field of its own to guess at a worst case this renderer already knew
|
|
15
|
+
* exactly.
|
|
16
|
+
*
|
|
17
|
+
* **A count, not a log.** A warning cannot be asserted on, cannot be read from a headless check,
|
|
18
|
+
* and is gone by the time anybody looks. A number can be all three, and the whole point of the
|
|
19
|
+
* shape below is that `dropped` is one boolean a consumer's own suite can fail on.
|
|
20
|
+
*/
|
|
21
|
+
/** One ceiling's frame. Updated in place, so holding a reference to it is the intended use. */
|
|
22
|
+
export interface BudgetLine {
|
|
23
|
+
/** What a consumer would call the thing, not what the ring holding it is called. */
|
|
24
|
+
readonly name: string;
|
|
25
|
+
/**
|
|
26
|
+
* How many were **asked for**, including any that were refused.
|
|
27
|
+
*
|
|
28
|
+
* The distinction is the whole value of this field. A ring naturally knows how many slots it
|
|
29
|
+
* handed out, which tops out at the ceiling and says a frame is exactly full; what a consumer
|
|
30
|
+
* needs is how far past it the scene went, because that is the number that says how much to cut.
|
|
31
|
+
*/
|
|
32
|
+
readonly used: number;
|
|
33
|
+
/** The ceiling, or `null` where this backend imposes none. */
|
|
34
|
+
readonly ceiling: number | null;
|
|
35
|
+
/** How many were asked for and not drawn. */
|
|
36
|
+
readonly dropped: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The half a backend writes: a line it can count against.
|
|
40
|
+
*
|
|
41
|
+
* Separate from `BudgetLine` so that what a consumer is handed is read-only — a caller able to
|
|
42
|
+
* call `drop()` on the renderer's own budget could clear a check that was about to fail.
|
|
43
|
+
*/
|
|
44
|
+
export interface BudgetCounter extends BudgetLine {
|
|
45
|
+
/** One more of this thing was asked for, whether or not it will fit. */
|
|
46
|
+
ask(): void;
|
|
47
|
+
/** One of them was refused, and the frame is marked. */
|
|
48
|
+
drop(): void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Every ceiling a backend imposes, counted for the frame just drawn.
|
|
52
|
+
*
|
|
53
|
+
* **The lines and the array holding them are allocated once and updated in place**, so a consumer
|
|
54
|
+
* reading this every frame allocates nothing — which is what `AGENTS.md` requires of anything on a
|
|
55
|
+
* per-frame path, and a budget nobody can afford to read every frame is a budget nobody reads.
|
|
56
|
+
*/
|
|
57
|
+
export declare class FrameBudget {
|
|
58
|
+
private readonly all;
|
|
59
|
+
private anyDropped;
|
|
60
|
+
/**
|
|
61
|
+
* Declare a line. Called at construction, never in a frame.
|
|
62
|
+
*
|
|
63
|
+
* `ceiling` is `null` for a backend that imposes none — reported rather than omitted, because a
|
|
64
|
+
* line that disappears on one backend is a line a cross-backend check cannot compare.
|
|
65
|
+
*/
|
|
66
|
+
line(name: string, ceiling: number | null): BudgetCounter;
|
|
67
|
+
/** Every line, in the order declared. The same array every frame. */
|
|
68
|
+
get lines(): readonly BudgetLine[];
|
|
69
|
+
/**
|
|
70
|
+
* Whether anything at all was refused this frame.
|
|
71
|
+
*
|
|
72
|
+
* **The one thing worth asserting on**, and the reason it is a field rather than a walk over
|
|
73
|
+
* `lines`: a consumer's headless check wants `expect(renderer.frameBudget.dropped).toBe(false)`
|
|
74
|
+
* on every scene it renders, and a check that has to know which lines exist is a check that
|
|
75
|
+
* misses the line added after it was written.
|
|
76
|
+
*/
|
|
77
|
+
get dropped(): boolean;
|
|
78
|
+
/** @internal Marked by a line, not by a caller. */
|
|
79
|
+
markDropped(): void;
|
|
80
|
+
/** Start a frame. Keeps every line object; clears what they hold. */
|
|
81
|
+
reset(): void;
|
|
82
|
+
}
|