yes, this is handy to remove degenerate tris on cards that support it, however, you can exclude all ATI cards AFAIK (except if they implemented this NV extensions in their latest stuff, but I highly doubt it ;))
(although this isn't really a problem is you rebuild the strips at runtime according the the primitive restart extension...)
and for dynamic data, unless perhaps on PCIE, I guess the gains from lower upload times due tu less vertices in tristrips would be quite advantageous compared to potential rendering gains with tris... (and if both tristrips and tris were ordered cache friendly, perfs are pretty much the same anyway, (didn't do extensive tests on this though.. the only difference except increased upload rates for tri lists (and it doesn't count if already in vid mem) would be the cost of evaluating degenerate tris, or restart indices (I have no idea of what this costs), so deciding on which one to use depends pretty much on the mesh, and on the usage (dynamic, static..)))
Triangle strips for absolutely no USE
I'll expand a little on what janos was saying.
Assuming you're using indexed primitives (which you absolutely should be), there are two basic cases of use:
1. Static Data (most of your vertices should be static data, says everything that I've read).
Static data doesn't have any bandwidth issues associated with using strips over lists. It does use up more space, but that's generally not as much of a concern as it used to be. Especially when we're dealing with tiny indices, instead of large vertices. So bandwidth is not a concern here.
2. Dynamic data.
I'd be willing to go out on a limb and say that, for most usages of dynamic data, the vertex data is dynamic, but not necessarily the indices. This may not be true for some things, but for those things that it IS true for, the bandwidth will be the same regardless of using strips or lists.
The only time when you might see a performance hit (exclusing a memory overrun which is unlikely to be caused SOLELY by using lists instead of strips) is in dynamic data with dynamic indices. But my guess would be those cases are few and far between.
As long as the vertices in your vertex buffer are in a strip-like order, lists won't perform any worse than strips, thanks to the wonderful vertex caching that modern cards have. They may even perform better on some cards.
Just make sure that your vertices are ordered in a cache-friendly manner.
Assuming you're using indexed primitives (which you absolutely should be), there are two basic cases of use:
1. Static Data (most of your vertices should be static data, says everything that I've read).
Static data doesn't have any bandwidth issues associated with using strips over lists. It does use up more space, but that's generally not as much of a concern as it used to be. Especially when we're dealing with tiny indices, instead of large vertices. So bandwidth is not a concern here.
2. Dynamic data.
I'd be willing to go out on a limb and say that, for most usages of dynamic data, the vertex data is dynamic, but not necessarily the indices. This may not be true for some things, but for those things that it IS true for, the bandwidth will be the same regardless of using strips or lists.
The only time when you might see a performance hit (exclusing a memory overrun which is unlikely to be caused SOLELY by using lists instead of strips) is in dynamic data with dynamic indices. But my guess would be those cases are few and far between.
As long as the vertices in your vertex buffer are in a strip-like order, lists won't perform any worse than strips, thanks to the wonderful vertex caching that modern cards have. They may even perform better on some cards.
Just make sure that your vertices are ordered in a cache-friendly manner.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement