@openhps/core
Version:
Open Hybrid Positioning System - Core component
163 lines (151 loc) • 3.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.wgsl = exports.js = exports.glsl = exports.default = exports.code = void 0;
var _Node = _interopRequireDefault(require("../core/Node.js"));
var _TSLBase = require("../tsl/TSLBase.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* This class represents native code sections. It is the base
* class for modules like {@link FunctionNode} which allows to implement
* functions with native shader languages.
*
* @augments Node
*/
class CodeNode extends _Node.default {
static get type() {
return 'CodeNode';
}
/**
* Constructs a new code node.
*
* @param {string} [code=''] - The native code.
* @param {Array<Node>} [includes=[]] - An array of includes.
* @param {('js'|'wgsl'|'glsl')} [language=''] - The used language.
*/
constructor(code = '', includes = [], language = '') {
super('code');
/**
* This flag can be used for type testing.
*
* @type {boolean}
* @readonly
* @default true
*/
this.isCodeNode = true;
/**
* The native code.
*
* @type {string}
* @default ''
*/
this.code = code;
/**
* An array of includes
*
* @type {Array<Node>}
* @default []
*/
this.includes = includes;
/**
* The used language.
*
* @type {('js'|'wgsl'|'glsl')}
* @default ''
*/
this.language = language;
}
/**
* The method is overwritten so it always returns `true`.
*
* @return {boolean} Whether this node is global or not.
*/
isGlobal() {
return true;
}
/**
* Sets the includes of this code node.
*
* @param {Array<Node>} includes - The includes to set.
* @return {CodeNode} A reference to this node.
*/
setIncludes(includes) {
this.includes = includes;
return this;
}
/**
* Returns the includes of this code node.
*
* @param {NodeBuilder} builder - The current node builder.
* @return {Array<Node>} The includes.
*/
getIncludes( /*builder*/
) {
return this.includes;
}
generate(builder) {
const includes = this.getIncludes(builder);
for (const include of includes) {
include.build(builder);
}
const nodeCode = builder.getCodeFromNode(this, this.getNodeType(builder));
nodeCode.code = this.code;
return nodeCode.code;
}
serialize(data) {
super.serialize(data);
data.code = this.code;
data.language = this.language;
}
deserialize(data) {
super.deserialize(data);
this.code = data.code;
this.language = data.language;
}
}
var _default = exports.default = CodeNode;
/**
* TSL function for creating a code node.
*
* @tsl
* @function
* @param {string} [code] - The native code.
* @param {?Array<Node>} [includes=[]] - An array of includes.
* @param {?('js'|'wgsl'|'glsl')} [language=''] - The used language.
* @returns {CodeNode}
*/
const code = exports.code = /*@__PURE__*/(0, _TSLBase.nodeProxy)(CodeNode).setParameterLength(1, 3);
/**
* TSL function for creating a JS code node.
*
* @tsl
* @function
* @param {string} src - The native code.
* @param {Array<Node>} includes - An array of includes.
* @returns {CodeNode}
*/
const js = (src, includes) => code(src, includes, 'js');
/**
* TSL function for creating a WGSL code node.
*
* @tsl
* @function
* @param {string} src - The native code.
* @param {Array<Node>} includes - An array of includes.
* @returns {CodeNode}
*/
exports.js = js;
const wgsl = (src, includes) => code(src, includes, 'wgsl');
/**
* TSL function for creating a GLSL code node.
*
* @tsl
* @function
* @param {string} src - The native code.
* @param {Array<Node>} includes - An array of includes.
* @returns {CodeNode}
*/
exports.wgsl = wgsl;
const glsl = (src, includes) => code(src, includes, 'glsl');
exports.glsl = glsl;