opengl的缓冲区可以映射到CUDA的地址空间,当做global memory被访问。
3、映射VBO
4、使用
5、解除映射
6、解除注册
7、删除VBO
这样做可以使计算得到的数据直接可视化,提升速度。
因为数据存储在设备端,没有设备端到主机端的传输耗费,不论计算还是可是化都相当的快。
具体使用步骤:
1、创建VBO
glGenBuffers(1, vbo);
glBindBuffer(GL_ARRAY_BUFFER, *vbo);
glBufferData(GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
2、注册VBO
struct cudaGraphicsResource *cuda_vbo_resource;
cudaGraphicsGLRegisterBuffer(&cuda_vbo_resource, *vbo, cudaGraphicsMapFlagsWriteDiscard);
3、映射VBO
cudaGraphicsMapResources(1, &cuda_vbo_resource, 0);
cudaGraphicsResourceGetMappedPointer((void**)&dptr, &num_bytes, cuda_vbo_resource);
4、使用
launch_kernel(dptr, mesh_width, mesh_height, animTime);
5、解除映射
cudaGraphicsUnmapResources(1, &cuda_vbo_resource, 0);
6、解除注册
cudaGraphicsUnregisterResource(cuda_vbo_resource);
7、删除VBO