From 9bdc2bc491510353bf2189d1e7299a491cfb6e63 Mon Sep 17 00:00:00 2001 From: sunag Date: Fri, 24 Jul 2026 15:01:41 -0300 Subject: [PATCH] fix struct --- src/nodes/core/NodeUtils.js | 6 ++++++ src/nodes/core/StructNode.js | 7 ++++--- src/nodes/tsl/TSLCore.js | 8 +------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/nodes/core/NodeUtils.js b/src/nodes/core/NodeUtils.js index 0b4c3495f8e0b1..09e4d54278af79 100644 --- a/src/nodes/core/NodeUtils.js +++ b/src/nodes/core/NodeUtils.js @@ -488,3 +488,9 @@ export function base64ToArrayBuffer( base64 ) { return Uint8Array.from( atob( base64 ), c => c.charCodeAt( 0 ) ).buffer; } + +export function isArrayAsParameter( params ) { + + return ( params[ 0 ] !== undefined && params[ 0 ] !== null ) && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype ); + +} diff --git a/src/nodes/core/StructNode.js b/src/nodes/core/StructNode.js index 45653cbffc8e61..ef09da1bc87500 100644 --- a/src/nodes/core/StructNode.js +++ b/src/nodes/core/StructNode.js @@ -1,6 +1,7 @@ import Node from './Node.js'; import StructTypeNode from './StructTypeNode.js'; -import { nodeProxyConstructor } from '../tsl/TSLCore.js'; +import { nodeObject, nodeProxyConstructor } from '../tsl/TSLCore.js'; +import { isArrayAsParameter } from './NodeUtils.js'; /** * StructNode allows to create custom structures with multiple members. @@ -103,7 +104,7 @@ export const struct = ( membersLayout, name = null ) => { if ( params.length > 0 ) { - if ( params[ 0 ].isNode ) { + if ( isArrayAsParameter( params ) ) { values = {}; @@ -111,7 +112,7 @@ export const struct = ( membersLayout, name = null ) => { for ( let i = 0; i < params.length; i ++ ) { - values[ names[ i ] ] = params[ i ]; + values[ names[ i ] ] = nodeObject( params[ i ] ); } diff --git a/src/nodes/tsl/TSLCore.js b/src/nodes/tsl/TSLCore.js index e2185a06546c85..a798df175d3c12 100644 --- a/src/nodes/tsl/TSLCore.js +++ b/src/nodes/tsl/TSLCore.js @@ -8,7 +8,7 @@ import FlipNode from '../utils/FlipNode.js'; import ConstNode from '../core/ConstNode.js'; import MemberNode from '../utils/MemberNode.js'; import StackTrace from '../core/StackTrace.js'; -import { getValueFromType, getValueType } from '../core/NodeUtils.js'; +import { getValueFromType, getValueType, isArrayAsParameter } from '../core/NodeUtils.js'; import { warn, error } from '../../utils.js'; let currentStack = null; @@ -703,12 +703,6 @@ class ShaderCallNodeInternal extends Node { } -function isArrayAsParameter( params ) { - - return params[ 0 ] && ( params[ 0 ].isNode || Object.getPrototypeOf( params[ 0 ] ) !== Object.prototype ); - -} - function getLayoutParameters( params ) { let output;