[osg-users] CompositeViewer, update traversal, prerender branch

Fabian Bützow buetz at uni-koblenz.de
Fri Sep 19 03:17:15 PDT 2008

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,

More information about the osg-users mailing list