Guys, there's a corner case for the proxy render that won't work on GL engines.

The test is attached and is very simple. Basically, it creates an Edje
object, with a black rectangle and a green rectangle, and this green
rectangle has a map applied to it.

This Edje object is moved almost entirely off the screen, and a proxy
is created to draw this Edje object, but only the green rectangle is
seen (not the black one).

If the order of the rectangles inside the .edc is changed (the mapped
one is created first), things work correctly. If the Edje object
starts all visible, it also works.

The important part is: I really think that when the surface for the
mapped object is created, it is making something wrong with the proxy
surface, and resetting its content.

After some investigation, I noticed the following scenario, when
evas_render is called:

1) proxy object creates a surface for rendering the proxy content;
2) the black rectangle is rendered on this surface;
3) the green rectangle (mapped) creates a new surface for rendering
itself; <-- I think this is wrong somehow
4) the green rectangle surface is drawn over the proxy surface;
5) the proxy surface is rendered on the screen.

Of course there are many other things involved, but I found that these
are the most important ones affecting things.

If we change the order of things, when the green rectangle surface is
created, it can reset the proxy surface content but the black
rectangle will be drawn only after that, so everything looks good.

If the Edje starts inside the canvas geometry, then the green
rectangle surface is created and used before the proxy surface is
created, so everything looks ok too.

In other words, I think that the following behavior works ok:

1) surface is created
2) surface content is rendered
3) surface is drawn somewhere

4) new surface is created
5) new surface content is rendered
6) new surface is drawn somewhere

But the following one does not work:

1) surface is created
2) surface content is rendered
3) new surface is created
4) new surface content is rendered
5) new surface is rendered on the previous one
6) surface is drawn somewhere

On the last scheme, even if I remove 4) and 5), just the fact of
creating the new surface makes the content of the first one vanish.

Please take a look at _pool_tex_render_new() and related functions,
the bug may be somewhere there.

Thanks,
--
Rafael Antognolli

Attachment: evas-tests.tar.gz
Description: GNU Zip compressed data

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to