# Source code for moderngl_window.loaders.texture.array

    from moderngl_window.loaders.texture.pillow import PillowLoader, image_data
    from moderngl_window.exceptions import ImproperlyConfigured

    class Loader(PillowLoader):
        kind = "array"

        def __init__(self, meta):
            super().__init__(meta)
            self.layers = self.meta.layers

            if self.layers is None:
                raise ImproperlyConfigured("TextureArray requires layers parameter")

        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