love.graphics.newArrayImage (Français)

Disponible depuis LÖVE 11.0
Ce-tte function n'est pas supporté-e par des versions plus anciennes.

Créee une nouvelle Array (table) d'Image.

O.png Les tables d'image ne sont pas supportés par tous les systèmes. Utilisez love.graphics.getTextureTypes pour vérifier !  


O.png Cette fonction peut être lente si elle est appelée de façon répétée, comme depuis love.update ou love.draw. Si vous devez utiliser souvent une ressource spécifique, créez la une seule fois, et conservez la quelque part, elle peut être réutilisée !  



Une table d'image / table de texture est un objet unique qui contient plusieurs 'calques', 'couches' ou 'tranches' de sous-images 2D. Il peut être perçu comme similaire à un atlas de texture ou une feuille de sprite, mais il ne souffre pas des mêmes problèmes de débordement de pavage / quad que les atlas de texture – bien que chaque sous-image doit avoir les mêmes dimensions.

Un calque spécifique d'une table d'image peut être tracé à l'aide de love.graphics.drawLayer / SpriteBatch:addLayer, ou bien à l'aide de la variante Quad de love.graphics.draw et Quad:setLayer, ou bien via un ombrage (Shader) personnalisé.

Une table d'image, pour pouvoir être utilisé dans une Shader (ombrage), doit être déclaré de type ArrayImage ou sampler2DArray (plutôt que Image ou sampler2D). La fonction d'ombrage Texel(ArrayImage image, vec3 texturecoord) doit être utilisée pour obtenir les couleurs des pixels d'une couche de la table d'image. L'argument vec3 contient les coordonnées de texture dans ses deux premières composantes, et l'index de couche basé sur 0 dans sa troisième composante.

Fonction

Crée une table d'Image en fournissant un fichier d'image différent pour chaque couche de l'objet table d'image (ArrayImage) résultant.

Synopsis

image = love.graphics.newArrayImage( slices, settings )

Arguments

table (Français) slices
Table contenant les chemins de fichiers des images (ou les objets File, FileData, ImageData, ou bien CompressedImageData), dans une table. Chaque sous-image doit avoir les mêmes dimensions. Une table de tables peut également être fournie, où chaque sous-table contient tous les niveaux de mipmap pour l'index de couche de cette sous-table.
table (Français) settings (nil)
Table optionnelle de réglages utilisée pour configurer la table d'image, contenant les champs suivants :
boolean (Français) mipmaps (false)
True (vrai) pour que l'image utilise des mipmaps, false (faux) pour les désactiver. Les mipmaps seront générés automatiquement si l'image n'est pas dans un format de texture compresssée.
boolean (Français) linear (false)
True (vrai) pour traiter les pixels de l'image dans un espace colorimétrique linéaire au lieu de sRGB, lorsque le rendu avec correction gamma est activé. La majorité des images sont créée dans l'espace sRGB.
number (Français) dpiscale (1)
L'échelle en PPP à utiliser lors du tracé de la table d'image et de l'appel de getWidth/getHeight.

Retourne

Image (Français) image
un objet ArrayImage.

Notes

Illustration de la façon dont une table d'image fonctionne : [1]

Un facteur d'échelle PPP de 2 (doublant la densité de pixels normale) résultera dans une image prenant le même espace à l'écran qu'une image ne comportant que la moitié de ses dimensions en pixels ayant un facteur d'échelle PPP de 1. Cela permet permet d'échanger facilement des ensembles d'images prenant le même espace à l'écran mais ayant des densités de pixels différents, permettant de réduire la logique de code nécessaire au support de l'affichage haute densité / écran Retina.

Afin d'utiliser un tableau de texture ou autre types de texture non-2D comme texture principale dans un Shader (ombrage) personnalisé, la variante effect() vide doit être utilisée dans l'ombrage de pixel, et MainTex (texture principale) doit être déclarée comme une ArrayImage ou un sampler2DArray de cette façon : uniform ArrayImage MainTex;.

Exemples

Trace plusieurs calques d'une table d'image

function love.load()
    local sprites = {"sprite1.png", "sprite2.png"}
    image = love.graphics.newArrayImage(sprites)
end

function love.draw()
    love.graphics.drawLayer(image, 1, 50, 50)
    love.graphics.drawLayer(image, 2, 250, 50)
end

Utilise un ombrage personnalisé avec love.graphics.drawLayer

shader = love.graphics.newShader[[
uniform ArrayImage MainTex;

void effect() {
    // Un Texel utilise un troisième composant des coordonnées de texture pour l'index de calque, Lorsque une table de texture lui est passé.
    // LÖVE configure les coordonnées de texture afin qu'elles contienne l'index de calque spécifié dans love.graphics.drawLayer, lors du rendu d'une table de texture
    love_PixelColor = Texel(MainTex, VaryingTexCoord.xyz) * VaryingColor;
}
]]

function love.load()
    local sprites = {"sprite1.png", "sprite2.png"}
    image = love.graphics.newArrayImage(sprites)
end

function love.draw()
    love.graphics.setShader(shader)
    love.graphics.drawLayer(image, 1, 50, 50)
    love.graphics.drawLayer(image, 2, 250, 50)
end

Voir également


Autres langues