FAQ SDL
FAQ SDLConsultez toutes les FAQ
Nombre d'auteurs : 6, nombre de questions : 67, création le 10 mai 2013
Souvent, lorsqu'un programme devient assez mature, les développeurs veulent trouver une solution pour cacher les ressources ou réduire leur nombre.
Une solution souvent utilisée est d'inclure les ressources dans des fichiers ressources. Ceci est déconseillé vu que cela limite la portabilité du programme. Une solution plus adaptée serait de créer sa propre archive et de les charger directement en mémoire.
La bibliothèque SDL fournit des fonctions avec un suffixe RW qui prennent en paramètre un SDL_RWops. Par exemple, IMG_Load a son équivalent IMG_Load_RW.
Il existe quatre fonctions pour créer une structure SDL_RWops :
SDL_RWops*
SDL_RWFromFile
(
const
char
*
file, const
char
*
mode);
SDL_RWops*
SDL_RWFromFP
(
FILE *
fp, int
autoclose);
SDL_RWops*
SDL_RWFromMem
(
void
*
mem, int
size);
SDL_RWops*
SDL_RWFromConstMem
(
const
void
*
mem, int
size);
Chaque fonction retourne un pointeur vers une structure SDL_RWops et les fonctions qui les chargent prennent généralement un paramètre pour dire si à la fermeture ou la libération de la mémoire, la structure SDL_RWops devrait être libérée.
Par exemple, le prototype de la fonction SDL_LoadBMP_RW est :
SDL_Surface SDL_LoadBMP_RW
(
SDL_RWops *
src, int
freesrc);
Le deuxième paramètre permet donc de dire que lorsque la surface sera créée la zone mémoire pour la structure SDL_RWops sera libérée. Il ne faudra donc pas le faire après.
La bibliothèque SDL_ttf permet aussi d'utiliser une structure SDL_RWops. Pour cela il faut utiliser la fonction :
SDL_Cursor *
SDLCALL TTF_OpenFontRW
(
SDL_RWops *
src, int
freesrc, int
ptsize);
Si le deuxième paramètre est non nul, alors cela veut dire que lors de la fermeture de la police, la bibliothèque SDL_ttf gérera la libération de mémoire. Par contre, si vous mettez une valeur nulle, alors vous devrez gérer la libération vous-même. Par contre, faites attention, il faudra libérer la structure lorsque la police créée n'est plus utilisée.