@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,206 @@
|
|
|
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
|
+
|
|
14
|
+
export interface SdfTextStyle {
|
|
15
|
+
/** Cap height to baseline-to-baseline scale, in metres per em. */
|
|
16
|
+
readonly size: number;
|
|
17
|
+
readonly anchorX: 'left' | 'center' | 'right';
|
|
18
|
+
readonly anchorY: 'top' | 'middle' | 'baseline' | 'bottom';
|
|
19
|
+
/** Extra advance between glyphs, in ems. */
|
|
20
|
+
readonly letterSpacing: number;
|
|
21
|
+
/** Multiplier on the font's own line height. */
|
|
22
|
+
readonly lineHeight: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const DEFAULT_SDF_TEXT_STYLE: SdfTextStyle = {
|
|
26
|
+
size: 1,
|
|
27
|
+
anchorX: 'left',
|
|
28
|
+
anchorY: 'baseline',
|
|
29
|
+
letterSpacing: 0,
|
|
30
|
+
lineHeight: 1,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** Longest string this lays out. Beyond it, the tail is dropped rather than grown into. */
|
|
34
|
+
const MAX_QUADS = 512;
|
|
35
|
+
|
|
36
|
+
export class SdfTextLayout {
|
|
37
|
+
readonly positions = new Float32Array(MAX_QUADS * 4 * 3);
|
|
38
|
+
readonly uvs = new Float32Array(MAX_QUADS * 4 * 2);
|
|
39
|
+
readonly indices = new Uint32Array(MAX_QUADS * 6);
|
|
40
|
+
quadCount = 0;
|
|
41
|
+
width = 0;
|
|
42
|
+
height = 0;
|
|
43
|
+
|
|
44
|
+
private key = '';
|
|
45
|
+
|
|
46
|
+
constructor() {
|
|
47
|
+
/* The index pattern never changes; only how much of it is drawn. */
|
|
48
|
+
for (let quad = 0; quad < MAX_QUADS; quad++) {
|
|
49
|
+
const v = quad * 4;
|
|
50
|
+
const i = quad * 6;
|
|
51
|
+
this.indices[i] = v;
|
|
52
|
+
this.indices[i + 1] = v + 1;
|
|
53
|
+
this.indices[i + 2] = v + 2;
|
|
54
|
+
this.indices[i + 3] = v;
|
|
55
|
+
this.indices[i + 4] = v + 2;
|
|
56
|
+
this.indices[i + 5] = v + 3;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Lay a string out. Returns whether anything moved, so a caller can skip the upload.
|
|
62
|
+
*
|
|
63
|
+
* The key covers the style as well as the text, because a size change moves every vertex
|
|
64
|
+
* and a string that only compared its characters would keep the old geometry at the new
|
|
65
|
+
* size -- which reads as the wrong font rather than as a stale buffer.
|
|
66
|
+
*
|
|
67
|
+
* A *piece* is one code point, unless the font carries a pre-shaped run that starts here,
|
|
68
|
+
* in which case it is that run and it draws as a single quad. See `SdfFont.runs`: the
|
|
69
|
+
* engine does no shaping, so a script that joins or reorders its letters has to arrive
|
|
70
|
+
* already shaped, as one cell.
|
|
71
|
+
*/
|
|
72
|
+
set(font: SdfFont, text: string, style: SdfTextStyle): boolean {
|
|
73
|
+
const key = `${text}\u0000${style.size}\u0000${style.anchorX}\u0000${style.anchorY}\u0000${style.letterSpacing}\u0000${style.lineHeight}\u0000${font.family}`;
|
|
74
|
+
if (key === this.key) return false;
|
|
75
|
+
this.key = key;
|
|
76
|
+
|
|
77
|
+
const scale = style.size / font.unitsPerEm;
|
|
78
|
+
|
|
79
|
+
let penX = 0;
|
|
80
|
+
let quads = 0;
|
|
81
|
+
let at = 0;
|
|
82
|
+
let piece = text.length > 0 ? pieceAt(font, text, 0) : '';
|
|
83
|
+
while (at < text.length && quads < MAX_QUADS) {
|
|
84
|
+
const nextAt = at + piece.length;
|
|
85
|
+
const next = nextAt < text.length ? pieceAt(font, text, nextAt) : '';
|
|
86
|
+
const glyph = font.glyph(piece);
|
|
87
|
+
|
|
88
|
+
if (glyph !== null) {
|
|
89
|
+
const left = penX + glyph.planeLeft * scale;
|
|
90
|
+
const right = penX + glyph.planeRight * scale;
|
|
91
|
+
const bottom = glyph.planeBottom * scale;
|
|
92
|
+
const top = glyph.planeTop * scale;
|
|
93
|
+
|
|
94
|
+
/* A glyph with no area -- a space -- advances and draws nothing. */
|
|
95
|
+
if (right > left && top > bottom) {
|
|
96
|
+
const v = quads * 4;
|
|
97
|
+
write(this.positions, v, left, bottom, right, top);
|
|
98
|
+
writeUv(
|
|
99
|
+
this.uvs,
|
|
100
|
+
v,
|
|
101
|
+
glyph.atlasLeft / font.atlasWidth,
|
|
102
|
+
glyph.atlasBottom / font.atlasHeight,
|
|
103
|
+
glyph.atlasRight / font.atlasWidth,
|
|
104
|
+
glyph.atlasTop / font.atlasHeight,
|
|
105
|
+
);
|
|
106
|
+
quads++;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
penX += (glyph.advance + font.kerning(piece, next)) * scale;
|
|
110
|
+
penX += style.letterSpacing * style.size;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
at = nextAt;
|
|
114
|
+
piece = next;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
this.quadCount = quads;
|
|
118
|
+
this.width = penX;
|
|
119
|
+
this.height = (font.ascender - font.descender) * scale;
|
|
120
|
+
|
|
121
|
+
const shiftX = style.anchorX === 'center' ? -penX / 2 : style.anchorX === 'right' ? -penX : 0;
|
|
122
|
+
const shiftY =
|
|
123
|
+
style.anchorY === 'middle'
|
|
124
|
+
? -((font.ascender + font.descender) / 2) * scale
|
|
125
|
+
: style.anchorY === 'top'
|
|
126
|
+
? -font.ascender * scale
|
|
127
|
+
: style.anchorY === 'bottom'
|
|
128
|
+
? -font.descender * scale
|
|
129
|
+
: 0;
|
|
130
|
+
|
|
131
|
+
if (shiftX !== 0 || shiftY !== 0) {
|
|
132
|
+
for (let vertex = 0; vertex < quads * 4; vertex++) {
|
|
133
|
+
this.positions[vertex * 3] = (this.positions[vertex * 3] as number) + shiftX;
|
|
134
|
+
this.positions[vertex * 3 + 1] = (this.positions[vertex * 3 + 1] as number) + shiftY;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Four corners of a quad, counter-clockwise from bottom-left, at z = 0. */
|
|
142
|
+
function write(
|
|
143
|
+
out: Float32Array,
|
|
144
|
+
vertex: number,
|
|
145
|
+
left: number,
|
|
146
|
+
bottom: number,
|
|
147
|
+
right: number,
|
|
148
|
+
top: number,
|
|
149
|
+
): void {
|
|
150
|
+
const at = vertex * 3;
|
|
151
|
+
out[at] = left;
|
|
152
|
+
out[at + 1] = bottom;
|
|
153
|
+
out[at + 2] = 0;
|
|
154
|
+
out[at + 3] = right;
|
|
155
|
+
out[at + 4] = bottom;
|
|
156
|
+
out[at + 5] = 0;
|
|
157
|
+
out[at + 6] = right;
|
|
158
|
+
out[at + 7] = top;
|
|
159
|
+
out[at + 8] = 0;
|
|
160
|
+
out[at + 9] = left;
|
|
161
|
+
out[at + 10] = top;
|
|
162
|
+
out[at + 11] = 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* The matching atlas corners. `atlasBottom`/`atlasTop` are already texel space -- not y-up,
|
|
167
|
+
* see `SdfGlyph`'s own comment for the convention and why nothing here flips them.
|
|
168
|
+
*/
|
|
169
|
+
function writeUv(
|
|
170
|
+
out: Float32Array,
|
|
171
|
+
vertex: number,
|
|
172
|
+
left: number,
|
|
173
|
+
bottom: number,
|
|
174
|
+
right: number,
|
|
175
|
+
top: number,
|
|
176
|
+
): void {
|
|
177
|
+
const at = vertex * 2;
|
|
178
|
+
out[at] = left;
|
|
179
|
+
out[at + 1] = bottom;
|
|
180
|
+
out[at + 2] = right;
|
|
181
|
+
out[at + 3] = bottom;
|
|
182
|
+
out[at + 4] = right;
|
|
183
|
+
out[at + 5] = top;
|
|
184
|
+
out[at + 6] = left;
|
|
185
|
+
out[at + 7] = top;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* What to draw at this position: the longest pre-shaped run that starts here, or the single
|
|
190
|
+
* code point that does.
|
|
191
|
+
*
|
|
192
|
+
* Runs arrive longest first (see `SdfFont.runs`), so the first match is the right one. A
|
|
193
|
+
* font with no runs skips the loop entirely and this is the same per-code-point walk the
|
|
194
|
+
* layout has always done, which is the regression that matters: every atlas baked before
|
|
195
|
+
* runs existed has to lay out identically.
|
|
196
|
+
*
|
|
197
|
+
* `startsWith` with an offset rather than a slice, because comparing a substring means
|
|
198
|
+
* building one, and this runs once per character of every label a scene sets.
|
|
199
|
+
*/
|
|
200
|
+
function pieceAt(font: SdfFont, text: string, at: number): string {
|
|
201
|
+
for (const run of font.runs) {
|
|
202
|
+
if (run.length <= text.length - at && text.startsWith(run, at)) return run;
|
|
203
|
+
}
|
|
204
|
+
const code = text.codePointAt(at);
|
|
205
|
+
return code !== undefined && code > 0xffff ? text.slice(at, at + 2) : text.charAt(at);
|
|
206
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
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 { SdfTextLayout } from './sdfTextLayout.ts';
|
|
6
|
+
import { compileProgram, uniformLocations } from './shader.ts';
|
|
7
|
+
import { SDF_TEXT_FRAG, SDF_TEXT_VERT } from './shaders/sdfText.ts';
|
|
8
|
+
import type { SurfaceTexture } from './surfaceTexture.ts';
|
|
9
|
+
import { SDF_TEXT_TEXTURE_UNIT } from './lightBudget.ts';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Text from a signed distance field, on WebGL2.
|
|
13
|
+
*
|
|
14
|
+
* Same job as `textRenderer.ts` for the pixel font: a program, a VAO, buffers, one draw call
|
|
15
|
+
* per string, reached only through `renderer.createSdfText()` and its `setSdfText` /
|
|
16
|
+
* `drawSdfText` / `disposeSdfText`. Where this differs from that file, it is because SDF text
|
|
17
|
+
* genuinely differs:
|
|
18
|
+
*
|
|
19
|
+
* - **A flat quad per glyph, not an instanced cube.** The pixel font is lit geometry; an SDF
|
|
20
|
+
* glyph is a distance field sampled by a fragment shader, so a quad textured with the field
|
|
21
|
+
* is the whole glyph. One `drawElements` call draws every quad the string laid out.
|
|
22
|
+
* - **Coverage, not a solid.** The field's antialiased edge is an alpha value, so the draw
|
|
23
|
+
* blends and never writes depth — see `draw` for what happens if it does.
|
|
24
|
+
* - **World geometry, not a screen overlay.** The pixel font builds its own projection from a
|
|
25
|
+
* viewport and pixel origin; SDF text takes a model matrix and draws against the scene's own
|
|
26
|
+
* view-projection, the same one `drawMesh` uses. A caller supplies the basis — see
|
|
27
|
+
* `sdfTextLayout.ts`.
|
|
28
|
+
* - **The atlas is the caller's.** `setSdfText` retains it, exactly as `setSurfaceTexture`
|
|
29
|
+
* retains a material's texture, so `draw` needs nothing handed to it again every frame.
|
|
30
|
+
*
|
|
31
|
+
* `aPosition`/`aUv` are hardcoded to locations 0/1 below, matching `sdfText.ts`'s own
|
|
32
|
+
* `layout(location = ...)` qualifiers — the same convention `text.ts`/`textRenderer.ts`
|
|
33
|
+
* follow. That file is the one written-down source of truth both this and the WGSL naga
|
|
34
|
+
* generates from it read; querying the locations at runtime instead would just be a second
|
|
35
|
+
* source of truth that happens to agree with the first until one of them changes.
|
|
36
|
+
*/
|
|
37
|
+
export class SdfTextRenderer {
|
|
38
|
+
private readonly program: WebGLProgram;
|
|
39
|
+
private readonly uniforms: Record<string, WebGLUniformLocation>;
|
|
40
|
+
private readonly vao: WebGLVertexArrayObject;
|
|
41
|
+
private readonly positionBuffer: WebGLBuffer;
|
|
42
|
+
private readonly uvBuffer: WebGLBuffer;
|
|
43
|
+
private readonly buffers: WebGLBuffer[] = [];
|
|
44
|
+
private readonly layout = new SdfTextLayout();
|
|
45
|
+
|
|
46
|
+
/** Set by `setText`; `draw` reads neither the class nor the atlas from anywhere else. */
|
|
47
|
+
private font: SdfFont | null = null;
|
|
48
|
+
private atlas: SurfaceTexture | null = null;
|
|
49
|
+
|
|
50
|
+
constructor(private readonly gl: WebGL2RenderingContext) {
|
|
51
|
+
this.program = compileProgram(gl, SDF_TEXT_VERT, SDF_TEXT_FRAG, 'sdfText');
|
|
52
|
+
this.uniforms = uniformLocations(gl, this.program, 'sdfTextRenderer');
|
|
53
|
+
|
|
54
|
+
const vao = gl.createVertexArray();
|
|
55
|
+
if (vao === null) throw new Error('Failed to create SDF text VAO');
|
|
56
|
+
this.vao = vao;
|
|
57
|
+
gl.bindVertexArray(vao);
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
* Positions and UVs are `DYNAMIC_DRAW` and start already sized to `layout`'s own
|
|
61
|
+
* capacity, uploaded from its (all-zero, at this point) arrays. `bufferData` with a
|
|
62
|
+
* typed array both allocates and uploads in the one call, and the array is already the
|
|
63
|
+
* exact size a full string can reach, so there is no separate "how big" to track here.
|
|
64
|
+
*
|
|
65
|
+
* Locations 0 and 1 are `sdfText.ts`'s own `layout(location = ...)` qualifiers, not a
|
|
66
|
+
* guess — see the class comment.
|
|
67
|
+
*/
|
|
68
|
+
this.positionBuffer = this.dynamicAttribute(0, this.layout.positions, 3);
|
|
69
|
+
this.uvBuffer = this.dynamicAttribute(1, this.layout.uvs, 2);
|
|
70
|
+
|
|
71
|
+
/*
|
|
72
|
+
* The index buffer, `STATIC_DRAW` and written once. `SdfTextLayout` fills its whole
|
|
73
|
+
* `0,1,2,0,2,3` pattern for every quad it could ever hold at construction — see its own
|
|
74
|
+
* comment — so nothing about a later `set()` call ever changes this buffer's contents,
|
|
75
|
+
* only how much of it `draw` asks to be drawn.
|
|
76
|
+
*/
|
|
77
|
+
const indexBuffer = gl.createBuffer();
|
|
78
|
+
if (indexBuffer === null) throw new Error('Failed to create SDF text index buffer');
|
|
79
|
+
this.buffers.push(indexBuffer);
|
|
80
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
81
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.layout.indices, gl.STATIC_DRAW);
|
|
82
|
+
|
|
83
|
+
gl.bindVertexArray(null);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Lay a string out against a font, and retain the atlas `draw` will sample.
|
|
88
|
+
*
|
|
89
|
+
* The atlas is retained here rather than taken by `draw` for the same reason
|
|
90
|
+
* `setSurfaceTexture` retains a material's texture: a caller that draws the same label
|
|
91
|
+
* every frame should not have to keep handing over an object nothing about the frame
|
|
92
|
+
* changed. A no-op, and no re-upload, when neither the text nor the style moved.
|
|
93
|
+
*/
|
|
94
|
+
setText(font: SdfFont, atlas: SurfaceTexture, text: string, style: SdfTextStyle): void {
|
|
95
|
+
this.font = font;
|
|
96
|
+
this.atlas = atlas;
|
|
97
|
+
if (this.layout.set(font, text, style)) this.upload();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Draw the laid-out string at `model`, against the scene's own view-projection.
|
|
102
|
+
*
|
|
103
|
+
* Nothing draws before a `setText` call has produced at least one quad, before a font and
|
|
104
|
+
* an atlas are both on hand, or once opacity has faded a label out — a caller may call
|
|
105
|
+
* this unconditionally.
|
|
106
|
+
*
|
|
107
|
+
* Returns whether a draw call was actually issued. `Renderer.drawSdfText` uses this to
|
|
108
|
+
* know whether `SDF_TEXT_TEXTURE_UNIT` was touched at all, since that unit doubles as
|
|
109
|
+
* `SURFACE_TEXTURE_UNIT` and the caller has to put the right texture back on it — but only
|
|
110
|
+
* when this class actually rebound it to the atlas.
|
|
111
|
+
*/
|
|
112
|
+
/**
|
|
113
|
+
* `outputTransform` and `outputExposure` come from the renderer rather than from here, because
|
|
114
|
+
* whether this pass grades depends on whether anything after it will. See `Renderer.gradeCode`.
|
|
115
|
+
*/
|
|
116
|
+
draw(
|
|
117
|
+
viewProj: ReadonlyMat4,
|
|
118
|
+
model: Float32Array,
|
|
119
|
+
color: Vec3,
|
|
120
|
+
opacity: number,
|
|
121
|
+
outputTransform: number,
|
|
122
|
+
outputExposure: number,
|
|
123
|
+
): boolean {
|
|
124
|
+
if (this.layout.quadCount === 0 || opacity <= 0 || this.font === null || this.atlas === null) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
const gl = this.gl;
|
|
128
|
+
const font = this.font;
|
|
129
|
+
|
|
130
|
+
gl.useProgram(this.program);
|
|
131
|
+
gl.bindVertexArray(this.vao);
|
|
132
|
+
|
|
133
|
+
/*
|
|
134
|
+
* Blending on, depth writes off. Text is coverage: the field's antialiased edge is an
|
|
135
|
+
* alpha value, not a solid surface, and writing depth from it punches a hole in whatever
|
|
136
|
+
* sits behind that edge — a bug that looks like a broken font rather than a depth bug.
|
|
137
|
+
*
|
|
138
|
+
* Depth *testing* is left alone, deliberately, rather than reasserted the way the pixel
|
|
139
|
+
* font's own `TextRenderer.draw` reasserts it. That renderer is a screen overlay running
|
|
140
|
+
* at the end of the frame and has to recover state a sky or an earlier pass may have
|
|
141
|
+
* left behind. SDF text is world geometry drawn inside the mesh pass, where an enabled
|
|
142
|
+
* depth test and `LEQUAL` are already the ambient state — the same assumption
|
|
143
|
+
* `drawTranslucentMesh` makes for exactly the same reason.
|
|
144
|
+
*/
|
|
145
|
+
gl.depthMask(false);
|
|
146
|
+
gl.enable(gl.BLEND);
|
|
147
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
148
|
+
|
|
149
|
+
this.atlas.bind(gl, SDF_TEXT_TEXTURE_UNIT);
|
|
150
|
+
|
|
151
|
+
const u = this.uniforms;
|
|
152
|
+
gl.uniform1i(u['uOutputTransform'] ?? null, outputTransform);
|
|
153
|
+
gl.uniform1f(u['uOutputExposure'] ?? null, outputExposure);
|
|
154
|
+
setMat4(gl, u['uViewProj'], viewProj);
|
|
155
|
+
setMat4(gl, u['uModel'], model);
|
|
156
|
+
setVec3(gl, u['uColor'], color);
|
|
157
|
+
setFloat(gl, u['uOpacity'], opacity);
|
|
158
|
+
setFloat(gl, u['uDistanceRange'], font.distanceRange);
|
|
159
|
+
setVec2(gl, u['uAtlasSize'], font.atlasWidth, font.atlasHeight);
|
|
160
|
+
const atlasLoc = u['uAtlas'];
|
|
161
|
+
if (atlasLoc !== undefined) gl.uniform1i(atlasLoc, SDF_TEXT_TEXTURE_UNIT);
|
|
162
|
+
|
|
163
|
+
gl.drawElements(gl.TRIANGLES, this.layout.quadCount * 6, gl.UNSIGNED_INT, 0);
|
|
164
|
+
|
|
165
|
+
gl.bindVertexArray(null);
|
|
166
|
+
gl.disable(gl.BLEND);
|
|
167
|
+
gl.depthMask(true);
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
dispose(): void {
|
|
172
|
+
const gl = this.gl;
|
|
173
|
+
for (const buffer of this.buffers) gl.deleteBuffer(buffer);
|
|
174
|
+
this.buffers.length = 0;
|
|
175
|
+
gl.deleteVertexArray(this.vao);
|
|
176
|
+
gl.deleteProgram(this.program);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** Both vertex buffers, from the arrays `layout.set` filled in place. */
|
|
180
|
+
private upload(): void {
|
|
181
|
+
const gl = this.gl;
|
|
182
|
+
const vertexCount = this.layout.quadCount * 4;
|
|
183
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);
|
|
184
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.positions, 0, vertexCount * 3);
|
|
185
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer);
|
|
186
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.layout.uvs, 0, vertexCount * 2);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private dynamicAttribute(location: number, initial: Float32Array, size: number): WebGLBuffer {
|
|
190
|
+
const gl = this.gl;
|
|
191
|
+
const buffer = gl.createBuffer();
|
|
192
|
+
if (buffer === null) throw new Error('Failed to create SDF text buffer');
|
|
193
|
+
this.buffers.push(buffer);
|
|
194
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
195
|
+
gl.bufferData(gl.ARRAY_BUFFER, initial, gl.DYNAMIC_DRAW);
|
|
196
|
+
gl.enableVertexAttribArray(location);
|
|
197
|
+
gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
|
|
198
|
+
return buffer;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function setFloat(
|
|
203
|
+
gl: WebGL2RenderingContext,
|
|
204
|
+
location: WebGLUniformLocation | undefined,
|
|
205
|
+
value: number,
|
|
206
|
+
): void {
|
|
207
|
+
if (location !== undefined) gl.uniform1f(location, value);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function setVec2(
|
|
211
|
+
gl: WebGL2RenderingContext,
|
|
212
|
+
location: WebGLUniformLocation | undefined,
|
|
213
|
+
x: number,
|
|
214
|
+
y: number,
|
|
215
|
+
): void {
|
|
216
|
+
if (location !== undefined) gl.uniform2f(location, x, y);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function setVec3(
|
|
220
|
+
gl: WebGL2RenderingContext,
|
|
221
|
+
location: WebGLUniformLocation | undefined,
|
|
222
|
+
value: Vec3,
|
|
223
|
+
): void {
|
|
224
|
+
if (location !== undefined) gl.uniform3f(location, value[0], value[1], value[2]);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function setMat4(
|
|
228
|
+
gl: WebGL2RenderingContext,
|
|
229
|
+
location: WebGLUniformLocation | undefined,
|
|
230
|
+
value: ReadonlyMat4 | Float32Array,
|
|
231
|
+
): void {
|
|
232
|
+
if (location !== undefined) gl.uniformMatrix4fv(location, false, value);
|
|
233
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Wind speed at which the sea is fully developed. Beyond it, waves stop
|
|
19
|
+
* growing — a real fetch-limited sea saturates, and more importantly the
|
|
20
|
+
* islands sit about 1.8 m above the waterline, so an unbounded swell would
|
|
21
|
+
* flood the route and turn weather into a movement bug.
|
|
22
|
+
*/
|
|
23
|
+
const FULLY_DEVELOPED = 7;
|
|
24
|
+
/** Never completely flat: dead-still water reads as glass, not as calm. */
|
|
25
|
+
const MINIMUM_STEEPNESS = 0.35;
|
|
26
|
+
const MAXIMUM_STEEPNESS = 1.35;
|
|
27
|
+
/** Whitecaps need real wind; ripples do not break. */
|
|
28
|
+
const FOAM_THRESHOLD = 2.5;
|
|
29
|
+
|
|
30
|
+
export function seaStateForWind(windSpeed: number): SeaState {
|
|
31
|
+
const t = Math.min(Math.max(windSpeed, 0) / FULLY_DEVELOPED, 1);
|
|
32
|
+
return {
|
|
33
|
+
steepness: MINIMUM_STEEPNESS + (MAXIMUM_STEEPNESS - MINIMUM_STEEPNESS) * t,
|
|
34
|
+
foam: Math.min(
|
|
35
|
+
Math.max((windSpeed - FOAM_THRESHOLD) / (FULLY_DEVELOPED - FOAM_THRESHOLD), 0),
|
|
36
|
+
1,
|
|
37
|
+
),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The same surface state, asked for directly instead of derived from wind.
|
|
43
|
+
*
|
|
44
|
+
* Shares this module's floor and ceiling so an indoor body and an outdoor one at the
|
|
45
|
+
* same roughness look the same — the point is where the number *comes from*, not a
|
|
46
|
+
* second scale with its own feel. Foam is deliberately reachable: a sluice or a pump
|
|
47
|
+
* outfall breaks without any wind at all.
|
|
48
|
+
*/
|
|
49
|
+
export function seaStateForAgitation(agitation: number): SeaState {
|
|
50
|
+
const t = Math.min(Math.max(agitation, 0), 1);
|
|
51
|
+
return {
|
|
52
|
+
steepness: MINIMUM_STEEPNESS + (MAXIMUM_STEEPNESS - MINIMUM_STEEPNESS) * t,
|
|
53
|
+
foam: Math.min(Math.max((t - 0.55) / 0.45, 0), 1),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { BoltSegments } from './boltPool.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* How a list of segments becomes triangles, held once for every renderer that draws one.
|
|
5
|
+
*
|
|
6
|
+
* **Four vertices a segment rather than instancing**, because a segment's two endpoints *are*
|
|
7
|
+
* its geometry: there is no repeated base shape to instance, and an instanced version would
|
|
8
|
+
* upload the same two positions per vertex anyway.
|
|
9
|
+
*
|
|
10
|
+
* Shared by arcs and by lines, which want the same quad and nothing else in common: an arc is
|
|
11
|
+
* additive, unlit, over-bright and jittered along its own path, and a line is a flat fogged
|
|
12
|
+
* colour with a clean edge. Two copies of the corner table would be two different meshes for
|
|
13
|
+
* the same segment, which is the mistake `waterGrid.ts` was extracted after catching in the
|
|
14
|
+
* act, a patch resolution of 48 against 24.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/** Four vertices a segment: both ends, both sides, as (along, side). */
|
|
18
|
+
export const SEGMENT_CORNERS: readonly (readonly [number, number])[] = [
|
|
19
|
+
[0, -1],
|
|
20
|
+
[1, -1],
|
|
21
|
+
[1, 1],
|
|
22
|
+
[0, 1],
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
/** The static half of a batch: which end and side each vertex is, and the triangle list. */
|
|
26
|
+
export interface SegmentQuads {
|
|
27
|
+
readonly corners: Float32Array;
|
|
28
|
+
readonly indices: Uint32Array;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function buildSegmentQuads(capacity: number): SegmentQuads {
|
|
32
|
+
const corners = new Float32Array(capacity * 4 * 2);
|
|
33
|
+
const indices = new Uint32Array(capacity * 6);
|
|
34
|
+
for (let s = 0; s < capacity; s++) {
|
|
35
|
+
const v = s * 4;
|
|
36
|
+
for (let c = 0; c < 4; c++) {
|
|
37
|
+
const corner = SEGMENT_CORNERS[c] as readonly [number, number];
|
|
38
|
+
corners[(v + c) * 2] = corner[0];
|
|
39
|
+
corners[(v + c) * 2 + 1] = corner[1];
|
|
40
|
+
}
|
|
41
|
+
const i = s * 6;
|
|
42
|
+
indices[i] = v;
|
|
43
|
+
indices[i + 1] = v + 1;
|
|
44
|
+
indices[i + 2] = v + 2;
|
|
45
|
+
indices[i + 3] = v;
|
|
46
|
+
indices[i + 4] = v + 2;
|
|
47
|
+
indices[i + 5] = v + 3;
|
|
48
|
+
}
|
|
49
|
+
return { corners, indices };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Expand this frame's segments to their four vertices each, into arrays the caller owns.
|
|
54
|
+
*
|
|
55
|
+
* Returns how many segments were written, which is the pool's count clamped to the batch's
|
|
56
|
+
* capacity — a pool that overruns loses its tail rather than the frame.
|
|
57
|
+
*/
|
|
58
|
+
export function expandBoltSegments(
|
|
59
|
+
data: BoltSegments,
|
|
60
|
+
capacity: number,
|
|
61
|
+
from: Float32Array,
|
|
62
|
+
to: Float32Array,
|
|
63
|
+
arc: Float32Array,
|
|
64
|
+
): number {
|
|
65
|
+
const count = Math.min(data.count, capacity);
|
|
66
|
+
for (let s = 0; s < count; s++) {
|
|
67
|
+
const fx = data.from[s * 3] as number;
|
|
68
|
+
const fy = data.from[s * 3 + 1] as number;
|
|
69
|
+
const fz = data.from[s * 3 + 2] as number;
|
|
70
|
+
const tx = data.to[s * 3] as number;
|
|
71
|
+
const ty = data.to[s * 3 + 1] as number;
|
|
72
|
+
const tz = data.to[s * 3 + 2] as number;
|
|
73
|
+
const along = data.along[s] as number;
|
|
74
|
+
const fade = data.fade[s] as number;
|
|
75
|
+
const seed = data.seed[s] as number;
|
|
76
|
+
const gain = data.brightness[s] as number;
|
|
77
|
+
for (let c = 0; c < 4; c++) {
|
|
78
|
+
const v = s * 4 + c;
|
|
79
|
+
from[v * 3] = fx;
|
|
80
|
+
from[v * 3 + 1] = fy;
|
|
81
|
+
from[v * 3 + 2] = fz;
|
|
82
|
+
to[v * 3] = tx;
|
|
83
|
+
to[v * 3 + 1] = ty;
|
|
84
|
+
to[v * 3 + 2] = tz;
|
|
85
|
+
arc[v * 4] = along;
|
|
86
|
+
arc[v * 4 + 1] = fade;
|
|
87
|
+
arc[v * 4 + 2] = seed;
|
|
88
|
+
arc[v * 4 + 3] = gain;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return count;
|
|
92
|
+
}
|