我正在使用带有 PointSprites 的 ParticleSystem(受 Cocos2D Source 启发)。但我想知道如何重建 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
可以在批处理调用中传递许多不同的大小。我想过使用属性而不是统一,但是我需要始终将 PointSize 传递给我的着色器——即使我没有绘制 GL_POINTS。那么,也许是第二个着色器(仅用于 GL_POINTS 的着色器)?!我不知道在绘制例程中每帧切换着色器的开销(因为如果使用粒子系统,我自然也希望在没有 pointSize 的情况下渲染常规 GL_TRIANGLES)......对此有什么想法吗?