@openhps/core
Version:
Open Hybrid Positioning System - Core component
129 lines (119 loc) • 3.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.uniformGroup = exports.sharedUniformGroup = exports.renderGroup = exports.objectGroup = exports.frameGroup = exports.default = void 0;
var _Node = _interopRequireDefault(require("./Node.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* This node can be used to group single instances of {@link UniformNode}
* and manage them as a uniform buffer.
*
* In most cases, the predefined nodes `objectGroup`, `renderGroup` and `frameGroup`
* will be used when defining the {@link UniformNode#groupNode} property.
*
* - `objectGroup`: Uniform buffer per object.
* - `renderGroup`: Shared uniform buffer, updated once per render call.
* - `frameGroup`: Shared uniform buffer, updated once per frame.
*
* @augments Node
*/
class UniformGroupNode extends _Node.default {
static get type() {
return 'UniformGroupNode';
}
/**
* Constructs a new uniform group node.
*
* @param {string} name - The name of the uniform group node.
* @param {boolean} [shared=false] - Whether this uniform group node is shared or not.
* @param {number} [order=1] - Influences the internal sorting.
*/
constructor(name, shared = false, order = 1) {
super('string');
/**
* The name of the uniform group node.
*
* @type {string}
*/
this.name = name;
/**
* Whether this uniform group node is shared or not.
*
* @type {boolean}
* @default false
*/
this.shared = shared;
/**
* Influences the internal sorting.
* TODO: Add details when this property should be changed.
*
* @type {number}
* @default 1
*/
this.order = order;
/**
* This flag can be used for type testing.
*
* @type {boolean}
* @readonly
* @default true
*/
this.isUniformGroup = true;
}
serialize(data) {
super.serialize(data);
data.name = this.name;
data.version = this.version;
data.shared = this.shared;
}
deserialize(data) {
super.deserialize(data);
this.name = data.name;
this.version = data.version;
this.shared = data.shared;
}
}
var _default = exports.default = UniformGroupNode;
/**
* TSL function for creating a uniform group node with the given name.
*
* @tsl
* @function
* @param {string} name - The name of the uniform group node.
* @returns {UniformGroupNode}
*/
const uniformGroup = name => new UniformGroupNode(name);
/**
* TSL function for creating a shared uniform group node with the given name and order.
*
* @tsl
* @function
* @param {string} name - The name of the uniform group node.
* @param {number} [order=0] - Influences the internal sorting.
* @returns {UniformGroupNode}
*/
exports.uniformGroup = uniformGroup;
const sharedUniformGroup = (name, order = 0) => new UniformGroupNode(name, true, order);
/**
* TSL object that represents a shared uniform group node which is updated once per frame.
*
* @tsl
* @type {UniformGroupNode}
*/
exports.sharedUniformGroup = sharedUniformGroup;
const frameGroup = exports.frameGroup = /*@__PURE__*/sharedUniformGroup('frame');
/**
* TSL object that represents a shared uniform group node which is updated once per render.
*
* @tsl
* @type {UniformGroupNode}
*/
const renderGroup = exports.renderGroup = /*@__PURE__*/sharedUniformGroup('render');
/**
* TSL object that represents a uniform group node which is updated once per object.
*
* @tsl
* @type {UniformGroupNode}
*/
const objectGroup = exports.objectGroup = /*@__PURE__*/uniformGroup('object');