IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Vos premières fenêtres avec la SDL 2
Un tutoriel d'Alexandre Laurent

Le , par LittleWhite

0PARTAGES

4  0 
Bonjour à tous,

Suite au tutoriel d'installation de la bibliothèque SDL 2, ce tutoriel vous enseignera la création de fenêtres avec la nouvelle version de la bibliothèque de jeux.

Pour démarrer encore plus vite, n'hésitez pas à télécharger les projets SDL 2 pré-configurés.

Bonne lecture et j'espère voir rapidement vos réalisations avec la SDL 2.0.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Kannagi
Expert éminent sénior https://www.developpez.com
Le 16/05/2020 à 9:31
De la part de quelqu'un qui tente d'afficher un pixel à l'écran depuis deux ans , oui je suis sur que le probleme ne vient pas de toi
8  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 16/05/2020 à 10:54
C'est sur que l'on avance. Si vous voulez des tutoriels meilleurs, peut être il faut aider les auteurs à gérer les cas tordus qui peut exister en informatique. Il est possible que vous ayez une configuration particulière qui demande un soin particulier.

En tout cas, ne pas dire ce que vous avez testé, ne pas dire ce qui ne marche pas (message d'erreur ou autre), on ne peut rien en tirer.

C'est d'autant plus navrant que Developpez.com est le seul site à offrir des templates de projet prêt à l'emploi. Il suffit de décompresser et cela fonctionne. Alors, en effet, je ne suis pas à l'abri d'une erreur, c'est pourquoi si vous voulez être utile et non pas juste un troll, il va falloir y mettre du votre.
8  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 15/05/2020 à 17:15
OK, cool story !
Lorsque l'on remonte un souci sur un tutoriel, ou avec un logiciel, il faut au moins expliqué ce que vous avez fait, dans quelle condition et quelles sont les problèmes que vous rencontrez. Sans quoi, cela ne fait qu'ajouter un message inutile sur Internet.

J'ai dans l'espoir que vous viendrez nous dire qu'est ce qui ne marche pas et dans quelle condition .
6  0 
Avatar de Bousk
Rédacteur/Modérateur https://www.developpez.com
Le 10/06/2020 à 15:09
Entre l'indentation inexistantes et les commentaires à chaque ligne pour dire des évidences (// Définis "mafenetre" et "monrendu" j'avais jamais vu ça ailleurs que dans le premier code C d'un étudiant), il n'y a rien de même vaguement difficile et tout ceci est disponible en lisant bêtement la doc.
Le code est au mieux médiocre. Doit-on réellement croire que quelqu'un avec 30ans d'informatique dans les jambes a écrit ce truc ? Ou plutôt n'a pas été capable d'y parvenir auparavant ? 30 ans ?? À pousser des ordinateurs alors, parce que travailler avec, en tous cas pas comme développeur.
Le tout en fournissant des rapports d'erreurs ridiculement vides en essayant de flame les contributeurs au passage ?!
Il n'y a aucune vérification des variables, il n'y a pas la phase de libération des ressources.

Le premier code de la doc pourrait être copier/coller pour avoir un résultat largement meilleur https://wiki.libsdl.org/SDL_CreateWi...dowAndRenderer
Alors c'est sûr qu'ils affichent pas un point dans l'exemple, mais il faut pas plus de 5 minutes pour une personne sensée pour savoir utiliser SDL_RenderDrawPoint.
4  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 29/05/2020 à 9:53
Je me lance ...,

Je viens de réinstaller un Raspberry Pi, donc on peut le considérer comme vierge.
On commande par installer la bibliothèque SDL 2 :
Code : Sélectionner tout
apt-get install libsdl2-dev
(Je ne m'occupe pas de SDL2_image, ou SDL2_TTF, mais le principe sera le même.)

Et comme mon système est vierge, j'installe aussi un compilateur et make pour lire les Makefiles :
Code : Sélectionner tout
apt-get install gcc
Ensuite, on prend le code d'un template, comme proposé précédemment :
Code : Sélectionner tout
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
#include <SDL2/SDL.h>

#include <stdio.h>

int main(int argc, char** argv)
{
    /* Initialisation simple */
    if (SDL_Init(SDL_INIT_VIDEO) != 0 )
    {
        fprintf(stdout,"Échec de l'initialisation de la SDL (%s)\n",SDL_GetError());
        return -1;
    }

    {
        /* Création de la fenêtre */
        SDL_Window* pWindow = NULL;
        pWindow = SDL_CreateWindow("Ma première application SDL2",SDL_WINDOWPOS_UNDEFINED,
                                                                  SDL_WINDOWPOS_UNDEFINED,
                                                                  640,
                                                                  480,
                                                                  SDL_WINDOW_SHOWN);

        if( pWindow )
        {
            SDL_Delay(3000); /* Attendre trois secondes, que l'utilisateur voit la fenêtre */

            SDL_DestroyWindow(pWindow);
        }
        else
        {
            fprintf(stderr,"Erreur de création de la fenêtre: %s\n",SDL_GetError());
        }
    }

    SDL_Quit();

    return 0;
}
On ne prend que le Makefile et le fichier .c, car les bibliothèques présentes dans le template sont pour une architecture x86 et le Raspberry Pi est en architecture ARM.

On utilise le Makefile suivant :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
all:
	gcc -Wall -Wextra -lSDL2-2.0 main.c -o main
 
run:
	LIBGL_DEBUG=verbose ./main
 
clean:
	rm -f ./main
Le fichier main.c est dans le même dossier que le Makefile.

Bref, ça compile sans surprise.

Si vous avez l'erreur (très improbable) :
* failed to open vchiq instance
Il faut ajouter l'utilisateur au groupe 'video'.

Et voilà, vous lancez le programme, vous avez une fenêtre qui s'ouvre, pendant trois secondes et qui se ferme.
3  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 10/06/2020 à 9:52
Je ne sais pas pourquoi vous avez fait un code aussi crade, alors que fonctionnellement, il est équivalent au mien.
Plus précisément :
  • pas d'indentation ;
  • pas de vérification d'erreur ;
  • pas de libération des ressources.


Mais bon, si cela vous convient, tant mieux. À la revoyure.
3  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 30/05/2020 à 8:02
Ah ! Enfin un message d'erreur.
Donc, cela semble être un problème de configuration de Geany. Il tente (peut être l'avez vous indiqué) d'exécuter un fichier ./makefile. Il faut savoir qu'un Makefile ne s'exécute pas directement, il faut utiliser la commande make, pour l'exécuter. C'est-à-dire : il faut exécuter make dans le dossier où se trouve le Makefile. Par défaut, make lira le fichier Makefile du dossier courant et fera ce qu'il doit faire.
En bref : soit vous utilisez le terminal (ce que j'ai fait moi), soit vous reconfigurez Geany pour faire un make et non un ./makefile
2  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 30/05/2020 à 23:11
Premièrement, la commande à compiler, c'est make et non pas make makefileEnsuite, je suis obligé de vous redonner le Makefile, le copier-coller d'une session SSH ne sait pas passer aussi bien que prévu (espace VS tabulation). Voici le bon Makefile :
Code makefile : Sélectionner tout
1
2
3
4
5
6
7
8
all: 
	gcc -Wall -Wextra -lSDL2-2.0 main.c -o main 
  
run: 
	LIBGL_DEBUG=verbose ./main 
  
clean: 
	rm -f ./main


Pour l'erreur :
/tmp/geany_run_script_VH3WL0.sh: 7: /tmp/geany_run_script_VH3WL0.sh: ./main: not found

Vu que vous n'avez pas réussi à compiler, c'est normal . Maintenant que vous devriez réussir, grâce au bon Makefile, cela se passera mieux.

- Mais je préfèrerais avoir 1 seul fichier : fenetre.c que je compile dans geany et que j'exécute. Si j'exécute votre bout de code que vous m'avez donné, j'ai l'erreur dans une fenêtre terminal :

Bah, ça, c'est à vous de configurer correctement votre Geany.
Aussi, vous pouvez renommer le fichier main.c en fenetre.c, mais il faut changer le Makefile, en conséquence (pour indiquer le bon fichier à GCC).

- J'ai lu sur internet que la SDL pouvait avoir des problèmes de compatibilités sur RASPBIAN et qu'il existait des alternatives comme SFML, GLFW ou ALLEGRO, sachant que j'aimerais une solution aussi simple que possible pour créer une fenêtre et afficher un pixel dedans, est-ce que c'est seulement possible dans la pratique (en C avec GEANY dans 1 seul fichier fenêtre.c) ?

Restez avec la SDL 2. Possible que ce que vous avez lu sur Internet concerne la SDL 1. En tout cas, si la SDL 2 ne fonctionne pas, ce serait grave, beaucoup de projet reposent dessus.
Pour la méthode la plus simple, j'ose croire que c'est bien la SDL 2 qui est la plus simple. Ou alors, changez totalement de langage et de technologie. Car tout ce que vous avez cité, n'est pas plus simple et cela vous demandera encore plus d'effort.
Aussi, votre histoire de fichier fenêtre.c, en réalité, dans aucun cas, vous n'êtes obligé de vous en tenir à ce nom de fichier. Cela marchera quelque soit le nom du fichier.

Sinon, car j'ai besoin de dédramatiser : la méthode la plus simple : vous prenez GIMP, vous mettez votre pixel et vous enregistrez le fichier. Au double clic sur le fichier produit avec GIMP, vous aurez un pixel à l'écran. Appelez le fenêtre.c, si vous voulez .
2  0 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 31/05/2020 à 11:24
Pour plus de simplicités, je me passerais du teste d'initialisation.

Ce serait une très grosse erreur et prendre des raccourcis qui ne font que faire perdre du temps.

Pour GIMP, c'est une blague j'espère

Évidemment que c'est une plaisanterie.

ça fait plus de 30 ans que je fais de l'informatique et je vois bien la progression de ce domaine qui n'est vraiment pas sur le chemin de l'optimisation et l'ergonomie mais plutôt sur la boulimie par la complexification, et un cloisonnement bien hermétique.

En même temps, à l'origine, il n'y avait pas de carte graphique, tout juste 256 couleurs (et encore). Donc, il suffisait d'écrire dans une mémoire partagée entre le CPU et l'écran et c'était bon (totalement non secure). Maintenant, l'informatique est bien plus avancée (car les gens ont voulus toujours plus de choses) et on est obligé de passer par des encapsulations, dont la SDL, car la SDL permet de simplifier l'affichage de telle ou telle chose.
C'est comme avec une voiture, vous n'êtes pas entrain de vous plaindre qu'il y a l'ABS, le système de détection de lignes, les radars, le moteur avec turbo, injection et je ne sais pas quoi d'autres et vous n'êtes pas entrain de râler dessus pour dire cela se complexifie, cela est de la boulimie, du cloisonnement. Sinon, vous prenez un vélo, le vélo c'est simple et tout y est accessible. En informatique, prenez un microcontrôleur .

Pourtant c'est moins de 20 lignes, mais non, je n'arrive pas à mettre la main dessus.

Oui, enfin, faudrait arrêter de compter les lignes, c'est un exercice qui ne sert à rien.

Pour compiler un programme, il faut utiliser GCC. Vous pouvez évidemment vous passer d'un Makefile (d'ailleurs, vous devriez lire des tutoriels dessus). Car en réalité, le Makefile n'est qu'une syntaxe pour dire : executer telle ligne, telle ligne et telle ligne. Le Makefile que je vous ai donné est le plus simple du monde, et au final il ne fait qu'exécuter la ligne suivante :
Code : Sélectionner tout
gcc -Wall -Wextra -lSDL2-2.0 main.c -o main
Ce qui veut dire que si vous tapez la ligne suivante dans le terminal (à partir du bon dossier), vous compilez le programme.

Ce programme affiche un point rouge sur l'écran (il n'y a pas la gestion des événements (car tout est expliqué ici)) :
Code c : Sélectionner tout
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
#include <SDL2/SDL.h> 
  
#include <stdio.h> 
  
int main(int argc, char** argv) 
{ 
    /* Initialisation simple */ 
    if (SDL_Init(SDL_INIT_VIDEO) != 0 ) 
    { 
        fprintf(stdout,"Échec de l'initialisation de la SDL (%s)\n",SDL_GetError()); 
        return -1; 
    } 
  
    { 
        /* Création de la fenêtre */ 
        SDL_Window *pWindow = NULL; 
	SDL_Renderer *pRendered = NULL; 
	SDL_CreateWindowAndRenderer(640, 480, 0, &pWindow, &pRendered); 
  
        if(pWindow && pRendered) 
        { 
            SDL_SetRenderDrawColor(pRendered, 255, 0, 0, 255); // Détermine la couleur 
            SDL_RenderDrawPoint(pRendered, 400, 300); // Affiche un point 
            SDL_RenderPresent(pRendered); // Affiche l'image à l'écran 
  
            SDL_Delay(3000); /* Attendre trois secondes, que l'utilisateur voit la fenêtre */ 
  
            SDL_DestroyWindow(pWindow); 
        } 
        else 
        { 
            fprintf(stderr,"Erreur de création de la fenêtre: %s\n",SDL_GetError()); 
        } 
    } 
  
    SDL_Quit(); 
  
    return 0; 
}
Il est à noter que je ne connaissais pas l'existence de cette méthode pour afficher un point à l'écran. J'ai fait une recherche Google et j'ai trouvé cette discussion : https://stackoverflow.com/questions/...els-in-sdl-2-0
Si j'ai un dernier conseil à vous donner, c'est qu'au lieu d'apprendre le chinois, vous devriez essayer l'anglais avant .
2  0 
Avatar de Jamatronic
Membre éprouvé https://www.developpez.com
Le 20/05/2020 à 2:58
Citation Envoyé par yopso Voir le message
Qu'est-ce que vous voulez que je vous dise, ça ne fonctionne pas c'est tout, et c'est pas un message inutile, ça ne fonctionne pas, c'est une information importante, savoir pourquoi ne m'intéresse pas, de toute façon il y a des erreurs partout, je veux simplement créer une fenêtre avec la SDL, je suis le tuto, comme beaucoup d'autres, et ça ne fonctionne pas, comme beaucoup d'autres, c'est pas moi qui ai un problème, mais ceux qui font les tutos, c'est a eux qu'il faut demander et d'ailleurs, c'est à se demander s'ils ne le font pas exprès...

Hé bien tu vas voir la doc officielle, le wiki de libsdl.org, et tu te débrouilles avec.
Ensuite tu fais un tuto "qui marche".
1  0