glTexSubImage3D 与 QOpenGLTexture setData

glTexSubImage3D vs QOpenGLTexture setData

根据我的理解,QOpenGLTexture::setData 在纹理数组或 3D 纹理的情况下等同于 glTexImage3D。现在,如果我想在运行时使用 PBO 更新纹理,我需要使用 glTexSubImage3D 而不是 glTexImage3D,Qt 纹理中的等效项是什么?

首先,asynchronous uploads in no way require the use of glTexSubImage3D; they work for any pixel transfer function.

其次,setData相当于OpenGL的SubImage-class职能。或者至少,most overloads of setData are; the one that takes a MipMapGeneration flag 会为您分配存储空间(因为 Qt 的 OpenGL 抽象是一致性消失的地方)。因此,您可以将 PBO 与 setData.

一起使用

OpenGL 中的纹理更像是指针。 allocateStorage就像分配内存,将分配的内存存储在一个指针中(int *p = new int[20];)。 setData 就像访问分配的对象并将数据复制到其中 (p[0] = 5;)。您必须先分配内存,然后才能将内容存储到其中,但是您不需要分配内存再次,之前已经分配过。