Hi,
I'm currently wondering about the order of render-operations done in Equalizer. The Programming Guide tries to explain it, but I'm still confused. In order to make it clear to myself, I derived from Node, Pipe, Window and Channel and added outputs to each rendering stage (frameStart, frameDrawFinish, frameFinish) in order to actually see how it behaves. Additionally, I choose the example "3-channel-cave". Which is using 3 channels inside a single window on single pipe on a single node. I turned multithreading off and started the program. The log of a single Frame looks like this: [main] emNode::frameStart() [main] emPipe::frameStart() [main] emWindow::frameStart() [main] emChannel::frameStart() [main] emChannel::frameDraw() [main] emChannel::frameDrawFinish() [main] emWindow::frameDrawFinish() [main] emPipe::frameDrawFinish() [main] emNode::frameDrawFinish() [main] emChannel::frameStart() [main] emChannel::frameDraw() [main] emChannel::frameDrawFinish() [main] emWindow::frameDrawFinish() [main] emPipe::frameDrawFinish() [main] emNode::frameDrawFinish() [main] emChannel::frameStart() [main] emChannel::frameDraw() [main] emChannel::frameDrawFinish() [main] emWindow::frameDrawFinish() [main] emPipe::frameDrawFinish() [main] emNode::frameDrawFinish() [main] emChannel::frameFinish() [main] emChannel::frameFinish() [main] emChannel::frameFinish() [main] emWindow::frameFinish() [main] emPipe::frameFinish() [main] emNode::frameFinish() This order is quite surprising to me, since frameDrawFinish of all classes involved is called more than once per frame (despite their documentation)! I would have expected this: [main] emNode::frameStart() [main] emPipe::frameStart() [main] emWindow::frameStart() [main] emChannel::frameStart() [main] emChannel::frameDraw() [main] emChannel::frameDrawFinish() [main] emChannel::frameStart() [main] emChannel::frameDraw() [main] emChannel::frameDrawFinish() [main] emChannel::frameStart() [main] emChannel::frameDraw() [main] emChannel::frameDrawFinish() [main] emWindow::frameDrawFinish() [main] emPipe::frameDrawFinish() [main] emNode::frameDrawFinish() [main] emChannel::frameFinish() [main] emChannel::frameFinish() [main] emChannel::frameFinish() [main] emWindow::frameFinish() [main] emPipe::frameFinish() [main] emNode::frameFinish() The multithreaded case is even less clear to me. For instance, I need a time where I _know_ that none of the node's pipes is doing any rendering anymore (i.e. do not access the scene database). Is that Node::frameFinish? Also, where is a place I knew that none of the pipes is doing any rendering _yet_. Is that Node::frameStart? I tried it this way, but as soon as I enable multithreading, the pipe-thread and the main thread get out of sync and my applications crashes :-( Greetings, Mathias
_______________________________________________ eq-dev mailing list [email protected] https://in-zueri.ch/cgi-bin/mailman/listinfo/eq-dev http://www.equalizergraphics.com

