我有一个名为update
的CUDA核函数,需要输入两个float*作为参数并更新第一个指针。在更新之后,我需要使用来自第一个指针的新数据更新OpenGL的VBO。现在我一直在寻找一些cuda-GL交互方法,但对于我来说,这真的很难理解。我正在寻找一种干净简单的方法来使用设备指针的数据更新VBO。我想象中的实现是这样的:
//initialize VBO
glGenBuffers(1, &vboID);
glBindBuffers(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*SIZE, (void*)0, GL_STREAM_DRAW);
cudaMalloc((void**)&positions, sizeof(float)*SIZE);
//per frame code
glBindBuffer(GL_ARRAY_BUFFER, vboID);
update<<<SIZE/TPB, TPB>>>(positions, velocities);
//somehow transfer the data from the positions pointer to the VBO
glBindBuffer(GL_ARRAY_BUFFER, 0);