gameforge - v0.1.12
    Preparing search index...

    Interface ISpriteMaskFilter

    A filter is a special shader that applies post-processing effects to an input texture and writes into an output render-target.

    Example of the PIXI.BlurFilter BlurFilter.

    Filters can be applied to any DisplayObject or Container. PixiJS' FilterSystem renders the container into temporary Framebuffer, then filter renders it to the screen. Multiple filters can be added to the filters array property and stacked on each other.

    import { Container, Filter } from 'pixi.js';
    const filter = new Filter(myShaderVert, myShaderFrag, { myUniform: 0.5 });
    const container = new Container();
    container.filters = [filter];

    In PixiJS v3, a filter was always applied to whole screen.

    In PixiJS v4, a filter can be applied only part of the screen. Developers had to create a set of uniforms to deal with coordinates.

    In PixiJS v5 combines both approaches. Developers can use normal coordinates of v3 and then allow filter to use partial Framebuffers, bringing those extra uniforms into account.

    Also be aware that we have changed default vertex shader, please consult Wiki.

    The following table summarizes the coordinate spaces used in the filtering pipeline:

    Coordinate Space Description
    Texture Coordinates The texture (or UV) coordinates in the input base-texture's space. These are normalized into the (0,1) range along both axes.
    World Space A point in the same space as the world bounds of any display-object (i.e. in the scene graph's space).
    Physical Pixels This is base-texture's space with the origin on the top-left. You can calculate these by multiplying the texture coordinates by the dimensions of the texture.

    PixiJS viewport uses screen (CSS) coordinates, (0, 0, renderer.screen.width, renderer.screen.height), and projectionMatrix uniform maps it to the gl viewport.

    uSampler

    The most important uniform is the input texture that container was rendered into. Important note: as with all Framebuffers in PixiJS, both input and output are premultiplied by alpha.

    By default, input normalized coordinates are passed to fragment shader with vTextureCoord. Use it to sample the input.

    import { Filter } from 'pixi.js';
    const fragment = `
    varying vec2 vTextureCoord;
    uniform sampler2D uSampler;
    void main(void)
    {
    gl_FragColor = texture2D(uSampler, vTextureCoord);
    }
    `;

    const myFilter = new Filter(null, fragment);

    This filter is just one uniform less than PIXI.AlphaFilter AlphaFilter.

    outputFrame

    The outputFrame holds the rectangle where filter is applied in screen (CSS) coordinates. It's the same as renderer.screen for a fullscreen filter. Only a part of outputFrame.zw size of temporary Framebuffer is used, (0, 0, outputFrame.width, outputFrame.height),

    Filters uses this quad to normalized (0-1) space, its passed into aVertexPosition attribute. To calculate vertex position in screen space using normalized (0-1) space:

    vec4 filterVertexPosition( void )
    {
        vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;
        return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);
    }
    

    inputSize

    Temporary framebuffer is different, it can be either the size of screen, either power-of-two. The inputSize.xy are size of temporary framebuffer that holds input. The inputSize.zw is inverted, it's a shortcut to evade division inside the shader.

    Set inputSize.xy = outputFrame.zw for a fullscreen filter.

    To calculate input normalized coordinate, you have to map it to filter normalized space. Multiply by outputFrame.zw to get input coordinate. Divide by inputSize.xy to get input normalized coordinate.

    vec2 filterTextureCoord( void )
    {
        return aVertexPosition * (outputFrame.zw * inputSize.zw); // same as /inputSize.xy
    }
    

    resolution

    The resolution is the ratio of screen (CSS) pixels to real pixels.

    inputPixel

    inputPixel.xy is the size of framebuffer in real pixels, same as inputSize.xy * resolution inputPixel.zw is inverted inputPixel.xy.

    It's handy for filters that use neighbour pixels, like PIXI.FXAAFilter FXAAFilter.

    inputClamp

    If you try to get info from outside of used part of Framebuffer - you'll get undefined behaviour. For displacements, coordinates has to be clamped.

    The inputClamp.xy is left-top pixel center, you may ignore it, because we use left-top part of Framebuffer inputClamp.zw is bottom-right pixel center.

    vec4 color = texture2D(uSampler, clamp(modifiedTextureCoord, inputClamp.xy, inputClamp.zw));
    

    Or:

    vec4 color = texture2D(uSampler, min(modifigedTextureCoord, inputClamp.zw));
    

    Complete documentation on Filter usage is located in the Wiki.

    Since PixiJS only had a handful of built-in filters, additional filters can be downloaded here from the PixiJS Filters repository.

    PIXI

    interface ISpriteMaskFilter {
        _resolution: null | number;
        autoFit: boolean;
        disposeRunner: Runner;
        enabled: boolean;
        legacy: boolean;
        maskSprite: IMaskTarget;
        multisample: null | MSAA_QUALITY;
        padding: number;
        program: Program;
        state: State;
        uniformGroup: UniformGroup;
        get blendMode(): BLEND_MODES;
        set blendMode(value: BLEND_MODES): void;
        get resolution(): null | number;
        set resolution(value: null | number): void;
        get uniforms(): Dict<any>;
        apply(
            filterManager: FilterSystem,
            input: RenderTexture,
            output: RenderTexture,
            clearMode?: CLEAR_MODES,
            _currentState?: FilterState,
        ): void;
        checkUniformExists(name: string, group: UniformGroup): boolean;
        destroy(): void;
    }

    Hierarchy (View Summary)

    Index

    Properties

    _resolution: null | number
    autoFit: boolean

    If enabled, PixiJS will fit the filter area into boundaries for better performance. Switch it off if it does not work for specific shader.

    true
    
    disposeRunner: Runner
    enabled: boolean

    If enabled is true the filter is applied, if false it will not.

    legacy: boolean

    Legacy filters use position and uvs from attributes (set by filter system)

    maskSprite: IMaskTarget
    multisample: null | MSAA_QUALITY

    The samples override of the filter instance. If set to null, the sample count of the current render target is used.

    PIXI.Filter.defaultMultisample
    
    padding: number

    The padding of the filter. Some filters require extra space to breath such as a blur. Increasing this will add extra width and height to the bounds of the object that the filter is applied to.

    program: Program

    Program that the shader uses.

    state: State

    The WebGL state the filter requires to render.

    uniformGroup: UniformGroup

    Accessors

    • get blendMode(): BLEND_MODES

      Sets the blend mode of the filter.

      Returns BLEND_MODES

      PIXI.BLEND_MODES.NORMAL
      
    • set blendMode(value: BLEND_MODES): void

      Parameters

      Returns void

    • get resolution(): null | number

      The resolution of the filter. Setting this to be lower will lower the quality but increase the performance of the filter. If set to null or 0, the resolution of the current render target is used.

      Returns null | number

      PIXI.Filter.defaultResolution
      
    • set resolution(value: null | number): void

      Parameters

      • value: null | number

      Returns void

    • get uniforms(): Dict<any>

      Shader uniform values, shortcut for uniformGroup.uniforms.

      Returns Dict<any>

    Methods

    • Applies the filter

      Parameters

      • filterManager: FilterSystem

        The renderer to retrieve the filter from

      • input: RenderTexture

        The input render target.

      • output: RenderTexture

        The target to output to.

      • OptionalclearMode: CLEAR_MODES

        Should the output be cleared before rendering to it.

      • Optional_currentState: FilterState

        It's current state of filter. There are some useful properties in the currentState : target, filters, sourceFrame, destinationFrame, renderTarget, resolution

      Returns void

    • Returns void