love.graphics.newShader
Available since LÖVE 0.9.0 |
It has been renamed from love.graphics.newPixelEffect. |
Creates a new Shader object for hardware-accelerated vertex and pixel effects. A Shader contains either vertex shader code, pixel shader code, or both.
Vertex shader code must contain at least one function, named position
, which is the function that will produce transformed vertex positions of drawn objects in screen-space.
Pixel shader code must contain at least one function, named effect
, which is the function that will produce the color which is blended onto the screen for each pixel a drawn object touches.
Contents
Function
Synopsis
shader = love.graphics.newShader( code )
Arguments
string code
- The pixel shader or vertex shader code, or a filename pointing to a file with the code.
Returns
Shader shader
- A Shader object for use in drawing operations.
Function
With this variant, the pixelcode and vertexcode arguments can be in any order.
Synopsis
shader = love.graphics.newShader( pixelcode, vertexcode )
Arguments
string pixelcode
- The pixel shader code, or a filename pointing to a file with the code.
string pixelcode
- The vertex shader code, or a filename pointing to a file with the code.
Returns
Shader shader
- A Shader object for use in drawing operations.
Shader Language
Shaders are not programmed in Lua, but by using a special shader language instead. The shader language is basically GLSL 1.20 (specs) with a few aliases added for existing types:
GLSL | LÖVE shader language |
---|---|
float | number |
sampler2D | Image |
uniform | extern |
texture2D(tex, uv) | Texel(tex, uv) |
Pixel Shader Function
Synopsis
vec4 effect( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords )
Arguments
vec4 color
- The drawing color set with love.graphics.setColor or the per-vertex Geometry color.
Image texture
- The texture of the image or canvas being drawn.
vec2 texture_coords
- Coordinates of the pixel relative to the texture. The y-axis of canvases are inverted. Coordinates (1,1) would be the top right corner of the canvas.
vec2 screen_coords
- Coordinates of the pixel on the screen. Pixel coordinates are not normalized (unlike texture coordinates)
Returns
vec4 output_color
- The color of the pixel.
Vertex Shader Function
Synopsis
vec4 position( mat4 mvp_matrix, vec4 vertex_position )
Arguments
mat4 mvp_matrix
- The transformation matrix affected by love.graphics.translate and friends combined with the orthographic projection matrix.
vec4 vertex_position
- The raw un-transformed position of the current vertex.
Returns
vec4 output_pos
- The final transformed position of the current vertex.
Notes
Vertex shader code is run for every vertex drawn to the screen (for example, love.graphics.rectangle will produce 4 vertices) and is used to transform the vertex positions from their original coordinates into screen-space, as well as to send information such as per-vertex color and texture coordinate values to the pixel shader.
Pixel shader code is run for every pixel on the screen that a drawn object touches, and is used to produce the color that will be blended onto the screen at that pixel, often by reading from an image. Pixel shaders are sometimes called fragment shaders.
Examples
Create a shader using vertex and pixel shader code which behaves as if no shader is set.
pixel shader code:
vec4 effect( vec4 color, Image texture vec2 texture_coords, vec2 screen_coords )
{
vec4 texcolor = Texel(texture, texture_coords);
return texcolor * color;
}
vertex shader code:
vec4 position( mat4 mvp_matrix, vec4 vertex_position )
{
return mvp_matrix * vertex_position;
}
lua code:
function love.load()
shader = love.graphics.newShader(pixelcode, vertexcode)
end
function love.draw()
love.graphics.setShader(shader)
-- draw things
love.graphics.setShader()
-- draw more things
end
See Also
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info