super-three 0.179.0 → 0.184.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 +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents } from '../../../nodes/Nodes.js';
|
|
1
|
+
import { GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents, CodeNode } from '../../../nodes/Nodes.js';
|
|
2
2
|
|
|
3
3
|
import NodeUniformBuffer from '../../common/nodes/NodeUniformBuffer.js';
|
|
4
4
|
import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
|
|
@@ -7,10 +7,28 @@ import { NodeSampledTexture, NodeSampledCubeTexture, NodeSampledTexture3D } from
|
|
|
7
7
|
|
|
8
8
|
import { NoColorSpace, ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat, RedIntegerFormat, RGIntegerFormat, UnsignedByteType, UnsignedIntType, UnsignedShortType, RedFormat, RGFormat, IntType, RGBFormat, RGBAFormat, FloatType } from '../../../constants.js';
|
|
9
9
|
import { DataTexture } from '../../../textures/DataTexture.js';
|
|
10
|
+
import { error } from '../../../utils.js';
|
|
11
|
+
|
|
12
|
+
const glslPolyfills = {
|
|
13
|
+
bitcast_int_uint: new CodeNode( /* glsl */'uint tsl_bitcast_int_to_uint ( int x ) { return floatBitsToUint( intBitsToFloat ( x ) ); }' ),
|
|
14
|
+
bitcast_uint_int: new CodeNode( /* glsl */'uint tsl_bitcast_uint_to_int ( uint x ) { return floatBitsToInt( uintBitsToFloat ( x ) ); }' )
|
|
15
|
+
};
|
|
10
16
|
|
|
11
17
|
const glslMethods = {
|
|
12
18
|
textureDimensions: 'textureSize',
|
|
13
|
-
equals: 'equal'
|
|
19
|
+
equals: 'equal',
|
|
20
|
+
bitcast_float_int: 'floatBitsToInt',
|
|
21
|
+
bitcast_int_float: 'intBitsToFloat',
|
|
22
|
+
bitcast_uint_float: 'uintBitsToFloat',
|
|
23
|
+
bitcast_float_uint: 'floatBitsToUint',
|
|
24
|
+
bitcast_uint_int: 'tsl_bitcast_uint_to_int',
|
|
25
|
+
bitcast_int_uint: 'tsl_bitcast_int_to_uint',
|
|
26
|
+
floatpack_snorm_2x16: 'packSnorm2x16',
|
|
27
|
+
floatpack_unorm_2x16: 'packUnorm2x16',
|
|
28
|
+
floatpack_float16_2x16: 'packHalf2x16',
|
|
29
|
+
floatunpack_snorm_2x16: 'unpackSnorm2x16',
|
|
30
|
+
floatunpack_unorm_2x16: 'unpackUnorm2x16',
|
|
31
|
+
floatunpack_float16_2x16: 'unpackHalf2x16'
|
|
14
32
|
};
|
|
15
33
|
|
|
16
34
|
const precisionLib = {
|
|
@@ -51,9 +69,9 @@ precision highp isampler3D;
|
|
|
51
69
|
precision highp isamplerCube;
|
|
52
70
|
precision highp isampler2DArray;
|
|
53
71
|
|
|
54
|
-
precision
|
|
55
|
-
precision
|
|
56
|
-
precision
|
|
72
|
+
precision highp sampler2DShadow;
|
|
73
|
+
precision highp sampler2DArrayShadow;
|
|
74
|
+
precision highp samplerCubeShadow;
|
|
57
75
|
`;
|
|
58
76
|
|
|
59
77
|
/**
|
|
@@ -122,6 +140,25 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
122
140
|
|
|
123
141
|
}
|
|
124
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Includes the given method name into the current
|
|
145
|
+
* function node.
|
|
146
|
+
*
|
|
147
|
+
* @private
|
|
148
|
+
* @param {string} name - The method name to include.
|
|
149
|
+
* @return {CodeNode} The respective code node.
|
|
150
|
+
*/
|
|
151
|
+
_include( name ) {
|
|
152
|
+
|
|
153
|
+
const codeNode = glslPolyfills[ name ];
|
|
154
|
+
codeNode.build( this );
|
|
155
|
+
|
|
156
|
+
this.addInclude( codeNode );
|
|
157
|
+
|
|
158
|
+
return codeNode;
|
|
159
|
+
|
|
160
|
+
}
|
|
161
|
+
|
|
125
162
|
/**
|
|
126
163
|
* Returns the native shader method name for a given generic name.
|
|
127
164
|
*
|
|
@@ -130,10 +167,67 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
130
167
|
*/
|
|
131
168
|
getMethod( method ) {
|
|
132
169
|
|
|
170
|
+
if ( glslPolyfills[ method ] !== undefined ) {
|
|
171
|
+
|
|
172
|
+
this._include( method );
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
133
176
|
return glslMethods[ method ] || method;
|
|
134
177
|
|
|
135
178
|
}
|
|
136
179
|
|
|
180
|
+
/**
|
|
181
|
+
* Returns the bitcast method name for a given input and outputType.
|
|
182
|
+
*
|
|
183
|
+
* @param {string} type - The output type to bitcast to.
|
|
184
|
+
* @param {string} inputType - The input type of the.
|
|
185
|
+
* @return {string} The resolved WGSL bitcast invocation.
|
|
186
|
+
*/
|
|
187
|
+
getBitcastMethod( type, inputType ) {
|
|
188
|
+
|
|
189
|
+
return this.getMethod( `bitcast_${ inputType }_${ type }` );
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Returns the float packing method name for a given numeric encoding.
|
|
195
|
+
*
|
|
196
|
+
* @param {string} encoding - The numeric encoding that describes how the float values are mapped to the integer range.
|
|
197
|
+
* @returns {string} The resolved GLSL float packing method name.
|
|
198
|
+
*/
|
|
199
|
+
getFloatPackingMethod( encoding ) {
|
|
200
|
+
|
|
201
|
+
return this.getMethod( `floatpack_${ encoding }_2x16` );
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Returns the float unpacking method name for a given numeric encoding.
|
|
207
|
+
*
|
|
208
|
+
* @param {string} encoding - The numeric encoding that describes how the integer values are mapped to the float range.
|
|
209
|
+
* @returns {string} The resolved GLSL float unpacking method name.
|
|
210
|
+
*/
|
|
211
|
+
getFloatUnpackingMethod( encoding ) {
|
|
212
|
+
|
|
213
|
+
return this.getMethod( `floatunpack_${ encoding }_2x16` );
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Returns the native snippet for a ternary operation.
|
|
219
|
+
*
|
|
220
|
+
* @param {string} condSnippet - The condition determining which expression gets resolved.
|
|
221
|
+
* @param {string} ifSnippet - The expression to resolve to if the condition is true.
|
|
222
|
+
* @param {string} elseSnippet - The expression to resolve to if the condition is false.
|
|
223
|
+
* @return {string} The resolved method name.
|
|
224
|
+
*/
|
|
225
|
+
getTernary( condSnippet, ifSnippet, elseSnippet ) {
|
|
226
|
+
|
|
227
|
+
return `${condSnippet} ? ${ifSnippet} : ${elseSnippet}`;
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
|
|
137
231
|
/**
|
|
138
232
|
* Returns the output struct name. Not relevant for GLSL.
|
|
139
233
|
*
|
|
@@ -266,7 +360,7 @@ ${ flowData.code }
|
|
|
266
360
|
|
|
267
361
|
if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
|
|
268
362
|
|
|
269
|
-
return
|
|
363
|
+
return node.name;
|
|
270
364
|
|
|
271
365
|
}
|
|
272
366
|
|
|
@@ -336,7 +430,7 @@ ${ flowData.code }
|
|
|
336
430
|
const channel = '.' + vectorComponents.join( '' ).slice( 0, itemSize );
|
|
337
431
|
const uvSnippet = `ivec2(${indexSnippet} % ${ propertySizeName }, ${indexSnippet} / ${ propertySizeName })`;
|
|
338
432
|
|
|
339
|
-
const snippet = this.generateTextureLoad( null, textureName, uvSnippet,
|
|
433
|
+
const snippet = this.generateTextureLoad( null, textureName, uvSnippet, '0', null, null );
|
|
340
434
|
|
|
341
435
|
//
|
|
342
436
|
|
|
@@ -366,25 +460,54 @@ ${ flowData.code }
|
|
|
366
460
|
/**
|
|
367
461
|
* Generates the GLSL snippet that reads a single texel from a texture without sampling or filtering.
|
|
368
462
|
*
|
|
369
|
-
* @param {Texture} texture - The texture.
|
|
463
|
+
* @param {?Texture} texture - The texture.
|
|
370
464
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
371
465
|
* @param {string} uvIndexSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
466
|
+
* @param {?string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
372
467
|
* @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
|
|
373
|
-
* @param {string}
|
|
468
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
374
469
|
* @return {string} The GLSL snippet.
|
|
375
470
|
*/
|
|
376
|
-
generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet,
|
|
471
|
+
generateTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
472
|
+
|
|
473
|
+
if ( levelSnippet === null ) levelSnippet = '0';
|
|
474
|
+
|
|
475
|
+
let snippet;
|
|
377
476
|
|
|
378
477
|
if ( depthSnippet ) {
|
|
379
478
|
|
|
380
|
-
|
|
479
|
+
if ( offsetSnippet ) {
|
|
480
|
+
|
|
481
|
+
snippet = `texelFetchOffset( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ), ${ offsetSnippet } )`;
|
|
482
|
+
|
|
483
|
+
} else {
|
|
484
|
+
|
|
485
|
+
snippet = `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), int( ${ levelSnippet } ) )`;
|
|
486
|
+
|
|
487
|
+
}
|
|
381
488
|
|
|
382
489
|
} else {
|
|
383
490
|
|
|
384
|
-
|
|
491
|
+
if ( offsetSnippet ) {
|
|
492
|
+
|
|
493
|
+
snippet = `texelFetchOffset( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ), ${ offsetSnippet } )`;
|
|
494
|
+
|
|
495
|
+
} else {
|
|
496
|
+
|
|
497
|
+
snippet = `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, int( ${ levelSnippet } ) )`;
|
|
498
|
+
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
if ( texture !== null && texture.isDepthTexture ) {
|
|
504
|
+
|
|
505
|
+
snippet += '.x';
|
|
385
506
|
|
|
386
507
|
}
|
|
387
508
|
|
|
509
|
+
return snippet;
|
|
510
|
+
|
|
388
511
|
}
|
|
389
512
|
|
|
390
513
|
/**
|
|
@@ -394,23 +517,24 @@ ${ flowData.code }
|
|
|
394
517
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
395
518
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
396
519
|
* @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
|
|
520
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
397
521
|
* @return {string} The GLSL snippet.
|
|
398
522
|
*/
|
|
399
|
-
generateTexture( texture, textureProperty, uvSnippet, depthSnippet ) {
|
|
523
|
+
generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet ) {
|
|
524
|
+
|
|
525
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
400
526
|
|
|
401
527
|
if ( texture.isDepthTexture ) {
|
|
402
528
|
|
|
403
|
-
if (
|
|
529
|
+
if ( offsetSnippet ) return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet } ).x`;
|
|
404
530
|
|
|
405
531
|
return `texture( ${ textureProperty }, ${ uvSnippet } ).x`;
|
|
406
532
|
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
533
|
+
}
|
|
410
534
|
|
|
411
|
-
|
|
535
|
+
if ( offsetSnippet ) return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet } )`;
|
|
412
536
|
|
|
413
|
-
}
|
|
537
|
+
return `texture( ${ textureProperty }, ${ uvSnippet } )`;
|
|
414
538
|
|
|
415
539
|
}
|
|
416
540
|
|
|
@@ -421,9 +545,19 @@ ${ flowData.code }
|
|
|
421
545
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
422
546
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
423
547
|
* @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
548
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
549
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
424
550
|
* @return {string} The GLSL snippet.
|
|
425
551
|
*/
|
|
426
|
-
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet ) {
|
|
552
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
553
|
+
|
|
554
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
555
|
+
|
|
556
|
+
if ( offsetSnippet ) {
|
|
557
|
+
|
|
558
|
+
return `textureLodOffset( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
559
|
+
|
|
560
|
+
}
|
|
427
561
|
|
|
428
562
|
return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
429
563
|
|
|
@@ -436,9 +570,19 @@ ${ flowData.code }
|
|
|
436
570
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
437
571
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
438
572
|
* @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
|
|
573
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
574
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
439
575
|
* @return {string} The GLSL snippet.
|
|
440
576
|
*/
|
|
441
|
-
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet ) {
|
|
577
|
+
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet ) {
|
|
578
|
+
|
|
579
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
580
|
+
|
|
581
|
+
if ( offsetSnippet ) {
|
|
582
|
+
|
|
583
|
+
return `textureOffset( ${ textureProperty }, ${ uvSnippet }, ${ offsetSnippet }, ${ biasSnippet } )`;
|
|
584
|
+
|
|
585
|
+
}
|
|
442
586
|
|
|
443
587
|
return `texture( ${ textureProperty }, ${ uvSnippet }, ${ biasSnippet } )`;
|
|
444
588
|
|
|
@@ -451,9 +595,19 @@ ${ flowData.code }
|
|
|
451
595
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
452
596
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
453
597
|
* @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
|
|
598
|
+
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
599
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
454
600
|
* @return {string} The GLSL snippet.
|
|
455
601
|
*/
|
|
456
|
-
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet ) {
|
|
602
|
+
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet ) {
|
|
603
|
+
|
|
604
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
605
|
+
|
|
606
|
+
if ( offsetSnippet ) {
|
|
607
|
+
|
|
608
|
+
return `textureGradOffset( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;
|
|
609
|
+
|
|
610
|
+
}
|
|
457
611
|
|
|
458
612
|
return `textureGrad( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
|
|
459
613
|
|
|
@@ -468,53 +622,47 @@ ${ flowData.code }
|
|
|
468
622
|
* @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
|
|
469
623
|
* @param {string} compareSnippet - A GLSL snippet that represents the reference value.
|
|
470
624
|
* @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
|
|
625
|
+
* @param {?string} offsetSnippet - A GLSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
471
626
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
472
627
|
* @return {string} The GLSL snippet.
|
|
473
628
|
*/
|
|
474
|
-
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
629
|
+
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
475
630
|
|
|
476
631
|
if ( shaderStage === 'fragment' ) {
|
|
477
632
|
|
|
478
|
-
|
|
633
|
+
// Cube shadow maps use vec4(direction, compareValue)
|
|
634
|
+
if ( texture.isCubeTexture ) {
|
|
479
635
|
|
|
480
|
-
return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${
|
|
636
|
+
return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ compareSnippet } ) )`;
|
|
481
637
|
|
|
482
638
|
}
|
|
483
639
|
|
|
484
|
-
|
|
640
|
+
if ( depthSnippet ) {
|
|
485
641
|
|
|
486
|
-
|
|
642
|
+
if ( offsetSnippet ) {
|
|
487
643
|
|
|
488
|
-
|
|
644
|
+
return `textureOffset( ${ textureProperty }, vec4( ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } ), ${ offsetSnippet } )`;
|
|
489
645
|
|
|
490
|
-
|
|
646
|
+
}
|
|
491
647
|
|
|
492
|
-
|
|
648
|
+
return `texture( ${ textureProperty }, vec4( ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } ) )`;
|
|
493
649
|
|
|
494
|
-
|
|
495
|
-
* Returns the variables of the given shader stage as a GLSL string.
|
|
496
|
-
*
|
|
497
|
-
* @param {string} shaderStage - The shader stage.
|
|
498
|
-
* @return {string} The GLSL snippet that defines the variables.
|
|
499
|
-
*/
|
|
500
|
-
getVars( shaderStage ) {
|
|
650
|
+
}
|
|
501
651
|
|
|
502
|
-
|
|
652
|
+
if ( offsetSnippet ) {
|
|
503
653
|
|
|
504
|
-
|
|
654
|
+
return `textureOffset( ${ textureProperty }, vec3( ${ uvSnippet }, ${ compareSnippet } ), ${ offsetSnippet } )`;
|
|
505
655
|
|
|
506
|
-
|
|
656
|
+
}
|
|
507
657
|
|
|
508
|
-
|
|
658
|
+
return `texture( ${ textureProperty }, vec3( ${ uvSnippet }, ${ compareSnippet } ) )`;
|
|
509
659
|
|
|
510
|
-
|
|
660
|
+
} else {
|
|
511
661
|
|
|
512
|
-
}
|
|
662
|
+
error( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );
|
|
513
663
|
|
|
514
664
|
}
|
|
515
665
|
|
|
516
|
-
return snippets.join( '\n\t' );
|
|
517
|
-
|
|
518
666
|
}
|
|
519
667
|
|
|
520
668
|
/**
|
|
@@ -585,6 +733,20 @@ ${ flowData.code }
|
|
|
585
733
|
|
|
586
734
|
snippet = `samplerCube ${ uniform.name };`;
|
|
587
735
|
|
|
736
|
+
} else if ( uniform.type === 'cubeDepthTexture' ) {
|
|
737
|
+
|
|
738
|
+
const texture = uniform.node.value;
|
|
739
|
+
|
|
740
|
+
if ( texture.compareFunction ) {
|
|
741
|
+
|
|
742
|
+
snippet = `samplerCubeShadow ${ uniform.name };`;
|
|
743
|
+
|
|
744
|
+
} else {
|
|
745
|
+
|
|
746
|
+
snippet = `samplerCube ${ uniform.name };`;
|
|
747
|
+
|
|
748
|
+
}
|
|
749
|
+
|
|
588
750
|
} else if ( uniform.type === 'buffer' ) {
|
|
589
751
|
|
|
590
752
|
const bufferNode = uniform.node;
|
|
@@ -596,32 +758,56 @@ ${ flowData.code }
|
|
|
596
758
|
|
|
597
759
|
} else {
|
|
598
760
|
|
|
599
|
-
const
|
|
761
|
+
const groupName = uniform.groupNode.name;
|
|
600
762
|
|
|
601
|
-
|
|
763
|
+
// Check if this group has already been processed
|
|
764
|
+
if ( uniformGroups[ groupName ] === undefined ) {
|
|
602
765
|
|
|
603
|
-
|
|
766
|
+
// Get the shared uniform group that contains uniforms from all stages
|
|
767
|
+
const sharedUniformGroup = this.uniformGroups[ groupName ];
|
|
604
768
|
|
|
605
|
-
|
|
769
|
+
if ( sharedUniformGroup !== undefined ) {
|
|
770
|
+
|
|
771
|
+
// Generate snippets for ALL uniforms in this shared group
|
|
772
|
+
const snippets = [];
|
|
773
|
+
|
|
774
|
+
for ( const sharedUniform of sharedUniformGroup.uniforms ) {
|
|
775
|
+
|
|
776
|
+
const type = sharedUniform.getType();
|
|
777
|
+
const vectorType = this.getVectorType( type );
|
|
778
|
+
const precision = sharedUniform.nodeUniform.node.precision;
|
|
606
779
|
|
|
607
|
-
|
|
780
|
+
let uniformSnippet = `${ vectorType } ${ sharedUniform.name };`;
|
|
608
781
|
|
|
609
|
-
|
|
782
|
+
if ( precision !== null ) {
|
|
610
783
|
|
|
611
|
-
|
|
784
|
+
uniformSnippet = precisionLib[ precision ] + ' ' + uniformSnippet;
|
|
785
|
+
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
snippets.push( '\t' + uniformSnippet );
|
|
789
|
+
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
uniformGroups[ groupName ] = snippets;
|
|
793
|
+
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
group = true;
|
|
612
799
|
|
|
613
800
|
}
|
|
614
801
|
|
|
615
|
-
if ( group ) {
|
|
802
|
+
if ( ! group ) {
|
|
616
803
|
|
|
617
|
-
|
|
804
|
+
const precision = uniform.node.precision;
|
|
618
805
|
|
|
619
|
-
|
|
620
|
-
const groupSnippets = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = [] );
|
|
806
|
+
if ( precision !== null ) {
|
|
621
807
|
|
|
622
|
-
|
|
808
|
+
snippet = precisionLib[ precision ] + ' ' + snippet;
|
|
623
809
|
|
|
624
|
-
|
|
810
|
+
}
|
|
625
811
|
|
|
626
812
|
snippet = 'uniform ' + snippet;
|
|
627
813
|
|
|
@@ -637,7 +823,7 @@ ${ flowData.code }
|
|
|
637
823
|
|
|
638
824
|
const groupSnippets = uniformGroups[ name ];
|
|
639
825
|
|
|
640
|
-
output += this._getGLSLUniformStruct(
|
|
826
|
+
output += this._getGLSLUniformStruct( name, groupSnippets.join( '\n' ) ) + '\n';
|
|
641
827
|
|
|
642
828
|
}
|
|
643
829
|
|
|
@@ -867,7 +1053,8 @@ ${ flowData.code }
|
|
|
867
1053
|
}
|
|
868
1054
|
|
|
869
1055
|
/**
|
|
870
|
-
*
|
|
1056
|
+
* Contextually returns either the vertex stage instance index builtin
|
|
1057
|
+
* or the linearized index of an compute invocation within a grid of workgroups.
|
|
871
1058
|
*
|
|
872
1059
|
* @return {string} The instance index.
|
|
873
1060
|
*/
|
|
@@ -878,7 +1065,7 @@ ${ flowData.code }
|
|
|
878
1065
|
}
|
|
879
1066
|
|
|
880
1067
|
/**
|
|
881
|
-
* Returns the invocation
|
|
1068
|
+
* Returns a builtin representing the index of an invocation within its workgroup.
|
|
882
1069
|
*
|
|
883
1070
|
* @return {string} The invocation local index.
|
|
884
1071
|
*/
|
|
@@ -892,6 +1079,33 @@ ${ flowData.code }
|
|
|
892
1079
|
|
|
893
1080
|
}
|
|
894
1081
|
|
|
1082
|
+
/**
|
|
1083
|
+
* Returns a builtin representing the size of a subgroup within the current shader.
|
|
1084
|
+
*/
|
|
1085
|
+
getSubgroupSize() {
|
|
1086
|
+
|
|
1087
|
+
error( 'GLSLNodeBuilder: WebGLBackend does not support the subgroupSize node' );
|
|
1088
|
+
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
/**
|
|
1092
|
+
* Returns a builtin representing the index of an invocation within its subgroup.
|
|
1093
|
+
*/
|
|
1094
|
+
getInvocationSubgroupIndex() {
|
|
1095
|
+
|
|
1096
|
+
error( 'GLSLNodeBuilder: WebGLBackend does not support the invocationSubgroupIndex node' );
|
|
1097
|
+
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
/**
|
|
1101
|
+
* Returns a builtin representing the index of the current invocation's subgroup within its workgroup.
|
|
1102
|
+
*/
|
|
1103
|
+
getSubgroupIndex() {
|
|
1104
|
+
|
|
1105
|
+
error( 'GLSLNodeBuilder: WebGLBackend does not support the subgroupIndex node' );
|
|
1106
|
+
|
|
1107
|
+
}
|
|
1108
|
+
|
|
895
1109
|
/**
|
|
896
1110
|
* Returns the draw index builtin.
|
|
897
1111
|
*
|
|
@@ -905,9 +1119,11 @@ ${ flowData.code }
|
|
|
905
1119
|
|
|
906
1120
|
return 'uint( gl_DrawID )';
|
|
907
1121
|
|
|
908
|
-
}
|
|
1122
|
+
} else {
|
|
909
1123
|
|
|
910
|
-
|
|
1124
|
+
return 'nodeUniformDrawId'; // fallback to uniform
|
|
1125
|
+
|
|
1126
|
+
}
|
|
911
1127
|
|
|
912
1128
|
}
|
|
913
1129
|
|
|
@@ -1183,14 +1399,14 @@ ${shaderData.varyings}
|
|
|
1183
1399
|
// attributes
|
|
1184
1400
|
${shaderData.attributes}
|
|
1185
1401
|
|
|
1402
|
+
// vars
|
|
1403
|
+
${shaderData.vars}
|
|
1404
|
+
|
|
1186
1405
|
// codes
|
|
1187
1406
|
${shaderData.codes}
|
|
1188
1407
|
|
|
1189
1408
|
void main() {
|
|
1190
1409
|
|
|
1191
|
-
// vars
|
|
1192
|
-
${shaderData.vars}
|
|
1193
|
-
|
|
1194
1410
|
// transforms
|
|
1195
1411
|
${shaderData.transforms}
|
|
1196
1412
|
|
|
@@ -1223,23 +1439,23 @@ ${shaderData.extensions}
|
|
|
1223
1439
|
// precision
|
|
1224
1440
|
${ defaultPrecisions }
|
|
1225
1441
|
|
|
1442
|
+
// structs
|
|
1443
|
+
${shaderData.structs}
|
|
1444
|
+
|
|
1226
1445
|
// uniforms
|
|
1227
1446
|
${shaderData.uniforms}
|
|
1228
1447
|
|
|
1229
1448
|
// varyings
|
|
1230
1449
|
${shaderData.varyings}
|
|
1231
1450
|
|
|
1451
|
+
// vars
|
|
1452
|
+
${shaderData.vars}
|
|
1453
|
+
|
|
1232
1454
|
// codes
|
|
1233
1455
|
${shaderData.codes}
|
|
1234
1456
|
|
|
1235
|
-
// structs
|
|
1236
|
-
${shaderData.structs}
|
|
1237
|
-
|
|
1238
1457
|
void main() {
|
|
1239
1458
|
|
|
1240
|
-
// vars
|
|
1241
|
-
${shaderData.vars}
|
|
1242
|
-
|
|
1243
1459
|
// flow
|
|
1244
1460
|
${shaderData.flow}
|
|
1245
1461
|
|
|
@@ -1310,12 +1526,26 @@ void main() {
|
|
|
1310
1526
|
stageData.uniforms = this.getUniforms( shaderStage );
|
|
1311
1527
|
stageData.attributes = this.getAttributes( shaderStage );
|
|
1312
1528
|
stageData.varyings = this.getVaryings( shaderStage );
|
|
1313
|
-
stageData.vars = this.getVars( shaderStage );
|
|
1529
|
+
stageData.vars = this.getVars( shaderStage, true );
|
|
1314
1530
|
stageData.structs = this.getStructs( shaderStage );
|
|
1315
1531
|
stageData.codes = this.getCodes( shaderStage );
|
|
1316
1532
|
stageData.transforms = this.getTransforms( shaderStage );
|
|
1317
1533
|
stageData.flow = flow;
|
|
1318
1534
|
|
|
1535
|
+
// fallbacks
|
|
1536
|
+
|
|
1537
|
+
if ( shaderStage === 'vertex' ) {
|
|
1538
|
+
|
|
1539
|
+
const ext = this.renderer.backend.extensions;
|
|
1540
|
+
|
|
1541
|
+
if ( this.object.isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) === false ) {
|
|
1542
|
+
|
|
1543
|
+
stageData.uniforms += '\nuniform uint nodeUniformDrawId;\n';
|
|
1544
|
+
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1319
1549
|
}
|
|
1320
1550
|
|
|
1321
1551
|
if ( this.material !== null ) {
|
|
@@ -1363,7 +1593,7 @@ void main() {
|
|
|
1363
1593
|
uniformGPU = new NodeSampledTexture( uniformNode.name, uniformNode.node, group );
|
|
1364
1594
|
bindings.push( uniformGPU );
|
|
1365
1595
|
|
|
1366
|
-
} else if ( type === 'cubeTexture' ) {
|
|
1596
|
+
} else if ( type === 'cubeTexture' || type === 'cubeDepthTexture' ) {
|
|
1367
1597
|
|
|
1368
1598
|
uniformGPU = new NodeSampledCubeTexture( uniformNode.name, uniformNode.node, group );
|
|
1369
1599
|
bindings.push( uniformGPU );
|
|
@@ -1375,11 +1605,22 @@ void main() {
|
|
|
1375
1605
|
|
|
1376
1606
|
} else if ( type === 'buffer' ) {
|
|
1377
1607
|
|
|
1378
|
-
node.name = `NodeBuffer_${ node.id }`;
|
|
1379
1608
|
uniformNode.name = `buffer${ node.id }`;
|
|
1380
1609
|
|
|
1381
|
-
const
|
|
1382
|
-
|
|
1610
|
+
const sharedData = this.getSharedDataFromNode( node );
|
|
1611
|
+
|
|
1612
|
+
let buffer = sharedData.buffer;
|
|
1613
|
+
|
|
1614
|
+
if ( buffer === undefined ) {
|
|
1615
|
+
|
|
1616
|
+
node.name = `NodeBuffer_${ node.id }`;
|
|
1617
|
+
|
|
1618
|
+
buffer = new NodeUniformBuffer( node, group );
|
|
1619
|
+
buffer.name = node.name;
|
|
1620
|
+
|
|
1621
|
+
sharedData.buffer = buffer;
|
|
1622
|
+
|
|
1623
|
+
}
|
|
1383
1624
|
|
|
1384
1625
|
bindings.push( buffer );
|
|
1385
1626
|
|
|
@@ -1387,24 +1628,38 @@ void main() {
|
|
|
1387
1628
|
|
|
1388
1629
|
} else {
|
|
1389
1630
|
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
let uniformsGroup = uniformsStage[ groupName ];
|
|
1631
|
+
let uniformsGroup = this.uniformGroups[ groupName ];
|
|
1393
1632
|
|
|
1394
1633
|
if ( uniformsGroup === undefined ) {
|
|
1395
1634
|
|
|
1396
|
-
uniformsGroup = new NodeUniformsGroup(
|
|
1397
|
-
//uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
1635
|
+
uniformsGroup = new NodeUniformsGroup( groupName, group );
|
|
1398
1636
|
|
|
1399
|
-
|
|
1637
|
+
this.uniformGroups[ groupName ] = uniformsGroup;
|
|
1400
1638
|
|
|
1401
1639
|
bindings.push( uniformsGroup );
|
|
1402
1640
|
|
|
1641
|
+
} else {
|
|
1642
|
+
|
|
1643
|
+
// Add to bindings for this stage if not already present
|
|
1644
|
+
if ( bindings.indexOf( uniformsGroup ) === - 1 ) {
|
|
1645
|
+
|
|
1646
|
+
bindings.push( uniformsGroup );
|
|
1647
|
+
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1403
1650
|
}
|
|
1404
1651
|
|
|
1405
1652
|
uniformGPU = this.getNodeUniform( uniformNode, type );
|
|
1406
1653
|
|
|
1407
|
-
|
|
1654
|
+
// Only add uniform if not already present in the group (check by name to avoid duplicates across stages)
|
|
1655
|
+
const uniformName = uniformGPU.name;
|
|
1656
|
+
const alreadyExists = uniformsGroup.uniforms.some( u => u.name === uniformName );
|
|
1657
|
+
|
|
1658
|
+
if ( ! alreadyExists ) {
|
|
1659
|
+
|
|
1660
|
+
uniformsGroup.addUniform( uniformGPU );
|
|
1661
|
+
|
|
1662
|
+
}
|
|
1408
1663
|
|
|
1409
1664
|
}
|
|
1410
1665
|
|