0

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

4

1 回答 1

0

首先,异步上传绝不需要使用glTexSubImage3D; 它们适用于任何像素传递函数。

setData 等价于SubImage-class的OpenGL函数。或者至少,大多数重载都是setData带有MipMapGeneration标志的那个将为您分配存储空间(因为 Qt 的 OpenGL 抽象是一致性消亡的地方)。因此,您可以将 PBO 与setData.

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

于 2018-03-13T18:16:29.203 回答