Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
Tous les projets des élèves ingénieurs de Supinfo



Projets
  Dernier Projet
  Les plus populaires
  Tous les Projets

349 Visiteurs
3168 Projets


My Supinfo-Projects

   Connectez-vous
   Créez un Compte


Synopsis

   44 Visites
   Note INTERNET : 18.6
    (3 Votants)
   0 Commentaires

   Lire l'article

Evaluez cet article

20
18
16
14
12
10
8
6
4
2
0


Commentez cet article

Auteur :

Email :

Votre commentaire :



 
2005 - Pérennisation
Creation d'un moteur de jeu base sur les tiles
[40 mn de lecture - paru le 5/17/2005 5:39:48 PM - Public : Confirmé]

Auteur

cuella_sSamuel CUELLA
Elève-Ingénieur Supinfo Paris
Promotion SUPINFO 2009

   Lui écrire
   Tous les projets de cet auteur
   Le mini-CV de cet auteur

1 La librairie SDL

1.1 Introduction

La librairie SDL pour Single DirectMedia Layer est une libraire graphique performante, multi-plateformes sachant tirer parti des capacités du matériel et des facilites offertes par le système d'exploitation.
Sous Linux, elle est capable de s'exécuter indifféremment sous X ou dans le framebuffer. Sous Windows, elle sait tirer parti de l'API native DirectX.
Nous ne nous attarderons pas sur son installation ou sa compilation, et vous renvoyons à sa documentation pour de plus amples informations.

1.2 Initialisation

Avant d'espérer voir quoi que ce soit s'afficher à l'écran, il faut impérativement initialiser la librairie et régler certains paramètres comme la résolution, l'emplacement mémoire de l'espace de travail ou bien le double-buffering.
Notre programme commence donc comme ceci :

/*-----------------------------------sample.c----------------------------*/

#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"

SDL_Surface *screen ;

int main( int argc, char **argv )
{

    if( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
                printf("Couldn't initialize SDL: %s\n", SDL_GetError());
                exit(EXIT_FAILURE);
    }

    atexit(SDL_Quit);

     screen = SDL_SetVideoMode(800,
                                                 600,
                                                24,
                                               SDL_HWSURFACE|SDL_DOUBLEBUF);
   
    if ( !screen  ) {
        printf("Unable to set 800x600x24 video mode: %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS)
}   

Rien de transcendantal jusqu'ici, on inclut les entêtes standards, ainsi que celui de la librairie puis nous déclarons une variable globale de type SDL_Surface destinée à contenir l'adresse de l'écran. Que les puristes se rassurent, ce sera la seule !
En effet, lorsque l'on utilise la librairie SDL, toutes les opérations graphiques se font sur des surfaces de dessin, de type SDL_Surface. Tout est surface : même l'écran n'est qu'une surface !
Ensuite de procédons a l'initialisation de la partie graphique de la librairie grâce à la fonction SDL_Init( nous n'utiliserons pas la partie audio, ni le cdrom )
Enfin, nous réglons les paramètres vidéos a l'aide de la fonction SDL_SetVideoMode: 800x600 avec des couleurs sur 24 bits.
Le dernier paramètre de cette fonction nécessite toutefois quelques explications : comme vous l'avez remarqué, il s'agit d'un champ de bits combinant divers parametres
grâce au « pipe » OR.
SDL_HWSURFACE force la libraire à stocker les surfaces dans la mémoire vidéo plutôt que dans la mémoire centrale du système : en plus d'etre plus performant, cela nous permet d'utiliser le double-buffering.
SDL_DOUBLEBUF indique justement à notre libraire d'utiliser le double-buffering, ce qui améliore l'aspect graphique de notre application.
Le principe du double-buffering est de ne montrer le rendu qu'une fois que celui-ci est achevé.
L'exemple généralement utilisé pour illustrer ce principe est celui du peintre :
Si le peintre n'a qu'une seule toile et dessine au fur et à mesure, vous le voyez en train de dessiner, ce qui peut être gênant lors d'une animation par exemple...
Par contre, s'il dispose de deux toiles, il peut mettre la première image de l'animation sur son chevalet, se cacher pour dessiner l'image suivante sur sa deuxième toile puis une fois celle-ci terminée, échanger rapidement les deux toiles, ainsi de suite.
Résultat, c'est le cas de le dire, vous ne voyez plus que le résultat !
Et adieu le scintillement désagréable.
Cerise sur le gâteau, SDL gère le double-buffering de manière totalement transparente ! Nul besoin de déclarer deux surfaces puis de les échanger, dessinez simplement sur l'écran, et une fois terminé, il suffit d'appeler SDL_Flip() et le tour est joué.
Une fois notre mode graphique correctement initialisé, SDL_SetVideoMode nous renvoie un pointeur sur une SDL_Surface correspondant à l'écran que nous attribuons immédiatement a notre variable globale screen.
Ainsi dans n'importe quelle fonction, pour accéder à l'écran il suffira de faire référence à screen.
Bien entendu, si l'initialisation échoue, l'exécution sera interrompue et l'utilisateur recevra un message d'erreur lui indiquant la cause exacte grâce à la fonction SDL_GetError() qui retourne une chaîne de caractères contenant la dernière erreur s'étant produite.
Enfin, atexit(SDL_Quit) permet de toujours quitter le programme proprement, en « quittant » d'abord la libraire, en cela que cette ligne attache l'exécution de SDL_Quit à celle de la fonction exit(). Ainsi, si exit() est appelé, SDL_Quit sera exécutée juste avant. Inutile à présent de se soucier de mettre fin à l'exécution de la librairie, il suffit pour cela de mettre fin à l'exécution du programme grâce à un exit() régulier.

Ce début de programme ne fait pas grand chose mais reussit ou échoue !

Pour le compiler, la commande est la suivante :

gcc sample.c -o sample `sdl-config -libs --cflags`

Faites bien attention au sens des apostrophes ! Il s'agit de backquotes, obtenues par la combinaison alt-gr + 7 sur un clavier Azerty et non d'apostrophes classiques.




Articles de la même catégorie

 Pages : Top


24 Visites
0 Commentaires
Initiation au Perl
[10 mn de lecture - paru le 5/17/2005 5:31:28 PM - Public : Débutant]

En savoir plus


60 Visites
0 Commentaires
Interface graphique Swing avec Visual Editor
[15 mn de lecture - paru le 5/17/2005 5:31:04 PM - Public : Débutant]

En savoir plus


16 Visites
0 Commentaires
Create a graphical interface with dialog under Bash Scripting
[30 mn de lecture - paru le 5/17/2005 4:22:46 PM - Public : Débutant]

En savoir plus

   Tous les Articles


SUPINFO Training Center peut vous proposer une formation ...

   Devenez Ingénieur Système Microsoft en 35 jours avec SUPINFO Training Center
   Devenez Certifiés Cisco en 13 jours avec SUPINFO Training Center
   Devenez Administrateur Système Microsoft avec SUPINFO Training Center
   Devenez Développeur Microsoft .NET en 13 jours avec SUPINFO Training Center



Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :