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;
)。您必须先分配内存,然后才能将内容存储到其中,但是您不需要分配内存再次,之前已经分配过。
根据我的理解,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;
)。您必须先分配内存,然后才能将内容存储到其中,但是您不需要分配内存再次,之前已经分配过。