Multi Monitor Support

I am currently developing some software which need multi monitor support (2 17" CRT monitors) e.g. One large desktop at 2048x1024. I am currently using the Matrox G450 MAX card but this does not support
OpenGL in multi monitor mode. I have been looking at the Nvidia web site about the Geforce 3/4 chips and they appear to do it OK.

Is this correct?

Does OpenGL itself support multi monitor hardware acceleration and if so which is the best graphics card to use this with? The only reason I am asking is that I have heard comflicting reports that OpenGL does not support hardware acceleration over multi monitors.

Originally posted by brookal:
[b]I am currently developing some software which need multi monitor support (2 17" CRT monitors) e.g. One large desktop at 2048x1024. I am currently using the Matrox G450 MAX card but this does not support
OpenGL in multi monitor mode. I have been looking at the Nvidia web site about the Geforce 3/4 chips and they appear to do it OK.

Is this correct?

Does OpenGL itself support multi monitor hardware acceleration and if so which is the best graphics card to use this with? The only reason I am asking is that I have heard comflicting reports that OpenGL does not support hardware acceleration over multi monitors.[/b]

I know that my Radeon 8500 work with dual monitor with OpenGL, but only on NT based OSes… But I don’t get independent control over the monitors, they just act as one big monitor.

>>>Does OpenGL itself support multi monitor hardware acceleration and if so which is the best graphics card to use this with? The only reason I am asking is that I have heard comflicting reports that OpenGL does not support hardware acceleration over multi monitors.<<<<

Since the experienced users didnt answer, ill give it a shot…

GL doesnt care about what graphics card is running and on which monitor is displaying it, so that means it is possible to create drivers that can do multimonitor.

2 choices you have is having 2 video cards, and 1 monitor on each or 1 video card with 2 outputs.

Not sure what video cards allow you to have hw accel on both with separate rendering on each monitor, but Im guessing 3dlabs has solved this problem.

V-man

The Windows interface to OpenGL does not allow you to get accelerated OpenGL on two monitors if you use two cards (one per monitor). The reason for this is that it can’t move OpenGL contexts between graphics drivers (quite understandably :slight_smile:

If you’re using one card with two outputs (GF2MX, Radeon, GF4, Matrox, etc) then you will get acceleration on both monitors, even under Windows.

I am going to be using one card with two outputs. I am currently using the Matrox card but the performance is fairly poor with OpenGL.

On the Geforce cards, there appears to only be one monitor output and one tv/dvd output. Is it possible to drive a second monitor from this output?

I second what jwatte said. There is no opengl support (in MSWindows) for two cards driving two monitors - only the primary card (which you can set in display properties) will be used when creating an opengl context - the context creation will fail if the target window is on the secondary monitor.
Maybe if you changed (in software) which monitor is the primary between two opengl context creations, you might get away with it…? Or would the first context be destroyed when changing which card is primary?
This madness in the way opengl works with MSWindows has forced me to use direct3d on the secondary card, for functional displays. Direct3d and opengl work ok together.

A AGP and PCI graphics card from the same vendor in one system could support hardware accelerated OpenGL on both screens. It is all up to the OpenGL driver. We support this with the PCI and AGP version of our GVX1 card, for example.

More commonly these days you see one AGP card with two monitor outputs. The obvious advantage of that is that now both screens are connected to the fast AGP bus, whereas in the two card solution, one is on the slow PCI bus. Thus if you have one window spanning both screens, you’ll be rendering limited by the PCI card.

Barthold
3Dlabs

Brookal,

I was specific about which GeForce cards I mentioned. Specifically, the GeForce 2MX has support for multi-monitors (though not all 2MX cards use that) as do the GeForce 4 cards. Other GeForces typically don’t.

If you find a card with one VGA out and one DVI out, then you can get an adapter from DVI to VGA. Often, the adapter comes with the card. Many Radeons come like that, including the Radeon 8500, which seems to be a fair price/performance deal, although a little rough around the drivers.

As Barthold said, there are 3dlabs cards which support this, too, although they’re outside of my target price range so I couldn’t tell you about specific experiences.

I’ve tried AGP Nvidia based dual windowing OpenGL applications (using inno3D dual head Geforce 2MX card and 1.5GHz+ dual CPU Xeon machine), both with a single application and with a multi-threaded application with tight synchronization. The bottom line I am seeing is that the second OpenGL context or window (using twinview) is not accelerated properly at all. For 1 to 2K of vertices and less than 20 polygons (2D performance) I am seing 30 to 40Hz and the other is lucky to make 5Hz (under both windows 2K and RedHat Linux 7.2).

It seems (I could be wrong) that its not possible to make one thread or window wait for the other to finish issuing commands to one display or context before another starts using it (glFinish() doesn’t work!). The net result is a piece of hardware that has support for two displays on a single AGP bus with crippled performance for the second window.

My question for this group is: Does anyone know how to optimize windows or Linux code under OpenGL such that this bottleneck doesn’t occur? How do I get one drawing thread or context to wait to use the card and bus until after the current drawing commands have made it to the card? I.E. I’ve yet to see sample dual screen code with good OpenGL acceleration for two or more windows. I seem to be up against a programming wall here.

Thoughts? Am I in the right place to ask this question?

BTW, we’ve also tried nvidia PCI cards. The best results we see utilize either the PCI in multimonitor mode OR the AGP, but not both. Also, it has only worked when all cards use the same basic driver… i.e. nvidia.

Any thoughts or advice are appreciated.
Thanks
Mike

Hi

I don’t know but perhaps its possible to do it using opengls stereo mode?
Render to the left buffer–> left monitor
Render to the right buffer–> right monitor

Bye
ScottManDeath

With respect to nvidia twin view cards, assuming you can accelerate both displays, how does the memory work on board the card? Does the driver divide say 64mb into to seperate 32mb chunks? If not, wouldn’t memory fragmentation be a problem? And presumably, if you say ran the same app on both monitors, wouldn’t the performance be half that of running just one version of the app? Or will it only extend the desktop acroos two monitors, rather than treat them as seperate card/monitor combination?

Anyone know?

…and can anyone post a little sample code up here which shows us how to actually set up a window in each display (on Win32)? It seems to be all smoke and mirrors at the moment.

(I understand with Twinview you just make a window that’s twice as wide as normal, but what about the others?)

Cas

“It seems to be all smoke and mirrors at the moment”

I agree. There is NO documentation on setting up two cards while using opengl - I am under the impression that its impossible, at least with nvidia cards.
D3D uses a much nicer method of creating rendering contexts - but then it would, wouln’t it? It’s 100% supported by microsoft…

it’s possible to run opengl in two or even three monitors as i personally have done this before on my recent project.
However i’m not allow to code my stuff up here.

basically you have use code like EnumDisplayDevice, EnumDeviceSetting and …
to get code working.

(i’m manage to get my code working)