We have an OpenGL-based cross-platform application that uses selection picking to select objects in the 3D scene by clicking at or hovering over objects with the mouse. We support a wide range of GPUs, including Intel. In fact, the majority of our customers have Intel integrated graphics chips (such as the G965) in their laptops and desktops. We are experiencing a feature degradation on Intel chipsets when upgrading to recent versions of the graphics driver in the area of object selection/picking.
- We follow a "text-book" method to detect which object is picked, using the GL_SELECT rendering mode and analyzing the hit array, following recepies found in the OpenGL Bible (blue book), the red book, NeHe, etc.
- The user-level symptoms are: (1) objects that are clearly outside the picking area (3x3 pixel ara under the mouse) are often mistakenly selected, and (2) often the selection picks a hidden object instead of the top-most, visible one.
- When analyzing the content of the hit array returned by the GL_SELECT mode, we found that all depth values carry the bogus -2147483648 value, which happens to be the lowest value of a 32-bit int, hinting that there may be some calculation error and subsequent truncation happening in the driver. Since all depth values are identical, depth-based ordering is impossible, which explains why we cannot pick the top-most object.
- Older drivers do not manifest the issue. For instance, version 126.96.36.19904 (10/6/2006) that was common on many Dell desktops till recently, works fine. After upgrading to 188.8.131.5226 (2/15/2008) picking no longer works. The latest driver available for the 965 series is 184.108.40.20616, which also manifests the issue. Rolling back to the 4704 version of the driver makes picking work again. So this is clearly a driver issue and not a hardware. Unfortunately rolling back to the old driver is not a viable solution for our customer base.
So, my obvious questions are:
- Anyone experiencing the same issue? Is this a known issue?
- Do we miss something? Is there some settings that need to be configured in the latest drivers to make picking work?
I wrote a small C-based application that demonstrates the problem, and I am very happy to supply it in both source and exe form if somebody needs it to look into the issue. Also, I can provide glView info if that is needed.