Ok, sorry Robert, now more specifically:

Hardware/software: WinXP, Opteron 2 GHz, 1 GB Ram, Geforce 8800 GS, OSG 2.4.

The prerender node has 5 camera nodes, a textured rectangle is attached to each camera node. The cameras render to texture in a defined RenderOrder. The textures of the rectangles are connected in a way that the output of one RTT camera is the input of the next. The pointer to the final texture is stored in a data class. The live-camera image is retrieved via CMUfirewire API, and updated in a StateAttribute::Callback function attached to the initial live-camera texture.

The Views are defined by the setUpViewInWindow() functions and added to a CompositeViewer. The scene data of the overall View (A) is set to the root node (thats the View that shows the updated texture), the scene data of the other two Views(B,C) is set to the subnodes in the scene graph. The camera position of each View is set via the getCamera()->setProjection() / ViewMatrix() methods. Rectangles are attached to the subnodes that should display the output of the prerender step (they get the texture via the pointer in the data class), but the textures dont get updated in the subviews B,C (they remain in their initialised state). I call CompositeViewer->frame() in the render loop. (No slave cameras or anything like that.)

The strange thing is, when I set the scene data of View B or C to the root node, the rendered textures get updated. (Maybe then, for this View the prerender branch is also traversed, causing the loss of fps, but on the other hand the Callback of the live-camera texture is called only once per frame..)

Thanks for your interest,
osg-users mailing list

Reply via email to