Hello Michael,

Michael Raab wrote:
I had trouble with redirecting the output under windows 7 ;)
Back in my office, good old XP does as expected. I did a test with 1 client and 
2 servers and it seems that server1 crashed. Log files are attached, hope this 
helps.

thanks! I think I got it, the problem occurs when serverPort->getType() != clientPort->getType() the code did not consider that serverPort might be a FBOViewport (and thus have no TCD), checking deco and creating a new TCD if needed seems to fix it. See attached patch, it's in cvs as well.

Btw, wouldn't it be possible to add an additional field to FBOViewport with 
that the user can select if the FBOViewport should be rendered if invisble? 
Standard value could be YES, which is the current behaviour.
What do you think?

Hm, the usual visibility is probably not a good criterion because in general the viewport settings (left, right, top, bottom) for an FBO refer to a different framebuffer and have nothing to do with real viewports on the MDW. Perhaps an MF of server ids should be visible on with empty meaning all is a better solution. Given that we are talking about 1.8 I don't have a strong opinion either way. Perhaps someone else here (Gerrit, Dirk?) wants to weigh in on this?

        Cheers,
                Carsten
Index: Source/System/Cluster/Window/MultiDisplay/OSGMultiDisplayWindow.cpp
===================================================================
RCS file: /cvsroot/opensg/OpenSG/Source/System/Cluster/Window/MultiDisplay/OSGMultiDisplayWindow.cpp,v
retrieving revision 1.25
diff -u -r1.25 OSGMultiDisplayWindow.cpp
--- Source/System/Cluster/Window/MultiDisplay/OSGMultiDisplayWindow.cpp	9 Jun 2008 07:30:36 -0000	1.25
+++ Source/System/Cluster/Window/MultiDisplay/OSGMultiDisplayWindow.cpp	2 Jul 2010 15:31:43 -0000
@@ -190,8 +190,8 @@
             else
             {
                 serverPort = serverWindow->getPort(sv);
-                if(serverWindow->getPort(sv)->getType() !=
-                        clientPort->getType())
+
+                if(serverPort->getType() != clientPort->getType())
                 {
                     // there is a viewport with the wrong type
                     subRefCP(serverWindow->getPort(sv));
@@ -242,20 +242,23 @@
             {
                 serverPort = serverWindow->getPort(sv);
                 deco = TileCameraDecoratorPtr::dcast(serverPort->getCamera());
-                if(serverWindow->getPort(sv)->getType() != 
-                        clientPort->getType())
+
+                if(serverPort->getType() != clientPort->getType())
                 {
                     // there is a viewport with the wrong type
                     subRefCP(serverWindow->getPort(sv));
                     serverPort = ViewportPtr::dcast(clientPort->shallowCopy());
-                    beginEditCP(serverWindow);
-                    serverWindow->editPort(sv) = serverPort;
+
+                    if(deco == NullFC)
+                        deco = TileCameraDecorator::create();
+
+                    beginEditCP(serverPort, Viewport::CameraFieldMask);
                     serverPort->setCamera(deco);
-                    endEditCP(serverWindow);
-                }
-                else
-                {
-                    deco=TileCameraDecoratorPtr::dcast(serverPort->getCamera());
+                    endEditCP(serverPort, Viewport::CameraFieldMask);
+
+                    beginEditCP(serverWindow, Window::PortFieldMask);
+                    serverWindow->editPort(sv) = serverPort;
+                    endEditCP(serverWindow, Window::PortFieldMask);
                 }
             }
 
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to