import * as core from '../../core';
import { readFileSync } from 'fs';
import { join } from 'path';
/**
* Simplest filter - applies alpha
*
* Use this instead of Container's alpha property to avoid visual layering of individual elements.
* AlphaFilter applies alpha evenly across the entire display object and any opaque elements it contains.
* If elements are not opaque, they will blend with each other anyway.
*
* Very handy if you want to use common features of all filters:
*
* 1. Assign a blendMode to this filter, blend all elements inside display object with background.
*
* 2. To use clipping in display coordinates, assign a filterArea to the same container that has this filter.
*
* @class
* @extends PIXI.Filter
* @memberof PIXI.filters
*/
export default class AlphaFilter extends core.Filter
{
/**
* @param {number} [alpha=1] Amount of alpha from 0 to 1, where 0 is transparent
*/
constructor(alpha = 1.0)
{
super(
// vertex shader
readFileSync(join(__dirname, '../fragments/default.vert'), 'utf8'),
// fragment shader
readFileSync(join(__dirname, './alpha.frag'), 'utf8')
);
this.alpha = alpha;
this.glShaderKey = 'alpha';
}
/**
* Coefficient for alpha multiplication
*
* @member {number}
* @default 1
*/
get alpha()
{
return this.uniforms.uAlpha;
}
set alpha(value) // eslint-disable-line require-jsdoc
{
this.uniforms.uAlpha = value;
}
}