Hello All,

I have some code that is basically used to draw thousands of screen space/aligned icons using glBitmap calls that have been compiled into GL Display lists. However, I want to port that code to another application that is using the GL core profile (and thus both glBitmap and Display Lists are unavailable). I want to know the best way of accomplishing this? As far as I am aware, I know the following two options are available:

1) Place each individual quad (as 2 triangles) into a VBO and draw it in ortho (with the correct modelview/projection matrices that will scale and align the quads in screen space) and then just do simple texturing inside the fragment program. In this case you can either use a single VBO per quad or a single VBO containing all quads and drawn with indices but either way you have to draw each quad individually as you need different matrices per quad. This leads to a state change per quad causing a hit in performance. I would like to avoid that performance hit.

2) Place all the quads into a single VBO (as a collection of thousands of points) and then use vertex and geometry shaders to create screen scaled/aligned quads and the perform texturing in the fragment shader. This has the advantage of a single GL state for all quads (as you can transform the points with the same matrices as the geometry shader is doing the alignment) but it has the disadvantage of requiring a geometry shader (there are concerns on my team about global support across all platforms/hardware). My team would prefer to avoid using geometry shaders (unless absolutely necessary).

Is there another way to accomplish this task? It seems to me like a common requirement for applications? The need to draw icons in a quick and efficient fashion? What am I missing?