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,6 +1,20 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { nodeImmutable, nodeObject } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module PropertyNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This class represents a shader property. It can be used
|
|
8
|
+
* to explicitly define a property and assign a value to it.
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* const threshold = property( 'float', 'threshold' ).assign( THRESHOLD );
|
|
12
|
+
*```
|
|
13
|
+
* `PropertyNode` is used by the engine to predefined common material properties
|
|
14
|
+
* for TSL code.
|
|
15
|
+
*
|
|
16
|
+
* @augments Node
|
|
17
|
+
*/
|
|
4
18
|
class PropertyNode extends Node {
|
|
5
19
|
|
|
6
20
|
static get type() {
|
|
@@ -9,13 +23,41 @@ class PropertyNode extends Node {
|
|
|
9
23
|
|
|
10
24
|
}
|
|
11
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new property node.
|
|
28
|
+
*
|
|
29
|
+
* @param {String} nodeType - The type of the node.
|
|
30
|
+
* @param {String?} [name=null] - The name of the property in the shader.
|
|
31
|
+
* @param {Boolean} [varying=false] - Whether this property is a varying or not.
|
|
32
|
+
*/
|
|
12
33
|
constructor( nodeType, name = null, varying = false ) {
|
|
13
34
|
|
|
14
35
|
super( nodeType );
|
|
15
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The name of the property in the shader. If no name is defined,
|
|
39
|
+
* the node system auto-generates one.
|
|
40
|
+
*
|
|
41
|
+
* @type {String?}
|
|
42
|
+
* @default null
|
|
43
|
+
*/
|
|
16
44
|
this.name = name;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Whether this property is a varying or not.
|
|
48
|
+
*
|
|
49
|
+
* @type {Boolean}
|
|
50
|
+
* @default false
|
|
51
|
+
*/
|
|
17
52
|
this.varying = varying;
|
|
18
53
|
|
|
54
|
+
/**
|
|
55
|
+
* This flag can be used for type testing.
|
|
56
|
+
*
|
|
57
|
+
* @type {Boolean}
|
|
58
|
+
* @readonly
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
19
61
|
this.isPropertyNode = true;
|
|
20
62
|
|
|
21
63
|
}
|
|
@@ -26,6 +68,12 @@ class PropertyNode extends Node {
|
|
|
26
68
|
|
|
27
69
|
}
|
|
28
70
|
|
|
71
|
+
/**
|
|
72
|
+
* The method is overwritten so it always returns `true`.
|
|
73
|
+
*
|
|
74
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
75
|
+
* @return {Boolean} Whether this node is global or not.
|
|
76
|
+
*/
|
|
29
77
|
isGlobal( /*builder*/ ) {
|
|
30
78
|
|
|
31
79
|
return true;
|
|
@@ -55,34 +103,218 @@ class PropertyNode extends Node {
|
|
|
55
103
|
|
|
56
104
|
export default PropertyNode;
|
|
57
105
|
|
|
106
|
+
/**
|
|
107
|
+
* TSL function for creating a property node.
|
|
108
|
+
*
|
|
109
|
+
* @function
|
|
110
|
+
* @param {String} type - The type of the node.
|
|
111
|
+
* @param {String?} [name=null] - The name of the property in the shader.
|
|
112
|
+
* @returns {PropertyNode}
|
|
113
|
+
*/
|
|
58
114
|
export const property = ( type, name ) => nodeObject( new PropertyNode( type, name ) );
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* TSL function for creating a varying property node.
|
|
118
|
+
*
|
|
119
|
+
* @function
|
|
120
|
+
* @param {String} type - The type of the node.
|
|
121
|
+
* @param {String?} [name=null] - The name of the varying in the shader.
|
|
122
|
+
* @returns {PropertyNode}
|
|
123
|
+
*/
|
|
59
124
|
export const varyingProperty = ( type, name ) => nodeObject( new PropertyNode( type, name, true ) );
|
|
60
125
|
|
|
126
|
+
/**
|
|
127
|
+
* TSL object that represents the shader variable `DiffuseColor`.
|
|
128
|
+
*
|
|
129
|
+
* @type {PropertyNode<vec4>}
|
|
130
|
+
*/
|
|
61
131
|
export const diffuseColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* TSL object that represents the shader variable `EmissiveColor`.
|
|
135
|
+
*
|
|
136
|
+
* @type {PropertyNode<vec3>}
|
|
137
|
+
*/
|
|
62
138
|
export const emissive = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'EmissiveColor' );
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* TSL object that represents the shader variable `Roughness`.
|
|
142
|
+
*
|
|
143
|
+
* @type {PropertyNode<float>}
|
|
144
|
+
*/
|
|
63
145
|
export const roughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Roughness' );
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* TSL object that represents the shader variable `Metalness`.
|
|
149
|
+
*
|
|
150
|
+
* @type {PropertyNode<float>}
|
|
151
|
+
*/
|
|
64
152
|
export const metalness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Metalness' );
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* TSL object that represents the shader variable `Clearcoat`.
|
|
156
|
+
*
|
|
157
|
+
* @type {PropertyNode<float>}
|
|
158
|
+
*/
|
|
65
159
|
export const clearcoat = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Clearcoat' );
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* TSL object that represents the shader variable `ClearcoatRoughness`.
|
|
163
|
+
*
|
|
164
|
+
* @type {PropertyNode<float>}
|
|
165
|
+
*/
|
|
66
166
|
export const clearcoatRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'ClearcoatRoughness' );
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* TSL object that represents the shader variable `Sheen`.
|
|
170
|
+
*
|
|
171
|
+
* @type {PropertyNode<vec3>}
|
|
172
|
+
*/
|
|
67
173
|
export const sheen = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'Sheen' );
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* TSL object that represents the shader variable `SheenRoughness`.
|
|
177
|
+
*
|
|
178
|
+
* @type {PropertyNode<float>}
|
|
179
|
+
*/
|
|
68
180
|
export const sheenRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SheenRoughness' );
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* TSL object that represents the shader variable `Iridescence`.
|
|
184
|
+
*
|
|
185
|
+
* @type {PropertyNode<float>}
|
|
186
|
+
*/
|
|
69
187
|
export const iridescence = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Iridescence' );
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* TSL object that represents the shader variable `IridescenceIOR`.
|
|
191
|
+
*
|
|
192
|
+
* @type {PropertyNode<float>}
|
|
193
|
+
*/
|
|
70
194
|
export const iridescenceIOR = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceIOR' );
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* TSL object that represents the shader variable `IridescenceThickness`.
|
|
198
|
+
*
|
|
199
|
+
* @type {PropertyNode<float>}
|
|
200
|
+
*/
|
|
71
201
|
export const iridescenceThickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceThickness' );
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* TSL object that represents the shader variable `AlphaT`.
|
|
205
|
+
*
|
|
206
|
+
* @type {PropertyNode<float>}
|
|
207
|
+
*/
|
|
72
208
|
export const alphaT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AlphaT' );
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* TSL object that represents the shader variable `Anisotropy`.
|
|
212
|
+
*
|
|
213
|
+
* @type {PropertyNode<float>}
|
|
214
|
+
*/
|
|
73
215
|
export const anisotropy = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Anisotropy' );
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* TSL object that represents the shader variable `AnisotropyT`.
|
|
219
|
+
*
|
|
220
|
+
* @type {PropertyNode<vec3>}
|
|
221
|
+
*/
|
|
74
222
|
export const anisotropyT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyT' );
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* TSL object that represents the shader variable `AnisotropyB`.
|
|
226
|
+
*
|
|
227
|
+
* @type {PropertyNode<vec3>}
|
|
228
|
+
*/
|
|
75
229
|
export const anisotropyB = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyB' );
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* TSL object that represents the shader variable `SpecularColor`.
|
|
233
|
+
*
|
|
234
|
+
* @type {PropertyNode<color>}
|
|
235
|
+
*/
|
|
76
236
|
export const specularColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* TSL object that represents the shader variable `SpecularF90`.
|
|
240
|
+
*
|
|
241
|
+
* @type {PropertyNode<float>}
|
|
242
|
+
*/
|
|
77
243
|
export const specularF90 = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SpecularF90' );
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* TSL object that represents the shader variable `Shininess`.
|
|
247
|
+
*
|
|
248
|
+
* @type {PropertyNode<float>}
|
|
249
|
+
*/
|
|
78
250
|
export const shininess = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Shininess' );
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* TSL object that represents the shader variable `Output`.
|
|
254
|
+
*
|
|
255
|
+
* @type {PropertyNode<vec4>}
|
|
256
|
+
*/
|
|
79
257
|
export const output = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'Output' );
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* TSL object that represents the shader variable `dashSize`.
|
|
261
|
+
*
|
|
262
|
+
* @type {PropertyNode<float>}
|
|
263
|
+
*/
|
|
80
264
|
export const dashSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'dashSize' );
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* TSL object that represents the shader variable `gapSize`.
|
|
268
|
+
*
|
|
269
|
+
* @type {PropertyNode<float>}
|
|
270
|
+
*/
|
|
81
271
|
export const gapSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'gapSize' );
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* TSL object that represents the shader variable `pointWidth`.
|
|
275
|
+
*
|
|
276
|
+
* @type {PropertyNode<float>}
|
|
277
|
+
*/
|
|
82
278
|
export const pointWidth = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'pointWidth' );
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* TSL object that represents the shader variable `IOR`.
|
|
282
|
+
*
|
|
283
|
+
* @type {PropertyNode<float>}
|
|
284
|
+
*/
|
|
83
285
|
export const ior = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IOR' );
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* TSL object that represents the shader variable `Transmission`.
|
|
289
|
+
*
|
|
290
|
+
* @type {PropertyNode<float>}
|
|
291
|
+
*/
|
|
84
292
|
export const transmission = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Transmission' );
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* TSL object that represents the shader variable `Thickness`.
|
|
296
|
+
*
|
|
297
|
+
* @type {PropertyNode<float>}
|
|
298
|
+
*/
|
|
85
299
|
export const thickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Thickness' );
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* TSL object that represents the shader variable `AttenuationDistance`.
|
|
303
|
+
*
|
|
304
|
+
* @type {PropertyNode<float>}
|
|
305
|
+
*/
|
|
86
306
|
export const attenuationDistance = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AttenuationDistance' );
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* TSL object that represents the shader variable `AttenuationColor`.
|
|
310
|
+
*
|
|
311
|
+
* @type {PropertyNode<color>}
|
|
312
|
+
*/
|
|
87
313
|
export const attenuationColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'AttenuationColor' );
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* TSL object that represents the shader variable `Dispersion`.
|
|
317
|
+
*
|
|
318
|
+
* @type {PropertyNode<float>}
|
|
319
|
+
*/
|
|
88
320
|
export const dispersion = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Dispersion' );
|
|
@@ -2,6 +2,14 @@ import Node from './Node.js';
|
|
|
2
2
|
import { select } from '../math/ConditionalNode.js';
|
|
3
3
|
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module StackNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
|
|
9
|
+
* They are usually needed in cases like `If`, `Else`.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
5
13
|
class StackNode extends Node {
|
|
6
14
|
|
|
7
15
|
static get type() {
|
|
@@ -10,17 +18,54 @@ class StackNode extends Node {
|
|
|
10
18
|
|
|
11
19
|
}
|
|
12
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new stack node.
|
|
23
|
+
*
|
|
24
|
+
* @param {StackNode?} [parent=null] - The parent stack node.
|
|
25
|
+
*/
|
|
13
26
|
constructor( parent = null ) {
|
|
14
27
|
|
|
15
28
|
super();
|
|
16
29
|
|
|
30
|
+
/**
|
|
31
|
+
* List of nodes.
|
|
32
|
+
*
|
|
33
|
+
* @type {Array<Node>}
|
|
34
|
+
*/
|
|
17
35
|
this.nodes = [];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The output node.
|
|
39
|
+
*
|
|
40
|
+
* @type {Node?}
|
|
41
|
+
* @default null
|
|
42
|
+
*/
|
|
18
43
|
this.outputNode = null;
|
|
19
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The parent stack node.
|
|
47
|
+
*
|
|
48
|
+
* @type {StackNode}
|
|
49
|
+
* @default null
|
|
50
|
+
*/
|
|
20
51
|
this.parent = parent;
|
|
21
52
|
|
|
53
|
+
/**
|
|
54
|
+
* The current conditional node.
|
|
55
|
+
*
|
|
56
|
+
* @private
|
|
57
|
+
* @type {ConditionalNode}
|
|
58
|
+
* @default null
|
|
59
|
+
*/
|
|
22
60
|
this._currentCond = null;
|
|
23
61
|
|
|
62
|
+
/**
|
|
63
|
+
* This flag can be used for type testing.
|
|
64
|
+
*
|
|
65
|
+
* @type {Boolean}
|
|
66
|
+
* @readonly
|
|
67
|
+
* @default true
|
|
68
|
+
*/
|
|
24
69
|
this.isStackNode = true;
|
|
25
70
|
|
|
26
71
|
}
|
|
@@ -31,6 +76,18 @@ class StackNode extends Node {
|
|
|
31
76
|
|
|
32
77
|
}
|
|
33
78
|
|
|
79
|
+
getMemberType( builder, name ) {
|
|
80
|
+
|
|
81
|
+
return this.outputNode ? this.outputNode.getMemberType( builder, name ) : 'void';
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Adds a node to this stack.
|
|
87
|
+
*
|
|
88
|
+
* @param {Node} node - The node to add.
|
|
89
|
+
* @return {StackNode} A reference to this stack node.
|
|
90
|
+
*/
|
|
34
91
|
add( node ) {
|
|
35
92
|
|
|
36
93
|
this.nodes.push( node );
|
|
@@ -39,6 +96,13 @@ class StackNode extends Node {
|
|
|
39
96
|
|
|
40
97
|
}
|
|
41
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Represent an `if` statement in TSL.
|
|
101
|
+
*
|
|
102
|
+
* @param {Node} boolNode - Represents the condition.
|
|
103
|
+
* @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
|
|
104
|
+
* @return {StackNode} A reference to this stack node.
|
|
105
|
+
*/
|
|
42
106
|
If( boolNode, method ) {
|
|
43
107
|
|
|
44
108
|
const methodNode = new ShaderNode( method );
|
|
@@ -48,6 +112,13 @@ class StackNode extends Node {
|
|
|
48
112
|
|
|
49
113
|
}
|
|
50
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Represent an `elseif` statement in TSL.
|
|
117
|
+
*
|
|
118
|
+
* @param {Node} boolNode - Represents the condition.
|
|
119
|
+
* @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
|
|
120
|
+
* @return {StackNode} A reference to this stack node.
|
|
121
|
+
*/
|
|
51
122
|
ElseIf( boolNode, method ) {
|
|
52
123
|
|
|
53
124
|
const methodNode = new ShaderNode( method );
|
|
@@ -60,6 +131,12 @@ class StackNode extends Node {
|
|
|
60
131
|
|
|
61
132
|
}
|
|
62
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Represent an `else` statement in TSL.
|
|
136
|
+
*
|
|
137
|
+
* @param {Function} method - TSL code which is executed in the `else` case.
|
|
138
|
+
* @return {StackNode} A reference to this stack node.
|
|
139
|
+
*/
|
|
63
140
|
Else( method ) {
|
|
64
141
|
|
|
65
142
|
this._currentCond.elseNode = new ShaderNode( method );
|
|
@@ -86,8 +163,15 @@ class StackNode extends Node {
|
|
|
86
163
|
|
|
87
164
|
}
|
|
88
165
|
|
|
89
|
-
//
|
|
166
|
+
// Deprecated
|
|
90
167
|
|
|
168
|
+
/**
|
|
169
|
+
* @function
|
|
170
|
+
* @deprecated since r168. Use {@link StackNode#Else} instead.
|
|
171
|
+
*
|
|
172
|
+
* @param {...any} params
|
|
173
|
+
* @returns {StackNode}
|
|
174
|
+
*/
|
|
91
175
|
else( ...params ) { // @deprecated, r168
|
|
92
176
|
|
|
93
177
|
console.warn( 'TSL.StackNode: .else() has been renamed to .Else().' );
|
|
@@ -95,6 +179,12 @@ class StackNode extends Node {
|
|
|
95
179
|
|
|
96
180
|
}
|
|
97
181
|
|
|
182
|
+
/**
|
|
183
|
+
* @deprecated since r168. Use {@link StackNode#ElseIf} instead.
|
|
184
|
+
*
|
|
185
|
+
* @param {...any} params
|
|
186
|
+
* @returns {StackNode}
|
|
187
|
+
*/
|
|
98
188
|
elseif( ...params ) { // @deprecated, r168
|
|
99
189
|
|
|
100
190
|
console.warn( 'TSL.StackNode: .elseif() has been renamed to .ElseIf().' );
|
|
@@ -106,4 +196,11 @@ class StackNode extends Node {
|
|
|
106
196
|
|
|
107
197
|
export default StackNode;
|
|
108
198
|
|
|
199
|
+
/**
|
|
200
|
+
* TSL function for creating a stack node.
|
|
201
|
+
*
|
|
202
|
+
* @function
|
|
203
|
+
* @param {StackNode?} [parent=null] - The parent stack node.
|
|
204
|
+
* @returns {StackNode}
|
|
205
|
+
*/
|
|
109
206
|
export const stack = /*@__PURE__*/ nodeProxy( StackNode );
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
import StructTypeNode from './StructTypeNode.js';
|
|
3
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
|
+
|
|
5
|
+
/** @module StructNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* StructNode allows to create custom structures with multiple members.
|
|
9
|
+
* This can also be used to define structures in attribute and uniform data.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* // Define a custom struct
|
|
13
|
+
* const BoundingBox = struct( { min: 'vec3', max: 'vec3' } );
|
|
14
|
+
*
|
|
15
|
+
* // Create a new instance of the struct
|
|
16
|
+
* const bb = BoundingBox( vec3( 0 ), vec3( 1 ) ); // style 1
|
|
17
|
+
* const bb = BoundingBox( { min: vec3( 0 ), max: vec3( 1 ) } ); // style 2
|
|
18
|
+
*
|
|
19
|
+
* // Access the struct members
|
|
20
|
+
* const min = bb.get( 'min' );
|
|
21
|
+
*
|
|
22
|
+
* // Assign a new value to a member
|
|
23
|
+
* min.assign( vec3() );
|
|
24
|
+
* ```
|
|
25
|
+
* @augments Node
|
|
26
|
+
*/
|
|
27
|
+
class StructNode extends Node {
|
|
28
|
+
|
|
29
|
+
static get type() {
|
|
30
|
+
|
|
31
|
+
return 'StructNode';
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
constructor( structLayoutNode, values ) {
|
|
36
|
+
|
|
37
|
+
super( 'vec3' );
|
|
38
|
+
|
|
39
|
+
this.structLayoutNode = structLayoutNode;
|
|
40
|
+
this.values = values;
|
|
41
|
+
|
|
42
|
+
this.isStructNode = true;
|
|
43
|
+
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
getNodeType( builder ) {
|
|
47
|
+
|
|
48
|
+
return this.structLayoutNode.getNodeType( builder );
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getMemberType( builder, name ) {
|
|
53
|
+
|
|
54
|
+
return this.structLayoutNode.getMemberType( builder, name );
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
generate( builder ) {
|
|
59
|
+
|
|
60
|
+
const nodeVar = builder.getVarFromNode( this );
|
|
61
|
+
const structType = nodeVar.type;
|
|
62
|
+
const propertyName = builder.getPropertyName( nodeVar );
|
|
63
|
+
|
|
64
|
+
builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structLayoutNode.membersLayout, this.values ) }`, this );
|
|
65
|
+
|
|
66
|
+
return nodeVar.name;
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default StructNode;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* TSL function for creating a struct node.
|
|
76
|
+
*
|
|
77
|
+
* @function
|
|
78
|
+
* @param {Object} membersLayout - The layout of the struct members.
|
|
79
|
+
* @param {string} [name=null] - The name of the struct.
|
|
80
|
+
* @returns {Function} The struct function.
|
|
81
|
+
*/
|
|
82
|
+
export const struct = ( membersLayout, name = null ) => {
|
|
83
|
+
|
|
84
|
+
const structLayout = new StructTypeNode( membersLayout, name );
|
|
85
|
+
|
|
86
|
+
const struct = ( ...params ) => {
|
|
87
|
+
|
|
88
|
+
let values = null;
|
|
89
|
+
|
|
90
|
+
if ( params.length > 0 ) {
|
|
91
|
+
|
|
92
|
+
if ( params[ 0 ].isNode ) {
|
|
93
|
+
|
|
94
|
+
values = {};
|
|
95
|
+
|
|
96
|
+
const names = Object.keys( membersLayout );
|
|
97
|
+
|
|
98
|
+
for ( let i = 0; i < params.length; i ++ ) {
|
|
99
|
+
|
|
100
|
+
values[ names[ i ] ] = params[ i ];
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
} else {
|
|
105
|
+
|
|
106
|
+
values = params[ 0 ];
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return nodeObject( new StructNode( structLayout, values ) );
|
|
113
|
+
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
struct.layout = structLayout;
|
|
117
|
+
struct.isStruct = true;
|
|
118
|
+
|
|
119
|
+
return struct;
|
|
120
|
+
|
|
121
|
+
};
|