FAQ SDL
FAQ SDLConsultez toutes les FAQ
Nombre d'auteurs : 6, nombre de questions : 67, création le 10 mai 2013
Pour initialiser SDL afin qu'il accepte l'affichage OpenGL, il suffit de procéder comme ceci :
if
(
SDL_Init
(
SDL_INIT_VIDEO) !=
0
)
{
printf
(
"
Impossible d'initialiser SDL : %s
\n
"
, SDL_GetError
(
));
return
1
;
}
La surface pour l'écran peut être définie de la manière suivante (on définit une fenêtre de résolution 800x600 avec 32 bits pour chaque pixel) :
screen =
SDL_SetVideoMode
(
800
, 600
, 32
, SDL_OPENGL);
if
(
screen ==
NULL
)
return
EXIT_FAILURE;
Si vous souhaitez utiliser les fonctions SDL 2D en même temps, il faut remplacer SDL_OPENGL par SDL_OPENGLBLIT.
Pour demander un double tampon pour l'affichage (voir https://jeux.developpez.com/faq/sdl/?page=2d#2D_double_buffering), on ne prévient plus dans SetVideoMode, mais on utilise à la place SDL_GL_SetAttribute :
/* Mettre en place le double buffer */
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1
);
Enfin, pour échanger les tampons en fin d'affichage :
SDL_GL_SwapBuffers
(
);
Si nous travaillons avec une image au format BMP, nous pouvons utiliser directement SDL et non SDL_image (voir https://jeux.developpez.com/faq/sdl/?page=2d#2D_formats).
Tout d'abord, nous déclarons une surface et appelons la fonction SDL_LoadBMP :
SDL_Surface *
temp;
temp =
SDL_LoadBMP
(
file);
Cette fonction retourne 0 s'il y a eu un problème. Ensuite, le code demeure du code OpenGL de base. On utilise simplement les membres de la structure SDL_Surface afin de récupérer les dimensions et les pixels de l'image chargée et les passer aux fonctions OpenGL :
/* Récupérer un numéro pour une texture */
glGenTextures(1
, &
image);
/* Charger une texture */
glBindTexture(GL_TEXTURE_2D, image);
/* Générer une texture */
glTexImage2D(GL_TEXTURE_2D, 0
, GL_RGB, temp->
w, temp->
h, 0
, GL_RGB, GL_UNSIGNED_BYTE, temp->
pixels);
/* Des bons paramètres */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
On définit le nombre de bits que nous voulons pour le tampon en utilisant la fonction SDL_GL_SetAttribute.
Par exemple, pour définir 16 bits pour le tampon de profondeur :
SDL_GL_SetAttribute
(
SDL_GL_BUFFER_SIZE, 16
);
On peut également définir le nombre de bits pour chaque couleur en utilisant les constantes SDL_GL_RED_SIZE, SDL_GL_GREEN_SIZE, SDL_GL_BLUE_SIZE et SDL_GL_ALPHA_SIZE.
On peut également faire de même pour le stencil buffer, avec SDL_GL_STENCIL_SIZE.