Shader
Introduction¶
A quad with its own shader, built-in game object of phaser.
- Author: Phaser Team
- Game object
WebGL only
Only work in WebGL render mode.
Usage¶
Load GLSL¶
scene.load.glsl(key, url);
Reference: load glsl
Add shader object¶
var shader = scene.add.shader(key, x, y, width, height, textures);
key: The key of the shader to use from the shader cache, or a BaseShader instance.x,y: Position.width,height: Size.textures: Optional array of texture keys to bind to the iChannel0, iChannel1, iChannel2, iChannel3 uniforms.
Note
Lots of shaders expect textures to be power-of-two sized.
Add shader object from JSON
var shader = scene.make.shader({
x: 0,
y: 0,
key: '',
// angle: 0,
// alpha: 1
// flipX: true,
// flipY: true,
// scale : {
// x: 1,
// y: 1
//},
// origin: {x: 0.5, y: 0.5},
add: true
});
key: The key of the shader to use from the shader cache, or a BaseShader instance.- A string
- An array of string to pick one element at random
x,y,scale.x,scale.y:- A number
- A callback to get return value
function() { return 0; } - Random integer between min and max
{ randInt: [min, max] } - Random float between min and max
{ randFloat: [min, max] }
Custom class¶
- Define class
class MyShader extends Phaser.GameObjects.Shader { constructor(scene, key, x, y, width, height, textures) { super(scene, key, x, y, width, height, textures); // ... scene.add.existing(this); } // ... // preUpdate(time, delta) {} }scene.add.existing(gameObject): Adds an existing Game Object to this Scene.- If the Game Object renders, it will be added to the Display List.
- If it has a
preUpdatemethod, it will be added to the Update List.
- Create instance
var shader = new MyShader(scene, key, x, y, width, height, textures);
Sampler2D uniform¶
- Default uniform mappings :
resolution(2f) - Set to the size of this shader.uniform vec2 resolution;in GLSL.
time(1f) - The elapsed game time, in seconds.uniform float time;in GLSL.
mouse(2f) - If a pointer has been bound (withsetPointer), this uniform contains its position each frame.uniform vec2 mouse;in GLSL.
date(4fv) - A vec4 containing the year, month, day and time in seconds.uniform vec4 date;in GLSL.
sampleRate(1f) - Sound sample rate. 44100 by default.uniform float sampleRate;in GLSL.
iChannel0...3(sampler2D) - Input channels 0 to 3.nullby default.uniform sampler2D iChannel0;in GLSL.
- Get uniform object
var uniform = shader.getUniform(key);- Texture key
var textureKey = uniform.textureKey; - Get texture key of
iChannel0,iChannel1,iChannel2,iChannel3sampler2D uniform.var textureKey = shader.getUniform('iChannel0').textureKey; var textureKey = shader.getUniform('iChannel1').textureKey; var textureKey = shader.getUniform('iChannel2').textureKey; var textureKey = shader.getUniform('iChannel3').textureKey;
- Texture key
- Sets a property of a uniform already present on this shader.
shader.setUniform(key, value);key: The key of the uniform to modify. Use dots for deep properties, i.e.resolution.value.x.
- Sets a sampler2D uniform from texture manager.
or
shader.setChannel0(textureKey); shader.setChannel1(textureKey); shader.setChannel2(textureKey); shader.setChannel3(textureKey); // shader.setChannel0(textureKey, textureData); // shader.setChannel1(textureKey, textureData); // shader.setChannel2(textureKey, textureData); // shader.setChannel3(textureKey, textureData);shader.setSampler2D(uniformKey, textureKey, textureIndex); // shader.setSampler2D(uniformKey, textureKey, textureIndex, textureData);uniformKey:'iChannel0','iChannel1','iChannel2', or'iChannel3'.textureIndex:0(for iChannel0),1(for iChannel1),2(for iChannel2),3(for iChannel3).textureData: Additional texture data.textureKey: Key from the Texture Manager cache. It cannot be a single frame from a texture, only the full image. Lots of shaders expect textures to be power-of-two sized.
- Sets a sampler2D uniform from a webgl texture.
shader.setSampler2DBuffer(uniformKey, texture, width, height, textureIndex); // shader.setSampler2DBuffer(uniformKey, texture, width, height, textureIndex, textureData);uniformKey:'iChannel0','iChannel1','iChannel2', or'iChannel3'.width,height: The width, height of the texture.textureIndex:0(for iChannel0),1(for iChannel1),2(for iChannel2),3(for iChannel3).textureData: Additional texture data.
Other uniforms¶
mouse, a pointer parameter.- Get
var pointer = shader.pointer; - Set
shader.setPointer(pointer);pointer:{x, y}
- Get
time, the elapsed game time, in seconds.- Get
var time = shader.getUniform('time').value; // var time = shader.uniforms.time.value - Set
shader.setUniform('time.value', time);
- Get
Output¶
- Render to Display list, by default.
- Redirect render result to internal webgl texture.
shader.setRenderToTexture(); var texture = shader.glTexture; - Redirect render result to internal webgl texture, and sample2D from buffer.
shader.setRenderToTexture(undefined, true); var texture = shader.glTexture; - Redirect render result to texture manager, for texture-based game object.
shader.setRenderToTexture(textureKey); // var texture = shader.glTexture; - Redirect render result to texture manager, and Sample2D from buffer.
shader.setRenderToTexture(textureKey, true); // var texture = shader.glTexture;
Texture routing¶
graph TB
TextureManagerIn["Texture manager"] --> |"shader.setSampler2D()"| Sampler2D["Samplers:<br>iChannel0<br>iChannel1<br>iChannel2<br>iChannel3"]
Sampler2D--> Shader["shader<br>Shader game object"]
Shader --> DisplayList["Display list"]
Shader --> |"shader.setRenderToTexture()"| InternalTexture["shader.glTexture"]
InternalTexture -.-> |"Texture key"| TextureManagerOut["Texture manager"]
TextureManagerOut -.-> GameObject["Image game object"]
GameObject -.-> DisplayList
WebGLTexture["WebGl texture<br>gameObject.glTexture"] --> |"shader.setSampler2DBuffer()"| Sampler2D
InternalTexture --> WebGLTexture
subgraph Output
DisplayList
GameObject
TextureManagerOut
end
subgraph Input
TextureManagerIn
WebGLTexture
end
Other properties¶
See game object
Create mask¶
See mask
Shader effects¶
Support internal and external filters
BaseShader¶
var baseShader = new Phaser.Display.BaseShader(key, fragmentSrc, vertexSrc, uniforms);
key: The key of this shaderfragmentSrc: The fragment source for the shader.vertexSrc: The vertex source for the shader.undefined, or'': Use default vertex source.
uniforms: Optional object defining the uniforms the shader uses.{ uniformName : {type: uniformType, value: initValue}, ... }uniformName: Uniform name in fragment source.uniformType,initValue: Type and initial value of uniform.'1f':initValueis a single float value.- Example :
time: { type: '1f', value: 0 }
- Example :
'2f':initValueis float numbers{x, y}.- Example :
resolution: { type: '2f', value: { x: this.width, y: this.height } }
- Example :
'3f':initValueis float numbers{x, y, z}.- Example :
color: { type: '3f', value: {x: 0, y: 0, z: 0}}
- Example :
'4f':initValueis float numbers{x, y, z, w}.