@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,536 @@
|
|
|
1
|
+
/** Static GPU mesh: interleaving is skipped in favor of three tight buffers. */
|
|
2
|
+
|
|
3
|
+
import { MorphTexture } from './backend/webgl2/morphTexture.ts';
|
|
4
|
+
import { ABSENT_ATTRIBUTE } from './vertexDefaults.ts';
|
|
5
|
+
import { UPLOAD_BYTES_PER_STEP } from './uploadStep.ts';
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* `MeshData` and its validator live in `@driftengine/drft`, because the container's whole
|
|
9
|
+
* job is to carry one and the format package must be readable by something that never
|
|
10
|
+
* draws. Re-exported here so every consumer that took them from the renderer still can.
|
|
11
|
+
*/
|
|
12
|
+
import { boundsOfPositions, createBounds } from '../math/bounds.ts';
|
|
13
|
+
import type { Bounds } from '../math/bounds.ts';
|
|
14
|
+
|
|
15
|
+
export type { MeshData } from '@driftengine/drft';
|
|
16
|
+
export { validateMeshData } from '@driftengine/drft';
|
|
17
|
+
import type { MeshData } from '@driftengine/drft';
|
|
18
|
+
import { validateMeshData } from '@driftengine/drft';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The roughness a mesh that never mentions one is shaded with.
|
|
22
|
+
*
|
|
23
|
+
* Solved rather than picked: it is the roughness whose normalised lobe has the same
|
|
24
|
+
* half-power width — 6.88 degrees — as the fixed `pow(ndh, 96)` this engine used before
|
|
25
|
+
* roughness existed. A world built before the attribute therefore keeps the highlight it
|
|
26
|
+
* was authored against, in width as well as in strength.
|
|
27
|
+
*
|
|
28
|
+
* It was 0.28, which claimed to do that and did not: 0.28 is 2.9 degrees, less than half
|
|
29
|
+
* as wide, and against the un-normalised lobe of the time it peaked 52 times higher as
|
|
30
|
+
* well. Both halves are fixed — `flat.ts` normalises the lobe, and this is the width that
|
|
31
|
+
* actually matches.
|
|
32
|
+
*/
|
|
33
|
+
/* The engine's fixed lobe, stated once in `vertexDefaults.ts` so both backends read one number. */
|
|
34
|
+
const DEFAULT_ROUGHNESS = ABSENT_ATTRIBUTE['roughness']?.[0] ?? 0.4277;
|
|
35
|
+
|
|
36
|
+
/** Attribute locations are fixed engine-wide (`layout(location = n)` in GLSL). */
|
|
37
|
+
const ATTR_POSITION = 0;
|
|
38
|
+
const ATTR_NORMAL = 1;
|
|
39
|
+
const ATTR_COLOR = 2;
|
|
40
|
+
const ATTR_EMISSIVE = 3;
|
|
41
|
+
const ATTR_SPECULAR = 4;
|
|
42
|
+
const ATTR_UV = 5;
|
|
43
|
+
const ATTR_EMISSIVE_COLOR = 6;
|
|
44
|
+
const ATTR_ROUGHNESS = 7;
|
|
45
|
+
const ATTR_GRAIN = 8;
|
|
46
|
+
const ATTR_RELIEF = 9;
|
|
47
|
+
/** Four components, which makes it the widest attribute the layout carries. See `generateTangents`. */
|
|
48
|
+
const ATTR_TANGENT = 10;
|
|
49
|
+
/* Skinning. Thirteen of WebGL2's guaranteed sixteen attributes are spoken for with these two. */
|
|
50
|
+
const ATTR_JOINTS = 11;
|
|
51
|
+
/*
|
|
52
|
+
* The four-lane per-vertex channel, and the fourteenth attribute.
|
|
53
|
+
*
|
|
54
|
+
* **13 is the last location the plain and skinned variants can both spare.** Skinning holds 11 and
|
|
55
|
+
* 12; an instanced draw holds 11 through 15 and therefore cannot carry this at all, which is why
|
|
56
|
+
* `flatVert` throws on the pair rather than dropping the attribute. A silent drop is a consumer
|
|
57
|
+
* setting sway, watching nothing move, and having nothing to read about why.
|
|
58
|
+
*/
|
|
59
|
+
const ATTR_CHANNEL = 13;
|
|
60
|
+
const ATTR_WEIGHTS = 12;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* One absent attribute's constant, at the width the table gave it.
|
|
64
|
+
*
|
|
65
|
+
* **The four-component arm is the one that was missing**, and it was missing in both draw paths
|
|
66
|
+
* because they held a copy of this each. `vertexAttrib3f` leaves `w` at its default of **1**, so a
|
|
67
|
+
* four-float entry in `ABSENT_ATTRIBUTE` reached the driver with its last lane overwritten:
|
|
68
|
+
* `channel`'s `(0, 1, 1, 0)` arrived as `(0, 1, 1, 1)`. Nothing showed it — that lane is the
|
|
69
|
+
* reserved one and nothing reads it, and `tangents`' `(1, 0, 0, 1)` happens to want the default —
|
|
70
|
+
* but `joints` and `weights` are four-wide too, and the table is meant to be the one place an
|
|
71
|
+
* absent attribute's meaning is written down. A table nothing applies faithfully is not a source
|
|
72
|
+
* of truth. `vertexDefaults.test.ts` pins the tuples; this is what pins that they arrive.
|
|
73
|
+
*/
|
|
74
|
+
function applyConstant(
|
|
75
|
+
gl: WebGL2RenderingContext,
|
|
76
|
+
location: number,
|
|
77
|
+
value: readonly number[],
|
|
78
|
+
): void {
|
|
79
|
+
const [x = 0, y = 0, z = 0, w = 0] = value;
|
|
80
|
+
if (value.length === 1) gl.vertexAttrib1f(location, x);
|
|
81
|
+
else if (value.length === 2) gl.vertexAttrib2f(location, x, y);
|
|
82
|
+
else if (value.length === 3) gl.vertexAttrib3f(location, x, y, z);
|
|
83
|
+
else gl.vertexAttrib4f(location, x, y, z, w);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export class Mesh {
|
|
87
|
+
private readonly vao: WebGLVertexArrayObject;
|
|
88
|
+
private readonly buffers: WebGLBuffer[] = [];
|
|
89
|
+
/**
|
|
90
|
+
* The position and normal buffers, kept so `update` can rewrite them.
|
|
91
|
+
*
|
|
92
|
+
* Null unless the mesh was created `dynamic`. A mesh that never deforms pays nothing for
|
|
93
|
+
* this — two references, and only where a consumer asked.
|
|
94
|
+
*/
|
|
95
|
+
private readonly deformable: { positions: WebGLBuffer; normals: WebGLBuffer } | null = null;
|
|
96
|
+
/** How many floats the position buffer holds, so an update of the wrong size is refused. */
|
|
97
|
+
private readonly positionFloats: number;
|
|
98
|
+
private readonly indexCount: number;
|
|
99
|
+
/**
|
|
100
|
+
* The constant values this mesh's *absent* attributes are shaded with, re-applied on
|
|
101
|
+
* every draw.
|
|
102
|
+
*
|
|
103
|
+
* **`vertexAttrib*f` is context state, not vertex-array state.** `enableVertexAttribArray`
|
|
104
|
+
* and the pointers belong to the VAO and are restored when it is bound; the constant a
|
|
105
|
+
* *disabled* attribute reads is global and is not. So setting these once in the
|
|
106
|
+
* constructor and trusting the VAO to carry them is wrong: it makes a mesh's appearance
|
|
107
|
+
* depend on which mesh was constructed last, which is a property of unrelated code
|
|
108
|
+
* somewhere else in the frame.
|
|
109
|
+
*
|
|
110
|
+
* It survived because every mesh here happens to want the same constants, so the global
|
|
111
|
+
* values are correct by coincidence. The first mesh to want a different roughness would
|
|
112
|
+
* have silently changed the shading of every mesh that never mentioned one — a defect
|
|
113
|
+
* with no error, no warning and no plausible connection to its cause.
|
|
114
|
+
*
|
|
115
|
+
* Re-applying per draw costs four calls on a mesh that omits everything and none on a
|
|
116
|
+
* mesh that supplies it all, and makes a draw depend on nothing but itself.
|
|
117
|
+
*/
|
|
118
|
+
private readonly constants: { readonly location: number; readonly value: readonly number[] }[] =
|
|
119
|
+
[];
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* How big this mesh is, in its own space.
|
|
123
|
+
*
|
|
124
|
+
* Measured here because the positions are already in hand: the upload walks them anyway, so a
|
|
125
|
+
* caller gets bounds for nothing and no `MeshData` producer has to supply them. Everything that
|
|
126
|
+
* wants to know whether this is on screen starts from this object.
|
|
127
|
+
*/
|
|
128
|
+
readonly bounds: Bounds = createBounds();
|
|
129
|
+
/** Whether this mesh carries a rig, which decides which flat program draws it. */
|
|
130
|
+
readonly isSkinned: boolean;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* This mesh's morph deltas, or null for geometry that does not deform.
|
|
134
|
+
*
|
|
135
|
+
* **Owned by the mesh rather than set per draw**, which is the difference between this and the
|
|
136
|
+
* joint palette: a palette belongs to a *pose* and changes every frame, where deltas are
|
|
137
|
+
* geometry and never change. Uploaded once with the vertex buffers; only the weights are
|
|
138
|
+
* per-draw state.
|
|
139
|
+
*/
|
|
140
|
+
readonly morph: MorphTexture | null;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Whether this mesh carries a tangent frame, for the shader that has to be told.
|
|
144
|
+
*
|
|
145
|
+
* The attribute cannot say so itself: `vertexDefaults.ts` supplies `[1, 0, 0, 1]` when it is
|
|
146
|
+
* absent — a usable frame rather than a sentinel, because a zero tangent normalises to a NaN.
|
|
147
|
+
* Read off the same branch below that chooses between the buffer and that constant.
|
|
148
|
+
*/
|
|
149
|
+
readonly hasTangents: boolean;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Buffers allocated but not yet filled, in the order the constructor made them.
|
|
153
|
+
*
|
|
154
|
+
* Empty except between the steps of an incremental upload; `uploads` drains it and nothing
|
|
155
|
+
* else touches it. Held as the source arrays rather than as copies, so spreading an upload
|
|
156
|
+
* costs no memory — the caller's `MeshData` is alive until the last step either way.
|
|
157
|
+
*/
|
|
158
|
+
private readonly pending: { target: number; buffer: WebGLBuffer; data: ArrayBufferView }[] = [];
|
|
159
|
+
|
|
160
|
+
/** Set by the constructor before it allocates anything. See the `spread` parameter. */
|
|
161
|
+
private readonly spread: boolean;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Whether all of this mesh's geometry has reached the device.
|
|
165
|
+
*
|
|
166
|
+
* False only between the steps of an incremental upload. **`drawMesh` refuses to draw an
|
|
167
|
+
* incomplete mesh**, and that refusal is the contract: the buffers are allocated and zeroed
|
|
168
|
+
* from the first frame, so drawing one would be a fan of degenerate triangles through the
|
|
169
|
+
* origin. Drawing *what has landed* was the other option and is worse — a mesh whose triangle
|
|
170
|
+
* count grows over several frames is a stranger artefact than a square that is briefly absent.
|
|
171
|
+
*/
|
|
172
|
+
get complete(): boolean {
|
|
173
|
+
return this.pending.length === 0;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* @param spread Allocate the buffers now and fill them from `uploads` later. Off by default,
|
|
178
|
+
* and the default is the fast path: filling a buffer with `bufferData` in one call skips the
|
|
179
|
+
* zero-fill that `bufferData(size)` then `bufferSubData` pays for, and every mesh in the
|
|
180
|
+
* engine that does not need to be spread should keep skipping it.
|
|
181
|
+
*/
|
|
182
|
+
constructor(gl: WebGL2RenderingContext, data: MeshData, dynamic = false, spread = false) {
|
|
183
|
+
validateMeshData(data);
|
|
184
|
+
this.spread = spread;
|
|
185
|
+
boundsOfPositions(data.positions, this.bounds);
|
|
186
|
+
this.positionFloats = data.positions.length;
|
|
187
|
+
const vao = gl.createVertexArray();
|
|
188
|
+
if (vao === null) throw new Error('createVertexArray failed');
|
|
189
|
+
this.vao = vao;
|
|
190
|
+
this.indexCount = data.indices.length;
|
|
191
|
+
|
|
192
|
+
gl.bindVertexArray(vao);
|
|
193
|
+
/*
|
|
194
|
+
* `DYNAMIC_DRAW` where a consumer said the geometry moves, and only there. The hint is
|
|
195
|
+
* advisory — a `STATIC_DRAW` buffer accepts `bufferSubData` perfectly well — but a driver
|
|
196
|
+
* that has been told the truth can place the buffer where a rewrite is cheap, and a driver
|
|
197
|
+
* that has been told a lie every frame is the shape of a stall nobody can find.
|
|
198
|
+
*/
|
|
199
|
+
const usage = dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;
|
|
200
|
+
const positions = this.attachAttribute(gl, ATTR_POSITION, data.positions, 3, usage);
|
|
201
|
+
const normals = this.attachAttribute(gl, ATTR_NORMAL, data.normals, 3, usage);
|
|
202
|
+
if (dynamic) this.deformable = { positions, normals };
|
|
203
|
+
this.attachAttribute(gl, ATTR_COLOR, data.colors, 3);
|
|
204
|
+
this.attachAttribute(gl, ATTR_EMISSIVE, data.emissive, 1);
|
|
205
|
+
/*
|
|
206
|
+
* Absent means "not shiny", supplied as a constant rather than as a buffer of
|
|
207
|
+
* zeroes. `vertexAttrib1f` sets the value a *disabled* attribute reads, so this
|
|
208
|
+
* costs no buffer, no upload and no per-vertex fetch — which is what lets the
|
|
209
|
+
* seventeen other places that build a mesh stay exactly as they are.
|
|
210
|
+
*/
|
|
211
|
+
if (data.specular === undefined) {
|
|
212
|
+
gl.disableVertexAttribArray(ATTR_SPECULAR);
|
|
213
|
+
this.constants.push({ location: ATTR_SPECULAR, value: ABSENT_ATTRIBUTE['specular'] });
|
|
214
|
+
} else {
|
|
215
|
+
this.attachAttribute(gl, ATTR_SPECULAR, data.specular, 1);
|
|
216
|
+
}
|
|
217
|
+
/* Absent means "no surface texture", by the same constant-attribute trick. */
|
|
218
|
+
if (data.uvs === undefined) {
|
|
219
|
+
gl.disableVertexAttribArray(ATTR_UV);
|
|
220
|
+
this.constants.push({ location: ATTR_UV, value: ABSENT_ATTRIBUTE['uvs'] });
|
|
221
|
+
} else {
|
|
222
|
+
this.attachAttribute(gl, ATTR_UV, data.uvs, 2);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* Absent means "inherit albedo", supplied as the constant the shader tests for. */
|
|
226
|
+
if (data.emissiveColor === undefined) {
|
|
227
|
+
gl.disableVertexAttribArray(ATTR_EMISSIVE_COLOR);
|
|
228
|
+
this.constants.push({
|
|
229
|
+
location: ATTR_EMISSIVE_COLOR,
|
|
230
|
+
value: ABSENT_ATTRIBUTE['emissiveColor'],
|
|
231
|
+
});
|
|
232
|
+
} else {
|
|
233
|
+
this.attachAttribute(gl, ATTR_EMISSIVE_COLOR, data.emissiveColor, 3);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* Absent means the engine's long-standing fixed lobe. See `roughness`. */
|
|
237
|
+
if (data.roughness === undefined) {
|
|
238
|
+
gl.disableVertexAttribArray(ATTR_ROUGHNESS);
|
|
239
|
+
this.constants.push({ location: ATTR_ROUGHNESS, value: ABSENT_ATTRIBUTE['roughness'] });
|
|
240
|
+
} else {
|
|
241
|
+
this.attachAttribute(gl, ATTR_ROUGHNESS, data.roughness, 1);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/*
|
|
245
|
+
* Absent means no grain at all, and that is the whole point of the attribute rather
|
|
246
|
+
* than a default chosen for convenience: a surface that never says it is mineral is
|
|
247
|
+
* not mineral. The two previous versions inferred it, and both inferences were wrong.
|
|
248
|
+
*/
|
|
249
|
+
if (data.relief === undefined) {
|
|
250
|
+
gl.disableVertexAttribArray(ATTR_RELIEF);
|
|
251
|
+
this.constants.push({ location: ATTR_RELIEF, value: ABSENT_ATTRIBUTE['relief'] });
|
|
252
|
+
} else {
|
|
253
|
+
this.attachAttribute(gl, ATTR_RELIEF, data.relief, 1);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/*
|
|
257
|
+
* Both or neither — `validateMeshData` refuses one without the other, so a mesh reaching here
|
|
258
|
+
* with joints has weights. `isSkinned` is what decides which of the two flat programs a draw
|
|
259
|
+
* takes; see `WebGL2Renderer.drawMesh`.
|
|
260
|
+
*/
|
|
261
|
+
this.isSkinned = data.joints !== undefined;
|
|
262
|
+
this.morph =
|
|
263
|
+
data.morphTargets === undefined || data.morphTargetCount === undefined
|
|
264
|
+
? null
|
|
265
|
+
: new MorphTexture(gl, data.morphTargets, data.positions.length / 3, data.morphTargetCount);
|
|
266
|
+
if (data.joints === undefined || data.weights === undefined) {
|
|
267
|
+
this.constants.push({ location: ATTR_JOINTS, value: ABSENT_ATTRIBUTE['joints'] });
|
|
268
|
+
this.constants.push({ location: ATTR_WEIGHTS, value: ABSENT_ATTRIBUTE['weights'] });
|
|
269
|
+
} else {
|
|
270
|
+
this.attachAttribute(gl, ATTR_JOINTS, data.joints, 4);
|
|
271
|
+
this.attachAttribute(gl, ATTR_WEIGHTS, data.weights, 4);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
this.hasTangents = data.tangents !== undefined;
|
|
275
|
+
if (data.tangents === undefined) {
|
|
276
|
+
gl.disableVertexAttribArray(ATTR_TANGENT);
|
|
277
|
+
this.constants.push({ location: ATTR_TANGENT, value: ABSENT_ATTRIBUTE['tangents'] });
|
|
278
|
+
} else {
|
|
279
|
+
this.attachAttribute(gl, ATTR_TANGENT, data.tangents, 4);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (data.grain === undefined) {
|
|
283
|
+
gl.disableVertexAttribArray(ATTR_GRAIN);
|
|
284
|
+
this.constants.push({ location: ATTR_GRAIN, value: ABSENT_ATTRIBUTE['grain'] });
|
|
285
|
+
} else {
|
|
286
|
+
this.attachAttribute(gl, ATTR_GRAIN, data.grain, 1);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/*
|
|
290
|
+
* Absent means planted, fully sunlit and opaque, by the same constant-attribute trick every
|
|
291
|
+
* optional attribute above uses — no buffer, no upload, no per-vertex fetch. That is what
|
|
292
|
+
* lets a mesh which never heard of this attribute cost exactly what it cost before, and it
|
|
293
|
+
* is the property that ruled out folding the loose material floats into vec4s to buy the
|
|
294
|
+
* location this spends.
|
|
295
|
+
*/
|
|
296
|
+
if (data.channel === undefined) {
|
|
297
|
+
gl.disableVertexAttribArray(ATTR_CHANNEL);
|
|
298
|
+
this.constants.push({ location: ATTR_CHANNEL, value: ABSENT_ATTRIBUTE['channel'] });
|
|
299
|
+
} else {
|
|
300
|
+
this.attachAttribute(gl, ATTR_CHANNEL, data.channel, 4);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const indexBuffer = gl.createBuffer();
|
|
304
|
+
if (indexBuffer === null) throw new Error('createBuffer failed');
|
|
305
|
+
this.buffers.push(indexBuffer);
|
|
306
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
307
|
+
this.allocate(gl, gl.ELEMENT_ARRAY_BUFFER, indexBuffer, data.indices, gl.STATIC_DRAW);
|
|
308
|
+
|
|
309
|
+
gl.bindVertexArray(null);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/** Caller is responsible for having the flat program + uniforms bound. */
|
|
313
|
+
draw(gl: WebGL2RenderingContext): void {
|
|
314
|
+
gl.bindVertexArray(this.vao);
|
|
315
|
+
// The VAO restores the arrays; these it cannot. See `constants`.
|
|
316
|
+
for (const constant of this.constants) {
|
|
317
|
+
const value = constant.value;
|
|
318
|
+
applyConstant(gl, constant.location, value);
|
|
319
|
+
}
|
|
320
|
+
gl.drawElements(gl.TRIANGLES, this.indexCount, gl.UNSIGNED_INT, 0);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Bind one buffer's per-instance attributes to this mesh's vertex array.
|
|
325
|
+
*
|
|
326
|
+
* **One batch per mesh, and the vertex array is why.** A `Mesh` owns exactly one, so a second
|
|
327
|
+
* batch would rebind locations 11 to 15 on the array the first still draws through — and what
|
|
328
|
+
* comes out is one batch's instances placed by the other's matrices, which reads as a transform
|
|
329
|
+
* bug in the consumer's own code rather than as a misuse of this.
|
|
330
|
+
*
|
|
331
|
+
* **What would make it wrong** is a consumer legitimately wanting two batches of one mesh,
|
|
332
|
+
* which wants a vertex array per batch rather than a flag here.
|
|
333
|
+
*/
|
|
334
|
+
attachInstances(gl: WebGL2RenderingContext, buffer: WebGLBuffer, stride: number): void {
|
|
335
|
+
if (this.instanced) {
|
|
336
|
+
throw new Error(
|
|
337
|
+
'Mesh: this mesh already has an instanced batch — a Mesh owns one vertex array, so a ' +
|
|
338
|
+
'second batch would rebind the attributes the first draws through.',
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
this.instanced = true;
|
|
342
|
+
gl.bindVertexArray(this.vao);
|
|
343
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
344
|
+
/* Four vec4 columns then a vec3 tint: a mat4 is not a vertex attribute in GLSL ES 300. */
|
|
345
|
+
for (let column = 0; column < 4; column += 1) {
|
|
346
|
+
const location = 11 + column;
|
|
347
|
+
gl.enableVertexAttribArray(location);
|
|
348
|
+
gl.vertexAttribPointer(location, 4, gl.FLOAT, false, stride, column * 16);
|
|
349
|
+
gl.vertexAttribDivisor(location, 1);
|
|
350
|
+
}
|
|
351
|
+
gl.enableVertexAttribArray(15);
|
|
352
|
+
gl.vertexAttribPointer(15, 3, gl.FLOAT, false, stride, 64);
|
|
353
|
+
gl.vertexAttribDivisor(15, 1);
|
|
354
|
+
gl.bindVertexArray(null);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/** Whether `attachInstances` has already claimed locations 11 to 15 on this mesh's array. */
|
|
358
|
+
private instanced = false;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Draw `count` instances through the attributes `attachInstances` bound.
|
|
362
|
+
*
|
|
363
|
+
* The constants are re-applied exactly as `draw` does — a vertex array restores the arrays and
|
|
364
|
+
* not the constant attributes, and an absent optional attribute is a constant here.
|
|
365
|
+
*/
|
|
366
|
+
drawInstances(gl: WebGL2RenderingContext, count: number): void {
|
|
367
|
+
gl.bindVertexArray(this.vao);
|
|
368
|
+
for (const constant of this.constants) {
|
|
369
|
+
const value = constant.value;
|
|
370
|
+
applyConstant(gl, constant.location, value);
|
|
371
|
+
}
|
|
372
|
+
gl.drawElementsInstanced(gl.TRIANGLES, this.indexCount, gl.UNSIGNED_INT, 0, count);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
dispose(gl: WebGL2RenderingContext): void {
|
|
376
|
+
this.morph?.dispose(gl);
|
|
377
|
+
for (const buffer of this.buffers) gl.deleteBuffer(buffer);
|
|
378
|
+
gl.deleteVertexArray(this.vao);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Rewrite this mesh's positions, and its normals where the caller has them.
|
|
383
|
+
*
|
|
384
|
+
* **Only the two attributes that move.** Colour, emissive and the rest describe what a surface
|
|
385
|
+
* *is* and do not change because it bent; rewriting them would be uploading unchanged bytes
|
|
386
|
+
* every frame. A caller with genuinely changing colour wants a second mesh or a tint.
|
|
387
|
+
*
|
|
388
|
+
* **The bounds are recomputed**, because everything that decides whether this is on screen
|
|
389
|
+
* starts from them — a cloth that blew sideways out of its original box would be culled while
|
|
390
|
+
* still visible, which is the kind of bug that only shows up at the edge of the frame.
|
|
391
|
+
*/
|
|
392
|
+
update(gl: WebGL2RenderingContext, positions: Float32Array, normals?: Float32Array): void {
|
|
393
|
+
if (this.deformable === null) {
|
|
394
|
+
throw new Error(
|
|
395
|
+
'this mesh was not created with { dynamic: true }, so its buffers are not set up to be ' +
|
|
396
|
+
'rewritten. Say so at `createMesh` — the flag is what decides the buffer hint and ' +
|
|
397
|
+
'what is kept to make an update possible.',
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
if (positions.length !== this.positionFloats) {
|
|
401
|
+
throw new Error(
|
|
402
|
+
`this mesh has ${this.positionFloats / 3} vertices and the update has ` +
|
|
403
|
+
`${positions.length / 3}. A mesh's vertex count is fixed at creation: the index buffer, ` +
|
|
404
|
+
'the pipeline and every other attribute are sized against it.',
|
|
405
|
+
);
|
|
406
|
+
}
|
|
407
|
+
boundsOfPositions(positions, this.bounds);
|
|
408
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.deformable.positions);
|
|
409
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, positions);
|
|
410
|
+
if (normals !== undefined) {
|
|
411
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.deformable.normals);
|
|
412
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, normals);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
private attachAttribute(
|
|
417
|
+
gl: WebGL2RenderingContext,
|
|
418
|
+
location: number,
|
|
419
|
+
data: Float32Array,
|
|
420
|
+
size: number,
|
|
421
|
+
usage: number = gl.STATIC_DRAW,
|
|
422
|
+
): WebGLBuffer {
|
|
423
|
+
const buffer = gl.createBuffer();
|
|
424
|
+
if (buffer === null) throw new Error('createBuffer failed');
|
|
425
|
+
this.buffers.push(buffer);
|
|
426
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
427
|
+
this.allocate(gl, gl.ARRAY_BUFFER, buffer, data, usage);
|
|
428
|
+
gl.enableVertexAttribArray(location);
|
|
429
|
+
gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
|
|
430
|
+
return buffer;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Give a bound buffer its storage, and its contents now or later.
|
|
435
|
+
*
|
|
436
|
+
* The one place the two paths differ, and they differ in exactly one call: eagerly, the data
|
|
437
|
+
* goes in with the allocation; spread, the allocation is sized and the array is queued. Both
|
|
438
|
+
* hand the same bytes to the same buffer, which is what keeps a mesh that lands over six
|
|
439
|
+
* frames identical to one that lands in a single call.
|
|
440
|
+
*/
|
|
441
|
+
private allocate(
|
|
442
|
+
gl: WebGL2RenderingContext,
|
|
443
|
+
target: number,
|
|
444
|
+
buffer: WebGLBuffer,
|
|
445
|
+
data: ArrayBufferView,
|
|
446
|
+
usage: number,
|
|
447
|
+
): void {
|
|
448
|
+
if (!this.spread) {
|
|
449
|
+
gl.bufferData(target, data as ArrayBufferView & { byteLength: number }, usage);
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
gl.bufferData(target, data.byteLength, usage);
|
|
453
|
+
this.pending.push({ target, buffer, data });
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Fill the buffers, a bounded step at a time. Done when it returns `done`.
|
|
458
|
+
*
|
|
459
|
+
* A step is one attribute, or a slice of one where the attribute is bigger than
|
|
460
|
+
* `UPLOAD_BYTES_PER_STEP`. **There is still no interleave here** — this backend's three tight
|
|
461
|
+
* buffers are the reason a consumer measured the same drive as smooth on WebGL2 and hitching
|
|
462
|
+
* on the other one, and dividing an upload is not a reason to give that up.
|
|
463
|
+
*
|
|
464
|
+
* The call that returns `done` is the one that does the last step's work, so a mesh of *n*
|
|
465
|
+
* chunks takes exactly *n* calls.
|
|
466
|
+
*
|
|
467
|
+
* The vertex array object is bound around each step because one of these writes an index
|
|
468
|
+
* buffer, and an `ELEMENT_ARRAY_BUFFER` binding belongs to whichever array object is current —
|
|
469
|
+
* writing it with somebody else's bound would quietly repoint their indices at this mesh.
|
|
470
|
+
*/
|
|
471
|
+
*uploads(gl: WebGL2RenderingContext): Generator<void, void, void> {
|
|
472
|
+
const chunks: {
|
|
473
|
+
target: number;
|
|
474
|
+
buffer: WebGLBuffer;
|
|
475
|
+
data: ArrayBufferView;
|
|
476
|
+
from: number;
|
|
477
|
+
to: number;
|
|
478
|
+
}[] = [];
|
|
479
|
+
for (const one of this.pending) {
|
|
480
|
+
const width = (one.data as { BYTES_PER_ELEMENT?: number }).BYTES_PER_ELEMENT ?? 1;
|
|
481
|
+
const length = one.data.byteLength / width;
|
|
482
|
+
const per = Math.max(1, Math.floor(UPLOAD_BYTES_PER_STEP / width));
|
|
483
|
+
for (let from = 0; from < length; from += per) {
|
|
484
|
+
chunks.push({ ...one, from, to: Math.min(from + per, length) });
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
for (let at = 0; at < chunks.length; at++) {
|
|
489
|
+
const chunk = chunks[at] as (typeof chunks)[number];
|
|
490
|
+
const width = (chunk.data as { BYTES_PER_ELEMENT?: number }).BYTES_PER_ELEMENT ?? 1;
|
|
491
|
+
gl.bindVertexArray(this.vao);
|
|
492
|
+
gl.bindBuffer(chunk.target, chunk.buffer);
|
|
493
|
+
gl.bufferSubData(
|
|
494
|
+
chunk.target,
|
|
495
|
+
chunk.from * width,
|
|
496
|
+
chunk.data as ArrayBufferView & { byteLength: number },
|
|
497
|
+
chunk.from,
|
|
498
|
+
chunk.to - chunk.from,
|
|
499
|
+
);
|
|
500
|
+
gl.bindVertexArray(null);
|
|
501
|
+
if (at < chunks.length - 1) yield;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
this.pending.length = 0;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/** A mesh on its way to the device, and the iterator that gets it there. */
|
|
509
|
+
export interface IncrementalMesh {
|
|
510
|
+
/**
|
|
511
|
+
* Usable at once — it can be held, measured and disposed — but not drawable until the upload
|
|
512
|
+
* finishes. See `Mesh.complete`.
|
|
513
|
+
*/
|
|
514
|
+
readonly mesh: Mesh;
|
|
515
|
+
/** Advance the upload by one bounded step. Done when it returns `done`. */
|
|
516
|
+
readonly upload: Iterator<void, void>;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Upload a mesh over as many frames as the caller gives it.
|
|
521
|
+
*
|
|
522
|
+
* The twin of `createGpuMeshIncremental` on the other backend, and the cheaper of the two: there
|
|
523
|
+
* is no interleave to divide here, so a step is an attribute or a slice of one.
|
|
524
|
+
*
|
|
525
|
+
* What is paid at creation and not spread: validation, the bounds, the vertex array object and
|
|
526
|
+
* the allocations. The bounds are the deliberate one — a streamer places and culls a region from
|
|
527
|
+
* them before a byte of it has landed.
|
|
528
|
+
*/
|
|
529
|
+
export function createMeshIncremental(
|
|
530
|
+
gl: WebGL2RenderingContext,
|
|
531
|
+
data: MeshData,
|
|
532
|
+
dynamic = false,
|
|
533
|
+
): IncrementalMesh {
|
|
534
|
+
const mesh = new Mesh(gl, data, dynamic, true);
|
|
535
|
+
return { mesh, upload: mesh.uploads(gl) };
|
|
536
|
+
}
|