Hello Claudio,

Thanks a MILLION for your help. I follow your simple instructions and
I got the effect done right the way.

The only thing is that I lost the stuff that used to draw on top of
the surface. I can see that it's just being masked by the window,
because during fadeout, it shows. As if it was simply in the layer
below... I gave up for the day.

Thanks again for your help.

(if anybody wants to see the solution to this problem, just point your
browsers to http://svn.debian.org and click on Splashy. You will get
the source from there).

On 5/29/06, Claudio Ciccani <[EMAIL PROTECTED]> wrote:
> Luis wrote:
> > Hello,
> >
> > I sent this question to this mailing list before, but never got an
> > answer. Can somebody please point me in the right direction? I have
> > been researching this topic for a long time in the usual venues but I
> > couldn't get this to work (without some serious, hackish, misues of
> > blit()). I'd like to have a fade effect that works smoothly. I'm using
> > the XDirectFB technique of setting the opacity level of the top-most
> > window. This doesn't seem to be working.
>
> See below.
>
> > When i do my image provider routine, i call video_fade_in() like:
> >
> > void
> > video_start_splash (splashy_video_t * video, const gchar * background)
> > {
> >         DFBSurfaceDescription desc;
> >         /* DFBDisplayLayerDescription ldesc; */
> >         DFBWindowDescription win_desc;
> >
> >         /*
> >          * initializing Directfb
> >          */
> >         /*
> >          * - no-debug           := suppresses debug messages
> >          * - quiet              := suppresses all messages (but debug)
> >          * - graphics-vt        := puts directfb vt in graphics mode
> >          * - no-cursor          := disallow showing a cursor
> >          */
> >
> >         _current_background = background;
> >
> >         DFBCHECK (DirectFBInit (NULL, NULL));
> >         DirectFBSetOption ("quiet", NULL);
> >         DirectFBSetOption ("no-debug", NULL);
> >         DirectFBSetOption ("graphics-vt", NULL);
> >         DirectFBSetOption ("no-cursor", NULL);
> >         /*
> >          * in window-mode our dfb seems to prefer to go to the top layer
> >          * which masks the progress bar! commented out (libdirectfb-0.9.22)
> >          * This also makes the progressbar draw slower!
> >          */
> >         /*
> >          * DirectFBSetOption( "force-windowed", NULL);
> >          */
> >
> >         DFBCHECK (DirectFBCreate (&video->dfb));
> >
> >         video->mode = g_new0 (splashy_videomode_t, 1);
> >         /*
> >          * set our expectation to a very big number
> >          */
> >         preinit (NULL);
> >         video->mode->out_height = fb_vinfo.yres;
> >         video->mode->out_width = fb_vinfo.xres;
> >
> >         DEBUG_PRINT ("Setting min Width (x) resolution to %d",
> >                         video->mode->out_width);
> >         DEBUG_PRINT ("Setting min Height (y) resolution to %d",
> >                         video->mode->out_height);
> >
> >         video_set_mode (video);
>
> If you are calling IDirectFB::SetCooperativeLevel(DFSCL_FULLSCREEN) +
> IDirectFB::SetVideoMode() from video_set_mode(), it won't work.
> Use IDirectFBDisplayLayer::SetCooperativeLevel(DLSCL_EXCLUSIVE) +
> IDirectFBDisplayLayer::SetConfiguration() instead.
>
> >
> >         DFBCHECK (video->dfb->CreateImageProvider (video->dfb, background,
> >                                 &video->provider));
> >         DFBCHECK (video->provider->GetSurfaceDescription (video->provider,
> >                                 &desc));
> >         /*
> >          * flags to set the default surface as main surface
> >          */
> >         desc.flags = DSDESC_CAPS;
> >         desc.caps = DSCAPS_PRIMARY;
> >
> >         /*
> >          * store our primary layer as this will be use for setting the 
> > opacity
> >          * levels later
> >          */
> >         DFBCHECK (video->dfb->GetDisplayLayer(video->dfb,
> >                                 DLID_PRIMARY,&video->primary_layer));
> >
> >         /* DFBCHECK
> > (video->primary_layer->GetDescription(video->primary_layer,&ldesc));
> > */
> >
> >         /* this only applies for directfb 0.9.12 and up */
> >         /* ldesc.caps = DLCAPS_SURFACE | DLCAPS_ALPHACHANNEL | 
> > DLCAPS_OPACITY;*/
> >
> >         win_desc.flags = ( DWDESC_POSX | DWDESC_POSY |
> >                      DWDESC_WIDTH | DWDESC_HEIGHT );
> >         win_desc.posx = 0;
> >         win_desc.posy = 0;
> >         win_desc.width = video->mode->out_width;
> >         win_desc.height = video->mode->out_height;
> >
> >         DFBCHECK (video->primary_layer->CreateWindow (video->primary_layer,
> >                 &win_desc, &video->primary_window));
> >         DFBCHECK (video->primary_window->GetSurface(video->primary_window,
> >                 &video->primary_surface));
>
> Remove the following line: you are overwriting the window's surface.
> >         DFBCHECK (video->dfb->CreateSurface (video->dfb, &desc,
> >           &video->primary_surface));
> >
> >         /*
> >          * allow surface to have alpha channels
> >          * fade in effect won't work with alpha channels in window
> >          * because we use Opacity levels
> >          */
> >         /*
> >         DFBCHECK (video->primary_surface->SetBlittingFlags
> >                         (video->primary_surface, 
> > DSBLIT_BLEND_ALPHACHANNEL));*/
>
> To have an alpha channeled window, add DWCAPS_ALPHACHANNEL to the window
> capabilities flags.
>
> >
> >         /*
> >          * it writes on the framebuffer the background image
> >          */
> >         video->provider->RenderTo (video->provider, video->primary_surface,
> >                         NULL);
> >
> >         /*
> >          * fade in effect
> >          */
> >
> >         if (g_ascii_strncasecmp (xml_parser_get_text
> > ("/splashy/fadein"),"yes",3) == 0 )
> >                 video_fade_in (video);
> >
> > }
> >
>
>
> --
> Regards,
>       Claudio Ciccani
>
> [EMAIL PROTECTED]
> http://directfb.org
> http://sf.net/projects/php-directfb
>


-- 
----)(-----
Luis Mondesi
*NIX Guru

Kiskeyix.org

"We think basically you watch television to turn your brain off, and
you work on your computer when you want to turn your brain on" --
Steve Jobs in an interview for MacWorld Magazine 2004-Feb

No .doc: http://www.gnu.org/philosophy/no-word-attachments.es.html

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

Reply via email to