Hi guys! I’m making an OpenGL application and I got some questions about PERFORMANCE.
Is it better to do a single call to GL_TRIANGLES and make up an object with 24 vectors or a call to GL_TRIANGLES (with 6 vectors) plus a call to GL_QUADS (with 12 vectors)?
To clarify this question, I made up some Pictures.
This first one ( http://www.helioconsolaro.hpg.com.br/triangle1.gif ) as you can see, is made up with a call to GL_TRIANGLES and a call to GL_QUADS. By adding the vectors I spend in both calls, we got 18.
Yeaah! I tried that, but at a certain time, it’s impossible for me continue using TRIANGLE_STRIP. It’s cause i’m using Back Cull Face, and the object disappear deppending on the angle I’m looking to.
I think you should use one strip and two individual triangles. Backface cull operates on a per-triangle basis, not a per-strip basis. If the whole thing is dissapearing, assume your triangles are being described the wrong way around.
a single triangle strip should work very simmple. its basically the same as a cube, with one side forgotten, and a cube you can unrol into one strip as well.
depending on driver/gpu you wont even notice a difference… i dont know really wich one would win. best is, you compile this tiny object into a display list. then it doesn’t mather anymore as the driver can optimize it (if it cares…). so what?
At the small number of vertices you’re talking about, there should be no noticeable difference. You ought to be fill rate (and overhead!) bound at that level.
Once you start throwing around reasonably amounts of geometry, you will find it faster to submit geometry using vertex arrays and using DrawRangeElements(), and balance using as few calls to DrawRangeElements() as possible with sending as little data as possible across the bus (i e, the fewest verts).
If you’re still using a card that doesn’t have hardware transform, then the rules are slightly different, but only slightly. And at 24 verts, the number of verts or kinds of primitives will not matter even with software transform.