Thank you very much. It works. On Thu, Nov 18, 2010 at 8:17 PM, Karl Phillip <maxp...@gmail.com> wrote:
> Try this: > *primary_surface->SetBlittingFlags(primary_surface, > DSBLIT_BLEND_ALPHACHANNEL);* > > You might have to remove the calls to SetSrcBlendFunction() and > SetDstBlendFunction(). > > []'s > > On Thu, Nov 18, 2010 at 5:22 AM, Kelvin Chen <ryu...@gmail.com> wrote: > >> Hi, all: >> >> How can I make IDirectFBSurface::blit supporting a transparent background? >> I have tried a lot of methods, but it doesn't work. >> >> Here is my problem. >> 1> draw something to the primary_surface >> 2> create a tempory_surface with transparent background and draw something >> to it >> 3> blit the content of temporary_surface to the pramary_surface, but this >> operation should not erase what primary_surface already have >> >> Here is my code, it doesn't work, I don't know why. The blue rectangle >> draw on the primary_surface will be erased after the blit operation. >> >> Thanks a lot! >> >> #include <iostream> >> #include <directfb.h> >> >> *using* *namespace* std; >> >> *int* main(*int* argc, *char* *argv[]) >> >> { >> IDirectFB *dfb; >> >> // Initialize DirectFB >> DirectFBInit(&argc, &argv); >> DirectFBCreate(&dfb); >> dfb->SetCooperativeLevel(dfb, DFSCL_FULLSCREEN); >> >> >> >> // Create primary surface >> IDirectFBSurface *primary_surface; >> DFBSurfaceDescription primary_surface_description; >> primary_surface_description.flags = >> DFBSurfaceDescriptionFlags(DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT | >> DSDESC_PIXELFORMAT); >> >> >> primary_surface_description.caps = DFBSurfaceCapabilities(DSCAPS_PRIMARY >> | DSCAPS_FLIPPING); >> primary_surface_description.pixelformat = DSPF_ARGB; >> primary_surface_description.width = 1280; >> primary_surface_description.height = 800; >> >> >> dfb->CreateSurface(dfb, &primary_surface_description, &primary_surface); >> // Draw a big blue square >> primary_surface->SetColor(primary_surface, 0x00, 0x00, 0xff, 0xff); >> >> >> primary_surface->FillRectangle(primary_surface, 50, 50, 600, 600); >> primary_surface->Flip(primary_surface, NULL, DFBSurfaceFlipFlags(0)); >> // Sleep 1 seconds to observe the result >> >> >> sleep(1); >> >> // Create temporary surface >> IDirectFBSurface *temporary_surface; >> DFBSurfaceDescription temporary_surface_description; >> temporary_surface_description.flags = >> DFBSurfaceDescriptionFlags(DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT | >> DSDESC_PIXELFORMAT); >> >> >> temporary_surface_description.caps = >> DFBSurfaceCapabilities(DSCAPS_FLIPPING); // Not primary >> temporary_surface_description.pixelformat = DSPF_ARGB; >> temporary_surface_description.width = 1280; >> >> >> temporary_surface_description.height = 800; >> dfb->CreateSurface(dfb, &temporary_surface_description, >> &temporary_surface); >> // Clear the background with transparent black >> >> >> temporary_surface->Clear(temporary_surface, 0, 0, 0, 0); >> temporary_surface->SetColor(temporary_surface, 0, 0, 0, 0); >> temporary_surface->FillRectangle(temporary_surface, 0, 0, 1280, 800); >> >> >> // Draw a small red square >> temporary_surface->SetColor(temporary_surface, 0xff, 0x00, 0x00, 0xff); >> temporary_surface->FillRectangle(temporary_surface, 0, 0, 200, 200); >> >> >> temporary_surface->Flip(temporary_surface, NULL, DFBSurfaceFlipFlags(0)); >> // Copy the content of the temporary surface to primary surface >> DFBRectangle rect; >> rect.x = 0; >> >> >> rect.y = 0; >> rect.w = 1280; >> rect.h = 800; >> temporary_surface->SetSrcBlendFunction(temporary_surface, DSBF_SRCALPHA); >> primary_surface->SetDstBlendFunction(primary_surface, DSBF_DESTALPHA); >> >> >> primary_surface->Blit(primary_surface, temporary_surface, &rect, 0, 0); >> primary_surface->Flip(primary_surface, NULL, DFBSurfaceFlipFlags(0)); >> // Sleep 3 seconds to observe the result >> >> >> // Note that the original blue square is not destroyed >> sleep(3); >> >> temporary_surface->Release(temporary_surface); >> primary_surface->Release(primary_surface); >> >> >> dfb->Release(dfb); >> >> *return* 0; >> } >> >> >> >> >> -- >> Kelvin Chen >> >> _______________________________________________ >> directfb-users mailing list >> directfb-users@directfb.org >> http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users >> >> > -- Kelvin Chen
_______________________________________________ directfb-users mailing list directfb-users@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users