@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,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hold a frame budget by moving the drawing-buffer scale, and nothing else.
|
|
3
|
+
*
|
|
4
|
+
* This is the safety net the GPU-budget design asks for, and the reason it is worth
|
|
5
|
+
* having is that it works on hardware nobody here owns — including hardware that does not
|
|
6
|
+
* exist yet. One of the three players whose reports started that design found the cure by
|
|
7
|
+
* hand: they shrank the browser window until the game was smooth. This does the same
|
|
8
|
+
* thing without asking anyone to.
|
|
9
|
+
*
|
|
10
|
+
* **Pure by design: no GL, no DOM, no clock.** Frame times come in, a new scale comes
|
|
11
|
+
* out, and the caller decides what to do with it. That is what makes it testable at all,
|
|
12
|
+
* because every device it exists for is one no test machine has.
|
|
13
|
+
*
|
|
14
|
+
* **Asymmetric on purpose.** Dropping is fast, because a player at 6 fps needs relief
|
|
15
|
+
* now. Raising is slow and waits behind several consecutive good windows, because a
|
|
16
|
+
* resolution that oscillates is more visible than one that is slightly too low.
|
|
17
|
+
*/
|
|
18
|
+
import { withDefaults } from '../core/withDefaults.js';
|
|
19
|
+
/**
|
|
20
|
+
* Deliberately hard to trigger. Work through what a healthy machine has to do to move it.
|
|
21
|
+
*
|
|
22
|
+
* At 120 fps, sixty frames is half a second. To drop one step a machine must spend **thirty
|
|
23
|
+
* of those sixty frames over 40 ms**, then do it again in the very next window: roughly a
|
|
24
|
+
* full second in which half the frames missed 25 fps. Nothing transient does that. A
|
|
25
|
+
* garbage collection is one frame, a shader compile is a handful, another application
|
|
26
|
+
* grabbing the GPU for a moment is a fraction of a window, and every one of them leaves the
|
|
27
|
+
* share far under a half.
|
|
28
|
+
*
|
|
29
|
+
* The devices this exists for are not marginal and do not need a sensitive trigger.
|
|
30
|
+
* `NFD6QQ`'s Adreno 619 held **156.66 ms** — every frame long, a share of 1.0 — so it
|
|
31
|
+
* clears two windows without ambiguity while a busy desktop never clears one.
|
|
32
|
+
*
|
|
33
|
+
* The 0.5 floor is `RESOLUTION_MIN` from the game's own settings screen, so the governor can
|
|
34
|
+
* never take a player somewhere they could not have gone themselves.
|
|
35
|
+
*/
|
|
36
|
+
export const DEFAULT_GOVERNOR_LIMITS = {
|
|
37
|
+
budgetMs: 40,
|
|
38
|
+
badShare: 0.5,
|
|
39
|
+
minScale: 0.5,
|
|
40
|
+
windowFrames: 60,
|
|
41
|
+
badWindows: 2,
|
|
42
|
+
dropStep: 0.25,
|
|
43
|
+
raiseStep: 0.125,
|
|
44
|
+
raisePatience: 4,
|
|
45
|
+
};
|
|
46
|
+
export class ResolutionGovernor {
|
|
47
|
+
limits;
|
|
48
|
+
ceiling;
|
|
49
|
+
current;
|
|
50
|
+
frames = 0;
|
|
51
|
+
longFrames = 0;
|
|
52
|
+
badWindows = 0;
|
|
53
|
+
goodWindows = 0;
|
|
54
|
+
constructor(ceiling, limits = {}) {
|
|
55
|
+
this.limits = withDefaults(DEFAULT_GOVERNOR_LIMITS, limits);
|
|
56
|
+
this.ceiling = ceiling;
|
|
57
|
+
this.current = ceiling;
|
|
58
|
+
}
|
|
59
|
+
get scale() {
|
|
60
|
+
return this.current;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The player's own ceiling moved.
|
|
64
|
+
*
|
|
65
|
+
* A *lower* ceiling applies at once, because their choice is authority and waiting a
|
|
66
|
+
* window to honour it would be ignoring them. A *higher* one is only a permission: it
|
|
67
|
+
* does not raise the current scale, because jumping up would undo a drop the device had
|
|
68
|
+
* already earned. The patience path decides whether it can afford to climb back.
|
|
69
|
+
*/
|
|
70
|
+
setCeiling(ceiling) {
|
|
71
|
+
this.ceiling = ceiling;
|
|
72
|
+
if (this.current > ceiling)
|
|
73
|
+
this.current = ceiling;
|
|
74
|
+
}
|
|
75
|
+
/** Start the window again, leaving the scale where it is. */
|
|
76
|
+
reset() {
|
|
77
|
+
this.frames = 0;
|
|
78
|
+
this.longFrames = 0;
|
|
79
|
+
this.badWindows = 0;
|
|
80
|
+
this.goodWindows = 0;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* One frame. Returns the new scale when it changed and `null` when it did not, so the
|
|
84
|
+
* caller does no GL or DOM work on an ordinary frame.
|
|
85
|
+
*
|
|
86
|
+
* `playable` exists because of `DZTF9F`, where an RTX 3060 filed a report calling
|
|
87
|
+
* itself unplayable from a menu: a menu frame and a hidden-tab frame are not verdicts
|
|
88
|
+
* about the machine. A governor that believed them would soften a game running
|
|
89
|
+
* perfectly, which is the same false positive with a more visible symptom.
|
|
90
|
+
*/
|
|
91
|
+
sample(frameMs, playable) {
|
|
92
|
+
if (!playable)
|
|
93
|
+
return null;
|
|
94
|
+
this.frames++;
|
|
95
|
+
/*
|
|
96
|
+
* A *share* of long frames, not the worst one.
|
|
97
|
+
*
|
|
98
|
+
* The worst frame in a window was the first version of this and it was wrong in the
|
|
99
|
+
* one way that matters: with any budget near the vsync interval, a single hitch on an
|
|
100
|
+
* otherwise perfect machine drops a resolution step. "The worst frame decides" is the
|
|
101
|
+
* right rule for *diagnosing* a device, because a mean hides a machine that is fine
|
|
102
|
+
* until something happens, and it is the wrong rule for a *control loop*, which has to
|
|
103
|
+
* ignore everything it cannot act on. A share ignores hitches by construction.
|
|
104
|
+
*/
|
|
105
|
+
if (frameMs > this.limits.budgetMs)
|
|
106
|
+
this.longFrames++;
|
|
107
|
+
if (this.frames < this.limits.windowFrames)
|
|
108
|
+
return null;
|
|
109
|
+
const share = this.longFrames / this.frames;
|
|
110
|
+
this.frames = 0;
|
|
111
|
+
this.longFrames = 0;
|
|
112
|
+
if (share >= this.limits.badShare) {
|
|
113
|
+
/*
|
|
114
|
+
* A bad window is evidence, not a decision. It takes `badWindows` of them in a row,
|
|
115
|
+
* so a world build or a tab coming back cannot move anything on its own.
|
|
116
|
+
*/
|
|
117
|
+
this.goodWindows = 0;
|
|
118
|
+
this.badWindows++;
|
|
119
|
+
if (this.badWindows < this.limits.badWindows)
|
|
120
|
+
return null;
|
|
121
|
+
this.badWindows = 0;
|
|
122
|
+
const next = Math.max(this.limits.minScale, this.current - this.limits.dropStep);
|
|
123
|
+
if (next === this.current)
|
|
124
|
+
return null;
|
|
125
|
+
this.current = next;
|
|
126
|
+
return this.current;
|
|
127
|
+
}
|
|
128
|
+
/*
|
|
129
|
+
* A window that was not bad clears the run of bad ones. Two bad windows separated by a
|
|
130
|
+
* good one are two hiccups, and treating them as a streak would mean any long enough
|
|
131
|
+
* session eventually drops the resolution of a machine that never needed it.
|
|
132
|
+
*/
|
|
133
|
+
this.badWindows = 0;
|
|
134
|
+
this.goodWindows++;
|
|
135
|
+
if (this.goodWindows < this.limits.raisePatience)
|
|
136
|
+
return null;
|
|
137
|
+
this.goodWindows = 0;
|
|
138
|
+
const next = Math.min(this.ceiling, this.current + this.limits.raiseStep);
|
|
139
|
+
if (next === this.current)
|
|
140
|
+
return null;
|
|
141
|
+
this.current = next;
|
|
142
|
+
return this.current;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** What the scatter vertex stage reads, after every conversion has been applied. */
|
|
2
|
+
export interface ScatterDeform {
|
|
3
|
+
/** Unit wind direction, or zero when there is no wind to have a direction. */
|
|
4
|
+
readonly direction: Float32Array;
|
|
5
|
+
/** **Metres of bend, not metres per second.** A blade at the wind's own speed lies flat. */
|
|
6
|
+
bend: number;
|
|
7
|
+
gust: number;
|
|
8
|
+
time: number;
|
|
9
|
+
readonly spatialPhase: Float32Array;
|
|
10
|
+
trample: Float32Array;
|
|
11
|
+
trampleRadius: number;
|
|
12
|
+
trampleDepth: number;
|
|
13
|
+
}
|
|
14
|
+
/** Allocate one per binder, refilled per call: both callers are per-frame paths. */
|
|
15
|
+
export declare function createScatterDeform(): ScatterDeform;
|
|
16
|
+
/** Convert a gust into what the shader wants, into a target the caller owns. */
|
|
17
|
+
export declare function resolveScatterDeform(windX: number, windZ: number, windGust: number, timeSeconds: number, trample: Float32Array | null, out: ScatterDeform): ScatterDeform;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { TRAMPLE_SLOTS } from './trample.js';
|
|
2
|
+
/**
|
|
3
|
+
* How wind and footfall deform a scatter batch, decided once for both backends.
|
|
4
|
+
*
|
|
5
|
+
* **Every number here is a conversion, and a copy of one would drift.** The vertex stage is
|
|
6
|
+
* handed metres of bend rather than metres per second, a time already scaled, and a wind
|
|
7
|
+
* direction already normalised — so the same gust has to arrive at both backends through the
|
|
8
|
+
* same arithmetic or a field of grass leans differently depending on which one is drawing it.
|
|
9
|
+
* That is the 2026-08-13 rule in `AGENTS.md`: the decision is neutral, the binding is not.
|
|
10
|
+
*/
|
|
11
|
+
/** How far a press reaches, and how far down it pushes. */
|
|
12
|
+
const TRAMPLE_RADIUS_M = 1.1;
|
|
13
|
+
const TRAMPLE_DEPTH = 0.8;
|
|
14
|
+
/**
|
|
15
|
+
* Zeroed presses, for a batch nothing walks through.
|
|
16
|
+
*
|
|
17
|
+
* Bound rather than skipped: a uniform array still holding the last batch's presses would
|
|
18
|
+
* flatten the *next* one, and the grit from a drift is drawn through this same path — which
|
|
19
|
+
* would have made a slide comb grass it was nowhere near.
|
|
20
|
+
*/
|
|
21
|
+
const EMPTY_TRAMPLE = new Float32Array(TRAMPLE_SLOTS * 4);
|
|
22
|
+
/** Allocate one per binder, refilled per call: both callers are per-frame paths. */
|
|
23
|
+
export function createScatterDeform() {
|
|
24
|
+
return {
|
|
25
|
+
direction: new Float32Array(2),
|
|
26
|
+
bend: 0,
|
|
27
|
+
gust: 0,
|
|
28
|
+
time: 0,
|
|
29
|
+
spatialPhase: new Float32Array([0.18, 0.13]),
|
|
30
|
+
trample: EMPTY_TRAMPLE,
|
|
31
|
+
trampleRadius: TRAMPLE_RADIUS_M,
|
|
32
|
+
trampleDepth: TRAMPLE_DEPTH,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Convert a gust into what the shader wants, into a target the caller owns. */
|
|
36
|
+
export function resolveScatterDeform(windX, windZ, windGust, timeSeconds, trample, out) {
|
|
37
|
+
const speed = Math.hypot(windX, windZ);
|
|
38
|
+
const invSpeed = speed > 1e-5 ? 1 / speed : 0;
|
|
39
|
+
out.direction[0] = windX * invSpeed;
|
|
40
|
+
out.direction[1] = windZ * invSpeed;
|
|
41
|
+
out.bend = speed * 0.045;
|
|
42
|
+
out.gust = windGust * 0.06;
|
|
43
|
+
out.time = timeSeconds * 1.6;
|
|
44
|
+
out.trample = trample ?? EMPTY_TRAMPLE;
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { type ColourGradeLut } from './colourGrade.ts';
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
/**
|
|
4
|
+
* An off-screen colour target for the frame, and the pass that resolves it to the canvas.
|
|
5
|
+
*
|
|
6
|
+
* The renderer drew straight to the canvas, which is the right default and is why this is
|
|
7
|
+
* opt-in: with nothing to sample a finished frame from, no screen-space effect can exist at
|
|
8
|
+
* all. A speed blur faked with a compositor filter over the canvas gets the boundary
|
|
9
|
+
* wrong in both directions: it is too strong, and it cannot leave the HUD alone. The
|
|
10
|
+
* effect belongs to the 3D scene, so the scene needs somewhere to land before it is shown.
|
|
11
|
+
*
|
|
12
|
+
* **It resolves to the canvas, always.** Two consumers depend on that and neither is
|
|
13
|
+
* optional: a frame recorder reads the canvas to build a clip, and a still is a canvas
|
|
14
|
+
* copy. Leaving the scene in a framebuffer would produce a black export while the screen
|
|
15
|
+
* looked correct, which is the worst shape a bug can have.
|
|
16
|
+
*
|
|
17
|
+
* Sized from the drawing buffer and rebuilt when that changes, so a resize, a DPR change
|
|
18
|
+
* and an export lock all land on an exactly-sized target rather than a stretched one. The
|
|
19
|
+
* depth buffer lives here too: a scene drawn into a colour attachment with the canvas's
|
|
20
|
+
* depth buffer would have no depth at all.
|
|
21
|
+
*/
|
|
22
|
+
export declare class SceneTarget {
|
|
23
|
+
private readonly gl;
|
|
24
|
+
/**
|
|
25
|
+
* Whether the multisampled buffers may be thrown away once blitted down.
|
|
26
|
+
*
|
|
27
|
+
* True is correct and saves a full attachment write per frame on a tiler. It is a switch
|
|
28
|
+
* because, like WebGPU's `storeOp: 'discard'`, it is invisible on an immediate-mode desktop
|
|
29
|
+
* part and therefore cannot be verified by a screenshot: see
|
|
30
|
+
* `RenderQuality.discardResolvedAttachments`.
|
|
31
|
+
*/
|
|
32
|
+
private readonly discardResolved;
|
|
33
|
+
private framebuffer;
|
|
34
|
+
private texture;
|
|
35
|
+
/**
|
|
36
|
+
* Depth as a *texture* rather than a renderbuffer, so the composite pass can read it.
|
|
37
|
+
*
|
|
38
|
+
* A renderbuffer is write-only from a shader's point of view, and every screen-space
|
|
39
|
+
* effect worth having needs the depth back: motion blur reconstructs a world position
|
|
40
|
+
* from it to reproject through the previous view, and ambient occlusion is nothing but
|
|
41
|
+
* depth compared against its neighbours. Costing the same memory and being sampleable,
|
|
42
|
+
* there is no reason for it to be anything else.
|
|
43
|
+
*/
|
|
44
|
+
private depth;
|
|
45
|
+
/**
|
|
46
|
+
* A copy of the frame's depth taken mid-pass, for anything that must read it while drawing.
|
|
47
|
+
*
|
|
48
|
+
* **Not `depth` itself, and the distinction is the whole reason this exists.** `depth` is the
|
|
49
|
+
* attachment the frame is testing against, and sampling a texture that is attached to the
|
|
50
|
+
* bound framebuffer is undefined in WebGL2 — it draws something plausible on this driver and
|
|
51
|
+
* something else on the next. So a volume of light, which has to know where the opaque scene
|
|
52
|
+
* is in order to stop marching at it, reads this instead.
|
|
53
|
+
*
|
|
54
|
+
* Filled by `snapshotDepth`, on demand, and only in frames that ask.
|
|
55
|
+
*/
|
|
56
|
+
private depthCopy;
|
|
57
|
+
private depthCopyFramebuffer;
|
|
58
|
+
/** Whether this frame has filled it. One snapshot serves every volume in a frame. */
|
|
59
|
+
private depthCopyFilled;
|
|
60
|
+
/**
|
|
61
|
+
* The colour the frame had already drawn when something first asked for it.
|
|
62
|
+
*
|
|
63
|
+
* **A copy and never the attachment**, which is the difference `colorAttachment` documents from
|
|
64
|
+
* the other side: that one returns null while multisampling, because the frame lives in a
|
|
65
|
+
* renderbuffer until `resolve` blits into it. A blit from a multisampled source to a
|
|
66
|
+
* single-sampled destination *is* a resolve, so this answers in exactly the configuration where
|
|
67
|
+
* reading the attachment cannot.
|
|
68
|
+
*
|
|
69
|
+
* Filled by `snapshotColor`, on demand, and only in frames that ask.
|
|
70
|
+
*/
|
|
71
|
+
private colorCopy;
|
|
72
|
+
private colorCopyFramebuffer;
|
|
73
|
+
/** Whether this frame has filled it. One snapshot serves every refracting draw in a frame. */
|
|
74
|
+
private colorCopyFilled;
|
|
75
|
+
/**
|
|
76
|
+
* The colour grade, as a 3D texture on unit 4, and the table it was built from.
|
|
77
|
+
*
|
|
78
|
+
* **The source is kept to compare identities, not to read.** A grade is set every frame by a
|
|
79
|
+
* consumer that has one, and re-uploading a 32-lattice table is 131 kilobytes of `texImage3D`
|
|
80
|
+
* sixty times a second for bytes that did not change. Comparing the object is what makes
|
|
81
|
+
* `setColourGrade` free to call from a frame loop — and a consumer crossfading between two
|
|
82
|
+
* grades holds two objects, which compare unequal and upload once each on the swap.
|
|
83
|
+
*/
|
|
84
|
+
private gradeTexture;
|
|
85
|
+
private gradeSource;
|
|
86
|
+
private gradeSize;
|
|
87
|
+
private gradeStrength;
|
|
88
|
+
private width;
|
|
89
|
+
private height;
|
|
90
|
+
/**
|
|
91
|
+
* The multisampled pair, present only when a caller asked for samples.
|
|
92
|
+
*
|
|
93
|
+
* Two framebuffers rather than one, because a multisampled attachment cannot be sampled
|
|
94
|
+
* by a shader: the scene is drawn into `msaaFramebuffer`, blitted down into the ordinary
|
|
95
|
+
* texture, and the post chain reads that exactly as it always has. Everything downstream
|
|
96
|
+
* of the blit is unchanged, which is what keeps this a quality option rather than a
|
|
97
|
+
* second rendering path.
|
|
98
|
+
*/
|
|
99
|
+
private msaaFramebuffer;
|
|
100
|
+
private msaaColor;
|
|
101
|
+
private msaaDepth;
|
|
102
|
+
/** What was actually allocated, after clamping to what the driver reports. */
|
|
103
|
+
private samples;
|
|
104
|
+
/** Whether anything actually reads the resolved depth. Nothing is copied if not. */
|
|
105
|
+
private depthWanted;
|
|
106
|
+
/** Set once if the driver refuses the depth copy, so it is attempted once and not per frame. */
|
|
107
|
+
private depthBlitRefused;
|
|
108
|
+
private readonly program;
|
|
109
|
+
private readonly uniforms;
|
|
110
|
+
private readonly vao;
|
|
111
|
+
/**
|
|
112
|
+
* Built the first time a caller asks for occlusion, and never for one that does not.
|
|
113
|
+
*
|
|
114
|
+
* Two programs and two full-frame targets is not a thing to allocate on the chance somebody
|
|
115
|
+
* turns the option on later: the option is construction-time, so a renderer that was not
|
|
116
|
+
* asked for it will never be.
|
|
117
|
+
*/
|
|
118
|
+
private ao;
|
|
119
|
+
/** Built the first time a caller asks for bloom, on the same terms as the occlusion pass. */
|
|
120
|
+
private bloom;
|
|
121
|
+
/** Built on the first frame that asks for it, like `bloom` beside it. */
|
|
122
|
+
private temporal;
|
|
123
|
+
/** Whether the colour attachments hold half floats. See the constructor. */
|
|
124
|
+
private floatColor;
|
|
125
|
+
constructor(gl: WebGL2RenderingContext, requestedSamples?: number, wantsRange?: boolean,
|
|
126
|
+
/**
|
|
127
|
+
* Whether the multisampled buffers may be thrown away once blitted down.
|
|
128
|
+
*
|
|
129
|
+
* True is correct and saves a full attachment write per frame on a tiler. It is a switch
|
|
130
|
+
* because, like WebGPU's `storeOp: 'discard'`, it is invisible on an immediate-mode desktop
|
|
131
|
+
* part and therefore cannot be verified by a screenshot: see
|
|
132
|
+
* `RenderQuality.discardResolvedAttachments`.
|
|
133
|
+
*/
|
|
134
|
+
discardResolved?: boolean);
|
|
135
|
+
/** Match the target to the drawing buffer. Cheap when unchanged. */
|
|
136
|
+
private ensureSize;
|
|
137
|
+
private releaseMultisample;
|
|
138
|
+
/** Bind the off-screen target for a frame. The caller clears as it normally would. */
|
|
139
|
+
begin(width: number, height: number): void;
|
|
140
|
+
/**
|
|
141
|
+
* Point drawing back at this target, at its own size.
|
|
142
|
+
*
|
|
143
|
+
* Needed because every borrowing pass — the shadow maps, the planar reflection — hands
|
|
144
|
+
* the framebuffer back by binding `null`, which is the *canvas*, not the frame's target.
|
|
145
|
+
* Without somewhere to come back to, everything drawn after a reflection would land on
|
|
146
|
+
* the canvas and then be overwritten by the resolve of a half-empty target: a black
|
|
147
|
+
* frame from a renderer that looked correct in isolation.
|
|
148
|
+
*/
|
|
149
|
+
bind(): void;
|
|
150
|
+
/**
|
|
151
|
+
* Whether this target keeps values above 1, which decides where the tone curve belongs.
|
|
152
|
+
*
|
|
153
|
+
* False on a part without `EXT_color_buffer_float`, where the scene is squashed into 0 to 1 on
|
|
154
|
+
* the way in exactly as it always was.
|
|
155
|
+
*/
|
|
156
|
+
get keepsRange(): boolean;
|
|
157
|
+
/** How many samples the scene is actually being drawn with. 1 means no multisampling. */
|
|
158
|
+
get sampleCount(): number;
|
|
159
|
+
/** The frame's depth, resolved and sampleable, for screen-space effects that need it. */
|
|
160
|
+
get depthTexture(): WebGLTexture | null;
|
|
161
|
+
/**
|
|
162
|
+
* Copy the depth drawn so far, so something still drawing can read it. Returns what to bind.
|
|
163
|
+
*
|
|
164
|
+
* **Once per frame however many callers ask**, because they all want the same thing: where
|
|
165
|
+
* the opaque scene is. `begin` clears the latch.
|
|
166
|
+
*
|
|
167
|
+
* The blit is from whichever framebuffer the frame is actually rendering into — the
|
|
168
|
+
* multisampled one where there is one — and it restores that binding afterwards, because the
|
|
169
|
+
* caller is in the middle of a pass and expects to carry on drawing into it. Forgetting that
|
|
170
|
+
* is a frame that finishes into the wrong target and comes out empty.
|
|
171
|
+
*
|
|
172
|
+
* Null where the copy could not be made, and the caller must read that as "no clamp" rather
|
|
173
|
+
* than as a texture full of zeros — a depth of zero is the near plane, which would clamp every
|
|
174
|
+
* march to nothing and delete every beam in the scene.
|
|
175
|
+
*/
|
|
176
|
+
/**
|
|
177
|
+
* The depth the frame is testing against, for a pass that must test against it too.
|
|
178
|
+
*
|
|
179
|
+
* **Not `snapshotDepth`, and the difference matters.** That returns a *copy*, for a pass that
|
|
180
|
+
* samples depth while the attachment is bound; this is the attachment itself, for a pass that
|
|
181
|
+
* attaches it and depth-tests against it without writing. Order-independent transparency needs
|
|
182
|
+
* the second: its two passes reject a pane behind a wall exactly where the wall is, and both
|
|
183
|
+
* must reject it in the same place or the accumulation and the revealage cover different
|
|
184
|
+
* fragments.
|
|
185
|
+
*/
|
|
186
|
+
depthAttachment(): WebGLTexture | null;
|
|
187
|
+
/**
|
|
188
|
+
* The colour the frame has drawn so far, for a pass that reads the picture rather than the depth.
|
|
189
|
+
*
|
|
190
|
+
* **Null while multisampling, and that is the honest answer rather than a missing feature.** With
|
|
191
|
+
* samples above one the frame is drawn into a renderbuffer and this texture holds nothing until
|
|
192
|
+
* `resolve` blits into it — so a pass running mid-frame would read the frame before last. A
|
|
193
|
+
* caller that needs the finished picture in the middle of the frame is asking for something a
|
|
194
|
+
* multisampled attachment cannot give without a resolve of its own.
|
|
195
|
+
*/
|
|
196
|
+
colorAttachment(): WebGLTexture | null;
|
|
197
|
+
/**
|
|
198
|
+
* The colour the frame has drawn so far, copied so a draw can sample it while still drawing.
|
|
199
|
+
*
|
|
200
|
+
* **A copy and never the attachment.** Sampling a texture attached to the bound framebuffer is
|
|
201
|
+
* undefined in WebGL2 — it draws something plausible on this driver and something else on the
|
|
202
|
+
* next — and `colorAttachment` returns null under multisampling anyway. A blit answers both:
|
|
203
|
+
* it detaches the read, and from a multisampled source it resolves.
|
|
204
|
+
*
|
|
205
|
+
* **Latched, and the latch is the same trap `snapshotDepth` documents.** One copy serves every
|
|
206
|
+
* refracting draw in a frame, so glass does not refract other glass — which is correct, a pane
|
|
207
|
+
* behind a pane should show the room. What it also means is that opaque geometry drawn *after*
|
|
208
|
+
* the first refracting draw is missing from what a pane shows. Draw the world, then the glass;
|
|
209
|
+
* a caller that must have the later geometry asks `afresh` and pays another blit.
|
|
210
|
+
*
|
|
211
|
+
* Null where the copy could not be made, and a caller must read that as "do not refract" rather
|
|
212
|
+
* than as a black texture — refracting against black paints every pane the colour of a hole.
|
|
213
|
+
*/
|
|
214
|
+
snapshotColor(afresh?: boolean): WebGLTexture | null;
|
|
215
|
+
snapshotDepth(
|
|
216
|
+
/**
|
|
217
|
+
* Take the copy again even though one has already been taken this frame.
|
|
218
|
+
*
|
|
219
|
+
* **The latch that makes this cheap is also the trap in it.** A beam asks for the depth in
|
|
220
|
+
* the middle of the frame, so the copy holds the world *as it stood then* — and a pass that
|
|
221
|
+
* runs once every draw is in and reuses that copy marks a scene missing everything drawn
|
|
222
|
+
* after the beam. The symptom is a decal landing on a wall that is no longer the nearest
|
|
223
|
+
* thing, which reads as a depth-test bug rather than as a stale texture.
|
|
224
|
+
*
|
|
225
|
+
* So a caller at the end of the frame asks for it afresh, and pays one more blit on the
|
|
226
|
+
* frames where something had already asked. `begin` clears the latch either way.
|
|
227
|
+
*/
|
|
228
|
+
afresh?: boolean): WebGLTexture | null;
|
|
229
|
+
/**
|
|
230
|
+
* Resolve the scene to the canvas, blurred by `strength`.
|
|
231
|
+
*
|
|
232
|
+
* Depth and blending are explicitly off for the pass: it is one opaque triangle over the
|
|
233
|
+
* whole viewport, and inheriting a depth test from the last scene draw would let it fail
|
|
234
|
+
* against nothing.
|
|
235
|
+
*/
|
|
236
|
+
/**
|
|
237
|
+
* The colour grade this and every later frame applies, until it is set again.
|
|
238
|
+
*
|
|
239
|
+
* **Held rather than passed to `resolve`**, because a lookup table is a *texture* and every
|
|
240
|
+
* other texture this pass reads is owned here. The alternative is a ninth parameter on a call
|
|
241
|
+
* that already takes eight, carrying an object the caller would then have to keep stable
|
|
242
|
+
* anyway.
|
|
243
|
+
*
|
|
244
|
+
* `null`, or a strength at or below zero, is exactly the frame that existed before the effect
|
|
245
|
+
* did: the shader's branch is on a uniform, so no fetch happens at all.
|
|
246
|
+
*/
|
|
247
|
+
setColourGrade(lut: ColourGradeLut | null, strength: number): void;
|
|
248
|
+
/**
|
|
249
|
+
* Put a table on the device, replacing whatever was there.
|
|
250
|
+
*
|
|
251
|
+
* `RGBA8` with `LINEAR` in every direction and `CLAMP_TO_EDGE` on all three axes. The filtering
|
|
252
|
+
* is the whole point — an unfiltered 32-lattice table bands, which is the one artefact a grade
|
|
253
|
+
* must never introduce — and the clamp is what makes the texel-centre coordinate safe at the
|
|
254
|
+
* ends of the range rather than wrapping black round to white.
|
|
255
|
+
*/
|
|
256
|
+
private uploadGrade;
|
|
257
|
+
resolve(strength: number, reachUv: number, grade?: {
|
|
258
|
+
readonly transform: number;
|
|
259
|
+
readonly exposure: number;
|
|
260
|
+
}, motion?: {
|
|
261
|
+
readonly reprojection: Float32Array;
|
|
262
|
+
readonly strength: number;
|
|
263
|
+
readonly max: number;
|
|
264
|
+
}, ao?: {
|
|
265
|
+
readonly strength: number;
|
|
266
|
+
readonly radius: number;
|
|
267
|
+
/** The projection's x and y scales, which turn a world radius into a screen one. */
|
|
268
|
+
readonly projScale: Float32Array;
|
|
269
|
+
readonly invProjection: Float32Array;
|
|
270
|
+
}, bloom?: {
|
|
271
|
+
readonly strength: number;
|
|
272
|
+
/** In scene units, which is why this wants `keepsRange`. See `BloomPass`. */
|
|
273
|
+
readonly threshold: number;
|
|
274
|
+
}, dof?: {
|
|
275
|
+
/** Where the lens is focused, in metres. */
|
|
276
|
+
readonly distance: number;
|
|
277
|
+
/** How many metres either side of that stay sharp. */
|
|
278
|
+
readonly range: number;
|
|
279
|
+
/** How far the blur may reach, as a fraction of the frame's height. */
|
|
280
|
+
readonly strength: number;
|
|
281
|
+
/** `(m[10], m[14], m[11], m[15])` of the inverse projection. See `uDepthToView`. */
|
|
282
|
+
readonly depthToView: Float32Array;
|
|
283
|
+
}, veilColor?: Vec3, veilAlpha?: number, temporal?: {
|
|
284
|
+
readonly reprojection: Float32Array;
|
|
285
|
+
readonly blend: number;
|
|
286
|
+
}): void;
|
|
287
|
+
dispose(): void;
|
|
288
|
+
}
|