2013-07-15 50 views
0

我想與我的K20和運行在我的quadro上的opengl上運行的cuda做一些交叉卡通信,但我似乎無法註冊我想用於cuda的紋理。CUDA opengl互操作和cudaGraphicsGLRegisterImage導致錯誤

我的代碼看起來從Visual Studio 10的調試器

但是...運行時像這樣

glGenTextures(1, &texId); 
glBindTexture(GL_TEXTURE_2D, texId); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureSize, textureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 
glBindTexture(GL_TEXTURE_2D, 0); 

checkGLError(); // Passes 


// This will cause an Access Violation when run from visual studio 10 debugger 
cudaGraphicsGLRegisterImage(&texRes, texId, GL_TEXTURE_2D,cudaGraphicsRegisterFlagsNone); 

// If ran with out debugger, cudaGetErrorString() will spit out "invalid argument" 
checkCudaError(); 

cudaGraphicsGLRegisterImage導致訪問衝突

如果用了調試然,cudaGetErrorString()會吐出「無效論點」

我不確定問題可能是什麼,它是由比較混亂不同的錯誤信息。

+0

你有沒有看過CUDA SDK附帶的OpenGL interop demo? –

+0

是的,但我找不到使用cudaGraphicsGLRegisterImage。 – TofuNinja

+0

我認爲高斯模糊演示使用這種方法來映射OpenGL紋理 –

回答

0

嗯,我似乎想通了什麼是錯的,我改變了線......

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureSize, textureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 

到...

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, textureSize, textureSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); 

我不知道爲什麼CUDA與GL_RGBA問題但似乎是這樣。