@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,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A device, a configured canvas, and loss adapted to the shape the renderer already handles.
|
|
3
|
+
*
|
|
4
|
+
* Everything WebGPU-specific about *owning* a drawing surface lives here, so that
|
|
5
|
+
* `webgpu/renderer.ts` is about drawing and this is about the context it draws into. The
|
|
6
|
+
* split matters because these two fail for unrelated reasons: a device is lost by a driver
|
|
7
|
+
* reset the page did not cause, and a frame is wrong because of something the frame did.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Take a canvas and a device, and hand back the surface the renderer draws into.
|
|
11
|
+
*
|
|
12
|
+
* **Device loss is a promise, and that is a different shape from the event WebGL gives.**
|
|
13
|
+
* `webglcontextlost` fires once and is missed by anybody not already listening;
|
|
14
|
+
* `device.lost` is a promise that resolves once, never rejects, and stays resolved. A
|
|
15
|
+
* renderer constructed after the loss therefore gets no event at all from the WebGL-shaped
|
|
16
|
+
* mental model, and would draw into a dead device forever without ever being told.
|
|
17
|
+
*
|
|
18
|
+
* So the resolution is latched here and `onLost` fires immediately for a listener that
|
|
19
|
+
* arrives late. Adapting it once, at the boundary, is why no call site has to know that the
|
|
20
|
+
* two APIs disagree about what a failure looks like — the same argument `contextLoss.ts`
|
|
21
|
+
* makes for owning the WebGL half rather than letting a game listen for it.
|
|
22
|
+
*
|
|
23
|
+
* **Disposal is not loss.** Tearing a surface down calls `destroy()`, which resolves
|
|
24
|
+
* `device.lost` exactly as a driver reset would. Reporting that to listeners would tell a
|
|
25
|
+
* consumer its GPU had failed every time it unmounted a canvas on purpose, so a disposed
|
|
26
|
+
* surface stays silent.
|
|
27
|
+
*/
|
|
28
|
+
export function createGpuSurface(canvas, device) {
|
|
29
|
+
const context = canvas.getContext('webgpu');
|
|
30
|
+
if (context === null) {
|
|
31
|
+
throw new Error('createGpuSurface: the canvas would not give a webgpu context');
|
|
32
|
+
}
|
|
33
|
+
const format = navigator.gpu.getPreferredCanvasFormat();
|
|
34
|
+
const listeners = [];
|
|
35
|
+
let lost = false;
|
|
36
|
+
let disposed = false;
|
|
37
|
+
void device.lost.then(() => {
|
|
38
|
+
if (disposed)
|
|
39
|
+
return;
|
|
40
|
+
lost = true;
|
|
41
|
+
for (const listener of listeners)
|
|
42
|
+
listener();
|
|
43
|
+
});
|
|
44
|
+
/*
|
|
45
|
+
* **Say what the device rejected, because otherwise nothing does.**
|
|
46
|
+
*
|
|
47
|
+
* WebGPU does not throw on a bad resource. `createBindGroup` with a mismatched sample type
|
|
48
|
+
* returns an object that is invalid, every pass built on it records nothing, and the frame
|
|
49
|
+
* still presents — so the failure arrives as a picture that is merely wrong, and gets
|
|
50
|
+
* attributed to shaders, matrices and orientation in that order. That is not hypothetical:
|
|
51
|
+
* the shadow peel cost three implementations across two sessions, all of them measuring the
|
|
52
|
+
* frame produced by a pass that could not run, and one line of this would have named it.
|
|
53
|
+
* The water shader's invalid pipeline was the same silence.
|
|
54
|
+
*
|
|
55
|
+
* **Measured, because when it arrives decides whether it is any use.** Making the peel's
|
|
56
|
+
* exact mistake and listening gives *nothing* at `createBindGroup` — Dawn defers it — and
|
|
57
|
+
* then three messages at `queue.submit`, root cause first:
|
|
58
|
+
*
|
|
59
|
+
* None of the supported sample types (UnfilterableFloat|Depth) of
|
|
60
|
+
* [Texture "shadow.static"] match the expected sample types (Float).
|
|
61
|
+
* [Invalid BindGroup (unlabeled)] is invalid due to a previous error.
|
|
62
|
+
* [Invalid CommandBuffer] is invalid due to a previous error.
|
|
63
|
+
*
|
|
64
|
+
* So the useful line is there, and it is there a frame later than the call that caused it.
|
|
65
|
+
* **Label every resource**, because that first message is only readable thanks to
|
|
66
|
+
* `shadow.static` being one.
|
|
67
|
+
*
|
|
68
|
+
* `console.error` rather than a throw, and for that reason: submission is inside the frame
|
|
69
|
+
* loop, and the house rule is that nothing throws there. Once per distinct message, because
|
|
70
|
+
* an invalid bind group set per draw arrives every frame — the same argument `warnedFull`
|
|
71
|
+
* makes in the renderer.
|
|
72
|
+
*/
|
|
73
|
+
const said = new Set();
|
|
74
|
+
device.addEventListener('uncapturederror', (event) => {
|
|
75
|
+
const { error } = event;
|
|
76
|
+
const message = error.message;
|
|
77
|
+
if (disposed || said.has(message))
|
|
78
|
+
return;
|
|
79
|
+
said.add(message);
|
|
80
|
+
console.error(`[driftengine] the GPU rejected something, and drew nothing for it:\n${message}`);
|
|
81
|
+
});
|
|
82
|
+
const configure = (width, height) => {
|
|
83
|
+
if (disposed)
|
|
84
|
+
return;
|
|
85
|
+
canvas.width = width;
|
|
86
|
+
canvas.height = height;
|
|
87
|
+
/*
|
|
88
|
+
* `opaque` rather than `premultiplied`: this engine draws a sky behind everything and
|
|
89
|
+
* has no use for a transparent canvas, and the opaque path is the one a compositor can
|
|
90
|
+
* take without a blend.
|
|
91
|
+
*/
|
|
92
|
+
context.configure({ device, format, alphaMode: 'opaque' });
|
|
93
|
+
};
|
|
94
|
+
configure(canvas.width, canvas.height);
|
|
95
|
+
return {
|
|
96
|
+
device,
|
|
97
|
+
context,
|
|
98
|
+
canvas,
|
|
99
|
+
format,
|
|
100
|
+
get lost() {
|
|
101
|
+
return lost;
|
|
102
|
+
},
|
|
103
|
+
onLost(listener) {
|
|
104
|
+
/* Late is the normal case for a renderer built after a driver reset, not an edge one. */
|
|
105
|
+
if (lost) {
|
|
106
|
+
listener();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
listeners.push(listener);
|
|
110
|
+
},
|
|
111
|
+
configure,
|
|
112
|
+
dispose() {
|
|
113
|
+
if (disposed)
|
|
114
|
+
return;
|
|
115
|
+
disposed = true;
|
|
116
|
+
listeners.length = 0;
|
|
117
|
+
context.unconfigure();
|
|
118
|
+
device.destroy();
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One recorded draw, in the only shape this backend ever issues.
|
|
3
|
+
*
|
|
4
|
+
* Sampled across three unrelated verbs — panels, particles, wind streaks — the sequence is the
|
|
5
|
+
* same every time: a pipeline, a bind group with up to two dynamic offsets, some vertex
|
|
6
|
+
* buffers, perhaps an index buffer, then a draw. Nothing in it is specific to what is being
|
|
7
|
+
* drawn except the values.
|
|
8
|
+
*
|
|
9
|
+
* So the frame graph does not need to know what a plume is. It records these fields and
|
|
10
|
+
* replays them, which is what turns migrating twenty-three verbs into twenty-three call-site
|
|
11
|
+
* edits rather than twenty-three implementations.
|
|
12
|
+
*/
|
|
13
|
+
export interface DrawCommand {
|
|
14
|
+
pipeline: GPURenderPipeline | null;
|
|
15
|
+
bindGroup: GPUBindGroup | null;
|
|
16
|
+
/** Dynamic offsets, held as two numbers rather than an array so a reset stays free. */
|
|
17
|
+
offsetA: number;
|
|
18
|
+
offsetB: number;
|
|
19
|
+
offsetCount: number;
|
|
20
|
+
/** Fixed length; `vertexCount` says how many slots are live. */
|
|
21
|
+
readonly vertexBuffers: (GPUBuffer | null)[];
|
|
22
|
+
vertexCount: number;
|
|
23
|
+
indexBuffer: GPUBuffer | null;
|
|
24
|
+
indexed: boolean;
|
|
25
|
+
count: number;
|
|
26
|
+
instances: number;
|
|
27
|
+
}
|
|
28
|
+
export interface CommandPool {
|
|
29
|
+
commands: DrawCommand[];
|
|
30
|
+
taken: number;
|
|
31
|
+
/** The most any frame has taken, so growth converges instead of repeating. */
|
|
32
|
+
highWater: number;
|
|
33
|
+
}
|
|
34
|
+
export declare function createCommandPool(capacity: number): CommandPool;
|
|
35
|
+
/**
|
|
36
|
+
* Hand out the next command, growing if a frame overruns.
|
|
37
|
+
*
|
|
38
|
+
* The entry is **not cleared**. Every caller fills every field it uses, and clearing here would
|
|
39
|
+
* be a write per field per draw for no reader — the same reasoning the node arena uses.
|
|
40
|
+
*/
|
|
41
|
+
export declare function takeCommand(pool: CommandPool): number;
|
|
42
|
+
/** Empty the pool for a new frame. Keeps every entry; that is the whole point. */
|
|
43
|
+
export declare function resetPool(pool: CommandPool): void;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One recorded draw, in the only shape this backend ever issues.
|
|
3
|
+
*
|
|
4
|
+
* Sampled across three unrelated verbs — panels, particles, wind streaks — the sequence is the
|
|
5
|
+
* same every time: a pipeline, a bind group with up to two dynamic offsets, some vertex
|
|
6
|
+
* buffers, perhaps an index buffer, then a draw. Nothing in it is specific to what is being
|
|
7
|
+
* drawn except the values.
|
|
8
|
+
*
|
|
9
|
+
* So the frame graph does not need to know what a plume is. It records these fields and
|
|
10
|
+
* replays them, which is what turns migrating twenty-three verbs into twenty-three call-site
|
|
11
|
+
* edits rather than twenty-three implementations.
|
|
12
|
+
*/
|
|
13
|
+
/** The most vertex buffers any verb on this backend binds is three. Four leaves a margin. */
|
|
14
|
+
const VERTEX_BUFFER_SLOTS = 4;
|
|
15
|
+
function emptyCommand() {
|
|
16
|
+
return {
|
|
17
|
+
pipeline: null,
|
|
18
|
+
bindGroup: null,
|
|
19
|
+
offsetA: 0,
|
|
20
|
+
offsetB: 0,
|
|
21
|
+
offsetCount: 0,
|
|
22
|
+
vertexBuffers: new Array(VERTEX_BUFFER_SLOTS).fill(null),
|
|
23
|
+
vertexCount: 0,
|
|
24
|
+
indexBuffer: null,
|
|
25
|
+
indexed: false,
|
|
26
|
+
count: 0,
|
|
27
|
+
instances: 1,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function createCommandPool(capacity) {
|
|
31
|
+
const commands = [];
|
|
32
|
+
for (let i = 0; i < capacity; i += 1)
|
|
33
|
+
commands.push(emptyCommand());
|
|
34
|
+
return { commands, taken: 0, highWater: 0 };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Hand out the next command, growing if a frame overruns.
|
|
38
|
+
*
|
|
39
|
+
* The entry is **not cleared**. Every caller fills every field it uses, and clearing here would
|
|
40
|
+
* be a write per field per draw for no reader — the same reasoning the node arena uses.
|
|
41
|
+
*/
|
|
42
|
+
export function takeCommand(pool) {
|
|
43
|
+
const at = pool.taken;
|
|
44
|
+
while (at >= pool.commands.length)
|
|
45
|
+
pool.commands.push(emptyCommand());
|
|
46
|
+
pool.taken = at + 1;
|
|
47
|
+
if (pool.taken > pool.highWater)
|
|
48
|
+
pool.highWater = pool.taken;
|
|
49
|
+
return at;
|
|
50
|
+
}
|
|
51
|
+
/** Empty the pool for a new frame. Keeps every entry; that is the whole point. */
|
|
52
|
+
export function resetPool(pool) {
|
|
53
|
+
pool.taken = 0;
|
|
54
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Linear RGBA floats packed into whatever format the environment cube was actually allocated as. */
|
|
2
|
+
/** The packed texels and how wide one is, which is what a `writeTexture` layout needs. */
|
|
3
|
+
export interface PackedTexels {
|
|
4
|
+
readonly data: ArrayBufferView;
|
|
5
|
+
readonly bytesPerTexel: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Pack linear RGBA floats for `format`.
|
|
9
|
+
*
|
|
10
|
+
* **`writeTexture` does not convert, and that is the whole reason this exists.** Its `bytesPerRow`
|
|
11
|
+
* describes the *source* stride and it reads `width * bytesPerTexel-of-the-destination` bytes from
|
|
12
|
+
* each row — so float data handed to an eight-bit cube is a legal layout that reinterprets the raw
|
|
13
|
+
* bytes of the floats as unorm bytes. Nothing raises anything: no validation error, no device
|
|
14
|
+
* message, and a cube full of a plausible-looking environment.
|
|
15
|
+
*
|
|
16
|
+
* That is the 2026-08-14 family of WebGPU failure wearing its quietest face. The others at least
|
|
17
|
+
* invalidate a command buffer and leave an empty canvas; this one draws a picture.
|
|
18
|
+
*
|
|
19
|
+
* **Measured, because it was found by measuring rather than by reading.** On a uniform sky the
|
|
20
|
+
* other backend read 81 of 255 and this one read 45.7 from the same file. Neither number looks
|
|
21
|
+
* wrong on its own — the two backends being a control for each other is the only thing that
|
|
22
|
+
* separated them.
|
|
23
|
+
*
|
|
24
|
+
* **What it costs** is one conversion pass over six faces at load. **What would make it wrong** is
|
|
25
|
+
* a format this does not know, which is why the default arm throws rather than guessing: a guess
|
|
26
|
+
* here is exactly the silent picture this function exists to prevent.
|
|
27
|
+
*/
|
|
28
|
+
export declare function environmentTexels(pixels: Float32Array, format: GPUTextureFormat): PackedTexels;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/** Linear RGBA floats packed into whatever format the environment cube was actually allocated as. */
|
|
2
|
+
import { toHalfFloats } from '../../halfFloat.js';
|
|
3
|
+
/**
|
|
4
|
+
* Pack linear RGBA floats for `format`.
|
|
5
|
+
*
|
|
6
|
+
* **`writeTexture` does not convert, and that is the whole reason this exists.** Its `bytesPerRow`
|
|
7
|
+
* describes the *source* stride and it reads `width * bytesPerTexel-of-the-destination` bytes from
|
|
8
|
+
* each row — so float data handed to an eight-bit cube is a legal layout that reinterprets the raw
|
|
9
|
+
* bytes of the floats as unorm bytes. Nothing raises anything: no validation error, no device
|
|
10
|
+
* message, and a cube full of a plausible-looking environment.
|
|
11
|
+
*
|
|
12
|
+
* That is the 2026-08-14 family of WebGPU failure wearing its quietest face. The others at least
|
|
13
|
+
* invalidate a command buffer and leave an empty canvas; this one draws a picture.
|
|
14
|
+
*
|
|
15
|
+
* **Measured, because it was found by measuring rather than by reading.** On a uniform sky the
|
|
16
|
+
* other backend read 81 of 255 and this one read 45.7 from the same file. Neither number looks
|
|
17
|
+
* wrong on its own — the two backends being a control for each other is the only thing that
|
|
18
|
+
* separated them.
|
|
19
|
+
*
|
|
20
|
+
* **What it costs** is one conversion pass over six faces at load. **What would make it wrong** is
|
|
21
|
+
* a format this does not know, which is why the default arm throws rather than guessing: a guess
|
|
22
|
+
* here is exactly the silent picture this function exists to prevent.
|
|
23
|
+
*/
|
|
24
|
+
export function environmentTexels(pixels, format) {
|
|
25
|
+
switch (format) {
|
|
26
|
+
/* Already what the source is. No copy, because there is nothing to change. */
|
|
27
|
+
case 'rgba32float':
|
|
28
|
+
return { data: pixels, bytesPerTexel: 16 };
|
|
29
|
+
case 'rgba16float':
|
|
30
|
+
return { data: toHalf(pixels), bytesPerTexel: 8 };
|
|
31
|
+
case 'rgba8unorm':
|
|
32
|
+
return { data: toUnorm(pixels, false, false), bytesPerTexel: 4 };
|
|
33
|
+
case 'bgra8unorm':
|
|
34
|
+
return { data: toUnorm(pixels, true, false), bytesPerTexel: 4 };
|
|
35
|
+
/*
|
|
36
|
+
* An sRGB view decodes what it samples, so the byte stored has to be the *encoded* value or
|
|
37
|
+
* every environment comes back roughly twice as bright as the file. The engine's own scene
|
|
38
|
+
* targets are linear, so this arm is for a surface format a device chose rather than one this
|
|
39
|
+
* renderer asked for.
|
|
40
|
+
*/
|
|
41
|
+
case 'rgba8unorm-srgb':
|
|
42
|
+
return { data: toUnorm(pixels, false, true), bytesPerTexel: 4 };
|
|
43
|
+
case 'bgra8unorm-srgb':
|
|
44
|
+
return { data: toUnorm(pixels, true, true), bytesPerTexel: 4 };
|
|
45
|
+
default:
|
|
46
|
+
throw new Error(`environmentTexels: no packing for "${format}". Add one rather than letting a wrong ` +
|
|
47
|
+
'layout through — WebGPU accepts a mismatched stride without complaint and draws a ' +
|
|
48
|
+
'plausible picture from reinterpreted bytes.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function toHalf(pixels) {
|
|
52
|
+
return toHalfFloats(pixels);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Eight bits a channel, clipped at white.
|
|
56
|
+
*
|
|
57
|
+
* **Clipped rather than tone-mapped**, matching what the other backend does with a non-float cube
|
|
58
|
+
* and for the reason a bake documents at length: the cube stores radiance, and a curve applied here
|
|
59
|
+
* would be a viewing transform baked into stored light.
|
|
60
|
+
*/
|
|
61
|
+
function toUnorm(pixels, swapRedAndBlue, encodeSrgb) {
|
|
62
|
+
const texels = pixels.length / 4;
|
|
63
|
+
const out = new Uint8Array(texels * 4);
|
|
64
|
+
for (let texel = 0; texel < texels; texel++) {
|
|
65
|
+
for (let channel = 0; channel < 3; channel++) {
|
|
66
|
+
const linear = pixels[texel * 4 + channel] ?? 0;
|
|
67
|
+
const clipped = linear <= 0 ? 0 : linear >= 1 ? 1 : linear;
|
|
68
|
+
const value = encodeSrgb ? srgbEncode(clipped) : clipped;
|
|
69
|
+
const at = texel * 4 + (swapRedAndBlue ? 2 - channel : channel);
|
|
70
|
+
out[at] = Math.round(value * 255);
|
|
71
|
+
}
|
|
72
|
+
out[texel * 4 + 3] = 255;
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
/** The sRGB transfer function, in the direction that prepares a value for a decoding sampler. */
|
|
77
|
+
function srgbEncode(linear) {
|
|
78
|
+
return linear <= 0.0031308 ? linear * 12.92 : 1.055 * linear ** (1 / 2.4) - 0.055;
|
|
79
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { UniformFields } from './scatterPass.ts';
|
|
2
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The film pass: a thin wet layer — an oil slick, a puddle — lying over the world.
|
|
5
|
+
*
|
|
6
|
+
* Its own pass because it is its own material: view-dependent iridescence and a dissolving
|
|
7
|
+
* edge, neither of which the flat shader can express. `renderer.ts` says the rest, including
|
|
8
|
+
* why `sheen` is iridescence rather than wetness and where its usable range is.
|
|
9
|
+
*
|
|
10
|
+
* The geometry is an ordinary mesh, so the vertex layout is the flat pass's own — the shader
|
|
11
|
+
* reads position, normal, colour and a coverage weight, and the pipeline still has to describe
|
|
12
|
+
* every attribute the module declares.
|
|
13
|
+
*/
|
|
14
|
+
export declare const FILM_VERT_FIELDS: UniformFields;
|
|
15
|
+
export declare const FILM_VERT_SIZE: 128;
|
|
16
|
+
export declare const FILM_FRAG_FIELDS: UniformFields;
|
|
17
|
+
export declare const FILM_FRAG_SIZE: 144;
|
|
18
|
+
export declare function createFilmBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
|
|
19
|
+
/** Bound once against both rings; a dynamic offset per film. See `createPanelBindGroup`. */
|
|
20
|
+
export declare function createFilmBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer, reflection: GPUTextureView, sampler: GPUSampler): GPUBindGroup;
|
|
21
|
+
/**
|
|
22
|
+
* The pipeline.
|
|
23
|
+
*
|
|
24
|
+
* **Alpha over, depth tested, depth not written.** A slick lies on the surface it was built
|
|
25
|
+
* against instead of fighting it for the depth buffer, which is what `renderer.ts` says by
|
|
26
|
+
* turning `depthMask` off around the draw. Writing depth would let a translucent patch occlude
|
|
27
|
+
* whatever is drawn after it.
|
|
28
|
+
*/
|
|
29
|
+
export declare function filmPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, key: string, present: Readonly<Record<string, boolean>>): GPURenderPipeline;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { FILM_BINDINGS, FILM_FRAG_WGSL, FILM_VERT_WGSL, } from '../../shaders/generated/film.wgsl.js';
|
|
3
|
+
import { vertexBufferLayouts } from './buffers.js';
|
|
4
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
5
|
+
import { shaderModule } from './shaderModules.js';
|
|
6
|
+
/**
|
|
7
|
+
* The film pass: a thin wet layer — an oil slick, a puddle — lying over the world.
|
|
8
|
+
*
|
|
9
|
+
* Its own pass because it is its own material: view-dependent iridescence and a dissolving
|
|
10
|
+
* edge, neither of which the flat shader can express. `renderer.ts` says the rest, including
|
|
11
|
+
* why `sheen` is iridescence rather than wetness and where its usable range is.
|
|
12
|
+
*
|
|
13
|
+
* The geometry is an ordinary mesh, so the vertex layout is the flat pass's own — the shader
|
|
14
|
+
* reads position, normal, colour and a coverage weight, and the pipeline still has to describe
|
|
15
|
+
* every attribute the module declares.
|
|
16
|
+
*/
|
|
17
|
+
export const FILM_VERT_FIELDS = FILM_BINDINGS.FILM_VERT.fields;
|
|
18
|
+
export const FILM_VERT_SIZE = FILM_BINDINGS.FILM_VERT.uniformSize;
|
|
19
|
+
export const FILM_FRAG_FIELDS = FILM_BINDINGS.FILM_FRAG.fields;
|
|
20
|
+
export const FILM_FRAG_SIZE = FILM_BINDINGS.FILM_FRAG.uniformSize;
|
|
21
|
+
const VERT_BINDING = FILM_BINDINGS.FILM_VERT.uniforms;
|
|
22
|
+
const FRAG_BINDING = FILM_BINDINGS.FILM_FRAG.uniforms;
|
|
23
|
+
const REFLECTION = FILM_BINDINGS.FILM_FRAG.textures.uReflectionMap;
|
|
24
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
25
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
26
|
+
export function createFilmBindGroupLayout(device) {
|
|
27
|
+
return device.createBindGroupLayout({
|
|
28
|
+
label: 'film.layout',
|
|
29
|
+
entries: [
|
|
30
|
+
{
|
|
31
|
+
binding: VERT_BINDING,
|
|
32
|
+
visibility: VISIBILITY_VERTEX,
|
|
33
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: FILM_VERT_SIZE },
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
binding: FRAG_BINDING,
|
|
37
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
38
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: FILM_FRAG_SIZE },
|
|
39
|
+
},
|
|
40
|
+
/*
|
|
41
|
+
* The mirror is an ordinary colour target, so a filtering sampler is right here — unlike
|
|
42
|
+
* every `...ShadowMap`, which is a depth format and cannot take one. `depthPass.ts` has
|
|
43
|
+
* the message the device gives when the two are confused.
|
|
44
|
+
*/
|
|
45
|
+
{ binding: REFLECTION.texture, visibility: VISIBILITY_FRAGMENT, texture: {} },
|
|
46
|
+
{ binding: REFLECTION.sampler, visibility: VISIBILITY_FRAGMENT, sampler: {} },
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/** Bound once against both rings; a dynamic offset per film. See `createPanelBindGroup`. */
|
|
51
|
+
export function createFilmBindGroup(device, layout, vertices, fragments, reflection, sampler) {
|
|
52
|
+
return device.createBindGroup({
|
|
53
|
+
label: 'film.bindGroup',
|
|
54
|
+
layout,
|
|
55
|
+
entries: [
|
|
56
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: FILM_VERT_SIZE } },
|
|
57
|
+
{ binding: FRAG_BINDING, resource: { buffer: fragments, size: FILM_FRAG_SIZE } },
|
|
58
|
+
{ binding: REFLECTION.texture, resource: reflection },
|
|
59
|
+
{ binding: REFLECTION.sampler, resource: sampler },
|
|
60
|
+
],
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The pipeline.
|
|
65
|
+
*
|
|
66
|
+
* **Alpha over, depth tested, depth not written.** A slick lies on the surface it was built
|
|
67
|
+
* against instead of fighting it for the depth buffer, which is what `renderer.ts` says by
|
|
68
|
+
* turning `depthMask` off around the draw. Writing depth would let a translucent patch occlude
|
|
69
|
+
* whatever is drawn after it.
|
|
70
|
+
*/
|
|
71
|
+
export function filmPipeline(cache, device, layout, key, present) {
|
|
72
|
+
return cache.get(key, () => ({
|
|
73
|
+
label: key,
|
|
74
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
75
|
+
vertex: {
|
|
76
|
+
module: shaderModule(device, { label: 'film.vert', code: FILM_VERT_WGSL }),
|
|
77
|
+
entryPoint: 'main',
|
|
78
|
+
buffers: vertexBufferLayouts(present),
|
|
79
|
+
},
|
|
80
|
+
fragment: {
|
|
81
|
+
module: shaderModule(device, { label: 'film.frag', code: FILM_FRAG_WGSL }),
|
|
82
|
+
entryPoint: 'main',
|
|
83
|
+
targets: [
|
|
84
|
+
{
|
|
85
|
+
format: cache.format,
|
|
86
|
+
blend: {
|
|
87
|
+
color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
88
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
primitive: { topology: 'triangle-list', cullMode: 'back' },
|
|
94
|
+
multisample: { count: cache.sampleCount },
|
|
95
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { PipelineCache } from './pipelineCache.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The flat pipeline: the shader that draws the world.
|
|
4
|
+
*
|
|
5
|
+
* Built from the generated WGSL, with the bind group layout, the uniform sizes and every
|
|
6
|
+
* byte offset taken from the same generated file. **Nothing here restates a number the
|
|
7
|
+
* generator already knows** — a binding or an offset written twice is one that can disagree,
|
|
8
|
+
* and the disagreement draws a picture rather than raising an error.
|
|
9
|
+
*
|
|
10
|
+
* **Driven by the variant, not fixed to one.** `flatFrag` is sixteen permutations and they
|
|
11
|
+
* are not interchangeable: the one that compiles in the directional shadow path declares
|
|
12
|
+
* three more samplers and a 1,104-byte uniform block against the plain one's 1,072. Building
|
|
13
|
+
* the right shader and binding it against the wrong layout is a mistake that validates,
|
|
14
|
+
* draws, and is wrong, so the layout is derived from the variant every time.
|
|
15
|
+
*/
|
|
16
|
+
/** A key into `FLAT_FRAG_WGSL`: the flags that are on, sorted, joined by `+`, or `none`. */
|
|
17
|
+
export type FlatVariant = string;
|
|
18
|
+
/** The four flags `flatFrag` permutes on, which is what decides which of sixteen to build. */
|
|
19
|
+
export interface FlatVariantFlags {
|
|
20
|
+
readonly directionalShadows: boolean;
|
|
21
|
+
readonly environmentProbe: boolean;
|
|
22
|
+
readonly nightEmissive: boolean;
|
|
23
|
+
readonly pointShadows: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The key for a set of flags.
|
|
27
|
+
*
|
|
28
|
+
* **The rule is `variantKey` in `scripts/wgsl.ts` and this is a second statement of it**, which
|
|
29
|
+
* is exactly the kind of restatement that drifts — except that a drift here cannot be silent:
|
|
30
|
+
* `flatFragmentBindings` throws on a key the generated table does not hold, at construction,
|
|
31
|
+
* naming the key it looked for. `scripts/` is a build tool and nothing under `src/` may import
|
|
32
|
+
* it, so a copy is the only option and a loud one is the acceptable form of it.
|
|
33
|
+
*/
|
|
34
|
+
export declare function flatVariant(flags: FlatVariantFlags): FlatVariant;
|
|
35
|
+
/** Where one sampler's two halves ended up. */
|
|
36
|
+
export interface TextureBinding {
|
|
37
|
+
readonly texture: number;
|
|
38
|
+
readonly sampler: number;
|
|
39
|
+
readonly type: string;
|
|
40
|
+
}
|
|
41
|
+
/** What the generator recorded about one shader stage. */
|
|
42
|
+
export interface StageBindings {
|
|
43
|
+
readonly uniforms: number;
|
|
44
|
+
readonly uniformSize: number;
|
|
45
|
+
/**
|
|
46
|
+
* Byte offsets, and for an array the shape a `std140` block gives it.
|
|
47
|
+
*
|
|
48
|
+
* `length` and `stride` are present only on arrays, and `stride` is not `size / length`:
|
|
49
|
+
* every element gets its own sixteen-byte slot whatever it holds, so a `float[10]` is 160
|
|
50
|
+
* bytes. A writer that assumed packing would put ten lights in the space of two and a half
|
|
51
|
+
* and raise nothing, which is why the generator emits the number rather than leaving it to
|
|
52
|
+
* be derived.
|
|
53
|
+
*/
|
|
54
|
+
readonly fields: Readonly<Record<string, {
|
|
55
|
+
readonly offset: number;
|
|
56
|
+
readonly size: number;
|
|
57
|
+
readonly length?: number;
|
|
58
|
+
readonly stride?: number;
|
|
59
|
+
}>>;
|
|
60
|
+
readonly textures: Readonly<Record<string, TextureBinding>>;
|
|
61
|
+
}
|
|
62
|
+
/** The key for a set of vertex flags: the same rule `variantKey` uses, flags on, sorted, joined. */
|
|
63
|
+
export declare function flatVertexKey(skinned: boolean, morphed: boolean, instanced?: boolean): string;
|
|
64
|
+
/** Everything the generator recorded about one variant of the vertex stage. */
|
|
65
|
+
export declare function flatVertexBindings(skinned: boolean, morphed?: boolean, instanced?: boolean): StageBindings;
|
|
66
|
+
export declare const FLAT_VERT_FIELDS: {
|
|
67
|
+
readonly uViewProj: {
|
|
68
|
+
readonly offset: 0;
|
|
69
|
+
readonly size: 64;
|
|
70
|
+
readonly type: "mat4";
|
|
71
|
+
};
|
|
72
|
+
readonly uHasTangents: {
|
|
73
|
+
readonly offset: 64;
|
|
74
|
+
readonly size: 4;
|
|
75
|
+
readonly type: "int";
|
|
76
|
+
};
|
|
77
|
+
readonly uLightViewProj: {
|
|
78
|
+
readonly offset: 80;
|
|
79
|
+
readonly size: 64;
|
|
80
|
+
readonly type: "mat4";
|
|
81
|
+
};
|
|
82
|
+
readonly uUvScale: {
|
|
83
|
+
readonly offset: 144;
|
|
84
|
+
readonly size: 8;
|
|
85
|
+
readonly type: "vec2";
|
|
86
|
+
};
|
|
87
|
+
readonly uModel: {
|
|
88
|
+
readonly offset: 160;
|
|
89
|
+
readonly size: 64;
|
|
90
|
+
readonly type: "mat4";
|
|
91
|
+
};
|
|
92
|
+
readonly uTint: {
|
|
93
|
+
readonly offset: 224;
|
|
94
|
+
readonly size: 12;
|
|
95
|
+
readonly type: "vec3";
|
|
96
|
+
};
|
|
97
|
+
readonly uWindDirection: {
|
|
98
|
+
readonly offset: 240;
|
|
99
|
+
readonly size: 8;
|
|
100
|
+
readonly type: "vec2";
|
|
101
|
+
};
|
|
102
|
+
readonly uWindSpeed: {
|
|
103
|
+
readonly offset: 248;
|
|
104
|
+
readonly size: 4;
|
|
105
|
+
readonly type: "float";
|
|
106
|
+
};
|
|
107
|
+
readonly uWindGust: {
|
|
108
|
+
readonly offset: 252;
|
|
109
|
+
readonly size: 4;
|
|
110
|
+
readonly type: "float";
|
|
111
|
+
};
|
|
112
|
+
readonly uWindTime: {
|
|
113
|
+
readonly offset: 256;
|
|
114
|
+
readonly size: 4;
|
|
115
|
+
readonly type: "float";
|
|
116
|
+
};
|
|
117
|
+
readonly uWindSpatialPhase: {
|
|
118
|
+
readonly offset: 264;
|
|
119
|
+
readonly size: 8;
|
|
120
|
+
readonly type: "vec2";
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* The **largest** variant's block, because one ring serves every draw.
|
|
125
|
+
*
|
|
126
|
+
* A ring strided for the plain block would leave a morphed draw writing its weights into the next
|
|
127
|
+
* slot, which is a scrambled neighbour rather than an error. The unused tail on a plain draw is
|
|
128
|
+
* 144 bytes a slot and is what a single ring costs.
|
|
129
|
+
*/
|
|
130
|
+
export declare const FLAT_VERT_SIZE: number;
|
|
131
|
+
/** Everything the generator recorded about one permutation of the fragment stage. */
|
|
132
|
+
export declare function flatFragmentBindings(variant: FlatVariant): StageBindings;
|
|
133
|
+
/** The depth format both backends compare with. */
|
|
134
|
+
export { DEPTH_FORMAT } from '../../depthConvention.ts';
|
|
135
|
+
/**
|
|
136
|
+
* The layout this variant binds against.
|
|
137
|
+
*
|
|
138
|
+
* The vertex block is **dynamic**, because every draw supplies its own model matrix and tint
|
|
139
|
+
* from its own slot of one buffer. The fragment block is not: it holds the lights, the fog
|
|
140
|
+
* and the camera, settled once by `bindMeshPass` and unchanged between draws.
|
|
141
|
+
*/
|
|
142
|
+
export declare function createFlatBindGroupLayout(device: GPUDevice, variant: FlatVariant, skinned?: boolean, morphed?: boolean): GPUBindGroupLayout;
|
|
143
|
+
/**
|
|
144
|
+
* Bind the buffers and one view per declared texture.
|
|
145
|
+
*
|
|
146
|
+
* `resolve` is asked for a view by the shader's own name for it, so a caller supplies the
|
|
147
|
+
* shadow maps it has and a stand-in for the rest. **Every declared binding must be filled
|
|
148
|
+
* even when the shader never samples it** — `uAlbedoEnabled` is zero for nearly all geometry
|
|
149
|
+
* and WebGPU still requires something there, which is why `renderer.ts` keeps an
|
|
150
|
+
* `emptyTexture2D` for the same reason on the other side.
|
|
151
|
+
*/
|
|
152
|
+
export declare function createFlatBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, perDraw: GPUBuffer, perFrame: GPUBuffer, resolve: (name: string) => {
|
|
153
|
+
view: GPUTextureView;
|
|
154
|
+
sampler: GPUSampler;
|
|
155
|
+
},
|
|
156
|
+
/** The palette view for a skinned bind group, or null for an unskinned one. */
|
|
157
|
+
palette?: GPUTextureView | null,
|
|
158
|
+
/** The delta view for a morphed bind group, or null for an unmorphed one. */
|
|
159
|
+
deltas?: GPUTextureView | null): GPUBindGroup;
|
|
160
|
+
/**
|
|
161
|
+
* The pipeline, cached by the state that distinguishes it.
|
|
162
|
+
*
|
|
163
|
+
* The key names the variant and which optional attributes the mesh supplied, because those
|
|
164
|
+
* two decide the fragment module and the vertex layout. Built once per mesh at construction
|
|
165
|
+
* time rather than per frame, which is the rule `PipelineCache` exists to keep.
|
|
166
|
+
*/
|
|
167
|
+
export declare function flatPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, key: string, present: Readonly<Record<string, boolean>>,
|
|
168
|
+
/**
|
|
169
|
+
* Alpha-blended, for `drawTranslucentMesh`.
|
|
170
|
+
*
|
|
171
|
+
* **A second pipeline rather than a flag on the first**, because blend state is baked into a
|
|
172
|
+
* WebGPU pipeline where WebGL2 toggles it around the draw with `gl.enable(BLEND)`. Keyed
|
|
173
|
+
* separately, so one mesh drawn both ways gets both and neither is rebuilt per frame.
|
|
174
|
+
*
|
|
175
|
+
* Depth still written, matching the other backend: `drawTranslucentMesh` there leaves
|
|
176
|
+
* `depthMask` alone and only turns blending on. A translucent part of a loaded model is a
|
|
177
|
+
* pane of glass in a solid object, not a particle, and it has to occlude what is behind it
|
|
178
|
+
* for the rest of the model to sort correctly.
|
|
179
|
+
*/
|
|
180
|
+
translucent?: boolean,
|
|
181
|
+
/** Whether this pipeline reads a joint palette. See `FlatVertexOptions`. */
|
|
182
|
+
skinned?: boolean,
|
|
183
|
+
/** Whether this pipeline reads morph deltas. See `FlatVertexOptions`. */
|
|
184
|
+
morphed?: boolean,
|
|
185
|
+
/**
|
|
186
|
+
* Whether this pipeline writes depth, and which coplanar layer it draws on.
|
|
187
|
+
*
|
|
188
|
+
* **Both are pipeline state here and per-draw state on the other backend**, which is why they
|
|
189
|
+
* arrive as arguments and why the caller's key has to carry them: two draws of one mesh that
|
|
190
|
+
* differ only in these would otherwise share a cached pipeline and the second would silently
|
|
191
|
+
* get the first one's depth behaviour.
|
|
192
|
+
*/
|
|
193
|
+
depthWrite?: boolean, depthLayer?: number,
|
|
194
|
+
/** Whether placement and tint arrive per instance. See `FlatVertexOptions`. */
|
|
195
|
+
instanced?: boolean,
|
|
196
|
+
/** Which order-independent buffer this pipeline writes, if any. The key must carry it. */
|
|
197
|
+
oit?: OitTarget): GPURenderPipeline;
|
|
198
|
+
/**
|
|
199
|
+
* The same pipeline, compiled off the main thread.
|
|
200
|
+
*
|
|
201
|
+
* **Preferred by everything that builds a mesh**, which is all of them: `createRenderPipeline`
|
|
202
|
+
* defers the shader compile to the first draw, so a scene that builds its meshes and then
|
|
203
|
+
* renders pays for every one of them inside a single frame. On a phone that is seconds of a
|
|
204
|
+
* blocked GPU queue with an idle main thread, which is invisible to every timer that is not
|
|
205
|
+
* this one. The descriptor is identical; only when the driver does the work changes.
|
|
206
|
+
*/
|
|
207
|
+
export declare function flatPipelineAsync(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout, variant: FlatVariant, key: string, present: Readonly<Record<string, boolean>>, translucent?: boolean,
|
|
208
|
+
/** Whether this pipeline reads a joint palette. See `FlatVertexOptions`. */
|
|
209
|
+
skinned?: boolean,
|
|
210
|
+
/** Whether this pipeline reads morph deltas. See `FlatVertexOptions`. */
|
|
211
|
+
morphed?: boolean): Promise<GPURenderPipeline>;
|
|
212
|
+
/** Which of the two order-independent buffers a pipeline writes, or neither. */
|
|
213
|
+
export type OitTarget = 'none' | 'accum' | 'reveal';
|