@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,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A colour grade: a lookup table over display values, applied where the output transform is.
|
|
3
|
+
*
|
|
4
|
+
* **A look, not a conversion, and the difference decides where it goes.** `outputTransform.ts` is
|
|
5
|
+
* the conversion from scene units to display values and every pass has to agree about it. A grade
|
|
6
|
+
* is what a colourist did afterwards — the same three numbers in, three different numbers out —
|
|
7
|
+
* and it is *display-referred*, which is what every `.cube` a grading tool exports is. So it is
|
|
8
|
+
* applied **after** the transform and never before it.
|
|
9
|
+
*
|
|
10
|
+
* **It rides the composite and needs `screenEffects`, which is the same rule `hdrScene` already
|
|
11
|
+
* carries and in the same words**: without a composite there is nothing at the end to grade in.
|
|
12
|
+
* Every forward pass grades *itself* when nothing follows it, so a lookup table applied there
|
|
13
|
+
* would need a sampler in six programs to reach a consumer who has deliberately switched
|
|
14
|
+
* post-processing off — and a consumer who switched post-processing off did not ask for a grade.
|
|
15
|
+
* `setColourGrade` says so out loud rather than doing nothing, because a look that silently does
|
|
16
|
+
* not apply is the failure this repository's rules exist to prevent.
|
|
17
|
+
*
|
|
18
|
+
* **`RGBA8` and trilinear, which is what a lookup table is everywhere.** The alpha channel is
|
|
19
|
+
* unused and opaque; a three-channel texture would save a quarter and is not a format WebGL2 can
|
|
20
|
+
* filter as a 3D target. The filtering is what makes a 32-lattice table smooth — without it the
|
|
21
|
+
* grade bands, which is the one artefact a grade must never introduce.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/** A cube of display values: `size` on each axis, `size ** 3 * 4` bytes, red varying fastest. */
|
|
25
|
+
export interface ColourGradeLut {
|
|
26
|
+
/** Lattice points along each axis. 32 and 33 are what grading tools export. */
|
|
27
|
+
readonly size: number;
|
|
28
|
+
/** `RGBA8`, `size ** 3 * 4` bytes, indexed `((b * size + g) * size + r) * 4`. */
|
|
29
|
+
readonly data: Uint8Array;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The lattice the placeholder is built at, and **two is exact rather than merely small**.
|
|
34
|
+
*
|
|
35
|
+
* Identity is a linear function and a trilinear fetch through a lattice whose corners hold their
|
|
36
|
+
* own coordinates reproduces a linear function exactly. So the texture bound when nothing is
|
|
37
|
+
* graded is the right answer if anything ever samples it, rather than an inert stand-in that
|
|
38
|
+
* happens not to be read — which is the same reasoning the ambient-occlusion and bloom
|
|
39
|
+
* placeholders give for being a real texture rather than an unbound unit.
|
|
40
|
+
*/
|
|
41
|
+
export const GRADE_PLACEHOLDER_SIZE = 2;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The largest lattice accepted, because the cost is cubic and a caller will not feel it.
|
|
45
|
+
*
|
|
46
|
+
* 64 is a megabyte of texture; 128 would be eight. Refused by name rather than resampled, because
|
|
47
|
+
* a resample is a look the caller did not choose — and a grade that is quietly not the grade
|
|
48
|
+
* somebody authored is worse than one that will not load.
|
|
49
|
+
*/
|
|
50
|
+
export const MAX_GRADE_SIZE = 64;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A table that changes nothing.
|
|
54
|
+
*
|
|
55
|
+
* Live code rather than a test fixture: it is what a frame with no grade has bound, and it is what
|
|
56
|
+
* a consumer starts from when building one by hand.
|
|
57
|
+
*/
|
|
58
|
+
export function identityGradeLut(size: number): ColourGradeLut {
|
|
59
|
+
const data = new Uint8Array(size * size * size * 4);
|
|
60
|
+
const last = size > 1 ? size - 1 : 1;
|
|
61
|
+
let at = 0;
|
|
62
|
+
/*
|
|
63
|
+
* Blue slowest, red fastest — the order a 3D texture is stored in, and the order the fetch
|
|
64
|
+
* assumes. Walking it the other way builds a table that is valid, filters correctly, and swaps
|
|
65
|
+
* the picture's colour axes, which reads as a bad export rather than as a packing bug.
|
|
66
|
+
*/
|
|
67
|
+
for (let b = 0; b < size; b++) {
|
|
68
|
+
for (let g = 0; g < size; g++) {
|
|
69
|
+
for (let r = 0; r < size; r++) {
|
|
70
|
+
data[at] = Math.round((r / last) * 255);
|
|
71
|
+
data[at + 1] = Math.round((g / last) * 255);
|
|
72
|
+
data[at + 2] = Math.round((b / last) * 255);
|
|
73
|
+
data[at + 3] = 255;
|
|
74
|
+
at += 4;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { size, data };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Refuse a table that is not one, at init, naming what was expected.
|
|
83
|
+
*
|
|
84
|
+
* **Fail fast and loud is the rule and this is where it applies**: a lookup table of the wrong
|
|
85
|
+
* length is a file read wrongly, and it still uploads, still filters and still draws a picture —
|
|
86
|
+
* one whose colours are a scrambled function of the right ones. Nothing downstream can tell.
|
|
87
|
+
*/
|
|
88
|
+
export function validateGradeLut(lut: ColourGradeLut): void {
|
|
89
|
+
if (!Number.isInteger(lut.size) || lut.size < 2) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
`setColourGrade: a lookup table needs at least 2 lattice points a side, got ${lut.size}. ` +
|
|
92
|
+
'A single texel is a constant colour, not a grade.',
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
if (lut.size > MAX_GRADE_SIZE) {
|
|
96
|
+
throw new Error(
|
|
97
|
+
`setColourGrade: ${lut.size} lattice points a side is past the ceiling of ` +
|
|
98
|
+
`${MAX_GRADE_SIZE}, which is a megabyte of texture. Resample it yourself if that is ` +
|
|
99
|
+
'what you meant — this will not do it silently, because a resample is a look.',
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
const expected = lut.size ** 3 * 4;
|
|
103
|
+
if (lut.data.length !== expected) {
|
|
104
|
+
throw new Error(
|
|
105
|
+
`setColourGrade: a ${lut.size}-lattice table expects ${expected} bytes of RGBA8 and this ` +
|
|
106
|
+
`one has ${lut.data.length}. Red varies fastest, then green, then blue.`,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createHandleRegistry, definitionAt, type HandleRegistry } from './handleRegistry.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A compute definition a package contributes, and the two things it is handed.
|
|
5
|
+
*
|
|
6
|
+
* **This is `pass.ts` again, for the one stage that only one backend has.** A package that wants
|
|
7
|
+
* a radix sort, a light binner or a skinning kernel has nowhere to put it: the renderer's verb
|
|
8
|
+
* surface is fixed and nothing outside `render/` can add to it. `registerPass` answered that for
|
|
9
|
+
* drawing; this answers it for the stage before drawing.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* What a registered definition is handed once, at registration, to build its resources.
|
|
14
|
+
*
|
|
15
|
+
* **There is no WebGL2 arm, and that absence is the type saying so.** `PassDevice` is a union
|
|
16
|
+
* because both backends can draw. WebGL2 has no compute shaders — not "not yet", the language has
|
|
17
|
+
* none — so a second arm would be a shape a contributor could switch on and never reach.
|
|
18
|
+
* `Renderer.computeSupported` answers `false` there and `registerCompute` refuses in words.
|
|
19
|
+
*
|
|
20
|
+
* Tagged all the same, so that a second arm arriving later is a compile error at every
|
|
21
|
+
* contributor rather than a silent widening, and so this reads as the same shape as `PassDevice`
|
|
22
|
+
* to somebody who has just read that one.
|
|
23
|
+
*/
|
|
24
|
+
export type ComputeDevice = { readonly backend: 'webgpu'; readonly device: GPUDevice };
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* What it is handed at each dispatch.
|
|
28
|
+
*
|
|
29
|
+
* **The engine opens the pass and hands it over, rather than handing over the command encoder.**
|
|
30
|
+
* A definition holding the encoder could open a compute pass while a render pass was open, which
|
|
31
|
+
* WebGPU forbids and which reports itself at `submit` rather than at the call that caused it —
|
|
32
|
+
* the failure shape the 2026-08-14 rule is about, where the result is no picture from a frame
|
|
33
|
+
* that recorded correctly. Handing over the pass keeps that invariant in one place instead of in
|
|
34
|
+
* every contributor.
|
|
35
|
+
*
|
|
36
|
+
* A definition that needs an encoder of its own for a readback still has one: it holds `device`
|
|
37
|
+
* from `init`, and a `copyBufferToBuffer` submitted afterwards sees this dispatch's result,
|
|
38
|
+
* because submission order is execution order.
|
|
39
|
+
*/
|
|
40
|
+
export type ComputeContext = { readonly backend: 'webgpu'; readonly pass: GPUComputePassEncoder };
|
|
41
|
+
|
|
42
|
+
export interface ComputeDefinition {
|
|
43
|
+
/** For diagnostics, and for the label the backend gives the encoder and the pass. */
|
|
44
|
+
readonly label: string;
|
|
45
|
+
/** Build pipelines and buffers. Called once, when the definition is registered. */
|
|
46
|
+
init?(device: ComputeDevice): void;
|
|
47
|
+
/**
|
|
48
|
+
* Set a pipeline, set bind groups, and call `dispatchWorkgroups`.
|
|
49
|
+
*
|
|
50
|
+
* **The workgroup count is yours and does not cross the surface**, exactly as a contributed
|
|
51
|
+
* pass issues its own draw calls. The count comes from data the definition owns — a light
|
|
52
|
+
* count, a cluster count — so a renderer-side `(x, y, z)` would be one fact in two places, and
|
|
53
|
+
* the renderer's copy would be the one nobody updated.
|
|
54
|
+
*
|
|
55
|
+
* **Allocates nothing.** This is a per-frame path and the house rule about them binds a
|
|
56
|
+
* contributor exactly as it binds the renderer.
|
|
57
|
+
*/
|
|
58
|
+
dispatch(ctx: ComputeContext): void;
|
|
59
|
+
/** Release what `init` built. Called on `unregisterCompute` and when the renderer is disposed. */
|
|
60
|
+
dispose?(device: ComputeDevice): void;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* A registered definition, as the caller holds it.
|
|
65
|
+
*
|
|
66
|
+
* A slot and a generation packed into one number, for the reason `PassHandle` explains: a handle
|
|
67
|
+
* kept past `unregisterCompute` answers nothing rather than answering to whoever took the slot.
|
|
68
|
+
*/
|
|
69
|
+
export type ComputeHandle = number;
|
|
70
|
+
|
|
71
|
+
export type ComputeRegistry = HandleRegistry<ComputeDefinition>;
|
|
72
|
+
|
|
73
|
+
export function createComputeRegistry(): ComputeRegistry {
|
|
74
|
+
return createHandleRegistry<ComputeDefinition>();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** The definition a handle names, or `undefined` if it names one that has been released. */
|
|
78
|
+
export function computeAt(
|
|
79
|
+
registry: ComputeRegistry,
|
|
80
|
+
handle: ComputeHandle,
|
|
81
|
+
): ComputeDefinition | undefined {
|
|
82
|
+
return definitionAt(registry, handle);
|
|
83
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notice a lost drawing context, notice it coming back, and ask the browser for it.
|
|
3
|
+
*
|
|
4
|
+
* The engine owns the GL context, so it owns noticing both halves. A game reaching for
|
|
5
|
+
* `renderer.canvas.addEventListener('webglcontextlost')` would be the game reaching into
|
|
6
|
+
* the engine's internals.
|
|
7
|
+
*
|
|
8
|
+
* `preventDefault` is not politeness: it is the browser's signal that the page intends to
|
|
9
|
+
* restore rather than to die. Without it the context is gone for good and the player is
|
|
10
|
+
* looking at a black canvas that nothing will ever repaint.
|
|
11
|
+
*
|
|
12
|
+
* **The restore is a separate sink, and that is the point.** Routing it to `onLost` would
|
|
13
|
+
* report a fault at the moment the fault ended, which reads in a bug report as a device
|
|
14
|
+
* that lost its context twice. `NFD6QQ` is the report that proved the restore half was
|
|
15
|
+
* missing altogether: the promise `preventDefault` makes was made 29 s into a session on
|
|
16
|
+
* an Adreno 619, and nothing in either repository had ever been listening to keep it.
|
|
17
|
+
*
|
|
18
|
+
* Restoring is *not* the same as redrawing. Every resource the renderer holds is created
|
|
19
|
+
* in its constructor and `readonly` thereafter — the same reason a quality change is
|
|
20
|
+
* construction-time — so a listener that wants pixels again has to take the page through
|
|
21
|
+
* a reload. This function only makes the moment observable.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Returns a detach function, which a renderer that can be torn down has to call.
|
|
25
|
+
*
|
|
26
|
+
* The listeners used to be anonymous and therefore unremovable. That is invisible in a
|
|
27
|
+
* game whose renderer lives as long as its page, and a leak in one that does not: a game
|
|
28
|
+
* embedded in a website is mounted and unmounted every time the player enters and leaves
|
|
29
|
+
* it, and each mount left a pair of listeners holding the previous renderer alive through
|
|
30
|
+
* their closures.
|
|
31
|
+
*/
|
|
32
|
+
export function attachContextLoss(
|
|
33
|
+
canvas: HTMLCanvasElement,
|
|
34
|
+
onLost: () => void,
|
|
35
|
+
onRestored: () => void,
|
|
36
|
+
): () => void {
|
|
37
|
+
const lost = (event: Event): void => {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
onLost();
|
|
40
|
+
};
|
|
41
|
+
const restored = (): void => {
|
|
42
|
+
onRestored();
|
|
43
|
+
};
|
|
44
|
+
canvas.addEventListener('webglcontextlost', lost);
|
|
45
|
+
canvas.addEventListener('webglcontextrestored', restored);
|
|
46
|
+
return () => {
|
|
47
|
+
canvas.removeEventListener('webglcontextlost', lost);
|
|
48
|
+
canvas.removeEventListener('webglcontextrestored', restored);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
import { createLineSegments } from './linePoints.ts';
|
|
2
|
+
import type { LineSegments } from './linePoints.ts';
|
|
3
|
+
import type { MeshData } from './mesh.ts';
|
|
4
|
+
import type { ConvexShape } from '@driftengine/physics';
|
|
5
|
+
import type { PhysicsWorld } from '@driftengine/physics';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Debug geometry, as line segments the renderer already knows how to draw.
|
|
9
|
+
*
|
|
10
|
+
* **This is the generator and not a pass**, and that is the whole reason it is small: `drawLines`
|
|
11
|
+
* has shipped on both backends since the polyline batch landed, with a world-space width and a
|
|
12
|
+
* pixel floor so a distant line does not strobe. What was missing was anything that turns what you
|
|
13
|
+
* want to *see* — a mesh's normals, the colliders a body actually carries — into segments, so every
|
|
14
|
+
* consumer who wanted a normals key wrote the geometry themselves or, far more often, did not.
|
|
15
|
+
*
|
|
16
|
+
* **What its absence has cost, measured rather than supposed.** One consumer wrote geometry with
|
|
17
|
+
* downward normals four separate times: their roads, their ditch banks, their roof planes, and
|
|
18
|
+
* every building in their world lit inside out. Each was found by looking at a screenshot and
|
|
19
|
+
* wondering why tarmac was black at midday, because a flipped normal near a lamp is a dimmer
|
|
20
|
+
* surface rather than an absent one and only a directional light makes it plain. A key that draws
|
|
21
|
+
* normals turns each of those into a ten-second job.
|
|
22
|
+
*
|
|
23
|
+
* **Nothing here throws and nothing here allocates after construction.** A debug drawer that threw
|
|
24
|
+
* when it ran out of room would take the frame with it at exactly the moment somebody was trying to
|
|
25
|
+
* see what was wrong, which is the opposite of its job; so a segment past capacity is counted in
|
|
26
|
+
* `dropped` and discarded, and a consumer who cares reads that number and builds a bigger one.
|
|
27
|
+
*/
|
|
28
|
+
export class DebugLines {
|
|
29
|
+
readonly segments: LineSegments;
|
|
30
|
+
private overflow = 0;
|
|
31
|
+
|
|
32
|
+
constructor(capacity: number) {
|
|
33
|
+
if (!(capacity > 0)) throw new Error(`DebugLines: capacity must be positive, got ${capacity}`);
|
|
34
|
+
this.segments = createLineSegments(capacity);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Segments asked for since the last `clear` that there was no room for. */
|
|
38
|
+
get dropped(): number {
|
|
39
|
+
return this.overflow;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
clear(): void {
|
|
43
|
+
this.segments.count = 0;
|
|
44
|
+
this.overflow = 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
segment(ax: number, ay: number, az: number, bx: number, by: number, bz: number): void {
|
|
48
|
+
const at = this.segments.count;
|
|
49
|
+
if (at >= this.segments.capacity) {
|
|
50
|
+
this.overflow++;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.segments.from[at * 3] = ax;
|
|
54
|
+
this.segments.from[at * 3 + 1] = ay;
|
|
55
|
+
this.segments.from[at * 3 + 2] = az;
|
|
56
|
+
this.segments.to[at * 3] = bx;
|
|
57
|
+
this.segments.to[at * 3 + 1] = by;
|
|
58
|
+
this.segments.to[at * 3 + 2] = bz;
|
|
59
|
+
this.segments.count = at + 1;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A spike out of every vertex along its normal.
|
|
64
|
+
*
|
|
65
|
+
* `stride` skips vertices, because a mesh of a hundred thousand vertices is a hundred thousand
|
|
66
|
+
* segments and a screen with nothing legible on it. The default draws them all, which is right
|
|
67
|
+
* for the small piece of geometry somebody is actually staring at.
|
|
68
|
+
*
|
|
69
|
+
* **A mesh built from flat faces has four coincident normals per quad**, so what appears is one
|
|
70
|
+
* spike per corner rather than one per face, and that is the honest picture: the attribute is per
|
|
71
|
+
* vertex and this draws the attribute.
|
|
72
|
+
*/
|
|
73
|
+
normals(mesh: MeshData, length = 0.25, stride = 1): void {
|
|
74
|
+
const count = mesh.positions.length / 3;
|
|
75
|
+
for (let v = 0; v < count; v += stride) {
|
|
76
|
+
const x = mesh.positions[v * 3] ?? 0;
|
|
77
|
+
const y = mesh.positions[v * 3 + 1] ?? 0;
|
|
78
|
+
const z = mesh.positions[v * 3 + 2] ?? 0;
|
|
79
|
+
this.segment(
|
|
80
|
+
x,
|
|
81
|
+
y,
|
|
82
|
+
z,
|
|
83
|
+
x + (mesh.normals[v * 3] ?? 0) * length,
|
|
84
|
+
y + (mesh.normals[v * 3 + 1] ?? 0) * length,
|
|
85
|
+
z + (mesh.normals[v * 3 + 2] ?? 0) * length,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** The twelve edges of a world-axis box. */
|
|
91
|
+
box(cx: number, cy: number, cz: number, hx: number, hy: number, hz: number): void {
|
|
92
|
+
for (const [a, b] of BOX_EDGES) {
|
|
93
|
+
this.segment(
|
|
94
|
+
cx + hx * (a[0] ?? 0),
|
|
95
|
+
cy + hy * (a[1] ?? 0),
|
|
96
|
+
cz + hz * (a[2] ?? 0),
|
|
97
|
+
cx + hx * (b[0] ?? 0),
|
|
98
|
+
cy + hy * (b[1] ?? 0),
|
|
99
|
+
cz + hz * (b[2] ?? 0),
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Three great circles, which is a sphere as far as an eye looking for one is concerned. */
|
|
105
|
+
sphere(cx: number, cy: number, cz: number, radius: number, points = 24): void {
|
|
106
|
+
this.circle(cx, cy, cz, radius, 1, 0, 0, 0, 0, 1, points);
|
|
107
|
+
this.circle(cx, cy, cz, radius, 1, 0, 0, 0, 1, 0, points);
|
|
108
|
+
this.circle(cx, cy, cz, radius, 0, 1, 0, 0, 0, 1, points);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* A closed ring of `points` segments, in the plane the two unit vectors span.
|
|
113
|
+
*
|
|
114
|
+
* The basis is passed in rather than derived from an axis because every caller here already has
|
|
115
|
+
* one, and deriving a perpendicular from an axis has a degenerate case that a caller with a real
|
|
116
|
+
* basis does not need to think about.
|
|
117
|
+
*/
|
|
118
|
+
circle(
|
|
119
|
+
cx: number,
|
|
120
|
+
cy: number,
|
|
121
|
+
cz: number,
|
|
122
|
+
radius: number,
|
|
123
|
+
ux: number,
|
|
124
|
+
uy: number,
|
|
125
|
+
uz: number,
|
|
126
|
+
vx: number,
|
|
127
|
+
vy: number,
|
|
128
|
+
vz: number,
|
|
129
|
+
points = 24,
|
|
130
|
+
): void {
|
|
131
|
+
let px = cx + ux * radius;
|
|
132
|
+
let py = cy + uy * radius;
|
|
133
|
+
let pz = cz + uz * radius;
|
|
134
|
+
for (let i = 1; i <= points; i++) {
|
|
135
|
+
const angle = (i / points) * Math.PI * 2;
|
|
136
|
+
const c = Math.cos(angle) * radius;
|
|
137
|
+
const s = Math.sin(angle) * radius;
|
|
138
|
+
const nx = cx + ux * c + vx * s;
|
|
139
|
+
const ny = cy + uy * c + vy * s;
|
|
140
|
+
const nz = cz + uz * c + vz * s;
|
|
141
|
+
this.segment(px, py, pz, nx, ny, nz);
|
|
142
|
+
px = nx;
|
|
143
|
+
py = ny;
|
|
144
|
+
pz = nz;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* One collider, placed by a body's position and orientation.
|
|
150
|
+
*
|
|
151
|
+
* **Dispatched on what the shape *is* rather than on a stored kind**, which is the same
|
|
152
|
+
* discrimination the narrow phase makes: a `sideRadius` is a cylinder, a `triangles` is a mesh, a
|
|
153
|
+
* `radius` over one point is a sphere and over two is a capsule, and anything with faces is a
|
|
154
|
+
* polytope drawn along its own face loops. A shape that grows a new representation appears here
|
|
155
|
+
* as its polytope hull rather than as nothing, which is the failure worth having.
|
|
156
|
+
*/
|
|
157
|
+
shape(
|
|
158
|
+
shape: ConvexShape,
|
|
159
|
+
px: number,
|
|
160
|
+
py: number,
|
|
161
|
+
pz: number,
|
|
162
|
+
qx = 0,
|
|
163
|
+
qy = 0,
|
|
164
|
+
qz = 0,
|
|
165
|
+
qw = 1,
|
|
166
|
+
): void {
|
|
167
|
+
const points = shape.vertices.length / 3;
|
|
168
|
+
const at = (i: number, out: number[]): void => {
|
|
169
|
+
rotate(
|
|
170
|
+
shape.vertices[i * 3] ?? 0,
|
|
171
|
+
shape.vertices[i * 3 + 1] ?? 0,
|
|
172
|
+
shape.vertices[i * 3 + 2] ?? 0,
|
|
173
|
+
qx,
|
|
174
|
+
qy,
|
|
175
|
+
qz,
|
|
176
|
+
qw,
|
|
177
|
+
out,
|
|
178
|
+
);
|
|
179
|
+
out[0] = (out[0] ?? 0) + px;
|
|
180
|
+
out[1] = (out[1] ?? 0) + py;
|
|
181
|
+
out[2] = (out[2] ?? 0) + pz;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
const mesh = shape.triangles;
|
|
185
|
+
if (mesh !== undefined) {
|
|
186
|
+
for (let t = 0; t < mesh.triangleCount; t++) {
|
|
187
|
+
for (let e = 0; e < 3; e++) {
|
|
188
|
+
const i = mesh.indices[t * 3 + e] ?? 0;
|
|
189
|
+
const j = mesh.indices[t * 3 + ((e + 1) % 3)] ?? 0;
|
|
190
|
+
/* Each interior edge belongs to two triangles; drawing it once is the same picture at
|
|
191
|
+
half the segments, which matters when the capacity is what stops the drawing. */
|
|
192
|
+
if (i > j) continue;
|
|
193
|
+
rotate(
|
|
194
|
+
mesh.positions[i * 3] ?? 0,
|
|
195
|
+
mesh.positions[i * 3 + 1] ?? 0,
|
|
196
|
+
mesh.positions[i * 3 + 2] ?? 0,
|
|
197
|
+
qx,
|
|
198
|
+
qy,
|
|
199
|
+
qz,
|
|
200
|
+
qw,
|
|
201
|
+
A,
|
|
202
|
+
);
|
|
203
|
+
rotate(
|
|
204
|
+
mesh.positions[j * 3] ?? 0,
|
|
205
|
+
mesh.positions[j * 3 + 1] ?? 0,
|
|
206
|
+
mesh.positions[j * 3 + 2] ?? 0,
|
|
207
|
+
qx,
|
|
208
|
+
qy,
|
|
209
|
+
qz,
|
|
210
|
+
qw,
|
|
211
|
+
B,
|
|
212
|
+
);
|
|
213
|
+
this.segment(
|
|
214
|
+
(A[0] ?? 0) + px,
|
|
215
|
+
(A[1] ?? 0) + py,
|
|
216
|
+
(A[2] ?? 0) + pz,
|
|
217
|
+
(B[0] ?? 0) + px,
|
|
218
|
+
(B[1] ?? 0) + py,
|
|
219
|
+
(B[2] ?? 0) + pz,
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (points === 1) {
|
|
227
|
+
at(0, A);
|
|
228
|
+
this.sphere(A[0] ?? 0, A[1] ?? 0, A[2] ?? 0, shape.radius);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (points === 2 && (shape.radius > 0 || shape.sideRadius > 0)) {
|
|
233
|
+
at(0, A);
|
|
234
|
+
at(1, B);
|
|
235
|
+
const round = shape.sideRadius > 0 ? shape.sideRadius : shape.radius;
|
|
236
|
+
basis(A, B, U, V);
|
|
237
|
+
if (shape.sideRadius > 0) {
|
|
238
|
+
/* A cylinder: two flat caps and a straight side, with a sharp rim between them. */
|
|
239
|
+
this.circle(
|
|
240
|
+
A[0] ?? 0,
|
|
241
|
+
A[1] ?? 0,
|
|
242
|
+
A[2] ?? 0,
|
|
243
|
+
round,
|
|
244
|
+
U[0] ?? 0,
|
|
245
|
+
U[1] ?? 0,
|
|
246
|
+
U[2] ?? 0,
|
|
247
|
+
V[0] ?? 0,
|
|
248
|
+
V[1] ?? 0,
|
|
249
|
+
V[2] ?? 0,
|
|
250
|
+
);
|
|
251
|
+
this.circle(
|
|
252
|
+
B[0] ?? 0,
|
|
253
|
+
B[1] ?? 0,
|
|
254
|
+
B[2] ?? 0,
|
|
255
|
+
round,
|
|
256
|
+
U[0] ?? 0,
|
|
257
|
+
U[1] ?? 0,
|
|
258
|
+
U[2] ?? 0,
|
|
259
|
+
V[0] ?? 0,
|
|
260
|
+
V[1] ?? 0,
|
|
261
|
+
V[2] ?? 0,
|
|
262
|
+
);
|
|
263
|
+
} else {
|
|
264
|
+
/* A capsule: a ball at each end, which is what its rounding actually is. */
|
|
265
|
+
this.sphere(A[0] ?? 0, A[1] ?? 0, A[2] ?? 0, round);
|
|
266
|
+
this.sphere(B[0] ?? 0, B[1] ?? 0, B[2] ?? 0, round);
|
|
267
|
+
}
|
|
268
|
+
for (const [sx, sy] of SIDE_ANGLES) {
|
|
269
|
+
const ox = (U[0] ?? 0) * sx * round + (V[0] ?? 0) * sy * round;
|
|
270
|
+
const oy = (U[1] ?? 0) * sx * round + (V[1] ?? 0) * sy * round;
|
|
271
|
+
const oz = (U[2] ?? 0) * sx * round + (V[2] ?? 0) * sy * round;
|
|
272
|
+
this.segment(
|
|
273
|
+
(A[0] ?? 0) + ox,
|
|
274
|
+
(A[1] ?? 0) + oy,
|
|
275
|
+
(A[2] ?? 0) + oz,
|
|
276
|
+
(B[0] ?? 0) + ox,
|
|
277
|
+
(B[1] ?? 0) + oy,
|
|
278
|
+
(B[2] ?? 0) + oz,
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const faces = shape.faceVertexStart.length - 1;
|
|
285
|
+
for (let f = 0; f < faces; f++) {
|
|
286
|
+
const start = shape.faceVertexStart[f] ?? 0;
|
|
287
|
+
const end = shape.faceVertexStart[f + 1] ?? 0;
|
|
288
|
+
for (let k = start; k < end; k++) {
|
|
289
|
+
const i = shape.faceVertexIndices[k] ?? 0;
|
|
290
|
+
const j = shape.faceVertexIndices[k + 1 === end ? start : k + 1] ?? 0;
|
|
291
|
+
/* Every edge is in two face loops, once each way round. Keeping the ascending one draws it
|
|
292
|
+
exactly once. */
|
|
293
|
+
if (i > j) continue;
|
|
294
|
+
at(i, A);
|
|
295
|
+
at(j, B);
|
|
296
|
+
this.segment(A[0] ?? 0, A[1] ?? 0, A[2] ?? 0, B[0] ?? 0, B[1] ?? 0, B[2] ?? 0);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Every body's collider in a world, where it is this tick.
|
|
303
|
+
*
|
|
304
|
+
* The other half of the key the report asked for. Bodies with no shape are skipped rather than
|
|
305
|
+
* refused: a world may hold one for a frame while it is being built.
|
|
306
|
+
*/
|
|
307
|
+
colliders(world: PhysicsWorld): void {
|
|
308
|
+
const bodies = world.bodies;
|
|
309
|
+
for (let i = 0; i < bodies.count; i++) {
|
|
310
|
+
const shape = bodies.shape[i];
|
|
311
|
+
if (shape === undefined) continue;
|
|
312
|
+
this.shape(
|
|
313
|
+
shape,
|
|
314
|
+
bodies.posX[i] ?? 0,
|
|
315
|
+
bodies.posY[i] ?? 0,
|
|
316
|
+
bodies.posZ[i] ?? 0,
|
|
317
|
+
bodies.rotX[i] ?? 0,
|
|
318
|
+
bodies.rotY[i] ?? 0,
|
|
319
|
+
bodies.rotZ[i] ?? 0,
|
|
320
|
+
bodies.rotW[i] ?? 1,
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/** Scratch, at module scope because a debug frame draws thousands of these. */
|
|
327
|
+
const A: number[] = [0, 0, 0];
|
|
328
|
+
const B: number[] = [0, 0, 0];
|
|
329
|
+
const U: number[] = [0, 0, 0];
|
|
330
|
+
const V: number[] = [0, 0, 0];
|
|
331
|
+
|
|
332
|
+
/** Where the four side lines of a capsule or cylinder sit around its axis. */
|
|
333
|
+
const SIDE_ANGLES: readonly (readonly [number, number])[] = [
|
|
334
|
+
[1, 0],
|
|
335
|
+
[0, 1],
|
|
336
|
+
[-1, 0],
|
|
337
|
+
[0, -1],
|
|
338
|
+
];
|
|
339
|
+
|
|
340
|
+
const BOX_EDGES: readonly (readonly [readonly number[], readonly number[]])[] = (() => {
|
|
341
|
+
const corners: number[][] = [];
|
|
342
|
+
for (const x of [-1, 1])
|
|
343
|
+
for (const y of [-1, 1]) for (const z of [-1, 1]) corners.push([x, y, z]);
|
|
344
|
+
const edges: [number[], number[]][] = [];
|
|
345
|
+
for (let i = 0; i < corners.length; i++) {
|
|
346
|
+
for (let j = i + 1; j < corners.length; j++) {
|
|
347
|
+
const a = corners[i] as number[];
|
|
348
|
+
const b = corners[j] as number[];
|
|
349
|
+
let differing = 0;
|
|
350
|
+
for (let k = 0; k < 3; k++) if (a[k] !== b[k]) differing++;
|
|
351
|
+
if (differing === 1) edges.push([a, b]);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return edges;
|
|
355
|
+
})();
|
|
356
|
+
|
|
357
|
+
/** `q * v * q⁻¹`, the standard two-cross form, into `out`. */
|
|
358
|
+
function rotate(
|
|
359
|
+
x: number,
|
|
360
|
+
y: number,
|
|
361
|
+
z: number,
|
|
362
|
+
qx: number,
|
|
363
|
+
qy: number,
|
|
364
|
+
qz: number,
|
|
365
|
+
qw: number,
|
|
366
|
+
out: number[],
|
|
367
|
+
): void {
|
|
368
|
+
const tx = 2 * (qy * z - qz * y);
|
|
369
|
+
const ty = 2 * (qz * x - qx * z);
|
|
370
|
+
const tz = 2 * (qx * y - qy * x);
|
|
371
|
+
out[0] = x + qw * tx + (qy * tz - qz * ty);
|
|
372
|
+
out[1] = y + qw * ty + (qz * tx - qx * tz);
|
|
373
|
+
out[2] = z + qw * tz + (qx * ty - qy * tx);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Two unit vectors perpendicular to the segment `a → b`, and to each other.
|
|
378
|
+
*
|
|
379
|
+
* The perpendicular is taken against whichever world axis the segment points along least, which is
|
|
380
|
+
* what stops the cross product collapsing for an axis-aligned shape — and every capsule and
|
|
381
|
+
* cylinder anybody builds is axis-aligned, so the degenerate case is the common one rather than the
|
|
382
|
+
* exotic one.
|
|
383
|
+
*/
|
|
384
|
+
function basis(a: number[], b: number[], u: number[], v: number[]): void {
|
|
385
|
+
let ax = (b[0] ?? 0) - (a[0] ?? 0);
|
|
386
|
+
let ay = (b[1] ?? 0) - (a[1] ?? 0);
|
|
387
|
+
let az = (b[2] ?? 0) - (a[2] ?? 0);
|
|
388
|
+
const length = Math.hypot(ax, ay, az) || 1;
|
|
389
|
+
ax /= length;
|
|
390
|
+
ay /= length;
|
|
391
|
+
az /= length;
|
|
392
|
+
const absX = Math.abs(ax);
|
|
393
|
+
const absY = Math.abs(ay);
|
|
394
|
+
const absZ = Math.abs(az);
|
|
395
|
+
const px = absX <= absY && absX <= absZ ? 1 : 0;
|
|
396
|
+
const py = absY < absX && absY <= absZ ? 1 : 0;
|
|
397
|
+
const pz = px === 0 && py === 0 ? 1 : 0;
|
|
398
|
+
let ux = ay * pz - az * py;
|
|
399
|
+
let uy = az * px - ax * pz;
|
|
400
|
+
let uz = ax * py - ay * px;
|
|
401
|
+
const ulength = Math.hypot(ux, uy, uz) || 1;
|
|
402
|
+
ux /= ulength;
|
|
403
|
+
uy /= ulength;
|
|
404
|
+
uz /= ulength;
|
|
405
|
+
u[0] = ux;
|
|
406
|
+
u[1] = uy;
|
|
407
|
+
u[2] = uz;
|
|
408
|
+
v[0] = ay * uz - az * uy;
|
|
409
|
+
v[1] = az * ux - ax * uz;
|
|
410
|
+
v[2] = ax * uy - ay * ux;
|
|
411
|
+
}
|