Multiple Monitors / Graphics Cards with OpenGL

In a nutshell, here’s what I’m stuck on.

In a situation where a user has two monitors attached to the system, how do I create two fullscreen windows with valid OpenGL rendering contexts?

CASE 1: DUAL HEAD PRIMARY + SECONDARY MONITORS
I’m guessing that in the case of a dual head graphics card with both monitors attached to the desktop this is simply a case of finding the virtual desktop coordinates for each monitor, creating a window within each of these coordinates (so that no window overlaps both monitors) and then just change the display settings to Fullscreen etc. That all seems logical enough. You’d then have one OpenGL driver responsible for both rendering contexts.

CASE 2: DUAL HEAD PRIMARY + INDEPENDANT MONITOR
In another situation, again with a dual head card, say one of the monitors is NOT attached to the desktop. This is known as an independant display. How would I go about creating a window on the second monitor here? Again the same driver would be responsible for rendering. No problem there, once the window is created!

CASE 3: TWO VIDEO CARDS BY DIFFERENT MANUFACTURES
This is the worst situation. It doesn’t matter in this case whether or not both monitors are attached to the desktop or not - the methods would be the same as the first two cases. But the problem is with the drivers. Would each seperate driver be responsible for running each fullscreen window? Maybe I’m being dump here, but I can see how an app can link to each vendor specfic OpenGL driver. Is this scenario even possible?

All I want to do is use a second monitor if one exists to display extra info. I’m sure that the first case must be pretty simple to implement. It’s the second two that I’m expecting will be problematic.

BTW - I want full hardware acceleration on both monitors, not software.

I’d really appreciate as much info on this as possible. espeacially on creating a window in an idepentant monitor setup. Unfortuanetly I don’t have access to two accelerated cards very often, so I’m going to be coding ‘blind’ for most of the time.

Thanks a lot

[This message has been edited by Shag (edited 01-30-2002).]

Great question.

Really hope the IHV guys have answers.

I’ve tried what you speak of via independently loading different vender*gl32.dlls and grabbing the functions. However, i’ve never gotten the second monitor to work-

I kept hitting sticky issues with connecting to GL and getting an accelerated RC.

A couple of quotes …

Microsoft online MSDN

In a multiple monitor environment, only one graphics device can be VGA compatible. This is a limitation of computer hardware which requires that only one device respond to any hardware address. Because the VGA hardware compatibility standard requires specific hardware addresses, only one VGA graphics device can be present in a machine and only this device can physically respond to VGA addresses. Thus, applications that require going full screen will only run on the particular device that supports VGA hardware compatibility.

OpelGL FAQ

Many OpenGL implementations support multiple monitor configurations. These come in a variety of different flavors:

One display is hardware accelerated, the rest are not.
All heads are accelerated as long as OpenGL windows do not span display boundaries.
As above, with support for OpenGL windows that span multiple displays.
All of the above, with support for stereo.
All of the above, with support for heterogeneous graphics cards vendors.

blah …

Microsoft operating systems allow two OpenGL devices in a single system, but only the primary device is hardware accelerated. To work around this issue, many vendors have provided their own multiple monitor solutions, so that hardware acceleration is available on both displays.

Aren’t these two quotes ‘potentially’ contradictory?

Which vendors support fullscreen hardware acceleration in a multicard setup?

Has anyone got an answer? NVIDIA? ATI?

[This message has been edited by Shag (edited 01-31-2002).]