我正在尝试编写一些代码,在使用 CUDA 计算的 OpenGL 窗口中显示一个数组。我试图将创建一个简单示例程序所需的东西复制在一起,该示例程序具有一个设备数组,我可以使用 CUDA 更改该设备数组,该数组由 OpenGL 显示。
当我尝试获取 cudaGraphicsResource 的映射指针时,它告诉我它没有映射为指针,即使在它之前的调用是 cudaGraphicsMapResources 调用,它没有返回错误。我的代码是
int main() {
cudaError_t err;
err = cudaGLSetGLDevice(0);
printCudaError(err, "cudaGLSetGLDevice");
// Initialize GLFW
if (!glfwInit()) {
return -1;
}
// Create a GLFW window
GLFWwindow* window = glfwCreateWindow(width, height, "My Window", NULL, NULL);
if (!window) {
glfwTerminate();
return -1;
}
// Make the window's context current
glfwMakeContextCurrent(window);
// Create a GL texture object
GLuint tex;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
// Register the GL texture object with CUDA
cudaGraphicsResource* cuda_tex_resource;
err = cudaGraphicsGLRegisterImage(&cuda_tex_resource, tex, GL_TEXTURE_2D, cudaGraphicsRegisterFlagsNone);
printCudaError(err, "cudaGraphicsGLRegisterImage");
// Map the CUDA resource to a device pointer
unsigned char* d_image;
size_t size;
err = cudaGraphicsMapResources(1, &cuda_tex_resource);
printCudaError(err, "cudaGraphicsMapResources");
err = cudaGraphicsResourceGetMappedPointer((void**)&d_image, &size, cuda_tex_resource);
printCudaError(err, "cudaGraphicsResourceGetMappedPointer");
}