2013-07-15 52 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问题但似乎是这样。