【发布时间】:2015-08-18 11:18:33
【问题描述】:
我正在使用 2D 纹理数组来存储一些数据。因为我经常想绑定这个 2D 纹理数组的单层,所以我为每一层创建了单独的 GL_TEXTURE_2D 纹理视图:
for(int l(0); l < m_layers; l++)
{
QOpenGLTexture * view_texture = m_texture.createTextureView(QOpenGLTexture::Target::Target2D,
m_texture_format,
0,0,
l,l);
view_texture->setMinMagFilters(QOpenGLTexture::Filter::Linear, QOpenGLTexture::Filter::Linear);
view_texture->setWrapMode(QOpenGLTexture::WrapMode::MirroredRepeat);
assert(view_texture != 0);
m_texture_views.push_back(view_texture);
}
这些 2D TextureViews 工作正常。但是,如果我想使用该纹理视图从 GPU 端检索 2D 纹理数据,则它不起作用。
换句话说,以下内容不复制任何数据(但不会引发 GL 错误):
glGetTexImage(GL_TEXTURE_2D, 0, m_pixel_format, m_pixel_type, (GLvoid*) m_raw_data[layer] )
但是,检索整个 GL_TEXTURE_2D_ARRAY 确实有效:
glGetTexImage(GL_TEXTURE_2D_ARRAY, 0, m_pixel_format, m_pixel_type, (GLvoid*) data );
如果我需要在仅修改单个图层的数据的情况下跨 2D 纹理数组的所有图层进行复制,显然会降低性能。
有没有办法只复制 GPU->CPU 的单层 GL_TEXTURE_2D_ARRAY?我知道有相反的情况(即 CPU->GPU),所以如果没有,我会感到惊讶。
【问题讨论】:
标签: qt opengl textures texture2d