This is sort of a follow up the the forum topic Selection/Picking.
When using the GL.RenderMode(RenderingMode.Select) the selection is hardware accelerated, but vendors intentionally degrade the performance for consumer level cards. The is because high end modeling applications use this rendering mode for selection and the hardware vendors want to be able to charge more for a "workstation" graphics card.
Both ATI and NVidia have this issue and getting different driver versions will enable full acceleration on consumer cards. Of course then you can't use the latest drivers which is not a good thing. There are also some posts about "changing" your consumer level card so that it looks like a workstation card and can use the latest workstation drivers.
As for selection in OpenGL 3.0, that is a good question. Some sort of hardware selection of primitives will be supported whether it is GL_SELECT or some programmable shader that outputs to a buffer. If anyone has more information on this I would love to hear about it.
So for selection we have three options:
- GL_SELECT - Hardware accelerated but degraded performance through drivers for consumer level cards.
- Software - Write you own algorithms to determine hit testing and selection.
- Color Picking - Where each primitive is given a unique color, drawn into a buffer, and the buffer is checked for it's color.
GL_SELECT and Software allow selection of objects even if they are behind another object. Color picking only knows the color of the object that is at the front of the buffer.
There are two types of color picking.
- Viewport where all the visible primitives can be selected from a N by N area.
- FBO where you create a single pixel FBO thus allowing you to select only one item.
The FBO approach has the added benefit that it takes very little fill rate and thus may be very fast.
I do have a worry about the color picking method since if aliasing is enabled it would cause pixels at the edges of primitives to blend and give a different color which would give inaccurate results for selection.