Opengl 从GPU内核复制具有位置和方向的空间对象 上下文

Opengl 从GPU内核复制具有位置和方向的空间对象 上下文,opengl,cuda,opencl,vbo,Opengl,Cuda,Opencl,Vbo,我正在使用GPU编程(OpenCL和CUDA, 但当然不是同时)为了科学目的。 我使用OpenGL进行显示 目标 我想画一个相同的物体,也就是群集粒子,可以是一个简单的三角形,在2D-N次的不同位置和不同的形状 以最有效的方式确定不同的方向,知道: 对象总是完全相同的 位置和方向在GPU上计算,因此存储在GPU内存中 粒子数N可能很大 当前解决方案 到目前为止,为了避免将数据发回CPU,我存储了位置和 VBO中的方向阵列并使用: glBindBuffer(GL_ARRAY_BUFFER, p

我正在使用GPU编程(OpenCL和CUDA, 但当然不是同时)为了科学目的。 我使用OpenGL进行显示

目标 我想画一个相同的物体,也就是群集粒子,可以是一个简单的三角形,在2D-N次的不同位置和不同的形状 以最有效的方式确定不同的方向,知道:

  • 对象总是完全相同的

  • 位置和方向在GPU上计算,因此存储在GPU内存中

  • 粒子数N可能很大

当前解决方案 到目前为止,为了避免将数据发回CPU,我存储了位置和 VBO中的方向阵列并使用:

glBindBuffer(GL_ARRAY_BUFFER, position_vbo);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, velocity_vbo);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, 0);

glDrawArrays(GL_POINTS, 0, N);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
以彩色编码的速度绘制一组点,而无需将阵列复制回CPU

我想做的是画一个完整的对象,而不是一个简单的点 使用类似的方法,即不将VBO复制回CPU

基本上我想在GPU上存储一个对象的模型 (显示列表?顶点数组?)并使用GPU上的位置和方向 在不将数据发送回CPU的情况下绘制对象N次

有可能吗?怎么可能?否则,我该怎么做


PS:我喜欢保持代码干净,因此我宁愿将显示问题与群集内核分开。

我相信您可以使用几何体着色器(OpenGL 3.2中提供)来实现这一点。有关具体信息,请参阅


在您的情况下,需要将几何体着色器的输入类型和输出类型分别设置为GL_点和GL_三角形,并且在几何体着色器中,为每个传入点顶点发射三角形的3个顶点。

这似乎是解决我的问题的一个好办法。有没有不使用扩展的替代方案?@Simon几何体着色器在OpenGL 3.2中可用,因此如果您的驱动程序支持该版本,则不需要扩展