glTexSubImage3D 不更新纹理

Posted

技术标签:

【中文标题】glTexSubImage3D 不更新纹理【英文标题】:glTexSubImage3D not updating texture 【发布时间】:2020-01-15 14:42:40 【问题描述】:

我正在尝试使用glTexSubImage3D 仅更新具有 16 个 4096*4096 纹理的大型纹理数组中的一个纹理的一部分。但是,我无法让它工作。该调用不会引发任何错误。 (虽然将宽度设置为超过 4096 确实如此)。

glTexSubImage3D(  GL_TEXTURE_2D_ARRAY, // target
                                    0, // level
                                    0, // x offset
                                    0, // y offset
                                    0, // z offset
                          TEXTURE_DIM, // width
                          TEXTURE_DIM, // height
                                    0, // depth
                              GL_RGBA, // format
                     GL_UNSIGNED_BYTE, // type
                          textures[1]); // zeroed memory

这很奇怪,因为当我用glTexImage3D 替换这个调用时,纹理会更新:

glTexImage3D(GL_TEXTURE_2D_ARRAY, // target
                               0, // level
                        GL_RGBA8, // Internal format
                     TEXTURE_DIM, // width
                     TEXTURE_DIM, // height
                               1,  // the number of layers 
                               0,  // 0 required
                         GL_RGBA,  // format
                GL_UNSIGNED_BYTE,  // type
                     textures[1]); // zeroed memory

我是否遗漏了glTexSubImage3D 需要的一些额外步骤?可能是什么问题? 感谢您的任何指点

【问题讨论】:

这里的depth arg 到glTexSubImage3D 不应该是1 吗? 【参考方案1】:

depth 参数在您的情况下必须为 1。注意,更新区域的大小是widht * height * depth。如果 depth 为 0,那么什么都不会改变。

【讨论】:

以上是关于glTexSubImage3D 不更新纹理的主要内容,如果未能解决你的问题,请参考以下文章

glTexSubImage3D vs QOpenGLTexture setData

OpenGL ES 在不使用 glPixelStorei 的情况下更新纹理的子部分

OpenGL - 纹理加载不正确

生成纹理的问题

OpenGL 旋转 2D 纹理

Three.js 更新纹理图片