@plastic-software/three 0.179.0 → 0.181.1
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/build/three.cjs +1108 -591
- package/build/three.core.js +616 -345
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +488 -250
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +37 -6
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6576 -2152
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6575 -2151
- 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 +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +8 -8
- 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 +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- 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 +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- 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 +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/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 +3 -3
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- 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 +22 -5
- 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 +4 -4
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- 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/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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 +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
- package/examples/jsm/transpiler/TSLEncoder.js +9 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +24 -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 +7 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
- 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 +49 -35
- package/examples/jsm/tsl/display/OutlineNode.js +13 -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 +124 -7
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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 +4 -2
- package/src/Three.TSL.js +36 -5
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -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 +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +11 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- 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 +268 -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/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 +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 +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- 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 +1 -0
- 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 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
- 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/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +4 -1
- package/src/nodes/TSL.js +4 -1
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +133 -7
- 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 +5 -4
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +3 -2
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureNode.js +130 -44
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AssignNode.js +4 -3
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +29 -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} +40 -7
- package/src/nodes/core/Node.js +152 -31
- package/src/nodes/core/NodeBuilder.js +183 -35
- 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 -91
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +43 -16
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformNode.js +18 -10
- package/src/nodes/core/VarNode.js +70 -33
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +52 -11
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -14
- 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 +42 -12
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +3 -4
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +24 -7
- package/src/nodes/math/MathNode.js +25 -19
- package/src/nodes/math/OperatorNode.js +7 -5
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +460 -159
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +13 -3
- package/src/nodes/utils/ReflectorNode.js +58 -7
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/objects/BatchedMesh.js +2 -2
- 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 +48 -41
- 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 +2 -1
- package/src/renderers/common/Bindings.js +58 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.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 +6 -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 +16 -2
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +473 -245
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +50 -12
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +121 -45
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +42 -22
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- 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 +7 -15
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +15 -14
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +19 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -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 +153 -123
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +42 -26
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/Source.js +3 -2
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
|
@@ -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,100 +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 ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
|
|
142
|
-
|
|
143
|
-
for ( const subProperty in object ) {
|
|
144
|
-
|
|
145
|
-
// Ignore private properties.
|
|
146
|
-
if ( subProperty.startsWith( '_' ) === true ) continue;
|
|
147
|
-
|
|
148
|
-
const child = object[ subProperty ];
|
|
149
|
-
|
|
150
|
-
if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
|
|
151
|
-
|
|
152
|
-
yield { property, index: subProperty, childNode: child };
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
80
|
const typeFromLength = /*@__PURE__*/ new Map( [
|
|
165
81
|
[ 1, 'float' ],
|
|
166
82
|
[ 2, 'vec2' ],
|
|
@@ -175,6 +91,7 @@ const dataFromObject = /*@__PURE__*/ new WeakMap();
|
|
|
175
91
|
/**
|
|
176
92
|
* Returns the data type for the given the length.
|
|
177
93
|
*
|
|
94
|
+
* @private
|
|
178
95
|
* @method
|
|
179
96
|
* @param {number} length - The length.
|
|
180
97
|
* @return {string} The data type.
|
|
@@ -188,6 +105,7 @@ export function getTypeFromLength( length ) {
|
|
|
188
105
|
/**
|
|
189
106
|
* Returns the typed array for the given data type.
|
|
190
107
|
*
|
|
108
|
+
* @private
|
|
191
109
|
* @method
|
|
192
110
|
* @param {string} type - The data type.
|
|
193
111
|
* @return {TypedArray} The typed array.
|
|
@@ -221,6 +139,7 @@ export function getTypedArrayFromType( type ) {
|
|
|
221
139
|
/**
|
|
222
140
|
* Returns the length for the given data type.
|
|
223
141
|
*
|
|
142
|
+
* @private
|
|
224
143
|
* @method
|
|
225
144
|
* @param {string} type - The data type.
|
|
226
145
|
* @return {number} The length.
|
|
@@ -235,13 +154,14 @@ export function getLengthFromType( type ) {
|
|
|
235
154
|
if ( /mat3/.test( type ) ) return 9;
|
|
236
155
|
if ( /mat4/.test( type ) ) return 16;
|
|
237
156
|
|
|
238
|
-
|
|
157
|
+
error( 'TSL: Unsupported type:', type );
|
|
239
158
|
|
|
240
159
|
}
|
|
241
160
|
|
|
242
161
|
/**
|
|
243
162
|
* Returns the gpu memory length for the given data type.
|
|
244
163
|
*
|
|
164
|
+
* @private
|
|
245
165
|
* @method
|
|
246
166
|
* @param {string} type - The data type.
|
|
247
167
|
* @return {number} The length.
|
|
@@ -256,13 +176,14 @@ export function getMemoryLengthFromType( type ) {
|
|
|
256
176
|
if ( /mat3/.test( type ) ) return 12;
|
|
257
177
|
if ( /mat4/.test( type ) ) return 16;
|
|
258
178
|
|
|
259
|
-
|
|
179
|
+
error( 'TSL: Unsupported type:', type );
|
|
260
180
|
|
|
261
181
|
}
|
|
262
182
|
|
|
263
183
|
/**
|
|
264
184
|
* Returns the byte boundary for the given data type.
|
|
265
185
|
*
|
|
186
|
+
* @private
|
|
266
187
|
* @method
|
|
267
188
|
* @param {string} type - The data type.
|
|
268
189
|
* @return {number} The byte boundary.
|
|
@@ -277,13 +198,14 @@ export function getByteBoundaryFromType( type ) {
|
|
|
277
198
|
if ( /mat3/.test( type ) ) return 48;
|
|
278
199
|
if ( /mat4/.test( type ) ) return 64;
|
|
279
200
|
|
|
280
|
-
|
|
201
|
+
error( 'TSL: Unsupported type:', type );
|
|
281
202
|
|
|
282
203
|
}
|
|
283
204
|
|
|
284
205
|
/**
|
|
285
206
|
* Returns the data type for the given value.
|
|
286
207
|
*
|
|
208
|
+
* @private
|
|
287
209
|
* @method
|
|
288
210
|
* @param {any} value - The value.
|
|
289
211
|
* @return {?string} The data type.
|
|
@@ -355,6 +277,7 @@ export function getValueType( value ) {
|
|
|
355
277
|
/**
|
|
356
278
|
* Returns the value/object for the given data type and parameters.
|
|
357
279
|
*
|
|
280
|
+
* @private
|
|
358
281
|
* @method
|
|
359
282
|
* @param {string} type - The given type.
|
|
360
283
|
* @param {...any} params - A parameter list.
|
|
@@ -425,6 +348,7 @@ export function getValueFromType( type, ...params ) {
|
|
|
425
348
|
/**
|
|
426
349
|
* Gets the object data that can be shared between different rendering steps.
|
|
427
350
|
*
|
|
351
|
+
* @private
|
|
428
352
|
* @param {Object} object - The object to get the data for.
|
|
429
353
|
* @return {Object} The object data.
|
|
430
354
|
*/
|
|
@@ -446,6 +370,7 @@ export function getDataFromObject( object ) {
|
|
|
446
370
|
/**
|
|
447
371
|
* Converts the given array buffer to a Base64 string.
|
|
448
372
|
*
|
|
373
|
+
* @private
|
|
449
374
|
* @method
|
|
450
375
|
* @param {ArrayBuffer} arrayBuffer - The array buffer.
|
|
451
376
|
* @return {string} The Base64 string.
|
|
@@ -469,6 +394,7 @@ export function arrayBufferToBase64( arrayBuffer ) {
|
|
|
469
394
|
/**
|
|
470
395
|
* Converts the given Base64 string to an array buffer.
|
|
471
396
|
*
|
|
397
|
+
* @private
|
|
472
398
|
* @method
|
|
473
399
|
* @param {string} base64 - The Base64 string.
|
|
474
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
|
|
|
@@ -255,9 +269,7 @@ class StackNode extends Node {
|
|
|
255
269
|
|
|
256
270
|
if ( childNode.isVarNode && childNode.intent === true ) {
|
|
257
271
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
if ( properties.assign !== true ) {
|
|
272
|
+
if ( childNode.isAssign( builder ) !== true ) {
|
|
261
273
|
|
|
262
274
|
continue;
|
|
263
275
|
|
|
@@ -275,14 +287,19 @@ class StackNode extends Node {
|
|
|
275
287
|
|
|
276
288
|
}
|
|
277
289
|
|
|
290
|
+
get hasOutput() {
|
|
291
|
+
|
|
292
|
+
return this.outputNode && this.outputNode.isNode;
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
278
296
|
build( builder, ...params ) {
|
|
279
297
|
|
|
280
|
-
const previousBuildStack = builder.currentStack;
|
|
281
298
|
const previousStack = getCurrentStack();
|
|
282
299
|
|
|
283
300
|
setCurrentStack( this );
|
|
284
301
|
|
|
285
|
-
builder.
|
|
302
|
+
builder.setActiveStack( this );
|
|
286
303
|
|
|
287
304
|
const buildStage = builder.buildStage;
|
|
288
305
|
|
|
@@ -290,9 +307,7 @@ class StackNode extends Node {
|
|
|
290
307
|
|
|
291
308
|
if ( node.isVarNode && node.intent === true ) {
|
|
292
309
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
if ( properties.assign !== true ) {
|
|
310
|
+
if ( node.isAssign( builder ) !== true ) {
|
|
296
311
|
|
|
297
312
|
continue;
|
|
298
313
|
|
|
@@ -325,11 +340,23 @@ class StackNode extends Node {
|
|
|
325
340
|
|
|
326
341
|
}
|
|
327
342
|
|
|
328
|
-
|
|
343
|
+
//
|
|
344
|
+
|
|
345
|
+
let result;
|
|
346
|
+
|
|
347
|
+
if ( this.hasOutput ) {
|
|
348
|
+
|
|
349
|
+
result = this.outputNode.build( builder, ...params );
|
|
350
|
+
|
|
351
|
+
} else {
|
|
352
|
+
|
|
353
|
+
result = super.build( builder, ...params );
|
|
354
|
+
|
|
355
|
+
}
|
|
329
356
|
|
|
330
357
|
setCurrentStack( previousStack );
|
|
331
358
|
|
|
332
|
-
builder.
|
|
359
|
+
builder.removeActiveStack( this );
|
|
333
360
|
|
|
334
361
|
return result;
|
|
335
362
|
|
|
@@ -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
|
|
|
@@ -7,7 +7,7 @@ import { nodeObject } from '../tsl/TSLCore.js';
|
|
|
7
7
|
* @augments Node
|
|
8
8
|
* @param {Node} node - The node to be built in the sub-build.
|
|
9
9
|
* @param {string} name - The name of the sub-build.
|
|
10
|
-
* @param {string
|
|
10
|
+
* @param {?string} [nodeType=null] - The type of the node, if known.
|
|
11
11
|
*/
|
|
12
12
|
class SubBuildNode extends Node {
|
|
13
13
|
|
|
@@ -83,7 +83,7 @@ export default SubBuildNode;
|
|
|
83
83
|
* @function
|
|
84
84
|
* @param {Node} node - The node to be built in the sub-build.
|
|
85
85
|
* @param {string} name - The name of the sub-build.
|
|
86
|
-
* @param {string
|
|
86
|
+
* @param {?string} [type=null] - The type of the node, if known.
|
|
87
87
|
* @returns {Node} A node object wrapping the SubBuildNode instance.
|
|
88
88
|
*/
|
|
89
89
|
export const subBuild = ( node, name, type = null ) => nodeObject( new SubBuildNode( nodeObject( node ), name, type ) );
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import InputNode from './InputNode.js';
|
|
2
2
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
3
|
import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
|
|
4
|
+
import { getValueFromType } from './NodeUtils.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Class for representing a uniform.
|
|
@@ -76,7 +78,7 @@ class UniformNode extends InputNode {
|
|
|
76
78
|
*/
|
|
77
79
|
label( name ) {
|
|
78
80
|
|
|
79
|
-
|
|
81
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
80
82
|
|
|
81
83
|
return this.setName( name );
|
|
82
84
|
|
|
@@ -122,13 +124,11 @@ class UniformNode extends InputNode {
|
|
|
122
124
|
|
|
123
125
|
onUpdate( callback, updateType ) {
|
|
124
126
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
callback = callback.bind( self );
|
|
127
|
+
callback = callback.bind( this );
|
|
128
128
|
|
|
129
129
|
return super.onUpdate( ( frame ) => {
|
|
130
130
|
|
|
131
|
-
const value = callback( frame,
|
|
131
|
+
const value = callback( frame, this );
|
|
132
132
|
|
|
133
133
|
if ( value !== undefined ) {
|
|
134
134
|
|
|
@@ -219,16 +219,24 @@ export default UniformNode;
|
|
|
219
219
|
*
|
|
220
220
|
* @tsl
|
|
221
221
|
* @function
|
|
222
|
-
* @param {any}
|
|
223
|
-
* @param {string} [
|
|
222
|
+
* @param {any|string} value - The value of this uniform or your type. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
223
|
+
* @param {string} [type] - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
224
224
|
* @returns {UniformNode}
|
|
225
225
|
*/
|
|
226
|
-
export const uniform = (
|
|
226
|
+
export const uniform = ( value, type ) => {
|
|
227
|
+
|
|
228
|
+
const nodeType = getConstNodeType( type || value );
|
|
229
|
+
|
|
230
|
+
if ( nodeType === value ) {
|
|
227
231
|
|
|
228
|
-
|
|
232
|
+
// if the value is a type but no having a value
|
|
233
|
+
|
|
234
|
+
value = getValueFromType( nodeType );
|
|
235
|
+
|
|
236
|
+
}
|
|
229
237
|
|
|
230
238
|
// @TODO: get ConstNode from .traverse() in the future
|
|
231
|
-
|
|
239
|
+
value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
|
|
232
240
|
|
|
233
241
|
return nodeObject( new UniformNode( value, nodeType ) );
|
|
234
242
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
-
import { addMethodChaining,
|
|
2
|
+
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
|
+
import { error } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Class for representing shader variables as nodes. Variables are created from
|
|
@@ -146,14 +147,53 @@ class VarNode extends Node {
|
|
|
146
147
|
|
|
147
148
|
}
|
|
148
149
|
|
|
150
|
+
isAssign( builder ) {
|
|
151
|
+
|
|
152
|
+
const properties = builder.getNodeProperties( this );
|
|
153
|
+
|
|
154
|
+
let assign = properties.assign;
|
|
155
|
+
|
|
156
|
+
if ( assign !== true ) {
|
|
157
|
+
|
|
158
|
+
if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
|
|
159
|
+
|
|
160
|
+
if ( builder.fnCall && builder.fnCall.shaderNode ) {
|
|
161
|
+
|
|
162
|
+
const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
|
|
163
|
+
|
|
164
|
+
if ( shaderNodeData.hasLoop ) {
|
|
165
|
+
|
|
166
|
+
assign = true;
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return assign;
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
149
180
|
build( ...params ) {
|
|
150
181
|
|
|
151
|
-
|
|
182
|
+
const builder = params[ 0 ];
|
|
152
183
|
|
|
153
|
-
|
|
154
|
-
const properties = builder.getNodeProperties( this );
|
|
184
|
+
if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
|
|
155
185
|
|
|
156
|
-
if (
|
|
186
|
+
if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
|
|
187
|
+
|
|
188
|
+
builder.getBaseStack().addToStack( this );
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if ( this.intent === true ) {
|
|
195
|
+
|
|
196
|
+
if ( this.isAssign( builder ) !== true ) {
|
|
157
197
|
|
|
158
198
|
return this.node.build( ...params );
|
|
159
199
|
|
|
@@ -183,7 +223,23 @@ class VarNode extends Node {
|
|
|
183
223
|
|
|
184
224
|
}
|
|
185
225
|
|
|
186
|
-
const
|
|
226
|
+
const nodeType = this.getNodeType( builder );
|
|
227
|
+
|
|
228
|
+
if ( nodeType == 'void' ) {
|
|
229
|
+
|
|
230
|
+
if ( this.intent !== true ) {
|
|
231
|
+
|
|
232
|
+
error( 'TSL: ".toVar()" can not be used with void type.' );
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const snippet = node.build( builder );
|
|
237
|
+
|
|
238
|
+
return snippet;
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const vectorType = builder.getVectorType( nodeType );
|
|
187
243
|
const snippet = node.build( builder, vectorType );
|
|
188
244
|
|
|
189
245
|
const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );
|
|
@@ -216,6 +272,14 @@ class VarNode extends Node {
|
|
|
216
272
|
|
|
217
273
|
}
|
|
218
274
|
|
|
275
|
+
_hasStack( builder ) {
|
|
276
|
+
|
|
277
|
+
const nodeData = builder.getDataFromNode( this );
|
|
278
|
+
|
|
279
|
+
return nodeData.stack !== undefined;
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
|
|
219
283
|
}
|
|
220
284
|
|
|
221
285
|
export default VarNode;
|
|
@@ -267,12 +331,6 @@ export const Const = ( node, name = null ) => createVar( node, name, true ).toSt
|
|
|
267
331
|
*/
|
|
268
332
|
export const VarIntent = ( node ) => {
|
|
269
333
|
|
|
270
|
-
if ( getCurrentStack() === null ) {
|
|
271
|
-
|
|
272
|
-
return node;
|
|
273
|
-
|
|
274
|
-
}
|
|
275
|
-
|
|
276
334
|
return createVar( node ).setIntent( true ).toStack();
|
|
277
335
|
|
|
278
336
|
};
|
|
@@ -282,24 +340,3 @@ export const VarIntent = ( node ) => {
|
|
|
282
340
|
addMethodChaining( 'toVar', Var );
|
|
283
341
|
addMethodChaining( 'toConst', Const );
|
|
284
342
|
addMethodChaining( 'toVarIntent', VarIntent );
|
|
285
|
-
|
|
286
|
-
// Deprecated
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* @tsl
|
|
290
|
-
* @function
|
|
291
|
-
* @deprecated since r170. Use `Var( node )` or `node.toVar()` instead.
|
|
292
|
-
*
|
|
293
|
-
* @param {any} node
|
|
294
|
-
* @returns {VarNode}
|
|
295
|
-
*/
|
|
296
|
-
export const temp = ( node ) => { // @deprecated, r170
|
|
297
|
-
|
|
298
|
-
console.warn( 'TSL: "temp( node )" is deprecated. Use "Var( node )" or "node.toVar()" instead.' );
|
|
299
|
-
|
|
300
|
-
return createVar( node );
|
|
301
|
-
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
addMethodChaining( 'temp', temp );
|
|
305
|
-
|