在 ModernGL 中使用 TextureArray

Using a TextureArray in ModernGL

我最近开始使用 ModernGL,今天我想开始使用纹理数组。我只是想知道如何在 Moderngl 中传递各个子纹理?在 OpenGL 中,我会调用 glTexSubImage3D。但是,在 ModernGL 文档中,Context.texture_array 有 3 个参数:sizecomponentsdata。我觉得data应该是所有的图片叠起来吧?我将如何使用 PIL 和可能的 numpy 来解决这个问题?

您可以单独阅读每张图片并将图片附加到列表中。最后将列表转换为 numpy.array.
在以下代码片段中,imageList 是文件名列表,widthheight 是单个图像的大小(所有图像的大小必须相同):

def createTextureArray(imageList, width, height)

    depth = len(imageList)

    dataList = []
    for filename in imageList:
        
        image = Image.open(filename)
        if width != image.size[0] or height != image.size[1]:
            raise ValueError(f"image size mismatch: {image.size[0]}x{image.size[1]}")
        
        dataList.append(list(image.getdata()))

    imageArrayData = numpy.array(dataList, numpy.uint8)

    components = 4 # 4 for RGBA, 3 for RGB
    context.texture_array((width, height, depth), components, imageArrayData)