Add support for Array Textures
Array Textures are kind of like regular 2D texture atlases / sprite sheets, but they have a few differences:
Each "layer" or "slice" in an Array Texture uses the texture wrap mode at its edges. This means the extremely common texture atlas issue of "gaps in tiles" doesn't exist when using an Array Texture, because the issue is caused by the GPU getting some pixel data from past-the-edge of the Quad in the texture atlas.
Each layer/slice in an Array Texture has its own mipmap levels. With texture atlases, different sprites inside an atlas can bleed together once you start using mipmapping, but this isn't a problem with Array Textures.
Every layer/slice in an Array Texture has the same dimensions. This means you'd still have to use Quads (and possibly texture atlases inside each slice) with an Array Texture if you wanted to have several different sprites of varying sizes with one.
You can typically have a lot more layers in an Array Texture than you would normally be able to fit in a texture atlas.
They use 3D texture coordinates instead of 2D coordinates – the third coordinate indicates the slice/layer of the Array Texture. LÖVE's Quad, SpriteBatch, and ParticleSystem APIs would probably have to be modified to be able to specify the Array Texture layer/slice.
They use a different sampler type (
sampler2D) in GLSL. In desktop OpenGL, they either require GLSL 1.40 or the
GL_EXT_texture_arrayextension. In OpenGL ES, they require GLSL ES 3.00 – which is a problem because LÖVE only supports GLSL ES 1.00 and GLSL 1.20, currently.
Graphics cards that don't support OpenGL 3 or OpenGL ES 3 don't support Array Textures. On desktop OpenGL 2, LÖVE could fall back to using 3D textures internally (although mipmaps wouldn't be able to be supported). On OpenGL ES 2, LÖVE would probably have to fall back to a regular texture atlas internally.