Прозрачная SDL_Surface без фона

Я работаю с SDL и OpenGL.
Я использую SDL TTF для создания поверхности с текстом, а затем создать текстуру с этой поверхностью.

Я пытаюсь применить альфа-канал (непрозрачность) к тексту, я использую этот способ:

    SDL_Surface * fontsurf = TTF_RenderUTF8_Blended(font,buff_split.at(i).c_str(),color);
SDL_PixelFormat *format = fontsurf->format;
SDL_Surface* newSurface = SDL_CreateRGBSurface( SDL_SRCALPHA,
fontsurf->w, fontsurf->h, 32,
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 );Uint32 alpha = 0;
alpha = SDL_MapRGBA( newSurface->format, 0,0,0, color.unused);

SDL_Rect rect;
rect.x = 0;
rect.y = 0;
rect.h = fontsurf->h;
rect.w = fontsurf->w;
int ret = SDL_FillRect( newSurface, &rect, alpha);

SDL_SetAlpha(newSurface,SDL_SRCALPHA,SDL_ALPHA_TRANSPARENT);

ret = SDL_BlitSurface( fontsurf, 0, newSurface, 0 );

Непрозрачность применяется правильно, но SDL_MapRGBA создает черный фон в «newSurface».
Как я могу применить альфа / непрозрачность к тексту, не добавляя фон, только текст?

0

Решение

Я думаю, что вам не хватает SDL_SetColorKey для newSurface.

Что-то вроде этого:

SDL_SetColorKey( newSurface , SDL_SRCCOLORKEY, SDL_MapRGB( newSurface->format, 0, 0, 0) );

или еще проще было бы пропустить заполнение newSurface черным прямоугольником

удали это:

SDL_FillRect( newSurface, &rect, alpha);

Вот пример, как я делаю картинку с прозрачным цветом:

testImage = IMG_Load( "trans.png" );
// This picture contains color 255,0,255 which will be set as transparent

SDL_SetColorKey( testImage , SDL_SRCCOLORKEY, SDL_MapRGB( screen->format, 255, 0, 255) );
// I set the color 255,0,255 as transparent for that surface

SDL_BlitSurface( testImage , NULL , screen , NULL );
// and I draw it on the main surface (screen)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]