Hop, petit topo sur des travaux en cours sur une librairie graphique et des tools qui vont bien. (pas comme ceux dispo actuellement quoi
)
Le but de la lib est donc pour l'instant de gérer trois types d'éléments "de base": image fixe, scroller et sprite animé.
Voila donc comment tout ça se présente à l'heure actuelle.
Voila ou ça en est pour le moment, il manque encore des tonnes de choses et il faudra vérifier que tout ceci n'est pas trop lourd pour être utilsé en situation réelle.
Verra la suite l'année prochaine

Le but de la lib est donc pour l'instant de gérer trois types d'éléments "de base": image fixe, scroller et sprite animé.
Voila donc comment tout ça se présente à l'heure actuelle.
- Formats d'entrée
- Fichier PNG, 32bppArgb.
- Pas de limite de nombre de couleurs, hormis 15 par tile evidemment.
- Transparence sur couleur mauve (#ff00ff) et/ou pixels transparents.
- Préparation / conversion des données
- Référencement de tous les assets dans un fichier XML. Spécifier le type de donnée, le fichier d'entrée et un ID pour l'identifier dans le programme.
- Énumérer les frames pour les sprites animés.
- Une fois que tout est référencé, on passe tout ça à la moulinette.
- Format de sortie
- Fichier binaire contenant les données graphiques, à charger à la place des traditionnelles rom "C"
- Fichier ASM contenant les tilemaps, palettes, etc. A intégrer à votre projet.
- Animation
- Etape supplémentaire pour les sprites animés, bah faut les animer
- Création des différentes animation et de leurs étapes, positions, durées, etc...
- Sortie d'un fichier ASM supplémentaire, à intégrer au projet également.
- Utilisation/demos
- La lib vise une utilisation simple des données, en écrivant un minimum de code.
Exemples, demo scroller :
Code:int main(void) { int x=27; int y=0; BYTE p1,p2; Scroller bgscroll; initGfx(); scrollerInit(&bgscroll, &ms3bg_Map[0], 1, 16, x, y); palJobPut(16,ms3bg_Palettes[PAL_SIZE],ms3bg_Palettes); SCClose(); //scroller test while(1) { wait_vblank(); p1=volMEMBYTE(P1_CURRENT); p2=volMEMBYTE(P2_CURRENT); if(p1&JOY_UP) y--; if(p1&JOY_DOWN) y++; if(p1&JOY_LEFT) x--; if(p1&JOY_RIGHT) x++; for(i=0;i<4000;i++); ns_jobMeterColor(JOB_BLUE); scrollerSetPos(&bgscroll, x, y); if(p1&JOY_B) { scrollerInit(&bgscroll, &ms3bg2_Map[0],1, 16, x, y); palJobPut(16,ms3bg2_Palettes[PAL_SIZE],ms3bg2_Palettes); } if(p1&JOY_C) { scrollerInit(&bgscroll, &ms3bg3_Map[0],1, 16, x, y); palJobPut(16,ms3bg3_Palettes[PAL_SIZE],ms3bg3_Palettes); } ns_jobMeterColor(JOB_GREEN); SCClose(); } }
Demo image et sprite animé:
Code:int main(void) { int x=27; int y=0; BYTE p1,p2; Picture testPict; aSprite demoSpr; initGfx(); pictureInit(&testPict, &andypict_Map[0],1, 16, x, y); palJobPut(16,andypict_Palettes[PAL_SIZE],andypict_Palettes); aSpriteInit(&demoSpr,32,32,bmary_spr,64,164,0); palJobPut(32,bmary_spr_Palettes[PAL_SIZE],bmary_spr_Palettes); SCClose(); //picture/sprite test while(1) { wait_vbl(); p1=volMEMBYTE(P1_CURRENT); p2=volMEMBYTE(P2_CURRENT); if(p1&JOY_UP) y--; if(p1&JOY_DOWN) y++; if(p1&JOY_LEFT) x--; if(p1&JOY_RIGHT) x++; for(i=0;i<4000;i++); ns_jobMeterColor(JOB_BLUE); if(p1&JOY_A) { aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_IDLE); } if(p1&JOY_C) { aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_WALK); } pictureSetPos(&testPict, x, y); aSpriteAnimate(&demoSpr); ns_jobMeterColor(JOB_GREEN); SCClose(); } }
Il y a un jobmeter dans les videos pour observer la charge, en bleu le temps passé dans la lib, en rouge le temps de mise à jour pendant le vblank. C'est la qu'on gagne le plus de temps par rapport aux lib actuelles, grosse réduction du tearing.
Voila ou ça en est pour le moment, il manque encore des tonnes de choses et il faudra vérifier que tout ceci n'est pas trop lourd pour être utilsé en situation réelle.
Verra la suite l'année prochaine

Commentaire