Autor Wątek: SDL i wczytywanie plików TTF  (Przeczytany 1190 razy)

Offline radex

  • Użytkownik

# Marzec 02, 2008, 12:08:20
Witam. Zauważyłem niepokojące zjawisko przy wykonywaniu funkcji TTF_RenderText_Solid - po każdym takim renderowaniu (używając tej samej powierzchni do renderowania (tylko nadpisanie zawartości) i tej samej czcionki) pamięć używana przez program zwiększa się o ok. 20kb. Nie zależy to od tego, że tekst jest co raz dłuższy, tylko po prostu używana pamięć rośnie.

Od czego to zależy? Przecież przy nadpisywaniu zawartości jakichś powierzchni poprzez położenie piksela nie zwiększa używanej pamięci, a funkcja TTF_RenderText_Solid już tak.

Z góry dzięki za pomoc.

Pozdrawiam  ;)

EDIT:

Kod wygląda tak:

inicjalizacja SDL_TTF i wczytanie czcionki:

TTF_Font *font;

if(TTF_Init()!=0){
  fprintf( stderr, "Unable to init SDL_ttf: %s\n",TTF_GetError());
  exit(1);
}

font=TTF_OpenFont("lucon.ttf", 60);
if(!font){
  fprintf(stderr, "TTF_OpenFont: %s\n", TTF_GetError());
  exit(1);
}
SDL_Surface * text1;
SDL_Color kolor;

SDL_Rect dest;

W pętli głównej:

kolor.r=0;
kolor.g=0;
kolor.b=255;

dest.x = 0;
dest.y = 0;
dest.w = 800;
dest.h = 50;

// tylko jeśli jest jakaś zmiana tekstu
if(!istext){
  text1 = TTF_RenderText_Solid(font, textV, kolor);
  istext = true;
}

SDL_BlitSurface( text1, NULL, ekran, &dest);
« Ostatnia zmiana: Marzec 02, 2008, 12:14:59 wysłana przez radex »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline infernus

  • Użytkownik

# Marzec 02, 2008, 12:12:03
Cytuj
TTF_RenderText_Solid() makes an SDL_Surface* that you can blit to the screen (or anything else). It is transparent, so that's nice.

Wiec przed jej ponownym uzyciem musisz zwolnic powiezchnie do ktorej renderujesz.

edit: sluzy do tego funkcja SDL_FreeSurface jesli dobrze pamietam.

no to powinno byc:
// tylko jeśli jest jakaś zmiana tekstu
if(!istext){
  SDL_FreeSurface(text1);
  text1 = TTF_RenderText_Solid(font, textV, kolor);
  istext = true;
}
« Ostatnia zmiana: Marzec 02, 2008, 12:19:23 wysłana przez infernus »

Offline radex

  • Użytkownik

# Marzec 02, 2008, 12:22:12
Dzięki wielkie. Teraz działa jak powinno.