@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,114 @@
|
|
|
1
|
+
import { PANEL_BINDINGS, PANEL_FRAG_WGSL, PANEL_VERT_WGSL, } from '../../shaders/generated/panel.wgsl.js';
|
|
2
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
3
|
+
import { shaderModule } from './shaderModules.js';
|
|
4
|
+
/**
|
|
5
|
+
* The panel pass: two triangles in screen space, one colour, one alpha.
|
|
6
|
+
*
|
|
7
|
+
* The plain surface an overlay is read against — what `renderer.ts` says about `fillPanel`
|
|
8
|
+
* applies here unchanged, including why neither `beginInset` nor a plate of glyph cubes can
|
|
9
|
+
* stand in for it.
|
|
10
|
+
*
|
|
11
|
+
* **The corners are a vertex buffer rather than `vertex_index` arithmetic**, because the GLSL
|
|
12
|
+
* is the source of truth and it declares `aCorner`. Six vertices, uploaded once.
|
|
13
|
+
*/
|
|
14
|
+
export const PANEL_VERT_FIELDS = PANEL_BINDINGS.PANEL_VERT.fields;
|
|
15
|
+
export const PANEL_VERT_SIZE = PANEL_BINDINGS.PANEL_VERT.uniformSize;
|
|
16
|
+
export const PANEL_FRAG_FIELDS = PANEL_BINDINGS.PANEL_FRAG.fields;
|
|
17
|
+
export const PANEL_FRAG_SIZE = PANEL_BINDINGS.PANEL_FRAG.uniformSize;
|
|
18
|
+
const VERT_BINDING = PANEL_BINDINGS.PANEL_VERT.uniforms;
|
|
19
|
+
const FRAG_BINDING = PANEL_BINDINGS.PANEL_FRAG.uniforms;
|
|
20
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
21
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
22
|
+
const USAGE_VERTEX = 0x0020 | 0x0008; // VERTEX | COPY_DST
|
|
23
|
+
/** The unit quad, as two triangles. The rect and the viewport turn it into pixels. */
|
|
24
|
+
const CORNERS = new Float32Array([0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1]);
|
|
25
|
+
export const PANEL_VERTEX_COUNT = CORNERS.length / 2;
|
|
26
|
+
export function createPanelCorners(device) {
|
|
27
|
+
const buffer = device.createBuffer({
|
|
28
|
+
label: 'panel.corners',
|
|
29
|
+
size: CORNERS.byteLength,
|
|
30
|
+
usage: USAGE_VERTEX,
|
|
31
|
+
});
|
|
32
|
+
device.queue.writeBuffer(buffer, 0, CORNERS);
|
|
33
|
+
return buffer;
|
|
34
|
+
}
|
|
35
|
+
export function createPanelBindGroupLayout(device) {
|
|
36
|
+
return device.createBindGroupLayout({
|
|
37
|
+
label: 'panel.layout',
|
|
38
|
+
entries: [
|
|
39
|
+
{
|
|
40
|
+
binding: VERT_BINDING,
|
|
41
|
+
visibility: VISIBILITY_VERTEX,
|
|
42
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: PANEL_VERT_SIZE },
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
binding: FRAG_BINDING,
|
|
46
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
47
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: PANEL_FRAG_SIZE },
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Bound once against both rings, and addressed by dynamic offset per panel.
|
|
54
|
+
*
|
|
55
|
+
* **A ring rather than one buffer, because a frame draws more than one.** The loader alone
|
|
56
|
+
* draws a track and a fill, and `queue.writeBuffer` does not interleave with recorded commands
|
|
57
|
+
* — so a single block written twice would give both panels the second colour. That is the bug
|
|
58
|
+
* that left a flame leaning forty degrees in still air, one pass higher up.
|
|
59
|
+
*/
|
|
60
|
+
export function createPanelBindGroup(device, layout, vertices, fragments) {
|
|
61
|
+
return device.createBindGroup({
|
|
62
|
+
label: 'panel.bindGroup',
|
|
63
|
+
layout,
|
|
64
|
+
entries: [
|
|
65
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: PANEL_VERT_SIZE } },
|
|
66
|
+
{ binding: FRAG_BINDING, resource: { buffer: fragments, size: PANEL_FRAG_SIZE } },
|
|
67
|
+
],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The pipeline.
|
|
72
|
+
*
|
|
73
|
+
* **Nothing culled, nothing depth-tested, nothing written to depth.** This is furniture drawn
|
|
74
|
+
* over a finished frame: it must neither be occluded by the scene nor occlude what comes after
|
|
75
|
+
* it. `renderer.ts` disables all three by hand for the same draw, and records that leaving
|
|
76
|
+
* culling on drew nothing at all, silently — a screen-space quad has no meaningful facing.
|
|
77
|
+
*/
|
|
78
|
+
export function panelPipeline(cache, device, layout) {
|
|
79
|
+
return cache.get('panel', () => ({
|
|
80
|
+
label: 'panel',
|
|
81
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
82
|
+
vertex: {
|
|
83
|
+
module: shaderModule(device, { label: 'panel.vert', code: PANEL_VERT_WGSL }),
|
|
84
|
+
entryPoint: 'main',
|
|
85
|
+
buffers: [
|
|
86
|
+
{
|
|
87
|
+
arrayStride: 8,
|
|
88
|
+
attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x2' }],
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
fragment: {
|
|
93
|
+
module: shaderModule(device, { label: 'panel.frag', code: PANEL_FRAG_WGSL }),
|
|
94
|
+
entryPoint: 'main',
|
|
95
|
+
targets: [
|
|
96
|
+
{
|
|
97
|
+
format: cache.format,
|
|
98
|
+
blend: {
|
|
99
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
100
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
106
|
+
multisample: { count: cache.sampleCount },
|
|
107
|
+
/*
|
|
108
|
+
* `always` is how a WebGPU pipeline says what `gl.disable(DEPTH_TEST)` says. The attachment
|
|
109
|
+
* is still declared because the frame's pass has one, and a pipeline that omits it cannot
|
|
110
|
+
* be used in a pass that has one.
|
|
111
|
+
*/
|
|
112
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: 'always' },
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type ParticleMaterial } from '../../particleMaterial.ts';
|
|
2
|
+
import type { ParticleInstances } from '../../particlePool.ts';
|
|
3
|
+
import type { ParticleBlend, ParticleFacing } from '../../particleBatch.ts';
|
|
4
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
5
|
+
import type { UniformFields } from './scatterPass.ts';
|
|
6
|
+
/**
|
|
7
|
+
* The particle pass: a crossed pair of quads per live particle, rebuilt every frame.
|
|
8
|
+
*
|
|
9
|
+
* **The one pass here whose per-instance data changes entirely every frame**, which is what
|
|
10
|
+
* separates it from `scatter`: foliage is placed once and never touched, and a particle system
|
|
11
|
+
* has nothing that survives a tick.
|
|
12
|
+
*/
|
|
13
|
+
export declare const PARTICLE_VERT_FIELDS: UniformFields;
|
|
14
|
+
export declare const PARTICLE_VERT_SIZE: 96;
|
|
15
|
+
/** Each material's own fragment block; the three are very different sizes. */
|
|
16
|
+
export declare function particleFragBindings(material: ParticleMaterial): {
|
|
17
|
+
fields: UniformFields;
|
|
18
|
+
size: number;
|
|
19
|
+
};
|
|
20
|
+
export declare function particleVertexLayouts(): GPUVertexBufferLayout[];
|
|
21
|
+
/** A particle pool on the device, behind the surface's opaque handle. */
|
|
22
|
+
export interface GpuParticles {
|
|
23
|
+
readonly corners: GPUBuffer;
|
|
24
|
+
readonly instances: GPUBuffer;
|
|
25
|
+
readonly indexBuffer: GPUBuffer;
|
|
26
|
+
readonly capacity: number;
|
|
27
|
+
readonly material: ParticleMaterial;
|
|
28
|
+
readonly blend: ParticleBlend;
|
|
29
|
+
readonly stretchSec: number;
|
|
30
|
+
/** One camera-facing quad, or the world-fixed cross. See `ParticleBatchOptions.facing`. */
|
|
31
|
+
readonly facing: ParticleFacing;
|
|
32
|
+
readonly erosion: number;
|
|
33
|
+
readonly coreGain: number;
|
|
34
|
+
/** Whether the mote fragment stage mixes toward the medium. Ignored by the other materials. */
|
|
35
|
+
readonly fog: boolean;
|
|
36
|
+
/** Reused every frame; see `packInstances`. */
|
|
37
|
+
readonly staging: Float32Array;
|
|
38
|
+
/**
|
|
39
|
+
* This batch's own uniform buffers, staging and bind group — never shared with another
|
|
40
|
+
* batch of the same material. See the note on `createGpuParticles` for why: two pools of one
|
|
41
|
+
* material legitimately want different `fog`/`erosion`/`coreGain`, and a buffer shared
|
|
42
|
+
* between them would let one draw's `writeBuffer` overwrite what the other's draw call reads.
|
|
43
|
+
*/
|
|
44
|
+
readonly vertUniforms: GPUBuffer;
|
|
45
|
+
readonly fragUniforms: GPUBuffer;
|
|
46
|
+
readonly vertStaging: ArrayBuffer;
|
|
47
|
+
readonly vertFloats: Float32Array;
|
|
48
|
+
readonly fragStaging: ArrayBuffer;
|
|
49
|
+
readonly fragFloats: Float32Array;
|
|
50
|
+
readonly fragInts: Int32Array;
|
|
51
|
+
readonly fields: UniformFields;
|
|
52
|
+
readonly bindGroup: GPUBindGroup;
|
|
53
|
+
dispose(): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* **Every batch gets its own uniform buffers and bind group, not one shared per material.**
|
|
57
|
+
*
|
|
58
|
+
* They used to be shared, cached once per material and reused by every batch that named it —
|
|
59
|
+
* fine on WebGL2, where `gl.uniform*` and `gl.draw*` run synchronously in call order, so a
|
|
60
|
+
* shared uniform location always holds the value the draw right after it wrote. WebGPU's
|
|
61
|
+
* queue has no such guarantee across *two draws in one frame*: every `drawParticles` call here
|
|
62
|
+
* records into the same open encoder and calls `device.queue.writeBuffer` immediately, but the
|
|
63
|
+
* encoder is not submitted until `endFrame`, so every `writeBuffer` targeting one shared buffer
|
|
64
|
+
* completes before the submitted command buffer runs at all — by the time any of that buffer's
|
|
65
|
+
* draws execute on the GPU, the buffer holds only the *last* JS-side write, not the value each
|
|
66
|
+
* draw call thought it was setting. Two `'mote'` batches in one frame — a near field left
|
|
67
|
+
* `fog` unset and a far one at `{ fog: true }`, exactly what this material exists to let a
|
|
68
|
+
* caller ask for — drew identically, both taking whichever batch's uniforms happened to be
|
|
69
|
+
* written last. `layout` still comes from the caller and is shared per material: it is
|
|
70
|
+
* structural, not data, so nothing about sharing it can go stale mid-frame.
|
|
71
|
+
*/
|
|
72
|
+
export declare function createGpuParticles(device: GPUDevice, capacity: number, material: ParticleMaterial, blend: ParticleBlend, stretchSec: number, facing: ParticleFacing, erosion: number, coreGain: number, fog: boolean, layout: GPUBindGroupLayout, fragFields: UniformFields, fragSize: number): GpuParticles;
|
|
73
|
+
/**
|
|
74
|
+
* Interleave the live prefix of eight streams into the batch's own staging array.
|
|
75
|
+
*
|
|
76
|
+
* Only `data.count` particles, which is what the pool's compaction guarantees is live, and
|
|
77
|
+
* into an array allocated with the batch — the frame loop may not allocate.
|
|
78
|
+
*/
|
|
79
|
+
export declare function packInstances(batch: GpuParticles, data: ParticleInstances): number;
|
|
80
|
+
export declare function createParticleBindGroupLayout(device: GPUDevice, fragSize: number): GPUBindGroupLayout;
|
|
81
|
+
export declare function createParticleBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, perDraw: GPUBuffer, perFrame: GPUBuffer, fragSize: number): GPUBindGroup;
|
|
82
|
+
/**
|
|
83
|
+
* The pipeline for one material and blend.
|
|
84
|
+
*
|
|
85
|
+
* **Neither material writes depth**, which `particleBatch.ts` explains: a soft particle that
|
|
86
|
+
* did would punch a hole in everything drawn after it. Additive for sparks, over for smoke,
|
|
87
|
+
* the same pairing the plume pass makes.
|
|
88
|
+
*/
|
|
89
|
+
export declare function particlePipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, material: ParticleMaterial, blend: ParticleBlend): GPURenderPipeline;
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { particleShaders } from '../../particleMaterial.js';
|
|
3
|
+
import { PARTICLE_BINDINGS } from '../../shaders/generated/particle.wgsl.js';
|
|
4
|
+
import { PARTICLE_BLADES, PARTICLE_INDICES, PARTICLE_VERTS } from '../../shaders/particle.js';
|
|
5
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
6
|
+
import { shaderModule } from './shaderModules.js';
|
|
7
|
+
/**
|
|
8
|
+
* The particle pass: a crossed pair of quads per live particle, rebuilt every frame.
|
|
9
|
+
*
|
|
10
|
+
* **The one pass here whose per-instance data changes entirely every frame**, which is what
|
|
11
|
+
* separates it from `scatter`: foliage is placed once and never touched, and a particle system
|
|
12
|
+
* has nothing that survives a tick.
|
|
13
|
+
*/
|
|
14
|
+
export const PARTICLE_VERT_FIELDS = PARTICLE_BINDINGS.PARTICLE_VERT.fields;
|
|
15
|
+
export const PARTICLE_VERT_SIZE = PARTICLE_BINDINGS.PARTICLE_VERT.uniformSize;
|
|
16
|
+
const VERT_BINDING = PARTICLE_BINDINGS.PARTICLE_VERT.uniforms;
|
|
17
|
+
const FRAG_BINDING = PARTICLE_BINDINGS.PARTICLE_SMOKE_FRAG.uniforms;
|
|
18
|
+
/** Each material's own fragment block; the three are very different sizes. */
|
|
19
|
+
export function particleFragBindings(material) {
|
|
20
|
+
const stage = material === 'spark'
|
|
21
|
+
? PARTICLE_BINDINGS.PARTICLE_SPARK_FRAG
|
|
22
|
+
: material === 'mote'
|
|
23
|
+
? PARTICLE_BINDINGS.PARTICLE_MOTE_FRAG
|
|
24
|
+
: PARTICLE_BINDINGS.PARTICLE_SMOKE_FRAG;
|
|
25
|
+
return { fields: stage.fields, size: stage.uniformSize };
|
|
26
|
+
}
|
|
27
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
28
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
29
|
+
const USAGE_VERTEX = 0x0020 | 0x0008;
|
|
30
|
+
const USAGE_INDEX = 0x0010 | 0x0008;
|
|
31
|
+
const USAGE_UNIFORM_DST = 0x0040 | 0x0008;
|
|
32
|
+
/**
|
|
33
|
+
* Ten attributes and eight slots, so the per-instance eight share one buffer.
|
|
34
|
+
*
|
|
35
|
+
* **`maxVertexBuffers` is eight and this shader declares ten inputs**, so something has to
|
|
36
|
+
* interleave. The per-instance streams are the ones that do: the engine holds them as eight
|
|
37
|
+
* separate arrays and they are packed into one interleaved buffer per frame, which is a copy
|
|
38
|
+
* the upload was already paying per stream rather than new work.
|
|
39
|
+
*
|
|
40
|
+
* Floats per instance, in the order they are packed: position 3, size 1, spin 1, colour 3,
|
|
41
|
+
* alpha 1, age 1, seed 1, velocity 3.
|
|
42
|
+
*/
|
|
43
|
+
const INSTANCE_FLOATS = 14;
|
|
44
|
+
const INSTANCE_ATTRIBUTES = [
|
|
45
|
+
{ shaderLocation: 2, offset: 0, format: 'float32x3' },
|
|
46
|
+
{ shaderLocation: 3, offset: 12, format: 'float32' },
|
|
47
|
+
{ shaderLocation: 4, offset: 16, format: 'float32' },
|
|
48
|
+
{ shaderLocation: 5, offset: 20, format: 'float32x3' },
|
|
49
|
+
{ shaderLocation: 6, offset: 32, format: 'float32' },
|
|
50
|
+
{ shaderLocation: 7, offset: 36, format: 'float32' },
|
|
51
|
+
{ shaderLocation: 8, offset: 40, format: 'float32' },
|
|
52
|
+
{ shaderLocation: 9, offset: 44, format: 'float32x3' },
|
|
53
|
+
];
|
|
54
|
+
export function particleVertexLayouts() {
|
|
55
|
+
return [
|
|
56
|
+
{
|
|
57
|
+
/* The cross itself: two floats of corner and one of blade index, built once. */
|
|
58
|
+
arrayStride: 12,
|
|
59
|
+
stepMode: 'vertex',
|
|
60
|
+
attributes: [
|
|
61
|
+
{ shaderLocation: 0, offset: 0, format: 'float32x2' },
|
|
62
|
+
{ shaderLocation: 1, offset: 8, format: 'float32' },
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
arrayStride: INSTANCE_FLOATS * 4,
|
|
67
|
+
stepMode: 'instance',
|
|
68
|
+
attributes: INSTANCE_ATTRIBUTES,
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* **Every batch gets its own uniform buffers and bind group, not one shared per material.**
|
|
74
|
+
*
|
|
75
|
+
* They used to be shared, cached once per material and reused by every batch that named it —
|
|
76
|
+
* fine on WebGL2, where `gl.uniform*` and `gl.draw*` run synchronously in call order, so a
|
|
77
|
+
* shared uniform location always holds the value the draw right after it wrote. WebGPU's
|
|
78
|
+
* queue has no such guarantee across *two draws in one frame*: every `drawParticles` call here
|
|
79
|
+
* records into the same open encoder and calls `device.queue.writeBuffer` immediately, but the
|
|
80
|
+
* encoder is not submitted until `endFrame`, so every `writeBuffer` targeting one shared buffer
|
|
81
|
+
* completes before the submitted command buffer runs at all — by the time any of that buffer's
|
|
82
|
+
* draws execute on the GPU, the buffer holds only the *last* JS-side write, not the value each
|
|
83
|
+
* draw call thought it was setting. Two `'mote'` batches in one frame — a near field left
|
|
84
|
+
* `fog` unset and a far one at `{ fog: true }`, exactly what this material exists to let a
|
|
85
|
+
* caller ask for — drew identically, both taking whichever batch's uniforms happened to be
|
|
86
|
+
* written last. `layout` still comes from the caller and is shared per material: it is
|
|
87
|
+
* structural, not data, so nothing about sharing it can go stale mid-frame.
|
|
88
|
+
*/
|
|
89
|
+
export function createGpuParticles(device, capacity, material, blend, stretchSec, facing, erosion, coreGain, fog, layout, fragFields, fragSize) {
|
|
90
|
+
/* The cross, built once: two blades of four corners, interleaved with the blade index. */
|
|
91
|
+
const corners = new Float32Array(PARTICLE_VERTS * 3);
|
|
92
|
+
const CORNERS = [
|
|
93
|
+
[-1, -1],
|
|
94
|
+
[1, -1],
|
|
95
|
+
[1, 1],
|
|
96
|
+
[-1, 1],
|
|
97
|
+
];
|
|
98
|
+
const indices = new Uint32Array(PARTICLE_INDICES);
|
|
99
|
+
for (let b = 0; b < PARTICLE_BLADES; b++) {
|
|
100
|
+
for (let c = 0; c < 4; c++) {
|
|
101
|
+
const v = b * 4 + c;
|
|
102
|
+
const corner = CORNERS[c];
|
|
103
|
+
corners[v * 3] = corner[0];
|
|
104
|
+
corners[v * 3 + 1] = corner[1];
|
|
105
|
+
corners[v * 3 + 2] = b;
|
|
106
|
+
}
|
|
107
|
+
const base = b * 4;
|
|
108
|
+
const i = b * 6;
|
|
109
|
+
indices[i] = base;
|
|
110
|
+
indices[i + 1] = base + 1;
|
|
111
|
+
indices[i + 2] = base + 2;
|
|
112
|
+
indices[i + 3] = base;
|
|
113
|
+
indices[i + 4] = base + 2;
|
|
114
|
+
indices[i + 5] = base + 3;
|
|
115
|
+
}
|
|
116
|
+
const cornerBuffer = device.createBuffer({
|
|
117
|
+
label: 'particle.corners',
|
|
118
|
+
size: corners.byteLength,
|
|
119
|
+
usage: USAGE_VERTEX,
|
|
120
|
+
});
|
|
121
|
+
device.queue.writeBuffer(cornerBuffer, 0, corners);
|
|
122
|
+
const instances = device.createBuffer({
|
|
123
|
+
label: 'particle.instances',
|
|
124
|
+
size: Math.max(4, capacity * INSTANCE_FLOATS * 4),
|
|
125
|
+
usage: USAGE_VERTEX,
|
|
126
|
+
});
|
|
127
|
+
const indexBuffer = device.createBuffer({
|
|
128
|
+
label: 'particle.indices',
|
|
129
|
+
size: indices.byteLength,
|
|
130
|
+
usage: USAGE_INDEX,
|
|
131
|
+
});
|
|
132
|
+
device.queue.writeBuffer(indexBuffer, 0, indices);
|
|
133
|
+
/* This batch's own uniform buffers and bind group — see the doc comment above for why they
|
|
134
|
+
may not be shared with any other batch, including another one of the same material. */
|
|
135
|
+
const vertUniforms = device.createBuffer({
|
|
136
|
+
label: `particle.vert:${material}`,
|
|
137
|
+
size: PARTICLE_VERT_SIZE,
|
|
138
|
+
usage: USAGE_UNIFORM_DST,
|
|
139
|
+
});
|
|
140
|
+
const fragUniforms = device.createBuffer({
|
|
141
|
+
label: `particle.frag:${material}`,
|
|
142
|
+
size: fragSize,
|
|
143
|
+
usage: USAGE_UNIFORM_DST,
|
|
144
|
+
});
|
|
145
|
+
const vertStaging = new ArrayBuffer(PARTICLE_VERT_SIZE);
|
|
146
|
+
const fragStaging = new ArrayBuffer(fragSize);
|
|
147
|
+
return {
|
|
148
|
+
corners: cornerBuffer,
|
|
149
|
+
instances,
|
|
150
|
+
indexBuffer,
|
|
151
|
+
capacity,
|
|
152
|
+
material,
|
|
153
|
+
blend,
|
|
154
|
+
stretchSec,
|
|
155
|
+
facing,
|
|
156
|
+
erosion,
|
|
157
|
+
coreGain,
|
|
158
|
+
fog,
|
|
159
|
+
staging: new Float32Array(capacity * INSTANCE_FLOATS),
|
|
160
|
+
vertUniforms,
|
|
161
|
+
fragUniforms,
|
|
162
|
+
vertStaging,
|
|
163
|
+
vertFloats: new Float32Array(vertStaging),
|
|
164
|
+
fragStaging,
|
|
165
|
+
fragFloats: new Float32Array(fragStaging),
|
|
166
|
+
fragInts: new Int32Array(fragStaging),
|
|
167
|
+
fields: fragFields,
|
|
168
|
+
bindGroup: createParticleBindGroup(device, layout, vertUniforms, fragUniforms, fragSize),
|
|
169
|
+
dispose() {
|
|
170
|
+
cornerBuffer.destroy();
|
|
171
|
+
instances.destroy();
|
|
172
|
+
indexBuffer.destroy();
|
|
173
|
+
vertUniforms.destroy();
|
|
174
|
+
fragUniforms.destroy();
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Interleave the live prefix of eight streams into the batch's own staging array.
|
|
180
|
+
*
|
|
181
|
+
* Only `data.count` particles, which is what the pool's compaction guarantees is live, and
|
|
182
|
+
* into an array allocated with the batch — the frame loop may not allocate.
|
|
183
|
+
*/
|
|
184
|
+
export function packInstances(batch, data) {
|
|
185
|
+
const n = Math.min(data.count, batch.capacity);
|
|
186
|
+
const out = batch.staging;
|
|
187
|
+
for (let i = 0; i < n; i++) {
|
|
188
|
+
const o = i * INSTANCE_FLOATS;
|
|
189
|
+
const p = i * 3;
|
|
190
|
+
out[o] = data.positions[p];
|
|
191
|
+
out[o + 1] = data.positions[p + 1];
|
|
192
|
+
out[o + 2] = data.positions[p + 2];
|
|
193
|
+
out[o + 3] = data.sizes[i];
|
|
194
|
+
out[o + 4] = data.spins[i];
|
|
195
|
+
out[o + 5] = data.colors[p];
|
|
196
|
+
out[o + 6] = data.colors[p + 1];
|
|
197
|
+
out[o + 7] = data.colors[p + 2];
|
|
198
|
+
out[o + 8] = data.alphas[i];
|
|
199
|
+
out[o + 9] = data.ages[i];
|
|
200
|
+
out[o + 10] = data.seeds[i];
|
|
201
|
+
out[o + 11] = data.velocities[p];
|
|
202
|
+
out[o + 12] = data.velocities[p + 1];
|
|
203
|
+
out[o + 13] = data.velocities[p + 2];
|
|
204
|
+
}
|
|
205
|
+
return n;
|
|
206
|
+
}
|
|
207
|
+
export function createParticleBindGroupLayout(device, fragSize) {
|
|
208
|
+
return device.createBindGroupLayout({
|
|
209
|
+
label: 'particle.layout',
|
|
210
|
+
entries: [
|
|
211
|
+
{
|
|
212
|
+
binding: VERT_BINDING,
|
|
213
|
+
visibility: VISIBILITY_VERTEX,
|
|
214
|
+
buffer: { type: 'uniform', minBindingSize: PARTICLE_VERT_SIZE },
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
binding: FRAG_BINDING,
|
|
218
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
219
|
+
buffer: { type: 'uniform', minBindingSize: fragSize },
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
export function createParticleBindGroup(device, layout, perDraw, perFrame, fragSize) {
|
|
225
|
+
return device.createBindGroup({
|
|
226
|
+
label: 'particle.bindGroup',
|
|
227
|
+
layout,
|
|
228
|
+
entries: [
|
|
229
|
+
{ binding: VERT_BINDING, resource: { buffer: perDraw, size: PARTICLE_VERT_SIZE } },
|
|
230
|
+
{ binding: FRAG_BINDING, resource: { buffer: perFrame, size: fragSize } },
|
|
231
|
+
],
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* The pipeline for one material and blend.
|
|
236
|
+
*
|
|
237
|
+
* **Neither material writes depth**, which `particleBatch.ts` explains: a soft particle that
|
|
238
|
+
* did would punch a hole in everything drawn after it. Additive for sparks, over for smoke,
|
|
239
|
+
* the same pairing the plume pass makes.
|
|
240
|
+
*/
|
|
241
|
+
export function particlePipeline(cache, device, layout, material, blend) {
|
|
242
|
+
const shaders = particleShaders(material);
|
|
243
|
+
return cache.get(`particle:${material}:${blend}`, () => ({
|
|
244
|
+
label: `particle:${material}`,
|
|
245
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
246
|
+
vertex: {
|
|
247
|
+
module: shaderModule(device, { label: 'particle.vert', code: shaders.vertexWgsl }),
|
|
248
|
+
entryPoint: 'main',
|
|
249
|
+
buffers: particleVertexLayouts(),
|
|
250
|
+
},
|
|
251
|
+
fragment: {
|
|
252
|
+
module: shaderModule(device, {
|
|
253
|
+
label: `particle.frag:${material}`,
|
|
254
|
+
code: shaders.fragmentWgsl,
|
|
255
|
+
}),
|
|
256
|
+
entryPoint: 'main',
|
|
257
|
+
targets: [
|
|
258
|
+
{
|
|
259
|
+
format: cache.format,
|
|
260
|
+
blend: blend === 'additive'
|
|
261
|
+
? {
|
|
262
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one', operation: 'add' },
|
|
263
|
+
alpha: { srcFactor: 'zero', dstFactor: 'one', operation: 'add' },
|
|
264
|
+
}
|
|
265
|
+
: {
|
|
266
|
+
color: {
|
|
267
|
+
srcFactor: 'src-alpha',
|
|
268
|
+
dstFactor: 'one-minus-src-alpha',
|
|
269
|
+
operation: 'add',
|
|
270
|
+
},
|
|
271
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
],
|
|
275
|
+
},
|
|
276
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
277
|
+
multisample: { count: cache.sampleCount },
|
|
278
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
279
|
+
}));
|
|
280
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
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 declare 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
|
+
readonly format: GPUTextureFormat;
|
|
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
|
+
readonly sampleCount: number;
|
|
35
|
+
private readonly device;
|
|
36
|
+
private readonly pipelines;
|
|
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
|
+
private readonly compiling;
|
|
52
|
+
constructor(device: GPUDevice, format: GPUTextureFormat, sampleCount?: number);
|
|
53
|
+
/** How many distinct pipelines have been built. Read by tests and diagnostics. */
|
|
54
|
+
get size(): number;
|
|
55
|
+
/**
|
|
56
|
+
* The pipeline for this key, compiled off the main thread.
|
|
57
|
+
*
|
|
58
|
+
* Preferred wherever the caller is not inside a frame, which `get`'s own contract says is
|
|
59
|
+
* everywhere: pipelines are built once per distinct state at construction time. The
|
|
60
|
+
* difference is only *when* the driver does the work, and that difference is the whole bug
|
|
61
|
+
* this exists for.
|
|
62
|
+
*/
|
|
63
|
+
getAsync(key: string, describe: () => GPURenderPipelineDescriptor): Promise<GPURenderPipeline>;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve once every pipeline asked for so far has finished compiling.
|
|
66
|
+
*
|
|
67
|
+
* A renderer awaits this before its first frame, which is what moves the compile out of the
|
|
68
|
+
* queue and in front of it. A failure is not rethrown: a pipeline that cannot be built will
|
|
69
|
+
* fail again, loudly, at the draw that needs it, and taking the whole boot down here would
|
|
70
|
+
* turn one broken material into a blank page.
|
|
71
|
+
*/
|
|
72
|
+
ready(): Promise<void>;
|
|
73
|
+
/** The pipeline for this key if it is already built, without building one. */
|
|
74
|
+
peek(key: string): GPURenderPipeline | undefined;
|
|
75
|
+
/** How many are still compiling. Read by tests and diagnostics. */
|
|
76
|
+
get compilingCount(): number;
|
|
77
|
+
/**
|
|
78
|
+
* The pipeline for this key, building it on the first ask only.
|
|
79
|
+
*
|
|
80
|
+
* `describe` is a callback rather than a value because **building the descriptor allocates
|
|
81
|
+
* too**: a nested object with vertex buffer layouts and blend state, constructed to be
|
|
82
|
+
* thrown away on every hit. Passing a function means a hit costs one `Map` lookup.
|
|
83
|
+
*/
|
|
84
|
+
get(key: string, describe: () => GPURenderPipelineDescriptor): GPURenderPipeline;
|
|
85
|
+
/**
|
|
86
|
+
* Drop every pipeline.
|
|
87
|
+
*
|
|
88
|
+
* WebGPU has no explicit pipeline release — they are freed when nothing references them —
|
|
89
|
+
* so this is about not handing out pipelines belonging to a destroyed device rather than
|
|
90
|
+
* about reclaiming memory here and now.
|
|
91
|
+
*/
|
|
92
|
+
dispose(): void;
|
|
93
|
+
}
|