On Tue, Jul 05, 2011 at 11:26:47AM +0200, Michael Graph wrote:
> Hi all,
> 
> I have an application which works in triple buffering mode and flips buffers
> with DSFLIP_ONSYNC flag (DSFLIP_WAIT flag is not used) - it's based on
> df_andi scheme. If time of rendering one animation frame is less than time
> between two VSyncs, it's possible to achieve following situation:
> - buffer number 1 contains already rendered animation frame and it's already
> displayed on the screen,
> - next animation frame is rendering in buffer number 2 and when it's ready
> Flip is calling - it returns immediatelly, physical buffers flip will be
> performed on next VSync, application starts drawing on buffer number 3,
> - next animation frame is rendering in buffer number 3 and when it's ready
> Flip is calling - it returns immediatelly, physical buffers flip will be
> performed on next VSync. Note that none VSync comes yet, so buffer number 1
> is still visible,
> - application starts to render next animation frame in buffer number 1,
> which is still displaying.
> Result: tearing is visible on the screen.
> 
> There can be few methods for solving this issue, so the question is: what is
> the better method to fix it according to DirectFB design?

> Or maybe 1st flip should be skipped in this case and 2nd flip
> should switch drawing buffer to number 2 instead of buffer 1?

This is how it was designed to work. It's the reason dfb_surface_flip()
has the 'swap' parameter. Currently only matrox_bes.c uses it though.

-- 
Ville Syrjälä
syrj...@sci.fi
http://www.sci.fi/~syrjala/
_______________________________________________
directfb-dev mailing list
directfb-dev@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to