In my setup I use the NVIDIA with Linux driver NV32.

What I see is when CooperativeLevel == DFSCL_FULLSCREEN and primary surface with capability DSCAPS_FLIPPING, I can see all the drawing without doing any Flip().
Since I pass DSCAPS_FLIPPING, DSCAPS_DOUBLE gets set.
As DSCAPS_FLIPPING = DSCAPS_DOUBLE | DSCAPS_TRIPLE and DSCAPS_TRIPLE gets negated by CreateSurface code if DSCAPS_FLIPPING.
Surface data store is VIDEOONLY for both Front and Back buffers.

But if I create the primary surface with CooperativeLevel == DFSCL_FULLSCREEN and capability option SYSTEMONLY. I can't see the drawing without doing the Flip(). In this case buffer policies change - Front on video memory while Back on system memory.

So I am wondering if with,
CooperativeLevel == DFSCL_FULLSCREEN &&
dsc.caps == DSCAPS_FLIPPING (both front and back on video memory)
the drawing gets done on the front buffer and so doesn't need any Flip()?
Or is it the driver which does something when both surface stay on video memory?

-- Sourath

On 11/12/05, Ville Syrjälä <[EMAIL PROTECTED]> wrote:
On Sat, Nov 12, 2005 at 06:37:55PM +0530, Sourath Roy wrote:
> Hello,
>
> I have couple of questions on dfb CooperativeLevels and SurfaceCapability
> settings.
>
> If IDirectFB::SetCooperativeLevel() is called with DFSCL_FULLSCREEN and then
> a primary surface is created with no specific settings for DSCAPS_SYSTEMONLY
> or DSCAPS_VIDEOONLY, the capabilities are defaulted to VIDEOONLY. Under such
> condition, the drawing on primary surface is visible without any need of
> calling IDirectFBSurface::Flip().
>
> This behavior changes when SetCooperativeLevel is called with
> DFSCL_FULLSCREEN and then primary surface is created with capability setting
> DSCAPS_SYSTEMONLY. To my understanding, the FrontBuffer policy is still
> defaulted to VIDEOONLY but the BackBuffoer policy becomes SYSTEMONLY. Under
> this condition, Flip() needs to be done to make drawing visible - BackBuffer
> -> FrontBuffer.
>
> What causes this difference?

There should be no difference with Flip() behaviour from just changing
DSCAPS_SYSTEMONLY or DSCAPS_VIDEOONLY.

This is the actual code that selects the buffermode:

if (caps & DSCAPS_TRIPLE) {
     if (caps & DSCAPS_SYSTEMONLY)
          return DFB_UNSUPPORTED;
     config.buffermode = DLBM_TRIPLE;
} else if (caps & DSCAPS_DOUBLE) {
     if (caps & DSCAPS_SYSTEMONLY)
          config.buffermode = DLBM_BACKSYSTEM;
     else
          config.buffermode = DLBM_BACKVIDEO;
} else
     config.buffermode = DLBM_FRONTONLY;

As you can see the difference comes from DSCAPS_DOUBLE or DSCAPS_TRIPLE.

--
Ville Syrjälä
[EMAIL PROTECTED]
http://www.sci.fi/~syrjala/

_______________________________________________
directfb-users mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users

Reply via email to