CUDA OpenGL 互操作性错误:cudaGraphicsResourceGetMappedPointer 资源未映射为指针

问题描述 投票:0回答:0

我正在尝试编写一些代码,在使用 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");
}
c++ opengl cuda interop glfw
© www.soinside.com 2019 - 2024. All rights reserved.