super-three 0.171.0 → 0.173.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 +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Color } from '../../math/Color.js';
|
|
2
|
+
import { Matrix2 } from '../../math/Matrix2.js';
|
|
2
3
|
import { Matrix3 } from '../../math/Matrix3.js';
|
|
3
4
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
4
5
|
import { Vector2 } from '../../math/Vector2.js';
|
|
5
6
|
import { Vector3 } from '../../math/Vector3.js';
|
|
6
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
7
8
|
|
|
9
|
+
/** @module NodeUtils **/
|
|
10
|
+
|
|
8
11
|
// cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
|
|
9
12
|
// A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
|
|
10
13
|
// Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.
|
|
@@ -45,10 +48,41 @@ function cyrb53( value, seed = 0 ) {
|
|
|
45
48
|
|
|
46
49
|
}
|
|
47
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Computes a hash for the given string.
|
|
53
|
+
*
|
|
54
|
+
* @method
|
|
55
|
+
* @param {String} str - The string to be hashed.
|
|
56
|
+
* @return {Number} The hash.
|
|
57
|
+
*/
|
|
48
58
|
export const hashString = ( str ) => cyrb53( str );
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Computes a hash for the given array.
|
|
62
|
+
*
|
|
63
|
+
* @method
|
|
64
|
+
* @param {Array<Number>} array - The array to be hashed.
|
|
65
|
+
* @return {Number} The hash.
|
|
66
|
+
*/
|
|
49
67
|
export const hashArray = ( array ) => cyrb53( array );
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Computes a hash for the given list of parameters.
|
|
71
|
+
*
|
|
72
|
+
* @method
|
|
73
|
+
* @param {...Number} params - A list of parameters.
|
|
74
|
+
* @return {Number} The hash.
|
|
75
|
+
*/
|
|
50
76
|
export const hash = ( ...params ) => cyrb53( params );
|
|
51
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Computes a cache key for the given node.
|
|
80
|
+
*
|
|
81
|
+
* @method
|
|
82
|
+
* @param {Object} object - The object to be hashed.
|
|
83
|
+
* @param {Boolean} [force=false] - Whether to force a cache key computation or not.
|
|
84
|
+
* @return {Number} The hash.
|
|
85
|
+
*/
|
|
52
86
|
export function getCacheKey( object, force = false ) {
|
|
53
87
|
|
|
54
88
|
const values = [];
|
|
@@ -62,7 +96,7 @@ export function getCacheKey( object, force = false ) {
|
|
|
62
96
|
|
|
63
97
|
for ( const { property, childNode } of getNodeChildren( object ) ) {
|
|
64
98
|
|
|
65
|
-
values.push(
|
|
99
|
+
values.push( cyrb53( property.slice( 0, - 4 ) ), childNode.getCacheKey( force ) );
|
|
66
100
|
|
|
67
101
|
}
|
|
68
102
|
|
|
@@ -70,6 +104,15 @@ export function getCacheKey( object, force = false ) {
|
|
|
70
104
|
|
|
71
105
|
}
|
|
72
106
|
|
|
107
|
+
/**
|
|
108
|
+
* This generator function can be used to iterate over the node children
|
|
109
|
+
* of the given object.
|
|
110
|
+
*
|
|
111
|
+
* @generator
|
|
112
|
+
* @param {Object} node - The object to be hashed.
|
|
113
|
+
* @param {Boolean} [toJSON=false] - Whether to return JSON or not.
|
|
114
|
+
* @yields {Object} A result node holding the property, index (if available) and the child node.
|
|
115
|
+
*/
|
|
73
116
|
export function* getNodeChildren( node, toJSON = false ) {
|
|
74
117
|
|
|
75
118
|
for ( const property in node ) {
|
|
@@ -126,18 +169,68 @@ const typeFromLength = /*@__PURE__*/ new Map( [
|
|
|
126
169
|
[ 16, 'mat4' ]
|
|
127
170
|
] );
|
|
128
171
|
|
|
172
|
+
const dataFromObject = /*@__PURE__*/ new WeakMap();
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Returns the data type for the given the length.
|
|
176
|
+
*
|
|
177
|
+
* @method
|
|
178
|
+
* @param {Number} length - The length.
|
|
179
|
+
* @return {String} The data type.
|
|
180
|
+
*/
|
|
129
181
|
export function getTypeFromLength( length ) {
|
|
130
182
|
|
|
131
183
|
return typeFromLength.get( length );
|
|
132
184
|
|
|
133
185
|
}
|
|
134
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Returns the typed array for the given data type.
|
|
189
|
+
*
|
|
190
|
+
* @method
|
|
191
|
+
* @param {String} type - The data type.
|
|
192
|
+
* @return {TypedArray} The typed array.
|
|
193
|
+
*/
|
|
194
|
+
export function getTypedArrayFromType( type ) {
|
|
195
|
+
|
|
196
|
+
// Handle component type for vectors and matrices
|
|
197
|
+
if ( /[iu]?vec\d/.test( type ) ) {
|
|
198
|
+
|
|
199
|
+
// Handle int vectors
|
|
200
|
+
if ( type.startsWith( 'ivec' ) ) return Int32Array;
|
|
201
|
+
// Handle uint vectors
|
|
202
|
+
if ( type.startsWith( 'uvec' ) ) return Uint32Array;
|
|
203
|
+
// Default to float vectors
|
|
204
|
+
return Float32Array;
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Handle matrices (always float)
|
|
209
|
+
if ( /mat\d/.test( type ) ) return Float32Array;
|
|
210
|
+
|
|
211
|
+
// Basic types
|
|
212
|
+
if ( /float/.test( type ) ) return Float32Array;
|
|
213
|
+
if ( /uint/.test( type ) ) return Uint32Array;
|
|
214
|
+
if ( /int/.test( type ) ) return Int32Array;
|
|
215
|
+
|
|
216
|
+
throw new Error( `THREE.NodeUtils: Unsupported type: ${type}` );
|
|
217
|
+
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Returns the length for the given data type.
|
|
222
|
+
*
|
|
223
|
+
* @method
|
|
224
|
+
* @param {String} type - The data type.
|
|
225
|
+
* @return {Number} The length.
|
|
226
|
+
*/
|
|
135
227
|
export function getLengthFromType( type ) {
|
|
136
228
|
|
|
137
229
|
if ( /float|int|uint/.test( type ) ) return 1;
|
|
138
230
|
if ( /vec2/.test( type ) ) return 2;
|
|
139
231
|
if ( /vec3/.test( type ) ) return 3;
|
|
140
232
|
if ( /vec4/.test( type ) ) return 4;
|
|
233
|
+
if ( /mat2/.test( type ) ) return 4;
|
|
141
234
|
if ( /mat3/.test( type ) ) return 9;
|
|
142
235
|
if ( /mat4/.test( type ) ) return 16;
|
|
143
236
|
|
|
@@ -145,6 +238,13 @@ export function getLengthFromType( type ) {
|
|
|
145
238
|
|
|
146
239
|
}
|
|
147
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Returns the data type for the given value.
|
|
243
|
+
*
|
|
244
|
+
* @method
|
|
245
|
+
* @param {Any} value - The value.
|
|
246
|
+
* @return {String?} The data type.
|
|
247
|
+
*/
|
|
148
248
|
export function getValueType( value ) {
|
|
149
249
|
|
|
150
250
|
if ( value === undefined || value === null ) return null;
|
|
@@ -183,6 +283,10 @@ export function getValueType( value ) {
|
|
|
183
283
|
|
|
184
284
|
return 'vec4';
|
|
185
285
|
|
|
286
|
+
} else if ( value.isMatrix2 === true ) {
|
|
287
|
+
|
|
288
|
+
return 'mat2';
|
|
289
|
+
|
|
186
290
|
} else if ( value.isMatrix3 === true ) {
|
|
187
291
|
|
|
188
292
|
return 'mat3';
|
|
@@ -205,6 +309,14 @@ export function getValueType( value ) {
|
|
|
205
309
|
|
|
206
310
|
}
|
|
207
311
|
|
|
312
|
+
/**
|
|
313
|
+
* Returns the value/object for the given data type and parameters.
|
|
314
|
+
*
|
|
315
|
+
* @method
|
|
316
|
+
* @param {String} type - The given type.
|
|
317
|
+
* @param {...Any} params - A parameter list.
|
|
318
|
+
* @return {Any} The value/object.
|
|
319
|
+
*/
|
|
208
320
|
export function getValueFromType( type, ...params ) {
|
|
209
321
|
|
|
210
322
|
const last4 = type ? type.slice( - 4 ) : undefined;
|
|
@@ -233,6 +345,10 @@ export function getValueFromType( type, ...params ) {
|
|
|
233
345
|
|
|
234
346
|
return new Vector4( ...params );
|
|
235
347
|
|
|
348
|
+
} else if ( last4 === 'mat2' ) {
|
|
349
|
+
|
|
350
|
+
return new Matrix2( ...params );
|
|
351
|
+
|
|
236
352
|
} else if ( last4 === 'mat3' ) {
|
|
237
353
|
|
|
238
354
|
return new Matrix3( ...params );
|
|
@@ -263,6 +379,34 @@ export function getValueFromType( type, ...params ) {
|
|
|
263
379
|
|
|
264
380
|
}
|
|
265
381
|
|
|
382
|
+
/**
|
|
383
|
+
* Gets the object data that can be shared between different rendering steps.
|
|
384
|
+
*
|
|
385
|
+
* @param {Object} object - The object to get the data for.
|
|
386
|
+
* @return {Object} The object data.
|
|
387
|
+
*/
|
|
388
|
+
export function getDataFromObject( object ) {
|
|
389
|
+
|
|
390
|
+
let data = dataFromObject.get( object );
|
|
391
|
+
|
|
392
|
+
if ( data === undefined ) {
|
|
393
|
+
|
|
394
|
+
data = {};
|
|
395
|
+
dataFromObject.set( object, data );
|
|
396
|
+
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return data;
|
|
400
|
+
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Converts the given array buffer to a Base64 string.
|
|
405
|
+
*
|
|
406
|
+
* @method
|
|
407
|
+
* @param {ArrayBuffer} arrayBuffer - The array buffer.
|
|
408
|
+
* @return {String} The Base64 string.
|
|
409
|
+
*/
|
|
266
410
|
export function arrayBufferToBase64( arrayBuffer ) {
|
|
267
411
|
|
|
268
412
|
let chars = '';
|
|
@@ -279,6 +423,13 @@ export function arrayBufferToBase64( arrayBuffer ) {
|
|
|
279
423
|
|
|
280
424
|
}
|
|
281
425
|
|
|
426
|
+
/**
|
|
427
|
+
* Converts the given Base64 string to an array buffer.
|
|
428
|
+
*
|
|
429
|
+
* @method
|
|
430
|
+
* @param {String} base64 - The Base64 string.
|
|
431
|
+
* @return {ArrayBuffer} The array buffer.
|
|
432
|
+
*/
|
|
282
433
|
export function base64ToArrayBuffer( base64 ) {
|
|
283
434
|
|
|
284
435
|
return Uint8Array.from( atob( base64 ), c => c.charCodeAt( 0 ) ).buffer;
|
|
@@ -1,12 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* {@link NodeBuilder} is going to create instances of this class during the build process
|
|
3
|
+
* of nodes. They represent the final shader variables that are going to be generated
|
|
4
|
+
* by the builder. A dictionary of node variables is maintained in {@link NodeBuilder#vars} for
|
|
5
|
+
* this purpose.
|
|
6
|
+
*/
|
|
1
7
|
class NodeVar {
|
|
2
8
|
|
|
3
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a new node variable.
|
|
11
|
+
*
|
|
12
|
+
* @param {String} name - The name of the variable.
|
|
13
|
+
* @param {String} type - The type of the variable.
|
|
14
|
+
* @param {Boolean} [readOnly=false] - The read-only flag.
|
|
15
|
+
* @param {Number?} [count=null] - The size.
|
|
16
|
+
*/
|
|
17
|
+
constructor( name, type, readOnly = false, count = null ) {
|
|
4
18
|
|
|
19
|
+
/**
|
|
20
|
+
* This flag can be used for type testing.
|
|
21
|
+
*
|
|
22
|
+
* @type {Boolean}
|
|
23
|
+
* @readonly
|
|
24
|
+
* @default true
|
|
25
|
+
*/
|
|
5
26
|
this.isNodeVar = true;
|
|
6
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The name of the variable.
|
|
30
|
+
*
|
|
31
|
+
* @type {String}
|
|
32
|
+
*/
|
|
7
33
|
this.name = name;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The type of the variable.
|
|
37
|
+
*
|
|
38
|
+
* @type {String}
|
|
39
|
+
*/
|
|
8
40
|
this.type = type;
|
|
9
41
|
|
|
42
|
+
/**
|
|
43
|
+
* The read-only flag.
|
|
44
|
+
*
|
|
45
|
+
* @type {Boolean}
|
|
46
|
+
*/
|
|
47
|
+
this.readOnly = readOnly;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The size.
|
|
51
|
+
*
|
|
52
|
+
* @type {Number?}
|
|
53
|
+
*/
|
|
54
|
+
this.count = count;
|
|
55
|
+
|
|
10
56
|
}
|
|
11
57
|
|
|
12
58
|
}
|
|
@@ -1,13 +1,41 @@
|
|
|
1
1
|
import NodeVar from './NodeVar.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* {@link NodeBuilder} is going to create instances of this class during the build process
|
|
5
|
+
* of nodes. They represent the final shader varyings that are going to be generated
|
|
6
|
+
* by the builder. An array of node varyings is maintained in {@link NodeBuilder#varyings} for
|
|
7
|
+
* this purpose.
|
|
8
|
+
*
|
|
9
|
+
* @augments NodeVar
|
|
10
|
+
*/
|
|
3
11
|
class NodeVarying extends NodeVar {
|
|
4
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new node varying.
|
|
15
|
+
*
|
|
16
|
+
* @param {String} name - The name of the varying.
|
|
17
|
+
* @param {String} type - The type of the varying.
|
|
18
|
+
*/
|
|
5
19
|
constructor( name, type ) {
|
|
6
20
|
|
|
7
21
|
super( name, type );
|
|
8
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Whether this varying requires interpolation or not. This property can be used
|
|
25
|
+
* to check if the varying can be optimized for a variable.
|
|
26
|
+
*
|
|
27
|
+
* @type {Boolean}
|
|
28
|
+
* @default false
|
|
29
|
+
*/
|
|
9
30
|
this.needsInterpolation = false;
|
|
10
31
|
|
|
32
|
+
/**
|
|
33
|
+
* This flag can be used for type testing.
|
|
34
|
+
*
|
|
35
|
+
* @type {Boolean}
|
|
36
|
+
* @readonly
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
11
39
|
this.isNodeVarying = true;
|
|
12
40
|
|
|
13
41
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import StructTypeNode from './StructTypeNode.js';
|
|
3
2
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
4
3
|
|
|
4
|
+
/** @module OutputStructNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This node can be used to define multiple outputs in a shader programs.
|
|
8
|
+
*
|
|
9
|
+
* @augments Node
|
|
10
|
+
*/
|
|
5
11
|
class OutputStructNode extends Node {
|
|
6
12
|
|
|
7
13
|
static get type() {
|
|
@@ -10,34 +16,62 @@ class OutputStructNode extends Node {
|
|
|
10
16
|
|
|
11
17
|
}
|
|
12
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new output struct node. The constructor can be invoked with an
|
|
21
|
+
* arbitrary number of nodes representing the members.
|
|
22
|
+
*
|
|
23
|
+
* @param {...Node} members - A parameter list of nodes.
|
|
24
|
+
*/
|
|
13
25
|
constructor( ...members ) {
|
|
14
26
|
|
|
15
27
|
super();
|
|
16
28
|
|
|
29
|
+
/**
|
|
30
|
+
* An array of nodes which defines the output.
|
|
31
|
+
*
|
|
32
|
+
* @type {Array<Node>}
|
|
33
|
+
*/
|
|
17
34
|
this.members = members;
|
|
18
35
|
|
|
36
|
+
/**
|
|
37
|
+
* This flag can be used for type testing.
|
|
38
|
+
*
|
|
39
|
+
* @type {Boolean}
|
|
40
|
+
* @readonly
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
19
43
|
this.isOutputStructNode = true;
|
|
20
44
|
|
|
21
45
|
}
|
|
22
46
|
|
|
23
|
-
|
|
47
|
+
getNodeType( builder ) {
|
|
24
48
|
|
|
25
|
-
|
|
49
|
+
const properties = builder.getNodeProperties( this );
|
|
26
50
|
|
|
27
|
-
|
|
28
|
-
const types = [];
|
|
51
|
+
if ( properties.membersLayout === undefined ) {
|
|
29
52
|
|
|
30
|
-
|
|
53
|
+
const members = this.members;
|
|
54
|
+
const membersLayout = [];
|
|
55
|
+
|
|
56
|
+
for ( let i = 0; i < members.length; i ++ ) {
|
|
57
|
+
|
|
58
|
+
const name = 'm' + i;
|
|
59
|
+
const type = members[ i ].getNodeType( builder );
|
|
60
|
+
|
|
61
|
+
membersLayout.push( { name, type, index: i } );
|
|
62
|
+
|
|
63
|
+
}
|
|
31
64
|
|
|
32
|
-
|
|
65
|
+
properties.membersLayout = membersLayout;
|
|
66
|
+
properties.structType = builder.getOutputStructTypeFromNode( this, properties.membersLayout );
|
|
33
67
|
|
|
34
68
|
}
|
|
35
69
|
|
|
36
|
-
|
|
70
|
+
return properties.structType.name;
|
|
37
71
|
|
|
38
72
|
}
|
|
39
73
|
|
|
40
|
-
generate( builder
|
|
74
|
+
generate( builder ) {
|
|
41
75
|
|
|
42
76
|
const propertyName = builder.getOutputStructName();
|
|
43
77
|
const members = this.members;
|
|
@@ -46,7 +80,7 @@ class OutputStructNode extends Node {
|
|
|
46
80
|
|
|
47
81
|
for ( let i = 0; i < members.length; i ++ ) {
|
|
48
82
|
|
|
49
|
-
const snippet = members[ i ].build( builder
|
|
83
|
+
const snippet = members[ i ].build( builder );
|
|
50
84
|
|
|
51
85
|
builder.addLineFlowCode( `${ structPrefix }m${ i } = ${ snippet }`, this );
|
|
52
86
|
|
|
@@ -60,4 +94,11 @@ class OutputStructNode extends Node {
|
|
|
60
94
|
|
|
61
95
|
export default OutputStructNode;
|
|
62
96
|
|
|
97
|
+
/**
|
|
98
|
+
* TSL function for creating an output struct node.
|
|
99
|
+
*
|
|
100
|
+
* @function
|
|
101
|
+
* @param {...Node} members - A parameter list of nodes.
|
|
102
|
+
* @returns {OutputStructNode}
|
|
103
|
+
*/
|
|
63
104
|
export const outputStruct = /*@__PURE__*/ nodeProxy( OutputStructNode );
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
2
2
|
import PropertyNode from './PropertyNode.js';
|
|
3
3
|
|
|
4
|
+
/** @module ParameterNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Special version of {@link PropertyNode} which is used for parameters.
|
|
8
|
+
*
|
|
9
|
+
* @augments PropertyNode
|
|
10
|
+
*/
|
|
4
11
|
class ParameterNode extends PropertyNode {
|
|
5
12
|
|
|
6
13
|
static get type() {
|
|
@@ -9,10 +16,23 @@ class ParameterNode extends PropertyNode {
|
|
|
9
16
|
|
|
10
17
|
}
|
|
11
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new parameter node.
|
|
21
|
+
*
|
|
22
|
+
* @param {String} nodeType - The type of the node.
|
|
23
|
+
* @param {String?} [name=null] - The name of the parameter in the shader.
|
|
24
|
+
*/
|
|
12
25
|
constructor( nodeType, name = null ) {
|
|
13
26
|
|
|
14
27
|
super( nodeType, name );
|
|
15
28
|
|
|
29
|
+
/**
|
|
30
|
+
* This flag can be used for type testing.
|
|
31
|
+
*
|
|
32
|
+
* @type {Boolean}
|
|
33
|
+
* @readonly
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
16
36
|
this.isParameterNode = true;
|
|
17
37
|
|
|
18
38
|
}
|
|
@@ -33,4 +53,12 @@ class ParameterNode extends PropertyNode {
|
|
|
33
53
|
|
|
34
54
|
export default ParameterNode;
|
|
35
55
|
|
|
56
|
+
/**
|
|
57
|
+
* TSL function for creating a parameter node.
|
|
58
|
+
*
|
|
59
|
+
* @function
|
|
60
|
+
* @param {String} type - The type of the node.
|
|
61
|
+
* @param {String?} name - The name of the parameter in the shader.
|
|
62
|
+
* @returns {ParameterNode}
|
|
63
|
+
*/
|
|
36
64
|
export const parameter = ( type, name ) => nodeObject( new ParameterNode( type, name ) );
|