Проблемы прозрачности поверхности SDL_Surface

Я работал с sdl ttf, сейчас я создаю функцию визуализации текста для многострочного рендеринга текста.

Я создаю поверхность для каждой линии, вставляю ее в «глобальную» поверхность, а затем преобразую эту «глобальную» поверхность в текстуру.

На самом деле моя проблема заключается в следующем: если я позволю прозрачной глобальной поверхности, блики не работает (он показывает пустую поверхность), если я установил, что SDL_FillRect, а затем сделать SDL_SetColorKey, не работает.

Я пытался сделать это с помощью метода на пиксель, он работает, но это не ожидаемый результат.

Что мне действительно нужно, так это: Blit поверхности (текстовые визуализированные поверхности с TTF_RenderText_Blended), блики их внутри SDL_Surface с прозрачным фоном, вот и все.

SDL_Surface * surfed_texture = SDL_CreateRGBSurface(SDL_SWSURFACE,surface_width,surface_height,32,
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);

Uint32 tormv = SDL_MapRGB(surfed_texture->format,255,0,255);

int possiblecolors[] = { 255,0,255,255,255,255 };

int in_pc = 0;

if(color.r == possiblecolors[0] && color.g == possiblecolors[1] && color.b == possiblecolors[2]){
in_pc=3;
}

/*SDL_FillRect(surfed_texture,NULL,SDL_MapRGB(surfed_texture->format,possiblecolors[in_pc],possiblecolors[in_pc+1],possiblecolors[in_pc+2]));
SDL_SetColorKey(surfed_texture, SDL_SRCCOLORKEY, SDL_MapRGB(surfed_texture->format,possiblecolors[in_pc],possiblecolors[in_pc+1],possiblecolors[in_pc+2]));
*/
SDL_Surface * temporal = NULL;
for(int i=0;i<(int)buff_split.size();i++){
const char* c_text = buff_split.at(i).c_str();

temporal = TTF_RenderText_Blended(font,c_text,color);

int w_fo;
int h_fo;
TTF_SizeText(font,c_text,&w_fo,&h_fo);

SDL_Rect rct;
rct.y=i*lineSkip;

if(txt_align==ALIGN_LEFT){
rct.x=0;
}else if(txt_align==ALIGN_CENTER){
rct.x = surface_width/2 - w_fo/2;
}else if(txt_align==ALIGN_RIGHT){
rct.x = surface_width - w_fo;
}

rct.w=0;
rct.h=0;

// Blit surface

SDL_BlitSurface(temporal,NULL,surfed_texture,&rct);

SDL_FreeSurface(temporal);

}

Размытие в «surfed_texture» с прозрачным фоном = не показывает бликованную поверхность.
Per-Pixel метод: не удаляет весь фон.

И SDL_SetColorKey не работает! (Я уже пробовал SDL_DisplayFormatAlpha, но кадры не работают).

Некоторая помощь?

0

Решение

Решение заключается в следующем:

Используйте SDL_SetAlpha NOT на «глобальной» поверхности, примените SDL_SetAlpha к каждой «временной» поверхности без флагов и со значением 0:

SDL_SetAlpha(temporal,NULL,0);

Теперь работает нормально!

1

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

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

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