Loading and Manipulating Shaders

Demonstrates how to load GLSL fragment shaders, pass uniforms from the game loop, and treat shader objects as GameObjects that can be tweened, scaled, and moved via input.

Loading and Manipulating Shaders, running
800 × 600
GitHub
class Example extends Phaser.Scene
{
    constructor()
    {
        super();
    }

    preload ()
    {
        this.load.setBaseURL('https://cdn.phaserfiles.com/v410');
        this.load.glsl('hannae', 'assets/shaders/love-u-hanne-e.frag');
        this.load.glsl('yinyang', 'assets/shaders/yin-yang.frag');
        this.load.image('block', 'assets/sprites/block.png');
    }

    create ()
    {
        const shader = this.add.shader({
            name: 'hannae',
            fragmentKey: 'hannae',
            setupUniforms: (setUniform, drawingContext) => {
                setUniform('time', this.game.loop.getDuration());
            },
        }, 400, 300, 800, 800);

        this.add.image(200, 300, 'block');

        const shader2 = this.add.shader({
            name: 'yinyang',
            fragmentKey: 'yinyang',
            setupUniforms: (setUniform, drawingContext) => {
                setUniform('time', this.game.loop.getDuration());
            },
        }, 400, 300, 256, 256);

        this.add.image(400, 300, 'block');

        this.add.image(600, 300, 'block');

        this.tweens.add({
            targets: shader2,
            scaleX: 4,
            scaleY: 4,
            repeat: -1,
            yoyo: true,
            duration: 2000
        });

        this.input.on('pointermove', function (pointer)
        {

            shader2.setPosition(pointer.x, pointer.y);
        });
    }
}

const config = {
    scale: { mode: Phaser.Scale.FIT },
    type: Phaser.WEBGL,
    parent: 'game-container',
    width: 800,
    height: 600,
    scene: Example,
};

const game = new Phaser.Game(config);

More in Shaders5 examples