2011-07-26 117 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

相關問題