Instancing

Would be great to sometime in the near future get instancing support in OpenGL (as seen in Direct3D 9c). I can see this becoming a show stopper for serious users in the near future if it doesn’t make it into OpenGL.

For those that don’t know, instancing allows for sending many objects in a single draw call by embedding the transform matrices in a stream along with the vertex data. When drawing like 10,000 objects with the same geometry (like a bunch of rocks) it becomes very slow when you have to push and pop the model matrix, multiply it and send your vertex data. In my experience, the instancing API in D3D gets at least a 2x speed increase on supporting hardware.

The actual functionality that allows this to be possible is useful for more than just mesh instancing (not to deny the usefulness of instancing, of course).

Yes, such an extension would be very welcome in OpenGL. We may not see it for a while though; the ARB seems to be pretty slow these days.

A good approximation to the Instancing API can be done by using displaylists. Make one list to render the data, and one list per instance using the instance specific data. Then use glcallLists(array) where the array contains the datalist every second entry, and the instancelists for each instance to be rendered that call.

A good driver that compiles the lists well, will give equivalent or better performance to the Instancing API. (better if COM calling convention overhead is bad in DX9).

A good driver that compiles the lists well, will give equivalent or better performance to the Instancing API.
No, it will not.

Between each display list render will be a state change (new matrix); whether user code specifies it or not, someone is going to provoke a state change. The entire purpose of the “instancing” system is to avoid any state changes between each separate instance. As such, the DX method will be much faster.