pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
77 lines (74 loc) • 2.97 kB
JavaScript
import { uid } from '../../../../utils/data/uid.mjs';
import { createIdFromString } from '../utils/createIdFromString.mjs';
import { UNIFORM_TYPES_MAP, UNIFORM_TYPES_VALUES } from './types.mjs';
import { getDefaultUniformValue } from './utils/getDefaultUniformValue.mjs';
;
const _UniformGroup = class _UniformGroup {
/**
* Create a new Uniform group
* @param uniformStructures - The structures of the uniform group
* @param options - The optional parameters of this uniform group
*/
constructor(uniformStructures, options) {
/**
* used internally to know if a uniform group was used in the last render pass
* @internal
*/
this._touched = 0;
/** a unique id for this uniform group used through the renderer */
this.uid = uid("uniform");
/**
* a resource type, used to identify how to handle it when its in a bind group / shader resource
* @internal
*/
this._resourceType = "uniformGroup";
/**
* the resource id used internally by the renderer to build bind group keys
* @internal
*/
this._resourceId = uid("resource");
/** used ito identify if this is a uniform group */
this.isUniformGroup = true;
/**
* used to flag if this Uniform groups data is different from what it has stored in its buffer / on the GPU
* @internal
*/
this._dirtyId = 0;
// implementing the interface - UniformGroup are not destroyed
this.destroyed = false;
options = { ..._UniformGroup.defaultOptions, ...options };
this.uniformStructures = uniformStructures;
const uniforms = {};
for (const i in uniformStructures) {
const uniformData = uniformStructures[i];
uniformData.name = i;
uniformData.size = uniformData.size ?? 1;
if (!UNIFORM_TYPES_MAP[uniformData.type]) {
throw new Error(`Uniform type ${uniformData.type} is not supported. Supported uniform types are: ${UNIFORM_TYPES_VALUES.join(", ")}`);
}
uniformData.value ?? (uniformData.value = getDefaultUniformValue(uniformData.type, uniformData.size));
uniforms[i] = uniformData.value;
}
this.uniforms = uniforms;
this._dirtyId = 1;
this.ubo = options.ubo;
this.isStatic = options.isStatic;
this._signature = createIdFromString(Object.keys(uniforms).map(
(i) => `${i}-${uniformStructures[i].type}`
).join("-"), "uniform-group");
}
/** Call this if you want the uniform groups data to be uploaded to the GPU only useful if `isStatic` is true. */
update() {
this._dirtyId++;
}
};
/** The default options used by the uniform group. */
_UniformGroup.defaultOptions = {
/** if true the UniformGroup is handled as an Uniform buffer object. */
ubo: false,
/** if true, then you are responsible for when the data is uploaded to the GPU by calling `update()` */
isStatic: false
};
let UniformGroup = _UniformGroup;
export { UniformGroup };
//# sourceMappingURL=UniformGroup.mjs.map