that’s quite easy:
// in preload method
this.load.glsl("myGlsl", "external_glsl_file.glsl");
// then in create method
const obj = this.add.shader("myGlsl");
obj.setSampler2D(...); // or shortcut methods: setChannel0 / setChannel1 ... setChannel3
obj.setUniform(...);
// and then just treat this obj as an image to use, even add it into a container...
and, in your glsl, there are built-in uniforms:
uniform sampler2D iChannel0;
uniform sampler2D iChannel1;
uniform sampler2D iChannel2;
uniform sampler2D iChannel3;
uniform float sampleRate;
uniform vec4 date;
uniform vec2 mouse;
uniform float time;
uniform vec2 resolution;
docs ref:
https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Shader.html