function ShaderSource(options) {
  options = options ?? Frozen.EMPTY_OBJECT;
  const pickColorQualifier = options.pickColorQualifier;

  //>>includeStart('debug', pragmas.debug);
  if (
    defined(pickColorQualifier) &&
    pickColorQualifier !== "uniform" &&
    pickColorQualifier !== "in"
  ) {
    throw new DeveloperError(
      "options.pickColorQualifier must be 'uniform' or 'in'.",
    );
  }
  //>>includeEnd('debug');

  this.defines = defined(options.defines) ? options.defines.slice(0) : [];
  this.sources = defined(options.sources) ? options.sources.slice(0) : [];
  this.pickColorQualifier = pickColorQualifier;
  this.includeBuiltIns = options.includeBuiltIns ?? true;
}
An object containing various inputs that will be combined to form a final GLSL shader string.

@param {object} [options] Object with the following properties:
@param {string[]} [options.sources] An array of strings to combine containing GLSL code for the shader.
@param {string[]} [options.defines] An array of strings containing GLSL identifiers to <code>#define</code>.
@param {string} [options.pickColorQualifier] The GLSL qualifier, <code>uniform</code> or <code>in</code>, for the input <code>czm_pickColor</code>.  When defined, a pick fragment shader is generated.
@param {boolean} [options.includeBuiltIns=true] If true, referenced built-in functions will be included with the combined shader.  Set to false if this shader will become a source in another shader, to avoid duplicating functions.

@exception {DeveloperError} options.pickColorQualifier must be 'uniform' or 'in'.

@example
// 1. Prepend #defines to a shader
const source = new Cesium.ShaderSource({
  defines : ['WHITE'],
  sources : ['void main() { \n#ifdef WHITE\n out_FragColor = vec4(1.0); \n#else\n out_FragColor = vec4(0.0); \n#endif\n }']
});

// 2. Modify a fragment shader for picking
const source2 = new Cesium.ShaderSource({
  sources : ['void main() { out_FragColor = vec4(1.0); }'],
  pickColorQualifier : 'uniform'
});

@private