Initiation à la bibliothèque GRRLIB

GRRLIB est une bibliothèque graphique codée en langage C pour la conception d’homebrews sur la Wii. Grâce à cette bibliothèque, l’utilisation des fonctions GX n’est plus nécessaire. GX est la bibliothèque graphique de Nintendo qui interface le processeur graphique de la console.

GRRLIB est un projet à code source ouvert qui est hébergé sur le site Web de GitHub. La dernière version stable est disponible en téléchargement sous forme de fichier compressé et la version en développement peut être récupérée sous Subversion.

Pour compiler GRRLIB, il faut d’abord que devkitPro avec les composants devkitPPC, libogc et libfat soit installé sur votre PC. devkitPPC permet la compilation de code pour l’architecture powerpc-eabi. La bibliothèque libogc assure un support pour les fonctions GX et libfat permet l’utilisation du système de fichiers FAT.

Lors de son installation, GRRLIB va installer d’autres bibliothèques telles que libjpeg pour l’utilisation de fichiers JPEG, libpngu qui nécessite libpng et zlib pour l’utilisation d’images PNG et enfin FreeType pour l’utilisation de polices de caractères TrueType.

Pour lancer l’installateur, ouvrez une invite de commandes dans le dossier GRRLIB et tapez la ligne suivante:
make clean all install
Ceci pourrait prendre un peu de temps dépendant de la puissance de votre ordinateur. Quand le défilement de commande cessera, cela voudra dire que tout est installé. Les bibliothèques devraient avoir été copiées dans le dossier C:\devkitPro\libogc\lib\wii et les fichiers d’entête dans le dossier C:\devkitPro\libogc\include.

Pour ceux qui n’ont rien compris au dernier paragraphe, vous pouvez créer un fichier nommé install.bat dans le dossier GRRLIB et y insérer le code suivant:

@echo off
echo Nettoyage de l'installation pr‚c‚dente
make clean -s
echo Compilation du code source
make -s
echo Installation des bibliothŠques dans le dossier de libogc
make install -s

Ensuite, il suffit de double-cliquer sur le fichier pour démarrer l’installation de GRRLIB.

Vous êtes maintenant prêts à commencer à programmer un homebrew pour la Wii à l’aide de GRRLIB. Dans le dossier examples, il y a un projet Programmer’s Notepad qui contient le code minimum pour utiliser GRRLIB. Le projet se nomme template.pnproj et il est situé à l’intérieur du dossier template. Le projet inclut les fichiers main.c et Makefile. Ces fichiers devraient toujours être utilisés pour démarrer la programmation d’un nouveau jeu.

Maintenant, si vous faites Tools / make ou Alt+1, le projet se compilera et les fichiers template.elf et template.dol seront gérés. S’il y a une erreur, c’est que vous n’avez pas suivi les étapes correctement. Je vous conseille donc de lire attentivement le document README.html incorporé dans le téléchargement de GRRLIB. Si le problème persiste, vous pourrez toujours aller poser une question sur le forum officiel de la bibliothèque.

Les images ne sont pas utilisées directement dans GRRLIB. Il faut d’abord les transformer en texture avec la fonction GRRLIB_LoadTexture. Le résultat sera enregistré dans une structure de type GRRLIB_texImg. Il existe aussi des fonctions spécifiques pour les trois types d’image supportés par GRRLIB, soit GRRLIB_LoadTexturePNG, GRRLIB_LoadTextureJPG et GRRLIB_LoadTextureBMP. Si vous avez besoin de plus d’information sur les fonctions incluses dans la bibliothèque, il existe une documentation générée par Doxygen.

Avant d’incorporer une image à un projet, il faut savoir que ses dimensions doivent être inférieures ou égales à 1024 pixels. De plus, elles doivent être des multiples de quatre. Si l’image est un PNG, il faut aussi qu’elle soit en 24 ou 32 bits. Les palettes ne sont pas gérées par PNGU.

Les images peuvent être chargées à partir d’une carte SD avec la fonction GRRLIB_LoadTextureFromFile. Par contre, ce n’est pas cette façon qui sera démontrée ici. Les images seront ajoutées à l’intérieur des fichiers .elf et .dol dans le but d’avoir un seul fichier exécutable. Ceci permettra de tester plus facilement le homebrew dans Dolphin ou de l’exécuter sur la Wii à l’aide de wiiload.

Pour accomplir cette transformation, il existe quelques outils. raw2c est un utilitaire qui fonctionne par ligne de commandes et il est inclus dans le dossier bin de devkitPPC. WiiBuilder est un logiciel fonctionnant sous Windows qui permet de faire la même chose que raw2c en plus de plusieurs autres choses. Il est disponible en téléchargement sur le site Web de WiiBrew. Les avantages sont qu’il ne nécessite pas de lignes de commandes, qu’il donne des avertissements lorsque les images n’ont pas un format approprié et qu’il permet de générer seulement les fichiers d’entête. Le dernier point peut paraître inutile, mais cela fait en sorte que le fichier généré pourra être déplacé dans n’importe quel dossier sans avoir à modifier le Makefile pour ajouter un endroit supplémentaire à la compilation. La modification du fichier Makefile cause souvent des maux de tête au programmeur débutant, c’est pourquoi je ne parlerai pas de l’utilisation de bin2o pour générer un fichier objet qui inclut l’image.

Pour la démonstration, je vais me servir de l’image pirate.png qui se trouve dans le dossier \examples\bitmap_fx\source\gfx. Vous pouvez créer un dossier images à l’intérieur du dossier template dans lequel vous pourrez copier l’image. Si vous utilisez WiiBuilder, il suffit de faire un glisser-déposer de l’image à l’intérieur de la liste de la section File. Un fichier portant le nom de pirate.h devrait avoir été créé. C’est ce fichier qu’il faut ajouter dans main.c.

Passons maintenant à la programmation. Pour afficher l’image, il suffit d’ajouter quatre lignes au code du template. On ajoute à la liste d’entête celui-ci:

#include "../images/pirate.h"

Après la commande GRRLIB_Init, il faut ajouter ceci pour charger la texture:

GRRLIB_texImg *MaTexture = GRRLIB_LoadTexture(pirate);

À l’endroit où il est écrit « Place your drawing code here », on met le code suivant pour dessiner la texture à l’écran:

GRRLIB_DrawImg(100, 100, MaTexture, 0, 1, 1, 0xFFFFFFFF);

Finalement, on ajoute le code suivant à la suite de GRRLIB_Exit pour libérer la mémoire attribuée par GRRLIB_LoadTexture:

GRRLIB_FreeTexture(MaTexture);

Si vous utilisez l’émulateur Dolphin vous devriez avoir le résultat suivant:

L'émulateur Dolphin qui roule un homebrew assez simple

Ce n’est pas ce qu’on pourrait qualifier de meilleur homebrew au monde, mais au moins c’est un point de départ. Si vous êtes intéressés a continuer, allez regarder les autres exemples inclus avec GRRLIB.

Bonne chance dans la programmation de votre jeu révolutionnaire!

13 commentaires à propos de “Initiation à la bibliothèque GRRLIB”

  1. bonjour je suis nooby en programmation wii, j’aimerai installer la lib grrlib mais je ne comprend pas comment l’installer, j’extrait le zip ,puis je crée un fichier .bat mais après ou es que je le met ? ou je place le dossier extrait comment je l’installe ?
    C:\devkitPro : l’url de mon répertoire, et j’ai compiler le helloword.dol .
    Voila j’aimerai pouvoir faire des petits dessins sur ma wii ^^ .
    Au fait comment je fait pour transformer une image.png en image.png.h ?

    ps: j’ai utiliser le tutorial http://www.devsgen.com/wiki/doku.php/tutoriels:wii:installer_devkitpro?id=tutoriels:wii
    faites vous des liens entre les site [fr] pour un communoter fr. Merci j’attends vos réponses avec impatience.

    • Comme mentionné dans l’article vous pouvez utiliser WiiBuilder pour transformer votre PNG en fichier .h. Pour plus de détail sur l’utilisation du logiciel allez voir ce site Web.

      Pour le fichier Batch, il faut le mettre dans le dossier où vous avez extrait GRRLIB (celui avec le fichier Makefile et les dossiers lib et GRRLIB).

  2. merci, je vais tenter de tout réinstaller une fois encore, peut être qu’il y a un problème de compatibilité entre les version et les libs que j’ai installer donc je vais refaire le tuto d’installation point par point. j’ai pas envie de laisser tombé mais sa m’énerve cette affaire. encore merci pour votre réponse.

    • Si vous me mentionnez le problème que vous avez, je pourrais sans doute vous aider. Vous pouvez faire un copier/coller du message d’erreur, cela m’aiderait grandement à vous orienter vers une solution.

      Pour de l’aide à propos de GRRLIB, vous pouvez aussi aller sur #grrlib sur EFnet.

  3. J’aimerai faire un constat ,sans parler de vous Mr Crayon.
    Il faudrait vraiment dans le fond être un con pour qu’un programmeur ou plusieurs crée un logiciel pour programmer sur wii et utiliser le « mode débugger » afficher du texte à l’écran sans pouvoir avoir la possibilité de charger un dessin en 2dimentions.
    Même si cela parait absurde en théorie ,il y a des programmeurs qui arrive a nous prouver que cette chose est possible.

    Je suis frustré parce qu’il est possible pour un enfant de 16ans d’être meilleurs que moi sur bien des domaines (j’en est 24).
    mais qu’il est pas possible de faire un packadge exportable ou l’on aurai qu’a lancer l’exécutable pour compiler un rom et tester ce der nié avec l’émulateur dolphine wii. Ya plein de petit programmeur sur le net qui n’attende que cela. C’est frustrant.
    lol c’est pas cohérent tout sa mais c’est pas grave.^^

    ps: je n’arrive même plus à installer devkitpro sa m’énerve.Puis
    vos liens libjpeg,libpng ,zlib ect ne sont plus bon je n’est pas trouvé la source pour l’architecture powerpc-eabi et quel sont les différentes versions que vous utilisez des différents logiciel devkitPro(sous win?) , GRRLIB,libjpeg,libpng ,zlib et FreeType ?

    En tout cas merci pour votre aide et votre patience.

    • Pour devitPro, il existe un installateur disponible ici qui installera tout ce que vous avez besoin. Si vous ne savez pas quels composants installer, alors sélectionné tous les options. Ensuite, il suffit de cliquer sur le bouton Next plusieurs fois.

      En passant, je ne participe pas à la conception de devkitPro. Si vous avez des problèmes avec ce logiciel, vous pouvez aller faire un tour sur leur forum.

      Si vous voulez déboguer votre application, alors vous pouvez vous procurer un USB Gecko. Je ne l’utilise pas, alors je ne peut pas aller plus loin sur ce sujet.

      Voici les versions des différentes bibliothèques que j’utilise présentement:

      • libogc 1.8.6 (inclus dans devkitPro)
      • libfat 1.0.8 (inclus dans devkitPro)
      • GRRLIB 4.3.1 (inclus dans GRRLIB)
      • FreeType 2.4.4 (inclus dans GRRLIB)
      • libjpeg 8c (inclus dans GRRLIB)
      • libpngu version disponible avec GRRLIB
      • libpng 1.5.1 (inclus dans GRRLIB)
      • zlib 1.2.5 (inclus dans GRRLIB)

      J’utilise la version de GRRLIB disponible sous Subversion. Je récupère le code à l’aide du logiciel tortoiseSVN.

  4. Bonjour,
    Je suis presque satisfait. j’arrive à compiler un fichier .dol et j’ai compris comment installer la grrlib ( il faut mettre le dossier Grrlib extrait dans le dossier c:/devkitpro ; puis exécuter le commande cmd dans demarrer->exécuter .> puis se trouver dans le dossier Grrlib (dans msdos) et tapper la commande: make clean all install .) plutôt simple après avoir galérer plusieurs jour :d ) .

    Mon souci est le suivant:
    sa compile, j’ai mon .dol:

    #include <grrlib.h>
    #include <stdlib.h>
    #include <wiiuse/wpad.h>
     
    #include "pirate.h"
     
    int main(int argc, char **argv) {
        // Initialise the Graphics & Video subsystem
        GRRLIB_Init();
     
        GRRLIB_texImg *Cursor0 = GRRLIB_LoadTexture(pirate);
     
        // Initialise the Wiimotes
        WPAD_Init();
        WPAD_SetDataFormat(WPAD_CHAN_ALL, WPAD_FMT_BTNS_ACC_IR);
        WPAD_SetVRes(WPAD_CHAN_ALL, rmode->fbWidth, rmode->efbHeight);
     
        // Loop forever
        while(1) {
            WPAD_ScanPads();  // Scan the Wiimotes
            WPADData *WPadData0 = WPAD_Data(WPAD_CHAN_0);
     
            // If [HOME] was pressed on the first Wiimote, break out of the loop
            if (WPadData0->btns_d & WPAD_BUTTON_HOME)  break;
     
            // ---------------------------------------------------------------------
            GRRLIB_DrawImg(100, 100, Cursor0, 0, 1, 1, 0xFFFFFFFF);
            // ---------------------------------------------------------------------
     
            GRRLIB_Render();  // Render the frame buffer to the TV
        }
     
        GRRLIB_Exit(); // Be a good boy, clear the memory allocated by GRRLIB
     
        GRRLIB_FreeTexture(Cursor0);
     
        exit(0);
    }
    

    dans le fichier makefile :

    j’ai les lignes:

    TARGET		:=	$(notdir $(CURDIR))
    BUILD		:=	build
    SOURCES		:=	source
    DATA		:=	data  
    INCLUDES	:=  source
    
    LIBS	:=	-lgrrlib -lfreetype -lfat -ljpeg -lpngu -lpng -lz -lwiiuse -lbte -lmad -lasnd -logc -lm 
    

    je compile l’image avec
    raw2c.exe -> trouvé dans le dossier PPP…. de bevkitpro

    voici l’arboressance de mon projet:
    -Makefile
    -template.pnproj
    -source
    –pirate.png
    –template.c
    –pirate.c
    –pirate.h

    Mon problème est que je n’est pas d’image en chargeant mon iso .dol que j’ai crée.
    Pourtant j’ai configurer l’émulateur avec un tuto trouvé sur le net et j’arrive à lancer l’iso minesweeper.dol (trouvé sur le net).

    Pouvais vous m’éclairer Mr Crayon?
    Ps: je ne l’est pas tester sur ma wii ,j’ai peur de tout faire bugé.

    • Salut, est-ce que vous pourriez me donner plus d’information sur votre image.
      Type: PNG, JPEG ou Bitmap
      Grandeur: largeur x hauteur

      En passant, il n’y a pas de risque à envoyer un mauvais fichier dol à la Wii. Le pire qui peux arriver c’est qu’il va falloir maintenir le bouton POWER de la Wii pour la fermer. Ensuite, il faut la redémarrer et lancer de nouveau la Chaîne Homebrew.

  5. c’est l’image que vous utiliser dans votre exemple. le pirate je les trouvé dans les exemples fournie avec grrlib.
    -> Pour répondre à votre question.
    44,0 Ko ; pirate.png ; 152/172 ; et a ce que je croie elle possède aussi une couleur de transparence (alpha)
    Sinon vous avez pas répondu.

    • J’ai utilisé votre code avec l’image de pirate et tout fonctionne dans l’émulateur Dolphin révision 6972 pour Windows 32 bit.

      Il se peut que se soit un problème avec l’émulateur sur votre PC, essayer sur une Wii.

  6. Purée de purée c’est génial merci Mr Crayon pour votre aide.
    ps: je vais changer d’émulateur, en tout cas sa marche bien sur ma wii.