Canvas
Доступно начиная с LÖVE 0.8.0
Было переименовано из Framebuffer.
Canvas используется для рендеринга вне экрана. Представьте его как невидимый экран, на который можно рисовать, но который не будет виден, пока вы не нарисуете его на реальном видимом экране. Также он известен как "рендеринг в текстуру".
Рисуя элементы, положение которых часто не меняется (например, фоновые объекты), на Canvas и затем рисуя весь Canvas вместо каждого элемента, вы можете уменьшить количество операций рисования, выполняемых в каждом кадре.
В версиях до 0.10.0 не все графические карты, поддерживаемые LÖVE, могли использовать Canvas. love.graphics.isSupported("canvas") можно использовать для проверки поддержки во время выполнения.
При рисовании содержимого на Canvas с обычным альфа-смешиванием значения альфа содержимого умножаются на его значения RGB.
Поэтому цвета пикселей Canvas будут иметь предварительно умноженную альфу после отрисовки, поэтому при рисовании Canvas на экран или на другой Canvas необходимо использовать предварительно умноженное альфа-смешивание – love.graphics.setBlendMode("alpha", "premultiplied").
Конструкторы
| love.graphics.newCanvas | Создаёт новый Canvas. | 0.8.0 |
Функции
| Canvas:clear | Очищает содержимое Canvas до определенного цвета. | 0.8.0 | 0.10.0 |
| Canvas:generateMipmaps | Генерирует mipmaps для Canvas, основываясь на содержимом mipmap-уровня с наивысшим разрешением. | 11.0 | |
| Canvas:getFSAA | Получает количество выборок FSAA, используемых при рисовании на Canvas. | 0.9.1 | 0.10.0 |
| Canvas:getFormat | Получает формат текстуры Canvas. | 0.9.1 | 11.0 |
| Canvas:getImageData | Генерирует ImageData из содержимого Canvas. | 0.8.0 | 0.10.0 |
| Canvas:getMSAA | Получает количество выборок MSAA, используемых при рисовании на Canvas. | 0.9.2 | |
| Canvas:getMipmapMode | Получает MipmapMode, с которым был создан этот Canvas. | 11.0 | |
| Canvas:getPixel | Получает пиксель в указанной позиции в Canvas. | 0.9.0 | 0.10.0 |
| Canvas:newImageData | Генерирует ImageData из содержимого Canvas. | 0.10.0 | |
| Canvas:renderTo | Отрисовка в Canvas с использованием функции. | 0.8.0 | |
| Object:release | Немедленно уничтожает ссылку Lua на объект. | 11.0 | |
| Object:type | Получает тип объекта в виде строки. | ||
| Object:typeOf | Проверяет, является ли объект определённого типа. | ||
| Texture:getDPIScale | Получает масштаб DPI текстуры. | 11.0 | |
| Texture:getDepth | Получает глубину объёмной текстуры. | 11.0 | |
| Texture:getDepthSampleMode | Получает режим сравнения, используемый при выборке из глубины текстуры в шейдере. | 11.0 | |
| Texture:getDimensions | Получает ширину и высоту текстуры. | 0.9.0 | |
| Texture:getFilter | Получает режим фильтрации текстуры. | ||
| Texture:getFormat | Получает формат пикселей текстуры. | 11.0 | |
| Texture:getHeight | Получает высоту текстуры. | ||
| Texture:getLayerCount | Получает количество слоёв/слайсов в массиве текстур. | 11.0 | |
| Texture:getMipmapCount | Получает количество mipmap, содержащихся в текстуре. | 11.0 | |
| Texture:getMipmapFilter | Получает режим фильтрации mipmap для текстуры. | 0.9.0 | |
| Texture:getPixelDimensions | Получает ширину и высоту в пикселях текстуры. | 11.0 | |
| Texture:getPixelHeight | Получает высоту в пикселях текстуры. | 11.0 | |
| Texture:getPixelWidth | Получает ширину в пикселях текстуры. | 11.0 | |
| Texture:getTextureType | Получает тип текстуры. | 11.0 | |
| Texture:getWidth | Получает ширину текстуры. | ||
| Texture:getWrap | Получает свойства обёртки текстуры. | ||
| Texture:isReadable | Получает, можно ли текстуру отправлять в шейдер. | 11.0 | |
| Texture:setDepthSampleMode | Устанавливает режим сравнения, используемый при выборке из глубины текстуры в шейдере. | 11.0 | |
| Texture:setFilter | Устанавливает режим фильтрации текстуры. | ||
| Texture:setMipmapFilter | Устанавливает режим фильтрации mipmap для текстуры. | 0.9.0 | |
| Texture:setWrap | Устанавливает свойства обёртки текстуры. |
Перечисления
| MipmapMode | Управляет тем, есть ли у Canvas mipmaps и его поведением, если они есть. | 11.0 |
Надтипы
Примеры
Рисование чего-либо на Canvas и последующее рисование Canvas на экран.
function love.load()
canvas = love.graphics.newCanvas(800, 600)
-- Rectangle is drawn to the canvas with the regular alpha blend mode.
love.graphics.setCanvas(canvas)
love.graphics.clear()
love.graphics.setBlendMode("alpha")
love.graphics.setColor(1, 0, 0, 0.5)
love.graphics.rectangle('fill', 0, 0, 100, 100)
love.graphics.setCanvas()
end
function love.draw()
-- very important!: reset color before drawing to canvas to have colors properly displayed
-- see discussion here: https://love2d.org/forums/viewtopic.php?f=4&p=211418#p211418
love.graphics.setColor(1, 1, 1, 1)
-- The rectangle from the Canvas was already alpha blended.
-- Use the premultiplied alpha blend mode when drawing the Canvas itself to prevent improper blending.
love.graphics.setBlendMode("alpha", "premultiplied")
love.graphics.draw(canvas)
-- Observe the difference if the Canvas is drawn with the regular alpha blend mode instead.
love.graphics.setBlendMode("alpha")
love.graphics.draw(canvas, 100, 0)
-- Rectangle is drawn directly to the screen with the regular alpha blend mode.
love.graphics.setBlendMode("alpha")
love.graphics.setColor(1, 0, 0, 0.5)
love.graphics.rectangle('fill', 200, 0, 100, 100)
end См. также
© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/Canvas