[eq-dev] Startup configuration modification misbehaviour?

3 views
Skip to first unread message

Juan Hernando

unread,
May 30, 2011, 1:48:18 PM5/30/11
to eq-...@equalizergraphics.com
Hi all,
I'm playing with configuration files and I've found out some funny
behaviour that may be a bug of the startup configuration auto-completion
mechanism.
The test case can be easily reproduced with the 1-pipe.eqc configuration
file from the distribution. If a simple compound like this is added to
the configuration file:
compound
{
channel (canvas 0 segment 0 layout 0 view 0)
}
everything works fine.
However is the channel is specified by its name, then Equalizer modifies
the configuration to read as in:
compound
{
channel "channel"
}
compound
{
compound
{
channel ( canvas 0 segment 0 layout 0 view 0 )
}
}
This causes Channel::frameDraw to be called as much as 6 times per frame
for "channel". Twice for each eye (cyclop, left, right), the first one
having undefined values for the head transform matrix.

Is this runtime modification of the configuration to be expected?

Cheers,
Juan


_______________________________________________
eq-dev mailing list
eq-...@equalizergraphics.com
http://www.equalizergraphics.com/cgi-bin/mailman/listinfo/eq-dev
http://www.equalizergraphics.com

Stefan Eilemann

unread,
May 31, 2011, 1:57:52 AM5/31/11
to Equalizer Developer List
Hi Juan,

On 30. May 2011, at 19:48, Juan Hernando wrote:

> I'm playing with configuration files and I've found out some funny behaviour that may be a bug of the startup configuration auto-completion mechanism.

This is not a bug, but rather a misunderstanding about the way the Layout API works.

> The test case can be easily reproduced with the 1-pipe.eqc configuration file from the distribution. If a simple compound like this is
> added to the configuration file:
> compound
> {
> channel (canvas 0 segment 0 layout 0 view 0)
> }
> everything works fine.

This compound uses the destination channel resulting from the intersection of the first segment with the first view of the first layout on the first canvas. This channel is not the same as the output channel of segment 0. It is an internal copy of this output channel with a potentially different viewport, if the view does not cover the full segment.

> However is the channel is specified by its name, then Equalizer modifies the configuration to read as in:

Then you are using the channel you created in the configuration file, as in Equalizer 0.6. For compatibility the Loader creates a Canvas/Segment/Layout/View for this compound, uses the channel as an output channel and replaces the compound channel with the appropriate destination channel.

> compound
> {
> channel "channel"
> }
> compound
> {
> compound
> {
> channel ( canvas 0 segment 0 layout 0 view 0 )
> }
> }
> This causes Channel::frameDraw to be called as much as 6 times per frame for "channel". Twice for each eye (cyclop, left, right), the first one having undefined values for the head transform matrix.

This is weird. Can you post the full configuration file? It should be called only once for the cyclop eye.


HTH,

Stefan.

Juan Hernando

unread,
May 31, 2011, 9:25:28 AM5/31/11
to Equalizer Developer List
Hi Stefan,

> This is weird. Can you post the full configuration file? It should be called only once for the cyclop eye.

Here you are

#Equalizer 1.1 ascii

# one-pipe fullscreen config, covering a 30" LCD one meter in
# front of the viewer
global
{
EQ_WINDOW_IATTR_HINT_FULLSCREEN ON
}

server
{
config
{
appNode
{
pipe
{
window
{
channel
{
name "channel"
}
}
}
}
observer{}
layout{ view { observer 0 }}
canvas
{
layout 0
wall {}
segment { channel "channel" }
}
compound
{
channel "channel"
//channel (canvas 0 segment 0 layout 0 view 0)
}
}
}

Juan

Stefan Eilemann

unread,
May 31, 2011, 9:43:40 AM5/31/11
to Equalizer Developer List
Hi Juan,

Your draw should be called four times:

- three times, once for each eye, on the channel declared in the eqc
- once for the view/segment dest channel on the cyclop eye

In any case the config does not make sense.

The first compound emits three draws since the all eyes are active (no eyes[] in compound and no view to select stereo mode). This is new in 1.0 with the runtime stereo switch. Before that, the compound default eye was cyclop and no runtime selection was possible.

The second compound emits only the cyclop eye. While the compound also has all eyes enable, the view is in its default mono mode causing only the cyclop pass to be active.

I hope this makes sense, if not poke me with questions.


Cheers,

Stefan.

Juan Hernando

unread,
May 31, 2011, 10:21:57 AM5/31/11
to Equalizer Developer List
Hi Stefan,
Indeed, the frameDraw is called 4 times, 3 for one channel and 1 for
another one. An assert violation in my code made me think it was called
6 times in the same channel.
The, if I understood correctly, the head matrix of the explicit compound
is undefined because there's no observer/projection/wall associated to
neither the compound nor the channel. Is that right?

Cheers,
Juan

Stefan Eilemann

unread,
May 31, 2011, 10:56:55 AM5/31/11
to Equalizer Developer List
Hi Juan,

On 31.05.2011, at 16:21, Juan Hernando <jher...@fi.upm.es> wrote:

> The, if I understood correctly, the head matrix of the explicit compound is undefined because there's no observer/projection/wall associated to neither the compound nor the channel. Is that right?

Yes.

Reply all
Reply to author
Forward
0 new messages