Souci avec la bibliothèque SDL...
Résolu
Oguona
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
Oguona Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Oguona Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'essaye de me mettre à la bibliothèque SDL mais je n'ai encore pas réussi à faire un seul affichage correct !
J'ai beau chercher dans tout les coins, je ne vois pas pourquoi ce code, une fois exécuté me renvoie l'erreur "Segmentation fault". A s'en arracher les cheveux.
Le pire, est que ça passe si on utilise pas "SDL_MapRGB" mais la surface "plateau" sera noire quoi qu'il arrive...
J'aimerais une surface "plateau" blanche qui s'affiche sur un fond noir. Et je n'ai toujours pas réussi alors que ça parait être la base tout de même. Bref, Au-secour.
J'essaye de me mettre à la bibliothèque SDL mais je n'ai encore pas réussi à faire un seul affichage correct !
J'ai beau chercher dans tout les coins, je ne vois pas pourquoi ce code, une fois exécuté me renvoie l'erreur "Segmentation fault". A s'en arracher les cheveux.
#include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> void pause() { int continuer = 1; SDL_Event event; while (continuer) { SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; } } } int main(){ //On déclare les deux surfaces SDL_Surface *ecran = NULL; SDL_Surface *plateau = NULL; //On donne les deux couleurs utiles Uint8 Couleur1 = SDL_MapRGB(ecran->format, 0, 0, 0); Uint8 Couleur2 = SDL_MapRGB(ecran->format, 255, 255, 255); //printf("%d\n%d\n", Couleur1, Couleur2); printf("Les couleurs ne sont même pas initialisées\n"); SDL_Init(SDL_INIT_VIDEO); //On définit la fenêtre et on initialise les surfaces ecran = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF); plateau = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 8, 0, 0, 0, 0); SDL_WM_SetCaption("Cherchez le nombre", NULL); //On colore les deux surfaces SDL_FillRect(ecran, NULL, Couleur1); SDL_FillRect(plateau, NULL, Couleur2); //On définit la position du rectangle "plateau" SDL_Rect position; position.x = 0; position.y = 0; //On colle plateau sur ecran SDL_BlitSurface(plateau, NULL, ecran, &position); //On actualise SDL_Flip(ecran); //On met en pause jusqu'à la fermeture de la fenêtre pause(); SDL_Quit(); return 0; }
Le pire, est que ça passe si on utilise pas "SDL_MapRGB" mais la surface "plateau" sera noire quoi qu'il arrive...
J'aimerais une surface "plateau" blanche qui s'affiche sur un fond noir. Et je n'ai toujours pas réussi alors que ça parait être la base tout de même. Bref, Au-secour.
A voir également:
- Sdl_doublebuf
- Google photo bibliothèque - Accueil - Photo
- Ce fichier contient l'historique des livres empruntés à la bibliothèque. combien de titres différents contient-il ? ✓ - Forum Windows 10
- Bibliothèque dynamique aacs - Forum Windows
- Problème logiciel WinDVD BD for Vaio ✓ - Forum Logiciels
- Musique seven bibliothèque ✓ - Forum Musique / Radio / Clip
3 réponses
Déjà définie tes variables au debut de la fonction, ça sera plus propre :)
Il te manque un sdlfreesurface à la fin pour le plateau.
Les couleurs sont des Uint32, mais tu peux mettre int tout simplement.
Il te manque un sdlfreesurface à la fin pour le plateau.
Les couleurs sont des Uint32, mais tu peux mettre int tout simplement.
J'ai donc un peu arrangé mon main(), je n'utilise plus de variables pour les couleurs et toutes les déclarations se font au début, mais la surface "Plateau" reste toujours noire et non blanche comme elle devrait être :
int main(){ //On déclare les deux surfaces SDL_Surface *ecran = NULL; SDL_Surface *plateau = NULL; //On définit la position du rectangle "plateau" SDL_Rect position; position.x = 220; position.y = 180; SDL_Init(SDL_INIT_VIDEO); //On définit la fenêtre et on initialise les surfaces ecran = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF); plateau = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 8, 0, 0, 0, 0); SDL_WM_SetCaption("Cherchez le nombre", NULL); //On donne les deux couleurs utiles //Uint8 Couleur1 = SDL_MapRGB(ecran->format, 0, 0, 0); //Uint8 Couleur2 = SDL_MapRGB(ecran->format, 255, 255, 255); //printf("%d\n%d\n", Couleur1, Couleur2); //On colore les deux surfaces SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0)); SDL_FillRect(plateau, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); //On colle plateau sur ecran SDL_BlitSurface(plateau, NULL, ecran, &position); //On actualise SDL_Flip(ecran); //On met en pause jusqu'à la fermeture de la fenêtre pause(); SDL_FreeSurface(plateau); SDL_Quit(); return 0; }
plateau = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 8, 0, 0, 0, 0);
Pas 8 mais 32 !!!!!!!!
Pas 8 mais 32 !!!!!!!!