@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,70 @@
|
|
|
1
|
+
import type { RenderBackend } from './api.ts';
|
|
2
|
+
/** What was chosen, what it was chosen with, and why. */
|
|
3
|
+
export interface BackendChoice {
|
|
4
|
+
readonly backend: RenderBackend;
|
|
5
|
+
/**
|
|
6
|
+
* A live device, held only when `backend` is `webgpu`.
|
|
7
|
+
*
|
|
8
|
+
* Returned rather than re-requested by the caller, because an adapter request is the
|
|
9
|
+
* expensive part and asking twice can legitimately give a different answer.
|
|
10
|
+
*/
|
|
11
|
+
readonly device: GPUDevice | null;
|
|
12
|
+
/**
|
|
13
|
+
* What the adapter calls this part, or null where nothing was asked.
|
|
14
|
+
*
|
|
15
|
+
* The WebGPU counterpart of `UNMASKED_RENDERER_WEBGL`, and the reason the capability clamp
|
|
16
|
+
* can fire on this backend at all: `isWeakGpuFamily` matches on a part number, and this
|
|
17
|
+
* backend used to hand it the literal string `WebGPU`.
|
|
18
|
+
*/
|
|
19
|
+
readonly rendererName: string | null;
|
|
20
|
+
/** Why this backend, in words a bug report can carry. */
|
|
21
|
+
readonly reason: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A backend named in the address, or null.
|
|
25
|
+
*
|
|
26
|
+
* **Honoured in every build rather than behind a development flag.** A fallback that can
|
|
27
|
+
* only be reached by owning the wrong device is a fallback nobody tests, and the failure
|
|
28
|
+
* that produces is a black screen for somebody who cannot be asked to help diagnose it.
|
|
29
|
+
*
|
|
30
|
+
* An unrecognised value is *no request* rather than a default, and the strictness is the
|
|
31
|
+
* point: `?backend=WebGPU` silently selecting WebGL2 is somebody testing the path they
|
|
32
|
+
* meant to avoid and drawing a confident conclusion from it.
|
|
33
|
+
*/
|
|
34
|
+
export declare function forcedBackend(search: string): RenderBackend | null;
|
|
35
|
+
/**
|
|
36
|
+
* Decide which backend to build, and prove it by holding a device.
|
|
37
|
+
*
|
|
38
|
+
* **The probe is the whole of the decision.** The presence of `navigator.gpu` is not proof
|
|
39
|
+
* of a working device: a supported browser refuses adapters for blocklisted drivers,
|
|
40
|
+
* headless contexts and low-power states, and a device request can fail after an adapter
|
|
41
|
+
* succeeds. So nothing is reported as WebGPU until an adapter *and* a device have both been
|
|
42
|
+
* handed over, and every other path falls back with a reason attached.
|
|
43
|
+
*
|
|
44
|
+
* Nothing here throws. A failure to get WebGPU is an ordinary outcome on most devices in
|
|
45
|
+
* the world, not an error, and treating it as one would put a try/catch in every consumer's
|
|
46
|
+
* boot for a case that is expected.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* How long the whole WebGPU acquisition may take before this answers WebGL2 instead.
|
|
50
|
+
*
|
|
51
|
+
* **Because a preference that cannot fall back is not a preference.** Every refusal below is a
|
|
52
|
+
* refusal somebody receives: an adapter that answers null, a device request that throws, a device
|
|
53
|
+
* that cannot draw. A request that simply never settles is none of those, and it has no floor under
|
|
54
|
+
* it — the boot stops at the `await`, nothing throws, nothing is logged, and what a player gets is
|
|
55
|
+
* the window the game was going to be drawn in. Reported from outside exactly that way, on a driver
|
|
56
|
+
* and compositor where the adapter is offered and the acquisition never returns.
|
|
57
|
+
*
|
|
58
|
+
* **Eight seconds, against 153 ms measured.** On this repository's machine the whole acquisition —
|
|
59
|
+
* adapter, device at the adapter's own ceilings, and the one-pixel draw and readback that proves it
|
|
60
|
+
* works — takes 153 ms warm, against 36 ms for the WebGL2 path it would fall back to. Eight seconds
|
|
61
|
+
* is fifty times that, which leaves room for a cold shader cache on a slower part while still being
|
|
62
|
+
* inside what a person will wait through. Past it, WebGL2 is not a downgrade so much as the only
|
|
63
|
+
* backend that is going to draw anything.
|
|
64
|
+
*/
|
|
65
|
+
export declare const BACKEND_TIMEOUT_MS = 8000;
|
|
66
|
+
/**
|
|
67
|
+
* @param timeoutMs How long the WebGPU path may take before WebGL2 is answered instead.
|
|
68
|
+
* `Infinity` waits forever, which is what this did before the deadline existed.
|
|
69
|
+
*/
|
|
70
|
+
export declare function selectBackend(search: string, preferWebGpu: boolean, wantsGpuTiming?: boolean, shaders?: readonly string[], timeoutMs?: number): Promise<BackendChoice>;
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { probeDevice } from './probe.js';
|
|
2
|
+
import { TIMED_OUT, withDeadline } from './deadline.js';
|
|
3
|
+
import { adapterRendererName } from '../gpuCapability.js';
|
|
4
|
+
/**
|
|
5
|
+
* A backend named in the address, or null.
|
|
6
|
+
*
|
|
7
|
+
* **Honoured in every build rather than behind a development flag.** A fallback that can
|
|
8
|
+
* only be reached by owning the wrong device is a fallback nobody tests, and the failure
|
|
9
|
+
* that produces is a black screen for somebody who cannot be asked to help diagnose it.
|
|
10
|
+
*
|
|
11
|
+
* An unrecognised value is *no request* rather than a default, and the strictness is the
|
|
12
|
+
* point: `?backend=WebGPU` silently selecting WebGL2 is somebody testing the path they
|
|
13
|
+
* meant to avoid and drawing a confident conclusion from it.
|
|
14
|
+
*/
|
|
15
|
+
export function forcedBackend(search) {
|
|
16
|
+
const value = new URLSearchParams(search).get('backend');
|
|
17
|
+
return value === 'webgl2' || value === 'webgpu' ? value : null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Decide which backend to build, and prove it by holding a device.
|
|
21
|
+
*
|
|
22
|
+
* **The probe is the whole of the decision.** The presence of `navigator.gpu` is not proof
|
|
23
|
+
* of a working device: a supported browser refuses adapters for blocklisted drivers,
|
|
24
|
+
* headless contexts and low-power states, and a device request can fail after an adapter
|
|
25
|
+
* succeeds. So nothing is reported as WebGPU until an adapter *and* a device have both been
|
|
26
|
+
* handed over, and every other path falls back with a reason attached.
|
|
27
|
+
*
|
|
28
|
+
* Nothing here throws. A failure to get WebGPU is an ordinary outcome on most devices in
|
|
29
|
+
* the world, not an error, and treating it as one would put a try/catch in every consumer's
|
|
30
|
+
* boot for a case that is expected.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* How long the whole WebGPU acquisition may take before this answers WebGL2 instead.
|
|
34
|
+
*
|
|
35
|
+
* **Because a preference that cannot fall back is not a preference.** Every refusal below is a
|
|
36
|
+
* refusal somebody receives: an adapter that answers null, a device request that throws, a device
|
|
37
|
+
* that cannot draw. A request that simply never settles is none of those, and it has no floor under
|
|
38
|
+
* it — the boot stops at the `await`, nothing throws, nothing is logged, and what a player gets is
|
|
39
|
+
* the window the game was going to be drawn in. Reported from outside exactly that way, on a driver
|
|
40
|
+
* and compositor where the adapter is offered and the acquisition never returns.
|
|
41
|
+
*
|
|
42
|
+
* **Eight seconds, against 153 ms measured.** On this repository's machine the whole acquisition —
|
|
43
|
+
* adapter, device at the adapter's own ceilings, and the one-pixel draw and readback that proves it
|
|
44
|
+
* works — takes 153 ms warm, against 36 ms for the WebGL2 path it would fall back to. Eight seconds
|
|
45
|
+
* is fifty times that, which leaves room for a cold shader cache on a slower part while still being
|
|
46
|
+
* inside what a person will wait through. Past it, WebGL2 is not a downgrade so much as the only
|
|
47
|
+
* backend that is going to draw anything.
|
|
48
|
+
*/
|
|
49
|
+
export const BACKEND_TIMEOUT_MS = 8_000;
|
|
50
|
+
/**
|
|
51
|
+
* @param timeoutMs How long the WebGPU path may take before WebGL2 is answered instead.
|
|
52
|
+
* `Infinity` waits forever, which is what this did before the deadline existed.
|
|
53
|
+
*/
|
|
54
|
+
export async function selectBackend(search, preferWebGpu, wantsGpuTiming = false, shaders = [], timeoutMs = BACKEND_TIMEOUT_MS) {
|
|
55
|
+
const forced = forcedBackend(search);
|
|
56
|
+
if (forced === 'webgl2') {
|
|
57
|
+
return {
|
|
58
|
+
backend: 'webgl2',
|
|
59
|
+
device: null,
|
|
60
|
+
rendererName: null,
|
|
61
|
+
reason: 'forced by ?backend=webgl2',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const wanted = forced === 'webgpu' || preferWebGpu;
|
|
65
|
+
if (!wanted)
|
|
66
|
+
return { backend: 'webgl2', device: null, rendererName: null, reason: 'WebGPU not requested' };
|
|
67
|
+
const gpu = globalThis.navigator?.gpu;
|
|
68
|
+
if (gpu === undefined || gpu === null) {
|
|
69
|
+
return {
|
|
70
|
+
backend: 'webgl2',
|
|
71
|
+
device: null,
|
|
72
|
+
rendererName: null,
|
|
73
|
+
reason: 'WebGPU not supported here',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/*
|
|
77
|
+
* **What it was doing when it stopped, kept as a word.** A stalled boot in a packaged artifact has
|
|
78
|
+
* no developer tools behind it and no stack anybody can quote, and the only question worth
|
|
79
|
+
* answering is which of the three awaits it is sitting in. The reason string carries that instead
|
|
80
|
+
* of asking for a reproduction under a debugger.
|
|
81
|
+
*/
|
|
82
|
+
const stage = { at: 'requesting an adapter' };
|
|
83
|
+
const acquisition = acquireWebGpu(gpu, wantsGpuTiming, shaders, stage);
|
|
84
|
+
const settled = await withDeadline(acquisition, timeoutMs);
|
|
85
|
+
if (settled !== TIMED_OUT)
|
|
86
|
+
return settled;
|
|
87
|
+
/*
|
|
88
|
+
* **The abandoned request is still running, and it may still produce a device.** Nothing else
|
|
89
|
+
* will free one that arrives after this point, so it is destroyed on arrival rather than left to
|
|
90
|
+
* hold a GPU allocation for the life of the process. The rejection is swallowed for the same
|
|
91
|
+
* reason it is swallowed below: this path has already answered.
|
|
92
|
+
*/
|
|
93
|
+
void acquisition.then((late) => late.device?.destroy()).catch(() => { });
|
|
94
|
+
return {
|
|
95
|
+
backend: 'webgl2',
|
|
96
|
+
device: null,
|
|
97
|
+
rendererName: null,
|
|
98
|
+
reason: `WebGPU stalled while ${stage.at}, fell back after ${timeoutMs} ms`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/** Adapter, device and the draw that proves it works, or the reason none of that happened. */
|
|
102
|
+
async function acquireWebGpu(gpu, wantsGpuTiming, shaders, stage) {
|
|
103
|
+
try {
|
|
104
|
+
const adapter = await gpu.requestAdapter();
|
|
105
|
+
if (adapter === null) {
|
|
106
|
+
return {
|
|
107
|
+
backend: 'webgl2',
|
|
108
|
+
device: null,
|
|
109
|
+
rendererName: null,
|
|
110
|
+
reason: 'no WebGPU adapter offered',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/*
|
|
114
|
+
* **Ask for the sampled-texture limit the flat shader actually needs.**
|
|
115
|
+
*
|
|
116
|
+
* A device defaults to `maxSampledTexturesPerShaderStage: 16`, and the widest permutation
|
|
117
|
+
* of the flat shader declares **seventeen**: one albedo, three directional shadow maps,
|
|
118
|
+
* twelve point-shadow cubes and the environment probe. Creating the bind group layout for
|
|
119
|
+
* it is rejected outright — *"The number of sampled textures (17) in the Fragment stage
|
|
120
|
+
* exceeds the maximum per-stage limit (16)"* — and because that failure lands on a
|
|
121
|
+
* *pipeline*, the frame goes on drawing everything else and says nothing beyond a device
|
|
122
|
+
* warning.
|
|
123
|
+
*
|
|
124
|
+
* Clamped to what the adapter actually offers rather than demanded, and a request that
|
|
125
|
+
* cannot be met is a fallback to WebGL2 rather than a throw: this machine's adapter reports
|
|
126
|
+
* 48, and one that reports 16 is a machine whose widest profile genuinely will not fit.
|
|
127
|
+
*/
|
|
128
|
+
/*
|
|
129
|
+
* **Ask for as much binding room as the adapter will give, and never more.**
|
|
130
|
+
*
|
|
131
|
+
* A device defaults to 16 sampled textures and 16 samplers per stage, and the widest
|
|
132
|
+
* permutation of the flat shader declares **seventeen** of each: one albedo, three
|
|
133
|
+
* directional shadow maps, twelve point-shadow cubes and the environment probe. The default
|
|
134
|
+
* rejects the bind group layout outright, and because that lands on a *pipeline* the frame
|
|
135
|
+
* carries on drawing everything else and says nothing but a device warning.
|
|
136
|
+
*
|
|
137
|
+
* **Two limits, and the second only appears once the first is raised.** They are counted
|
|
138
|
+
* separately: raising the textures alone moved the message from "the number of sampled
|
|
139
|
+
* textures (17)" to "the number of samplers (17)" and changed nothing else.
|
|
140
|
+
*
|
|
141
|
+
* **Requested at the adapter's own ceiling rather than at a number chosen here**, because
|
|
142
|
+
* asking for more than it supports is not a clamp, it is a rejected device — measured on
|
|
143
|
+
* this machine, which offers 48 sampled textures and exactly 16 samplers, so a flat request
|
|
144
|
+
* for 20 threw and lost WebGPU entirely. The renderer reads the same numbers back off the
|
|
145
|
+
* device and drops the probe when the variant will not fit; see `WebGPURenderer`.
|
|
146
|
+
*/
|
|
147
|
+
/*
|
|
148
|
+
* **And the buffer ceiling, because a bought model is bigger than a default allows.**
|
|
149
|
+
*
|
|
150
|
+
* `maxBufferSize` defaults to 256 MiB while this machine's adapter offers 4 GiB, and a
|
|
151
|
+
* merged mesh from an imported model passes the default easily: a reported one asked for
|
|
152
|
+
* **298,273,296 bytes** for a single `mesh.vertices`. WebGL2 has no such ceiling, so the same
|
|
153
|
+
* model loads on one backend and not the other — and the failure is not a refusal anybody
|
|
154
|
+
* reads, it is an invalid buffer that then invalidates every command buffer that touches it,
|
|
155
|
+
* so the console fills with a hundred repeats of *"is invalid due to a previous error"* from
|
|
156
|
+
* the shadow pass and the frame, and the subject is simply absent.
|
|
157
|
+
*
|
|
158
|
+
* Asked for at the adapter's ceiling like the two above and for the same reason: more than
|
|
159
|
+
* it offers is a rejected device rather than a clamp. A part whose adapter genuinely caps at
|
|
160
|
+
* the default still refuses the model, and `WebGPURenderer.createMesh` says so in one line
|
|
161
|
+
* rather than letting the driver say it a hundred times.
|
|
162
|
+
*/
|
|
163
|
+
const required = {};
|
|
164
|
+
for (const limit of [
|
|
165
|
+
'maxSampledTexturesPerShaderStage',
|
|
166
|
+
'maxSamplersPerShaderStage',
|
|
167
|
+
'maxBufferSize',
|
|
168
|
+
]) {
|
|
169
|
+
const ceiling = adapter.limits[limit];
|
|
170
|
+
if (typeof ceiling === 'number' && ceiling > 0)
|
|
171
|
+
required[limit] = ceiling;
|
|
172
|
+
}
|
|
173
|
+
/*
|
|
174
|
+
* **Asked for only where the adapter offers it, and never demanded.** A `requiredFeatures`
|
|
175
|
+
* naming something the adapter lacks does not clamp, it rejects the device outright — the
|
|
176
|
+
* same trap the limits above carry — and losing WebGPU entirely in exchange for a
|
|
177
|
+
* diagnostic would be a poor trade. Without it `GpuTimestamps` reports `available: false`,
|
|
178
|
+
* which is the honest answer rather than a silent zero.
|
|
179
|
+
*/
|
|
180
|
+
/*
|
|
181
|
+
* **What part this is, in the same shape `UNMASKED_RENDERER_WEBGL` gives on the other
|
|
182
|
+
* backend.** Without it `WebGPURenderer.rendererName` was the literal string `WebGPU`, so
|
|
183
|
+
* `isWeakGpuFamily` had nothing to match and the capability clamp could not fire at all —
|
|
184
|
+
* the clamp that rescued an Adreno 619 on WebGL2 was dead on the backend that replaced it.
|
|
185
|
+
*
|
|
186
|
+
* Every field is optional and browsers withhold them to differing degrees, so they are
|
|
187
|
+
* joined rather than formatted: a string with a vendor and nothing else is still something
|
|
188
|
+
* the table can recognise, and an empty one falls back to the old literal so nothing that
|
|
189
|
+
* reads it gets an empty label.
|
|
190
|
+
*/
|
|
191
|
+
const rendererName = adapterRendererName(adapter.info);
|
|
192
|
+
const features = [];
|
|
193
|
+
/*
|
|
194
|
+
* Asked for only when a consumer wants to measure. A feature that is requested is a feature
|
|
195
|
+
* the device carries, and this one exists to be attached to every render pass — see
|
|
196
|
+
* `RenderQuality.gpuTiming` for why that was the wrong thing to hand everybody by default.
|
|
197
|
+
*/
|
|
198
|
+
if (wantsGpuTiming && adapter.features?.has('timestamp-query') === true) {
|
|
199
|
+
features.push('timestamp-query');
|
|
200
|
+
}
|
|
201
|
+
const descriptor = {};
|
|
202
|
+
if (Object.keys(required).length > 0)
|
|
203
|
+
descriptor.requiredLimits = required;
|
|
204
|
+
if (features.length > 0)
|
|
205
|
+
descriptor.requiredFeatures = features;
|
|
206
|
+
stage.at = 'requesting a device';
|
|
207
|
+
const device = await adapter.requestDevice(descriptor);
|
|
208
|
+
if (device === null || device === undefined) {
|
|
209
|
+
return {
|
|
210
|
+
backend: 'webgl2',
|
|
211
|
+
device: null,
|
|
212
|
+
rendererName: null,
|
|
213
|
+
reason: 'WebGPU device request gave nothing',
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/*
|
|
217
|
+
* **A device is not a backend until it has drawn.** Everything above this asks whether WebGPU
|
|
218
|
+
* exists; this asks whether it works, which is a different question and the one the iOS black
|
|
219
|
+
* screen turned on. A refusal here is an ordinary fallback and not an error: it lands on the
|
|
220
|
+
* same WebGL2 path as a browser with no `navigator.gpu`, carrying a reason in the device's own
|
|
221
|
+
* words.
|
|
222
|
+
*
|
|
223
|
+
* **Cost:** one pipeline and one 1x1 readback, once, before the first frame. Passing `shaders`
|
|
224
|
+
* adds their compile — see `CreateRendererOptions.probeShaders` for what that was measured at
|
|
225
|
+
* and why it is not the default.
|
|
226
|
+
*/
|
|
227
|
+
stage.at = 'drawing the acceptance probe';
|
|
228
|
+
const verdict = await probeDevice(device, shaders);
|
|
229
|
+
if (!verdict.ok) {
|
|
230
|
+
device.destroy();
|
|
231
|
+
return { backend: 'webgl2', device: null, rendererName: null, reason: verdict.reason };
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
backend: 'webgpu',
|
|
235
|
+
device,
|
|
236
|
+
rendererName,
|
|
237
|
+
reason: 'WebGPU adapter and device acquired',
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
242
|
+
return {
|
|
243
|
+
backend: 'webgl2',
|
|
244
|
+
device: null,
|
|
245
|
+
rendererName: null,
|
|
246
|
+
reason: `WebGPU device request failed: ${detail}`,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { GpuSample, GpuSlot } from '../gpuTimer.ts';
|
|
2
|
+
/**
|
|
3
|
+
* What a frame timer has to answer, with no backend in the question.
|
|
4
|
+
*
|
|
5
|
+
* `GpuTimer` is built on `WebGLQuery` and the `EXT_disjoint_timer_query_webgl2` extension,
|
|
6
|
+
* which most mobile browsers do not have. WebGPU answers the same question through timestamp
|
|
7
|
+
* queries, with a different shape and a different availability story again. So the shared
|
|
8
|
+
* surface takes the *question* rather than either answer.
|
|
9
|
+
*
|
|
10
|
+
* **`null` from `lastFrameMs` means unmeasured, not free.** Reporting a confident 0.0 is the
|
|
11
|
+
* worst number available to invent: a frame meter that reads zero where it cannot measure
|
|
12
|
+
* makes the GPU look idle exactly when somebody is trying to find out why it is not, which
|
|
13
|
+
* is the failure that cost thirteen milliseconds a frame for six weeks (`AGENTS.md`,
|
|
14
|
+
* 2026-08-07). An honest absence is what lets a reader distinguish "fast" from "unknown".
|
|
15
|
+
*/
|
|
16
|
+
export interface FrameTimer {
|
|
17
|
+
/** Whether this timer can measure at all on the device in front of it. */
|
|
18
|
+
readonly available: boolean;
|
|
19
|
+
/** Whether the frame being drawn is one of the sampled ones. */
|
|
20
|
+
readonly sampling: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Whether this frame is measured. Called once per frame, before any `begin`.
|
|
23
|
+
*
|
|
24
|
+
* **The brackets are on this interface rather than under it, because their names are the
|
|
25
|
+
* engine's own passes and not WebGL's.** `shadows`, `reflection` and `rest` describe what
|
|
26
|
+
* this renderer draws, so a second backend measuring the same frame owes the same three
|
|
27
|
+
* numbers; what differs between the APIs is only how the measurement is taken.
|
|
28
|
+
*/
|
|
29
|
+
beginFrame(): boolean;
|
|
30
|
+
/** Close the frame and queue it for reading. */
|
|
31
|
+
endFrame(): void;
|
|
32
|
+
/** Open a bracket. Never two at once. */
|
|
33
|
+
begin(slot: GpuSlot): void;
|
|
34
|
+
/** Close the open bracket. */
|
|
35
|
+
end(): void;
|
|
36
|
+
/**
|
|
37
|
+
* The oldest finished sample, or null. **Never blocks**: a diagnostic that stalls the
|
|
38
|
+
* pipeline in order to measure it is measuring itself.
|
|
39
|
+
*/
|
|
40
|
+
poll(): GpuSample | null;
|
|
41
|
+
/**
|
|
42
|
+
* Milliseconds the GPU spent on the most recently *resolved* frame, or null.
|
|
43
|
+
*
|
|
44
|
+
* Resolved rather than current: results arrive some frames after the work, because reading
|
|
45
|
+
* them back any sooner would stall the pipeline the timer exists to observe.
|
|
46
|
+
*/
|
|
47
|
+
lastFrameMs(): number | null;
|
|
48
|
+
/** Release whatever the timer holds. */
|
|
49
|
+
dispose(): void;
|
|
50
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { MeshInstances } from '../../instances.ts';
|
|
2
|
+
import type { Mesh } from '../../mesh.ts';
|
|
3
|
+
/**
|
|
4
|
+
* One mesh's per-instance buffer, bound to that mesh's own vertex array.
|
|
5
|
+
*
|
|
6
|
+
* The twin of the WebGPU batch and deliberately the same shape, because which floats go where is
|
|
7
|
+
* a decision shared through `instances.ts` and only the binding is per-backend.
|
|
8
|
+
*
|
|
9
|
+
* The staging array is allocated here and rewritten in place, so a frame re-uploading a moving
|
|
10
|
+
* batch allocates nothing.
|
|
11
|
+
*/
|
|
12
|
+
export declare class InstancedBatch {
|
|
13
|
+
readonly mesh: Mesh;
|
|
14
|
+
readonly capacity: number;
|
|
15
|
+
private readonly buffer;
|
|
16
|
+
private readonly staging;
|
|
17
|
+
constructor(gl: WebGL2RenderingContext, mesh: Mesh, capacity: number);
|
|
18
|
+
/** Pack and push the live prefix, in one call. */
|
|
19
|
+
upload(gl: WebGL2RenderingContext, data: MeshInstances): void;
|
|
20
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { INSTANCE_FLOATS, INSTANCE_STRIDE, packInstances } from '../../instances.js';
|
|
2
|
+
/**
|
|
3
|
+
* One mesh's per-instance buffer, bound to that mesh's own vertex array.
|
|
4
|
+
*
|
|
5
|
+
* The twin of the WebGPU batch and deliberately the same shape, because which floats go where is
|
|
6
|
+
* a decision shared through `instances.ts` and only the binding is per-backend.
|
|
7
|
+
*
|
|
8
|
+
* The staging array is allocated here and rewritten in place, so a frame re-uploading a moving
|
|
9
|
+
* batch allocates nothing.
|
|
10
|
+
*/
|
|
11
|
+
export class InstancedBatch {
|
|
12
|
+
mesh;
|
|
13
|
+
capacity;
|
|
14
|
+
buffer;
|
|
15
|
+
staging;
|
|
16
|
+
constructor(gl, mesh, capacity) {
|
|
17
|
+
const buffer = gl.createBuffer();
|
|
18
|
+
if (buffer === null)
|
|
19
|
+
throw new Error('InstancedBatch: createBuffer failed');
|
|
20
|
+
this.mesh = mesh;
|
|
21
|
+
this.capacity = capacity;
|
|
22
|
+
this.buffer = buffer;
|
|
23
|
+
this.staging = new Float32Array(capacity * INSTANCE_FLOATS);
|
|
24
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
25
|
+
gl.bufferData(gl.ARRAY_BUFFER, capacity * INSTANCE_STRIDE, gl.DYNAMIC_DRAW);
|
|
26
|
+
/* `DYNAMIC_DRAW` because a batch of vehicles is rewritten every frame — advisory, but a
|
|
27
|
+
driver told the truth can place the buffer where a rewrite is cheap. */
|
|
28
|
+
mesh.attachInstances(gl, buffer, INSTANCE_STRIDE);
|
|
29
|
+
}
|
|
30
|
+
/** Pack and push the live prefix, in one call. */
|
|
31
|
+
upload(gl, data) {
|
|
32
|
+
const count = Math.min(data.count, this.capacity);
|
|
33
|
+
if (count === 0)
|
|
34
|
+
return;
|
|
35
|
+
packInstances(data, this.staging);
|
|
36
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
|
|
37
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.staging, 0, count * INSTANCE_FLOATS);
|
|
38
|
+
}
|
|
39
|
+
dispose(gl) {
|
|
40
|
+
gl.deleteBuffer(this.buffer);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A mesh's morph deltas as an `RGB32F` texture, on WebGL2.
|
|
3
|
+
*
|
|
4
|
+
* **Owned by the mesh rather than set per draw**, which is the difference between this and the
|
|
5
|
+
* joint palette beside it. A palette changes every frame and belongs to a *pose*; deltas are
|
|
6
|
+
* geometry and never change, so they are uploaded once with the vertex buffers and bound by the
|
|
7
|
+
* draw that uses them. Only the weights are per-draw state.
|
|
8
|
+
*
|
|
9
|
+
* `RGB32F` rather than `RGBA32F`: a delta is three floats and the fourth would be a quarter of the
|
|
10
|
+
* texture holding nothing. Both are colour-renderable-optional in WebGL2 core and neither is
|
|
11
|
+
* filtered here, so the narrower one costs nothing and saves a third.
|
|
12
|
+
*/
|
|
13
|
+
export declare class MorphTexture {
|
|
14
|
+
private texture;
|
|
15
|
+
readonly width: number;
|
|
16
|
+
readonly rows: number;
|
|
17
|
+
readonly targetCount: number;
|
|
18
|
+
constructor(gl: WebGL2RenderingContext, deltas: Float32Array, vertices: number, targets: number);
|
|
19
|
+
bind(gl: WebGL2RenderingContext, unit: number): void;
|
|
20
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { morphTextureRows, morphTextureWidth } from '../../skinPalette.js';
|
|
2
|
+
/**
|
|
3
|
+
* A mesh's morph deltas as an `RGB32F` texture, on WebGL2.
|
|
4
|
+
*
|
|
5
|
+
* **Owned by the mesh rather than set per draw**, which is the difference between this and the
|
|
6
|
+
* joint palette beside it. A palette changes every frame and belongs to a *pose*; deltas are
|
|
7
|
+
* geometry and never change, so they are uploaded once with the vertex buffers and bound by the
|
|
8
|
+
* draw that uses them. Only the weights are per-draw state.
|
|
9
|
+
*
|
|
10
|
+
* `RGB32F` rather than `RGBA32F`: a delta is three floats and the fourth would be a quarter of the
|
|
11
|
+
* texture holding nothing. Both are colour-renderable-optional in WebGL2 core and neither is
|
|
12
|
+
* filtered here, so the narrower one costs nothing and saves a third.
|
|
13
|
+
*/
|
|
14
|
+
export class MorphTexture {
|
|
15
|
+
texture = null;
|
|
16
|
+
width;
|
|
17
|
+
rows;
|
|
18
|
+
targetCount;
|
|
19
|
+
constructor(gl, deltas, vertices, targets) {
|
|
20
|
+
this.targetCount = targets;
|
|
21
|
+
this.width = morphTextureWidth(vertices, targets);
|
|
22
|
+
this.rows = morphTextureRows(vertices, targets);
|
|
23
|
+
const created = gl.createTexture();
|
|
24
|
+
if (created === null)
|
|
25
|
+
throw new Error('morph targets: failed to create the delta texture');
|
|
26
|
+
this.texture = created;
|
|
27
|
+
gl.bindTexture(gl.TEXTURE_2D, created);
|
|
28
|
+
gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGB32F, this.width, this.rows);
|
|
29
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
30
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
|
|
31
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
32
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
33
|
+
/*
|
|
34
|
+
* The last row is usually short, and `texSubImage2D` reads a full row's worth whatever it is
|
|
35
|
+
* told — so uploading the whole rectangle from a source that stops early walks off the end.
|
|
36
|
+
* Padded to the rectangle once, here, rather than uploaded row by row: this runs at mesh
|
|
37
|
+
* construction and the padding is at most one row of zeroes. The splat streaming path found
|
|
38
|
+
* the row-by-row version of this the hard way, on one backend only.
|
|
39
|
+
*/
|
|
40
|
+
const padded = new Float32Array(this.width * this.rows * 3);
|
|
41
|
+
padded.set(deltas.subarray(0, Math.min(deltas.length, padded.length)));
|
|
42
|
+
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.width, this.rows, gl.RGB, gl.FLOAT, padded);
|
|
43
|
+
}
|
|
44
|
+
bind(gl, unit) {
|
|
45
|
+
if (this.texture === null)
|
|
46
|
+
return;
|
|
47
|
+
gl.activeTexture(gl.TEXTURE0 + unit);
|
|
48
|
+
gl.bindTexture(gl.TEXTURE_2D, this.texture);
|
|
49
|
+
}
|
|
50
|
+
dispose(gl) {
|
|
51
|
+
if (this.texture !== null)
|
|
52
|
+
gl.deleteTexture(this.texture);
|
|
53
|
+
this.texture = null;
|
|
54
|
+
}
|
|
55
|
+
}
|