Opengl 为什么cudaGLSetGLDevice失败,即使它是在主函数的第一行中调用的

Opengl 为什么cudaGLSetGLDevice失败,即使它是在主函数的第一行中调用的,opengl,interop,cuda,Opengl,Interop,Cuda,我想使用OpenGL和CUDA之间的互操作性。我知道,正如一些教程所说,第一步是选择设备。但是,当我在主函数的第一行中调用cudaGLSetGLDevice0时,程序退出,并显示信息cudaSafeCall运行时API error 36:无法设置,而设备在此过程中处于活动状态 实际上,尽管我在调用CUDAGLestDevice之前使用了cudaDeviceProp和cudaChooseDevice,但错误仍然存在 相信我,我的电脑只有一个GPU,9800GT。我知道调用cudaGLSetGLDe

我想使用OpenGL和CUDA之间的互操作性。我知道,正如一些教程所说,第一步是选择设备。但是,当我在主函数的第一行中调用cudaGLSetGLDevice0时,程序退出,并显示信息cudaSafeCall运行时API error 36:无法设置,而设备在此过程中处于活动状态

实际上,尽管我在调用CUDAGLestDevice之前使用了cudaDeviceProp和cudaChooseDevice,但错误仍然存在

相信我,我的电脑只有一个GPU,9800GT。我知道调用cudaGLSetGLDevice应该优先于任何其他CUDA函数,所以我把它放在主函数的第一行


我使用Windows SDK来呈现OpenGL而不是glut,这有问题吗?

在调用cudaGLSetDevice之前,需要在OpenGL上下文中初始化。如果是glut glutInitargc,则为argv;被称为。在使用任何cudaopengl互操作性函数调用之前初始化opengl上下文。

谢谢dude。但我像NeHe的框架一样使用Windows SDK,而不是glut。如果没有弄错,我认为上下文初始化是ChoosePixelFormat SetPixelFormat wglCreateContext wglMakeCurrent。因此,在调用这些函数之后,我调用了cudaGLSetGLDevice。然而,错误仍然存在。你介意再帮我一点吗?谢谢。这个答案部分正确。除了设置OpenGL上下文,我们还需要在cudaGLSetDevice之前使用glewInit。