| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | /** * A utility for dynamically-generating a GLSL struct. * * @alias ShaderStruct * @constructor * * @see {@link ShaderBuilder} * @param {String} name The name of the struct as it will appear in the shader. * @example * // Generate the struct: * // * // struct Attributes * // { * //     vec3 position; * //     vec3 normal; * //     vec2 texCoord; * // }; * const struct = new ShaderStruct("Attributes"); * struct.addField("vec3", "position"); * struct.addField("vec3", "normal"); * struct.addField("vec2", "texCoord"); * const generatedLines = struct.generateGlslLines(); * * @private */export default function ShaderStruct(name) {  this.name = name;  this.fields = [];}/** * Add a field to the struct * @param {String} type The type of the struct field * @param {String} identifier The identifier of the struct field */ShaderStruct.prototype.addField = function (type, identifier) {  const field = `    ${type} ${identifier};`;  this.fields.push(field);};/** * Generate a list of lines of GLSL code for use with {@link ShaderBuilder} * @return {String[]} The generated GLSL code. */ShaderStruct.prototype.generateGlslLines = function () {  let fields = this.fields;  if (fields.length === 0) {    // GLSL requires structs to have at least one field    fields = ["    float _empty;"];  }  return [].concat(`struct ${this.name}`, "{", fields, "};");};
 |