据我了解,在纹理数组或 3D 纹理的情况下,QOpenGLTexture::setData 等效于 glTexImage3D。现在如果我想在运行时使用 PBO 来更新纹理,我需要使用 glTexSubImage3D 而不是 glTexImage3D,那么 Qt 纹理中的等价物是什么?
问问题
599 次
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 回答