@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,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An SDF font's metrics, parsed once and asked many times.
|
|
3
|
+
*
|
|
4
|
+
* The atlas image is the consumer's business — it arrives as a `TexImageSource` like every
|
|
5
|
+
* other texture this engine takes, and the engine still fetches nothing. This owns only
|
|
6
|
+
* the numbers that turn a string into quads.
|
|
7
|
+
*/
|
|
8
|
+
export interface SdfGlyph {
|
|
9
|
+
readonly advance: number;
|
|
10
|
+
/** The glyph's ink box in font units, y-up: `planeTop` is above `planeBottom`. */
|
|
11
|
+
readonly planeLeft: number;
|
|
12
|
+
readonly planeBottom: number;
|
|
13
|
+
readonly planeRight: number;
|
|
14
|
+
readonly planeTop: number;
|
|
15
|
+
/**
|
|
16
|
+
* The glyph's cell in the atlas texture, in texels.
|
|
17
|
+
*
|
|
18
|
+
* **The single statement of this convention — nowhere else should restate it, only rely on
|
|
19
|
+
* it.** These run the same direction the atlas PNG's own rows do, and the same direction
|
|
20
|
+
* `createSurfaceTexture` actually uploads: `SurfaceTexture` (both backends) does not flip an
|
|
21
|
+
* `ImageBitmap` source, so texture `v = 0` samples the PNG's own row 0, its top. `atlasTop`
|
|
22
|
+
* is therefore the *smaller* number — nearer row 0 — and `atlasBottom` the larger one,
|
|
23
|
+
* unlike `planeTop`/`planeBottom` above, which are a world-space quantity and stay y-up.
|
|
24
|
+
* `writeUv` in `sdfTextLayout.ts` divides these by `atlasWidth`/`atlasHeight` and uses the
|
|
25
|
+
* result as `v` directly: no flip, because these already agree with what the texture does.
|
|
26
|
+
*
|
|
27
|
+
* A version that flipped these to be y-up — matching the plane box's own sign, so that
|
|
28
|
+
* "a texel and a plane coordinate agree on which way is up" — shipped for two days
|
|
29
|
+
* (2026-08-16) and flipped every glyph onto the wrong row of its atlas, because
|
|
30
|
+
* `SurfaceTexture` had already stopped flipping the upload two days earlier. Two
|
|
31
|
+
* conventions that each sound reasonable alone cancelled into a bug neither side's unit
|
|
32
|
+
* tests could see, because neither one renders a real texture.
|
|
33
|
+
*/
|
|
34
|
+
readonly atlasLeft: number;
|
|
35
|
+
readonly atlasBottom: number;
|
|
36
|
+
readonly atlasRight: number;
|
|
37
|
+
readonly atlasTop: number;
|
|
38
|
+
}
|
|
39
|
+
export interface SdfFont {
|
|
40
|
+
readonly family: string;
|
|
41
|
+
readonly unitsPerEm: number;
|
|
42
|
+
readonly ascender: number;
|
|
43
|
+
readonly descender: number;
|
|
44
|
+
readonly lineHeight: number;
|
|
45
|
+
readonly distanceRange: number;
|
|
46
|
+
readonly atlasWidth: number;
|
|
47
|
+
readonly atlasHeight: number;
|
|
48
|
+
/**
|
|
49
|
+
* Keys in the glyph table that are more than one character, longest first.
|
|
50
|
+
*
|
|
51
|
+
* A *pre-shaped run*: a string the generator handed to the platform's own text stack,
|
|
52
|
+
* which joined, reordered and shaped it, baked as one atlas cell. The runtime draws
|
|
53
|
+
* quads from metrics and does no shaping at all, so a script that joins its letters or
|
|
54
|
+
* reads right to left cannot be assembled from single glyphs at draw time. `أبو` came
|
|
55
|
+
* out as three disconnected isolated forms marching the wrong way; as one run it comes
|
|
56
|
+
* out as the word.
|
|
57
|
+
*
|
|
58
|
+
* Longest first because `sdfTextLayout.ts` takes the first match at the pen, and a
|
|
59
|
+
* shorter run that is a prefix of a longer one must not win.
|
|
60
|
+
*/
|
|
61
|
+
readonly runs: readonly string[];
|
|
62
|
+
glyph(character: string): SdfGlyph | null;
|
|
63
|
+
kerning(left: string, right: string): number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validate and index a metrics document.
|
|
67
|
+
*
|
|
68
|
+
* **Throws on a version it does not recognise**, which is the fail-fast-at-init rule
|
|
69
|
+
* earning its keep: the alternative is reading a field that moved and drawing text that is
|
|
70
|
+
* subtly misplaced, and misplaced text looks like a layout bug for as long as it takes to
|
|
71
|
+
* suspect the file.
|
|
72
|
+
*
|
|
73
|
+
* Required numeric fields fail at load, not draw: `unitsPerEm` scales every plane and atlas
|
|
74
|
+
* coordinate, so a missing one produces wrong sizes that look plausible until a frame lands
|
|
75
|
+
* beside a reference and they do not match. Every other required field is checked the same way.
|
|
76
|
+
*/
|
|
77
|
+
export declare function parseSdfFont(document: unknown): SdfFont;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An SDF font's metrics, parsed once and asked many times.
|
|
3
|
+
*
|
|
4
|
+
* The atlas image is the consumer's business — it arrives as a `TexImageSource` like every
|
|
5
|
+
* other texture this engine takes, and the engine still fetches nothing. This owns only
|
|
6
|
+
* the numbers that turn a string into quads.
|
|
7
|
+
*/
|
|
8
|
+
const SUPPORTED_VERSION = 1;
|
|
9
|
+
/**
|
|
10
|
+
* Validate and index a metrics document.
|
|
11
|
+
*
|
|
12
|
+
* **Throws on a version it does not recognise**, which is the fail-fast-at-init rule
|
|
13
|
+
* earning its keep: the alternative is reading a field that moved and drawing text that is
|
|
14
|
+
* subtly misplaced, and misplaced text looks like a layout bug for as long as it takes to
|
|
15
|
+
* suspect the file.
|
|
16
|
+
*
|
|
17
|
+
* Required numeric fields fail at load, not draw: `unitsPerEm` scales every plane and atlas
|
|
18
|
+
* coordinate, so a missing one produces wrong sizes that look plausible until a frame lands
|
|
19
|
+
* beside a reference and they do not match. Every other required field is checked the same way.
|
|
20
|
+
*/
|
|
21
|
+
export function parseSdfFont(document) {
|
|
22
|
+
if (typeof document !== 'object' || document === null) {
|
|
23
|
+
throw new Error('parseSdfFont: expected a metrics object');
|
|
24
|
+
}
|
|
25
|
+
const source = document;
|
|
26
|
+
if (source['version'] !== SUPPORTED_VERSION) {
|
|
27
|
+
throw new Error(`parseSdfFont: metrics version ${String(source['version'])}, this build reads ${SUPPORTED_VERSION}`);
|
|
28
|
+
}
|
|
29
|
+
if (typeof source['atlas'] !== 'object' || source['atlas'] === null) {
|
|
30
|
+
throw new Error('parseSdfFont: atlas field must be an object');
|
|
31
|
+
}
|
|
32
|
+
const atlas = source['atlas'];
|
|
33
|
+
if (typeof source['metrics'] !== 'object' || source['metrics'] === null) {
|
|
34
|
+
throw new Error('parseSdfFont: metrics field must be an object');
|
|
35
|
+
}
|
|
36
|
+
const metrics = source['metrics'];
|
|
37
|
+
if (typeof source['glyphs'] !== 'object' || source['glyphs'] === null) {
|
|
38
|
+
throw new Error('parseSdfFont: glyphs field must be an object');
|
|
39
|
+
}
|
|
40
|
+
const glyphs = source['glyphs'];
|
|
41
|
+
const kerning = (source['kerning'] ?? {});
|
|
42
|
+
// Validate required numeric fields
|
|
43
|
+
const requiredMetricsFields = ['unitsPerEm', 'ascender', 'descender', 'lineHeight'];
|
|
44
|
+
for (const field of requiredMetricsFields) {
|
|
45
|
+
if (typeof metrics[field] !== 'number') {
|
|
46
|
+
throw new Error(`parseSdfFont: metrics.${field} is required and must be a number`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const requiredAtlasFields = ['distanceRange', 'width', 'height'];
|
|
50
|
+
for (const field of requiredAtlasFields) {
|
|
51
|
+
if (typeof atlas[field] !== 'number') {
|
|
52
|
+
throw new Error(`parseSdfFont: atlas.${field} is required and must be a number`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
family: String(source['family'] ?? 'unnamed'),
|
|
57
|
+
unitsPerEm: metrics['unitsPerEm'],
|
|
58
|
+
ascender: metrics['ascender'],
|
|
59
|
+
descender: metrics['descender'],
|
|
60
|
+
lineHeight: metrics['lineHeight'],
|
|
61
|
+
distanceRange: atlas['distanceRange'],
|
|
62
|
+
atlasWidth: atlas['width'],
|
|
63
|
+
atlasHeight: atlas['height'],
|
|
64
|
+
runs: multiCharacterKeys(glyphs),
|
|
65
|
+
glyph(character) {
|
|
66
|
+
return glyphs[character] ?? null;
|
|
67
|
+
},
|
|
68
|
+
kerning(left, right) {
|
|
69
|
+
return kerning[`${left}\u0000${right}`] ?? 0;
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Every key that spans more than one UTF-16 unit, longest first.
|
|
75
|
+
*
|
|
76
|
+
* Length in UTF-16 units rather than code points, because the one consumer of this order
|
|
77
|
+
* is `String.prototype.startsWith`, which counts the same way. Ties break lexicographically
|
|
78
|
+
* so that the order is a property of the table and not of the order it was written in: an
|
|
79
|
+
* atlas is committed and diffed, and a list that reshuffled when a glyph was added would
|
|
80
|
+
* make every rebake look like a change.
|
|
81
|
+
*/
|
|
82
|
+
function multiCharacterKeys(glyphs) {
|
|
83
|
+
return Object.keys(glyphs)
|
|
84
|
+
.filter((key) => key.length > 1)
|
|
85
|
+
.sort((a, b) => b.length - a.length || (a < b ? -1 : a > b ? 1 : 0));
|
|
86
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A string as quads, in metres, from a font's metrics.
|
|
3
|
+
*
|
|
4
|
+
* **No GL here, for the reason `textLayout.ts` gives:** which quads a string produces is
|
|
5
|
+
* the same arithmetic on either backend, so it lives once and the two renderers own only
|
|
6
|
+
* their buffers. It is also the half worth testing, and testing it needs no context.
|
|
7
|
+
*
|
|
8
|
+
* The local frame is x right, y up from the baseline, z zero. A caller supplies the basis
|
|
9
|
+
* that puts that somewhere -- `billboardMatrixY` for a label that faces the camera, a model
|
|
10
|
+
* matrix for one lying on a surface.
|
|
11
|
+
*/
|
|
12
|
+
import type { SdfFont } from './sdfFont.ts';
|
|
13
|
+
export interface SdfTextStyle {
|
|
14
|
+
/** Cap height to baseline-to-baseline scale, in metres per em. */
|
|
15
|
+
readonly size: number;
|
|
16
|
+
readonly anchorX: 'left' | 'center' | 'right';
|
|
17
|
+
readonly anchorY: 'top' | 'middle' | 'baseline' | 'bottom';
|
|
18
|
+
/** Extra advance between glyphs, in ems. */
|
|
19
|
+
readonly letterSpacing: number;
|
|
20
|
+
/** Multiplier on the font's own line height. */
|
|
21
|
+
readonly lineHeight: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const DEFAULT_SDF_TEXT_STYLE: SdfTextStyle;
|
|
24
|
+
export declare class SdfTextLayout {
|
|
25
|
+
readonly positions: Float32Array<ArrayBuffer>;
|
|
26
|
+
readonly uvs: Float32Array<ArrayBuffer>;
|
|
27
|
+
readonly indices: Uint32Array<ArrayBuffer>;
|
|
28
|
+
quadCount: number;
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
private key;
|
|
32
|
+
constructor();
|
|
33
|
+
/**
|
|
34
|
+
* Lay a string out. Returns whether anything moved, so a caller can skip the upload.
|
|
35
|
+
*
|
|
36
|
+
* The key covers the style as well as the text, because a size change moves every vertex
|
|
37
|
+
* and a string that only compared its characters would keep the old geometry at the new
|
|
38
|
+
* size -- which reads as the wrong font rather than as a stale buffer.
|
|
39
|
+
*
|
|
40
|
+
* A *piece* is one code point, unless the font carries a pre-shaped run that starts here,
|
|
41
|
+
* in which case it is that run and it draws as a single quad. See `SdfFont.runs`: the
|
|
42
|
+
* engine does no shaping, so a script that joins or reorders its letters has to arrive
|
|
43
|
+
* already shaped, as one cell.
|
|
44
|
+
*/
|
|
45
|
+
set(font: SdfFont, text: string, style: SdfTextStyle): boolean;
|
|
46
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
export const DEFAULT_SDF_TEXT_STYLE = {
|
|
2
|
+
size: 1,
|
|
3
|
+
anchorX: 'left',
|
|
4
|
+
anchorY: 'baseline',
|
|
5
|
+
letterSpacing: 0,
|
|
6
|
+
lineHeight: 1,
|
|
7
|
+
};
|
|
8
|
+
/** Longest string this lays out. Beyond it, the tail is dropped rather than grown into. */
|
|
9
|
+
const MAX_QUADS = 512;
|
|
10
|
+
export class SdfTextLayout {
|
|
11
|
+
positions = new Float32Array(MAX_QUADS * 4 * 3);
|
|
12
|
+
uvs = new Float32Array(MAX_QUADS * 4 * 2);
|
|
13
|
+
indices = new Uint32Array(MAX_QUADS * 6);
|
|
14
|
+
quadCount = 0;
|
|
15
|
+
width = 0;
|
|
16
|
+
height = 0;
|
|
17
|
+
key = '';
|
|
18
|
+
constructor() {
|
|
19
|
+
/* The index pattern never changes; only how much of it is drawn. */
|
|
20
|
+
for (let quad = 0; quad < MAX_QUADS; quad++) {
|
|
21
|
+
const v = quad * 4;
|
|
22
|
+
const i = quad * 6;
|
|
23
|
+
this.indices[i] = v;
|
|
24
|
+
this.indices[i + 1] = v + 1;
|
|
25
|
+
this.indices[i + 2] = v + 2;
|
|
26
|
+
this.indices[i + 3] = v;
|
|
27
|
+
this.indices[i + 4] = v + 2;
|
|
28
|
+
this.indices[i + 5] = v + 3;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Lay a string out. Returns whether anything moved, so a caller can skip the upload.
|
|
33
|
+
*
|
|
34
|
+
* The key covers the style as well as the text, because a size change moves every vertex
|
|
35
|
+
* and a string that only compared its characters would keep the old geometry at the new
|
|
36
|
+
* size -- which reads as the wrong font rather than as a stale buffer.
|
|
37
|
+
*
|
|
38
|
+
* A *piece* is one code point, unless the font carries a pre-shaped run that starts here,
|
|
39
|
+
* in which case it is that run and it draws as a single quad. See `SdfFont.runs`: the
|
|
40
|
+
* engine does no shaping, so a script that joins or reorders its letters has to arrive
|
|
41
|
+
* already shaped, as one cell.
|
|
42
|
+
*/
|
|
43
|
+
set(font, text, style) {
|
|
44
|
+
const key = `${text}\u0000${style.size}\u0000${style.anchorX}\u0000${style.anchorY}\u0000${style.letterSpacing}\u0000${style.lineHeight}\u0000${font.family}`;
|
|
45
|
+
if (key === this.key)
|
|
46
|
+
return false;
|
|
47
|
+
this.key = key;
|
|
48
|
+
const scale = style.size / font.unitsPerEm;
|
|
49
|
+
let penX = 0;
|
|
50
|
+
let quads = 0;
|
|
51
|
+
let at = 0;
|
|
52
|
+
let piece = text.length > 0 ? pieceAt(font, text, 0) : '';
|
|
53
|
+
while (at < text.length && quads < MAX_QUADS) {
|
|
54
|
+
const nextAt = at + piece.length;
|
|
55
|
+
const next = nextAt < text.length ? pieceAt(font, text, nextAt) : '';
|
|
56
|
+
const glyph = font.glyph(piece);
|
|
57
|
+
if (glyph !== null) {
|
|
58
|
+
const left = penX + glyph.planeLeft * scale;
|
|
59
|
+
const right = penX + glyph.planeRight * scale;
|
|
60
|
+
const bottom = glyph.planeBottom * scale;
|
|
61
|
+
const top = glyph.planeTop * scale;
|
|
62
|
+
/* A glyph with no area -- a space -- advances and draws nothing. */
|
|
63
|
+
if (right > left && top > bottom) {
|
|
64
|
+
const v = quads * 4;
|
|
65
|
+
write(this.positions, v, left, bottom, right, top);
|
|
66
|
+
writeUv(this.uvs, v, glyph.atlasLeft / font.atlasWidth, glyph.atlasBottom / font.atlasHeight, glyph.atlasRight / font.atlasWidth, glyph.atlasTop / font.atlasHeight);
|
|
67
|
+
quads++;
|
|
68
|
+
}
|
|
69
|
+
penX += (glyph.advance + font.kerning(piece, next)) * scale;
|
|
70
|
+
penX += style.letterSpacing * style.size;
|
|
71
|
+
}
|
|
72
|
+
at = nextAt;
|
|
73
|
+
piece = next;
|
|
74
|
+
}
|
|
75
|
+
this.quadCount = quads;
|
|
76
|
+
this.width = penX;
|
|
77
|
+
this.height = (font.ascender - font.descender) * scale;
|
|
78
|
+
const shiftX = style.anchorX === 'center' ? -penX / 2 : style.anchorX === 'right' ? -penX : 0;
|
|
79
|
+
const shiftY = style.anchorY === 'middle'
|
|
80
|
+
? -((font.ascender + font.descender) / 2) * scale
|
|
81
|
+
: style.anchorY === 'top'
|
|
82
|
+
? -font.ascender * scale
|
|
83
|
+
: style.anchorY === 'bottom'
|
|
84
|
+
? -font.descender * scale
|
|
85
|
+
: 0;
|
|
86
|
+
if (shiftX !== 0 || shiftY !== 0) {
|
|
87
|
+
for (let vertex = 0; vertex < quads * 4; vertex++) {
|
|
88
|
+
this.positions[vertex * 3] = this.positions[vertex * 3] + shiftX;
|
|
89
|
+
this.positions[vertex * 3 + 1] = this.positions[vertex * 3 + 1] + shiftY;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Four corners of a quad, counter-clockwise from bottom-left, at z = 0. */
|
|
96
|
+
function write(out, vertex, left, bottom, right, top) {
|
|
97
|
+
const at = vertex * 3;
|
|
98
|
+
out[at] = left;
|
|
99
|
+
out[at + 1] = bottom;
|
|
100
|
+
out[at + 2] = 0;
|
|
101
|
+
out[at + 3] = right;
|
|
102
|
+
out[at + 4] = bottom;
|
|
103
|
+
out[at + 5] = 0;
|
|
104
|
+
out[at + 6] = right;
|
|
105
|
+
out[at + 7] = top;
|
|
106
|
+
out[at + 8] = 0;
|
|
107
|
+
out[at + 9] = left;
|
|
108
|
+
out[at + 10] = top;
|
|
109
|
+
out[at + 11] = 0;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The matching atlas corners. `atlasBottom`/`atlasTop` are already texel space -- not y-up,
|
|
113
|
+
* see `SdfGlyph`'s own comment for the convention and why nothing here flips them.
|
|
114
|
+
*/
|
|
115
|
+
function writeUv(out, vertex, left, bottom, right, top) {
|
|
116
|
+
const at = vertex * 2;
|
|
117
|
+
out[at] = left;
|
|
118
|
+
out[at + 1] = bottom;
|
|
119
|
+
out[at + 2] = right;
|
|
120
|
+
out[at + 3] = bottom;
|
|
121
|
+
out[at + 4] = right;
|
|
122
|
+
out[at + 5] = top;
|
|
123
|
+
out[at + 6] = left;
|
|
124
|
+
out[at + 7] = top;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* What to draw at this position: the longest pre-shaped run that starts here, or the single
|
|
128
|
+
* code point that does.
|
|
129
|
+
*
|
|
130
|
+
* Runs arrive longest first (see `SdfFont.runs`), so the first match is the right one. A
|
|
131
|
+
* font with no runs skips the loop entirely and this is the same per-code-point walk the
|
|
132
|
+
* layout has always done, which is the regression that matters: every atlas baked before
|
|
133
|
+
* runs existed has to lay out identically.
|
|
134
|
+
*
|
|
135
|
+
* `startsWith` with an offset rather than a slice, because comparing a substring means
|
|
136
|
+
* building one, and this runs once per character of every label a scene sets.
|
|
137
|
+
*/
|
|
138
|
+
function pieceAt(font, text, at) {
|
|
139
|
+
for (const run of font.runs) {
|
|
140
|
+
if (run.length <= text.length - at && text.startsWith(run, at))
|
|
141
|
+
return run;
|
|
142
|
+
}
|
|
143
|
+
const code = text.codePointAt(at);
|
|
144
|
+
return code !== undefined && code > 0xffff ? text.slice(at, at + 2) : text.charAt(at);
|
|
145
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ReadonlyMat4 } from 'gl-matrix';
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
import type { SdfFont } from './sdfFont.ts';
|
|
4
|
+
import type { SdfTextStyle } from './sdfTextLayout.ts';
|
|
5
|
+
import type { SurfaceTexture } from './surfaceTexture.ts';
|
|
6
|
+
/**
|
|
7
|
+
* Text from a signed distance field, on WebGL2.
|
|
8
|
+
*
|
|
9
|
+
* Same job as `textRenderer.ts` for the pixel font: a program, a VAO, buffers, one draw call
|
|
10
|
+
* per string, reached only through `renderer.createSdfText()` and its `setSdfText` /
|
|
11
|
+
* `drawSdfText` / `disposeSdfText`. Where this differs from that file, it is because SDF text
|
|
12
|
+
* genuinely differs:
|
|
13
|
+
*
|
|
14
|
+
* - **A flat quad per glyph, not an instanced cube.** The pixel font is lit geometry; an SDF
|
|
15
|
+
* glyph is a distance field sampled by a fragment shader, so a quad textured with the field
|
|
16
|
+
* is the whole glyph. One `drawElements` call draws every quad the string laid out.
|
|
17
|
+
* - **Coverage, not a solid.** The field's antialiased edge is an alpha value, so the draw
|
|
18
|
+
* blends and never writes depth — see `draw` for what happens if it does.
|
|
19
|
+
* - **World geometry, not a screen overlay.** The pixel font builds its own projection from a
|
|
20
|
+
* viewport and pixel origin; SDF text takes a model matrix and draws against the scene's own
|
|
21
|
+
* view-projection, the same one `drawMesh` uses. A caller supplies the basis — see
|
|
22
|
+
* `sdfTextLayout.ts`.
|
|
23
|
+
* - **The atlas is the caller's.** `setSdfText` retains it, exactly as `setSurfaceTexture`
|
|
24
|
+
* retains a material's texture, so `draw` needs nothing handed to it again every frame.
|
|
25
|
+
*
|
|
26
|
+
* `aPosition`/`aUv` are hardcoded to locations 0/1 below, matching `sdfText.ts`'s own
|
|
27
|
+
* `layout(location = ...)` qualifiers — the same convention `text.ts`/`textRenderer.ts`
|
|
28
|
+
* follow. That file is the one written-down source of truth both this and the WGSL naga
|
|
29
|
+
* generates from it read; querying the locations at runtime instead would just be a second
|
|
30
|
+
* source of truth that happens to agree with the first until one of them changes.
|
|
31
|
+
*/
|
|
32
|
+
export declare class SdfTextRenderer {
|
|
33
|
+
private readonly gl;
|
|
34
|
+
private readonly program;
|
|
35
|
+
private readonly uniforms;
|
|
36
|
+
private readonly vao;
|
|
37
|
+
private readonly positionBuffer;
|
|
38
|
+
private readonly uvBuffer;
|
|
39
|
+
private readonly buffers;
|
|
40
|
+
private readonly layout;
|
|
41
|
+
/** Set by `setText`; `draw` reads neither the class nor the atlas from anywhere else. */
|
|
42
|
+
private font;
|
|
43
|
+
private atlas;
|
|
44
|
+
constructor(gl: WebGL2RenderingContext);
|
|
45
|
+
/**
|
|
46
|
+
* Lay a string out against a font, and retain the atlas `draw` will sample.
|
|
47
|
+
*
|
|
48
|
+
* The atlas is retained here rather than taken by `draw` for the same reason
|
|
49
|
+
* `setSurfaceTexture` retains a material's texture: a caller that draws the same label
|
|
50
|
+
* every frame should not have to keep handing over an object nothing about the frame
|
|
51
|
+
* changed. A no-op, and no re-upload, when neither the text nor the style moved.
|
|
52
|
+
*/
|
|
53
|
+
setText(font: SdfFont, atlas: SurfaceTexture, text: string, style: SdfTextStyle): void;
|
|
54
|
+
/**
|
|
55
|
+
* Draw the laid-out string at `model`, against the scene's own view-projection.
|
|
56
|
+
*
|
|
57
|
+
* Nothing draws before a `setText` call has produced at least one quad, before a font and
|
|
58
|
+
* an atlas are both on hand, or once opacity has faded a label out — a caller may call
|
|
59
|
+
* this unconditionally.
|
|
60
|
+
*
|
|
61
|
+
* Returns whether a draw call was actually issued. `Renderer.drawSdfText` uses this to
|
|
62
|
+
* know whether `SDF_TEXT_TEXTURE_UNIT` was touched at all, since that unit doubles as
|
|
63
|
+
* `SURFACE_TEXTURE_UNIT` and the caller has to put the right texture back on it — but only
|
|
64
|
+
* when this class actually rebound it to the atlas.
|
|
65
|
+
*/
|
|
66
|
+
/**
|
|
67
|
+
* `outputTransform` and `outputExposure` come from the renderer rather than from here, because
|
|
68
|
+
* whether this pass grades depends on whether anything after it will. See `Renderer.gradeCode`.
|
|
69
|
+
*/
|
|
70
|
+
draw(viewProj: ReadonlyMat4, model: Float32Array, color: Vec3, opacity: number, outputTransform: number, outputExposure: number): boolean;
|
|
71
|
+
dispose(): void;
|
|
72
|
+
/** Both vertex buffers, from the arrays `layout.set` filled in place. */
|
|
73
|
+
private upload;
|
|
74
|
+
private dynamicAttribute;
|
|
75
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { SdfTextLayout } from './sdfTextLayout.js';
|
|
2
|
+
import { compileProgram, uniformLocations } from './shader.js';
|
|
3
|
+
import { SDF_TEXT_FRAG, SDF_TEXT_VERT } from './shaders/sdfText.js';
|
|
4
|
+
import { SDF_TEXT_TEXTURE_UNIT } from './lightBudget.js';
|
|
5
|
+
/**
|
|
6
|
+
* Text from a signed distance field, on WebGL2.
|
|
7
|
+
*
|
|
8
|
+
* Same job as `textRenderer.ts` for the pixel font: a program, a VAO, buffers, one draw call
|
|
9
|
+
* per string, reached only through `renderer.createSdfText()` and its `setSdfText` /
|
|
10
|
+
* `drawSdfText` / `disposeSdfText`. Where this differs from that file, it is because SDF text
|
|
11
|
+
* genuinely differs:
|
|
12
|
+
*
|
|
13
|
+
* - **A flat quad per glyph, not an instanced cube.** The pixel font is lit geometry; an SDF
|
|
14
|
+
* glyph is a distance field sampled by a fragment shader, so a quad textured with the field
|
|
15
|
+
* is the whole glyph. One `drawElements` call draws every quad the string laid out.
|
|
16
|
+
* - **Coverage, not a solid.** The field's antialiased edge is an alpha value, so the draw
|
|
17
|
+
* blends and never writes depth — see `draw` for what happens if it does.
|
|
18
|
+
* - **World geometry, not a screen overlay.** The pixel font builds its own projection from a
|
|
19
|
+
* viewport and pixel origin; SDF text takes a model matrix and draws against the scene's own
|
|
20
|
+
* view-projection, the same one `drawMesh` uses. A caller supplies the basis — see
|
|
21
|
+
* `sdfTextLayout.ts`.
|
|
22
|
+
* - **The atlas is the caller's.** `setSdfText` retains it, exactly as `setSurfaceTexture`
|
|
23
|
+
* retains a material's texture, so `draw` needs nothing handed to it again every frame.
|
|
24
|
+
*
|
|
25
|
+
* `aPosition`/`aUv` are hardcoded to locations 0/1 below, matching `sdfText.ts`'s own
|
|
26
|
+
* `layout(location = ...)` qualifiers — the same convention `text.ts`/`textRenderer.ts`
|
|
27
|
+
* follow. That file is the one written-down source of truth both this and the WGSL naga
|
|
28
|
+
* generates from it read; querying the locations at runtime instead would just be a second
|
|
29
|
+
* source of truth that happens to agree with the first until one of them changes.
|
|
30
|
+
*/
|
|
31
|
+
export class SdfTextRenderer {
|
|
32
|
+
gl;
|
|
33
|
+
program;
|
|
34
|
+
uniforms;
|
|
35
|
+
vao;
|
|
36
|
+
positionBuffer;
|
|
37
|
+
uvBuffer;
|
|
38
|
+
buffers = [];
|
|
39
|
+
layout = new SdfTextLayout();
|
|
40
|
+
/** Set by `setText`; `draw` reads neither the class nor the atlas from anywhere else. */
|
|
41
|
+
font = null;
|
|
42
|
+
atlas = null;
|
|
43
|
+
constructor(gl) {
|
|
44
|
+
this.gl = gl;
|
|
45
|
+
this.program = compileProgram(gl, SDF_TEXT_VERT, SDF_TEXT_FRAG, 'sdfText');
|
|
46
|
+
this.uniforms = uniformLocations(gl, this.program, 'sdfTextRenderer');
|
|
47
|
+
const vao = gl.createVertexArray();
|
|
48
|
+
if (vao === null)
|
|
49
|
+
throw new Error('Failed to create SDF text VAO');
|
|
50
|
+
this.vao = vao;
|
|
51
|
+
gl.bindVertexArray(vao);
|
|
52
|
+
/*
|
|
53
|
+
* Positions and UVs are `DYNAMIC_DRAW` and start already sized to `layout`'s own
|
|
54
|
+
* capacity, uploaded from its (all-zero, at this point) arrays. `bufferData` with a
|
|
55
|
+
* typed array both allocates and uploads in the one call, and the array is already the
|
|
56
|
+
* exact size a full string can reach, so there is no separate "how big" to track here.
|
|
57
|
+
*
|
|
58
|
+
* Locations 0 and 1 are `sdfText.ts`'s own `layout(location = ...)` qualifiers, not a
|
|
59
|
+
* guess — see the class comment.
|
|
60
|
+
*/
|
|
61
|
+
this.positionBuffer = this.dynamicAttribute(0, this.layout.positions, 3);
|
|
62
|
+
this.uvBuffer = this.dynamicAttribute(1, this.layout.uvs, 2);
|
|
63
|
+
/*
|
|
64
|
+
* The index buffer, `STATIC_DRAW` and written once. `SdfTextLayout` fills its whole
|
|
65
|
+
* `0,1,2,0,2,3` pattern for every quad it could ever hold at construction — see its own
|
|
66
|
+
* comment — so nothing about a later `set()` call ever changes this buffer's contents,
|
|
67
|
+
* only how much of it `draw` asks to be drawn.
|
|
68
|
+
*/
|
|
69
|
+
const indexBuffer = gl.createBuffer();
|
|
70
|
+
if (indexBuffer === null)
|
|
71
|
+
throw new Error('Failed to create SDF text index buffer');
|
|
72
|
+
this.buffers.push(indexBuffer);
|
|
73
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
74
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.layout.indices, gl.STATIC_DRAW);
|
|
75
|
+
gl.bindVertexArray(null);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Lay a string out against a font, and retain the atlas `draw` will sample.
|
|
79
|
+
*
|
|
80
|
+
* The atlas is retained here rather than taken by `draw` for the same reason
|
|
81
|
+
* `setSurfaceTexture` retains a material's texture: a caller that draws the same label
|
|
82
|
+
* every frame should not have to keep handing over an object nothing about the frame
|
|
83
|
+
* changed. A no-op, and no re-upload, when neither the text nor the style moved.
|
|
84
|
+
*/
|
|
85
|
+
setText(font, atlas, text, style) {
|
|
86
|
+
this.font = font;
|
|
87
|
+
this.atlas = atlas;
|
|
88
|
+
if (this.layout.set(font, text, style))
|
|
89
|
+
this.upload();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Draw the laid-out string at `model`, against the scene's own view-projection.
|
|
93
|
+
*
|
|
94
|
+
* Nothing draws before a `setText` call has produced at least one quad, before a font and
|
|
95
|
+
* an atlas are both on hand, or once opacity has faded a label out — a caller may call
|
|
96
|
+
* this unconditionally.
|
|
97
|
+
*
|
|
98
|
+
* Returns whether a draw call was actually issued. `Renderer.drawSdfText` uses this to
|
|
99
|
+
* know whether `SDF_TEXT_TEXTURE_UNIT` was touched at all, since that unit doubles as
|
|
100
|
+
* `SURFACE_TEXTURE_UNIT` and the caller has to put the right texture back on it — but only
|
|
101
|
+
* when this class actually rebound it to the atlas.
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* `outputTransform` and `outputExposure` come from the renderer rather than from here, because
|
|
105
|
+
* whether this pass grades depends on whether anything after it will. See `Renderer.gradeCode`.
|
|
106
|
+
*/
|
|
107
|
+
draw(viewProj, model, color, opacity, outputTransform, outputExposure) {
|
|
108
|
+
if (this.layout.quadCount === 0 || opacity <= 0 || this.font === null || this.atlas === null) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const gl = this.gl;
|
|
112
|
+
const font = this.font;
|
|
113
|
+
gl.useProgram(this.program);
|
|
114
|
+
gl.bindVertexArray(this.vao);
|
|
115
|
+
/*
|
|
116
|
+
* Blending on, depth writes off. Text is coverage: the field's antialiased edge is an
|
|
117
|
+
* alpha value, not a solid surface, and writing depth from it punches a hole in whatever
|
|
118
|
+
* sits behind that edge — a bug that looks like a broken font rather than a depth bug.
|
|
119
|
+
*
|
|
120
|
+
* Depth *testing* is left alone, deliberately, rather than reasserted the way the pixel
|
|
121
|
+
* font's own `TextRenderer.draw` reasserts it. That renderer is a screen overlay running
|
|
122
|
+
* at the end of the frame and has to recover state a sky or an earlier pass may have
|
|
123
|
+
* left behind. SDF text is world geometry drawn inside the mesh pass, where an enabled
|
|
124
|
+
* depth test and `LEQUAL` are already the ambient state — the same assumption
|
|
125
|
+
* `drawTranslucentMesh` makes for exactly the same reason.
|
|
126
|
+
*/
|
|
127
|
+
gl.depthMask(false);
|
|
128
|
+
gl.enable(gl.BLEND);
|
|
129
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
130
|
+
this.atlas.bind(gl, SDF_TEXT_TEXTURE_UNIT);
|
|
131
|
+
const u = this.uniforms;
|
|
132
|
+
gl.uniform1i(u['uOutputTransform'] ?? null, outputTransform);
|
|
133
|
+
gl.uniform1f(u['uOutputExposure'] ?? null, outputExposure);
|
|
134
|
+
setMat4(gl, u['uViewProj'], viewProj);
|
|
135
|
+
setMat4(gl, u['uModel'], model);
|
|
136
|
+
setVec3(gl, u['uColor'], color);
|
|
137
|
+
setFloat(gl, u['uOpacity'], opacity);
|
|
138
|
+
setFloat(gl, u['uDistanceRange'], font.distanceRange);
|
|
139
|
+
setVec2(gl, u['uAtlasSize'], font.atlasWidth, font.atlasHeight);
|
|
140
|
+
const atlasLoc = u['uAtlas'];
|
|
141
|
+
if (atlasLoc !== undefined)
|
|
142
|
+
gl.uniform1i(atlasLoc, SDF_TEXT_TEXTURE_UNIT);
|
|
143
|
+
gl.drawElements(gl.TRIANGLES, this.layout.quadCount * 6, gl.UNSIGNED_INT, 0);
|
|
144
|
+
gl.bindVertexArray(null);
|
|
145
|
+
gl.disable(gl.BLEND);
|
|
146
|
+
gl.depthMask(true);
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
dispose() {
|
|
150
|
+
const gl = this.gl;
|
|
151
|
+
for (const buffer of this.buffers)
|
|
152
|
+
gl.deleteBuffer(buffer);
|
|
153
|
+
this.buffers.length = 0;
|
|
154
|
+
gl.deleteVertexArray(this.vao);
|
|
155
|
+
gl.deleteProgram(this.program);
|
|
156
|
+
}
|
|
157
|
+
/** Both vertex buffers, from the arrays `layout.set` filled in place. */
|
|
158
|
+
upload() {
|
|
159
|
+
const gl = this.gl;
|
|
160
|
+
const vertexCount = this.layout.quadCount * 4;
|
|
161
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);
|
|
162
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.positions, 0, vertexCount * 3);
|
|
163
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
|
|
164
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.uvs, 0, vertexCount * 2);
|
|
165
|
+
}
|
|
166
|
+
dynamicAttribute(location, initial, size) {
|
|
167
|
+
const gl = this.gl;
|
|
168
|
+
const buffer = gl.createBuffer();
|
|
169
|
+
if (buffer === null)
|
|
170
|
+
throw new Error('Failed to create SDF text buffer');
|
|
171
|
+
this.buffers.push(buffer);
|
|
172
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
173
|
+
gl.bufferData(gl.ARRAY_BUFFER, initial, gl.DYNAMIC_DRAW);
|
|
174
|
+
gl.enableVertexAttribArray(location);
|
|
175
|
+
gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
|
|
176
|
+
return buffer;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function setFloat(gl, location, value) {
|
|
180
|
+
if (location !== undefined)
|
|
181
|
+
gl.uniform1f(location, value);
|
|
182
|
+
}
|
|
183
|
+
function setVec2(gl, location, x, y) {
|
|
184
|
+
if (location !== undefined)
|
|
185
|
+
gl.uniform2f(location, x, y);
|
|
186
|
+
}
|
|
187
|
+
function setVec3(gl, location, value) {
|
|
188
|
+
if (location !== undefined)
|
|
189
|
+
gl.uniform3f(location, value[0], value[1], value[2]);
|
|
190
|
+
}
|
|
191
|
+
function setMat4(gl, location, value) {
|
|
192
|
+
if (location !== undefined)
|
|
193
|
+
gl.uniformMatrix4fv(location, false, value);
|
|
194
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How rough the sea is for a given wind.
|
|
3
|
+
*
|
|
4
|
+
* Wind does not push existing waves around — it *builds* them. A calm sea is
|
|
5
|
+
* nearly flat with no whitecaps; a strong wind raises steep crests that break.
|
|
6
|
+
* Steering the swell without changing its size would leave the water equally
|
|
7
|
+
* choppy in a dead calm and a gale, which is the giveaway that the weather is
|
|
8
|
+
* decoration rather than a cause.
|
|
9
|
+
*/
|
|
10
|
+
export interface SeaState {
|
|
11
|
+
/** Multiplier on the Gerstner steepness the surface was authored with. */
|
|
12
|
+
steepness: number;
|
|
13
|
+
/** How readily crests break into foam, 0 for none. */
|
|
14
|
+
foam: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function seaStateForWind(windSpeed: number): SeaState;
|
|
17
|
+
/**
|
|
18
|
+
* The same surface state, asked for directly instead of derived from wind.
|
|
19
|
+
*
|
|
20
|
+
* Shares this module's floor and ceiling so an indoor body and an outdoor one at the
|
|
21
|
+
* same roughness look the same — the point is where the number *comes from*, not a
|
|
22
|
+
* second scale with its own feel. Foam is deliberately reachable: a sluice or a pump
|
|
23
|
+
* outfall breaks without any wind at all.
|
|
24
|
+
*/
|
|
25
|
+
export declare function seaStateForAgitation(agitation: number): SeaState;
|