super-three 0.157.1 → 0.160.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/build/three.cjs +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +135 -133
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -1,19 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
import { glslFn } from '../../code/FunctionNode.js';
|
|
3
|
-
|
|
4
|
-
// Original shader code from:
|
|
1
|
+
// Three.js Transpiler
|
|
5
2
|
// https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_transform_color.glsl
|
|
6
3
|
|
|
7
|
-
|
|
4
|
+
import { bvec3, vec3, tslFn } from '../../shadernode/ShaderNode.js';
|
|
5
|
+
import { greaterThan } from '../../math/OperatorNode.js';
|
|
6
|
+
import { max, pow, mix } from '../../math/MathNode.js';
|
|
7
|
+
|
|
8
|
+
const mx_srgb_texture_to_lin_rec709 = tslFn( ( [ color_immutable ] ) => {
|
|
9
|
+
|
|
10
|
+
const color = vec3( color_immutable ).toVar();
|
|
11
|
+
const isAbove = bvec3( greaterThan( color, vec3( 0.04045 ) ) ).toVar();
|
|
12
|
+
const linSeg = vec3( color.div( 12.92 ) ).toVar();
|
|
13
|
+
const powSeg = vec3( pow( max( color.add( vec3( 0.055 ) ), vec3( 0.0 ) ).div( 1.055 ), vec3( 2.4 ) ) ).toVar();
|
|
14
|
+
|
|
15
|
+
return mix( linSeg, powSeg, isAbove );
|
|
16
|
+
|
|
17
|
+
} );
|
|
8
18
|
|
|
9
|
-
|
|
10
|
-
{
|
|
11
|
-
bvec3 isAbove = greaterThan(color, vec3(0.04045));
|
|
12
|
-
vec3 linSeg = color / 12.92;
|
|
13
|
-
vec3 powSeg = pow(max(color + vec3(0.055), vec3(0.0)) / 1.055, vec3(2.4));
|
|
14
|
-
return mix(linSeg, powSeg, isAbove);
|
|
15
|
-
}` );
|
|
19
|
+
// layouts
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+
mx_srgb_texture_to_lin_rec709.setLayout( {
|
|
22
|
+
name: 'mx_srgb_texture_to_lin_rec709',
|
|
23
|
+
type: 'vec3',
|
|
24
|
+
inputs: [
|
|
25
|
+
{ name: 'color', type: 'vec3' }
|
|
26
|
+
]
|
|
27
|
+
} );
|
|
18
28
|
|
|
19
|
-
export
|
|
29
|
+
export { mx_srgb_texture_to_lin_rec709 };
|
|
@@ -220,6 +220,7 @@ MathNode.ROUND = 'round';
|
|
|
220
220
|
MathNode.RECIPROCAL = 'reciprocal';
|
|
221
221
|
MathNode.TRUNC = 'trunc';
|
|
222
222
|
MathNode.FWIDTH = 'fwidth';
|
|
223
|
+
MathNode.BITCAST = 'bitcast';
|
|
223
224
|
|
|
224
225
|
// 2 inputs
|
|
225
226
|
|
|
@@ -278,6 +279,7 @@ export const round = nodeProxy( MathNode, MathNode.ROUND );
|
|
|
278
279
|
export const reciprocal = nodeProxy( MathNode, MathNode.RECIPROCAL );
|
|
279
280
|
export const trunc = nodeProxy( MathNode, MathNode.TRUNC );
|
|
280
281
|
export const fwidth = nodeProxy( MathNode, MathNode.FWIDTH );
|
|
282
|
+
export const bitcast = nodeProxy( MathNode, MathNode.BITCAST );
|
|
281
283
|
|
|
282
284
|
export const atan2 = nodeProxy( MathNode, MathNode.ATAN2 );
|
|
283
285
|
export const min = nodeProxy( MathNode, MathNode.MIN );
|
|
@@ -29,12 +29,6 @@ class OperatorNode extends TempNode {
|
|
|
29
29
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
hasDependencies( builder ) {
|
|
33
|
-
|
|
34
|
-
return this.op !== '=' ? super.hasDependencies( builder ) : false;
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
32
|
getNodeType( builder, output ) {
|
|
39
33
|
|
|
40
34
|
const op = this.op;
|
|
@@ -49,7 +43,7 @@ class OperatorNode extends TempNode {
|
|
|
49
43
|
|
|
50
44
|
return 'void';
|
|
51
45
|
|
|
52
|
-
} else if ( op === '
|
|
46
|
+
} else if ( op === '%' ) {
|
|
53
47
|
|
|
54
48
|
return typeA;
|
|
55
49
|
|
|
@@ -116,11 +110,7 @@ class OperatorNode extends TempNode {
|
|
|
116
110
|
typeA = aNode.getNodeType( builder );
|
|
117
111
|
typeB = bNode.getNodeType( builder );
|
|
118
112
|
|
|
119
|
-
if ( op === '
|
|
120
|
-
|
|
121
|
-
typeB = typeA;
|
|
122
|
-
|
|
123
|
-
} else if ( op === '<' || op === '>' || op === '<=' || op === '>=' || op === '==' ) {
|
|
113
|
+
if ( op === '<' || op === '>' || op === '<=' || op === '>=' || op === '==' ) {
|
|
124
114
|
|
|
125
115
|
if ( builder.isVector( typeA ) ) {
|
|
126
116
|
|
|
@@ -167,40 +157,47 @@ class OperatorNode extends TempNode {
|
|
|
167
157
|
const b = bNode.build( builder, typeB );
|
|
168
158
|
|
|
169
159
|
const outputLength = builder.getTypeLength( output );
|
|
160
|
+
const fnOpSnippet = builder.getFunctionOperator( op );
|
|
170
161
|
|
|
171
162
|
if ( output !== 'void' ) {
|
|
172
163
|
|
|
173
|
-
if ( op === '
|
|
174
|
-
|
|
175
|
-
builder.addLineFlowCode( `${a} ${this.op} ${b}` );
|
|
176
|
-
|
|
177
|
-
return a;
|
|
178
|
-
|
|
179
|
-
} else if ( op === '<' && outputLength > 1 ) {
|
|
164
|
+
if ( op === '<' && outputLength > 1 ) {
|
|
180
165
|
|
|
181
|
-
return builder.format( `${ builder.getMethod( 'lessThan' ) }( ${a}, ${b} )`, type, output );
|
|
166
|
+
return builder.format( `${ builder.getMethod( 'lessThan' ) }( ${ a }, ${ b } )`, type, output );
|
|
182
167
|
|
|
183
168
|
} else if ( op === '<=' && outputLength > 1 ) {
|
|
184
169
|
|
|
185
|
-
return builder.format( `${ builder.getMethod( 'lessThanEqual' ) }( ${a}, ${b} )`, type, output );
|
|
170
|
+
return builder.format( `${ builder.getMethod( 'lessThanEqual' ) }( ${ a }, ${ b } )`, type, output );
|
|
186
171
|
|
|
187
172
|
} else if ( op === '>' && outputLength > 1 ) {
|
|
188
173
|
|
|
189
|
-
return builder.format( `${ builder.getMethod( 'greaterThan' ) }( ${a}, ${b} )`, type, output );
|
|
174
|
+
return builder.format( `${ builder.getMethod( 'greaterThan' ) }( ${ a }, ${ b } )`, type, output );
|
|
190
175
|
|
|
191
176
|
} else if ( op === '>=' && outputLength > 1 ) {
|
|
192
177
|
|
|
193
|
-
return builder.format( `${ builder.getMethod( 'greaterThanEqual' ) }( ${a}, ${b} )`, type, output );
|
|
178
|
+
return builder.format( `${ builder.getMethod( 'greaterThanEqual' ) }( ${ a }, ${ b } )`, type, output );
|
|
179
|
+
|
|
180
|
+
} else if ( fnOpSnippet ) {
|
|
181
|
+
|
|
182
|
+
return builder.format( `${ fnOpSnippet }( ${ a }, ${ b } )`, type, output );
|
|
194
183
|
|
|
195
184
|
} else {
|
|
196
185
|
|
|
197
|
-
return builder.format( `( ${a} ${
|
|
186
|
+
return builder.format( `( ${ a } ${ op } ${ b } )`, type, output );
|
|
198
187
|
|
|
199
188
|
}
|
|
200
189
|
|
|
201
190
|
} else if ( typeA !== 'void' ) {
|
|
202
191
|
|
|
203
|
-
|
|
192
|
+
if ( fnOpSnippet ) {
|
|
193
|
+
|
|
194
|
+
return builder.format( `${ fnOpSnippet }( ${ a }, ${ b } )`, type, output );
|
|
195
|
+
|
|
196
|
+
} else {
|
|
197
|
+
|
|
198
|
+
return builder.format( `${ a } ${ op } ${ b }`, type, output );
|
|
199
|
+
|
|
200
|
+
}
|
|
204
201
|
|
|
205
202
|
}
|
|
206
203
|
|
|
@@ -232,7 +229,7 @@ export const mul = nodeProxy( OperatorNode, '*' );
|
|
|
232
229
|
export const div = nodeProxy( OperatorNode, '/' );
|
|
233
230
|
export const remainder = nodeProxy( OperatorNode, '%' );
|
|
234
231
|
export const equal = nodeProxy( OperatorNode, '==' );
|
|
235
|
-
export const
|
|
232
|
+
export const notEqual = nodeProxy( OperatorNode, '!=' );
|
|
236
233
|
export const lessThan = nodeProxy( OperatorNode, '<' );
|
|
237
234
|
export const greaterThan = nodeProxy( OperatorNode, '>' );
|
|
238
235
|
export const lessThanEqual = nodeProxy( OperatorNode, '<=' );
|
|
@@ -252,7 +249,7 @@ addNodeElement( 'mul', mul );
|
|
|
252
249
|
addNodeElement( 'div', div );
|
|
253
250
|
addNodeElement( 'remainder', remainder );
|
|
254
251
|
addNodeElement( 'equal', equal );
|
|
255
|
-
addNodeElement( '
|
|
252
|
+
addNodeElement( 'notEqual', notEqual );
|
|
256
253
|
addNodeElement( 'lessThan', lessThan );
|
|
257
254
|
addNodeElement( 'greaterThan', greaterThan );
|
|
258
255
|
addNodeElement( 'lessThanEqual', lessThanEqual );
|
|
@@ -7,11 +7,21 @@ import SetNode from '../utils/SetNode.js';
|
|
|
7
7
|
import ConstNode from '../core/ConstNode.js';
|
|
8
8
|
import { getValueFromType, getValueType } from '../core/NodeUtils.js';
|
|
9
9
|
|
|
10
|
+
//
|
|
11
|
+
|
|
12
|
+
let currentStack = null;
|
|
13
|
+
|
|
10
14
|
const NodeElements = new Map(); // @TODO: Currently only a few nodes are added, probably also add others
|
|
11
15
|
|
|
12
16
|
export function addNodeElement( name, nodeElement ) {
|
|
13
17
|
|
|
14
|
-
if ( NodeElements.has( name ) )
|
|
18
|
+
if ( NodeElements.has( name ) ) {
|
|
19
|
+
|
|
20
|
+
console.warn( `Redefinition of node element ${ name }` );
|
|
21
|
+
return;
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
15
25
|
if ( typeof nodeElement !== 'function' ) throw new Error( `Node element ${ name } is not a function` );
|
|
16
26
|
|
|
17
27
|
NodeElements.set( name, nodeElement );
|
|
@@ -30,15 +40,25 @@ const shaderNodeHandler = {
|
|
|
30
40
|
|
|
31
41
|
},
|
|
32
42
|
|
|
33
|
-
get
|
|
43
|
+
get( node, prop, nodeObj ) {
|
|
34
44
|
|
|
35
45
|
if ( typeof prop === 'string' && node[ prop ] === undefined ) {
|
|
36
46
|
|
|
37
|
-
if (
|
|
47
|
+
if ( node.isStackNode !== true && prop === 'assign' ) {
|
|
48
|
+
|
|
49
|
+
return ( ...params ) => {
|
|
50
|
+
|
|
51
|
+
currentStack.assign( nodeObj, ...params );
|
|
52
|
+
|
|
53
|
+
return nodeObj;
|
|
54
|
+
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
} else if ( NodeElements.has( prop ) ) {
|
|
38
58
|
|
|
39
59
|
const nodeElement = NodeElements.get( prop );
|
|
40
60
|
|
|
41
|
-
return ( ...params ) => nodeElement( nodeObj, ...params );
|
|
61
|
+
return node.isStackNode ? ( ...params ) => nodeObj.add( nodeElement( ...params ) ) : ( ...params ) => nodeElement( nodeObj, ...params );
|
|
42
62
|
|
|
43
63
|
} else if ( prop === 'self' ) {
|
|
44
64
|
|
|
@@ -48,7 +68,7 @@ const shaderNodeHandler = {
|
|
|
48
68
|
|
|
49
69
|
const nodeElement = NodeElements.get( prop.slice( 0, prop.length - 'Assign'.length ) );
|
|
50
70
|
|
|
51
|
-
return ( ...params ) => nodeObj.assign( nodeElement( nodeObj, ...params ) );
|
|
71
|
+
return node.isStackNode ? ( ...params ) => nodeObj.assign( params[ 0 ], nodeElement( ...params ) ) : ( ...params ) => nodeObj.assign( nodeElement( nodeObj, ...params ) );
|
|
52
72
|
|
|
53
73
|
} else if ( /^[xyzwrgbastpq]{1,4}$/.test( prop ) === true ) {
|
|
54
74
|
|
|
@@ -56,7 +76,7 @@ const shaderNodeHandler = {
|
|
|
56
76
|
|
|
57
77
|
prop = parseSwizzle( prop );
|
|
58
78
|
|
|
59
|
-
return nodeObject( new SplitNode(
|
|
79
|
+
return nodeObject( new SplitNode( nodeObj, prop ) );
|
|
60
80
|
|
|
61
81
|
} else if ( /^set[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
|
|
62
82
|
|
|
@@ -84,19 +104,40 @@ const shaderNodeHandler = {
|
|
|
84
104
|
|
|
85
105
|
// accessing array
|
|
86
106
|
|
|
87
|
-
return nodeObject( new ArrayElementNode(
|
|
107
|
+
return nodeObject( new ArrayElementNode( nodeObj, new ConstNode( Number( prop ), 'uint' ) ) );
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return Reflect.get( node, prop, nodeObj );
|
|
114
|
+
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
set( node, prop, value, nodeObj ) {
|
|
118
|
+
|
|
119
|
+
if ( typeof prop === 'string' && node[ prop ] === undefined ) {
|
|
120
|
+
|
|
121
|
+
// setting properties
|
|
122
|
+
|
|
123
|
+
if ( /^[xyzwrgbastpq]{1,4}$/.test( prop ) === true || prop === 'width' || prop === 'height' || prop === 'depth' || /^\d+$/.test( prop ) === true ) {
|
|
124
|
+
|
|
125
|
+
nodeObj[ prop ].assign( value );
|
|
126
|
+
|
|
127
|
+
return true;
|
|
88
128
|
|
|
89
129
|
}
|
|
90
130
|
|
|
91
131
|
}
|
|
92
132
|
|
|
93
|
-
return node
|
|
133
|
+
return Reflect.set( node, prop, value, nodeObj );
|
|
94
134
|
|
|
95
135
|
}
|
|
96
136
|
|
|
97
137
|
};
|
|
98
138
|
|
|
99
139
|
const nodeObjectsCacheMap = new WeakMap();
|
|
140
|
+
const nodeBuilderFunctionsCacheMap = new WeakMap();
|
|
100
141
|
|
|
101
142
|
const ShaderNodeObject = function ( obj, altType = null ) {
|
|
102
143
|
|
|
@@ -109,6 +150,7 @@ const ShaderNodeObject = function ( obj, altType = null ) {
|
|
|
109
150
|
if ( nodeObject === undefined ) {
|
|
110
151
|
|
|
111
152
|
nodeObject = new Proxy( obj, shaderNodeHandler );
|
|
153
|
+
|
|
112
154
|
nodeObjectsCacheMap.set( obj, nodeObject );
|
|
113
155
|
nodeObjectsCacheMap.set( nodeObject, nodeObject );
|
|
114
156
|
|
|
@@ -219,8 +261,40 @@ class ShaderCallNodeInternal extends Node {
|
|
|
219
261
|
|
|
220
262
|
const { shaderNode, inputNodes } = this;
|
|
221
263
|
|
|
264
|
+
if ( shaderNode.layout ) {
|
|
265
|
+
|
|
266
|
+
let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( builder.constructor );
|
|
267
|
+
|
|
268
|
+
if ( functionNodesCacheMap === undefined ) {
|
|
269
|
+
|
|
270
|
+
functionNodesCacheMap = new WeakMap();
|
|
271
|
+
|
|
272
|
+
nodeBuilderFunctionsCacheMap.set( builder.constructor, functionNodesCacheMap );
|
|
273
|
+
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
let functionNode = functionNodesCacheMap.get( shaderNode );
|
|
277
|
+
|
|
278
|
+
if ( functionNode === undefined ) {
|
|
279
|
+
|
|
280
|
+
functionNode = nodeObject( builder.buildFunctionNode( shaderNode ) );
|
|
281
|
+
|
|
282
|
+
functionNodesCacheMap.set( shaderNode, functionNode );
|
|
283
|
+
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if ( builder.currentFunctionNode !== null ) {
|
|
287
|
+
|
|
288
|
+
builder.currentFunctionNode.includes.push( functionNode );
|
|
289
|
+
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return nodeObject( functionNode.call( inputNodes ) );
|
|
293
|
+
|
|
294
|
+
}
|
|
295
|
+
|
|
222
296
|
const jsFunc = shaderNode.jsFunc;
|
|
223
|
-
const outputNode = inputNodes !== null ? jsFunc(
|
|
297
|
+
const outputNode = inputNodes !== null ? jsFunc( inputNodes, builder.stack, builder ) : jsFunc( builder.stack, builder );
|
|
224
298
|
|
|
225
299
|
return nodeObject( outputNode );
|
|
226
300
|
|
|
@@ -261,11 +335,28 @@ class ShaderNodeInternal extends Node {
|
|
|
261
335
|
super();
|
|
262
336
|
|
|
263
337
|
this.jsFunc = jsFunc;
|
|
338
|
+
this.layout = null;
|
|
339
|
+
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
get isArrayInput() {
|
|
343
|
+
|
|
344
|
+
return /^\(\s+?\[/.test( this.jsFunc.toString() );
|
|
345
|
+
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
setLayout( layout ) {
|
|
349
|
+
|
|
350
|
+
this.layout = layout;
|
|
351
|
+
|
|
352
|
+
return this;
|
|
264
353
|
|
|
265
354
|
}
|
|
266
355
|
|
|
267
356
|
call( inputs = null ) {
|
|
268
357
|
|
|
358
|
+
nodeObjects( inputs );
|
|
359
|
+
|
|
269
360
|
return nodeObject( new ShaderCallNodeInternal( this, inputs ) );
|
|
270
361
|
|
|
271
362
|
}
|
|
@@ -395,12 +486,69 @@ export const tslFn = ( jsFunc ) => {
|
|
|
395
486
|
|
|
396
487
|
const shaderNode = new ShaderNode( jsFunc );
|
|
397
488
|
|
|
398
|
-
|
|
489
|
+
const fn = ( ...params ) => {
|
|
490
|
+
|
|
491
|
+
let inputs;
|
|
492
|
+
|
|
493
|
+
nodeObjects( params );
|
|
494
|
+
|
|
495
|
+
if ( params[ 0 ] && params[ 0 ].isNode ) {
|
|
496
|
+
|
|
497
|
+
inputs = [ ...params ];
|
|
498
|
+
|
|
499
|
+
} else {
|
|
500
|
+
|
|
501
|
+
inputs = params[ 0 ];
|
|
502
|
+
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
return shaderNode.call( inputs );
|
|
506
|
+
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
fn.shaderNode = shaderNode;
|
|
510
|
+
fn.setLayout = ( layout ) => {
|
|
511
|
+
|
|
512
|
+
shaderNode.setLayout( layout );
|
|
513
|
+
|
|
514
|
+
return fn;
|
|
515
|
+
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
return fn;
|
|
399
519
|
|
|
400
520
|
};
|
|
401
521
|
|
|
402
522
|
addNodeClass( 'ShaderNode', ShaderNode );
|
|
403
523
|
|
|
524
|
+
//
|
|
525
|
+
|
|
526
|
+
export const setCurrentStack = ( stack ) => {
|
|
527
|
+
|
|
528
|
+
if ( currentStack === stack ) {
|
|
529
|
+
|
|
530
|
+
//throw new Error( 'Stack already defined.' );
|
|
531
|
+
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
currentStack = stack;
|
|
535
|
+
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
export const getCurrentStack = () => currentStack;
|
|
539
|
+
|
|
540
|
+
export const If = ( ...params ) => currentStack.if( ...params );
|
|
541
|
+
|
|
542
|
+
export function append( node ) {
|
|
543
|
+
|
|
544
|
+
if ( currentStack ) currentStack.add( node );
|
|
545
|
+
|
|
546
|
+
return node;
|
|
547
|
+
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
addNodeElement( 'append', append );
|
|
551
|
+
|
|
404
552
|
// types
|
|
405
553
|
// @TODO: Maybe export from ConstNode.js?
|
|
406
554
|
|
|
@@ -19,8 +19,9 @@ class DiscardNode extends CondNode {
|
|
|
19
19
|
|
|
20
20
|
export default DiscardNode;
|
|
21
21
|
|
|
22
|
-
export const
|
|
22
|
+
export const inlineDiscard = nodeProxy( DiscardNode );
|
|
23
|
+
export const discard = ( condNode ) => inlineDiscard( condNode ).append();
|
|
23
24
|
|
|
24
|
-
addNodeElement( 'discard', discard );
|
|
25
|
+
addNodeElement( 'discard', discard ); // @TODO: Check... this cause a little confusing using in chaining
|
|
25
26
|
|
|
26
27
|
addNodeClass( 'DiscardNode', DiscardNode );
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import Node, { addNodeClass } from '../core/Node.js';
|
|
2
|
+
import { nodeProxy } from '../shadernode/ShaderNode.js';
|
|
3
|
+
|
|
4
|
+
class FunctionOverloadingNode extends Node {
|
|
5
|
+
|
|
6
|
+
constructor( functionNodes = [], ...parametersNodes ) {
|
|
7
|
+
|
|
8
|
+
super();
|
|
9
|
+
|
|
10
|
+
this.functionNodes = functionNodes;
|
|
11
|
+
this.parametersNodes = parametersNodes;
|
|
12
|
+
|
|
13
|
+
this._candidateFnCall = null;
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getNodeType() {
|
|
18
|
+
|
|
19
|
+
return this.functionNodes[ 0 ].shaderNode.layout.type;
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
setup( builder ) {
|
|
24
|
+
|
|
25
|
+
const params = this.parametersNodes;
|
|
26
|
+
|
|
27
|
+
let candidateFnCall = this._candidateFnCall;
|
|
28
|
+
|
|
29
|
+
if ( candidateFnCall === null ) {
|
|
30
|
+
|
|
31
|
+
let candidateFn = null;
|
|
32
|
+
let candidateScore = - 1;
|
|
33
|
+
|
|
34
|
+
for ( const functionNode of this.functionNodes ) {
|
|
35
|
+
|
|
36
|
+
const shaderNode = functionNode.shaderNode;
|
|
37
|
+
const layout = shaderNode.layout;
|
|
38
|
+
|
|
39
|
+
if ( layout === null ) {
|
|
40
|
+
|
|
41
|
+
throw new Error( 'FunctionOverloadingNode: FunctionNode must be a layout.' );
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const inputs = layout.inputs;
|
|
46
|
+
|
|
47
|
+
if ( params.length === inputs.length ) {
|
|
48
|
+
|
|
49
|
+
let score = 0;
|
|
50
|
+
|
|
51
|
+
for ( let i = 0; i < params.length; i ++ ) {
|
|
52
|
+
|
|
53
|
+
const param = params[ i ];
|
|
54
|
+
const input = inputs[ i ];
|
|
55
|
+
|
|
56
|
+
if ( param.getNodeType( builder ) === input.type ) {
|
|
57
|
+
|
|
58
|
+
score ++;
|
|
59
|
+
|
|
60
|
+
} else {
|
|
61
|
+
|
|
62
|
+
score = 0;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if ( score > candidateScore ) {
|
|
69
|
+
|
|
70
|
+
candidateFn = functionNode;
|
|
71
|
+
candidateScore = score;
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
this._candidateFnCall = candidateFnCall = candidateFn( ...params );
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return candidateFnCall;
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export default FunctionOverloadingNode;
|
|
90
|
+
|
|
91
|
+
const overloadingBaseFn = nodeProxy( FunctionOverloadingNode );
|
|
92
|
+
|
|
93
|
+
export const overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );
|
|
94
|
+
|
|
95
|
+
addNodeClass( 'FunctionOverloadingNode', FunctionOverloadingNode );
|
|
@@ -28,11 +28,21 @@ class JoinNode extends TempNode {
|
|
|
28
28
|
const type = this.getNodeType( builder );
|
|
29
29
|
const nodes = this.nodes;
|
|
30
30
|
|
|
31
|
+
const primitiveType = builder.getPrimitiveType( type );
|
|
32
|
+
|
|
31
33
|
const snippetValues = [];
|
|
32
34
|
|
|
33
35
|
for ( const input of nodes ) {
|
|
34
36
|
|
|
35
|
-
|
|
37
|
+
let inputSnippet = input.build( builder );
|
|
38
|
+
|
|
39
|
+
const inputPrimitiveType = builder.getPrimitiveType( input.getNodeType( builder ) );
|
|
40
|
+
|
|
41
|
+
if ( inputPrimitiveType !== primitiveType ) {
|
|
42
|
+
|
|
43
|
+
inputSnippet = builder.format( inputSnippet, inputPrimitiveType, primitiveType );
|
|
44
|
+
|
|
45
|
+
}
|
|
36
46
|
|
|
37
47
|
snippetValues.push( inputSnippet );
|
|
38
48
|
|