@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,383 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which way depth runs, in one place, because it is a decision every pass has to agree with.
|
|
3
|
+
*
|
|
4
|
+
* **Reversed-Z with a float depth attachment.** Clip space depth is mapped so the near plane is
|
|
5
|
+
* 1 and the far plane is 0, the compare is `greater` rather than `less`, and the buffer is cleared
|
|
6
|
+
* to 0 instead of 1. It is not a preference: a conventional buffer spends its precision
|
|
7
|
+
* hyperbolically, resolving about `z² / (near · 2^bits)` at distance `z`, so the near plane is the
|
|
8
|
+
* only control there is and every consumer ends up pushing it out and then pushing decals off
|
|
9
|
+
* surfaces to compensate.
|
|
10
|
+
*
|
|
11
|
+
* **What it buys, in the arithmetic that motivated it.** A float's exponent gives its resolution
|
|
12
|
+
* where the values are small, and reversed-Z puts *far* at zero — so the hyperbolic loss and the
|
|
13
|
+
* floating-point gain very nearly cancel and precision becomes roughly uniform with distance.
|
|
14
|
+
* A consumer measured what its absence costs: a street plate's letters held 7.5 mm proud of a 6 mm
|
|
15
|
+
* plate and a sign 15 mm proud of its board, neither a thickness anybody chose, and a near plane
|
|
16
|
+
* settled at 0.25 for a first-person camera that wanted 0.05 — 1.6x of precision surrendered
|
|
17
|
+
* permanently, because dropping it to 0.15 made every decal in the world blink.
|
|
18
|
+
*
|
|
19
|
+
* **This is the cure for a near-coincident seam and deliberately not for a coincident one.**
|
|
20
|
+
* `webgl2/renderer.ts` records taking a reversed-Z conversion off the table once, and that
|
|
21
|
+
* reasoning stands where it was written: two *exactly* coplanar surfaces have equal depth in exact
|
|
22
|
+
* arithmetic and no format separates equal numbers, which is what `POLYGON_OFFSET_FILL` is for.
|
|
23
|
+
* What reversed-Z fixes is the other case — surfaces a fraction of a millimetre apart, which a
|
|
24
|
+
* conventional buffer cannot tell apart past about forty metres and this one can.
|
|
25
|
+
*
|
|
26
|
+
* **Shadows are not reversed and that is deliberate.** The directional cascades are orthographic,
|
|
27
|
+
* where depth is already linear and a float buffer gains nothing, and the point shadows write with
|
|
28
|
+
* `always`. Converting them would mean flipping every comparison in the shadow shaders for no
|
|
29
|
+
* precision at all, so `SHADOW_FORMAT` and its passes keep the conventional sense and this module
|
|
30
|
+
* says nothing about them.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* True while the engine renders its scene depth reversed.
|
|
35
|
+
*
|
|
36
|
+
* **It is `true`, on both backends, and this is what it took.** Nine attempts. The eight that
|
|
37
|
+
* failed were not wrong about the conversion — the compares, clears, clip corrections and formats
|
|
38
|
+
* were right early — they were wrong about *where to look*, and the note below on the instrument
|
|
39
|
+
* is the most reusable thing on this page.
|
|
40
|
+
*
|
|
41
|
+
* **What it is gated at.** Each backend against its own conventional output, at zero tolerance,
|
|
42
|
+
* across every published scene on a real GPU: **WebGL2's worst frame 7,348 pixels of 921,600** and
|
|
43
|
+
* **WebGPU's 11,832**, most a few hundred or none, and all of it seams resolving the other way,
|
|
44
|
+
* which is the improvement. The two backends against *each other* come to 443,035 pixels on their
|
|
45
|
+
* worst scene reversed against 443,039 conventional, so the conversion costs four pixels of the
|
|
46
|
+
* ordinary disagreement between two independent implementations of an animated scene, in the
|
|
47
|
+
* direction of agreeing slightly better.
|
|
48
|
+
*
|
|
49
|
+
* **`npm run wgsl` is part of changing anything here.** WebGPU draws from generated WGSL, so a
|
|
50
|
+
* GLSL change left unregenerated keeps the old expression compiled in and the gate measures the
|
|
51
|
+
* previous shader.
|
|
52
|
+
*
|
|
53
|
+
* ## The instrument
|
|
54
|
+
*
|
|
55
|
+
* **Compare the two backends against each other, not each against its own conventional baseline.**
|
|
56
|
+
* Five attempts read an ambiguous number because a diff against a baseline can say *that*
|
|
57
|
+
* something changed and never *which side is wrong*. Two independent implementations that agree
|
|
58
|
+
* conventionally and stop agreeing reversed localise the fault to one of them. Always take the
|
|
59
|
+
* conventional pair as the control in the same run: it is not zero, and reading a reversed number
|
|
60
|
+
* without it is what made several earlier measurements unreadable.
|
|
61
|
+
*
|
|
62
|
+
* **Then bisect the shader with a constant-output probe**, and neutralise terms one at a time. The
|
|
63
|
+
* last three defects were each found by forcing one factor to a constant and watching the two
|
|
64
|
+
* backends fall into agreement. `flat/main.ts` has exactly one `outColor` assignment and it is the
|
|
65
|
+
* last line of the shader, so a probe inserted earlier is overwritten and reads as "this feature
|
|
66
|
+
* is not active" — verify any probe by forcing magenta first and confirming the gate moves.
|
|
67
|
+
*
|
|
68
|
+
* ## The four defects, all of them WebGL2's, none of them in the depth conversion
|
|
69
|
+
*
|
|
70
|
+
* 1. **The lit shader was handed a range-corrected light matrix.** `shadowFactor` projects with
|
|
71
|
+
* `uLightViewProj` and then does `p = p * 0.5 + 0.5` on all three axes, and `GL_SHADOW_REMAP`
|
|
72
|
+
* performs that same range change in the matrix. Both applied put every receiver depth in
|
|
73
|
+
* `[0.5, 1]` against a map holding `[0, 1]`. `webgpu/renderer.ts` had this right and says so.
|
|
74
|
+
* 2. **Point-shadow face matrices were never range-corrected at all.** `EXT_clip_control` is
|
|
75
|
+
* context state, so a face matrix still emitting OpenGL's `[-1, 1]` loses everything below zero
|
|
76
|
+
* and half of every face is clipped away.
|
|
77
|
+
* 3. **`bakeOne` had no depth bracket.** `bakeAreaOne` put the conventional compare and clear back
|
|
78
|
+
* for the length of an area light's bake; the ordinary lamp path, which is nearly every point
|
|
79
|
+
* shadow a scene has, ran under the frame's own `GEQUAL` against a scratch cleared to 0 while
|
|
80
|
+
* writing depths from a matrix that is deliberately not reversed. Both paths go through
|
|
81
|
+
* `bakePointShadow` now, unconditionally, so there is no branch left to forget.
|
|
82
|
+
* 4. **Three shadow matrices shared one scratch buffer**, so whichever ran last rewrote the
|
|
83
|
+
* others, and `beginShadowPass` uploaded the raw matrix while holding the corrected one.
|
|
84
|
+
*
|
|
85
|
+
* Every one of them was invisible conventionally, and none of them looks like a depth bug: a wrong
|
|
86
|
+
* shadow map does not draw broken, it draws *dark*. That is why the scene read as a lighting
|
|
87
|
+
* regression for eight attempts and why bisecting the lit expression is what finally named them.
|
|
88
|
+
*
|
|
89
|
+
* **The trap, recorded because it cost a whole attempt.** Reversed depth measured *more
|
|
90
|
+
* view-stable* than conventional on both scenes across two nearby frames, which reads as evidence
|
|
91
|
+
* that the difference is the improvement. It is not: both scenes animate, so most of that is
|
|
92
|
+
* motion. Do not stop at the stability number.
|
|
93
|
+
*
|
|
94
|
+
* **Candidates eliminated by measurement along the way**, so nobody pays for them twice: ambient
|
|
95
|
+
* occlusion and its far-plane guards, `drawScatter` and `drawSdfText`, `POLYGON_OFFSET_FILL` and
|
|
96
|
+
* the offset sign, environment irradiance, depth of field, and the directional cascade's bracket
|
|
97
|
+
* and range, which were correct before any of this started.
|
|
98
|
+
*
|
|
99
|
+
* Everything else in this module is live and correct in both senses, and every consumer reads it
|
|
100
|
+
* instead of a constant of its own.
|
|
101
|
+
*/
|
|
102
|
+
export const REVERSED_DEPTH = true;
|
|
103
|
+
|
|
104
|
+
/** What a scene depth attachment is cleared to: the far plane. */
|
|
105
|
+
export const DEPTH_CLEAR = REVERSED_DEPTH ? 0 : 1;
|
|
106
|
+
|
|
107
|
+
/** The WebGPU compare for "nearer than what is there". */
|
|
108
|
+
export const DEPTH_COMPARE: GPUCompareFunction = REVERSED_DEPTH ? 'greater' : 'less';
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The same, admitting equality.
|
|
112
|
+
*
|
|
113
|
+
* The sky draws with this so it fills exactly the pixels nothing else claimed, and text with it so
|
|
114
|
+
* a glyph coplanar with its quad is not dropped.
|
|
115
|
+
*/
|
|
116
|
+
export const DEPTH_COMPARE_EQUAL: GPUCompareFunction = REVERSED_DEPTH
|
|
117
|
+
? 'greater-equal'
|
|
118
|
+
: 'less-equal';
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The scene depth format.
|
|
122
|
+
*
|
|
123
|
+
* **Float is half of reversed-Z and the half that is easy to forget.** Reversing a 24-bit unorm
|
|
124
|
+
* buffer moves the precision around and does not create any; the gain comes from a float's
|
|
125
|
+
* exponent having room near zero, which is where reversing puts the far plane.
|
|
126
|
+
*/
|
|
127
|
+
export const DEPTH_FORMAT: GPUTextureFormat = REVERSED_DEPTH ? 'depth32float' : 'depth24plus';
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Turn a depth read out of the buffer back into the `[0, 1]` a conventional one would have held.
|
|
131
|
+
*
|
|
132
|
+
* For anything that reconstructs a position or a distance from stored depth and was written
|
|
133
|
+
* against the conventional sense. One place, so a pass that forgets it is a pass that looks wrong
|
|
134
|
+
* rather than one that quietly disagrees with its neighbour.
|
|
135
|
+
*/
|
|
136
|
+
export function conventionalDepth(stored: number): number {
|
|
137
|
+
return REVERSED_DEPTH ? 1 - stored : stored;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The GLSL that turns a sampled scene depth back into OpenGL's `[-1, 1]` clip z.
|
|
142
|
+
*
|
|
143
|
+
* **One expression, interpolated, because four shaders had written it out by hand.** Ambient
|
|
144
|
+
* occlusion twice, the camera blur's reprojection and depth of field each carried
|
|
145
|
+
* `depth * 2.0 - 1.0`, which is the inverse of the conventional mapping and the wrong inverse of
|
|
146
|
+
* the reversed one. A reversed buffer stores `0.5 - 0.5z`, so recovering z is `1 - 2 * stored`,
|
|
147
|
+
* and a pass that keeps the old form does not fail loudly — it reprojects to slightly the wrong
|
|
148
|
+
* place, which is what the renderer's own reprojection test caught when this landed.
|
|
149
|
+
*
|
|
150
|
+
* `%s` is the name of the depth variable at the call site.
|
|
151
|
+
*/
|
|
152
|
+
export function glslSceneDepthToNdc(depth: string): string {
|
|
153
|
+
return REVERSED_DEPTH ? `(1.0 - ${depth} * 2.0)` : `(${depth} * 2.0 - 1.0)`;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* The clip-space z of the far plane, as GLSL, for geometry that writes a fixed depth.
|
|
158
|
+
*
|
|
159
|
+
* **The sky is the whole reason this exists.** It is a full-screen triangle written straight into
|
|
160
|
+
* clip space with `z = w`, which is the far plane conventionally and the *near* plane once depth
|
|
161
|
+
* is reversed — so a reversed engine whose sky still says 1.0 paints the sky over the entire
|
|
162
|
+
* world. That is what the pixel gate caught the first time this landed: every scene changed, most
|
|
163
|
+
* of the frame, and the largest was 743,669 pixels of 921,600.
|
|
164
|
+
*/
|
|
165
|
+
export function glslFarDepth(): string {
|
|
166
|
+
return REVERSED_DEPTH ? '0.0' : '1.0';
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* The WebGL2 depth compare for "nearer than what is there", and the one that admits equality.
|
|
171
|
+
*
|
|
172
|
+
* Taken as functions of the context because these are GL enums and this module must not import a
|
|
173
|
+
* backend. The pair mirrors `DEPTH_COMPARE` and `DEPTH_COMPARE_EQUAL` exactly, so the two backends
|
|
174
|
+
* cannot end up testing depth in opposite directions.
|
|
175
|
+
*/
|
|
176
|
+
export function glDepthFunc(gl: WebGL2RenderingContext): number {
|
|
177
|
+
return REVERSED_DEPTH ? gl.GREATER : gl.LESS;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function glDepthFuncEqual(gl: WebGL2RenderingContext): number {
|
|
181
|
+
return REVERSED_DEPTH ? gl.GEQUAL : gl.LEQUAL;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** The conventional pair, for the shadow passes, which are deliberately not reversed. */
|
|
185
|
+
export function glShadowDepthFunc(gl: WebGL2RenderingContext): number {
|
|
186
|
+
return gl.LEQUAL;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* What a shadow pass clears its depth to, and it travels with the compare above.
|
|
191
|
+
*
|
|
192
|
+
* Separate from `DEPTH_CLEAR` because a shadow pass does not follow the frame: it renders from a
|
|
193
|
+
* light matrix this module deliberately leaves conventional, so far is 1 there whatever the scene
|
|
194
|
+
* is doing. Stated as its own constant so the pair cannot be half-applied — which is exactly how a
|
|
195
|
+
* point-light bake ended up clearing to the scene's far plane and comparing with the scene's sense
|
|
196
|
+
* against depths written the other way.
|
|
197
|
+
*/
|
|
198
|
+
export const SHADOW_DEPTH_CLEAR = 1;
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Which way a polygon offset has to push to bring a coplanar overlay forward.
|
|
202
|
+
*
|
|
203
|
+
* **The sign flips with the compare and forgetting it is silent.** `POLYGON_OFFSET_FILL` adds to
|
|
204
|
+
* depth; under `LESS` nearer is smaller, so an overlay is pulled forward with a negative offset,
|
|
205
|
+
* and under `GREATER` nearer is larger and the same nudge pushes it *behind* the surface it is
|
|
206
|
+
* meant to sit on. The symptom is a marking that disappears into the road rather than a marking
|
|
207
|
+
* that fights, which reads as a missing draw call.
|
|
208
|
+
*/
|
|
209
|
+
export const DEPTH_OFFSET_SIGN = REVERSED_DEPTH ? -1 : 1;
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* How much depth one overlay layer is worth, and how much of it follows the slope.
|
|
213
|
+
*
|
|
214
|
+
* Two numbers so that the two backends offset a coplanar surface by the *same* amount: WebGL2
|
|
215
|
+
* hands them to `gl.polygonOffset` around a draw and WebGPU bakes them into a pipeline as
|
|
216
|
+
* `depthBias` and `depthBiasSlopeScale`, and a layer that means one thing on one backend and
|
|
217
|
+
* something else on the other is a difference no test compares and a photograph shows.
|
|
218
|
+
*
|
|
219
|
+
* **The slope term is not zero, and it was zero here until a measurement said otherwise.** The
|
|
220
|
+
* argument for zero is good and it is wrong: a declared overlay is coplanar with what it decorates
|
|
221
|
+
* from every angle, so a constant nudge ought to be the whole of what it needs, and a slope term
|
|
222
|
+
* ought to mean a kerb stands further off its slab as the camera turns. What that reasoning misses
|
|
223
|
+
* is that the offset is applied in *depth*, and how much depth one pixel spans grows without bound
|
|
224
|
+
* as a surface turns edge-on — so a constant that clears the fight head-on clears none of it at a
|
|
225
|
+
* grazing angle.
|
|
226
|
+
*
|
|
227
|
+
* Measured, on a blended quad coplanar with the panel it decorates, counting the pixels of the
|
|
228
|
+
* decal that survive: **WebGL2 clears it at layer 1 either way, and WebGPU with a slope of 0 keeps
|
|
229
|
+
* 1,178 pixels of 1,237 at layer 1 and needs layer 2 to reach 1,237.** With the slope, both
|
|
230
|
+
* backends read 1,237 at layer 1. Two backends given the same number and drawing two pictures is
|
|
231
|
+
* the defect; the slope is what makes a declared layer mean one thing.
|
|
232
|
+
*
|
|
233
|
+
* **The sign is the units' sign and not the opposite of it**, which cost a capture to find: set to
|
|
234
|
+
* `+1` the slope fights the constant and pushes the overlay *away*, and the decal disappeared
|
|
235
|
+
* entirely on both backends — the same symptom the sign note above describes, arriving through the
|
|
236
|
+
* other term.
|
|
237
|
+
*
|
|
238
|
+
* The cost is bounded and was gated rather than argued: **every published scene is 0 of 921,600
|
|
239
|
+
* pixels on both backends** against the release before it.
|
|
240
|
+
*/
|
|
241
|
+
export const OVERLAY_DEPTH_SLOPE = -1;
|
|
242
|
+
export const OVERLAY_DEPTH_UNITS = -2;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Highest depth layer a caller may ask for.
|
|
246
|
+
*
|
|
247
|
+
* A ceiling rather than an open number, because the offset has to stay small enough that a layer
|
|
248
|
+
* cannot be dragged out through geometry it genuinely stands behind. Four is more than any scene
|
|
249
|
+
* has needed: a base surface, the decks that cross it, the trim fused into those, and the
|
|
250
|
+
* markings painted on top.
|
|
251
|
+
*/
|
|
252
|
+
export const MAX_DEPTH_LAYER = 4;
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* The depth offset a layer is worth, clamped and signed, for whichever backend is asking.
|
|
256
|
+
*
|
|
257
|
+
* One function because it is one decision. It used to be three lines inlined in `drawMesh` on
|
|
258
|
+
* WebGL2 and nothing at all on WebGPU, where `depthLayer` was accepted and silently ignored —
|
|
259
|
+
* so a consumer that declared which of two fused surfaces should win got the answer on one
|
|
260
|
+
* backend and a per-pixel coin toss on the other, with nothing anywhere saying so.
|
|
261
|
+
*
|
|
262
|
+
* Layer 0 is the base world and takes no offset at all, which is why the units come back as zero
|
|
263
|
+
* for it: a pipeline or a draw that asked for nothing must be identical to one built before this
|
|
264
|
+
* existed.
|
|
265
|
+
*/
|
|
266
|
+
export function depthOffsetForLayer(
|
|
267
|
+
layer: number,
|
|
268
|
+
/**
|
|
269
|
+
* Which way depth actually runs for the caller asking.
|
|
270
|
+
*
|
|
271
|
+
* Defaulted to the convention this module declares, and passed explicitly by WebGL2, where it
|
|
272
|
+
* is **not** a compile-time fact: reversed depth there needs `EXT_clip_control`, and a context
|
|
273
|
+
* that was not granted it runs conventional depth whatever this file says. Taking the default
|
|
274
|
+
* on that backend would offset every overlay the wrong way on exactly the machines that fell
|
|
275
|
+
* back — and the symptom, a marking sinking into its road, reads as a missing draw call.
|
|
276
|
+
*/
|
|
277
|
+
reversed: boolean = REVERSED_DEPTH,
|
|
278
|
+
): { readonly slope: number; readonly units: number } {
|
|
279
|
+
const clamped = Math.min(Math.max(Math.round(layer), 0), MAX_DEPTH_LAYER);
|
|
280
|
+
if (clamped === 0) return { slope: 0, units: 0 };
|
|
281
|
+
const sign = reversed ? -1 : 1;
|
|
282
|
+
return {
|
|
283
|
+
/* `|| 0` because `0 * -1` is `-0`, which equals zero in every arithmetic use and not under
|
|
284
|
+
`Object.is` — so two descriptors alike in every way a GPU can see would compare unequal. */
|
|
285
|
+
slope: OVERLAY_DEPTH_SLOPE * sign || 0,
|
|
286
|
+
units: OVERLAY_DEPTH_UNITS * clamped * sign,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* The remap from the OpenGL clip space every camera matrix is built in to what the depth buffer
|
|
292
|
+
* expects, as a column-major 4x4.
|
|
293
|
+
*
|
|
294
|
+
* **WebGL2 needs this only because `EXT_clip_control` puts its clip z in `[0, 1]`**, which is
|
|
295
|
+
* where reversed-Z wants it and is not where `mat4.perspective` leaves it. It is the same
|
|
296
|
+
* transform WebGPU's `CLIP_CORRECTION` carries, without the Y flip that backend also needs, and
|
|
297
|
+
* it is the identity when depth is conventional and clip control is off — in which case the
|
|
298
|
+
* renderer skips the multiply entirely.
|
|
299
|
+
*/
|
|
300
|
+
export const GL_DEPTH_REMAP = new Float32Array([
|
|
301
|
+
1,
|
|
302
|
+
0,
|
|
303
|
+
0,
|
|
304
|
+
0,
|
|
305
|
+
0,
|
|
306
|
+
1,
|
|
307
|
+
0,
|
|
308
|
+
0,
|
|
309
|
+
0,
|
|
310
|
+
0,
|
|
311
|
+
REVERSED_DEPTH ? -0.5 : 0.5,
|
|
312
|
+
0,
|
|
313
|
+
0,
|
|
314
|
+
0,
|
|
315
|
+
0.5,
|
|
316
|
+
1,
|
|
317
|
+
]);
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* `EXT_clip_control`, which TypeScript's DOM library does not declare yet.
|
|
321
|
+
*
|
|
322
|
+
* Only the two enums and the one entry point this engine uses. Declared here beside the constant
|
|
323
|
+
* that needs it rather than in a types file, so the reason it exists is next to the reason it is
|
|
324
|
+
* called.
|
|
325
|
+
*/
|
|
326
|
+
export interface ClipControlExtension {
|
|
327
|
+
readonly LOWER_LEFT_EXT: number;
|
|
328
|
+
readonly ZERO_TO_ONE_EXT: number;
|
|
329
|
+
clipControlEXT(origin: number, depth: number): void;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* The WebGL2 internal format and type for a scene depth attachment.
|
|
334
|
+
*
|
|
335
|
+
* **Float is the half of reversed-Z that is easy to forget.** Reversing a 24-bit unorm buffer moves
|
|
336
|
+
* its precision around and creates none; the gain comes from a float's exponent having room near
|
|
337
|
+
* zero, which is where reversing puts the far plane. `DEPTH_COMPONENT32F` is core in WebGL2, so
|
|
338
|
+
* this needs no extension — only the matching `FLOAT` type, since a 32-bit float attachment
|
|
339
|
+
* described as `UNSIGNED_INT` is refused.
|
|
340
|
+
*
|
|
341
|
+
* Shadow maps do not go through here: they are their own format for their own reason, and they are
|
|
342
|
+
* not reversed.
|
|
343
|
+
*/
|
|
344
|
+
export function glSceneDepthFormat(gl: WebGL2RenderingContext): {
|
|
345
|
+
readonly internalFormat: number;
|
|
346
|
+
readonly type: number;
|
|
347
|
+
} {
|
|
348
|
+
return REVERSED_DEPTH
|
|
349
|
+
? { internalFormat: gl.DEPTH_COMPONENT32F, type: gl.FLOAT }
|
|
350
|
+
: { internalFormat: gl.DEPTH_COMPONENT24, type: gl.UNSIGNED_INT };
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* The GLSL that asks "is this the far plane", for a pass that skips the background.
|
|
355
|
+
*
|
|
356
|
+
* **The guard that inverts, and the one that darkens a scene when it does not.** Ambient occlusion
|
|
357
|
+
* skips a pixel showing nothing — `depth >= 1.0` conventionally — and under reversed depth the far
|
|
358
|
+
* plane is 0.0, so that test never fires and occlusion is computed over the sky. The symptom is a
|
|
359
|
+
* frame that comes out *darker rather than broken*: measured at 320,706 changed pixels of 921,600
|
|
360
|
+
* with the mean luminance falling 18.5 to 15.3 and two thirds of mid-tones moved, which reads as a
|
|
361
|
+
* shading difference and hides among the seams reversed depth is meant to fix.
|
|
362
|
+
*
|
|
363
|
+
* Written as a comparison rather than a constant so the sense and the bound move together: a
|
|
364
|
+
* consumer of this cannot flip one and forget the other.
|
|
365
|
+
*/
|
|
366
|
+
export function glslIsFarDepth(depth: string): string {
|
|
367
|
+
return REVERSED_DEPTH ? `(${depth} <= 0.0)` : `(${depth} >= 1.0)`;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* The `[-1, 1]` to `[0, 1]` remap **without** the reversal, for a pass that is not reversed.
|
|
372
|
+
*
|
|
373
|
+
* **Because `EXT_clip_control` is context-wide and a shadow pass is not.** Turning it on puts every
|
|
374
|
+
* clip z in `[0, 1]`, including the shadow passes', whose light matrices are deliberately left
|
|
375
|
+
* conventional — so a light matrix built by `mat4.perspective` or `mat4.ortho` emits `[-1, 1]` and
|
|
376
|
+
* the context throws away everything below zero. Half of every shadow map's range disappears, which
|
|
377
|
+
* does not look like clipping: it looks like the scene is *darker*.
|
|
378
|
+
*
|
|
379
|
+
* So a shadow pass gets this instead of `GL_DEPTH_REMAP`: the same range change, the same sense.
|
|
380
|
+
*/
|
|
381
|
+
export const GL_SHADOW_REMAP = new Float32Array([
|
|
382
|
+
1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 1,
|
|
383
|
+
]);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A ceiling on how many pixels one frame may be, independent of how big the window is.
|
|
3
|
+
*
|
|
4
|
+
* `maxDevicePixelRatio` caps *density* — pixels per CSS pixel — which is the right lever
|
|
5
|
+
* for "is this panel high-DPI" and the wrong one for "how much frame is this". Density
|
|
6
|
+
* held constant, the cost of a frame is still whatever area the player last dragged their
|
|
7
|
+
* window to, and the frame is roughly 90% fragment-bound, so window size is an
|
|
8
|
+
* uncontrolled multiplier on the whole renderer.
|
|
9
|
+
*
|
|
10
|
+
* That is fine right up until it isn't, because vsync quantises the consequence. A frame
|
|
11
|
+
* that fits a 120 Hz slot with 5% to spare and then grows 10% does not run 10% slower; it
|
|
12
|
+
* misses the slot and is shown at 60. Going fullscreen is exactly such a growth — the
|
|
13
|
+
* browser's toolbar was the margin — so the symptom arrives as "fullscreen halves the
|
|
14
|
+
* frame rate", which sounds like a bug in fullscreen and is arithmetic about area.
|
|
15
|
+
*
|
|
16
|
+
* A budget makes that cost bounded and, more usefully, *legible*: a player can move it
|
|
17
|
+
* and watch the frame rate move, which is the same argument that put the resolution lever
|
|
18
|
+
* on the settings screen. Zero means uncapped, for a machine that would rather have the
|
|
19
|
+
* pixels.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/** Mutable so the caller can own one and keep `resize` allocation-free. */
|
|
23
|
+
export interface BufferSize {
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Smallest drawing buffer worth asking a driver for; zero is a GL error, not a picture. */
|
|
29
|
+
const MIN_SIDE = 2;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Fit `width` x `height` under `maxPixels`, preserving aspect, into `out`.
|
|
33
|
+
*
|
|
34
|
+
* Writes rather than returns, because `Renderer.resize` runs every frame and per-frame
|
|
35
|
+
* allocation is forbidden (AGENTS.md). Non-positive and non-finite budgets mean uncapped:
|
|
36
|
+
* this runs in the frame loop, where a corrupt stored setting has to degrade to the old
|
|
37
|
+
* behaviour rather than throw.
|
|
38
|
+
*
|
|
39
|
+
* Scaled by the square root of the ratio, so both axes shrink together and
|
|
40
|
+
* `Renderer.aspect` still describes the shot the camera composed for. Rounded *down*, so
|
|
41
|
+
* the budget is a promise rather than an approximation — the whole point is that a number
|
|
42
|
+
* a player chose is the number they get.
|
|
43
|
+
*/
|
|
44
|
+
export function fitToPixelBudget(
|
|
45
|
+
width: number,
|
|
46
|
+
height: number,
|
|
47
|
+
maxPixels: number,
|
|
48
|
+
out: BufferSize,
|
|
49
|
+
): void {
|
|
50
|
+
out.width = width;
|
|
51
|
+
out.height = height;
|
|
52
|
+
if (!Number.isFinite(maxPixels) || maxPixels <= 0) return;
|
|
53
|
+
|
|
54
|
+
const pixels = width * height;
|
|
55
|
+
if (pixels <= maxPixels) return;
|
|
56
|
+
|
|
57
|
+
const scale = Math.sqrt(maxPixels / pixels);
|
|
58
|
+
out.width = Math.max(MIN_SIDE, Math.floor(width * scale));
|
|
59
|
+
out.height = Math.max(MIN_SIDE, Math.floor(height * scale));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The size the next frame is drawn at, into `out`.
|
|
64
|
+
*
|
|
65
|
+
* **A locked buffer is handed back exactly, and no cap of any kind touches it.** That is
|
|
66
|
+
* the one rule in here that is not about performance: a lock is a caller naming a size for
|
|
67
|
+
* a reason no quality setting can see — a clip is 1080x1920 whatever anybody's frame rate
|
|
68
|
+
* is, and `Renderer.aspect` follows the lock so the replay's shots are composed for the
|
|
69
|
+
* *file* rather than for the window it is being written from. A budget applied over the
|
|
70
|
+
* top would silently write a file that is not the size it claims and re-frame every shot
|
|
71
|
+
* in it. Pass `dpr` already clamped; unlocked, the CSS box is scaled by it and then fitted
|
|
72
|
+
* under `maxPixels`.
|
|
73
|
+
*/
|
|
74
|
+
export function drawingBufferSize(
|
|
75
|
+
cssWidth: number,
|
|
76
|
+
cssHeight: number,
|
|
77
|
+
dpr: number,
|
|
78
|
+
lockedWidth: number,
|
|
79
|
+
lockedHeight: number,
|
|
80
|
+
maxPixels: number,
|
|
81
|
+
out: BufferSize,
|
|
82
|
+
): void {
|
|
83
|
+
if (lockedWidth > 0 && lockedHeight > 0) {
|
|
84
|
+
out.width = lockedWidth;
|
|
85
|
+
out.height = lockedHeight;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
fitToPixelBudget(Math.round(cssWidth * dpr), Math.round(cssHeight * dpr), maxPixels, out);
|
|
89
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 1x1 placeholders for sampler slots a pass declares but does not use.
|
|
3
|
+
*
|
|
4
|
+
* A shader's sampler uniforms exist whether or not the feature behind them is switched
|
|
5
|
+
* on: the flat pass declares three directional shadow maps and twelve cubemaps, and a
|
|
6
|
+
* quality profile with shadows off still compiles every one of them. The obvious way to
|
|
7
|
+
* say "there is nothing here" is to bind `null` to the unit, and it is wrong.
|
|
8
|
+
*
|
|
9
|
+
* A sampler bound to no texture is *incomplete*. The GL spec says sampling one yields
|
|
10
|
+
* zero, which sounds like a safe default and is only safe if the sample never executes.
|
|
11
|
+
* The guards in this engine are runtime values — `uShadowStrength <= 0.0`, an index
|
|
12
|
+
* compared against -1 — so a driver is free to fetch the descriptor before it evaluates
|
|
13
|
+
* the branch that would have skipped it. Descriptor fetches are scalar loads, and a
|
|
14
|
+
* descriptor for a texture that does not exist is not guaranteed to point anywhere.
|
|
15
|
+
*
|
|
16
|
+
* On a Radeon RX 9070 XT (RDNA4, Mesa 25.2.8) that read lands outside the process's GPU
|
|
17
|
+
* address space and faults:
|
|
18
|
+
*
|
|
19
|
+
* amdgpu: [gfxhub] page fault ... Faulty UTCL2 client ID: SQC (data)
|
|
20
|
+
* amdgpu: ring gfx_0.0.0 timeout -> Ring gfx_0.0.0 reset -> device wedged
|
|
21
|
+
*
|
|
22
|
+
* The context dies, the compositor stalls for a second or two while the driver resets the
|
|
23
|
+
* card, and nothing in the API reports an error — the page simply loses its context a few
|
|
24
|
+
* seconds in. Binding a real texture costs one 1x1 upload per renderer and removes the
|
|
25
|
+
* question: every declared sampler has something complete behind it, whether the pass
|
|
26
|
+
* reads it or not. three.js keeps an empty texture per target for the same reason.
|
|
27
|
+
*
|
|
28
|
+
* Not a workaround for one card. An incomplete sampler is undefined territory that
|
|
29
|
+
* happens to be survivable on most drivers, and this makes the engine stop relying on
|
|
30
|
+
* that.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/** Opaque black, which is what a shadow lookup should read where nothing occludes. */
|
|
34
|
+
const ONE_BLACK_TEXEL = new Uint8Array([0, 0, 0, 255]);
|
|
35
|
+
|
|
36
|
+
/** Full depth, which is the far plane: an occluder as far away as the light reaches. */
|
|
37
|
+
const ONE_WHITE_TEXEL = new Uint8Array([255]);
|
|
38
|
+
|
|
39
|
+
function allocate(gl: WebGL2RenderingContext, label: string): WebGLTexture {
|
|
40
|
+
const texture = gl.createTexture();
|
|
41
|
+
if (texture === null) throw new Error(`${label}: createTexture failed`);
|
|
42
|
+
return texture;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* A complete 1x1 texture for any unused `sampler2D` slot.
|
|
47
|
+
*
|
|
48
|
+
* `NEAREST` and `CLAMP_TO_EDGE` because a single texel has no mip chain: leaving the
|
|
49
|
+
* default `LINEAR_MIPMAP_LINEAR` minification filter on a texture with only level 0 makes
|
|
50
|
+
* it incomplete again, which is the exact state this exists to avoid.
|
|
51
|
+
*/
|
|
52
|
+
export function createEmptyTexture2D(gl: WebGL2RenderingContext): WebGLTexture {
|
|
53
|
+
const texture = allocate(gl, 'emptyTexture2D');
|
|
54
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
55
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, ONE_BLACK_TEXEL);
|
|
56
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
57
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
|
|
58
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
59
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
60
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
61
|
+
return texture;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The same for an unused `sampler2DArray` slot: one layer, one texel.
|
|
66
|
+
*
|
|
67
|
+
* The point-shadow array exists only once a world has said how many lights it has, and a scene is
|
|
68
|
+
* free to draw before it does. One layer rather than the full pool's worth, because nothing reads
|
|
69
|
+
* it: `uPointShadowLayer` is −1 for every light while this is bound, and the layer index never
|
|
70
|
+
* reaches a fetch. It is here to be *complete*, which is the whole subject of this file.
|
|
71
|
+
*
|
|
72
|
+
* White rather than black, matching the one-texel cube the WebGPU side keeps and for its reason:
|
|
73
|
+
* a full-depth texel reads as an occluder at the far plane, so the worst a lookup that should not
|
|
74
|
+
* have happened can do is find nothing in the way. Zeroes would mean an occluder pressed against
|
|
75
|
+
* every lamp, and every surface in the scene in shadow.
|
|
76
|
+
*/
|
|
77
|
+
export function createEmptyTexture2DArray(gl: WebGL2RenderingContext): WebGLTexture {
|
|
78
|
+
const texture = allocate(gl, 'emptyTexture2DArray');
|
|
79
|
+
gl.bindTexture(gl.TEXTURE_2D_ARRAY, texture);
|
|
80
|
+
gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.R8, 1, 1, 1);
|
|
81
|
+
gl.texSubImage3D(
|
|
82
|
+
gl.TEXTURE_2D_ARRAY,
|
|
83
|
+
0,
|
|
84
|
+
0,
|
|
85
|
+
0,
|
|
86
|
+
0,
|
|
87
|
+
1,
|
|
88
|
+
1,
|
|
89
|
+
1,
|
|
90
|
+
gl.RED,
|
|
91
|
+
gl.UNSIGNED_BYTE,
|
|
92
|
+
ONE_WHITE_TEXEL,
|
|
93
|
+
);
|
|
94
|
+
gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
95
|
+
gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
|
|
96
|
+
gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
97
|
+
gl.texParameteri(gl.TEXTURE_2D_ARRAY, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
98
|
+
gl.bindTexture(gl.TEXTURE_2D_ARRAY, null);
|
|
99
|
+
return texture;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* The same for an unused `samplerCube` slot.
|
|
104
|
+
*
|
|
105
|
+
* All six faces are supplied: a cubemap missing any one of them is incomplete however
|
|
106
|
+
* complete the other five are.
|
|
107
|
+
*/
|
|
108
|
+
export function createEmptyTextureCube(gl: WebGL2RenderingContext): WebGLTexture {
|
|
109
|
+
const texture = allocate(gl, 'emptyTextureCube');
|
|
110
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture);
|
|
111
|
+
for (let face = 0; face < 6; face++) {
|
|
112
|
+
gl.texImage2D(
|
|
113
|
+
gl.TEXTURE_CUBE_MAP_POSITIVE_X + face,
|
|
114
|
+
0,
|
|
115
|
+
gl.RGBA,
|
|
116
|
+
1,
|
|
117
|
+
1,
|
|
118
|
+
0,
|
|
119
|
+
gl.RGBA,
|
|
120
|
+
gl.UNSIGNED_BYTE,
|
|
121
|
+
ONE_BLACK_TEXEL,
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
125
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
|
|
126
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
127
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
128
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
|
|
129
|
+
return texture;
|
|
130
|
+
}
|