【发布时间】:2011-09-30 22:17:18
【问题描述】:
我有一个关于 OpenGL 纹理数组的简单(我认为)问题。我使用以下内容创建纹理数组:
glTexImage3D( GL_TEXTURE_2D_ARRAY,
0,
formatGL,
width,
height,
slices,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
nullptr);
请注意,我还不想实际将任何图像加载到其中。我只是在创建稍后将填充数据的结构。
所以我的问题是:
如何为纹理数组的每个“切片”生成 mip 链?我不想物理生成mip,我只想通过告诉它mip来完成纹理。我可以用 2D 纹理简单地通过调用 glTexImage2D 函数和 mip 级别、大小并传入一个 nullptr 来实现。鉴于没有“切片”参数,我看不到如何使用 glTexImage3D 函数执行此操作。 OpenGL 超级示例仅将 .bmp 加载到数组中每个纹理的第一个 mip 级别。说使用 glTexSubImage3D 并传入 nullptr 将为数组中的给定纹理创建我想要的 mip 级别是否正确?
khronos.org 上关于 glGenerateMipMap 的文档仅指定 GL_TEXTURE_2D 或 GL_TEXTURE_CUBE_MAP。那么说我不能将这种方法用于 2D 纹理数组是否正确?
以下是我使用 2D 纹理创建 mip 链的方法:
size_t i = 0, mipSizeX = width, mipSizeY = height;
while(mipSizeX >= 1 || mipSizeY >= 1)
{
// Generate image for this mip level
glTexImage2D( GL_TEXTURE_2D,
i,
formatGL,
mipSizeX,
mipSizeY,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
nullptr);
// Go to the next mip size.
mipSizeX >>= 1;
mipSizeY >>= 1;
// and the next mipmap level.
i++;
}
【问题讨论】: