用于纹理数组的 opengl glTexSubImage
opengl glTexSubImage for texture arrays
对于 1D 和 2D 纹理,我们只有一个图像,要在特定的 mipmap 处获取图像,我们可以调整级别参数
但是对于一维和二维数组,即使 docs 指定您可以使用这些数组标志作为有效参数,他们也没有告诉我们如何使用它从一维和二维数组中读取图像
假设我将 mipmap 级别指定为 5
by using
glTexParameteri(GL_TEXTURE_1D_ARRAY,GL_TEXTURE_BASE_LEVEL,0);
glTexParameteri(GL_TEXTURE_1D_ARRAY,GL_TEXTURE_MAX_LEVEL,5);
并且我使用
自动生成 mipmap
glGenerateMipmap(GL_TEXTURE_1D_ARRAY);
我的 texture1D 数组有 5 个一维图像,这会给我 5 * 5 = 25 个图像[数组中每个图像有 5 个 mip 映射级别]
如何使用 glGetTexImage() 在特定数组索引和 mipmap 级别读取图像?假设我想读取数组中第二张图像的第三个 mip 映射级别,我该怎么做?
1D 数组纹理基本上是 2D 纹理,而 2d 数组纹理基本上是 3D 纹理,当涉及到 OpenGL API 函数给你 x、y、z 偏移量和宽度、高度、深度参数。
因此,为了访问一维数组纹理上第八个数组层的第四个 mip 级别,从 x-offset = 50 纹素开始并读取 800 纹素宽的行,您可以使用以下调用:
glGetTextureSubImage(
texture,
3, // <- we want the fourth mip-level
50, // <- there, we want to start at x-offset = 50 texels
7, // <- we want the eighth array layer
0, // <- irrelevant for 1D array textures
800,// <- we want to read 800 texels (starting from 50)
1, // <- we want 1 array layer
1, // <- must use 1
format,
type,
bufSize,
pixels)
对于 1D 和 2D 纹理,我们只有一个图像,要在特定的 mipmap 处获取图像,我们可以调整级别参数
但是对于一维和二维数组,即使 docs 指定您可以使用这些数组标志作为有效参数,他们也没有告诉我们如何使用它从一维和二维数组中读取图像
假设我将 mipmap 级别指定为 5
by using
glTexParameteri(GL_TEXTURE_1D_ARRAY,GL_TEXTURE_BASE_LEVEL,0);
glTexParameteri(GL_TEXTURE_1D_ARRAY,GL_TEXTURE_MAX_LEVEL,5);
并且我使用
自动生成 mipmapglGenerateMipmap(GL_TEXTURE_1D_ARRAY);
我的 texture1D 数组有 5 个一维图像,这会给我 5 * 5 = 25 个图像[数组中每个图像有 5 个 mip 映射级别]
如何使用 glGetTexImage() 在特定数组索引和 mipmap 级别读取图像?假设我想读取数组中第二张图像的第三个 mip 映射级别,我该怎么做?
1D 数组纹理基本上是 2D 纹理,而 2d 数组纹理基本上是 3D 纹理,当涉及到 OpenGL API 函数给你 x、y、z 偏移量和宽度、高度、深度参数。
因此,为了访问一维数组纹理上第八个数组层的第四个 mip 级别,从 x-offset = 50 纹素开始并读取 800 纹素宽的行,您可以使用以下调用:
glGetTextureSubImage(
texture,
3, // <- we want the fourth mip-level
50, // <- there, we want to start at x-offset = 50 texels
7, // <- we want the eighth array layer
0, // <- irrelevant for 1D array textures
800,// <- we want to read 800 texels (starting from 50)
1, // <- we want 1 array layer
1, // <- must use 1
format,
type,
bufSize,
pixels)