super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -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 +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- 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 +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- 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/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/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/SimplexNoise.js +1 -1
- 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/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- 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 +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- 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 +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- 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 +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- 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 +8 -6
- 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/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 +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- 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/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- 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 +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- 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/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -115,7 +115,7 @@ class NodeFrame {
|
|
|
115
115
|
* @private
|
|
116
116
|
* @param {WeakMap<Node, Object>} referenceMap - The reference weak map.
|
|
117
117
|
* @param {Node} nodeRef - The reference to the current node.
|
|
118
|
-
* @return {Object<string,WeakMap
|
|
118
|
+
* @return {Object<string,WeakMap<Object, number>>} The dictionary.
|
|
119
119
|
*/
|
|
120
120
|
_getMaps( referenceMap, nodeRef ) {
|
|
121
121
|
|
|
@@ -124,8 +124,8 @@ class NodeFrame {
|
|
|
124
124
|
if ( maps === undefined ) {
|
|
125
125
|
|
|
126
126
|
maps = {
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
renderId: 0,
|
|
128
|
+
frameId: 0,
|
|
129
129
|
};
|
|
130
130
|
|
|
131
131
|
referenceMap.set( nodeRef, maps );
|
|
@@ -151,13 +151,13 @@ class NodeFrame {
|
|
|
151
151
|
|
|
152
152
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
153
153
|
|
|
154
|
-
const
|
|
154
|
+
const nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );
|
|
155
155
|
|
|
156
|
-
if (
|
|
156
|
+
if ( nodeUpdateBeforeMap.frameId !== this.frameId ) {
|
|
157
157
|
|
|
158
158
|
if ( node.updateBefore( this ) !== false ) {
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
nodeUpdateBeforeMap.frameId = this.frameId;
|
|
161
161
|
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -165,13 +165,13 @@ class NodeFrame {
|
|
|
165
165
|
|
|
166
166
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
167
167
|
|
|
168
|
-
const
|
|
168
|
+
const nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );
|
|
169
169
|
|
|
170
|
-
if (
|
|
170
|
+
if ( nodeUpdateBeforeMap.renderId !== this.renderId ) {
|
|
171
171
|
|
|
172
172
|
if ( node.updateBefore( this ) !== false ) {
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
nodeUpdateBeforeMap.renderId = this.renderId;
|
|
175
175
|
|
|
176
176
|
}
|
|
177
177
|
|
|
@@ -200,13 +200,13 @@ class NodeFrame {
|
|
|
200
200
|
|
|
201
201
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
202
202
|
|
|
203
|
-
const
|
|
203
|
+
const nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );
|
|
204
204
|
|
|
205
|
-
if (
|
|
205
|
+
if ( nodeUpdateAfterMap.frameId !== this.frameId ) {
|
|
206
206
|
|
|
207
207
|
if ( node.updateAfter( this ) !== false ) {
|
|
208
208
|
|
|
209
|
-
|
|
209
|
+
nodeUpdateAfterMap.frameId = this.frameId;
|
|
210
210
|
|
|
211
211
|
}
|
|
212
212
|
|
|
@@ -214,13 +214,13 @@ class NodeFrame {
|
|
|
214
214
|
|
|
215
215
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
216
216
|
|
|
217
|
-
const
|
|
217
|
+
const nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );
|
|
218
218
|
|
|
219
|
-
if (
|
|
219
|
+
if ( nodeUpdateAfterMap.renderId !== this.renderId ) {
|
|
220
220
|
|
|
221
221
|
if ( node.updateAfter( this ) !== false ) {
|
|
222
222
|
|
|
223
|
-
|
|
223
|
+
nodeUpdateAfterMap.renderId = this.renderId;
|
|
224
224
|
|
|
225
225
|
}
|
|
226
226
|
|
|
@@ -249,13 +249,13 @@ class NodeFrame {
|
|
|
249
249
|
|
|
250
250
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
251
251
|
|
|
252
|
-
const
|
|
252
|
+
const nodeUpdateMap = this._getMaps( this.updateMap, reference );
|
|
253
253
|
|
|
254
|
-
if (
|
|
254
|
+
if ( nodeUpdateMap.frameId !== this.frameId ) {
|
|
255
255
|
|
|
256
256
|
if ( node.update( this ) !== false ) {
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
nodeUpdateMap.frameId = this.frameId;
|
|
259
259
|
|
|
260
260
|
}
|
|
261
261
|
|
|
@@ -263,13 +263,13 @@ class NodeFrame {
|
|
|
263
263
|
|
|
264
264
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
265
265
|
|
|
266
|
-
const
|
|
266
|
+
const nodeUpdateMap = this._getMaps( this.updateMap, reference );
|
|
267
267
|
|
|
268
|
-
if (
|
|
268
|
+
if ( nodeUpdateMap.renderId !== this.renderId ) {
|
|
269
269
|
|
|
270
270
|
if ( node.update( this ) !== false ) {
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
nodeUpdateMap.renderId = this.renderId;
|
|
273
273
|
|
|
274
274
|
}
|
|
275
275
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { warn } from '../../utils.js';
|
|
1
2
|
/**
|
|
2
3
|
* Base class for node functions. A derived module must be implemented
|
|
3
4
|
* for each supported native shader language. Similar to other `Node*` modules,
|
|
@@ -57,7 +58,7 @@ class NodeFunction {
|
|
|
57
58
|
*/
|
|
58
59
|
getCode( /*name = this.name*/ ) {
|
|
59
60
|
|
|
60
|
-
|
|
61
|
+
warn( 'Abstract function.' );
|
|
61
62
|
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { warn } from '../../utils.js';
|
|
1
2
|
/**
|
|
2
3
|
* Base class for node parsers. A derived parser must be implemented
|
|
3
4
|
* for each supported native shader language.
|
|
@@ -13,7 +14,7 @@ class NodeParser {
|
|
|
13
14
|
*/
|
|
14
15
|
parseFunction( /*source*/ ) {
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
warn( 'Abstract function.' );
|
|
17
18
|
|
|
18
19
|
}
|
|
19
20
|
|
|
@@ -5,6 +5,7 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
5
5
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
6
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
|
+
import { error } from '../../utils.js';
|
|
8
9
|
|
|
9
10
|
// cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
|
|
10
11
|
// A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
|
|
@@ -49,6 +50,7 @@ function cyrb53( value, seed = 0 ) {
|
|
|
49
50
|
/**
|
|
50
51
|
* Computes a hash for the given string.
|
|
51
52
|
*
|
|
53
|
+
* @private
|
|
52
54
|
* @method
|
|
53
55
|
* @param {string} str - The string to be hashed.
|
|
54
56
|
* @return {number} The hash.
|
|
@@ -58,6 +60,7 @@ export const hashString = ( str ) => cyrb53( str );
|
|
|
58
60
|
/**
|
|
59
61
|
* Computes a hash for the given array.
|
|
60
62
|
*
|
|
63
|
+
* @private
|
|
61
64
|
* @method
|
|
62
65
|
* @param {Array<number>} array - The array to be hashed.
|
|
63
66
|
* @return {number} The hash.
|
|
@@ -67,97 +70,13 @@ export const hashArray = ( array ) => cyrb53( array );
|
|
|
67
70
|
/**
|
|
68
71
|
* Computes a hash for the given list of parameters.
|
|
69
72
|
*
|
|
73
|
+
* @private
|
|
70
74
|
* @method
|
|
71
75
|
* @param {...number} params - A list of parameters.
|
|
72
76
|
* @return {number} The hash.
|
|
73
77
|
*/
|
|
74
78
|
export const hash = ( ...params ) => cyrb53( params );
|
|
75
79
|
|
|
76
|
-
/**
|
|
77
|
-
* Computes a cache key for the given node.
|
|
78
|
-
*
|
|
79
|
-
* @method
|
|
80
|
-
* @param {Object|Node} object - The object to be hashed.
|
|
81
|
-
* @param {boolean} [force=false] - Whether to force a cache key computation or not.
|
|
82
|
-
* @return {number} The hash.
|
|
83
|
-
*/
|
|
84
|
-
export function getCacheKey( object, force = false ) {
|
|
85
|
-
|
|
86
|
-
const values = [];
|
|
87
|
-
|
|
88
|
-
if ( object.isNode === true ) {
|
|
89
|
-
|
|
90
|
-
values.push( object.id );
|
|
91
|
-
object = object.getSelf();
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
for ( const { property, childNode } of getNodeChildren( object ) ) {
|
|
96
|
-
|
|
97
|
-
values.push( cyrb53( property.slice( 0, - 4 ) ), childNode.getCacheKey( force ) );
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return cyrb53( values );
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* This generator function can be used to iterate over the node children
|
|
107
|
-
* of the given object.
|
|
108
|
-
*
|
|
109
|
-
* @generator
|
|
110
|
-
* @param {Object} node - The object to be hashed.
|
|
111
|
-
* @param {boolean} [toJSON=false] - Whether to return JSON or not.
|
|
112
|
-
* @yields {Object} A result node holding the property, index (if available) and the child node.
|
|
113
|
-
*/
|
|
114
|
-
export function* getNodeChildren( node, toJSON = false ) {
|
|
115
|
-
|
|
116
|
-
for ( const property in node ) {
|
|
117
|
-
|
|
118
|
-
// Ignore private properties.
|
|
119
|
-
if ( property.startsWith( '_' ) === true ) continue;
|
|
120
|
-
|
|
121
|
-
const object = node[ property ];
|
|
122
|
-
|
|
123
|
-
if ( Array.isArray( object ) === true ) {
|
|
124
|
-
|
|
125
|
-
for ( let i = 0; i < object.length; i ++ ) {
|
|
126
|
-
|
|
127
|
-
const child = object[ i ];
|
|
128
|
-
|
|
129
|
-
if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
|
|
130
|
-
|
|
131
|
-
yield { property, index: i, childNode: child };
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
} else if ( object && object.isNode === true ) {
|
|
138
|
-
|
|
139
|
-
yield { property, childNode: object };
|
|
140
|
-
|
|
141
|
-
} else if ( typeof object === 'object' ) {
|
|
142
|
-
|
|
143
|
-
for ( const subProperty in object ) {
|
|
144
|
-
|
|
145
|
-
const child = object[ subProperty ];
|
|
146
|
-
|
|
147
|
-
if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
|
|
148
|
-
|
|
149
|
-
yield { property, index: subProperty, childNode: child };
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
80
|
const typeFromLength = /*@__PURE__*/ new Map( [
|
|
162
81
|
[ 1, 'float' ],
|
|
163
82
|
[ 2, 'vec2' ],
|
|
@@ -172,6 +91,7 @@ const dataFromObject = /*@__PURE__*/ new WeakMap();
|
|
|
172
91
|
/**
|
|
173
92
|
* Returns the data type for the given the length.
|
|
174
93
|
*
|
|
94
|
+
* @private
|
|
175
95
|
* @method
|
|
176
96
|
* @param {number} length - The length.
|
|
177
97
|
* @return {string} The data type.
|
|
@@ -185,6 +105,7 @@ export function getTypeFromLength( length ) {
|
|
|
185
105
|
/**
|
|
186
106
|
* Returns the typed array for the given data type.
|
|
187
107
|
*
|
|
108
|
+
* @private
|
|
188
109
|
* @method
|
|
189
110
|
* @param {string} type - The data type.
|
|
190
111
|
* @return {TypedArray} The typed array.
|
|
@@ -218,6 +139,7 @@ export function getTypedArrayFromType( type ) {
|
|
|
218
139
|
/**
|
|
219
140
|
* Returns the length for the given data type.
|
|
220
141
|
*
|
|
142
|
+
* @private
|
|
221
143
|
* @method
|
|
222
144
|
* @param {string} type - The data type.
|
|
223
145
|
* @return {number} The length.
|
|
@@ -232,13 +154,14 @@ export function getLengthFromType( type ) {
|
|
|
232
154
|
if ( /mat3/.test( type ) ) return 9;
|
|
233
155
|
if ( /mat4/.test( type ) ) return 16;
|
|
234
156
|
|
|
235
|
-
|
|
157
|
+
error( 'TSL: Unsupported type:', type );
|
|
236
158
|
|
|
237
159
|
}
|
|
238
160
|
|
|
239
161
|
/**
|
|
240
162
|
* Returns the gpu memory length for the given data type.
|
|
241
163
|
*
|
|
164
|
+
* @private
|
|
242
165
|
* @method
|
|
243
166
|
* @param {string} type - The data type.
|
|
244
167
|
* @return {number} The length.
|
|
@@ -253,13 +176,14 @@ export function getMemoryLengthFromType( type ) {
|
|
|
253
176
|
if ( /mat3/.test( type ) ) return 12;
|
|
254
177
|
if ( /mat4/.test( type ) ) return 16;
|
|
255
178
|
|
|
256
|
-
|
|
179
|
+
error( 'TSL: Unsupported type:', type );
|
|
257
180
|
|
|
258
181
|
}
|
|
259
182
|
|
|
260
183
|
/**
|
|
261
184
|
* Returns the byte boundary for the given data type.
|
|
262
185
|
*
|
|
186
|
+
* @private
|
|
263
187
|
* @method
|
|
264
188
|
* @param {string} type - The data type.
|
|
265
189
|
* @return {number} The byte boundary.
|
|
@@ -274,13 +198,14 @@ export function getByteBoundaryFromType( type ) {
|
|
|
274
198
|
if ( /mat3/.test( type ) ) return 48;
|
|
275
199
|
if ( /mat4/.test( type ) ) return 64;
|
|
276
200
|
|
|
277
|
-
|
|
201
|
+
error( 'TSL: Unsupported type:', type );
|
|
278
202
|
|
|
279
203
|
}
|
|
280
204
|
|
|
281
205
|
/**
|
|
282
206
|
* Returns the data type for the given value.
|
|
283
207
|
*
|
|
208
|
+
* @private
|
|
284
209
|
* @method
|
|
285
210
|
* @param {any} value - The value.
|
|
286
211
|
* @return {?string} The data type.
|
|
@@ -352,6 +277,7 @@ export function getValueType( value ) {
|
|
|
352
277
|
/**
|
|
353
278
|
* Returns the value/object for the given data type and parameters.
|
|
354
279
|
*
|
|
280
|
+
* @private
|
|
355
281
|
* @method
|
|
356
282
|
* @param {string} type - The given type.
|
|
357
283
|
* @param {...any} params - A parameter list.
|
|
@@ -422,6 +348,7 @@ export function getValueFromType( type, ...params ) {
|
|
|
422
348
|
/**
|
|
423
349
|
* Gets the object data that can be shared between different rendering steps.
|
|
424
350
|
*
|
|
351
|
+
* @private
|
|
425
352
|
* @param {Object} object - The object to get the data for.
|
|
426
353
|
* @return {Object} The object data.
|
|
427
354
|
*/
|
|
@@ -443,6 +370,7 @@ export function getDataFromObject( object ) {
|
|
|
443
370
|
/**
|
|
444
371
|
* Converts the given array buffer to a Base64 string.
|
|
445
372
|
*
|
|
373
|
+
* @private
|
|
446
374
|
* @method
|
|
447
375
|
* @param {ArrayBuffer} arrayBuffer - The array buffer.
|
|
448
376
|
* @return {string} The Base64 string.
|
|
@@ -466,6 +394,7 @@ export function arrayBufferToBase64( arrayBuffer ) {
|
|
|
466
394
|
/**
|
|
467
395
|
* Converts the given Base64 string to an array buffer.
|
|
468
396
|
*
|
|
397
|
+
* @private
|
|
469
398
|
* @method
|
|
470
399
|
* @param {string} base64 - The Base64 string.
|
|
471
400
|
* @return {ArrayBuffer} The array buffer.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
2
|
+
import { error } from '../../utils.js';
|
|
2
3
|
import PropertyNode from './PropertyNode.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -35,6 +36,36 @@ class ParameterNode extends PropertyNode {
|
|
|
35
36
|
|
|
36
37
|
}
|
|
37
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Gets the type of a member variable in the parameter node.
|
|
41
|
+
*
|
|
42
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
43
|
+
* @param {string} name - The name of the member variable.
|
|
44
|
+
* @returns {string}
|
|
45
|
+
*/
|
|
46
|
+
getMemberType( builder, name ) {
|
|
47
|
+
|
|
48
|
+
const type = this.getNodeType( builder );
|
|
49
|
+
const struct = builder.getStructTypeNode( type );
|
|
50
|
+
|
|
51
|
+
let memberType;
|
|
52
|
+
|
|
53
|
+
if ( struct !== null ) {
|
|
54
|
+
|
|
55
|
+
memberType = struct.getMemberType( builder, name );
|
|
56
|
+
|
|
57
|
+
} else {
|
|
58
|
+
|
|
59
|
+
error( `TSL: Member "${ name }" not found in struct "${ type }".` );
|
|
60
|
+
|
|
61
|
+
memberType = 'float';
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return memberType;
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
38
69
|
getHash() {
|
|
39
70
|
|
|
40
71
|
return this.uuid;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { nodeImmutable, nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
import { hashString } from './NodeUtils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* This class represents a shader property. It can be used
|
|
@@ -68,6 +69,12 @@ class PropertyNode extends Node {
|
|
|
68
69
|
|
|
69
70
|
}
|
|
70
71
|
|
|
72
|
+
customCacheKey() {
|
|
73
|
+
|
|
74
|
+
return hashString( this.type + ':' + ( this.name || '' ) + ':' + ( this.varying ? '1' : '0' ) );
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
71
78
|
getHash( builder ) {
|
|
72
79
|
|
|
73
80
|
return this.name || super.getHash( builder );
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { select } from '../math/ConditionalNode.js';
|
|
3
3
|
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
|
|
4
|
+
import { error } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
|
|
@@ -78,15 +79,21 @@ class StackNode extends Node {
|
|
|
78
79
|
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
getElementType( builder ) {
|
|
83
|
+
|
|
84
|
+
return this.hasOutput ? this.outputNode.getElementType( builder ) : 'void';
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
81
88
|
getNodeType( builder ) {
|
|
82
89
|
|
|
83
|
-
return this.
|
|
90
|
+
return this.hasOutput ? this.outputNode.getNodeType( builder ) : 'void';
|
|
84
91
|
|
|
85
92
|
}
|
|
86
93
|
|
|
87
94
|
getMemberType( builder, name ) {
|
|
88
95
|
|
|
89
|
-
return this.
|
|
96
|
+
return this.hasOutput ? this.outputNode.getMemberType( builder, name ) : 'void';
|
|
90
97
|
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -96,7 +103,14 @@ class StackNode extends Node {
|
|
|
96
103
|
* @param {Node} node - The node to add.
|
|
97
104
|
* @return {StackNode} A reference to this stack node.
|
|
98
105
|
*/
|
|
99
|
-
|
|
106
|
+
addToStack( node ) {
|
|
107
|
+
|
|
108
|
+
if ( node.isNode !== true ) {
|
|
109
|
+
|
|
110
|
+
error( 'TSL: Invalid node added to stack.' );
|
|
111
|
+
return this;
|
|
112
|
+
|
|
113
|
+
}
|
|
100
114
|
|
|
101
115
|
this.nodes.push( node );
|
|
102
116
|
|
|
@@ -116,7 +130,7 @@ class StackNode extends Node {
|
|
|
116
130
|
const methodNode = new ShaderNode( method );
|
|
117
131
|
this._currentCond = select( boolNode, methodNode );
|
|
118
132
|
|
|
119
|
-
return this.
|
|
133
|
+
return this.addToStack( this._currentCond );
|
|
120
134
|
|
|
121
135
|
}
|
|
122
136
|
|
|
@@ -191,7 +205,7 @@ class StackNode extends Node {
|
|
|
191
205
|
|
|
192
206
|
} else {
|
|
193
207
|
|
|
194
|
-
|
|
208
|
+
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
|
|
195
209
|
|
|
196
210
|
}
|
|
197
211
|
|
|
@@ -218,7 +232,7 @@ class StackNode extends Node {
|
|
|
218
232
|
|
|
219
233
|
this._currentCond = condNode;
|
|
220
234
|
|
|
221
|
-
return this.
|
|
235
|
+
return this.addToStack( this._currentCond );
|
|
222
236
|
|
|
223
237
|
} else {
|
|
224
238
|
|
|
@@ -245,16 +259,62 @@ class StackNode extends Node {
|
|
|
245
259
|
|
|
246
260
|
}
|
|
247
261
|
|
|
262
|
+
setup( builder ) {
|
|
263
|
+
|
|
264
|
+
const nodeProperties = builder.getNodeProperties( this );
|
|
265
|
+
|
|
266
|
+
let index = 0;
|
|
267
|
+
|
|
268
|
+
for ( const childNode of this.getChildren() ) {
|
|
269
|
+
|
|
270
|
+
if ( childNode.isVarNode && childNode.intent === true ) {
|
|
271
|
+
|
|
272
|
+
if ( childNode.isAssign( builder ) !== true ) {
|
|
273
|
+
|
|
274
|
+
continue;
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
nodeProperties[ 'node' + index ++ ] = childNode;
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// return a outputNode if exists or null
|
|
285
|
+
|
|
286
|
+
return nodeProperties.outputNode || null;
|
|
287
|
+
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
get hasOutput() {
|
|
291
|
+
|
|
292
|
+
return this.outputNode && this.outputNode.isNode;
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
248
296
|
build( builder, ...params ) {
|
|
249
297
|
|
|
250
298
|
const previousStack = getCurrentStack();
|
|
251
299
|
|
|
252
300
|
setCurrentStack( this );
|
|
253
301
|
|
|
302
|
+
builder.setActiveStack( this );
|
|
303
|
+
|
|
254
304
|
const buildStage = builder.buildStage;
|
|
255
305
|
|
|
256
306
|
for ( const node of this.nodes ) {
|
|
257
307
|
|
|
308
|
+
if ( node.isVarNode && node.intent === true ) {
|
|
309
|
+
|
|
310
|
+
if ( node.isAssign( builder ) !== true ) {
|
|
311
|
+
|
|
312
|
+
continue;
|
|
313
|
+
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
}
|
|
317
|
+
|
|
258
318
|
if ( buildStage === 'setup' ) {
|
|
259
319
|
|
|
260
320
|
node.build( builder );
|
|
@@ -280,38 +340,25 @@ class StackNode extends Node {
|
|
|
280
340
|
|
|
281
341
|
}
|
|
282
342
|
|
|
283
|
-
|
|
343
|
+
//
|
|
284
344
|
|
|
285
|
-
|
|
345
|
+
let result;
|
|
286
346
|
|
|
287
|
-
|
|
347
|
+
if ( this.hasOutput ) {
|
|
288
348
|
|
|
289
|
-
|
|
349
|
+
result = this.outputNode.build( builder, ...params );
|
|
290
350
|
|
|
291
|
-
|
|
292
|
-
* @function
|
|
293
|
-
* @deprecated since r168. Use {@link StackNode#Else} instead.
|
|
294
|
-
*
|
|
295
|
-
* @param {...any} params
|
|
296
|
-
* @returns {StackNode}
|
|
297
|
-
*/
|
|
298
|
-
else( ...params ) { // @deprecated, r168
|
|
351
|
+
} else {
|
|
299
352
|
|
|
300
|
-
|
|
301
|
-
return this.Else( ...params );
|
|
353
|
+
result = super.build( builder, ...params );
|
|
302
354
|
|
|
303
|
-
|
|
355
|
+
}
|
|
304
356
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
* @param {...any} params
|
|
309
|
-
* @returns {StackNode}
|
|
310
|
-
*/
|
|
311
|
-
elseif( ...params ) { // @deprecated, r168
|
|
357
|
+
setCurrentStack( previousStack );
|
|
358
|
+
|
|
359
|
+
builder.removeActiveStack( this );
|
|
312
360
|
|
|
313
|
-
|
|
314
|
-
return this.ElseIf( ...params );
|
|
361
|
+
return result;
|
|
315
362
|
|
|
316
363
|
}
|
|
317
364
|
|
|
@@ -30,11 +30,11 @@ class StructNode extends Node {
|
|
|
30
30
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
constructor(
|
|
33
|
+
constructor( structTypeNode, values ) {
|
|
34
34
|
|
|
35
35
|
super( 'vec3' );
|
|
36
36
|
|
|
37
|
-
this.
|
|
37
|
+
this.structTypeNode = structTypeNode;
|
|
38
38
|
this.values = values;
|
|
39
39
|
|
|
40
40
|
this.isStructNode = true;
|
|
@@ -43,13 +43,13 @@ class StructNode extends Node {
|
|
|
43
43
|
|
|
44
44
|
getNodeType( builder ) {
|
|
45
45
|
|
|
46
|
-
return this.
|
|
46
|
+
return this.structTypeNode.getNodeType( builder );
|
|
47
47
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
getMemberType( builder, name ) {
|
|
51
51
|
|
|
52
|
-
return this.
|
|
52
|
+
return this.structTypeNode.getMemberType( builder, name );
|
|
53
53
|
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -59,7 +59,7 @@ class StructNode extends Node {
|
|
|
59
59
|
const structType = nodeVar.type;
|
|
60
60
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
61
61
|
|
|
62
|
-
builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.
|
|
62
|
+
builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structTypeNode.membersLayout, this.values ) }`, this );
|
|
63
63
|
|
|
64
64
|
return nodeVar.name;
|
|
65
65
|
|