@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,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A WebGL2 context that answers everything, for tests that need a renderer and not a GPU.
|
|
3
|
+
*
|
|
4
|
+
* **Not a `.test.ts` file, and that is the point.** Vitest registers a test when the file
|
|
5
|
+
* declaring it is imported, so a second test file importing this from beside its own tests would
|
|
6
|
+
* re-run every test in that file as well — five today, and more with each one added. Split out so
|
|
7
|
+
* that importing the harness costs nothing but the harness.
|
|
8
|
+
*
|
|
9
|
+
* **Until this existed, nothing in this repository had ever constructed the WebGL2 `Renderer` in a
|
|
10
|
+
* test**, which is why every claim about that backend was settled by a capture — expensive, slow,
|
|
11
|
+
* and blind to anything the published scenes do not do. There is a `renderer.test.ts` beside that
|
|
12
|
+
* backend now, and what it pins is the shape a capture is worst at: a frame-wide decision taken
|
|
13
|
+
* from the profile, where the wrong answer still draws a plausible picture. The `Proxy` is the
|
|
14
|
+
* same trick `sceneTarget.test.ts` uses one level down: anything not named below is a recorded
|
|
15
|
+
* no-op returning a fresh object, so a constructor that touches several hundred entry points runs
|
|
16
|
+
* to completion and a test can assert the one thing it is about.
|
|
17
|
+
*/
|
|
18
|
+
import { countUniformVectors } from './uniformVectorBudget.ts';
|
|
19
|
+
|
|
20
|
+
export function recordingGl(
|
|
21
|
+
options: {
|
|
22
|
+
/**
|
|
23
|
+
* Extensions this context answers with an object rather than with `null`.
|
|
24
|
+
*
|
|
25
|
+
* **Opt-in, and the default of none is the honest one for most tests**: the shipped default
|
|
26
|
+
* answers `null` to everything, which is the weakest part this engine claims to run on and is
|
|
27
|
+
* what a test that does not care should be written against. A test that *is* about the branch
|
|
28
|
+
* an extension opens has to name it here, or the code under test refuses one step earlier and
|
|
29
|
+
* the test passes for the wrong reason — `EXT_color_buffer_float` is the worked example: with
|
|
30
|
+
* it absent, `OitPass` declines for the float colour buffer and every order-independent
|
|
31
|
+
* profile looks alike whatever its sample count.
|
|
32
|
+
*/
|
|
33
|
+
readonly extensions?: readonly string[];
|
|
34
|
+
/**
|
|
35
|
+
* What this context reports for `MAX_FRAGMENT_UNIFORM_VECTORS`. 1024 by default.
|
|
36
|
+
*
|
|
37
|
+
* Named because it is a limit the renderer now *sizes a shader against* rather than merely
|
|
38
|
+
* compares: 256 is an Adreno 740 and 224 is what WebGL2 guarantees, and both are numbers at
|
|
39
|
+
* which the lit shader has to be built smaller than the engine's own budget.
|
|
40
|
+
*/
|
|
41
|
+
readonly fragmentUniformVectors?: number;
|
|
42
|
+
/**
|
|
43
|
+
* The ceiling this fake driver actually enforces at link time, if it is not the one it admits.
|
|
44
|
+
*
|
|
45
|
+
* **For the gap between what a device reports and what it does.** `planLightBudget` counts an
|
|
46
|
+
* upper bound over the source, so the interesting failure is the other one: a program the
|
|
47
|
+
* arithmetic passed that the driver still refuses. Setting this below
|
|
48
|
+
* `fragmentUniformVectors` is that device, and it is what the renderer's retry is for.
|
|
49
|
+
* `Infinity` by default, so a link only ever fails where a test asked for it.
|
|
50
|
+
*/
|
|
51
|
+
readonly refuseLinkAbove?: number;
|
|
52
|
+
} = {},
|
|
53
|
+
) {
|
|
54
|
+
const extensions = new Set(options.extensions ?? []);
|
|
55
|
+
const reportedVectors = options.fragmentUniformVectors ?? 1024;
|
|
56
|
+
const enforcedVectors = options.refuseLinkAbove ?? Number.POSITIVE_INFINITY;
|
|
57
|
+
/** Fragment sources by shader handle, so a refusal can be decided from what was compiled. */
|
|
58
|
+
const fragmentSources = new WeakMap<object, string>();
|
|
59
|
+
/** Each program's fragment source, gathered at `attachShader`. */
|
|
60
|
+
const programFragments = new WeakMap<object, string>();
|
|
61
|
+
const calls: { name: string; args: unknown[] }[] = [];
|
|
62
|
+
const constants: Record<string, number> = {
|
|
63
|
+
ACTIVE_UNIFORMS: 0x8b86,
|
|
64
|
+
ACTIVE_ATTRIBUTES: 0x8b89,
|
|
65
|
+
COMPILE_STATUS: 0x8b81,
|
|
66
|
+
LINK_STATUS: 0x8b82,
|
|
67
|
+
FRAMEBUFFER_COMPLETE: 0x8cd5,
|
|
68
|
+
NO_ERROR: 0,
|
|
69
|
+
MAX_SAMPLES: 0x8d57,
|
|
70
|
+
MAX_TEXTURE_SIZE: 0x0d33,
|
|
71
|
+
MAX_TEXTURE_IMAGE_UNITS: 0x8872,
|
|
72
|
+
MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,
|
|
73
|
+
MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,
|
|
74
|
+
/*
|
|
75
|
+
* Enums a test needs to compare against, rather than merely to pass through.
|
|
76
|
+
*
|
|
77
|
+
* The `Proxy` below answers an unnamed property with a **fresh function**, so
|
|
78
|
+
* `gl.TEXTURE_2D_ARRAY` read twice is two different values and `toContain(gl.TEXTURE_2D)` can
|
|
79
|
+
* never match anything a call recorded. Anything a test asserts on has to be named here; a
|
|
80
|
+
* constant only ever passed along does not.
|
|
81
|
+
*/
|
|
82
|
+
TEXTURE_2D: 0x0de1,
|
|
83
|
+
TEXTURE_2D_ARRAY: 0x8c1a,
|
|
84
|
+
DEPTH_COMPONENT24: 0x81a6,
|
|
85
|
+
DEPTH_ATTACHMENT: 0x8d00,
|
|
86
|
+
FRAMEBUFFER: 0x8d40,
|
|
87
|
+
NONE: 0,
|
|
88
|
+
ALWAYS: 0x0207,
|
|
89
|
+
LESS: 0x0201,
|
|
90
|
+
TEXTURE_MIN_FILTER: 0x2801,
|
|
91
|
+
TEXTURE_MAG_FILTER: 0x2800,
|
|
92
|
+
TEXTURE_WRAP_S: 0x2802,
|
|
93
|
+
TEXTURE_WRAP_T: 0x2803,
|
|
94
|
+
NEAREST: 0x2600,
|
|
95
|
+
CLAMP_TO_EDGE: 0x812f,
|
|
96
|
+
/* The blend factors, so a test can tell an additive stroke from a covering one. */
|
|
97
|
+
SRC_ALPHA: 0x0302,
|
|
98
|
+
ONE: 1,
|
|
99
|
+
ONE_MINUS_SRC_ALPHA: 0x0303,
|
|
100
|
+
TRIANGLES: 0x0004,
|
|
101
|
+
TEXTURE0: 0x84c0,
|
|
102
|
+
DEPTH_BUFFER_BIT: 0x00000100,
|
|
103
|
+
DEPTH_TEST: 0x0b71,
|
|
104
|
+
CULL_FACE: 0x0b44,
|
|
105
|
+
/* Named so a pass-owned attachment's two colour formats and its two attachment points can be
|
|
106
|
+
compared rather than merely passed along. See `passTarget.test.ts`. */
|
|
107
|
+
COLOR_ATTACHMENT0: 0x8ce0,
|
|
108
|
+
RGBA8: 0x8058,
|
|
109
|
+
RGBA16F: 0x881a,
|
|
110
|
+
RGBA: 0x1908,
|
|
111
|
+
UNSIGNED_BYTE: 0x1401,
|
|
112
|
+
HALF_FLOAT: 0x140b,
|
|
113
|
+
DEPTH_COMPONENT: 0x1902,
|
|
114
|
+
UNSIGNED_INT: 0x1405,
|
|
115
|
+
LINEAR: 0x2601,
|
|
116
|
+
COLOR_BUFFER_BIT: 0x00004000,
|
|
117
|
+
/* Named so a test can tell a mesh that declared itself deforming from one that did not. */
|
|
118
|
+
ARRAY_BUFFER: 0x8892,
|
|
119
|
+
STATIC_DRAW: 0x88e4,
|
|
120
|
+
DYNAMIC_DRAW: 0x88e8,
|
|
121
|
+
};
|
|
122
|
+
const answers: Record<string, (...a: unknown[]) => unknown> = {
|
|
123
|
+
getParameter: (pname: unknown) => {
|
|
124
|
+
if (pname === constants.MAX_TEXTURE_SIZE) return 4096;
|
|
125
|
+
if (pname === constants.MAX_TEXTURE_IMAGE_UNITS) return 16;
|
|
126
|
+
if (pname === constants.MAX_SAMPLES) return 4;
|
|
127
|
+
if (pname === constants.MAX_FRAGMENT_UNIFORM_VECTORS) return reportedVectors;
|
|
128
|
+
if (pname === constants.MAX_VERTEX_UNIFORM_VECTORS) return 1024;
|
|
129
|
+
/* Generous by default: every remaining limit is a ceiling something is checked against,
|
|
130
|
+
and a small answer is read as a device that cannot do the thing. */
|
|
131
|
+
return 4096;
|
|
132
|
+
},
|
|
133
|
+
getExtension: (name: unknown) => (extensions.has(String(name)) ? {} : null),
|
|
134
|
+
getShaderParameter: () => true,
|
|
135
|
+
/*
|
|
136
|
+
* A shader remembers its own source, and a program remembers its fragment one, so a link can
|
|
137
|
+
* be refused for the reason a real driver refuses it rather than by a flag. Both are no-ops
|
|
138
|
+
* for every test that does not set a ceiling.
|
|
139
|
+
*/
|
|
140
|
+
createShader: (type: unknown) => ({ type }),
|
|
141
|
+
shaderSource: (shader: unknown, source: unknown) => {
|
|
142
|
+
if (typeof shader === 'object' && shader !== null && typeof source === 'string') {
|
|
143
|
+
fragmentSources.set(shader, source);
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
attachShader: (program: unknown, shader: unknown) => {
|
|
147
|
+
if (typeof program !== 'object' || program === null) return;
|
|
148
|
+
if (typeof shader !== 'object' || shader === null) return;
|
|
149
|
+
const source = fragmentSources.get(shader);
|
|
150
|
+
/* The fragment stage is the one with a `void main` and no attributes; `#version` is on both,
|
|
151
|
+
so the discriminator is the qualifier only a fragment stage declares. */
|
|
152
|
+
if (source !== undefined && source.includes('precision highp float;')) {
|
|
153
|
+
programFragments.set(program, source);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
/* Linked yes; zero active uniforms and attributes, which ends every reflection loop at once
|
|
157
|
+
and is why this harness does not have to know a single uniform name. */
|
|
158
|
+
getProgramParameter: (program: unknown, pname: unknown) => {
|
|
159
|
+
if (pname === constants.ACTIVE_UNIFORMS || pname === constants.ACTIVE_ATTRIBUTES) return 0;
|
|
160
|
+
if (pname !== constants.LINK_STATUS) return true;
|
|
161
|
+
if (!Number.isFinite(enforcedVectors)) return true;
|
|
162
|
+
if (typeof program !== 'object' || program === null) return true;
|
|
163
|
+
const source = programFragments.get(program);
|
|
164
|
+
return source === undefined || countUniformVectors(source) <= enforcedVectors;
|
|
165
|
+
},
|
|
166
|
+
getActiveUniform: () => ({ name: '', size: 1, type: 0 }),
|
|
167
|
+
getActiveAttrib: () => ({ name: '', size: 1, type: 0 }),
|
|
168
|
+
getUniformLocation: () => ({}),
|
|
169
|
+
getAttribLocation: () => -1,
|
|
170
|
+
checkFramebufferStatus: () => constants.FRAMEBUFFER_COMPLETE,
|
|
171
|
+
getError: () => constants.NO_ERROR,
|
|
172
|
+
getShaderInfoLog: () => '',
|
|
173
|
+
/* ANGLE's own words for this refusal, so a test asserting on the message is asserting on the
|
|
174
|
+
sentence a consumer actually pastes into a report. */
|
|
175
|
+
getProgramInfoLog: () =>
|
|
176
|
+
Number.isFinite(enforcedVectors)
|
|
177
|
+
? `FRAGMENT shader uniforms count exceeds MAX_FRAGMENT_UNIFORM_VECTORS(${enforcedVectors})`
|
|
178
|
+
: '',
|
|
179
|
+
isContextLost: () => false,
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const gl = new Proxy(
|
|
183
|
+
{},
|
|
184
|
+
{
|
|
185
|
+
get(_target, prop: string) {
|
|
186
|
+
if (prop in constants) return constants[prop];
|
|
187
|
+
if (prop in answers) {
|
|
188
|
+
return (...args: unknown[]) => {
|
|
189
|
+
calls.push({ name: prop, args });
|
|
190
|
+
return answers[prop]?.(...args);
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/* An unnamed call: recorded, and answered with a fresh object so a handle is a handle. */
|
|
194
|
+
return (...args: unknown[]) => {
|
|
195
|
+
calls.push({ name: prop, args });
|
|
196
|
+
return {};
|
|
197
|
+
};
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
) as unknown as WebGL2RenderingContext;
|
|
201
|
+
|
|
202
|
+
const canvas = {
|
|
203
|
+
width: 640,
|
|
204
|
+
height: 480,
|
|
205
|
+
clientWidth: 640,
|
|
206
|
+
clientHeight: 480,
|
|
207
|
+
getContext: () => gl,
|
|
208
|
+
addEventListener: () => {},
|
|
209
|
+
removeEventListener: () => {},
|
|
210
|
+
getBoundingClientRect: () => ({ left: 0, top: 0, width: 640, height: 480 }),
|
|
211
|
+
} as unknown as HTMLCanvasElement;
|
|
212
|
+
|
|
213
|
+
return { gl, canvas, calls };
|
|
214
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hold a frame budget by moving the drawing-buffer scale, and nothing else.
|
|
3
|
+
*
|
|
4
|
+
* This is the safety net the GPU-budget design asks for, and the reason it is worth
|
|
5
|
+
* having is that it works on hardware nobody here owns — including hardware that does not
|
|
6
|
+
* exist yet. One of the three players whose reports started that design found the cure by
|
|
7
|
+
* hand: they shrank the browser window until the game was smooth. This does the same
|
|
8
|
+
* thing without asking anyone to.
|
|
9
|
+
*
|
|
10
|
+
* **Pure by design: no GL, no DOM, no clock.** Frame times come in, a new scale comes
|
|
11
|
+
* out, and the caller decides what to do with it. That is what makes it testable at all,
|
|
12
|
+
* because every device it exists for is one no test machine has.
|
|
13
|
+
*
|
|
14
|
+
* **Asymmetric on purpose.** Dropping is fast, because a player at 6 fps needs relief
|
|
15
|
+
* now. Raising is slow and waits behind several consecutive good windows, because a
|
|
16
|
+
* resolution that oscillates is more visible than one that is slightly too low.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { withDefaults } from '../core/withDefaults.ts';
|
|
20
|
+
export interface GovernorLimits {
|
|
21
|
+
/**
|
|
22
|
+
* The frame time a frame is allowed, in milliseconds. Longer than this is a *long* frame.
|
|
23
|
+
*
|
|
24
|
+
* 40 rather than 16.67, and that gap is the tolerance. This is not a governor for
|
|
25
|
+
* squeezing a machine from 55 fps to 60: it exists for the parts that render at 4 to 9
|
|
26
|
+
* fps, and a trigger anywhere near the vsync interval would spend its life reacting to
|
|
27
|
+
* jitter on machines that are entirely fine. It is `LONG_FRAME_MS` from the consuming
|
|
28
|
+
* game's own frame health, deliberately, because that number has already been tuned
|
|
29
|
+
* against real false positives.
|
|
30
|
+
*/
|
|
31
|
+
readonly budgetMs: number;
|
|
32
|
+
/**
|
|
33
|
+
* Share of a window's frames that must be long before the window counts as bad.
|
|
34
|
+
*
|
|
35
|
+
* **This is the guard that makes a busy high-end machine safe.** One hitch in sixty
|
|
36
|
+
* frames is a 1.7% share and decides nothing; a garbage collection, a shader compile, a
|
|
37
|
+
* texture upload or another application grabbing the GPU all look like that. Half the
|
|
38
|
+
* window being long is not a hitch, it is the machine.
|
|
39
|
+
*/
|
|
40
|
+
readonly badShare: number;
|
|
41
|
+
/** Never go below this. A soft picture beats a slideshow. */
|
|
42
|
+
readonly minScale: number;
|
|
43
|
+
/** Frames per decision. One slow frame is noise; a window of them is evidence. */
|
|
44
|
+
readonly windowFrames: number;
|
|
45
|
+
/**
|
|
46
|
+
* Consecutive bad windows before the scale actually moves.
|
|
47
|
+
*
|
|
48
|
+
* The second half of the tolerance, and the same reasoning `SLOW_WINDOWS` carries in the
|
|
49
|
+
* game: one bad window is a level load, a world build, a tab that just came back. Two in
|
|
50
|
+
* a row is a machine, because none of those things happen twice in a row.
|
|
51
|
+
*/
|
|
52
|
+
readonly badWindows: number;
|
|
53
|
+
/** How far to drop in one decision. */
|
|
54
|
+
readonly dropStep: number;
|
|
55
|
+
/** How far to raise in one decision. Deliberately smaller than `dropStep`. */
|
|
56
|
+
readonly raiseStep: number;
|
|
57
|
+
/** Consecutive clean windows required before raising at all. */
|
|
58
|
+
readonly raisePatience: number;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Deliberately hard to trigger. Work through what a healthy machine has to do to move it.
|
|
63
|
+
*
|
|
64
|
+
* At 120 fps, sixty frames is half a second. To drop one step a machine must spend **thirty
|
|
65
|
+
* of those sixty frames over 40 ms**, then do it again in the very next window: roughly a
|
|
66
|
+
* full second in which half the frames missed 25 fps. Nothing transient does that. A
|
|
67
|
+
* garbage collection is one frame, a shader compile is a handful, another application
|
|
68
|
+
* grabbing the GPU for a moment is a fraction of a window, and every one of them leaves the
|
|
69
|
+
* share far under a half.
|
|
70
|
+
*
|
|
71
|
+
* The devices this exists for are not marginal and do not need a sensitive trigger.
|
|
72
|
+
* `NFD6QQ`'s Adreno 619 held **156.66 ms** — every frame long, a share of 1.0 — so it
|
|
73
|
+
* clears two windows without ambiguity while a busy desktop never clears one.
|
|
74
|
+
*
|
|
75
|
+
* The 0.5 floor is `RESOLUTION_MIN` from the game's own settings screen, so the governor can
|
|
76
|
+
* never take a player somewhere they could not have gone themselves.
|
|
77
|
+
*/
|
|
78
|
+
export const DEFAULT_GOVERNOR_LIMITS: GovernorLimits = {
|
|
79
|
+
budgetMs: 40,
|
|
80
|
+
badShare: 0.5,
|
|
81
|
+
minScale: 0.5,
|
|
82
|
+
windowFrames: 60,
|
|
83
|
+
badWindows: 2,
|
|
84
|
+
dropStep: 0.25,
|
|
85
|
+
raiseStep: 0.125,
|
|
86
|
+
raisePatience: 4,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export class ResolutionGovernor {
|
|
90
|
+
private readonly limits: GovernorLimits;
|
|
91
|
+
private ceiling: number;
|
|
92
|
+
private current: number;
|
|
93
|
+
private frames = 0;
|
|
94
|
+
private longFrames = 0;
|
|
95
|
+
private badWindows = 0;
|
|
96
|
+
private goodWindows = 0;
|
|
97
|
+
|
|
98
|
+
constructor(ceiling: number, limits: Partial<GovernorLimits> = {}) {
|
|
99
|
+
this.limits = withDefaults(DEFAULT_GOVERNOR_LIMITS, limits);
|
|
100
|
+
this.ceiling = ceiling;
|
|
101
|
+
this.current = ceiling;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
get scale(): number {
|
|
105
|
+
return this.current;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* The player's own ceiling moved.
|
|
110
|
+
*
|
|
111
|
+
* A *lower* ceiling applies at once, because their choice is authority and waiting a
|
|
112
|
+
* window to honour it would be ignoring them. A *higher* one is only a permission: it
|
|
113
|
+
* does not raise the current scale, because jumping up would undo a drop the device had
|
|
114
|
+
* already earned. The patience path decides whether it can afford to climb back.
|
|
115
|
+
*/
|
|
116
|
+
setCeiling(ceiling: number): void {
|
|
117
|
+
this.ceiling = ceiling;
|
|
118
|
+
if (this.current > ceiling) this.current = ceiling;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** Start the window again, leaving the scale where it is. */
|
|
122
|
+
reset(): void {
|
|
123
|
+
this.frames = 0;
|
|
124
|
+
this.longFrames = 0;
|
|
125
|
+
this.badWindows = 0;
|
|
126
|
+
this.goodWindows = 0;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* One frame. Returns the new scale when it changed and `null` when it did not, so the
|
|
131
|
+
* caller does no GL or DOM work on an ordinary frame.
|
|
132
|
+
*
|
|
133
|
+
* `playable` exists because of `DZTF9F`, where an RTX 3060 filed a report calling
|
|
134
|
+
* itself unplayable from a menu: a menu frame and a hidden-tab frame are not verdicts
|
|
135
|
+
* about the machine. A governor that believed them would soften a game running
|
|
136
|
+
* perfectly, which is the same false positive with a more visible symptom.
|
|
137
|
+
*/
|
|
138
|
+
sample(frameMs: number, playable: boolean): number | null {
|
|
139
|
+
if (!playable) return null;
|
|
140
|
+
|
|
141
|
+
this.frames++;
|
|
142
|
+
/*
|
|
143
|
+
* A *share* of long frames, not the worst one.
|
|
144
|
+
*
|
|
145
|
+
* The worst frame in a window was the first version of this and it was wrong in the
|
|
146
|
+
* one way that matters: with any budget near the vsync interval, a single hitch on an
|
|
147
|
+
* otherwise perfect machine drops a resolution step. "The worst frame decides" is the
|
|
148
|
+
* right rule for *diagnosing* a device, because a mean hides a machine that is fine
|
|
149
|
+
* until something happens, and it is the wrong rule for a *control loop*, which has to
|
|
150
|
+
* ignore everything it cannot act on. A share ignores hitches by construction.
|
|
151
|
+
*/
|
|
152
|
+
if (frameMs > this.limits.budgetMs) this.longFrames++;
|
|
153
|
+
if (this.frames < this.limits.windowFrames) return null;
|
|
154
|
+
|
|
155
|
+
const share = this.longFrames / this.frames;
|
|
156
|
+
this.frames = 0;
|
|
157
|
+
this.longFrames = 0;
|
|
158
|
+
|
|
159
|
+
if (share >= this.limits.badShare) {
|
|
160
|
+
/*
|
|
161
|
+
* A bad window is evidence, not a decision. It takes `badWindows` of them in a row,
|
|
162
|
+
* so a world build or a tab coming back cannot move anything on its own.
|
|
163
|
+
*/
|
|
164
|
+
this.goodWindows = 0;
|
|
165
|
+
this.badWindows++;
|
|
166
|
+
if (this.badWindows < this.limits.badWindows) return null;
|
|
167
|
+
this.badWindows = 0;
|
|
168
|
+
|
|
169
|
+
const next = Math.max(this.limits.minScale, this.current - this.limits.dropStep);
|
|
170
|
+
if (next === this.current) return null;
|
|
171
|
+
this.current = next;
|
|
172
|
+
return this.current;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/*
|
|
176
|
+
* A window that was not bad clears the run of bad ones. Two bad windows separated by a
|
|
177
|
+
* good one are two hiccups, and treating them as a streak would mean any long enough
|
|
178
|
+
* session eventually drops the resolution of a machine that never needed it.
|
|
179
|
+
*/
|
|
180
|
+
this.badWindows = 0;
|
|
181
|
+
this.goodWindows++;
|
|
182
|
+
if (this.goodWindows < this.limits.raisePatience) return null;
|
|
183
|
+
this.goodWindows = 0;
|
|
184
|
+
const next = Math.min(this.ceiling, this.current + this.limits.raiseStep);
|
|
185
|
+
if (next === this.current) return null;
|
|
186
|
+
this.current = next;
|
|
187
|
+
return this.current;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { TRAMPLE_SLOTS } from './trample.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* How wind and footfall deform a scatter batch, decided once for both backends.
|
|
5
|
+
*
|
|
6
|
+
* **Every number here is a conversion, and a copy of one would drift.** The vertex stage is
|
|
7
|
+
* handed metres of bend rather than metres per second, a time already scaled, and a wind
|
|
8
|
+
* direction already normalised — so the same gust has to arrive at both backends through the
|
|
9
|
+
* same arithmetic or a field of grass leans differently depending on which one is drawing it.
|
|
10
|
+
* That is the 2026-08-13 rule in `AGENTS.md`: the decision is neutral, the binding is not.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** How far a press reaches, and how far down it pushes. */
|
|
14
|
+
const TRAMPLE_RADIUS_M = 1.1;
|
|
15
|
+
const TRAMPLE_DEPTH = 0.8;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Zeroed presses, for a batch nothing walks through.
|
|
19
|
+
*
|
|
20
|
+
* Bound rather than skipped: a uniform array still holding the last batch's presses would
|
|
21
|
+
* flatten the *next* one, and the grit from a drift is drawn through this same path — which
|
|
22
|
+
* would have made a slide comb grass it was nowhere near.
|
|
23
|
+
*/
|
|
24
|
+
const EMPTY_TRAMPLE = new Float32Array(TRAMPLE_SLOTS * 4);
|
|
25
|
+
|
|
26
|
+
/** What the scatter vertex stage reads, after every conversion has been applied. */
|
|
27
|
+
export interface ScatterDeform {
|
|
28
|
+
/** Unit wind direction, or zero when there is no wind to have a direction. */
|
|
29
|
+
readonly direction: Float32Array;
|
|
30
|
+
/** **Metres of bend, not metres per second.** A blade at the wind's own speed lies flat. */
|
|
31
|
+
bend: number;
|
|
32
|
+
gust: number;
|
|
33
|
+
time: number;
|
|
34
|
+
readonly spatialPhase: Float32Array;
|
|
35
|
+
trample: Float32Array;
|
|
36
|
+
trampleRadius: number;
|
|
37
|
+
trampleDepth: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Allocate one per binder, refilled per call: both callers are per-frame paths. */
|
|
41
|
+
export function createScatterDeform(): ScatterDeform {
|
|
42
|
+
return {
|
|
43
|
+
direction: new Float32Array(2),
|
|
44
|
+
bend: 0,
|
|
45
|
+
gust: 0,
|
|
46
|
+
time: 0,
|
|
47
|
+
spatialPhase: new Float32Array([0.18, 0.13]),
|
|
48
|
+
trample: EMPTY_TRAMPLE,
|
|
49
|
+
trampleRadius: TRAMPLE_RADIUS_M,
|
|
50
|
+
trampleDepth: TRAMPLE_DEPTH,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Convert a gust into what the shader wants, into a target the caller owns. */
|
|
55
|
+
export function resolveScatterDeform(
|
|
56
|
+
windX: number,
|
|
57
|
+
windZ: number,
|
|
58
|
+
windGust: number,
|
|
59
|
+
timeSeconds: number,
|
|
60
|
+
trample: Float32Array | null,
|
|
61
|
+
out: ScatterDeform,
|
|
62
|
+
): ScatterDeform {
|
|
63
|
+
const speed = Math.hypot(windX, windZ);
|
|
64
|
+
const invSpeed = speed > 1e-5 ? 1 / speed : 0;
|
|
65
|
+
out.direction[0] = windX * invSpeed;
|
|
66
|
+
out.direction[1] = windZ * invSpeed;
|
|
67
|
+
out.bend = speed * 0.045;
|
|
68
|
+
out.gust = windGust * 0.06;
|
|
69
|
+
out.time = timeSeconds * 1.6;
|
|
70
|
+
out.trample = trample ?? EMPTY_TRAMPLE;
|
|
71
|
+
return out;
|
|
72
|
+
}
|