siema.
próbuję uzyskać efekt stopniowego znikania/pojawiania się obrazka wyświetlanego na ekranie przy użyciu bibliotek SDL 1.2.x. W tym momencie, mając daną warstwę screen_SDL, zawierającą obrazek, początkową wartość alpha oraz alphainc, oraz mode = fadeout lub fadein (dest określa wymiary 0,0,screen->w,screen->h), uzyskuję to w następujący sposób:
while(alpha >= 0 && alpha < 256) {
if (strcmp(mode, "fadeout") == 0) clearscreen(0, 0, 0);
/* Display the surface */
if (!use_gl) { // OpenGL OFF
SDL_SetAlpha(screen_SDL, SDL_SRCALPHA, alpha);
SDL_BlitSurface(screen_SDL, NULL, screen, &dest);
}
else { // OpenGL ON
...
}
flipscreen();
SDL_Delay(100);
/* Calculate the next alpha value */
alphadiff += alphainc;
if(strcmp(mode, "fadein") == 0) alpha += alphadiff;
else alpha -= alphadiff;
}
Problem w tym, że trochę zamula to na starszym sprzęcie (CPU ~1GHz z grafą Radeon 9200). Czy istnieje jakaś alternatywa, żeby zamierzony efekt uzyskać szybciej?
Wiem, że SDL 2 zapewne dawałby lepsze wyniki, ale akurat w tej chwili jestem przywiązany do 1.2.
Mogę korzystać też z SDL_gfx 2.0.25 - jest tam jakaś funkcję SDL_gfxBlitRGBA(), ale na tyle co zdążyłem się przyjrzeć dołączonemu przykładowi w TestGfxBlit.c, to tam i tak na koniec wywoływane jest SDL_BlitSurface() dla wyrzucenia wszystkiego na ekran…