driving lots of monitors from a single computer

There is a mode in Windows XP called “horizontal span” that you can use with NVIDIA cards. It lets you combine the two outputs into one big screen, which allows you to make (for example) 6 outputs with two Matrox Triple Head 2 Gos.

Horizontal span died with the launch of Vista, and isn’t being resurrected for Windows 7. Besides I’m pretty sure it never worked across multiple graphics cards anyway. So I was looking into alternatives and found this post from April:

Multi-Monitor-Rendering-in-OpenGL

Which describes a technique that seems promising. He’s tested it on three cards for a total of 6 screens, on Linux and Windows.

Has anyone else tried this? I’d like to get it working and make it into some kind of OF addon.

in osx and linux it seems that you need to pass the context you want to share with, in the creation of the next context, with glxCreateContext for linux or aglCreateContext for osx. The main problem is that with glut you don’t have control over the creation of the context, but it shouldn’t be so hard to modify it or any other open source windowing toolkit like glfw to pass that parameter.

I wouldn’t recommend it to anyone, but being the incredibly smart guy that you are Kyle, I highly suggest you look at equalizer graphics:
http://www.equalizergraphics.com

Even if you don’t end up using it, it’s a good learning experience, and it’s open source and cross-platform, so it could give you insight into some of the things you want to do. It also does all of this glxCreateContext/aglCreateContext/wglCreateContext stuff arturo is mentioning…

I wanted to create an addon for OF from this, but its a lot of work and I haven’t had a reason to use lots of screens in order to justify it.

Hi all !

It would be amazing to include Equalizer features into OF ! By the way i feel totally unable to do so as it works with a level of OF that i merely can deal with …

I’ve read Equalizer “replaces” glut and that is included in “Glee” (new versions with multidisplay support) … maybe that helps one “bit” …

I’ve been asking to Equalizer forum if Equalizer could work as a multidisplay video player in serveral computers and “the experts” said : “of course!” … so if we can make Equalizer addon work, we’ll have also multiprojection video player on it !! YEAH !!

More advanced user could tell us if it’s possible to make an addon of Equalizer ? I mean if has to deal with removing GLUT and i don’t see that so “easy” …

Any thoughts ?

e*

:shock:

I somehow forgot to subscribe to comments and missed these until now…

Thanks so much Arturo + Pierre for the feedback!

Pierre, Equializer looks awesome… and also like it might be good to use Linux instead, as it requires Windows XP if I want to use Windows. Have you actually used it before on any projects? What OS did you use?

eloi, I’m definitely going to be working with multiple displays, and might go with Equalizer or some other route… so I’ll let you know what I find. I’d like some kind of simple addon for rendering across graphics cards, too!

it’s not a software solution, but it might be worth mentioning that ATI eyefinity cards can do up to 6 monitor output off of 1 card (on windows). probably can’t do fancy arrangements like in that image, but you have a reasonable control, (i.e. horizontal or vertical stacks, landscape, portrait, orientations, etc.) I have tested a smaller setup in OF and all the computer/OF sees is one large display to draw onto.

Ah, yes… I’ve seen some ATI, NVIDIA and Matrox graphics cards that have lots of outputs on them.

From what I’ve read, these are all targeted at large-scale 2D displays like the timetables at airports. They don’t really work if you want to stream video, do 3d graphics, use lots of textures, etc. They’re meant for much simpler, low-refresh rate tasks.

the ati cards are aimed at multi-monitor high-end gaming setups. They have much beefier hardware than the matrox types, and I can’t see 3D performance ever being an issue. but I haven’t personally tested more than dual monitor setups on them.

Wow, good to know. I shouldn’t have lumped them in with the other NVIDIA and Matrox models then. It looks like it’s basically the same as getting two Triple Head 2 Gos and a decent card, but a bit cheaper.

I was just reading up on the Eyefinity models and it looks like there might be some weirdness involved in getting all 6 outputs to work due to various necessary adapters. I’d be really interested if you can get all 6 running!

Kyle,

I’ve used Equalizer on Windows (XP) and Linux. It works well on both.

Guys,

I’ve had a quick look on OF some weeks ago. From what I understand, it is a utility library on top of OpenGL, and uses GLUT for windowing.

The simple route for an integration seems to me:

  • Create an Eq application linking OF
  • Use OF draw routines from Eq draw ‘callback’

For the first item, we are working on a simplification layer on top of Eq, which will likely consist of two classes (Application/Renderer). Later we’ll have to create some facilities to facilitate data distribution, but we’re working on that as well.

Grimus - what approach did you chose for the integration?

Cheers,

Stefan.

Hi Stefan!

That’s pretty much the way forward.
Incorporating events (mouse and keyboard) is also necessary.

Sup Grimus.

Equalizer will do this of course, with a ton of hacking, but Equalizer is really meant for synchronizing OpenGL across multiple machines. A simpler solution (which might even be compatible with GLUT?) would be to run oF fullscreen and render 6 seperate glViewport()'s, one for each screen. This would mean a 6X for(;:wink: loop in the draw() function and modifying the GL transform for each viewport.

using the 6-viewport approach, wouldn’t the problem still be about where the content is actually rendered?

my impression is that if i have one really big GLUT window that spans multiple cards, it’s going to get rendered on one card and the framebuffer will be transferred from one to the other (which is the slow part).

if equalizer is meant to work on different machines, surely it should work on the same machine using localhost and some port number trickery?

i still haven’t tried it out, but that will be the next thing i test…

You don’t need to go that far. You can configure your system naturally with one eq::Pipe per GPU and one eq::Window or Channel per viewport. The GPU’s will render concurrently from different threads.

Using Equalizer for multi-machine rendering with Openframeworks is not only possible, but already proven. Pierre and I had a test running at the Ars Electronica Futurelab for a project in the fall of 2008. I wrote a glut-like wrapper around EQ and Pierre rewrote the backend for OF (this was pre 0.6). We were only able to get around 45 fps, but I’m sure that’s due to some inefficiencies on our part.

EQ abstracts the windowing and distribution of shared objects which, trust me, is well worth the overhead of learning it. It’s one thing to have each machine running the same rendering thread and it’s quite another to send control and input dynamically between them. Plus it runs on Mac, Windows, and Linux.

Later on I expanded the wrapper for others to use and 4 applications in total were built, although I ended up removing the OF core as it was too difficult and annoying to build and deploy between different versions of Ubuntu. A proper build system would be nice, but thats a whole different topic …

Unfortunately my former employer is not interested in releasing any of this library code or implementation details due to a number of reasons. However, I could write it again from scratch, although multi-rendering is not within my current needs.

Anyway, here is a picture for proof. 12 screens, 1 server, 3 renderers with 2 dual-graphics cards running 4 screens each, each screen is 1360x720.

This is from Nov 2008 and yes, that’s gimlids.

Yea, Equalizer is certainly possible on a single machine and probably does good GPU management. Regarding GLUT across two graphics cards though, I don’t know if we can really say much about what would happen without writing the driver, but it’s possible both graphics cards would render the whole scene culling for themselves, which could be an OK quick plan vs. getting into equalizer, but: I am absolutely for getting into Equalizer.

Quartz Composer, as it happens, comes with “Quartz Composer Visualizer” or something like that (with source code) which synchronizes and runs a composition across a networked videowall, this without special stuff in the composition – could be a good model to look at if making a “Distributed oF” addon.

just to add some more info: in vvvv, there’s the “boygrouping” concept for synchronizing different machines.

hmm, thanks for all the insight on equalizer and it’s use :slight_smile: