![]() |
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Ouvrir sur le forum | Recherche | Messages du jour | Marquer les forums comme lus |
Publicité |
![]() |
|
Outils de la discussion | Modes d'affichage |
![]() |
#1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Membre confirmé
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
|
![]() Programmer sur DS avec la libnds Version 20070427 par Pitt ## Partie A, Théorie >> Sommaire
0. Introduction Ce tutoriel s'adresse à tous ceux qui souhaitent se lancer dans la programmation sur DS à l'aide, ou pas, de la libnds. Il vise plus à servir de référence qu'à initier, donc une expérience en programmation sur GBA, ou sur DS avec la PAlib constitue un atout non négligeable pour en débuter la lecture. J'essayerai d'être le plus court et concis possible, tout en restant relativement précis. Comme son nom ne l'indique pas, ce tutoriel n'est pas destiné qu'à ceux qui veulent utiliser la libnds : j'essayerai d'ajouter le plus possible les adresses des registres et les différentes constantes et autres bits, pour permettre à ceux qui voudraient se débrouiller seuls ou seulement comprendre un peu mieux le hardware DS, d'avoir une documentation relativement précise et pas trop barbante ... Pour le moment, ce tutoriel n'explique pas comment installer devkitpro et libnds, mais c'est tellement simple, et il y a suffisamment de bons tutoriels à ce sujet sur PA et sur le web pour que j'évite de le faire. Une fois ce document terminé, je le rajouterai peut-être, mais pas avant que j'aie mis toutes les choses utiles. Au cas où, vous avez les liens à la fin du tutoriel. Bonne lecture ! N.B.: Sauf indication contraire, vous pouvez utiliser le template arm9 des exemples de la libnds pour tester les notions abordées dans ce tutoriel. 1. Console, texte Avant d'entrer dans les détails techniques, il peut être sympathique d'aborder de façon simple le développement sur DS. Cette première partie montre donc brièvement comment afficher du texte grâce à une console par défaut, initialisée par la libnds. Certaines notions peuvent vous être complètement inconnues, surtout si vous n'avez jamais programmé sur GBA. Mais le but de cette première partie est justement d'afficher un petit quelque chose, pour le plaisir de ceux qui débutent. Vous pourrez donc revenir à cette partie plus tard, notamment après avoir lu la partie "Vidéo 2D" de ce tutoriel, pour mieux comprendre le pourquoi du comment. Voici donc un petit Hello world commenté, qui vous permettra d'afficher du texte, même sans vraiment comprendre comment cela fonctionne réellement : Code PHP:
2. Le hardware de la DS 2.1 Présentation La Nintendo Dual Screen, ou DS, est une console portable. Je précise au cas où vous ne seriez pas au courant ... Développée par Nintendo, elle est dotée de 2 processeurs, de la même famille, un ARM946E-S, cadencé à 67 MHz, et un ARM7TDMI, cadencé à 33 MHz. Pour le moment, nous n'utiliserons "que" l'ARM9, pour la simple et bonne raison que c'est celui qui nous permet d'utiliser les fonctions principales de la DS. Mais par la suite, nous utiliserons le second processeur. 2.2 Connexion sans fil La DS gère la communication sans fil de 2 manières : en utilisant la norme IEEE 802.11 pour la connexion à internet, et un format propriétaire Nintendo, le NiFi, pour communiquer entre DS. La première méthode peut être gérée via la libwifi, mais il n'y a encore aucune librairie fonctionnelle permettant d'utiliser le NiFi. 2.3 Contrôles/sorties La DS est dotée de 2 écrans, dont un tactile. Ils ont tous les deux une résolution de 256x192 pixels, un pitch de 0,24 mm et ils gèrent 262 000 couleurs. En plus de l'écran tactile, la DS possède de nombreux contrôles : une croix multidirectionnelle, et 8 boutons X, Y, A, B, L, R, Start et Select. Elle dispose également d'un micro intégré, en dessous de l'écran tactile pour les DS, et entre les deux écrans pour la DS Lite. Enfin, elle dispose de 2 haut-parleurs stéréo. 2.4 Mémoire La DS est dotée de 4 Mo de mémoire RAM. De plus, l'ARM7 peut accéder à une mémoire de 64 ko, et la console possède également une zone de mémoire partagée par l'ARM9 et l'ARM7, de 32 ko. Enfin, une mémoire de 656 ko est réservée à la vidéo, c'est-à-dire à l'unité graphique de la DS. Le tableau suivant montre les types de données utilisés par la DS, et leurs equivalents utilisés par GCC :
Voici également un tableau des différents types déclarés par la libnds :
De plus, la DS est Little Endian, donc les octets qui composent chaque mot sont inversés. Par exemple le double-mot 0xBADC0FEE sera stocké comme suit :
3. Touches, pad et stylet La gestion des touches, du pad et du stylet est extrêmement simple sur DS. Cette troisième partie passe rapidement en revue les registres, et les fonctions de la libnds, servant à l'utilisation des entrées de la DS, du moins au niveau des doigts ... 3.1 Touches et pad La DS stocke l'état actuel des différentes touches dans le registre REG_KEYINPUT, registre 16 bits situé à l'adresse 0x04000130.
Il suffit donc de lire le contenu de ce registre, et d'utiliser des masques de bits pour détecter quelles touches sont pressées. Certains des bits ne sont actualisés que pour l'ARM7, mais cela importe peu quand on programme à l'aide de la libnds, car celle-ci fait passer le contenu de REG_KEYINPUT à l'ARM9 via l'IPC (voir plus loin). La libnds propose plusieurs déclarations concernant la lecture des touches :
Un usage fréquent de ces fonctions est présenté ci-dessous : Code PHP:
Pour savoir si le stylet est appuyé sur l'écran, il suffit d'effectuer un scanKeys(), puis de tester keysDown() avec le masque de bit KEY_TOUCH. Pour connaitre l'endroit où le stylet est appuyé, il faut utiliser la fonction suivante, qui retourne une structure touchPosition. Cette structure contient 6 champs, qui sont expliqué plus bas. Code PHP:
Code PHP:
4. Vidéo 2D La DS est dotée d'un hardware relativement bien fourni concernant la 2D : il existe de multiples façons d'accéder aux écrans, et d'y afficher ce que l'on désire. Il faudra bien comprendre dans cet partie la différence entre l'écran principal, généralement (mais pas tout le temps) utilisé en bas, et l'écran secondaire. Pourquoi cette distinction ? Parce qu'on peut échanger la place des 2 écrans, ce qui peut fausser toutes vos fonctions d'affichage si vous n'y pensez pas. De plus, la section suivante s'intéresse au hardware 3D, qui n'est utilisable QUE sur l'écran principal. 4.1 "Power management" Tout d'abord, l'unité LCD est régie par un registre de gestion de l'alimentation, qui permet d'activer, ou non, les 2 écrans, mais aussi de déterminer quelles opérations sont activées. C'est le registre 16bits REG_POWERCNT, situé à l'adresse 0x04000304. Le tableau suivant récapitule les différents bits activables de REG_POWERCNT :
Afin de simplifier la vie des codeurs, la libnds contient 2 macros supplémentaires : - POWER_ALL_2D, qui active toute la 2D (écrans, 2D sur chaque écran) - POWER_ALL, qui active tout (écrans, 2D sur chaque écran, 3D) La libnds fournit plusieurs fonctions concernant le "power management" :
Deux utilisations typiques sont présentées ci-dessous : Code PHP:
5. Vidéo 3D 6. Direct Memory Access Pour transférer de manière rapide, on peut utiliser une technique spéciale, appelée Direct Memory Access, ou DMA. Comme son nom ne l'indique qu'à moitié, cette méthode demande au processeur de stopper l'exécution du programme et de transférer directement des données en mémoire. Cela peut avoir des avantages considérables, surtout lors de l'utilisation de modes graphiques bitmaps, ou encore pour transférer des sons vers les hauts-parleurs. Mais en contre partie, le DMA stoppe l'exécution du processeur, ce qui peut être vu comme un inconvénient. La DS possède 4 canaux de transfert DMA, qui sont utilisables grâce aux registres DMA_CR(x), DMA_SRC(x) et DMA_DEST(x), où x est le numéro de canal compris entre 0 et 3. C'est 4 canaux ne diffèrent que par l'usage qu'on leur réserve généralement : - canal 0 : le plus rapide, surtout utilisé pour les transferts critiques. - canaux 1 et 2 : utilisés pour le transfert du son. - canal 3 : les autres transferts. Ces indications sont bien entendues théoriques ; le canal 0 peut très bien être utilisé pour transfèrer du son, et on peut très bien copier une structure avec le canal 1. Le premier registre, DMA_CR(x), permet le contrôle du transfert DMA ; le tableau suivant récapitule les paramètres qui peuvent être utilisés pour le contrôle d'un transfert, via le registre DMA_CR(x) qui est un registre 32 bits situé à l'adresse : - 0x040000B0 pour le canal 0. - 0x040000BC pour le canal 1. - 0x040000C8 pour le canal 2. - 0x040000D4 pour le canal 3.
Le bit 31 (= DMA_BUSY) du registre DMA_CR(x) indique, une fois le transfert commencé, si le canal est occupé ou non. La libnds fournit également la fonction qui suit, et qui permet de savoir si le canal DMA choisi est libre, ou pas : Code PHP:
C'est également un registre 32 bits, situé à l'adresse : - 0x040000B4 pour le canal 0. - 0x040000C0 pour le canal 1. - 0x040000CC pour le canal 2. - 0x040000D8 pour le canal 3. Le troisième registre, DMA_DEST(x), contient l'adresse à laquelle les données seront transférées. Celui-ci est encore une fois un registre 32 bits, situé à l'adresse : - 0x040000B8 pour le canal 0. - 0x040000C4 pour le canal 1. - 0x040000D0 pour le canal 2. - 0x040000DC pour le canal 3. La libnds fournit plusieurs fonctions de transferts prédéfinies :
Sinon, une utilisation typique du DMA se déroule comme suit : Code PHP:
7. Timers Un timer est un registre compteur, qui joue le rôle d'horloge. Il permet par exemple d'attendre un certain temps, ou d'effectuer une action à intervalles réguliers. La DS possède 4 timers, numérotés de 0 à 3, qui sont tous les quatre cadencés à 33.514 MHz. L'utilisation de ces derniers est très simple, et s'effectue grâce à 2 registres. Le premier, TIMER_CR(x), où x est le numéro du timer, permet de gérer, comme pour les transferts DMA, la configuration et la mise en place du timer. Le tableau qui suit montre les différents paramètres que l'on peut sélectionner. Le registre TIMER_CR(x) est un registre 16 bits, qui se situe à l'adresse : - 0x04000102 pour le timer 0. - 0x04000106 pour le timer 1. - 0x0400010A pour le timer 2. - 0x0400010E pour le timer 3.
Le second registre, TIMER_DATA(x) possède un comportement un peu plus compliqué. En effet, il permet en écriture de sélectionner la fréquence du compteur, grâce aux macros présentées dans le tableau suivant, qui sont utilisées suivant la division de la cadence du timer. Mais en lecture, il renvoit la valeur actuelle du compteur. Ce registre de 16 bits se situe à l'adresse : - 0x04000100 pour le timer 0. - 0x04000104 pour le timer 1. - 0x04000108 pour le timer 2. - 0x0400010C pour le timer 3.
La libnds ne fournit aucune fonction de gestion de timers, mais leur utilisation est très simple, et ce fait comme suit : Code PHP:
8. Interruptions 8.1 Interruptions hardwares Le processeur ARM9 utilisé jusqu'ici, tout comme l'ARM 7 d'ailleurs, lit les instructions du programme courant les unes après les autres, et les exécute. Il est relié à différents périphériques, comme par exemple les touches ou les hauts-parleurs. Pour échanger des informations entre les périphériques, on peut utiliser 2 méthodes : - la première, appelée polling consiste à attendre dans une boucle infinie qu'une condition soit remplie, comme par exemple la pression du bouton R. Cette méthode a ses avantages, mais aussi ses inconvénients, vus qu'on ne peut pas vraiment effectuer de longues tâches pendant la période d'attente. - la seconde consiste à utiliser un système d'interruptions. Une interruption, au sens électronique du terme, est un simple fil, qui relie un périphérique au processeur. Cet entrée conserve toujours la même valeur, soit 0 ou 1. Mais lorsque le périphérique a besoin d'informer le programme d'un évènement, il change la valeur de l'entrée. Le processeur interrompt alors l'exécution du programme, et exécute la routine vers laquelle il est configuré pour pointer lors de l'interruption. Une fois cette routine exécutée, l'entrée reprend sa valeur initiale, et l'exécution du programme continue là où elle s'était arrêtée. Tout comme le polling, cette technique possède des avantages et des inconvénients, mais les interruptions possèdent un panel très varié : touches pressées, évènement Wifi, fin de transfert DMA ... La DS possède 23 interruptions ; le tableau suivant les liste, indique le processeur qui y a accès, et donne une brève description de ces dernières.
On peut activer chaque interruption en activant le bit correspondant dans le registre REG_IE, registre 32 bits situé à l'adresse 0x04000210. De plus, il peut être utile de désactiver momentanément toutes les interruptions. Pour cela, le bit 0 du registre REG_IME, registre 16 bits situé à l'adresse 0x04000208, permet de désactiver toutes les interruptions lorsqu'il est mis à 0, que le bit de l'interruption soit activé ou non dans le registre REG_IE. La libnds propose plusieurs fonctions pour gérer les interruptions :
8.2 Interruptions softwares Dans la partie précédente, j'ai usé et abusé du terme d'interruption. en réalité, c'est un abus de langage, et les interruptions précédentes étaient en réalité des interruptions hardwares. Il existe un autre type d'interruptions, qui fonctionnent comme les interruptions hardware, mais qui sont déclenchées par le programme lui-même. On appelle ces interruptions interruptions softwares (abréviation : SWI, pour SoftWare Interrupt). Pour utiliser une interruption software, il suffit d'utiliser l'instruction ARM swi. Même s'il est possible d'utiliser cette instruction en C via asm(), on préfèrera utiliser les fonctions libnds correspondantes, lorsqu'elles existent. La DS possède 25 interruptions softwares, que le tableau suivant récapitule, tout en leur associant les fonctions libnds qui leur correspondent.
Pour utiliser les interruptions softwares qui ne sont pas gérées par la libnds, il faut utiliser du code ARM, mais cela dépasse les limites de ce tutoriel. Heureusement, ces quelques fonctions sont très peu utilisées. 9. Inter Processor Communication (IPC) 10. Mots de la fin 10.1 Remerciements Je voudrais remercier :
10.2 Liens
## Partie B, Pratique : ShootMe Cette seconde partie est un complément à la première, et consiste en une application des notions abordées dans la partie documentation en utilisant bien sûr le langage C. Elle vous montrera, par l'intermédiaire de la création d'un petit jeu, ShootMe, comment utiliser tout ce que je présente plus haut. Comme son nom l'indique, cet homebrew sera un FPS, avec tout ce qui tourne autour, ce qui permettra d'aborder tout et n'importe quoi. Attention : comme je ne rédige pas la partie théorique de façon linéaire, les exercices présents dans cette seconde partie sont dans un ordre qui ne suit pas l'ordre de la première partie. Il faut donc parcourir le tout, ou lire chaque passage au fur et à mesure que le besoin s'en fait. Pour ce faire, chaque exercice est numéroté, en rapport avec le passage auquel il se rapporte, et non de manière linéaire. Bonne lecture, et bons tests ! Exercice 1.0 Une console pour notre jeu Le but de ce premier exercice est très simple : initialiser une console sur l'écran secondaire, et échanger les 2 écrans, pour obtenir un espace de communication avec l'utilisateur pendant la phase d'initialisation. Tout ça dans une fonction qui nous servira de fonction d'initialisation : Code PHP:
AIDE : pour échanger les 2 écrans et mettre l'écran principal en haut, il faut utiliser la fonction lcdMainOnTop() ; pour faire l'inverse, il faut utiliser la fonction lcdMainOnBottom(). Ceci est utile, car seul l'écran principal est capable d'afficher de la 3D, par exemple. Correction 1.0 Une console pour notre jeu Code PHP:
Dernière modification par Dr.Vince ; 01/05/2007 à 12h49. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
Publicité |
![]() |
#2 |
Modérateur saisonnier
|
![]() Bonne initiative ! Ça mérite une petite new
![]() [EDIT] Et voili... ![]() Au fait, il faudrait peut-être mettre les liens ou on peut toruver la lib non ? J'ai mis un site en page d'accueil mais je ne suis pas sûr que ce soit le bon, par manque de temps je ne peux pas trop vérifier...
__________________
. Mes homebrews GBA : 1942 - Ghost'n Goblins ![]() ![]() Mes autres passions, les flippers : Restauration d'un High Speed (Williams - 1985) Dernière modification par Arcadia ; 11/03/2007 à 21h53. |
![]() |
![]() |
![]() |
#3 |
Bitchy Little Girl...
Date d'inscription: 29/10/2005
Messages: 3 201
|
![]() Génial
![]() Perso je n'utilise aussi que la libnds ![]()
__________________
>> On garde :: On améliore :: On kill << |
![]() |
![]() |
![]() |
#4 |
PsycoKid
Date d'inscription: 10/11/2005
Localisation: Là où il pleut
Messages: 1 141
|
![]() Je sens que ça va aider des gens ça
![]() Personnellement, je me suis mis à libnds il y a un bout de temps et la seule chose que je lui reproche, c'est son manque de documentation...c'est vraiment horrible : il n'existe qu'une doc, mais elle date de l'époque où libnds s'appelait ndslib (il y a très longtemps donc ![]() |
![]() |
![]() |
![]() |
#5 |
Membre confirmé
Date d'inscription: 10/11/2005
Messages: 367
|
![]() Juste un petit bémol, tu compares les fonction keysDown() et keysHeld(), elles ne font pas tout a fait la même chose !
Si l'on maintient une touche appuyée, KeysDown() ne la renverra que lors de l'appui et ensuite renverra zero, alors que keysHeld() renverra la valeur de la touche tant que celle ci sera appuyée. (La précision est importante pour ceux qui n'ont pas forcément un niveau d'anglais suffisant).
__________________
Mes releases persos, etc... Dernière modification par Foxy ; 11/03/2007 à 22h03. |
![]() |
![]() |
![]() |
#6 |
Membre confirmé
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
|
![]() Merci pour vos commentaires, c'est encourageant !
![]() Je vais rajouter le lien pour la lib, et modifier pour le keysDown() / keysHeld() (très juste, j'avais complètement oublié). ![]() Surtout, corrigez-moi si j'ai écrit une annerie, je me suis relu, mais on n'est jamais à l'abri ... ![]() |
![]() |
![]() |
![]() |
#7 |
Administrateur
|
![]() franchement bravo !!!!
ça fait un moment que je voulais faire ça mais j'ai jamais eu le temps de me pencher sur la libnds !!!
__________________
Projets Abandonnés: [Arcomage Advance] [Puzznic] [PA Card Games] [Blob Runner] Projet en cours: [Ne plus abandonner de projet...] |
![]() |
![]() |
![]() |
#8 |
Membre confirmé
Date d'inscription: 12/11/2005
Localisation: Cambrai
Messages: 327
|
![]() Merci beaucoup Pitt!
Je regarde tout ça au plus vite ![]() Bon courage pour la suite des tutos ![]()
__________________
Peace
|
![]() |
![]() |
![]() |
#9 |
Membre confirmé
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
|
![]() Merci !
![]() @ Modos & admins >> Pour la suite du tuto, vous préférez que je crée d'autres topics, ou que je continue sur le même ? ![]() |
![]() |
![]() |
![]() |
#10 |
Administrateur
|
![]() hum.... continue sur le même ça nous évitera du boulot par la suite
![]() bah en fait y a que moi pour le CQP ![]()
__________________
Projets Abandonnés: [Arcomage Advance] [Puzznic] [PA Card Games] [Blob Runner] Projet en cours: [Ne plus abandonner de projet...] |
![]() |
![]() |
![]() |
#11 | |
Bitchy Little Girl...
Date d'inscription: 29/10/2005
Messages: 3 201
|
![]() Citation:
![]()
__________________
>> On garde :: On améliore :: On kill << |
|
![]() |
![]() |
![]() |
#12 |
Membre confirmé
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
|
![]() ![]() En tout cas, message reçu, la suite bientôt, au même endroit ! ![]() |
![]() |
![]() |
![]() |
#13 |
Membre confirmé
Date d'inscription: 02/02/2007
Localisation: Ivry sur Seine (94)
Messages: 60
|
![]() C'est clair qu'il manque une certaine documentation autour de la libnds. Je m'y suis mis il y a presque un mois et J'ai recherché plein d'infos la première semaine sur le hardware DS et la lib avant de réellement commencer à coder donc des tutos dessus sont toujours les bienvenues
![]() D'ailleurs je pense sortir mon premier homebrew avec le code source, ca peut toujours aider. |
![]() |
![]() |
![]() |
#14 |
Membre confirmé
Date d'inscription: 14/11/2005
Messages: 346
|
![]() Merci !! Ça doit bien être le seul tutoriel francophone pour libnds ! (?)
Continue comme ça! |
![]() |
![]() |
![]() |
#15 |
Bitchy Little Girl...
Date d'inscription: 29/10/2005
Messages: 3 201
|
![]() Et encore, pour la libnds il y a beaucoup d'exemples, relativement bons...mais la libgba...
__________________
>> On garde :: On améliore :: On kill << |
![]() |
![]() |
![]() |
#16 |
Membre confirmé
Date d'inscription: 30/03/2006
Messages: 201
|
![]() ca y est, tu m'a donné l'envie de me lancer dans le dev ds. En plus en ce moment j'ai un peu de temps devant moi, donc ca tombe bien
![]() je t'en remercie ![]() reste plus qu'à comprendre comment marche devkitpro maintenant ![]() à bientot dans la section DEV ![]() |
![]() |
![]() |
![]() |
#17 | ||
Membre confirmé
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
|
![]() Citation:
![]() Citation:
![]() ![]() Je vais mettre en ligne un petit quelque chose ce soir, pas grand chose, j'ai un devoir de maths à faire ... ![]() ![]() A part ça 'faudrait corriger le lien dans la new, il n'y a pas de site officiel à proprement parler pour la libnds. ![]() Dernière modification par Pitt ; 12/03/2007 à 18h20. |
||
![]() |
![]() |
![]() |
#18 |
Membre confirmé
Date d'inscription: 02/03/2006
Messages: 141
|
![]() Merci beaucoup pour ce début de tuto ces simpa
![]() Pourquoi les personnes qui utilise la libnds ne préfére pas la palib ? Elle est pourtant beaucoup plus documenté avec de trés bonne explications sur le wiki. ![]() |
![]() |
![]() |
![]() |
#19 |
Membre confirmé
Date d'inscription: 16/08/2006
Localisation: ...
Messages: 578
|
![]() La libnds permet de gérer le hardware DS. La PAlib est plutôt orientée simplicité, avec tout plein de fonctions d'abstraction du hardware.
En gros, la libnds, c'est plus pour les curieux, les puristes, etc. ![]() |
![]() |
![]() |
![]() |
#20 | |
Membre confirmé
Date d'inscription: 15/11/2006
Messages: 93
|
![]() Citation:
![]() Sinon, on ne va pas refaire tout le débat, mais libnds est très orienté proche du hardware, avec un contrôle total sur la DS, mais du coup un peu plus de choses à comprendre avant de commencer et de maitriser la bête, alors que PAlib est orienté simplicité, donc a des fonctions toutes faites pour cacher pas mal de petites choses. Au final, il en ressort que la PAlib est plus simple pour débuter (après, ca dépend pour qui, si tu maitrises déjà bien le C, ca va, si tu as dev sur GBA aussi, etc...), et que les codeurs 'avertis' préfèrent libnds pour la souplesse. PAlib te permet de faire rapidement des choses sympas, mais libnds te permet à terme de mieux comprendre la DS en elle-même, ce qui est un but en soi pour certains. ![]() |
|
![]() |
![]() |
![]() |
#21 |
PsycoKid
Date d'inscription: 10/11/2005
Localisation: Là où il pleut
Messages: 1 141
|
![]() Et puis, PAlib et la 3D, c'est pas trop ça
![]() |
![]() |
![]() |
![]() |
#22 |
Membre confirmé
Date d'inscription: 02/03/2006
Messages: 141
|
![]() Ok merci pour les réponses
![]() |
![]() |
![]() |
![]() |
#23 | |
Membre confirmé
Date d'inscription: 15/11/2006
Messages: 93
|
![]() Citation:
![]() ![]() |
|
![]() |
![]() |
![]() |
#24 |
PsycoKid
Date d'inscription: 10/11/2005
Localisation: Là où il pleut
Messages: 1 141
|
![]() Ca n'empêche qu'il existe existe des fonctions 3D dans PAlib et...ben voilà quoi
![]() |
![]() |
![]() |
![]() |
#25 |
Membre confirmé
Date d'inscription: 15/11/2006
Messages: 93
|
![]() Oui et non... Enfin, il y a bien des fonctions 3D, d'init par exemple, qui permettent d'utiliser sans aucun soucis libnds derriere.
Les autres fonctions plus 'avancées' ne sont pas à proprement parler de la 3D pure et dure, c'est juste une utilisation des textures pour faire des sprites, ce qui a ses avantages et ses inconvénients ![]() |
![]() |
![]() |
![]() |
Liens sociaux |
Publicité |
Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s)) | |
Outils de la discussion | |
Modes d'affichage | |
|
|