Bonjour, j'ai un soucis bien particulier avec SDL ttf, je cherche à blitter une même ligne de texte en plusieurs couleur avec un contour tout ça sur une seule surface. J'ai donc bricolé ce code et ensuite ma fonction de rendu s'occupe de l'animation mais voilà le resultat
un autre exemple avec la surface affichée en entière(les B ont disparus)
La couleur blanche c'est le premier passage dans la boucle ensuite bleu et les autres ne s'affichent même pas, le comportement est aléatoire, parfois les autres couleurs s'affichent avec des lettres en moins soit elles ne s'affichent pas et j'ai le message : text has zero width alors que line ne change pas.
ça me fait ça seulement si je met TTF_SetFontOuline donc je me doute que cette fonction a un comportement particulier que je ne connais pas. Si quelqu'un pouvais m'aider j'en serais reconnaissant, merci d'avance.
ps: je précise que ça ne vient pas de l'animation, si j'affiche sfTarget on voit la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 SDL_Surface* sfTarget = RGBA_Surface(width,height); for(int i=0;i<font->colors.size();i++) // on blite le texte pour chaque couleur sur sfTarget { int vPos = 0; SDL_Surface* sf = TTF_RenderUNICODE_Solid(font->font,line, font->colors[i]); if(font->outlineSize>0) { TTF_SetFontOutline(font->font,font->outlineSize); SDL_Surface* outlineSf = TTF_RenderUNICODE_Solid(font->font,line, font->outlineColors[i]); if(outlineSf) { vPos = outlineSf->h * i; SDL_Rect dstRct = {0,vPos,0,0}; SDL_BlitSurface(outlineSf,NULL,sfTarget,&dstRct); SDL_FreeSurface(outlineSf); } else { //Print_UNICODE(line); std::cout << TTF_GetError() << std::endl; } TTF_SetFontOutline(font->font,0); } if(sf) { if(!font->outlineSize) vPos = sf->h * i; SDL_Rect dstRct = {font->outlineSize,vPos+font->outlineSize,0,0}; SDL_BlitSurface(sf,NULL,sfTarget,&dstRct); SDL_FreeSurface(sf); } else { //Print_UNICODE(line); std::cout << TTF_GetError() << std::endl; } }
Partager