Skip to content

ebaudet/minilibx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

miniLibX

La miniLibX (ou mlx pour les intimes) est la librairie utilisée à Epitech et 42 pour les projets d’infographie: fil de fer, raytracer, ...

Ses caractéristiques principales sont l’aspect très simple des fonctions disponibles: ouvrir une fenêtre, afficher un pixel à l’écran, enregistrer un appel de touche (clavier ou souris). C’est une librairie basée sur l’environnement graphique X.org. Cet article est principalement là pour regrouper des ressources utiles sur la miniLibX, sur ses manuels et fichier associés. Les sources sont également fournies pour vous permettre de les installer chez vous et de faire tourner vos projets sur vos ordis persos.

Les fichiers de la miniLibX

En dehors des sources de ce repos, on peut aussi retrouver la miniLibX ici :

Archive des sources:

Documentation

Toutes les fonctions et la documentation se trouve dans la version PDF des manuels (attention, la version native Mac OSX possède certaines différences, je vous invite à lire les headers):

Instalation avec XQuartz ou Xorg

Voici un tutoriel pour installer la miniLibX (sur un MacOS X ou tout autre distribution proche). Si vous voulez vous économiser du temps, il existe un package pour MacOS X qui vous fera ça automatiquement: minilibx.pkg (créé par Mehdi Laouichi). Attention, il semblerait que cela ne fonctionne pas très bien voir plus du tout sur les dernières versions de MacOS X (> El Capitan). Je vous conseille de prendre les versions natives MacOS X pour vos projets.

Avant de commencer, n’oubliez pas d’installer le serveur X.org si vous ne l’avez pas déjà. Sous MacOS X, le plus simple est d’installer XQuartz (miroir de XQuartz 2.7.11)

Il va nous falloir compiler la miniLibX puis copier les fichiers générés dans divers dossiers du système.

~ $ cd minilibx
~/minilibx $ make
~/minilibx $ cd test
~/minilibx/test $ ./mlx-test # Vous permet de savoir si la compilation de la lib a réussi
~/minilibx/test $ cd ..

Maintenant que la miniLibX est compilée et testée, nous allons l’installer sur le système, c’est à dire copier les fichiers vers des dossiers qui sont accessibles pour tout le monde.

~/minilibx $ sudo cp mlx.h /usr/X11/include
~/minilibx $ sudo cp libmlx.a /usr/X11/lib
~/minilibx $ sudo cp libmlx_intel-mac.a /usr/X11/lib

Exemple

Hello World

Comme d’habitude, le fameux Hello World (cf titre de la fenêtre) pour commencer:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <mlx.h>

typedef struct    data_s
{
    void          *mlx_ptr;
    void          *mlx_win;
}                 data_t;

int main(void)
{
    data_t        data;

    if ((data.mlx_ptr = mlx_init()) == NULL)
        return (EXIT_FAILURE);
    if ((data.mlx_win = mlx_new_window(data.mlx_ptr, 640, 480, "Hello world")) == NULL)
        return (EXIT_FAILURE);
    mlx_loop(data.mlx_ptr);
    return (EXIT_SUCCESS);
}

Attention, pour la compilation, il ya deux cas.

  • Soit vous utilisez les « vieilles » versions utilisant X11 et il faut lancer ceci (attention à ne pas oublier les flags et attention à leur ordre):
~ $ gcc -I /usr/X11/include -g -L /usr/X11/lib -lX11 -lmlx -lXext <fichier(s) .c>
~ $ ./a.out
  • Soit vous utilisez les nouvelles lib natives MacOS X et il faut ajouter les flags -framework OpenGL -framework AppKit en plus. Vous remarquerez que même si cette libraire n’utilise plus X.org/X11, j’utilise toujours les chemins vers X11. C’est parce que lors de l’installation, nous avons copié la libmlx dans les dossiers X11 (souvenez-vous des sudo cp ... /usr/X11/...). Il faut donc ajouter les chemins de X11 pour la compilation. Si votre libmlx est ailleurs, pas besoin d’ajouter les chemins d’include vers X11.:
~ $ gcc -I /usr/X11/include -g -L /usr/X11/lib -l mlx -framework OpenGL -framework AppKit <fichier(s) .c>
~ $ ./a.out

Dans les deux cas, une fenêtre noire titrée "Hello world" devrait s'ouvrir.

Quelques petits pièges à éviter

Si le sujet ne précise pas la possibilité d’utiliser la fonction système exit(), c’est une erreur de sujet. En effet, il est impossible de quitter « proprement » la miniLibX, il faut forcément faire un exit() ou quitter sauvagement via le bouton « Fermer » de la fenêtre. D’anciennes légendes parlent d’une fonction mlx_loop_stop() mais elle n’est pas présente dans les sources fournies ici.

Lorsque vous initialisez la mlx, avec mlx_init(), attention aux environnements shell vides, c’est à dire, n’oubliez pas de protéger votre mlx_init() car si votre appel de fonction n’est pas correctement protégé, vous aurez un joli plantage en règle, allez tout droit en prison, sans passer par la case départ, ne touchez pas 20 000€. La commande pour tester cela vous même: $ env -i <votre-executable> S’il plante, c’est que vous ne l’avez pas bien protégé.

Si vous avez utilisé un paquet Debian ou une autre méthode d’installation, il est possible de devoir rajouter un dossier d’include pour la compilation: -I /opt/X11/include/X11

Pour plus d'info : https://achedeuzot.me/2014/12/20/installer-la-minilibx/

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors