from moderngl_window.loaders.texture.pillow import PillowLoader, image_data
from moderngl_window.exceptions import ImproperlyConfigured
class Loader(PillowLoader):
kind = "array"
[docs]
def __init__(self, meta):
super().__init__(meta)
self.layers = self.meta.layers
if self.layers is None:
raise ImproperlyConfigured("TextureArray requires layers parameter")
[docs]
def load(self):
"""Load a texture array as described by the supplied ``TextureDescription```
Returns:
moderngl.TextureArray: The TextureArray instance
"""
self._open_image()
width, height, depth = (
self.image.size[0],
self.image.size[1] // self.layers,
self.layers,
)
components, data = image_data(self.image)
texture = self.ctx.texture_array((width, height, depth), components, data,)
texture.extra = {"meta": self.meta}
if self.meta.mipmap_levels is not None:
self.meta.mipmap = True
if self.meta.mipmap:
if isinstance(self.meta.mipmap_levels, tuple):
texture.build_mipmaps(*self.meta.mipmap_levels)
else:
texture.build_mipmaps()
if self.meta.anisotropy:
texture.anisotropy = self.meta.anisotropy
self._close_image()
return texture