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