Views
Canvas (Deutsch)
Available since LÖVE 0.8.0 |
Ehemals Framebuffer. |
Ein Offscreen-Buffer welcher für das sogenannte "Off-screen Rendering" verwendet wird.
Ein Offscreen-Buffer ist ein Speicher, in dem Bildschirminhalt aufgebaut werden kann ohne diesen sofort dem Nutzer zu zeigen. Der gleichbedeutende Begriff "Canvas" (dt.: Leinwand) ist treffend gewählt. Vorstellen kann man sich das Ganze als Arbeitsfläche auf der man abseits des eigentlichen Bildschirminhalts den nächsten Inhalt vorbereiten kann. Ist diese Leinwand schließlich fertig bemalt, schickt man sie komplett an den Bildschirm.
Der Vorteil ist, dass man komplexe statische Szenen wie zum Beispiel Hintergründe, welche sich aus vielen einzelnen Bildern zusammensetzen zunächst in den Offscreen-Buffer schreiben und diesen dann schließlich komplett als eigene Einheit zeichnen kann. Das bedeutet, dass man anstatt vieler kleiner Zeichenoperationen nur noch eine einzige durchführen muss, was insbesondere die Performance deutlich positiv beeinflusst.
Ein Nachteil von Canvases ist, dass sie anfällig für das sogenannte power of 2 syndrome sind. Dies betrifft jedoch vor allem ältere Grafikkarten. Die meisten moderneren Grafikkarten, welche Offscreen-Buffer unterstützen, sollten auch non-PO2 Texturen unterstützen. Um sicher zu gehen, kann man dies aber auch mit love.graphics.isSupported("npot") überprüfen und den Nutzer gegebenenfalls mit einer Fehlermeldung informieren.
Einige alte Grafikkarten unterstützen Canvases nicht. Ob eine Grafikkarte Canvases unterstützt, kann mit love.graphics.isSupported("canvas") überprüft werden. |
Konstruktoren
love.graphics.newCanvas (Deutsch) | Erstellt einen neuen Offscreen-Buffer. | 0.8.0 |
Funktionen
Canvas:getDimensions (Deutsch) | Gibt die Breite und Höhe des Canvas zurück. | 0.9.0 | |
Canvas:getFSAA (Deutsch) | Gibt die Anzahl der Antialiasing Samples zurück, welche beim Zeichnen auf das Canvas genutzt werden. | 0.9.1 | |
Canvas:getHeight (Deutsch) | Gibt die Höhe des Canvas zurück. | ||
Canvas:getPixel (Deutsch) | Gibt den Pixel an einer bestimmten Position auf dem Canvas zurück. | 0.9.0 | |
Canvas:getWidth (Deutsch) | Gibt die Breite des Canvas zurück. | ||
Canvas:getWrap (Deutsch) | Gibt die Zeilenumbrucheigenschaften eines Canvas zurück. | 0.8.0 | |
Canvas:renderTo (Deutsch) | Zeichnet mit Hilfe einer Funktion in einen Offscreen-Buffer. | 0.8.0 | |
Object:type (Deutsch) | Gibt den Typ des Objekts als String zurück. | ||
Object:typeOf (Deutsch) | Überprüft ob ein Objekt einem bestimmten Datentypen angehört. |
Supertypen
Beispiele
Performancevorteile eines Offscreen-Buffers
Im folgenden Beispiel zeichnen wir zunächst 10000 LÖVE logos auf eine Leinwand. Anschließend zeichnen wir die Leinwand selbst in love.draw(). Dies zeigt, dass auch komplexe Szenen keine (spürbaren) Auswirkungen auf die Performance haben, wenn man einen Offscreen-Buffer verwendet.
function love.load()
-- Wir erstellen eine neue Leinwand.
canvas = love.graphics.newCanvas(800, 600);
local logo = love.graphics.newImage('logo.png');
-- Wir füllen die Leinwand mit LÖVE logos.
canvas:renderTo(function()
for _ = 1, 10000 do
love.graphics.draw(logo, love.math.random(0, 800), love.math.random(0, 600), math.rad(love.math.random(0, 360)));
end
end)
end
function love.draw()
-- Wir zeichnen die Leinwand selbst.
love.graphics.draw(canvas);
-- Einfache Anzeige der aktuellen Framerate.
love.graphics.setColor(0, 0, 0);
love.graphics.print(string.format("FPS: %.3f fps", love.timer.getFPS()), 10, love.window.getHeight() - 40);
love.graphics.setColor(255, 255, 255);
end
Siehe auch
Andere Sprachen
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