retour présentation SVGALIB

source de tstvga4.c

/* test svgalib n°4 - écritures via vgagl - Patrick TRAU mai 02

  on utilise vgagl pour écrire du texte dans le graphique. Le reste est toujours
  uniquement en svgalib simple, bien que vgagl propose des fonctions de tracé
  plus évoluées (cercle, rectangles pleins, triangles pleins...)
  
  j'ai l'impression que la police gl_font8x8 ne fonctionne qu'en 256 couleurs au moins
  mais je me demande bien pourquoi

pour compiler  - attention : lier vgagl avant vga :
  gcc src.c -O3 -o exec -lvgagl -l vga
(n'oubliez pas de lancer sous root ou chmod s+u)
*/

 #include <stdio.h>
 #include <stdlib.h>
 #include <vga.h>
 #include <vgagl.h>

int choix_mode(void)
{
 int m;
 printf("choisissez une définition qui ne plante pas votre carte graphique:\n");
 printf(" G320x200x16  1");
 printf(" G640x200x16  2");
 printf(" G640x350x16  3");
 printf(" G640x480x16  4");
 printf(" G320x200x256 5");
 printf(" G320x240x256 6");
 printf(" G320x400x256 7");
 printf(" G360x480x256 8");
 printf(" G640x480x2   9");
 printf(" G640x480x256 10");
 printf(" G800x600x256 11");
 printf(" G1024x768x256 12 ? ");
 scanf("%d",&m);
 return m;
}

void tracecadre(void)
{
 int x,y,coul,i;
 x=vga_getxdim();  //récup résolution actuelle
 y=vga_getydim();
 coul=vga_white();     //récup n° de couleur du blanc dans le mode actu
 vga_drawline(0,0,x-1,0);
 vga_drawline(x-1,0,x-1,y-1);
 vga_drawline(x-1,y-1,0,y-1);
 vga_drawline(0,y-1,0,0);
}

 int main(void)
 {
    int i,mode;

    mode=choix_mode();
    vga_init();
    vga_setmode(mode);
    gl_setcontextvga(mode); /*donner obligatoirement le même mode qu'au dessus ! */

/* Solution 1 : on décompresse la police (256 chars)
    #define NBCHARS 256	//la police comporte 256 chars
    #define FONT_W 8	//un char fait 8x8 pixels
    #define FONT_H 8
    #define O_PIXEL 1	//256 couleurs = 1 octet/pixel
    #define FONT_COL 14	//couleur du texte
    void *font;
    font = malloc(NBCHARS * FONT_W * FONT_H * O_PIXEL); 
    gl_expandfont(FONT_W, FONT_H, FONT_COL, gl_font8x8, font); 
    gl_setfont(FONT_W, FONT_H, font);
**********************************************************************************/
/* Solution 2 : on la garde compressée, c'est un peu plus lent mais plus simple  */
    gl_setfont(8, 8, gl_font8x8); //largeur, hauteur, pointeur sur la police (c'est la seule en standard)
    gl_setwritemode(FONT_COMPRESSED); //la police gl_font8x8 est comprimée (on ne l'a pas "expandée")
    gl_setfontcolors(0, 12); //coul fond, coul texte
 
    tracecadre();

    for(i=0;i<10;i++) gl_printf(i*15,i*20,"nb aléatoire : %d ! ",rand()%10000);
      //gl_write (x,y,texte) est limité aux textes mais marche dans plus de versions

    fprintf(stderr,"appuyez une touche pour quitter"); //on ne peut pas écrire dans le graphique mais dans la console ayant lancé le prog
    vga_getch();  //attend un touche, retourne la touche appuyée (si nécessaire)

    vga_setmode(TEXT); //retourner au mode texte (important)
    printf("fini\n");  //les printf se font sur la console où on a lancé la commande (ou dans CTRL ALT 8 suivant les cas)
    return EXIT_SUCCESS;
 }


retour présentation SVGALIB

Patrick Trau, IPST, Université Louis Pasteur Strasbourg, mai 2002