Hi,
I am porting clutter toolkit (clutk) to gles2. I found some problem between clutter/cogl rendering and raw gles2 rendering as mentioned below. It's appreciated that you can give some suggestions.
In part of ctk_effect_blur_paint() function, we do as following - create fbo with texture and depth buffer (raw gles2) - switch to this new fbo for rendering (raw gles2) - call clutter_actor_paint to render the actor to texture (clutter/cogl) - switch back to default frame buffer (raw gles2) - render above texture on screen for display (raw gles2)
With the sequence above, the actor cannot be displayed on screen. But if I replace clutter_actor_paint with raw gles2 rendering to paint a simple triangle, the triangle can be shown correctly. So I guess clutter_actor_paint didn't render to the new created fbo. is it related to the cogl fixed pipeline?
Thanks in advance!
Regards, Jammy
Hi Jammy,
On Fri, Sep 17, 2010 at 5:23 AM, Jammy Zhou jammy.zhou@linaro.org wrote:
With the sequence above, the actor cannot be displayed on screen. But if I replace clutter_actor_paint with raw gles2 rendering to paint a simple triangle, the triangle can be shown correctly. So I guess clutter_actor_paint didn't render to the new created fbo. is it related to the cogl fixed pipeline?
I was told that "after clutter_actor_paint to render the actor to texture (clutter/cogl) the next step is to call cogl_flush ()".
Have you checked that cogl_flush properly called in this case?
Hi Alexander,
Yes, I also noticed this in the clutter reference manual. But no matter cogl_flush() is called or not, the results are the same. I think the frame buffer related operations in clutter_actor_paint affect this. I'm not so familiar with clutter, so I posted this topic here. :)
Regards, Jammy
On Fri, Sep 17, 2010 at 9:57 PM, Alexander Sack asac@linaro.org wrote:
Hi Jammy,
On Fri, Sep 17, 2010 at 5:23 AM, Jammy Zhou jammy.zhou@linaro.org wrote:
With the sequence above, the actor cannot be displayed on screen. But if
I
replace clutter_actor_paint with raw gles2 rendering to paint a simple triangle, the triangle can be shown correctly. So I guess clutter_actor_paint didn't render to the new created fbo. is it related
to
the cogl fixed pipeline?
I was told that "after clutter_actor_paint to render the actor to texture (clutter/cogl) the next step is to call cogl_flush ()".
Have you checked that cogl_flush properly called in this case?
--
- Alexander
I have found a temporary solution below for this issue. But I am not sure if there will be any side effects. - do not call cogl_flush() after paint_func(actor) in ctk_effect_xxx_paint() functions - do not call ctk_effect_set_invalidate_effect_cache() after render to cached texture in ctk_effect_xxx_paint() functions
Regards, Jammy
On Sun, Sep 19, 2010 at 8:43 AM, Jammy Zhou jammy.zhou@linaro.org wrote:
Hi Alexander,
Yes, I also noticed this in the clutter reference manual. But no matter cogl_flush() is called or not, the results are the same. I think the frame buffer related operations in clutter_actor_paint affect this. I'm not so familiar with clutter, so I posted this topic here. :)
Regards, Jammy
On Fri, Sep 17, 2010 at 9:57 PM, Alexander Sack asac@linaro.org wrote:
Hi Jammy,
On Fri, Sep 17, 2010 at 5:23 AM, Jammy Zhou jammy.zhou@linaro.org wrote:
With the sequence above, the actor cannot be displayed on screen. But if
I
replace clutter_actor_paint with raw gles2 rendering to paint a simple triangle, the triangle can be shown correctly. So I guess clutter_actor_paint didn't render to the new created fbo. is it related
to
the cogl fixed pipeline?
I was told that "after clutter_actor_paint to render the actor to texture (clutter/cogl) the next step is to call cogl_flush ()".
Have you checked that cogl_flush properly called in this case?
--
- Alexander