tags:

views:

242

answers:

3

I have been asked to look into writing an application that will be a very very large application, expanding over 9 screens at (obviously) a very high resolution.

My question is, what is the best way to go about doing this?

Do I just write an application that is (1024x3) x (768x3)? How on earth can I do that at development time? I won't be able to see the application running, or perhaps I can develop with a RenderTransform that scales is back down to 1024x768 and remove that transform at deployment time?

What about the performance of the system? We will have a very powerful PC powering it all, with a great graphics card, but will WPF be able to cope with this sized application OK?

+1  A: 

I have written such an app two years ago (It was more a hack than an app but the client was happy with it).

I used for every screen a window and had a configuration that mapped the windows to the screens (In my environment, not all monitors had the same resolutions). I used also scaling so that I could place all windows on one screen (on my dev-machine).

As I remember we had about five or six PCs and something more than 20 screens. Some of the PCs had NVidia Quad-graphics cards, others served only two monitors.

What I remember is, that the performance of the quad-graphics cards was very little. It was not possible to include nice visual effects. In my project this was not a big issue and therefore I digged not deeper into the reasons why it was so slow. Maybe it was only a configuration problem. But make sure to make some tests on such a multi-monitor-PC before investing a lot of time for developping, to remark afterwards that that app is not useable because of its visual slowness.

If your app will have a lot of visual changes and you want to see them in a acceptable framerate, here some thoughs:

  • Check if the graphics card supports hw-rendering for each screen. If not, the fill rate for 9 screens would be huge and the performance will go down.
  • For your project, generally beware of Effects such as DropShadowEffect. They can affect the calculation of the dirty regions in a way that the whole screeen or big regions will be repainted. Use perforator to make shure that no unnecessary drawings will happen. This would be fatal.
  • If you can split the big screen to smaller ones, I would recommend (one Window per monitor). This gives you more flexibility if you encouter problems. If the rendering of some areas is independent to others, think about using 5 cheap pc's, make one the master and connect them through WCF. Render per pc two monitors.

Undelete after deleting the post

I undeleted my answer because you asked for. But with over 50 views and not one upvote it seems that my fear is not justified. And as I wrote, we had a much higher screeen resolution in my project. With only 1024*768 and two years later, performance is maybe no more an issue. But I would take care.

HCL
hopefully, WPF in two years, has improved dramatically in terms of performance. Im curious, where you using WPF? It seems strange that such powerful cards could not cope, but perhaps also you were using effects that were rendered on the CPU instead of the GPU?
Mark
I don't think that there will be such a big increase of performance in this narrow two years. If your app only shows static data, you dont will have a problem. If not, take care to the visual performance. For some ideas, see the update of my post. For the effects: I didnt use any BitmapEffects and also no other Effects that have a bad influence to rendering. The main thing of the app was displaying images. One big difference was the resolution. As I remeber, the most monitors run with 1680*1050, what gives a more than double as high fill rate as you have with with 1024*768.
HCL
the idea is that the app is one huge application running on a huge monitor, similar to what you see these days in stores where they have heaps linked up playing videos and promo-stuff, not 9 different apps running side by side (well that is the idea anyway), Im familiar with the performance tools and tips, but I guess what I was really looking for was, is this even going to be possible performance wise? (but I know, of course it depends on what you do).
Mark
Thanks HCL, dont worry I feel the same way. Care will be taken :) Or perhaps just split the app up in to different modules...
Mark
A: 

Take a look at SystemInformation.VirualScreen in Windows.Forms

For WPF use SystemParameters.VirtualScreenHeight and SystemParameters.VirtualScreenWidth. Not sure how WPF copes with that, at least you will know the resolution.

nomail
http://mostlytech.blogspot.com/2008/01/maximizing-wpf-window-to-second-monitor.html take a look here
nomail
thanks nomail, but not really what I was after...
Mark
Hi Mark! Will you use one video card with 9 monitors(i don't even want to know how much they cost)? From what i've seen in one lab they use cluster of 3 PCs(6 monitors in total). Each frame is divided between these PCs and calculated depending on the area on the LiveWall. How will your system work if you don't mind me asking? because i might have to do something similar in the near future and any tips will be appreciated. Thanks!
nomail
Yes, that was the plan... im curious, how exactly would that work if you were to have objects move across the different screens (i.e. move from one screen hosted on one PC to another screen on another PC)?? Or was it actually treated as seperate apps?
Mark
Each monitor had a separate fullscreen app running for it. They have used DirectX(or OpenGL i don't remember the details). It was 3D scene. As I understood it they have just pointed out different positions/angles of the camera for each monitor, so the engine decided what it should to render and what it shouldn't. Loads of math. I don't think that this model actually suits your case though.
nomail
+1  A: 

This may help with some of the plumbing. I was surprised that WPF only maximises on one monitor:

http://stackoverflow.com/questions/1953363/wpf-mutli-monitor-problem-windowstate

http://weblogs.asp.net/jdanforth/archive/2008/11/05/wpf-learnings-drawing-on-multiple-monitors.aspx

SteveCav
thanks for the links steve!
Mark