@plastic-software/three 0.180.0 → 0.181.2
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 +944 -487
- package/build/three.core.js +506 -327
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +436 -164
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3753 -1177
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3752 -1176
- 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/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -2
- 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 +3 -3
- 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/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +2 -2
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +5 -3
- package/examples/jsm/loaders/KTX2Loader.js +28 -21
- 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/SVGLoader.js +2 -2
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/SimplexNoise.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/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/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/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +7 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +2 -1
- package/examples/jsm/tsl/display/BloomNode.js +4 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +7 -0
- package/examples/jsm/tsl/display/GTAONode.js +45 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +5 -3
- package/examples/jsm/tsl/display/OutlineNode.js +11 -0
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +2 -0
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +123 -6
- package/examples/jsm/tsl/display/boxBlur.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +1 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -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 +3 -2
- package/src/Three.TSL.js +7 -1
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +3 -2
- 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 +1 -1
- package/src/core/BufferGeometry.js +8 -8
- 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/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 +7 -7
- 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/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 +4 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- 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/manager/NodeMaterialObserver.js +2 -1
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +2 -2
- 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 +1 -1
- package/src/nodes/TSL.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +3 -2
- package/src/nodes/accessors/InstanceNode.js +22 -4
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceNode.js +2 -1
- 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 +1 -1
- package/src/nodes/accessors/TextureNode.js +61 -27
- package/src/nodes/code/FunctionCallNode.js +5 -4
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +5 -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 +137 -12
- package/src/nodes/core/NodeBuilder.js +135 -21
- package/src/nodes/core/NodeFrame.js +20 -20
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUtils.js +17 -90
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +16 -14
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +70 -12
- 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/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +51 -10
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- 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 +25 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +2 -3
- 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/ConditionalNode.js +6 -5
- package/src/nodes/math/MathNode.js +22 -4
- package/src/nodes/math/OperatorNode.js +3 -2
- 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 +36 -15
- 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 +3 -2
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +2 -1
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +12 -2
- package/src/nodes/utils/ReflectorNode.js +10 -3
- 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 +2 -1
- package/src/renderers/WebGLRenderer.js +49 -33
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Backend.js +93 -30
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +56 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- 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/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +3 -1
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +436 -228
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -0
- package/src/renderers/common/Sampler.js +37 -11
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +89 -35
- package/src/renderers/common/TimestampQueryPool.js +63 -1
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +7 -3
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeLibrary.js +4 -2
- 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/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 +11 -10
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +2 -1
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +18 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +22 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +74 -11
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +6 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +117 -16
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +42 -12
- package/src/renderers/webgpu/WebGPUBackend.js +134 -108
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -19
- 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 +5 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +44 -16
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +146 -74
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +29 -6
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +3 -2
- package/src/textures/Source.js +2 -1
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -0
- package/src/utils.js +67 -3
|
@@ -124,8 +124,8 @@ class NodeFrame {
|
|
|
124
124
|
if ( maps === undefined ) {
|
|
125
125
|
|
|
126
126
|
maps = {
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
renderId: 0,
|
|
128
|
+
frameId: 0,
|
|
129
129
|
};
|
|
130
130
|
|
|
131
131
|
referenceMap.set( nodeRef, maps );
|
|
@@ -151,13 +151,13 @@ class NodeFrame {
|
|
|
151
151
|
|
|
152
152
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
153
153
|
|
|
154
|
-
const
|
|
154
|
+
const nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );
|
|
155
155
|
|
|
156
|
-
if (
|
|
156
|
+
if ( nodeUpdateBeforeMap.frameId !== this.frameId ) {
|
|
157
157
|
|
|
158
158
|
if ( node.updateBefore( this ) !== false ) {
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
nodeUpdateBeforeMap.frameId = this.frameId;
|
|
161
161
|
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -165,13 +165,13 @@ class NodeFrame {
|
|
|
165
165
|
|
|
166
166
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
167
167
|
|
|
168
|
-
const
|
|
168
|
+
const nodeUpdateBeforeMap = this._getMaps( this.updateBeforeMap, reference );
|
|
169
169
|
|
|
170
|
-
if (
|
|
170
|
+
if ( nodeUpdateBeforeMap.renderId !== this.renderId ) {
|
|
171
171
|
|
|
172
172
|
if ( node.updateBefore( this ) !== false ) {
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
nodeUpdateBeforeMap.renderId = this.renderId;
|
|
175
175
|
|
|
176
176
|
}
|
|
177
177
|
|
|
@@ -200,13 +200,13 @@ class NodeFrame {
|
|
|
200
200
|
|
|
201
201
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
202
202
|
|
|
203
|
-
const
|
|
203
|
+
const nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );
|
|
204
204
|
|
|
205
|
-
if (
|
|
205
|
+
if ( nodeUpdateAfterMap.frameId !== this.frameId ) {
|
|
206
206
|
|
|
207
207
|
if ( node.updateAfter( this ) !== false ) {
|
|
208
208
|
|
|
209
|
-
|
|
209
|
+
nodeUpdateAfterMap.frameId = this.frameId;
|
|
210
210
|
|
|
211
211
|
}
|
|
212
212
|
|
|
@@ -214,13 +214,13 @@ class NodeFrame {
|
|
|
214
214
|
|
|
215
215
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
216
216
|
|
|
217
|
-
const
|
|
217
|
+
const nodeUpdateAfterMap = this._getMaps( this.updateAfterMap, reference );
|
|
218
218
|
|
|
219
|
-
if (
|
|
219
|
+
if ( nodeUpdateAfterMap.renderId !== this.renderId ) {
|
|
220
220
|
|
|
221
221
|
if ( node.updateAfter( this ) !== false ) {
|
|
222
222
|
|
|
223
|
-
|
|
223
|
+
nodeUpdateAfterMap.renderId = this.renderId;
|
|
224
224
|
|
|
225
225
|
}
|
|
226
226
|
|
|
@@ -249,13 +249,13 @@ class NodeFrame {
|
|
|
249
249
|
|
|
250
250
|
if ( updateType === NodeUpdateType.FRAME ) {
|
|
251
251
|
|
|
252
|
-
const
|
|
252
|
+
const nodeUpdateMap = this._getMaps( this.updateMap, reference );
|
|
253
253
|
|
|
254
|
-
if (
|
|
254
|
+
if ( nodeUpdateMap.frameId !== this.frameId ) {
|
|
255
255
|
|
|
256
256
|
if ( node.update( this ) !== false ) {
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
nodeUpdateMap.frameId = this.frameId;
|
|
259
259
|
|
|
260
260
|
}
|
|
261
261
|
|
|
@@ -263,13 +263,13 @@ class NodeFrame {
|
|
|
263
263
|
|
|
264
264
|
} else if ( updateType === NodeUpdateType.RENDER ) {
|
|
265
265
|
|
|
266
|
-
const
|
|
266
|
+
const nodeUpdateMap = this._getMaps( this.updateMap, reference );
|
|
267
267
|
|
|
268
|
-
if (
|
|
268
|
+
if ( nodeUpdateMap.renderId !== this.renderId ) {
|
|
269
269
|
|
|
270
270
|
if ( node.update( this ) !== false ) {
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
nodeUpdateMap.renderId = this.renderId;
|
|
273
273
|
|
|
274
274
|
}
|
|
275
275
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { warn } from '../../utils.js';
|
|
1
2
|
/**
|
|
2
3
|
* Base class for node functions. A derived module must be implemented
|
|
3
4
|
* for each supported native shader language. Similar to other `Node*` modules,
|
|
@@ -57,7 +58,7 @@ class NodeFunction {
|
|
|
57
58
|
*/
|
|
58
59
|
getCode( /*name = this.name*/ ) {
|
|
59
60
|
|
|
60
|
-
|
|
61
|
+
warn( 'Abstract function.' );
|
|
61
62
|
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { warn } from '../../utils.js';
|
|
1
2
|
/**
|
|
2
3
|
* Base class for node parsers. A derived parser must be implemented
|
|
3
4
|
* for each supported native shader language.
|
|
@@ -13,7 +14,7 @@ class NodeParser {
|
|
|
13
14
|
*/
|
|
14
15
|
parseFunction( /*source*/ ) {
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
warn( 'Abstract function.' );
|
|
17
18
|
|
|
18
19
|
}
|
|
19
20
|
|
|
@@ -5,6 +5,7 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
5
5
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
6
|
import { Vector3 } from '../../math/Vector3.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
|
+
import { error } from '../../utils.js';
|
|
8
9
|
|
|
9
10
|
// cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
|
|
10
11
|
// A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
|
|
@@ -49,6 +50,7 @@ function cyrb53( value, seed = 0 ) {
|
|
|
49
50
|
/**
|
|
50
51
|
* Computes a hash for the given string.
|
|
51
52
|
*
|
|
53
|
+
* @private
|
|
52
54
|
* @method
|
|
53
55
|
* @param {string} str - The string to be hashed.
|
|
54
56
|
* @return {number} The hash.
|
|
@@ -58,6 +60,7 @@ export const hashString = ( str ) => cyrb53( str );
|
|
|
58
60
|
/**
|
|
59
61
|
* Computes a hash for the given array.
|
|
60
62
|
*
|
|
63
|
+
* @private
|
|
61
64
|
* @method
|
|
62
65
|
* @param {Array<number>} array - The array to be hashed.
|
|
63
66
|
* @return {number} The hash.
|
|
@@ -67,99 +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
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
for ( const { property, childNode } of getNodeChildren( object ) ) {
|
|
95
|
-
|
|
96
|
-
values.push( cyrb53( property.slice( 0, - 4 ) ), childNode.getCacheKey( force ) );
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return cyrb53( values );
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* This generator function can be used to iterate over the node children
|
|
106
|
-
* of the given object.
|
|
107
|
-
*
|
|
108
|
-
* @generator
|
|
109
|
-
* @param {Object} node - The object to be hashed.
|
|
110
|
-
* @param {boolean} [toJSON=false] - Whether to return JSON or not.
|
|
111
|
-
* @yields {Object} A result node holding the property, index (if available) and the child node.
|
|
112
|
-
*/
|
|
113
|
-
export function* getNodeChildren( node, toJSON = false ) {
|
|
114
|
-
|
|
115
|
-
for ( const property of Object.getOwnPropertyNames( node ) ) {
|
|
116
|
-
|
|
117
|
-
// Ignore private properties.
|
|
118
|
-
if ( property.startsWith( '_' ) === true ) continue;
|
|
119
|
-
|
|
120
|
-
const object = node[ property ];
|
|
121
|
-
|
|
122
|
-
if ( Array.isArray( object ) === true ) {
|
|
123
|
-
|
|
124
|
-
for ( let i = 0; i < object.length; i ++ ) {
|
|
125
|
-
|
|
126
|
-
const child = object[ i ];
|
|
127
|
-
|
|
128
|
-
if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
|
|
129
|
-
|
|
130
|
-
yield { property, index: i, childNode: child };
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
} else if ( object && object.isNode === true ) {
|
|
137
|
-
|
|
138
|
-
yield { property, childNode: object };
|
|
139
|
-
|
|
140
|
-
} else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
|
|
141
|
-
|
|
142
|
-
for ( const subProperty in object ) {
|
|
143
|
-
|
|
144
|
-
// Ignore private properties.
|
|
145
|
-
if ( subProperty.startsWith( '_' ) === true ) continue;
|
|
146
|
-
|
|
147
|
-
const child = object[ subProperty ];
|
|
148
|
-
|
|
149
|
-
if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
|
|
150
|
-
|
|
151
|
-
yield { property, index: subProperty, childNode: child };
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
|
|
163
80
|
const typeFromLength = /*@__PURE__*/ new Map( [
|
|
164
81
|
[ 1, 'float' ],
|
|
165
82
|
[ 2, 'vec2' ],
|
|
@@ -174,6 +91,7 @@ const dataFromObject = /*@__PURE__*/ new WeakMap();
|
|
|
174
91
|
/**
|
|
175
92
|
* Returns the data type for the given the length.
|
|
176
93
|
*
|
|
94
|
+
* @private
|
|
177
95
|
* @method
|
|
178
96
|
* @param {number} length - The length.
|
|
179
97
|
* @return {string} The data type.
|
|
@@ -187,6 +105,7 @@ export function getTypeFromLength( length ) {
|
|
|
187
105
|
/**
|
|
188
106
|
* Returns the typed array for the given data type.
|
|
189
107
|
*
|
|
108
|
+
* @private
|
|
190
109
|
* @method
|
|
191
110
|
* @param {string} type - The data type.
|
|
192
111
|
* @return {TypedArray} The typed array.
|
|
@@ -220,6 +139,7 @@ export function getTypedArrayFromType( type ) {
|
|
|
220
139
|
/**
|
|
221
140
|
* Returns the length for the given data type.
|
|
222
141
|
*
|
|
142
|
+
* @private
|
|
223
143
|
* @method
|
|
224
144
|
* @param {string} type - The data type.
|
|
225
145
|
* @return {number} The length.
|
|
@@ -234,13 +154,14 @@ export function getLengthFromType( type ) {
|
|
|
234
154
|
if ( /mat3/.test( type ) ) return 9;
|
|
235
155
|
if ( /mat4/.test( type ) ) return 16;
|
|
236
156
|
|
|
237
|
-
|
|
157
|
+
error( 'TSL: Unsupported type:', type );
|
|
238
158
|
|
|
239
159
|
}
|
|
240
160
|
|
|
241
161
|
/**
|
|
242
162
|
* Returns the gpu memory length for the given data type.
|
|
243
163
|
*
|
|
164
|
+
* @private
|
|
244
165
|
* @method
|
|
245
166
|
* @param {string} type - The data type.
|
|
246
167
|
* @return {number} The length.
|
|
@@ -255,13 +176,14 @@ export function getMemoryLengthFromType( type ) {
|
|
|
255
176
|
if ( /mat3/.test( type ) ) return 12;
|
|
256
177
|
if ( /mat4/.test( type ) ) return 16;
|
|
257
178
|
|
|
258
|
-
|
|
179
|
+
error( 'TSL: Unsupported type:', type );
|
|
259
180
|
|
|
260
181
|
}
|
|
261
182
|
|
|
262
183
|
/**
|
|
263
184
|
* Returns the byte boundary for the given data type.
|
|
264
185
|
*
|
|
186
|
+
* @private
|
|
265
187
|
* @method
|
|
266
188
|
* @param {string} type - The data type.
|
|
267
189
|
* @return {number} The byte boundary.
|
|
@@ -276,13 +198,14 @@ export function getByteBoundaryFromType( type ) {
|
|
|
276
198
|
if ( /mat3/.test( type ) ) return 48;
|
|
277
199
|
if ( /mat4/.test( type ) ) return 64;
|
|
278
200
|
|
|
279
|
-
|
|
201
|
+
error( 'TSL: Unsupported type:', type );
|
|
280
202
|
|
|
281
203
|
}
|
|
282
204
|
|
|
283
205
|
/**
|
|
284
206
|
* Returns the data type for the given value.
|
|
285
207
|
*
|
|
208
|
+
* @private
|
|
286
209
|
* @method
|
|
287
210
|
* @param {any} value - The value.
|
|
288
211
|
* @return {?string} The data type.
|
|
@@ -354,6 +277,7 @@ export function getValueType( value ) {
|
|
|
354
277
|
/**
|
|
355
278
|
* Returns the value/object for the given data type and parameters.
|
|
356
279
|
*
|
|
280
|
+
* @private
|
|
357
281
|
* @method
|
|
358
282
|
* @param {string} type - The given type.
|
|
359
283
|
* @param {...any} params - A parameter list.
|
|
@@ -424,6 +348,7 @@ export function getValueFromType( type, ...params ) {
|
|
|
424
348
|
/**
|
|
425
349
|
* Gets the object data that can be shared between different rendering steps.
|
|
426
350
|
*
|
|
351
|
+
* @private
|
|
427
352
|
* @param {Object} object - The object to get the data for.
|
|
428
353
|
* @return {Object} The object data.
|
|
429
354
|
*/
|
|
@@ -445,6 +370,7 @@ export function getDataFromObject( object ) {
|
|
|
445
370
|
/**
|
|
446
371
|
* Converts the given array buffer to a Base64 string.
|
|
447
372
|
*
|
|
373
|
+
* @private
|
|
448
374
|
* @method
|
|
449
375
|
* @param {ArrayBuffer} arrayBuffer - The array buffer.
|
|
450
376
|
* @return {string} The Base64 string.
|
|
@@ -468,6 +394,7 @@ export function arrayBufferToBase64( arrayBuffer ) {
|
|
|
468
394
|
/**
|
|
469
395
|
* Converts the given Base64 string to an array buffer.
|
|
470
396
|
*
|
|
397
|
+
* @private
|
|
471
398
|
* @method
|
|
472
399
|
* @param {string} base64 - The Base64 string.
|
|
473
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,6 +79,12 @@ 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
90
|
return this.hasOutput ? this.outputNode.getNodeType( builder ) : 'void';
|
|
@@ -96,11 +103,11 @@ 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 ) {
|
|
100
107
|
|
|
101
108
|
if ( node.isNode !== true ) {
|
|
102
109
|
|
|
103
|
-
|
|
110
|
+
error( 'TSL: Invalid node added to stack.' );
|
|
104
111
|
return this;
|
|
105
112
|
|
|
106
113
|
}
|
|
@@ -123,7 +130,7 @@ class StackNode extends Node {
|
|
|
123
130
|
const methodNode = new ShaderNode( method );
|
|
124
131
|
this._currentCond = select( boolNode, methodNode );
|
|
125
132
|
|
|
126
|
-
return this.
|
|
133
|
+
return this.addToStack( this._currentCond );
|
|
127
134
|
|
|
128
135
|
}
|
|
129
136
|
|
|
@@ -198,7 +205,7 @@ class StackNode extends Node {
|
|
|
198
205
|
|
|
199
206
|
} else {
|
|
200
207
|
|
|
201
|
-
|
|
208
|
+
error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
|
|
202
209
|
|
|
203
210
|
}
|
|
204
211
|
|
|
@@ -225,7 +232,7 @@ class StackNode extends Node {
|
|
|
225
232
|
|
|
226
233
|
this._currentCond = condNode;
|
|
227
234
|
|
|
228
|
-
return this.
|
|
235
|
+
return this.addToStack( this._currentCond );
|
|
229
236
|
|
|
230
237
|
} else {
|
|
231
238
|
|
|
@@ -262,9 +269,7 @@ class StackNode extends Node {
|
|
|
262
269
|
|
|
263
270
|
if ( childNode.isVarNode && childNode.intent === true ) {
|
|
264
271
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if ( properties.assign !== true ) {
|
|
272
|
+
if ( childNode.isAssign( builder ) !== true ) {
|
|
268
273
|
|
|
269
274
|
continue;
|
|
270
275
|
|
|
@@ -290,12 +295,11 @@ class StackNode extends Node {
|
|
|
290
295
|
|
|
291
296
|
build( builder, ...params ) {
|
|
292
297
|
|
|
293
|
-
const previousBuildStack = builder.currentStack;
|
|
294
298
|
const previousStack = getCurrentStack();
|
|
295
299
|
|
|
296
300
|
setCurrentStack( this );
|
|
297
301
|
|
|
298
|
-
builder.
|
|
302
|
+
builder.setActiveStack( this );
|
|
299
303
|
|
|
300
304
|
const buildStage = builder.buildStage;
|
|
301
305
|
|
|
@@ -303,9 +307,7 @@ class StackNode extends Node {
|
|
|
303
307
|
|
|
304
308
|
if ( node.isVarNode && node.intent === true ) {
|
|
305
309
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
if ( properties.assign !== true ) {
|
|
310
|
+
if ( node.isAssign( builder ) !== true ) {
|
|
309
311
|
|
|
310
312
|
continue;
|
|
311
313
|
|
|
@@ -354,7 +356,7 @@ class StackNode extends Node {
|
|
|
354
356
|
|
|
355
357
|
setCurrentStack( previousStack );
|
|
356
358
|
|
|
357
|
-
builder.
|
|
359
|
+
builder.removeActiveStack( this );
|
|
358
360
|
|
|
359
361
|
return result;
|
|
360
362
|
|
|
@@ -2,6 +2,7 @@ import InputNode from './InputNode.js';
|
|
|
2
2
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
3
|
import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
|
|
4
4
|
import { getValueFromType } from './NodeUtils.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Class for representing a uniform.
|
|
@@ -77,7 +78,7 @@ class UniformNode extends InputNode {
|
|
|
77
78
|
*/
|
|
78
79
|
label( name ) {
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
81
82
|
|
|
82
83
|
return this.setName( name );
|
|
83
84
|
|
|
@@ -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 ];
|
|
183
|
+
|
|
184
|
+
if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
|
|
185
|
+
|
|
186
|
+
if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
|
|
187
|
+
|
|
188
|
+
builder.getBaseStack().addToStack( this );
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
}
|
|
152
193
|
|
|
153
|
-
|
|
154
|
-
const properties = builder.getNodeProperties( this );
|
|
194
|
+
if ( this.intent === true ) {
|
|
155
195
|
|
|
156
|
-
if (
|
|
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
|
};
|
|
@@ -2,6 +2,7 @@ import Node from './Node.js';
|
|
|
2
2
|
import { NodeShaderStage } from './constants.js';
|
|
3
3
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
4
|
import { subBuild } from './SubBuildNode.js';
|
|
5
|
+
import { warn } from '../../utils.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Class for representing shader varyings as nodes. Varyings are create from
|
|
@@ -213,14 +214,14 @@ addMethodChaining( 'toVertexStage', vertexStage );
|
|
|
213
214
|
|
|
214
215
|
addMethodChaining( 'varying', ( ...params ) => { // @deprecated, r173
|
|
215
216
|
|
|
216
|
-
|
|
217
|
+
warn( 'TSL: .varying() has been renamed to .toVarying().' );
|
|
217
218
|
return varying( ...params );
|
|
218
219
|
|
|
219
220
|
} );
|
|
220
221
|
|
|
221
222
|
addMethodChaining( 'vertexStage', ( ...params ) => { // @deprecated, r173
|
|
222
223
|
|
|
223
|
-
|
|
224
|
+
warn( 'TSL: .vertexStage() has been renamed to .toVertexStage().' );
|
|
224
225
|
return varying( ...params );
|
|
225
226
|
|
|
226
227
|
} );
|