SDL - Transparence



  • Kann mir jemand sagen warum es bei der SDL beim "Color Keying" so kompliziert gemacht worden ist:

    Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF );
    SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, colorkey );
    

    Warum müssen das unbedingt zwei Befehle sein? Warum hat man nicht alles in eine Funktion reingepackt?
    Kann mir das jemand erklären?

    MfG
    Stromberg



  • SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) );
    

    besser?



  • Wenn du unbedingt willst pack es dir doch selbst in ne Funktion:

    int MySetColorKeyRGB(SDL_Surface* image, Uint32 flags, r, g, b) //is glaub ich n int als returnwert
    {
    return SDL_SetColorKey( image, flags, SDL_MapRGB( image->format, r, g, b ) );
    }
    

    Warums SDL_MapRGB gibt?
    DerRückgabewert hängt von image->format ab, das ist zwar oft gleich, aber eben nicht immer.
    Z.b. wenn deine Surface 8 Bit hat, der RGB wert ist ja immer 24 bit, muss der angegebene wert zu einem nahegelgenen 8 bit wert konvertiert werden.

    Wenn du mit SDL_CreateRGBSurface was eigenes erstellst, kann da dann soweit ich weiß schon alles mögliche rauskommen.

    Nur der Programmierer weiß ob das format gleich bleibt oder nicht - also muss auch der entscheiden ob du irgendein Uint32 wert von nem MapRGB oder MapRGBA zwischengespeichert und weiterverwendet werden soll, oder eben jedesmal neu ein Farbwert hergeleitet werden soll.


Log in to reply