UNPKG

@pixi/utils

Version:

Collection of utilities used by PixiJS

1 lines 6.8 kB
{"version":3,"file":"premultiply.mjs","sources":["../../src/color/premultiply.ts"],"sourcesContent":["import { BLEND_MODES } from '@pixi/constants';\n\n/**\n * Corrects PixiJS blend, takes premultiplied alpha into account\n * @memberof PIXI.utils\n * @function mapPremultipliedBlendModes\n * @private\n * @returns {Array<number[]>} Mapped modes.\n */\nfunction mapPremultipliedBlendModes(): number[][]\n{\n const pm = [];\n const npm = [];\n\n for (let i = 0; i < 32; i++)\n {\n pm[i] = i;\n npm[i] = i;\n }\n\n pm[BLEND_MODES.NORMAL_NPM] = BLEND_MODES.NORMAL;\n pm[BLEND_MODES.ADD_NPM] = BLEND_MODES.ADD;\n pm[BLEND_MODES.SCREEN_NPM] = BLEND_MODES.SCREEN;\n\n npm[BLEND_MODES.NORMAL] = BLEND_MODES.NORMAL_NPM;\n npm[BLEND_MODES.ADD] = BLEND_MODES.ADD_NPM;\n npm[BLEND_MODES.SCREEN] = BLEND_MODES.SCREEN_NPM;\n\n const array: number[][] = [];\n\n array.push(npm);\n array.push(pm);\n\n return array;\n}\n\n/**\n * maps premultiply flag and blendMode to adjusted blendMode\n * @memberof PIXI.utils\n * @type {Array<number[]>}\n */\nexport const premultiplyBlendMode = mapPremultipliedBlendModes();\n\n/**\n * changes blendMode according to texture format\n * @memberof PIXI.utils\n * @function correctBlendMode\n * @param {number} blendMode - supposed blend mode\n * @param {boolean} premultiplied - whether source is premultiplied\n * @returns {number} true blend mode for this texture\n */\nexport function correctBlendMode(blendMode: number, premultiplied: boolean): number\n{\n return premultiplyBlendMode[premultiplied ? 1 : 0][blendMode];\n}\n\n/**\n * combines rgb and alpha to out array\n * @memberof PIXI.utils\n * @function premultiplyRgba\n * @param {Float32Array|number[]} rgb - input rgb\n * @param {number} alpha - alpha param\n * @param {Float32Array} [out] - output\n * @param {boolean} [premultiply=true] - do premultiply it\n * @returns {Float32Array} vec4 rgba\n */\nexport function premultiplyRgba(\n rgb: Float32Array | number[],\n alpha: number,\n out?: Float32Array,\n premultiply?: boolean\n): Float32Array\n{\n out = out || new Float32Array(4);\n if (premultiply || premultiply === undefined)\n {\n out[0] = rgb[0] * alpha;\n out[1] = rgb[1] * alpha;\n out[2] = rgb[2] * alpha;\n }\n else\n {\n out[0] = rgb[0];\n out[1] = rgb[1];\n out[2] = rgb[2];\n }\n out[3] = alpha;\n\n return out;\n}\n\n/**\n * premultiplies tint\n * @memberof PIXI.utils\n * @function premultiplyTint\n * @param {number} tint - integer RGB\n * @param {number} alpha - floating point alpha (0.0-1.0)\n * @returns {number} tint multiplied by alpha\n */\nexport function premultiplyTint(tint: number, alpha: number): number\n{\n if (alpha === 1.0)\n {\n return (alpha * 255 << 24) + tint;\n }\n if (alpha === 0.0)\n {\n return 0;\n }\n let R = ((tint >> 16) & 0xFF);\n let G = ((tint >> 8) & 0xFF);\n let B = (tint & 0xFF);\n\n R = ((R * alpha) + 0.5) | 0;\n G = ((G * alpha) + 0.5) | 0;\n B = ((B * alpha) + 0.5) | 0;\n\n return (alpha * 255 << 24) + (R << 16) + (G << 8) + B;\n}\n\n/**\n * converts integer tint and float alpha to vec4 form, premultiplies by default\n * @memberof PIXI.utils\n * @function premultiplyTintToRgba\n * @param {number} tint - input tint\n * @param {number} alpha - alpha param\n * @param {Float32Array} [out] - output\n * @param {boolean} [premultiply=true] - do premultiply it\n * @returns {Float32Array} vec4 rgba\n */\nexport function premultiplyTintToRgba(tint: number, alpha: number, out: Float32Array, premultiply?: boolean): Float32Array\n{\n out = out || new Float32Array(4);\n out[0] = ((tint >> 16) & 0xFF) / 255.0;\n out[1] = ((tint >> 8) & 0xFF) / 255.0;\n out[2] = (tint & 0xFF) / 255.0;\n if (premultiply || premultiply === undefined)\n {\n out[0] *= alpha;\n out[1] *= alpha;\n out[2] *= alpha;\n }\n out[3] = alpha;\n\n return out;\n}\n"],"names":[],"mappings":";;AASA,SACA,0BAAA,GAAA;AACI,EAAA,MAAM,KAAK,EAAC,CAAA;AACZ,EAAA,MAAM,MAAM,EAAC,CAAA;AAEb,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,EAAA,EAAI,CACxB,EAAA,EAAA;AACI,IAAA,EAAA,CAAG,CAAK,CAAA,GAAA,CAAA,CAAA;AACR,IAAA,GAAA,CAAI,CAAK,CAAA,GAAA,CAAA,CAAA;AAAA,GACb;AAEA,EAAG,EAAA,CAAA,WAAA,CAAY,cAAc,WAAY,CAAA,MAAA,CAAA;AACzC,EAAG,EAAA,CAAA,WAAA,CAAY,WAAW,WAAY,CAAA,GAAA,CAAA;AACtC,EAAG,EAAA,CAAA,WAAA,CAAY,cAAc,WAAY,CAAA,MAAA,CAAA;AAEzC,EAAI,GAAA,CAAA,WAAA,CAAY,UAAU,WAAY,CAAA,UAAA,CAAA;AACtC,EAAI,GAAA,CAAA,WAAA,CAAY,OAAO,WAAY,CAAA,OAAA,CAAA;AACnC,EAAI,GAAA,CAAA,WAAA,CAAY,UAAU,WAAY,CAAA,UAAA,CAAA;AAEtC,EAAA,MAAM,QAAoB,EAAC,CAAA;AAE3B,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA,CAAA;AAEb,EAAO,OAAA,KAAA,CAAA;AACX,CAAA;AAOO,MAAM,uBAAuB,0BAA2B,GAAA;AAUxD,SAAA,gBAAA,CAA0B,WAAmB,aACpD,EAAA;AACI,EAAO,OAAA,oBAAA,CAAqB,aAAgB,GAAA,CAAA,GAAI,CAAG,CAAA,CAAA,SAAA,CAAA,CAAA;AACvD,CAAA;AAaI,SAAA,eAAA,CAAA,GAAA,EACA,KACA,EAAA,GAAA,EACA,WAEJ,EAAA;AACI,EAAM,GAAA,GAAA,GAAA,IAAO,IAAI,YAAA,CAAa,CAAC,CAAA,CAAA;AAC/B,EAAI,IAAA,WAAA,IAAe,gBAAgB,KACnC,CAAA,EAAA;AACI,IAAI,GAAA,CAAA,CAAA,CAAA,GAAK,IAAI,CAAK,CAAA,GAAA,KAAA,CAAA;AAClB,IAAI,GAAA,CAAA,CAAA,CAAA,GAAK,IAAI,CAAK,CAAA,GAAA,KAAA,CAAA;AAClB,IAAI,GAAA,CAAA,CAAA,CAAA,GAAK,IAAI,CAAK,CAAA,GAAA,KAAA,CAAA;AAAA,GAGtB,MAAA;AACI,IAAA,GAAA,CAAI,KAAK,GAAI,CAAA,CAAA,CAAA,CAAA;AACb,IAAA,GAAA,CAAI,KAAK,GAAI,CAAA,CAAA,CAAA,CAAA;AACb,IAAA,GAAA,CAAI,KAAK,GAAI,CAAA,CAAA,CAAA,CAAA;AAAA,GACjB;AACA,EAAA,GAAA,CAAI,CAAK,CAAA,GAAA,KAAA,CAAA;AAET,EAAO,OAAA,GAAA,CAAA;AACX,CAAA;AAUO,SAAA,eAAA,CAAyB,MAAc,KAC9C,EAAA;AACI,EAAA,IAAI,UAAU,CACd,EAAA;AACI,IAAQ,OAAA,CAAA,KAAA,GAAQ,OAAO,EAAM,IAAA,IAAA,CAAA;AAAA,GACjC;AACA,EAAA,IAAI,UAAU,CACd,EAAA;AACI,IAAO,OAAA,CAAA,CAAA;AAAA,GACX;AACA,EAAI,IAAA,CAAA,GAAM,QAAQ,EAAM,GAAA,GAAA,CAAA;AACxB,EAAI,IAAA,CAAA,GAAM,QAAQ,CAAK,GAAA,GAAA,CAAA;AACvB,EAAA,IAAI,IAAK,IAAO,GAAA,GAAA,CAAA;AAEhB,EAAM,CAAA,GAAA,CAAA,GAAI,QAAS,GAAO,GAAA,CAAA,CAAA;AAC1B,EAAM,CAAA,GAAA,CAAA,GAAI,QAAS,GAAO,GAAA,CAAA,CAAA;AAC1B,EAAM,CAAA,GAAA,CAAA,GAAI,QAAS,GAAO,GAAA,CAAA,CAAA;AAE1B,EAAA,OAAQ,SAAQ,GAAO,IAAA,EAAA,KAAY,CAAA,IAAA,EAAA,CAAA,SAAY,CAAK,CAAA,GAAA,CAAA,CAAA;AACxD,CAAA;AAYsC,SAAA,qBAAA,CAAA,IAAA,EAAc,KAAe,EAAA,GAAA,EAAmB,WACtF,EAAA;AACI,EAAM,GAAA,GAAA,GAAA,IAAO,IAAI,YAAA,CAAa,CAAC,CAAA,CAAA;AAC/B,EAAI,GAAA,CAAA,CAAA,CAAA,GAAO,CAAQ,IAAA,IAAA,EAAA,GAAM,GAAQ,IAAA,GAAA,CAAA;AACjC,EAAI,GAAA,CAAA,CAAA,CAAA,GAAO,CAAQ,IAAA,IAAA,CAAA,GAAK,GAAQ,IAAA,GAAA,CAAA;AAChC,EAAI,GAAA,CAAA,CAAA,CAAA,GAAM,QAAO,GAAQ,IAAA,GAAA,CAAA;AACzB,EAAI,IAAA,WAAA,IAAe,gBAAgB,KACnC,CAAA,EAAA;AACI,IAAA,GAAA,CAAI,CAAM,CAAA,IAAA,KAAA,CAAA;AACV,IAAA,GAAA,CAAI,CAAM,CAAA,IAAA,KAAA,CAAA;AACV,IAAA,GAAA,CAAI,CAAM,CAAA,IAAA,KAAA,CAAA;AAAA,GACd;AACA,EAAA,GAAA,CAAI,CAAK,CAAA,GAAA,KAAA,CAAA;AAET,EAAO,OAAA,GAAA,CAAA;AACX;;;;"}