Использование OpenGL с SDL. Приятно познакомиться с библиотекой GL (в наши дни я почти не вижу возможности использования без графического ускорения, даже графические интерфейсы используют его сейчас). SDL_image имеет возможность проверить альфа-канал. Моя функция, которая создает текстуру из пути к файлу изображения (использует IMG_Load SDL_image() функция) имеет следующее:
// 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() просто округляет число до следующей ближайшей мощности 2. Много видеокарт в настоящее время может обрабатывать немощные 2 значения для размеров текстур, но, насколько я могу судить, они определенно НЕ оптимизированы для него (проверенные рамки). Другие видеокарты просто отказываются оказывать, ваше приложение может произойти сбой, и т.д. и т.п.
код здесь: http://www.tatsh.net/2010-06-19/using-sdlimage-and-sdlttf-opengl
Похоже SDL 2 поддерживает его: https://wiki.libsdl.org/SDL_SetTextureBlendMode/HTTP: //lazyfoo.net/tutorials/SDL/13_alpha_blending/index.php –