0

我想使用 CUDA 操作我在 opengl 中使用的纹理。知道我需要为此使用 PBO,我想知道每次对 PBO 进行如下更改时是否必须重新创建纹理:

// Select the appropriate buffer
glBindBuffer( GL_PIXEL_UNPACK_BUFFER, bufferID);
// Select the appropriate texture
glBindTexture( GL_TEXTURE_2D, textureID);
// Make a texture from the buffer
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, Width, Height,GL_BGRA, GL_UNSIGNED_BYTE, NULL);

glTexSubImage2D 等是否从 PBO 复制数据?

4

1 回答 1

1

所有像素传输操作都适用于缓冲区对象。由于glTexSubImage2D启动像素传输操作,它可以与缓冲区对象一起使用。


用于像素传输的缓冲区对象和纹理之间没有长期联系。缓冲区对象的使用很像客户端内存指针用于glTexSubImage2D调用。它在那里存储数据,而 OpenGL 格式化并将其拉入纹理。完成后,您可以随心所欲地使用它。

唯一不同的是,因为 OpenGL 管理缓冲区对象,所以从缓冲区上传可以是异步的。好吧,你可以玩游戏,比如通过 GPU 操作(无论是来自 OpenGL、OpenCL 还是 CUDA)填充缓冲区对象。

于 2011-07-26T08:18:54.260 回答