FAQ SDL

FAQ SDLConsultez toutes les FAQ
Nombre d'auteurs : 6, nombre de questions : 67, création le 10 mai 2013
Sommaire→Interfaçage avec OpenGLPour 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.



