有关使用GPU内存OpenGL和OpenCL的文章会谈:
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, 400, NULL, GL_STATIC_DRAW);
vbo_buff = clCreateFromGLBuffer(ctx, CL_MEM_WRITE_ONLY, 2, &err);
明白为什么glBufferData的第三个参数设置为NULL是很重要的。这表明主机不会将数据传输到VBO。也就是说,VBO被配置为保存400个字节,但该内存不会在主机上分配。相反,将在GPU上分配400个字节,内核将通过访问只写缓冲对象vbo_buff来初始化VBO数据。
应用程序将创建并填充一次缓冲区,此时CPU /主存储器与GPU/GPU存储器之间会发生数据传输。之后,OpenGL和OpenCL在他们的本地内存上共同工作,在这些内存中共享他们的数据。您可以消除进一步的数据传输,并且可以使用更快的GPU内存和GPU(并行)处理能力。
来源
2013-06-13 06:14:49
Jer