I am working on some (Py)OpenSG clustering code and have run into a totally unexpected problem. I am working with r971 of the fcptr_stable_jun07 branch of the OpenSG 2 Subversion repository. My software is organized as follows:
* A Python client application that uses OSG::MultiDisplayWindow to
distribute a scene graph for rendering. In case it matters, I am using
OSG::MatrixCameraDecorator as the camera for each render server. The
decoratee is the camera in a custom scene manager that I wrote. The
scene manager is basically a Python translation of
OSG::SimpleSceneManager, but it will diverge from that foundation in
the not-too-distant future.
* C++ render servers that use OSG::ClusterServer and OSG::RemoteAspect
as normal. I wrote custom X11 windowing code, and windows are
configured using information sent from the Python client application
using OSG::Connection objects. The configuration sets up typical
properties of the graphics window. All of this happens before the
OSG::ClusterServer instance is created. The window on each render
server is opened immediately after OSG::ClusterServer::start() is
invoked.
Dynamic cluster connection is involved because the Python client application
is a 3D presentation editor which also has the task of delivering the 3D
presentation to the render nodes. At any time, the user can activate
clustered display of the presentation, much the same as one would do with a
2D presentation made in PowerPoint or OO.o Impress. To do this, I am calling
OSG::ChangeList::fillFromCurrentState() immediately before
OSG::MultiDisplayWindow::init(). (These calls are made from Python, but I
used the C++ name syntax because I don't want the Python details to get in
the way of my explanation.)
Now, my problem is that nothing under nodes with a core of type OSG::Group
gets rendered on the server side. The client side (the Python GUI) shows the
full scene graph at all times. Looking at the file /tmp/cluster.osg, it
seems to me that the full scene graph is received by the render servers.
What is really weird about this is that the OpenSG test applications
testClusterClient and testClusterServer work fine. testClusterClient puts
its geometry under a node with a core of type OSG::Group, so it doesn't seem
like an OpenSG bug. I don't know how the Python bindings could be messing up
OSG::Group, though I have not ruled that out as a possibility. At the
moment, I am focusing on my Python application as the source of the problem.
As an example of what I am running up against, the following code in my
scene manager produces a scene graph that renders just fine on all nodes:
self._internalRoot.addChild(osg.makeTorus(0.5, 2, 16, 10))
However, this does not:
root = osg.Node.create()
root.setCore(osg.Group.create())
root.addChild(osg.makeTorus(0.5, 2, 16, 10))
self._internalRoot.addChild(root)
In my scene manager, self._internalRoot is used in *exactly* the same manner
as the _internalRoot member variable in OSG::SimpleSceneManager. Am I just
misusing the OSG::Group core somehow? It doesn't seem like the above could
get any simpler, and yet it fails consistently. If it is helpful, I can post
the cluster.osg file that OSG::ClusterServer generates from the first frame
that gets rendered.
-Patrick
--
Patrick L. Hartling
Senior Software Engineer, Priority 5
http://www.priority5.com/
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________ Opensg-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensg-users
