OpenGL:同时绘制粒子

时间:2015-06-18 22:10:29

标签: opengl parallel-processing geometry-shader

我正在阅读文章"Particles / Instancing"

这是引用:

  

显然,我们需要一种同时绘制所有粒子的方法。

     

有很多方法可以做到这一点;这里有三个:

     

(a)生成单个VBO,其中包含所有粒子。简单,有效,   适用于所有平台。

     

(b)使用几何着色器。主要不在本教程的范围内   因为50%的计算机不支持此功能。

     

(c)使用实例化。并非适用于所有计算机,但绝大多数都是   它们。

是的,(a)同时实施。

对于(c),我认为glDrawArraysInstanced等于glDrawArrays的循环。 这是真正的同时实施吗?

对于(b),我认为我们可以使用顶点来产生相同的效果。

1 个答案:

答案 0 :(得分:0)

对于实例化,glDrawArraysInstanced具有与多次调用glDrawArrays相同的视觉效果,但是,如果您的驱动程序支持真正的实例化(几乎所有桌面GPU驱动程序都会支持,以及许多移动设备),然后它会表现得更好。节省的原因是CPU和GPU之间的数据传输减少,GL API调用次数减少。

目前,几何着色器也在绝大多数桌面GPU驱动程序上 - 文章已有几年历史了。移动应用速度较慢,因为它不是GLES 3.0的核心功能。通常,粒子是广告牌四边形(4个顶点),但顶点可以通过具有单个点的几何着色器和一些元数据生成,而不是将所有4个顶点放入VBO中。这只是减少了从CPU到GPU的数据传输大小。