我正在使用带有PointSprites的ParticleSystem(灵感来自于Cocos2D源代码)。但我想知道如何在OpenGL ES 2.0中重新构建此功能。
glEnable(GL_POINT_SPRITE_OES);
glEnableClientState(GL_POINT_SIZE_ARRAY_OES);
glPointSizePointerOES(GL_FLOAT,sizeof(PointSprite),(GLvoid*) (sizeof(GL_FLOAT)*2));
glDisableClientState(GL_POINT_SIZE_ARRAY_OES);
glDisable(GL_POINT_SPRITE_OES);
当使用OpenGL ES 2.0上下文时,这些操作会生成BAD_ACCESS错误。
那么我应该每个PointSprite使用2个三角形吗?但这可能不是很有效率(需要额外的顶点开销)。
编辑: 那么,从https://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528提供的解决方案,我的新问题是如何在批处理调用中传递多个不同的大小。我考虑使用属性而不是Uniform,但这样我就需要始终向我的着色器传递PointSize - 即使我没有绘制GL_POINTS。那么,也许需要第二个着色器(仅用于GL_POINTS)?!我不知道在绘制例程中每帧切换着色器的开销(因为如果使用粒子系统,则自然还要呈现常规的GL_TRIANGLES而不使用pointSize),有什么想法吗?