Canvas

O.png Some older graphics cards do not support canvases, and will throw an error if you attempt to use them. You should try to avoid using canvases for non-optional effects unless necessary, to avoid excluding users. Use love.graphics.isSupported("canvas") to check for support.  

Available since LÖVE 0.8.0
It has been renamed from Framebuffer.


A Canvas is used for off-screen rendering. Think of it as an invisible screen that you can draw to, but that will not be visible until you draw it to the actual visible screen. It is also known as "render to texture".

By drawing things that do not change position often (such as background items) to the Canvas, and then drawing the entire Canvas instead of each item, you can reduce the number of draw operations performed each frame.

Canvases can be susceptible to power of 2 syndrome. Most graphics cards that support Canvas should have non-PO2 texture support. However, there are some old cards that do not. Check with love.graphics.isSupported("npot") if it is supported.

Constructors

love.graphics.newCanvasCreates a new Canvas.Added since 0.8.0

Functions

Canvas:clearClears content of a Canvas.Added since 0.8.0
Canvas:getDimensionsGets the width and height of the Canvas.Added since 0.9.0
Canvas:getFSAAGets the number of FSAA samples used when drawing to the Canvas.Added since 0.9.1
Canvas:getFilterGets the filter mode of the Canvas.Added since 0.8.0
Canvas:getHeightGets the height of the Canvas.
Canvas:getImageDataGenerates ImageData from the contents of the Canvas.Added since 0.8.0
Canvas:getPixelGets the pixel at the specified position in a Canvas.Added since 0.9.0
Canvas:getWidthGets the width of the Canvas.
Canvas:getWrapGets the wrapping properties of a Canvas.Added since 0.8.0
Canvas:renderToRender to a Canvas using a function.Added since 0.8.0
Canvas:setFilterSets the filter mode of the Canvas.Added since 0.8.0
Canvas:setWrapSets the wrapping properties of a Canvas.Added since 0.8.0
Object:typeGets the type of the object as a string.
Object:typeOfChecks whether an object is of a certain type.

Supertypes

Examples

Drawing something to the Canvas and then the Canvas itself.

function love.load()
    canvas = love.graphics.newCanvas(800, 600)

    -- Rectangle is drawn to the canvas with the alpha blend mode.
    love.graphics.setCanvas(canvas)
        canvas:clear()
        love.graphics.setBlendMode('alpha')
        love.graphics.setColor(255, 0, 0, 128)
        love.graphics.rectangle('fill', 0, 0, 100, 100)
    love.graphics.setCanvas()
end

function love.draw()
    love.graphics.setColor(255, 255, 255, 255)
   
    -- The rectangle from the Canvas was already alpha blended.
    -- Use the premultiplied blend mode when drawing the Canvas itself to prevent another blending.
    love.graphics.setBlendMode('premultiplied')
    love.graphics.draw(canvas)
    -- Observe the difference if the Canvas is drawn with the alpha blend mode instead.
    love.graphics.setBlendMode('alpha')
    love.graphics.draw(canvas, 100, 0)

    -- Rectangle is drawn directly to the screen with the alpha blend mode.
    love.graphics.setBlendMode('alpha')
    love.graphics.setColor(255, 0, 0, 128)
    love.graphics.rectangle('fill', 200, 0, 100, 100)
end

See Also


Other Languages

Personal tools