Verwenden Sie OpenGL mit SDL. Es ist gut, sich mit der GL-Bibliothek vertraut zu machen (ich sehe heutzutage kaum noch Verwendung für nicht-grafikbeschleunigtes Zeug, selbst GUIs verwenden es jetzt). SDL_image hat eine Möglichkeit, nach Alphakanälen zu suchen. Meine Funktion, die Texturen aus einem Pfad zu einer Bilddatei erstellt (verwendet SDL_image's IMG_Load() Funktion) hat dies:
// if we successfully open a file
// do some gl stuff then
SDL_PixelFormat *format = surface->format;
int width, height;
width = pow2(surface->w);
height = pow2(surface->h);
SDL_LockSurface(surface); // Call this whenever reading pixels from a surface
/* Check for alpha channel */
if (format->Amask)
glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels);
else
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, surface->pixels);
SDL_UnlockSurface(surface);
pow2() rundet die Zahl einfach auf die nächstgelegene Potenz von 2. Viele Grafikkarten können heutzutage mit Werten umgehen, die keine Potenz von 2 für Texturgrößen sind, aber soweit ich das beurteilen kann, sind sie definitiv NICHT dafür optimiert (getestete Frameraten). Andere Grafikkarten weigern sich einfach zu rendern, Ihre Anwendung kann abstürzen, usw. usw.
Der Code ist hier: http://www.tatsh.net/2010-06-19/using-sdlimage-and-sdlttf-opengl