使用opengl / CUDA互操作性时,是否需要重新创建纹理?

时间:2011-07-26 07:18:49

标签: opengl cuda textures pbo

我想操纵我使用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中复制数据?

1 个答案:

答案 0 :(得分:1)

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


用于像素传输的缓冲区对象与纹理之间没有长期连接。缓冲区对象的使用方式很像客户端内存指针用于glTexSubImage2D调用。它是存储数据,而OpenGL格式并将其拉入纹理。一旦完成,你可以随心所欲地做任何事情。

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