2011-07-26 70 views
0

我想操纵一个使用CUDA在opengl中使用的纹理。知道我需要使用这个公益我不知道如果我有我每次做这样的更改PBO时间来重新创建纹理:使用opengl/CUDA互操作性时,我是否需要重新创建纹理?

// 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

全部pixel transfer operations使用缓冲区对象。由于glTexSubImage2D启动像素传输操作,因此可将其用于缓冲区对象。


在用于像素传输和纹理的缓冲区对象之间没有建立长期连接。缓冲区对象的使用非常类似于客户端内存指针将用于glTexSubImage2D调用。它在那里存储数据,而OpenGL格式并将其拖入纹理中。一旦完成,你可以随心所欲地做任何事情。

唯一的区别是,因为OpenGL管理缓冲区对象,所以缓冲区上传可以是异步的。那么你就可以玩类似GPU操作的缓冲区对象(无论是OpenGL,Op​​enCL还是CUDA)。

+0

我知道我可以使用它,但我想知道他的缓冲区是如何用于创建纹理,纹理使用缓冲区来存储其数据还是复制数据? – Dirk

相关问题