@openhps/core
Version:
Open Hybrid Positioning System - Core component
156 lines (142 loc) • 3.92 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.UniformsGroup = void 0;
var _EventDispatcher = require("./EventDispatcher.js");
var _constants = require("../constants.js");
let _id = 0;
/**
* A class for managing multiple uniforms in a single group. The renderer will process
* such a definition as a single UBO.
*
* Since this class can only be used in context of {@link ShaderMaterial}, it is only supported
* in {@link WebGLRenderer}.
*
* @augments EventDispatcher
*/
class UniformsGroup extends _EventDispatcher.EventDispatcher {
/**
* Constructs a new uniforms group.
*/
constructor() {
super();
/**
* This flag can be used for type testing.
*
* @type {boolean}
* @readonly
* @default true
*/
this.isUniformsGroup = true;
/**
* The ID of the 3D object.
*
* @name UniformsGroup#id
* @type {number}
* @readonly
*/
Object.defineProperty(this, 'id', {
value: _id++
});
/**
* The name of the uniforms group.
*
* @type {string}
*/
this.name = '';
/**
* The buffer usage.
*
* @type {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)}
* @default StaticDrawUsage
*/
this.usage = _constants.StaticDrawUsage;
/**
* An array holding the uniforms.
*
* @type {Array<Uniform>}
*/
this.uniforms = [];
}
/**
* Adds the given uniform to this uniforms group.
*
* @param {Uniform} uniform - The uniform to add.
* @return {UniformsGroup} A reference to this uniforms group.
*/
add(uniform) {
this.uniforms.push(uniform);
return this;
}
/**
* Removes the given uniform from this uniforms group.
*
* @param {Uniform} uniform - The uniform to remove.
* @return {UniformsGroup} A reference to this uniforms group.
*/
remove(uniform) {
const index = this.uniforms.indexOf(uniform);
if (index !== -1) this.uniforms.splice(index, 1);
return this;
}
/**
* Sets the name of this uniforms group.
*
* @param {string} name - The name to set.
* @return {UniformsGroup} A reference to this uniforms group.
*/
setName(name) {
this.name = name;
return this;
}
/**
* Sets the usage of this uniforms group.
*
* @param {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)} value - The usage to set.
* @return {UniformsGroup} A reference to this uniforms group.
*/
setUsage(value) {
this.usage = value;
return this;
}
/**
* Frees the GPU-related resources allocated by this instance. Call this
* method whenever this instance is no longer used in your app.
*
* @fires Texture#dispose
*/
dispose() {
this.dispatchEvent({
type: 'dispose'
});
}
/**
* Copies the values of the given uniforms group to this instance.
*
* @param {UniformsGroup} source - The uniforms group to copy.
* @return {UniformsGroup} A reference to this uniforms group.
*/
copy(source) {
this.name = source.name;
this.usage = source.usage;
const uniformsSource = source.uniforms;
this.uniforms.length = 0;
for (let i = 0, l = uniformsSource.length; i < l; i++) {
const uniforms = Array.isArray(uniformsSource[i]) ? uniformsSource[i] : [uniformsSource[i]];
for (let j = 0; j < uniforms.length; j++) {
this.uniforms.push(uniforms[j].clone());
}
}
return this;
}
/**
* Returns a new uniforms group with copied values from this instance.
*
* @return {UniformsGroup} A clone of this instance.
*/
clone() {
return new this.constructor().copy(this);
}
}
exports.UniformsGroup = UniformsGroup;