@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,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render pipelines, built once and looked up by name.
|
|
3
|
+
*
|
|
4
|
+
* **Pipeline creation is the expensive operation in WebGPU** — it compiles shaders and
|
|
5
|
+
* validates state — and `AGENTS.md` forbids allocating in a per-frame path. So a pipeline is
|
|
6
|
+
* built once per distinct state and found by a string key thereafter.
|
|
7
|
+
*
|
|
8
|
+
* The key is the caller's to build, and it must be built at construction time rather than
|
|
9
|
+
* per frame. A key assembled with template interpolation inside a draw call allocates a
|
|
10
|
+
* string sixty times a second for every draw, which is the allocation this class exists to
|
|
11
|
+
* avoid, moved rather than removed.
|
|
12
|
+
*/
|
|
13
|
+
export class PipelineCache {
|
|
14
|
+
/**
|
|
15
|
+
* The colour format every pipeline here targets, which is wherever the *world* lands.
|
|
16
|
+
*
|
|
17
|
+
* **Not the swap chain's, and the difference is the whole point.** Under a composite the world
|
|
18
|
+
* is drawn into the scene target and only the resolve reaches the canvas, so a pipeline built
|
|
19
|
+
* against the swap chain disagrees with its attachment — which WebGPU raises at `finish`,
|
|
20
|
+
* dropping the frame's entire command buffer. Carried here for the same reason `sampleCount`
|
|
21
|
+
* is: one number, read by every `describe` callback, so no pass can disagree with the target
|
|
22
|
+
* it is about to be used on. `webgpu/renderer.ts` chooses it, once.
|
|
23
|
+
*/
|
|
24
|
+
format;
|
|
25
|
+
/**
|
|
26
|
+
* How many samples every pipeline here rasterises at.
|
|
27
|
+
*
|
|
28
|
+
* **Carried by the cache so no pipeline can disagree with the attachment.** A pipeline's
|
|
29
|
+
* sample count must equal the colour target's exactly, and WebGPU rejects the mismatch at
|
|
30
|
+
* draw time with a message about the pipeline rather than about the target — so a pass that
|
|
31
|
+
* forgot to ask would fail somewhere other than where the mistake was made. One number, read
|
|
32
|
+
* by every `describe` callback.
|
|
33
|
+
*/
|
|
34
|
+
sampleCount;
|
|
35
|
+
device;
|
|
36
|
+
pipelines = new Map();
|
|
37
|
+
/**
|
|
38
|
+
* Builds still compiling, by key, so two asks for one pipeline share a compile.
|
|
39
|
+
*
|
|
40
|
+
* **`createRenderPipeline` does not compile, it defers.** It returns in microseconds and
|
|
41
|
+
* leaves the driver to finish the shader the first time something draws with it, which puts
|
|
42
|
+
* the cost inside a frame instead of before one. Measured on an S23 Ultra: twelve pipelines
|
|
43
|
+
* "built" in 3ms, then seven submits in a row each taking 5.2 seconds and all draining
|
|
44
|
+
* together, with no allocation, no long task and an idle main thread the whole time. The
|
|
45
|
+
* queue was blocked on compilation nobody had asked for yet.
|
|
46
|
+
*
|
|
47
|
+
* `createRenderPipelineAsync` is the API that exists for this. It compiles across the
|
|
48
|
+
* driver's own threads and resolves when the pipeline is genuinely ready, so a renderer can
|
|
49
|
+
* wait for readiness rather than discovering it mid-frame.
|
|
50
|
+
*/
|
|
51
|
+
compiling = new Map();
|
|
52
|
+
constructor(device, format, sampleCount = 1) {
|
|
53
|
+
this.device = device;
|
|
54
|
+
this.format = format;
|
|
55
|
+
this.sampleCount = sampleCount;
|
|
56
|
+
}
|
|
57
|
+
/** How many distinct pipelines have been built. Read by tests and diagnostics. */
|
|
58
|
+
get size() {
|
|
59
|
+
return this.pipelines.size;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The pipeline for this key, compiled off the main thread.
|
|
63
|
+
*
|
|
64
|
+
* Preferred wherever the caller is not inside a frame, which `get`'s own contract says is
|
|
65
|
+
* everywhere: pipelines are built once per distinct state at construction time. The
|
|
66
|
+
* difference is only *when* the driver does the work, and that difference is the whole bug
|
|
67
|
+
* this exists for.
|
|
68
|
+
*/
|
|
69
|
+
async getAsync(key, describe) {
|
|
70
|
+
const existing = this.pipelines.get(key);
|
|
71
|
+
if (existing !== undefined)
|
|
72
|
+
return existing;
|
|
73
|
+
const inFlight = this.compiling.get(key);
|
|
74
|
+
if (inFlight !== undefined)
|
|
75
|
+
return inFlight;
|
|
76
|
+
/*
|
|
77
|
+
* **Falls back where the async form is missing.** It is part of the standard, but a device
|
|
78
|
+
* can be a test double, a polyfill or an older implementation, and a renderer that throws
|
|
79
|
+
* on a device which can still draw is worse than one that compiles the slow way. The
|
|
80
|
+
* fallback keeps the same contract — a promise that resolves when the pipeline exists —
|
|
81
|
+
* so nothing above here has to know which path it got.
|
|
82
|
+
*/
|
|
83
|
+
const build = typeof this.device.createRenderPipelineAsync === 'function'
|
|
84
|
+
? this.device.createRenderPipelineAsync(describe())
|
|
85
|
+
: Promise.resolve(this.device.createRenderPipeline(describe()));
|
|
86
|
+
const promise = build.then((built) => {
|
|
87
|
+
this.pipelines.set(key, built);
|
|
88
|
+
this.compiling.delete(key);
|
|
89
|
+
return built;
|
|
90
|
+
});
|
|
91
|
+
this.compiling.set(key, promise);
|
|
92
|
+
return promise;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Resolve once every pipeline asked for so far has finished compiling.
|
|
96
|
+
*
|
|
97
|
+
* A renderer awaits this before its first frame, which is what moves the compile out of the
|
|
98
|
+
* queue and in front of it. A failure is not rethrown: a pipeline that cannot be built will
|
|
99
|
+
* fail again, loudly, at the draw that needs it, and taking the whole boot down here would
|
|
100
|
+
* turn one broken material into a blank page.
|
|
101
|
+
*/
|
|
102
|
+
async ready() {
|
|
103
|
+
while (this.compiling.size > 0) {
|
|
104
|
+
await Promise.allSettled([...this.compiling.values()]);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** The pipeline for this key if it is already built, without building one. */
|
|
108
|
+
peek(key) {
|
|
109
|
+
return this.pipelines.get(key);
|
|
110
|
+
}
|
|
111
|
+
/** How many are still compiling. Read by tests and diagnostics. */
|
|
112
|
+
get compilingCount() {
|
|
113
|
+
return this.compiling.size;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The pipeline for this key, building it on the first ask only.
|
|
117
|
+
*
|
|
118
|
+
* `describe` is a callback rather than a value because **building the descriptor allocates
|
|
119
|
+
* too**: a nested object with vertex buffer layouts and blend state, constructed to be
|
|
120
|
+
* thrown away on every hit. Passing a function means a hit costs one `Map` lookup.
|
|
121
|
+
*/
|
|
122
|
+
get(key, describe) {
|
|
123
|
+
const existing = this.pipelines.get(key);
|
|
124
|
+
if (existing !== undefined)
|
|
125
|
+
return existing;
|
|
126
|
+
const built = this.device.createRenderPipeline(describe());
|
|
127
|
+
this.pipelines.set(key, built);
|
|
128
|
+
return built;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Drop every pipeline.
|
|
132
|
+
*
|
|
133
|
+
* WebGPU has no explicit pipeline release — they are freed when nothing references them —
|
|
134
|
+
* so this is about not handing out pipelines belonging to a destroyed device rather than
|
|
135
|
+
* about reclaiming memory here and now.
|
|
136
|
+
*/
|
|
137
|
+
dispose() {
|
|
138
|
+
this.pipelines.clear();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Vec3 } from '../../../math/color.ts';
|
|
2
|
+
import { type PlumeMaterial } from '../../plumeMaterial.ts';
|
|
3
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
4
|
+
import type { UniformFields } from './scatterPass.ts';
|
|
5
|
+
/**
|
|
6
|
+
* The plume pass: crossed quads per plume, displaced and faded in the shaders.
|
|
7
|
+
*
|
|
8
|
+
* **Two blend modes and one geometry.** A flame adds light and smoke occludes it, which is the
|
|
9
|
+
* `PlumeBlend` the options carry; everything else about the two is the fragment stage. Neither
|
|
10
|
+
* writes depth — a soft quad that did would punch a hole in whatever came after it.
|
|
11
|
+
*/
|
|
12
|
+
/** The vertex stage is shared by every plume material; only the fragment differs. */
|
|
13
|
+
export declare const PLUME_VERT_FIELDS: UniformFields;
|
|
14
|
+
export declare const PLUME_VERT_SIZE: 112;
|
|
15
|
+
export declare const PLUME_FRAG_FIELDS: UniformFields;
|
|
16
|
+
export declare const PLUME_FRAG_SIZE: number;
|
|
17
|
+
/** Each material's own block, so a change to one and not the others is caught rather than assumed. */
|
|
18
|
+
export declare const FIRE_FRAG_SIZE: 128;
|
|
19
|
+
export declare const SMOKE_FRAG_SIZE: 128;
|
|
20
|
+
export declare const ARCANE_FRAG_SIZE: 144;
|
|
21
|
+
export declare function plumeVertexLayouts(): GPUVertexBufferLayout[];
|
|
22
|
+
/** Plume geometry on the device, behind the surface's opaque handle. */
|
|
23
|
+
export interface GpuPlumes {
|
|
24
|
+
readonly vertexBuffers: readonly GPUBuffer[];
|
|
25
|
+
readonly indexBuffer: GPUBuffer;
|
|
26
|
+
readonly indexCount: number;
|
|
27
|
+
readonly material: PlumeMaterial;
|
|
28
|
+
readonly blend: 'additive' | 'alpha';
|
|
29
|
+
readonly sizePulse: number;
|
|
30
|
+
readonly windResponse: number;
|
|
31
|
+
/**
|
|
32
|
+
* Colour handed to the fragment stage as `uTint`, white when the caller named none.
|
|
33
|
+
*
|
|
34
|
+
* **Held per batch because it is a batch's property, and written on every draw because the
|
|
35
|
+
* block comes out of a ring.** `PlumeRenderer` has carried this since before the second
|
|
36
|
+
* backend and this path dropped it on the floor: `createPlumes` never read `options.tint`,
|
|
37
|
+
* so the one material that reads the uniform would have drawn with a tint of zero — which,
|
|
38
|
+
* being additive, is not a wrong colour but an invisible one.
|
|
39
|
+
*/
|
|
40
|
+
readonly tint: Vec3;
|
|
41
|
+
/**
|
|
42
|
+
* Scale one plume, 0 to hide it. See `PlumeRenderer.setScale`, which this mirrors.
|
|
43
|
+
*
|
|
44
|
+
* Writes only that plume's own vertices, so turning a slick's fire on costs a handful of
|
|
45
|
+
* floats rather than a re-upload of the batch.
|
|
46
|
+
*/
|
|
47
|
+
setScale(index: number, scale: number): void;
|
|
48
|
+
dispose(): void;
|
|
49
|
+
}
|
|
50
|
+
/** The five attribute streams a plume batch is built from, already laid out by the caller. */
|
|
51
|
+
export interface PlumeGeometry {
|
|
52
|
+
readonly centers: Float32Array;
|
|
53
|
+
readonly corners: Float32Array;
|
|
54
|
+
readonly sizes: Float32Array;
|
|
55
|
+
readonly seeds: Float32Array;
|
|
56
|
+
readonly blades: Float32Array;
|
|
57
|
+
readonly indices: Uint32Array;
|
|
58
|
+
}
|
|
59
|
+
export declare function createGpuPlumes(device: GPUDevice, geometry: PlumeGeometry, material: PlumeMaterial, blend: 'additive' | 'alpha', sizePulse: number, windResponse: number, tint: Vec3): GpuPlumes;
|
|
60
|
+
export declare function createPlumeBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
|
|
61
|
+
/** Both buffers are rings; the slot each draw takes arrives as a dynamic offset. */
|
|
62
|
+
export declare function createPlumeBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer): GPUBindGroup;
|
|
63
|
+
/**
|
|
64
|
+
* The pipeline for one material and blend.
|
|
65
|
+
*
|
|
66
|
+
* **Depth tested, never written.** These are soft quads drawn after the opaque scene; writing
|
|
67
|
+
* depth would let a puff occlude something behind it that should have shown through.
|
|
68
|
+
*/
|
|
69
|
+
export declare function plumePipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, material: PlumeMaterial, blend: 'additive' | 'alpha'): GPURenderPipeline;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { PLUME_VERTS } from '../../plumeGeometry.js';
|
|
3
|
+
import { plumeShaders } from '../../plumeMaterial.js';
|
|
4
|
+
import { ARCANE_BINDINGS } from '../../shaders/generated/arcane.wgsl.js';
|
|
5
|
+
import { FIRE_BINDINGS } from '../../shaders/generated/fire.wgsl.js';
|
|
6
|
+
import { SMOKE_BINDINGS } from '../../shaders/generated/smoke.wgsl.js';
|
|
7
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
8
|
+
import { shaderModule } from './shaderModules.js';
|
|
9
|
+
/**
|
|
10
|
+
* The plume pass: crossed quads per plume, displaced and faded in the shaders.
|
|
11
|
+
*
|
|
12
|
+
* **Two blend modes and one geometry.** A flame adds light and smoke occludes it, which is the
|
|
13
|
+
* `PlumeBlend` the options carry; everything else about the two is the fragment stage. Neither
|
|
14
|
+
* writes depth — a soft quad that did would punch a hole in whatever came after it.
|
|
15
|
+
*/
|
|
16
|
+
/** The vertex stage is shared by every plume material; only the fragment differs. */
|
|
17
|
+
export const PLUME_VERT_FIELDS = FIRE_BINDINGS.PLUME_VERT.fields;
|
|
18
|
+
export const PLUME_VERT_SIZE = FIRE_BINDINGS.PLUME_VERT.uniformSize;
|
|
19
|
+
/*
|
|
20
|
+
* **The blocks are not all the same shape, and the widest one sizes the binding.**
|
|
21
|
+
*
|
|
22
|
+
* Fire and smoke are 128 bytes over the same fourteen fields. Arcane is 144 over the same
|
|
23
|
+
* fourteen plus `uTint`, at the same offsets for the shared ones — which is asserted below
|
|
24
|
+
* rather than assumed, because a generator that moved one would put a field where this writer
|
|
25
|
+
* does not look.
|
|
26
|
+
*
|
|
27
|
+
* **Sizing this to fire's block is a pipeline that does not build.** Measured on an RX 9070 XT
|
|
28
|
+
* through radv, against the device rather than the specification: *"The shader uses more bytes
|
|
29
|
+
* of the buffer (144) than the layout's minBindingSize (128)"*, raised while validating
|
|
30
|
+
* `@group(0) @binding(1)`. That lands on `createRenderPipeline`, so by the 2026-08-14 rule the
|
|
31
|
+
* cost is not a wrong picture, it is no picture — the arcane plumes simply never draw and the
|
|
32
|
+
* command buffer they were recorded into dies with them. A binding wider than a shader needs is
|
|
33
|
+
* valid in the other direction, so one size serves all three.
|
|
34
|
+
*/
|
|
35
|
+
export const PLUME_FRAG_FIELDS = ARCANE_BINDINGS.ARCANE_FRAG.fields;
|
|
36
|
+
export const PLUME_FRAG_SIZE = Math.max(FIRE_BINDINGS.FIRE_FRAG.uniformSize, SMOKE_BINDINGS.SMOKE_FRAG.uniformSize, ARCANE_BINDINGS.ARCANE_FRAG.uniformSize);
|
|
37
|
+
const VERT_BINDING = FIRE_BINDINGS.PLUME_VERT.uniforms;
|
|
38
|
+
const FRAG_BINDING = FIRE_BINDINGS.FIRE_FRAG.uniforms;
|
|
39
|
+
/** Each material's own block, so a change to one and not the others is caught rather than assumed. */
|
|
40
|
+
export const FIRE_FRAG_SIZE = FIRE_BINDINGS.FIRE_FRAG.uniformSize;
|
|
41
|
+
export const SMOKE_FRAG_SIZE = SMOKE_BINDINGS.SMOKE_FRAG.uniformSize;
|
|
42
|
+
export const ARCANE_FRAG_SIZE = ARCANE_BINDINGS.ARCANE_FRAG.uniformSize;
|
|
43
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
44
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
45
|
+
const USAGE_VERTEX = 0x0020 | 0x0008;
|
|
46
|
+
const USAGE_INDEX = 0x0010 | 0x0008;
|
|
47
|
+
/** `aCenter`, `aCorner`, `aSize`, `aSeed`, `aBlade` — one buffer each, as the GL path holds them. */
|
|
48
|
+
const ATTRIBUTES = [
|
|
49
|
+
{ location: 0, floats: 3 },
|
|
50
|
+
{ location: 1, floats: 2 },
|
|
51
|
+
{ location: 2, floats: 2 },
|
|
52
|
+
{ location: 3, floats: 1 },
|
|
53
|
+
{ location: 4, floats: 1 },
|
|
54
|
+
];
|
|
55
|
+
const FORMATS = {
|
|
56
|
+
1: 'float32',
|
|
57
|
+
2: 'float32x2',
|
|
58
|
+
3: 'float32x3',
|
|
59
|
+
};
|
|
60
|
+
export function plumeVertexLayouts() {
|
|
61
|
+
return ATTRIBUTES.map((a) => ({
|
|
62
|
+
arrayStride: a.floats * 4,
|
|
63
|
+
stepMode: 'vertex',
|
|
64
|
+
attributes: [
|
|
65
|
+
{ shaderLocation: a.location, offset: 0, format: FORMATS[a.floats] },
|
|
66
|
+
],
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
export function createGpuPlumes(device, geometry, material, blend, sizePulse, windResponse, tint) {
|
|
70
|
+
const buffers = [];
|
|
71
|
+
const streams = [
|
|
72
|
+
geometry.centers,
|
|
73
|
+
geometry.corners,
|
|
74
|
+
geometry.sizes,
|
|
75
|
+
geometry.seeds,
|
|
76
|
+
geometry.blades,
|
|
77
|
+
];
|
|
78
|
+
for (let i = 0; i < streams.length; i++) {
|
|
79
|
+
const data = streams[i];
|
|
80
|
+
const buffer = device.createBuffer({
|
|
81
|
+
label: `plume.attr${i}`,
|
|
82
|
+
size: Math.max(4, data.byteLength),
|
|
83
|
+
usage: USAGE_VERTEX,
|
|
84
|
+
});
|
|
85
|
+
device.queue.writeBuffer(buffer, 0, data);
|
|
86
|
+
buffers.push(buffer);
|
|
87
|
+
}
|
|
88
|
+
const indexBuffer = device.createBuffer({
|
|
89
|
+
label: 'plume.indices',
|
|
90
|
+
size: Math.max(4, geometry.indices.byteLength),
|
|
91
|
+
usage: USAGE_INDEX,
|
|
92
|
+
});
|
|
93
|
+
device.queue.writeBuffer(indexBuffer, 0, geometry.indices);
|
|
94
|
+
/*
|
|
95
|
+
* The sizes are kept on the CPU as well as uploaded, and the originals beside them, because
|
|
96
|
+
* `setScale` multiplies the *base* size rather than the current one — scaling a scaled plume
|
|
97
|
+
* would compound, and a slick cycling on and off would shrink to nothing.
|
|
98
|
+
*/
|
|
99
|
+
const sizes = Float32Array.from(geometry.sizes);
|
|
100
|
+
const baseSizes = Float32Array.from(geometry.sizes);
|
|
101
|
+
const sizeBuffer = buffers[2];
|
|
102
|
+
return {
|
|
103
|
+
vertexBuffers: buffers,
|
|
104
|
+
indexBuffer,
|
|
105
|
+
indexCount: geometry.indices.length,
|
|
106
|
+
material,
|
|
107
|
+
blend,
|
|
108
|
+
sizePulse,
|
|
109
|
+
windResponse,
|
|
110
|
+
tint,
|
|
111
|
+
setScale(index, scale) {
|
|
112
|
+
const span = PLUME_VERTS * 2;
|
|
113
|
+
const base = index * span;
|
|
114
|
+
if (base < 0 || base + span > sizes.length)
|
|
115
|
+
return;
|
|
116
|
+
const width = baseSizes[index * 2] ?? 0;
|
|
117
|
+
const height = baseSizes[index * 2 + 1] ?? 0;
|
|
118
|
+
for (let c = 0; c < PLUME_VERTS; c++) {
|
|
119
|
+
sizes[base + c * 2] = width * scale;
|
|
120
|
+
sizes[base + c * 2 + 1] = height * scale;
|
|
121
|
+
}
|
|
122
|
+
device.queue.writeBuffer(sizeBuffer, base * 4, sizes, base, span);
|
|
123
|
+
},
|
|
124
|
+
dispose() {
|
|
125
|
+
for (const b of buffers)
|
|
126
|
+
b.destroy();
|
|
127
|
+
indexBuffer.destroy();
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export function createPlumeBindGroupLayout(device) {
|
|
132
|
+
return device.createBindGroupLayout({
|
|
133
|
+
label: 'plume.layout',
|
|
134
|
+
entries: [
|
|
135
|
+
/*
|
|
136
|
+
* **Both blocks are per draw, and that is a bug fix rather than a precaution.**
|
|
137
|
+
* `sizePulse` and `windResponse` belong to the batch, not the frame — a flame is
|
|
138
|
+
* `0.12` and the smoke above it `1.35` — and a scene draws both in one pass. With one
|
|
139
|
+
* buffer per block the second `writeBuffer` won for both draws, so the flame was bent
|
|
140
|
+
* by the smoke's wind response: a fire leaning forty degrees in still air, on a scene
|
|
141
|
+
* whose every other surface matched to the byte. See `UniformRing`.
|
|
142
|
+
*/
|
|
143
|
+
{
|
|
144
|
+
binding: VERT_BINDING,
|
|
145
|
+
visibility: VISIBILITY_VERTEX,
|
|
146
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: PLUME_VERT_SIZE },
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
binding: FRAG_BINDING,
|
|
150
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
151
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: PLUME_FRAG_SIZE },
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/** Both buffers are rings; the slot each draw takes arrives as a dynamic offset. */
|
|
157
|
+
export function createPlumeBindGroup(device, layout, vertices, fragments) {
|
|
158
|
+
return device.createBindGroup({
|
|
159
|
+
label: 'plume.bindGroup',
|
|
160
|
+
layout,
|
|
161
|
+
entries: [
|
|
162
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: PLUME_VERT_SIZE } },
|
|
163
|
+
{ binding: FRAG_BINDING, resource: { buffer: fragments, size: PLUME_FRAG_SIZE } },
|
|
164
|
+
],
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The blend each material wants.
|
|
169
|
+
*
|
|
170
|
+
* **Additive keeps the source alpha out of the destination factor** — a flame is light added
|
|
171
|
+
* to what is behind it, and multiplying that by one-minus-alpha would make a bright flame
|
|
172
|
+
* darken the wall behind it. Alpha is the ordinary over-operator smoke wants.
|
|
173
|
+
*/
|
|
174
|
+
function blendState(blend) {
|
|
175
|
+
return blend === 'additive'
|
|
176
|
+
? {
|
|
177
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one', operation: 'add' },
|
|
178
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one', operation: 'add' },
|
|
179
|
+
}
|
|
180
|
+
: {
|
|
181
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
182
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The pipeline for one material and blend.
|
|
187
|
+
*
|
|
188
|
+
* **Depth tested, never written.** These are soft quads drawn after the opaque scene; writing
|
|
189
|
+
* depth would let a puff occlude something behind it that should have shown through.
|
|
190
|
+
*/
|
|
191
|
+
export function plumePipeline(cache, device, layout, material, blend) {
|
|
192
|
+
const shaders = plumeShaders(material);
|
|
193
|
+
return cache.get(`plume:${material}:${blend}`, () => ({
|
|
194
|
+
label: `plume:${material}`,
|
|
195
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
196
|
+
vertex: {
|
|
197
|
+
module: shaderModule(device, { label: 'plume.vert', code: shaders.vertexWgsl }),
|
|
198
|
+
entryPoint: 'main',
|
|
199
|
+
buffers: plumeVertexLayouts(),
|
|
200
|
+
},
|
|
201
|
+
fragment: {
|
|
202
|
+
module: shaderModule(device, {
|
|
203
|
+
label: `plume.frag:${material}`,
|
|
204
|
+
code: shaders.fragmentWgsl,
|
|
205
|
+
}),
|
|
206
|
+
entryPoint: 'main',
|
|
207
|
+
targets: [{ format: cache.format, blend: blendState(blend) }],
|
|
208
|
+
},
|
|
209
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
210
|
+
multisample: { count: cache.sampleCount },
|
|
211
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { type mat4 } from 'gl-matrix';
|
|
2
|
+
import { type PointShadowSource } from '../../pointShadowImage.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Every point light's shadow as one array texture, and the scratch that fills it.
|
|
5
|
+
*
|
|
6
|
+
* The WebGPU half of `pointShadowArray.ts`; the reasoning lives there, and this is one texture,
|
|
7
|
+
* one scratch and a pipeline. **The scratch is a separate texture on this backend too**, and not
|
|
8
|
+
* for WebGL2's reason: WebGPU rejects a pass outright for holding a texture it is also sampling,
|
|
9
|
+
* where WebGL2 raises `INVALID_OPERATION` at the draw. Two ways of saying the same thing, and
|
|
10
|
+
* both say the resolve reads the scratch.
|
|
11
|
+
*/
|
|
12
|
+
export declare class GpuPointShadowArray {
|
|
13
|
+
/** The array, as the shader samples it. */
|
|
14
|
+
readonly view: GPUTextureView;
|
|
15
|
+
readonly layers: number;
|
|
16
|
+
/** Where a face is rendered before it is resolved. One, shared by every light. */
|
|
17
|
+
readonly scratchView: GPUTextureView;
|
|
18
|
+
private readonly texture;
|
|
19
|
+
private readonly scratch;
|
|
20
|
+
private readonly layerViews;
|
|
21
|
+
private readonly pipeline;
|
|
22
|
+
private readonly bindGroup;
|
|
23
|
+
/**
|
|
24
|
+
* A slot per resolved face, not one buffer written six times.
|
|
25
|
+
*
|
|
26
|
+
* **`queue.writeBuffer` does not interleave with encoded commands.** Writes are ordered on
|
|
27
|
+
* the queue timeline and the encoder is submitted afterwards, so six writes between six
|
|
28
|
+
* passes give all six passes the *last* face's rotation and index — and five of them then
|
|
29
|
+
* discard every fragment, because `uFaceIndex` does not match. The layer stays empty and the
|
|
30
|
+
* light stops casting, which reads as a lighting change rather than as a missing upload.
|
|
31
|
+
*
|
|
32
|
+
* That is the failure `UniformRing` exists for, described in its own header, and this file
|
|
33
|
+
* reproduced it exactly. Found by capturing: WebGPU diverged from WebGL2 by seven times and
|
|
34
|
+
* came out *brighter*, and flipping a coordinate in the resolve changed the frame by not one
|
|
35
|
+
* pixel — which is what an empty map looks like.
|
|
36
|
+
*/
|
|
37
|
+
private readonly ring;
|
|
38
|
+
constructor(device: GPUDevice, faceSize: number, lightCount: number,
|
|
39
|
+
/** Layers above the point pool, for a world's casting rectangles. See `pointShadowArray.ts`. */
|
|
40
|
+
extraLayers?: number);
|
|
41
|
+
/**
|
|
42
|
+
* Write the scratch's contents into `layer`'s region for `face`.
|
|
43
|
+
*
|
|
44
|
+
* A pass of its own on the caller's encoder, with `load` rather than `clear`: the other five
|
|
45
|
+
* faces of this layer are already there and must survive. `discard` in the shader is what
|
|
46
|
+
* keeps this face to its own region.
|
|
47
|
+
*/
|
|
48
|
+
resolve(encoder: GPUCommandEncoder, layer: number, face: number, far: number, near: number): void;
|
|
49
|
+
/** Start a frame's bakes. See the ring: slots are reused and nothing is freed. */
|
|
50
|
+
beginFrame(): void;
|
|
51
|
+
/** Upload every slot this frame's resolves took, in one write, before the encoder is submitted. */
|
|
52
|
+
flush(): void;
|
|
53
|
+
dispose(): void;
|
|
54
|
+
}
|
|
55
|
+
/** What a face's pass needs from the caller: somewhere to record, and the casters to record. */
|
|
56
|
+
export type PointShadowFacePass = (view: GPUTextureView, viewProj: mat4) => void;
|
|
57
|
+
/** And what turns that face into its region of the light's octahedral layer. */
|
|
58
|
+
export type PointShadowResolve = (layer: number, face: number, far: number, near: number) => void;
|
|
59
|
+
export declare class GpuPointShadowMap implements PointShadowSource {
|
|
60
|
+
readonly size: number;
|
|
61
|
+
/** Which layer of the shared array this map's image lives in. See `pointShadowMap.ts`. */
|
|
62
|
+
readonly layer: number;
|
|
63
|
+
private readonly array;
|
|
64
|
+
private readonly image;
|
|
65
|
+
private readonly range;
|
|
66
|
+
constructor(array: () => GpuPointShadowArray | null, layer: number, size: number);
|
|
67
|
+
get far(): number;
|
|
68
|
+
get near(): number;
|
|
69
|
+
get sourceRadius(): number;
|
|
70
|
+
get hasBaked(): boolean;
|
|
71
|
+
get presence(): number;
|
|
72
|
+
matchesSource(x: number, y: number, z: number, range: number, near: number, sourceRadius?: number, tolerance?: number): boolean;
|
|
73
|
+
advance(dt: number): void;
|
|
74
|
+
forget(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Render up to `maxFaces` of the six, resuming a bake already under way.
|
|
77
|
+
*
|
|
78
|
+
* Returns how many faces were rendered. `renderFace` is handed the attachment and the face's
|
|
79
|
+
* view-projection and is expected to open a pass and draw the casters into it — the renderer
|
|
80
|
+
* owns the encoder and the pipelines, so it owns the pass.
|
|
81
|
+
*
|
|
82
|
+
* The scratch matrix is the caller's for the same reason `pointShadowFaceViewProj` takes one:
|
|
83
|
+
* this runs once per face of every bake and `AGENTS.md` allows no allocation there.
|
|
84
|
+
*/
|
|
85
|
+
bake(x: number, y: number, z: number, range: number, renderFace: PointShadowFacePass, resolveFace: PointShadowResolve, scratch: mat4, near?: number, sourceRadius?: number, maxFaces?: number): number;
|
|
86
|
+
/** Nothing to free: every GPU object belongs to `GpuPointShadowArray` now. */
|
|
87
|
+
dispose(): void;
|
|
88
|
+
}
|