text: import defaultValue from "../Core/defaultValue.js";
  import Pass from "./Pass.js";
  
  /**
   * Represents a command to the renderer for GPU Compute (using old-school GPGPU).
   *
   * @private
   * @constructor
   */
  function ComputeCommand(options) {
    options = defaultValue(options, defaultValue.EMPTY_OBJECT);
  
    /**
     * The vertex array. If none is provided, a viewport quad will be used.
     *
     * @type {VertexArray}
     * @default undefined
     */
    this.vertexArray = options.vertexArray;
  
    /**
     * The fragment shader source. The default vertex shader is ViewportQuadVS.
     *
     * @type {ShaderSource}
     * @default undefined
     */
    this.fragmentShaderSource = options.fragmentShaderSource;
  
    /**
     * The shader program to apply.
     *
     * @type {ShaderProgram}
     * @default undefined
     */
    this.shaderProgram = options.shaderProgram;
  
    /**
     * An object with functions whose names match the uniforms in the shader program
     * and return values to set those uniforms.
     *
     * @type {Object}
     * @default undefined
     */
    this.uniformMap = options.uniformMap;
  
    /**
     * Texture to use for offscreen rendering.
     *
     * @type {Texture}
     * @default undefined
     */
    this.outputTexture = options.outputTexture;
  
    /**
     * Function that is called immediately before the ComputeCommand is executed. Used to
     * update any renderer resources. Takes the ComputeCommand as its single argument.
     *
     * @type {Function}
     * @default undefined
     */
    this.preExecute = options.preExecute;
  
    /**
     * Function that is called after the ComputeCommand is executed. Takes the output
     * texture as its single argument.
     *
     * @type {Function}
     * @default undefined
     */
    this.postExecute = options.postExecute;
  
    /**
     * Function that is called when the command is canceled
     *
     * @type {Function}
     * @default undefined
     */
    this.canceled = options.canceled;
  
    /**
     * Whether the renderer resources will persist beyond this call. If not, they
     * will be destroyed after completion.
     *
     * @type {Boolean}
     * @default false
     */
    this.persists = defaultValue(options.persists, false);
  
    /**
     * The pass when to render. Always compute pass.
     *
     * @type {Pass}
     * @default Pass.COMPUTE;
     */
    this.pass = Pass.COMPUTE;
  
    /**
     * The object who created this command.  This is useful for debugging command
     * execution; it allows us to see who created a command when we only have a
     * reference to the command, and can be used to selectively execute commands
     * with {@link Scene#debugCommandFilter}.
     *
     * @type {Object}
     * @default undefined
     *
     * @see Scene#debugCommandFilter
     */
    this.owner = options.owner;
  }
  
  /**
   * Executes the compute command.
   *
   * @param {ComputeEngine} computeEngine The context that processes the compute command.
   */
  ComputeCommand.prototype.execute = function (computeEngine) {
    computeEngine.execute(this);
  };
  export default ComputeCommand;
  