如何从 OpenGL 4.5 中的单个立方体贴图纹理创建立方体贴图阵列纹理?

How to create a cube map array texture from individual cube map textures in OpenGL 4.5?

假设我有许多立方体贴图纹理,我希望将它们作为立方体贴图数组纹理全部传递给 GPU。

首先我需要创建数组纹理,它应该类似于:

glTextureStorage3D(textureId, 0, internalFormat, width, height, howManyCubeMaps);

假设只有一个 mipmap 级别。

我怎样才能将每个单独的纹理附加到这个纹理数组?

假设每个立方体贴图 ID 都在一个数组中,我想知道你是否可以这样做:

for(uint level=0; level<num_levels; level++)
    glAttach(textureID, cubeID[level], level);

然后我不确定我应该如何在着色器端接收数据,而且 OpenGL wiki 上没有明确的文档

https://www.khronos.org/opengl/wiki/Cubemap_Texture#Cubemap_array_textures

How can I then attach each indidivual texture to this texture array?

数组纹理在 OpenGL 中不是这样工作的。这甚至不是数组 在 C++ 中的工作方式。想一想:如果您有 5 个 int 变量,则无法将那些 int 变量 "attach" 到 int array[5] 数组。唯一的解决方案是将这些变量的 value 复制到数组中的适当位置。在这个过程之后,你仍然有 5 int 个变量,它们与数组之间没有任何联系。

OpenGL 也是如此:您只能将那些立方体贴图纹理中的 数据 复制到立方体贴图数组纹理中的适当位置。 glCopyImageSubData 是这个过程的最佳选择。