OpenGL: Performance impact of point size
In the course of our work on Plasma, getting the best possible performance out of the iPhone has been one of our top priorities. One of our goals was to get quantitative measurements of the performance of the various iPhones and iPod Touches to get a real sense of the capability space represented by these devices. This post is the first of six articles detailing the results of our work.
Background
At one point we were looking at using GL_POINTS for some of the particles in our app, but the graphics requirements just about caused the iPhone 3G to burst into flame. One thing that I tried fairly early on was using fewer, larger points instead of a large number of small ones.
Both configurations resulted in terrible performance on the 3G, and I eventually I setup a separate, sandbox application to see if we could characterize what was going on.
ES 1.1 Testbed Application

To this end, I developed an entirely separate codebase, based in large part on the code samples provided by Aaftab Munshi, Dan Ginsburg, Dave Shreiner in support of their very excellent OpenGL® ES 2.0 Programming Guide. Using this application allowed us to try out different configurations in the simplest possible program and get a qualitative and quantitative sense of how the changes affected performance.
The application uses OpenGL 1.1 (so that we could get an apples-to-apples comparison across all three devices) to render 1000 points in a continuous particle animation, with an initial point size of 12. Double tapping the screen successively increases the point size to 24, 48, and 64. As can be seen from the screenshots below (taken from a 3GS) the performance for a fixed number of particles drops significantly as the point size goes up.
Test results: size matters
The results of the tests on the three platforms considered appear below.
| Point Size | 3GS | 2G Touch | 3G |
|---|---|---|---|
| 12 | 60 fps | 60 fps | 50 fps |
| 24 | 55 fps | 45 fps | 33 fps |
| 48 | 43 fps | 26 fps | 19 fps |
| 64 | 32.5 fps | 18 fps | 12.5 fps |
In every case, performance dropped significantly, most dramatically on the iPhone 3G. At a point size of 12, the 2G Touch and the 3GS ran at about the same speed, with the 3G clocking in at about 17 percent slower. At the extreme range, the 3GS had its performance almost cut in half, while the 2G Touch and 3G had suffered performance decreases of 70 percent and 75 percent, respectively.
iPhone 3GS Performance Gains
What's interesting about this is not just that performance drops as you make your points larger, but that the iPhone 3GS starts to show a very large performance advantage over its predecessors at larger point sizes. At a point size of 64, the iPhone 3GS is still running at a very reasonable 32.5 fps, about 2.6 times faster than the iPhone 3G.
![]()
Conclusions
Obviously, point size has a significant impact on the iPhone's overall 3D performance, but this effect is substantially ameliorated on the more powerful 3GS. We are only considering cases in which points are texture mapped and blended, so colored points without blending may be affected to a lesser degree than shown here.
In any case, if large particles are desired, better results may be obtained using textured quads instead of points. We'll have more to say on this option later.