我正在寻找一种方法来提高我的粒子系统性能,因为它在FPS方面非常昂贵.这是因为我打电话:
glDrawElements(GL_TRIANGLE_STRIP, mNumberOfIndices,
GL_UNSIGNED_SHORT, 0);
Run Code Online (Sandbox Code Playgroud)
我为我的应用程序中的每个粒子(可能在1000到5000个粒子之间)调用此方法.请注意,当增加到超过1000个粒子时,我的应用程序开始在FPS中下降.我正在使用VBO:s,但调用此方法时的性能太高.
任何想法如何使粒子系统更有效?
编辑:这是我的粒子系统绘制的东西:
glBindTexture(GL_TEXTURE_2D, textureObject);
glBindBuffer(GL_ARRAY_BUFFER, vboVertexBuffer[0]);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboTextureBuffer[0]);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndexBuffer[0]);
Vector3f partPos;
for (int i = 0; i < m_numParticles; i++) {
partPos = m_particleList[i].m_pos;
glTranslatef(partPos.x, partPos.y, partPos.z);
glDrawElements(GL_TRIANGLE_STRIP, mNumberOfIndices,
GL_UNSIGNED_SHORT, 0);
gl.glTranslatef(-partPos.x, -partPos.y, -partPos.z);
}
Run Code Online (Sandbox Code Playgroud)
你描述的方式,听起来你每个粒子都有一个自己的VBO.这不是应该怎么做的.将所有粒子放入单个VBO中,并使用单个glDrawElements或glDrawArrays调用立即绘制所有粒子.或者甚至更好,如果可用:使用实例化.