{"version":3,"file":"Gamma.mjs","sources":["../../../src/filters/Gamma.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nexport type GammaInput = [number, number, number];\n\nexport const gammaDefaultValues: Partial<TClassProperties<Gamma>> = {\n  mainParameter: 'gamma',\n  gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n *   gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter {\n  /**\n   * Gamma array value, from 0.01 to 2.2.\n   * @param {Array} gamma\n   * @default\n   */\n  declare gamma: GammaInput;\n  declare rgbValues?: {\n    r: Uint8Array;\n    g: Uint8Array;\n    b: Uint8Array;\n  };\n\n  static type = 'Gamma';\n\n  static defaults = gammaDefaultValues;\n\n  getFragmentSource() {\n    return fragmentSource;\n  }\n\n  constructor({ gamma = [1, 1, 1], ...options }: { gamma?: GammaInput } = {}) {\n    super(options);\n    this.gamma = gamma;\n  }\n\n  /**\n   * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n   *\n   * @param {Object} options\n   * @param {ImageData} options.imageData The Uint8Array to be filtered.\n   */\n  applyTo2d({ imageData: { data } }: T2DPipelineState) {\n    const gamma = this.gamma,\n      rInv = 1 / gamma[0],\n      gInv = 1 / gamma[1],\n      bInv = 1 / gamma[2];\n\n    if (!this.rgbValues) {\n      this.rgbValues = {\n        r: new Uint8Array(256),\n        g: new Uint8Array(256),\n        b: new Uint8Array(256),\n      };\n    }\n\n    // This is an optimization - pre-compute a look-up table for each color channel\n    // instead of performing these pow calls for each pixel in the image.\n    const rgb = this.rgbValues;\n    for (let i = 0; i < 256; i++) {\n      rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n      rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n      rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n    }\n    for (let i = 0; i < data.length; i += 4) {\n      data[i] = rgb.r[data[i]];\n      data[i + 1] = rgb.g[data[i + 1]];\n      data[i + 2] = rgb.b[data[i + 2]];\n    }\n  }\n\n  /**\n   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uGamma: gl.getUniformLocation(program, 'uGamma'),\n    };\n  }\n\n  /**\n   * Send data from this filter to its shader program's uniforms.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n   */\n  sendUniformData(\n    gl: WebGLRenderingContext,\n    uniformLocations: TWebGLUniformLocationMap\n  ) {\n    gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n  }\n}\n\nclassRegistry.setClass(Gamma);\n"],"names":["gammaDefaultValues","mainParameter","gamma","Gamma","BaseFilter","getFragmentSource","fragmentSource","constructor","_ref","arguments","length","undefined","options","_objectWithoutProperties","_excluded","applyTo2d","_ref2","imageData","data","rInv","gInv","bInv","rgbValues","r","Uint8Array","g","b","rgb","i","Math","pow","getUniformLocations","gl","program","uGamma","getUniformLocation","sendUniformData","uniformLocations","uniform3fv","_defineProperty","classRegistry","setClass"],"mappings":"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"}