@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,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The joint palette as a one-row `RGBA32F` texture, on WebGL2.
|
|
3
|
+
*
|
|
4
|
+
* Its own module rather than more lines in a 5,000-line renderer, and because the decision it
|
|
5
|
+
* implements — width, cap, unit — lives in `skinPalette.ts` where both backends read it, per the
|
|
6
|
+
* 2026-08-13 rule. This is only the binding half.
|
|
7
|
+
*
|
|
8
|
+
* **One storage level and `NEAREST` both filters, so there is no mip to select.** That is what
|
|
9
|
+
* makes `texelFetch` in the vertex stage honest: an integer coordinate, no level inferred, and
|
|
10
|
+
* nothing for the 2026-08-07 derivative rule to govern — the same property `pointShadowMap.ts`
|
|
11
|
+
* records for its own allocation.
|
|
12
|
+
*
|
|
13
|
+
* `RGBA32F` is a sized internal format WebGL2 core accepts for `texStorage2D`. It is not
|
|
14
|
+
* texture-filterable without an extension, which costs nothing here because nothing filters it.
|
|
15
|
+
*/
|
|
16
|
+
export declare class SkinPaletteTexture {
|
|
17
|
+
private texture;
|
|
18
|
+
private joints;
|
|
19
|
+
/**
|
|
20
|
+
* Upload a palette, reallocating only when the joint count changes.
|
|
21
|
+
*
|
|
22
|
+
* A rig's joint count is fixed for its life, so the reallocation path runs once per skeleton and
|
|
23
|
+
* the steady state is one `texSubImage2D`. Reallocating per frame would be a GPU allocation in
|
|
24
|
+
* the frame loop, which is the same class of mistake as allocating on the CPU there.
|
|
25
|
+
*/
|
|
26
|
+
update(gl: WebGL2RenderingContext, palette: Float32Array): void;
|
|
27
|
+
/** Bind to a **vertex-stage** unit. See `SKIN_PALETTE_TEXTURE_UNIT` for why that is free. */
|
|
28
|
+
bind(gl: WebGL2RenderingContext, unit: number): void;
|
|
29
|
+
/** Whether anything has been uploaded, which is what decides the skinned draw path. */
|
|
30
|
+
get ready(): boolean;
|
|
31
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { paletteTextureWidth, validateSkinPalette } from '../../skinPalette.js';
|
|
2
|
+
/**
|
|
3
|
+
* The joint palette as a one-row `RGBA32F` texture, on WebGL2.
|
|
4
|
+
*
|
|
5
|
+
* Its own module rather than more lines in a 5,000-line renderer, and because the decision it
|
|
6
|
+
* implements — width, cap, unit — lives in `skinPalette.ts` where both backends read it, per the
|
|
7
|
+
* 2026-08-13 rule. This is only the binding half.
|
|
8
|
+
*
|
|
9
|
+
* **One storage level and `NEAREST` both filters, so there is no mip to select.** That is what
|
|
10
|
+
* makes `texelFetch` in the vertex stage honest: an integer coordinate, no level inferred, and
|
|
11
|
+
* nothing for the 2026-08-07 derivative rule to govern — the same property `pointShadowMap.ts`
|
|
12
|
+
* records for its own allocation.
|
|
13
|
+
*
|
|
14
|
+
* `RGBA32F` is a sized internal format WebGL2 core accepts for `texStorage2D`. It is not
|
|
15
|
+
* texture-filterable without an extension, which costs nothing here because nothing filters it.
|
|
16
|
+
*/
|
|
17
|
+
export class SkinPaletteTexture {
|
|
18
|
+
texture = null;
|
|
19
|
+
joints = 0;
|
|
20
|
+
/**
|
|
21
|
+
* Upload a palette, reallocating only when the joint count changes.
|
|
22
|
+
*
|
|
23
|
+
* A rig's joint count is fixed for its life, so the reallocation path runs once per skeleton and
|
|
24
|
+
* the steady state is one `texSubImage2D`. Reallocating per frame would be a GPU allocation in
|
|
25
|
+
* the frame loop, which is the same class of mistake as allocating on the CPU there.
|
|
26
|
+
*/
|
|
27
|
+
update(gl, palette) {
|
|
28
|
+
validateSkinPalette(palette);
|
|
29
|
+
const joints = palette.length / 16;
|
|
30
|
+
const width = paletteTextureWidth(joints);
|
|
31
|
+
if (this.texture === null || this.joints !== joints) {
|
|
32
|
+
if (this.texture !== null)
|
|
33
|
+
gl.deleteTexture(this.texture);
|
|
34
|
+
const created = gl.createTexture();
|
|
35
|
+
if (created === null)
|
|
36
|
+
throw new Error('skin palette: failed to create the palette texture');
|
|
37
|
+
this.texture = created;
|
|
38
|
+
this.joints = joints;
|
|
39
|
+
gl.bindTexture(gl.TEXTURE_2D, created);
|
|
40
|
+
gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, width, 1);
|
|
41
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
42
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
|
|
43
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
44
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
gl.bindTexture(gl.TEXTURE_2D, this.texture);
|
|
48
|
+
}
|
|
49
|
+
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, 1, gl.RGBA, gl.FLOAT, palette);
|
|
50
|
+
}
|
|
51
|
+
/** Bind to a **vertex-stage** unit. See `SKIN_PALETTE_TEXTURE_UNIT` for why that is free. */
|
|
52
|
+
bind(gl, unit) {
|
|
53
|
+
if (this.texture === null)
|
|
54
|
+
return;
|
|
55
|
+
gl.activeTexture(gl.TEXTURE0 + unit);
|
|
56
|
+
gl.bindTexture(gl.TEXTURE_2D, this.texture);
|
|
57
|
+
}
|
|
58
|
+
/** Whether anything has been uploaded, which is what decides the skinned draw path. */
|
|
59
|
+
get ready() {
|
|
60
|
+
return this.texture !== null;
|
|
61
|
+
}
|
|
62
|
+
dispose(gl) {
|
|
63
|
+
if (this.texture !== null)
|
|
64
|
+
gl.deleteTexture(this.texture);
|
|
65
|
+
this.texture = null;
|
|
66
|
+
this.joints = 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { UniformFields } from './scatterPass.ts';
|
|
2
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The bolt pass: a pool of electrical arcs, four vertices a segment.
|
|
5
|
+
*
|
|
6
|
+
* **The only pass here whose vertex buffers change every frame.** Plumes, scatter, water and the
|
|
7
|
+
* flock upload once and animate in the shader; an arc's endpoints are the simulation's output
|
|
8
|
+
* and arrive per frame, so three of the four streams are written on each draw. The staging
|
|
9
|
+
* arrays are allocated with the batch, which is what keeps the frame loop allocation-free.
|
|
10
|
+
*/
|
|
11
|
+
export declare const BOLT_VERT_FIELDS: UniformFields;
|
|
12
|
+
export declare const BOLT_VERT_SIZE: 96;
|
|
13
|
+
export declare const BOLT_FRAG_FIELDS: UniformFields;
|
|
14
|
+
export declare const BOLT_FRAG_SIZE: 128;
|
|
15
|
+
/** A batch of arcs on the device, behind the surface's opaque handle. */
|
|
16
|
+
export interface GpuBolts {
|
|
17
|
+
readonly fromBuffer: GPUBuffer;
|
|
18
|
+
readonly toBuffer: GPUBuffer;
|
|
19
|
+
readonly corners: GPUBuffer;
|
|
20
|
+
readonly arcBuffer: GPUBuffer;
|
|
21
|
+
readonly indices: GPUBuffer;
|
|
22
|
+
readonly capacity: number;
|
|
23
|
+
/** Staging, expanded from the pool's per-segment arrays to per-vertex ones. */
|
|
24
|
+
readonly from: Float32Array;
|
|
25
|
+
readonly to: Float32Array;
|
|
26
|
+
readonly arc: Float32Array;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
}
|
|
29
|
+
export declare function createGpuBolts(device: GPUDevice, capacity: number, label: string): GpuBolts;
|
|
30
|
+
/** `aFrom`, `aTo`, `aCorner`, `aArc` — one buffer each, at the locations `bolt.ts` declares. */
|
|
31
|
+
export declare function boltVertexLayouts(): GPUVertexBufferLayout[];
|
|
32
|
+
export declare function createBoltBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
|
|
33
|
+
export declare function createBoltBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer): GPUBindGroup;
|
|
34
|
+
/**
|
|
35
|
+
* The pipeline.
|
|
36
|
+
*
|
|
37
|
+
* **Additive, depth tested, depth not written, nothing culled** — the same shape every emissive
|
|
38
|
+
* effect here takes, and for the same reason `plumePass` gives: an arc adds light to what is
|
|
39
|
+
* behind it, so a one-minus-alpha destination factor would make a bright filament darken the
|
|
40
|
+
* wall behind it, and writing depth would let it occlude whatever is drawn next.
|
|
41
|
+
*/
|
|
42
|
+
export declare function boltPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout): GPURenderPipeline;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { BOLT_BINDINGS, BOLT_FRAG_WGSL, BOLT_VERT_WGSL, } from '../../shaders/generated/bolt.wgsl.js';
|
|
3
|
+
import { buildSegmentQuads } from '../../segmentQuads.js';
|
|
4
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
5
|
+
import { shaderModule } from './shaderModules.js';
|
|
6
|
+
/**
|
|
7
|
+
* The bolt pass: a pool of electrical arcs, four vertices a segment.
|
|
8
|
+
*
|
|
9
|
+
* **The only pass here whose vertex buffers change every frame.** Plumes, scatter, water and the
|
|
10
|
+
* flock upload once and animate in the shader; an arc's endpoints are the simulation's output
|
|
11
|
+
* and arrive per frame, so three of the four streams are written on each draw. The staging
|
|
12
|
+
* arrays are allocated with the batch, which is what keeps the frame loop allocation-free.
|
|
13
|
+
*/
|
|
14
|
+
export const BOLT_VERT_FIELDS = BOLT_BINDINGS.BOLT_VERT.fields;
|
|
15
|
+
export const BOLT_VERT_SIZE = BOLT_BINDINGS.BOLT_VERT.uniformSize;
|
|
16
|
+
export const BOLT_FRAG_FIELDS = BOLT_BINDINGS.BOLT_FRAG.fields;
|
|
17
|
+
export const BOLT_FRAG_SIZE = BOLT_BINDINGS.BOLT_FRAG.uniformSize;
|
|
18
|
+
const VERT_BINDING = BOLT_BINDINGS.BOLT_VERT.uniforms;
|
|
19
|
+
const FRAG_BINDING = BOLT_BINDINGS.BOLT_FRAG.uniforms;
|
|
20
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
21
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
22
|
+
const USAGE_VERTEX = 0x0020 | 0x0008;
|
|
23
|
+
const USAGE_INDEX = 0x0010 | 0x0008;
|
|
24
|
+
export function createGpuBolts(device, capacity, label) {
|
|
25
|
+
const verts = capacity * 4;
|
|
26
|
+
const geometry = buildSegmentQuads(capacity);
|
|
27
|
+
const dynamic = (floats, name) => device.createBuffer({
|
|
28
|
+
label: `${label}.${name}`,
|
|
29
|
+
size: Math.max(4, floats * 4),
|
|
30
|
+
usage: USAGE_VERTEX,
|
|
31
|
+
});
|
|
32
|
+
const fromBuffer = dynamic(verts * 3, 'from');
|
|
33
|
+
const toBuffer = dynamic(verts * 3, 'to');
|
|
34
|
+
const arcBuffer = dynamic(verts * 4, 'arc');
|
|
35
|
+
const corners = device.createBuffer({
|
|
36
|
+
label: `${label}.corners`,
|
|
37
|
+
size: Math.max(4, geometry.corners.byteLength),
|
|
38
|
+
usage: USAGE_VERTEX,
|
|
39
|
+
});
|
|
40
|
+
device.queue.writeBuffer(corners, 0, geometry.corners);
|
|
41
|
+
const indices = device.createBuffer({
|
|
42
|
+
label: `${label}.indices`,
|
|
43
|
+
size: Math.max(4, geometry.indices.byteLength),
|
|
44
|
+
usage: USAGE_INDEX,
|
|
45
|
+
});
|
|
46
|
+
device.queue.writeBuffer(indices, 0, geometry.indices);
|
|
47
|
+
return {
|
|
48
|
+
fromBuffer,
|
|
49
|
+
toBuffer,
|
|
50
|
+
corners,
|
|
51
|
+
arcBuffer,
|
|
52
|
+
indices,
|
|
53
|
+
capacity,
|
|
54
|
+
from: new Float32Array(verts * 3),
|
|
55
|
+
to: new Float32Array(verts * 3),
|
|
56
|
+
arc: new Float32Array(verts * 4),
|
|
57
|
+
dispose() {
|
|
58
|
+
fromBuffer.destroy();
|
|
59
|
+
toBuffer.destroy();
|
|
60
|
+
corners.destroy();
|
|
61
|
+
arcBuffer.destroy();
|
|
62
|
+
indices.destroy();
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** `aFrom`, `aTo`, `aCorner`, `aArc` — one buffer each, at the locations `bolt.ts` declares. */
|
|
67
|
+
export function boltVertexLayouts() {
|
|
68
|
+
return [
|
|
69
|
+
{
|
|
70
|
+
arrayStride: 12,
|
|
71
|
+
attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
arrayStride: 12,
|
|
75
|
+
attributes: [{ shaderLocation: 1, offset: 0, format: 'float32x3' }],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
arrayStride: 8,
|
|
79
|
+
attributes: [{ shaderLocation: 2, offset: 0, format: 'float32x2' }],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
arrayStride: 16,
|
|
83
|
+
attributes: [{ shaderLocation: 3, offset: 0, format: 'float32x4' }],
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
export function createBoltBindGroupLayout(device) {
|
|
88
|
+
return device.createBindGroupLayout({
|
|
89
|
+
label: 'bolt.layout',
|
|
90
|
+
entries: [
|
|
91
|
+
/*
|
|
92
|
+
* **Addressed by a dynamic offset, so a frame can draw more than one batch.**
|
|
93
|
+
*
|
|
94
|
+
* With one buffer rewritten between draws, every batch reads whatever was written last:
|
|
95
|
+
* `queue.write*` calls are ordered on the queue timeline and the encoder is submitted after
|
|
96
|
+
* every one of them. The picture is each batch wearing the last one's colour, width, time
|
|
97
|
+
* and placement. That is the hazard `UniformRing` exists for, recorded in `AGENTS.md` on
|
|
98
|
+
* 2026-08-27, and this pass was one of four still carrying it — invisible for as long as
|
|
99
|
+
* nothing drew two, which is exactly how water kept it for eight releases.
|
|
100
|
+
*
|
|
101
|
+
* WebGL2 needs none of this: it sets uniforms and draws in one stream.
|
|
102
|
+
*/
|
|
103
|
+
{
|
|
104
|
+
binding: VERT_BINDING,
|
|
105
|
+
visibility: VISIBILITY_VERTEX,
|
|
106
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: BOLT_VERT_SIZE },
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
binding: FRAG_BINDING,
|
|
110
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
111
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: BOLT_FRAG_SIZE },
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
export function createBoltBindGroup(device, layout, vertices, fragments) {
|
|
117
|
+
return device.createBindGroup({
|
|
118
|
+
label: 'bolt.bindGroup',
|
|
119
|
+
layout,
|
|
120
|
+
entries: [
|
|
121
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: BOLT_VERT_SIZE } },
|
|
122
|
+
{ binding: FRAG_BINDING, resource: { buffer: fragments, size: BOLT_FRAG_SIZE } },
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The pipeline.
|
|
128
|
+
*
|
|
129
|
+
* **Additive, depth tested, depth not written, nothing culled** — the same shape every emissive
|
|
130
|
+
* effect here takes, and for the same reason `plumePass` gives: an arc adds light to what is
|
|
131
|
+
* behind it, so a one-minus-alpha destination factor would make a bright filament darken the
|
|
132
|
+
* wall behind it, and writing depth would let it occlude whatever is drawn next.
|
|
133
|
+
*/
|
|
134
|
+
export function boltPipeline(cache, device, layout) {
|
|
135
|
+
return cache.get('bolt', () => ({
|
|
136
|
+
label: 'bolt',
|
|
137
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
138
|
+
vertex: {
|
|
139
|
+
module: shaderModule(device, { label: 'bolt.vert', code: BOLT_VERT_WGSL }),
|
|
140
|
+
entryPoint: 'main',
|
|
141
|
+
buffers: boltVertexLayouts(),
|
|
142
|
+
},
|
|
143
|
+
fragment: {
|
|
144
|
+
module: shaderModule(device, { label: 'bolt.frag', code: BOLT_FRAG_WGSL }),
|
|
145
|
+
entryPoint: 'main',
|
|
146
|
+
targets: [
|
|
147
|
+
{
|
|
148
|
+
format: cache.format,
|
|
149
|
+
blend: {
|
|
150
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one', operation: 'add' },
|
|
151
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one', operation: 'add' },
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
157
|
+
multisample: { count: cache.sampleCount },
|
|
158
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { Bounds } from '../../../math/bounds.ts';
|
|
2
|
+
import { MorphTexture } from './morphTexture.ts';
|
|
3
|
+
import type { MeshData } from '../../mesh.ts';
|
|
4
|
+
/** One attribute of the flat vertex format, in the order and at the locations the shaders use. */
|
|
5
|
+
export interface VertexAttribute {
|
|
6
|
+
readonly name: keyof MeshData | 'positions';
|
|
7
|
+
readonly shaderLocation: number;
|
|
8
|
+
readonly format: GPUVertexFormat;
|
|
9
|
+
/** Floats per vertex. */
|
|
10
|
+
readonly components: number;
|
|
11
|
+
/** Whether a mesh may omit it, in which case a constant stands in. */
|
|
12
|
+
readonly optional: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Locations 0–9, matching `ATTR_POSITION` … `ATTR_RELIEF` in `mesh.ts`.
|
|
16
|
+
*
|
|
17
|
+
* **All ten, not the four that a simple mesh supplies.** WebGL2 lets the pipeline ignore an
|
|
18
|
+
* attribute the shader declares but the mesh omits; WebGPU validates the whole vertex state
|
|
19
|
+
* against the shader module and rejects the pipeline outright:
|
|
20
|
+
*
|
|
21
|
+
* Vertex attribute slot 9 used in [flat.vert] is not present in the VertexState
|
|
22
|
+
*
|
|
23
|
+
* Six were listed here first, because six is what `Mesh` names in the obvious place. The
|
|
24
|
+
* shader declares ten, and the four extra are exactly the ones added late enough to be easy
|
|
25
|
+
* to miss: emissive colour, roughness, grain and relief.
|
|
26
|
+
*/
|
|
27
|
+
export declare const VERTEX_LAYOUT: readonly VertexAttribute[];
|
|
28
|
+
/** Geometry on the device, with the buffers bound in layout order. */
|
|
29
|
+
export interface GpuMesh {
|
|
30
|
+
/** One buffer per attribute, indexed by position in `VERTEX_LAYOUT`. */
|
|
31
|
+
readonly vertexBuffers: readonly GPUBuffer[];
|
|
32
|
+
readonly indexBuffer: GPUBuffer;
|
|
33
|
+
readonly indexCount: number;
|
|
34
|
+
/**
|
|
35
|
+
* How big this mesh is, in its own space.
|
|
36
|
+
*
|
|
37
|
+
* Measured here because the positions are already in hand: an upload walks them anyway, so a
|
|
38
|
+
* caller gets bounds for nothing and no `MeshData` producer has to supply them. Everything
|
|
39
|
+
* that wants to know whether this is on screen starts from this object.
|
|
40
|
+
*/
|
|
41
|
+
readonly bounds: Bounds;
|
|
42
|
+
/**
|
|
43
|
+
* Whether all of this mesh's geometry has reached the device.
|
|
44
|
+
*
|
|
45
|
+
* False only between the steps of an incremental upload; a mesh made by `createGpuMesh` is
|
|
46
|
+
* complete before the call returns. **`submitMesh` refuses to draw an incomplete one**, and
|
|
47
|
+
* that refusal is the contract: the alternative — drawing what has landed — is a mesh whose
|
|
48
|
+
* triangle count grows over several frames, which is a worse artefact than a square that is
|
|
49
|
+
* briefly not there. A consumer that never drives the iterator therefore sees nothing rather
|
|
50
|
+
* than a fan of triangles through the origin.
|
|
51
|
+
*
|
|
52
|
+
* It is also how an abandoned upload is told from a finished one: a lost device ends the
|
|
53
|
+
* iterator, and a mesh that is done but not complete is one whose geometry never arrived.
|
|
54
|
+
*/
|
|
55
|
+
readonly complete: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether this mesh carries a tangent frame.
|
|
58
|
+
*
|
|
59
|
+
* WebGPU has no disabled attribute, so location 10 is always backed — by the caller's data or by
|
|
60
|
+
* the constant buffer. That makes the binding indistinguishable from a real frame, exactly as it
|
|
61
|
+
* is on WebGL2, so the fact travels beside the mesh rather than being read off the GPU.
|
|
62
|
+
*/
|
|
63
|
+
readonly hasTangents: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Whether this mesh carries a rig, which decides the vertex variant a draw takes.
|
|
66
|
+
*
|
|
67
|
+
* The twin of `Mesh.isSkinned` on the other backend. Recorded at upload rather than derived at
|
|
68
|
+
* draw time from the `present` map, because the draw needs it to build its pipeline *key* — and
|
|
69
|
+
* the key is built before the present map is consulted.
|
|
70
|
+
*/
|
|
71
|
+
readonly isSkinned: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Whether this mesh carries the per-vertex channel, which an instanced draw cannot.
|
|
74
|
+
*
|
|
75
|
+
* The twin of `MeshData.channel !== undefined` on the other backend, where `InstancedMesh`
|
|
76
|
+
* refuses it at construction. Recorded rather than derived at draw time for the same reason
|
|
77
|
+
* `isSkinned` is: the refusal happens at `createInstanced`, which holds the mesh and not the
|
|
78
|
+
* data it was built from.
|
|
79
|
+
*/
|
|
80
|
+
readonly hasChannel: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* This mesh's morph deltas, or null for geometry that does not deform.
|
|
83
|
+
*
|
|
84
|
+
* Owned by the mesh for the reason the WebGL2 twin gives: deltas are geometry and never change,
|
|
85
|
+
* where a palette belongs to a pose. Only the weights are per-draw state.
|
|
86
|
+
*/
|
|
87
|
+
readonly morph: MorphTexture | null;
|
|
88
|
+
/**
|
|
89
|
+
* Rewrite this mesh's positions, and its normals where the caller has them.
|
|
90
|
+
*
|
|
91
|
+
* Absent unless the mesh was created `dynamic`. **This backend interleaves every attribute into
|
|
92
|
+
* one buffer**, so a position is not contiguous with the next one — writing them individually
|
|
93
|
+
* would be one `writeBuffer` per vertex. So a dynamic mesh keeps the interleaved array it was
|
|
94
|
+
* built from, patches the two fields that move, and uploads the lot in one call. The cost is
|
|
95
|
+
* one CPU-side copy of the vertex data per dynamic mesh, which is why the flag exists rather
|
|
96
|
+
* than every mesh paying it.
|
|
97
|
+
*/
|
|
98
|
+
readonly update: ((device: GPUDevice, positions: Float32Array, normals?: Float32Array) => void) | null;
|
|
99
|
+
dispose(): void;
|
|
100
|
+
}
|
|
101
|
+
/** A mesh on its way to the device, and the iterator that gets it there. */
|
|
102
|
+
export interface IncrementalGpuMesh {
|
|
103
|
+
/**
|
|
104
|
+
* Usable at once — it can be held, measured and disposed — but not drawable until the upload
|
|
105
|
+
* finishes. See `GpuMesh.complete`.
|
|
106
|
+
*/
|
|
107
|
+
readonly mesh: GpuMesh;
|
|
108
|
+
/**
|
|
109
|
+
* Advance the upload by one bounded step. Done when it returns `done`.
|
|
110
|
+
*
|
|
111
|
+
* The call that returns `done` is the one that does the last step's work, not an empty call
|
|
112
|
+
* after it, so a mesh of *n* chunks takes exactly *n* calls and a caller counting stops counts
|
|
113
|
+
* the right number.
|
|
114
|
+
*/
|
|
115
|
+
readonly upload: Iterator<void, void>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Upload a mesh, all of it, now.
|
|
119
|
+
*
|
|
120
|
+
* The whole of `createGpuMeshIncremental` driven to the end in one call — deliberately, so the
|
|
121
|
+
* two paths cannot write different bytes. The one that spreads the work is the one with the
|
|
122
|
+
* interesting decisions in it; read that.
|
|
123
|
+
*/
|
|
124
|
+
export declare function createGpuMesh(device: GPUDevice, data: MeshData, dynamic?: boolean): GpuMesh;
|
|
125
|
+
/**
|
|
126
|
+
* Upload a mesh over as many frames as the caller gives it.
|
|
127
|
+
*
|
|
128
|
+
* **The absent-attribute trick is the interesting part.** WebGL2 lets an attribute be
|
|
129
|
+
* *disabled* and read a constant the driver supplies, which is why `mesh.ts` can leave
|
|
130
|
+
* `specular` and `uvs` off entirely and a world with no shiny or textured geometry uploads
|
|
131
|
+
* nothing for them. WebGPU has no disabled attribute: every location in a vertex layout must
|
|
132
|
+
* be backed by a buffer.
|
|
133
|
+
*
|
|
134
|
+
* `arrayStride: 0` is the equivalent and it is exact. A stride of zero means every vertex
|
|
135
|
+
* reads element zero, so a one-element buffer of zeroes serves a mesh of any size. Eight
|
|
136
|
+
* bytes, allocated per mesh that omits the attribute, and **no shader variant** — which is
|
|
137
|
+
* what keeps both backends drawing from one generated set of WGSL instead of two.
|
|
138
|
+
*
|
|
139
|
+
* **Why the work is divisible here and not on the other backend.** This one interleaves every
|
|
140
|
+
* vertex on the CPU into a new array before it writes anything, where `mesh.ts` skips the
|
|
141
|
+
* interleave in favour of three tight buffers and says so in its first line. So the cost is
|
|
142
|
+
* WebGPU's alone and proportional to geometry, which is why a consumer measured the same drive
|
|
143
|
+
* as smooth on WebGL2 and hitching here.
|
|
144
|
+
*
|
|
145
|
+
* **What is paid at creation and not spread:** validation, the bounds, the allocation of the
|
|
146
|
+
* interleave array, the three buffers, and the constants. The bounds are the deliberate one — a
|
|
147
|
+
* streamer places and culls a region from them before a byte of it has landed, so a handle whose
|
|
148
|
+
* bounds were not yet known would not be usable at once, which is the whole promise here.
|
|
149
|
+
*/
|
|
150
|
+
export declare function createGpuMeshIncremental(device: GPUDevice, data: MeshData, dynamic?: boolean): IncrementalGpuMesh;
|
|
151
|
+
export declare function vertexBufferLayouts(present: Readonly<Record<string, boolean>>,
|
|
152
|
+
/**
|
|
153
|
+
* Whether a third buffer carries one placement and colour per instance.
|
|
154
|
+
*
|
|
155
|
+
* Appended rather than woven in, at `stepMode: 'instance'`, so an instanced pipeline binds the
|
|
156
|
+
* mesh's own two buffers unchanged and its batch's third. The flat pipeline binds two of a
|
|
157
|
+
* limit of eight, so there is room, and a mesh needs no second upload to be instanced.
|
|
158
|
+
*/
|
|
159
|
+
instanced?: boolean): GPUVertexBufferLayout[];
|