pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 7.78 kB
Source Map (JSON)
{"version":3,"file":"BlurFilterPass.mjs","sources":["../../../../src/filters/defaults/blur/BlurFilterPass.ts"],"sourcesContent":["import { TexturePool } from '../../../rendering/renderers/shared/texture/TexturePool';\nimport { RendererType } from '../../../rendering/renderers/types';\nimport { Filter } from '../../Filter';\nimport { generateBlurGlProgram } from './gl/generateBlurGlProgram';\nimport { generateBlurProgram } from './gpu/generateBlurProgram';\n\nimport type { RenderSurface } from '../../../rendering/renderers/shared/renderTarget/RenderTargetSystem';\nimport type { Texture } from '../../../rendering/renderers/shared/texture/Texture';\nimport type { FilterSystem } from '../../FilterSystem';\nimport type { BlurFilterOptions } from './BlurFilter';\n\n/**\n * Options for BlurFilterPass\n * @category filters\n * @internal\n */\nexport interface BlurFilterPassOptions extends BlurFilterOptions\n{\n /** Do pass along the x-axis (`true`) or y-axis (`false`). */\n horizontal: boolean;\n}\n\n/**\n * The BlurFilterPass applies a horizontal or vertical Gaussian blur to an object.\n * @category filters\n * @advanced\n * @example\n * import { BlurFilterPass } from 'pixi.js';\n *\n * const filter = new BlurFilterPass({ horizontal: true, strength: 8 });\n * sprite.filters = filter;\n *\n * // update blur\n * filter.blur = 16;\n */\nexport class BlurFilterPass extends Filter\n{\n /** Default blur filter pass options */\n public static defaultOptions: Partial<BlurFilterPassOptions> = {\n /** The strength of the blur filter. */\n strength: 8,\n /** The quality of the blur filter. */\n quality: 4,\n /** The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15. */\n kernelSize: 5,\n };\n\n /** Do pass along the x-axis (`true`) or y-axis (`false`). */\n public horizontal: boolean;\n /** The number of passes to run the filter. */\n public passes!: number;\n /** The strength of the blur filter. */\n public strength!: number;\n\n private _quality: number;\n private readonly _uniforms: any;\n\n /**\n * @param options\n * @param options.horizontal - Do pass along the x-axis (`true`) or y-axis (`false`).\n * @param options.strength - The strength of the blur filter.\n * @param options.quality - The quality of the blur filter.\n * @param options.kernelSize - The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15.\n */\n constructor(options: BlurFilterPassOptions)\n {\n options = { ...BlurFilterPass.defaultOptions, ...options };\n\n const glProgram = generateBlurGlProgram(options.horizontal, options.kernelSize);\n const gpuProgram = generateBlurProgram(options.horizontal, options.kernelSize);\n\n super({\n glProgram,\n gpuProgram,\n resources: {\n blurUniforms: {\n uStrength: { value: 0, type: 'f32' },\n }\n },\n ...options\n });\n\n this.horizontal = options.horizontal;\n\n this._quality = 0;\n\n this.quality = options.quality;\n\n this.blur = options.strength;\n\n this._uniforms = this.resources.blurUniforms.uniforms;\n }\n\n /**\n * Applies the filter.\n * @param filterManager - The manager.\n * @param input - The input target.\n * @param output - The output target.\n * @param clearMode - How to clear\n */\n public apply(\n filterManager: FilterSystem,\n input: Texture,\n output: RenderSurface,\n clearMode: boolean\n ): void\n {\n this._uniforms.uStrength = this.strength / this.passes;\n\n if (this.passes === 1)\n {\n filterManager.applyFilter(this, input, output, clearMode);\n }\n else\n {\n const tempTexture = TexturePool.getSameSizeTexture(input);\n\n let flip = input;\n let flop = tempTexture;\n\n this._state.blend = false;\n\n const shouldClear = filterManager.renderer.type === RendererType.WEBGPU;\n\n for (let i = 0; i < this.passes - 1; i++)\n {\n filterManager.applyFilter(this, flip, flop, i === 0 ? true : shouldClear);\n\n const temp = flop;\n\n flop = flip;\n flip = temp;\n }\n\n this._state.blend = true;\n filterManager.applyFilter(this, flip, output, clearMode);\n TexturePool.returnTexture(tempTexture);\n }\n }\n\n /**\n * Sets the strength of both the blur.\n * @default 16\n */\n get blur(): number\n {\n return this.strength;\n }\n\n set blur(value: number)\n {\n this.padding = 1 + (Math.abs(value) * 2);\n this.strength = value;\n }\n\n /**\n * Sets the quality of the blur by modifying the number of passes. More passes means higher\n * quality blurring but the lower the performance.\n * @default 4\n */\n get quality(): number\n {\n return this._quality;\n }\n\n set quality(value: number)\n {\n this._quality = value;\n this.passes = value;\n }\n}\n"],"names":[],"mappings":"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"}