UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

84 lines (80 loc) 2.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.outputStruct = exports.default = void 0; var _Node = _interopRequireDefault(require("./Node.js")); var _TSLBase = require("../tsl/TSLBase.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * This node can be used to define multiple outputs in a shader programs. * * @augments Node */ class OutputStructNode extends _Node.default { static get type() { return 'OutputStructNode'; } /** * Constructs a new output struct node. The constructor can be invoked with an * arbitrary number of nodes representing the members. * * @param {...Node} members - A parameter list of nodes. */ constructor(...members) { super(); /** * An array of nodes which defines the output. * * @type {Array<Node>} */ this.members = members; /** * This flag can be used for type testing. * * @type {boolean} * @readonly * @default true */ this.isOutputStructNode = true; } getNodeType(builder) { const properties = builder.getNodeProperties(this); if (properties.membersLayout === undefined) { const members = this.members; const membersLayout = []; for (let i = 0; i < members.length; i++) { const name = 'm' + i; const type = members[i].getNodeType(builder); membersLayout.push({ name, type, index: i }); } properties.membersLayout = membersLayout; properties.structType = builder.getOutputStructTypeFromNode(this, properties.membersLayout); } return properties.structType.name; } generate(builder) { const propertyName = builder.getOutputStructName(); const members = this.members; const structPrefix = propertyName !== '' ? propertyName + '.' : ''; for (let i = 0; i < members.length; i++) { const snippet = members[i].build(builder); builder.addLineFlowCode(`${structPrefix}m${i} = ${snippet}`, this); } return propertyName; } } var _default = exports.default = OutputStructNode; /** * TSL function for creating an output struct node. * * @tsl * @function * @param {...Node} members - A parameter list of nodes. * @returns {OutputStructNode} */ const outputStruct = exports.outputStruct = /*@__PURE__*/(0, _TSLBase.nodeProxy)(OutputStructNode);