OpenGL ES performance outline
For comparison against other 3D Engines, I wanted to publish my frames per second and triangles per second results.
I just want to be sure I didn’t miss any important trick I could have used to speed everything up.
3D Engine Feature Outline:
I already explained my engine in this post. To recoup:
I have enabled :
- TexCoords
- Normals and GL_NORMALIZE
- COLOR_ARRAY
- VERTEX_ARRAY
- I draw using glDrawElements(GL_TRIANGLES,..) using an unsigned short array for the indices
- I issue a second draw command “glDrawArrays” for the UI, but switching this off doesn’t have any performance impact
- Antialiasing/Multisampling is switched on using an msaabuffer with a samplesize of 4
My interleaved Array has the following structure and a size of 26 bytes:
typedef struct _iVertex3D
{
short uv[2];
shortVert n; //just short[3]
unsigned int color;
Vertex3 v; //just float[3]
} iVertex3D;
Ideas I haven’t tried to improve performance:
- stripify all my geometrys and call glDraw(GL_TRIANGLES_STRIP,…) because then I’d have to add quite a lot of degenerate vertices to glue different parts of geometry together
Testing device:
Second Generation iPod Touch, that means MBX GPU and a ARM11 620 (533) Mhz CPU.
I tried painting using VBO’s but it didn’t change a single FPS, so I can confirm it doesn’t make a difference on MBX GPU’s!
FPS Results:
I tried different sizes of maps, that yielded different amount of vertices/triangles. I also added a column “triangles/second” to have a more stable metric of comparison against other devices/engines.
Please keep in mind I capped FPS at 30 to improve battery performance and omit unneccessary rendering!
| map size | FPS | triangles | vertices | triangles/second | vertices/second |
| 5 | 30 | 10030 | 6318 | 300900 | 189540 |
| 6 | 30 | 12074 | 7665 | 362220 | 229950 |
| 7 | 25.5 | 16163 | 9523 | 412156.5 | 242836.5 |
| 7 | 24 | 18063 | 10519 | 433512 | 252456 |
| 8 | 22 | 19207 | 11561 | 422554 | 254342 |
| 8 | 20 | 22045 | 13043 | 440900 | 260860 |
| 9 | 14.7 | 30072 | 18964 | 442058.4 | 278770.8 |
So appearently the limit here is imposed by the triangles/second, that is the amount of triangles the MBX GPU running my 3D Engine is roughly at 440000.
That would also suggest I can draw up to 14600 triangles without loosing framerate, that is without the framerate falling below 30.
August 2, 2010 at 11:01 am
[...] the old iPod 2G I own, I tested GPU performance in this post and also confirmed that there was no performance advantage for using [...]