Skip to main content
Version: Phaser v4.0.0

BaseFilterShader

This is a base class for all filters that use a shader. Most filters will extend this class.

It takes care of setting up the shader program and vertex buffer layout. It also provides the run method which handles the rendering of the filter. When rendering, it generates a new DrawingContext to render to, and releases the input DrawingContext.

Note: be careful when using gl_FragCoord in shader code. This built-in variable gives you the "window relative" coordinate of the pixel being processed. But this is actually relative to the framebuffer size, and Phaser treats all framebuffers except the main canvas as being vertically flipped. This means that gl_FragCoord.y = 0 in a shader will be the bottom of a framebuffer, but the top of the canvas. This means gl_FragCoord gives different results when it's inside a framebuffer (like a Render Texture or Filter) compared to the main canvas. Be aware of this restriction when writing shaders.

Constructor

new BaseFilterShader(name, manager, [fragmentShaderKey], [fragmentShaderSource], [shaderAdditions])

Parameters

nametypeoptionaldescription
namestringNoThe name of the filter.
managerPhaser.Renderer.WebGL.RenderNodes.RenderNodeManagerNoThe manager that owns this filter.
fragmentShaderKeystringYesThe key of the fragment shader source in the shader cache. This will only be used if fragmentShaderSource is not set.
fragmentShaderSourcestringYesThe fragment shader source.
shaderAdditionsArray.<Phaser.Types.Renderer.WebGL.ShaderAdditionConfig>YesAn array of shader additions to apply to the shader program.

Scope: static

Extends

Phaser.Renderer.WebGL.RenderNodes.BaseFilter

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L14
Since: 4.0.0

Inherited Members

From Phaser.Renderer.WebGL.RenderNodes.RenderNode:


Public Members

indexBuffer

indexBuffer: Phaser.Renderer.WebGL.Wrappers.WebGLBufferWrapper

Description:

The index buffer defining vertex order.

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L96
Since: 4.0.0


programManager

programManager: Phaser.Renderer.WebGL.ProgramManager

Description:

The program manager used to create and manage shader programs. This contains shader variants.

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L121
Since: 4.0.0


vertexBufferLayout

vertexBufferLayout: Phaser.Renderer.WebGL.Wrappers.WebGLVertexBufferLayoutWrapper

Description:

The vertex buffer layout for this RenderNode.

This consists of 4 vertices forming the corners of a quad.

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L105
Since: 4.0.0


Inherited Methods

From Phaser.Renderer.WebGL.RenderNodes.RenderNode:


Public Methods

run

<instance> run(controller, inputDrawingContext, [outputDrawingContext], [padding])

Description:

Runs the filter shader. This method handles the full rendering pipeline for the filter: it acquires an output DrawingContext (or uses the one provided), computes padded quad vertices, populates the vertex buffer, sets up textures and uniforms via the shader program, issues the draw call, and releases the input context.

Parameters:

nametypeoptionaldescription
controllerPhaser.Filters.ControllerNoThe filter controller that owns this filter.
inputDrawingContextPhaser.Renderer.WebGL.DrawingContextNoThe input drawing context containing the source texture.
outputDrawingContextPhaser.Renderer.WebGL.DrawingContextYesAn optional output drawing context. If not provided, one will be obtained from the pool.
paddingPhaser.Geom.RectangleYesOptional padding Rectangle to apply. If not provided, the controller's padding is used.

Overrides: Phaser.Renderer.WebGL.RenderNodes.BaseFilter#run

Returns: Phaser.Renderer.WebGL.DrawingContext - The output drawing context containing the filtered result.

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L151
Since: 4.0.0


setupTextures

<instance> setupTextures(controller, textures, drawingContext)

Description:

Run any necessary modifications on the textures array. Override this method to handle texture inputs.

Parameters:

nametypeoptionaldescription
controllerPhaser.Filters.ControllerNoThe filter controller.
texturesArray.<Phaser.Renderer.WebGL.Wrappers.WebGLTextureWrapper>NoThe array of textures to modify in-place.
drawingContextPhaser.Renderer.WebGL.DrawingContextNoThe drawing context in use.

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L313
Since: 4.0.0


setupUniforms

<instance> setupUniforms(controller, drawingContext)

Description:

Set up the uniforms for this shader, based on the controller. Override this method to handle uniform setup.

Parameters:

nametypeoptionaldescription
controllerPhaser.Filters.ControllerNoThe filter controller.
drawingContextPhaser.Renderer.WebGL.DrawingContextNoThe drawing context in use.

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L328
Since: 4.0.0


updateShaderConfig

<instance> updateShaderConfig(controller, drawingContext)

Description:

Set up the shader configuration for this shader. Override this method to handle shader configuration.

Parameters:

nametypeoptionaldescription
controllerPhaser.Filters.ControllerNoThe filter controller.
drawingContextPhaser.Renderer.WebGL.DrawingContextNoThe drawing context in use.

Source: src/renderer/webgl/renderNodes/filters/BaseFilterShader.js#L299
Since: 4.0.0