1

我正在尝试与在我的 K20 上运行的 cuda 和在我的 quadro 上运行的 opengl 进行一些跨卡通信,但我似乎无法注册我想与 cuda 一起使用的纹理。

我的代码看起来像这样

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();

从 Visual Studio 10 调试器运行时,cudaGraphicsGLRegisterImage 会导致访问冲突

但...

如果在没有调试器的情况下运行,cudaGetErrorString() 将吐出“无效参数”

我不确定问题可能是什么,并且由于不同的错误消息而变得更加混乱。

4

1 回答 1

1

Well I seem to have figured out what was wrong I changed the line...

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

to...

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

I am not sure why cuda has a problem with GL_RGBA but that seems to be the case.

于 2013-07-15T18:56:41.980 回答