我想操纵我使用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中复制数据?
答案 0 :(得分:1)
所有pixel transfer operations都可以使用缓冲区对象。由于glTexSubImage2D
启动像素传输操作,因此它可以与缓冲区对象一起使用。
用于像素传输的缓冲区对象与纹理之间没有长期连接。缓冲区对象的使用方式很像客户端内存指针用于glTexSubImage2D
调用。它是存储数据,而OpenGL格式并将其拉入纹理。一旦完成,你可以随心所欲地做任何事情。
唯一的区别是,因为OpenGL管理缓冲区对象,所以从缓冲区上传可以是异步的。好吧,你可以玩游戏,比如从GPU操作中填充缓冲区对象(无论是来自OpenGL,OpenCL还是CUDA)。