Pages: 1 2 [3] 4   Bas de page
Imprimer
Auteur Fil de discussion: [Tuto/NDS] Utiliser la KT LIB V1  (Lu 17397 fois)
0 Membres et 1 Invité sur ce fil de discussion.
Mollusk Hors ligne
Administrateur
*****
Messages: 3537


Voir le profil WWW
Ne vous posez pas de questions, codez !

« Réponse #30 : 19 Août 2008, 17:27:35 »

J'ai survolé le tuto mais pour moi (si j'ai bien compris), il y a une différence de taille avec la PAlib, un truc sur lequel j'ai longtemps pesté : on peut maintenant effacer les bgs sans fragmenter la mémoire ?? Vous confirmez ?? Si c'est le cas, chouette chouette chouette Smiley
Ben... non Azn Puisque c'est une lib qui utilise EFS et PAlib, ça utilise les fonctions de 2 pour les fonds et tout, donc ça ne change strictement rien. Le problème de fragmentation de ta mémoire pour les fonds est simple, et tu peux le résoudre en changeant l'ordre dans lequel tu fous tes fonds. Le fait est que si tu as un bloc de 32ko au milieu de ta vram et que tu as besoin de 40ko pour un fond, bah de toute façon c'est pas les 12ko que tu pourrais avoir dans un autre coin qui vont t'aider, ça passera pas Azn (en fait c'est plus compliqué, t'as certaines parties de la vram où tu peux foutre des tiles mais pas de map par exemple). Bref, c'est pas si simple Azn

Citation
Sinon, une fonction qui me serait bien utile aussi (alors là, je sais pas si c'est moi qui suis bidon ou pas Langue) j'ai très souvent des soucis de libération de mémoire (fragmentation de la mémoire avec les delete du C++), serait il possible de faire une fonction qui "défragmente" au mieux la mémoire (même si ce n'est pas tout le temps possible)...
Si c'est moi qui ne sait pas coder faut le dire aussi Wink
Pas si simple Azn Pas de miracle non plus Langue  De manière générale, sur DS j'évite de faire des mallocs/free à gogo, j'ai eu des soucis et ça m'a pas trop plu. En général je fais des tableaux de taille fixe, ça règle le problème. L'autre possibilité, et c'est ce que je fais maintenant, c'est que pour certaines structures (ou autre) que je sais que je réutiliserai plus tard, je ne libère pas la mémoire, je stocke ça dans un tableau, et je réutilise ça plus tard Smiley Donc je fais un malloc la première fois et après je garde pour plus tard, c'est plus sûr et ça évite de fragmenter Wink
Journalisée

vvedge Hors ligne
Newbie
*
Messages: 12


Voir le profil
D(ark) S(ide) Apprentice

« Réponse #31 : 19 Août 2008, 22:23:32 »

Bonne initiative, en effet, en revanche (après une lecture rapide du tuto) je pense que plutôt utiliser ton système de commentage par l'utilisateur, tu devrais utiliser des defines.
du style :
Code
(c):
#ifdef MIKMOD
//[le code à commenter]
#endif
 

Je vote pour aussi... Smiley
Journalisée
vvedge Hors ligne
Newbie
*
Messages: 12


Voir le profil
D(ark) S(ide) Apprentice

« Réponse #32 : 19 Août 2008, 22:29:01 »

Je dirais qu'il manque quelques fonctions plus haut niveau Langue Genre un truc que j'avais fait : LoadImage, tu files le nom de l'image et ça prend automatiquement Gif/Png/Jpeg selon l'extension, plus simple encore Wink

Sinon, bonne initiative, il y a pas mal de monde qui se prenait la tête sur comment charger des données depuis le FAT Smiley

Héhé, je n'avais pas encore lu ce commentaire quand j'ai suggéré (sur PAlib.info) le merge de ma fonction chargeant les sprites en bin avec ta fonction chargeant les gifs en ajoutant un autodetect des fichiers présents...
Ca doit définitivement être la chose à faire Smiley

VVedge
Journalisée
Schyzophrenic Hors ligne
Sr. Member
****
Messages: 425


Voir le profil WWW
Crappy Koder

« Réponse #33 : 20 Août 2008, 09:19:38 »

J'ai survolé le tuto mais pour moi (si j'ai bien compris), il y a une différence de taille avec la PAlib, un truc sur lequel j'ai longtemps pesté : on peut maintenant effacer les bgs sans fragmenter la mémoire ?? Vous confirmez ?? Si c'est le cas, chouette chouette chouette Smiley
Ben... non Azn Puisque c'est une lib qui utilise EFS et PAlib, ça utilise les fonctions de 2 pour les fonds et tout, donc ça ne change strictement rien. Le problème de fragmentation de ta mémoire pour les fonds est simple, et tu peux le résoudre en changeant l'ordre dans lequel tu fous tes fonds. Le fait est que si tu as un bloc de 32ko au milieu de ta vram et que tu as besoin de 40ko pour un fond, bah de toute façon c'est pas les 12ko que tu pourrais avoir dans un autre coin qui vont t'aider, ça passera pas Azn (en fait c'est plus compliqué, t'as certaines parties de la vram où tu peux foutre des tiles mais pas de map par exemple). Bref, c'est pas si simple Azn

Citation
Sinon, une fonction qui me serait bien utile aussi (alors là, je sais pas si c'est moi qui suis bidon ou pas Langue) j'ai très souvent des soucis de libération de mémoire (fragmentation de la mémoire avec les delete du C++), serait il possible de faire une fonction qui "défragmente" au mieux la mémoire (même si ce n'est pas tout le temps possible)...
Si c'est moi qui ne sait pas coder faut le dire aussi Wink
Pas si simple Azn Pas de miracle non plus Langue  De manière générale, sur DS j'évite de faire des mallocs/free à gogo, j'ai eu des soucis et ça m'a pas trop plu. En général je fais des tableaux de taille fixe, ça règle le problème. L'autre possibilité, et c'est ce que je fais maintenant, c'est que pour certaines structures (ou autre) que je sais que je réutiliserai plus tard, je ne libère pas la mémoire, je stocke ça dans un tableau, et je réutilise ça plus tard Smiley Donc je fais un malloc la première fois et après je garde pour plus tard, c'est plus sûr et ça évite de fragmenter Wink
Comme tu dis pas de miracles alors !! Azn Bon, bah je vais rester sur les mêmes vieilles techniques alors Langue Mais bon, moi j'ai l'habitude de faire des new / delete a gogo Langue
Journalisée

Campanile Hors ligne
Elite Member
**
Messages: 925


Voir le profil WWW
sic

« Réponse #34 : 20 Août 2008, 09:54:52 »

Pas si simple Azn Pas de miracle non plus Langue  De manière générale, sur DS j'évite de faire des mallocs/free à gogo, j'ai eu des soucis et ça m'a pas trop plu. En général je fais des tableaux de taille fixe, ça règle le problème. L'autre possibilité, et c'est ce que je fais maintenant, c'est que pour certaines structures (ou autre) que je sais que je réutiliserai plus tard, je ne libère pas la mémoire, je stocke ça dans un tableau, et je réutilise ça plus tard Smiley Donc je fais un malloc la première fois et après je garde pour plus tard, c'est plus sûr et ça évite de fragmenter Wink
Alleluia ! J'ai appris ça aprés avoir abandonné un certain nombre de projets qui sont partis en torche avec des plantages de n'importe quoi...  Sad
Journalisée

L'expérience, c'est ni plus ni moins qu'une petite quantité d'information qui aurait été fort utile quelques secondes avant qu'on l'apprenne...
vvedge Hors ligne
Newbie
*
Messages: 12


Voir le profil
D(ark) S(ide) Apprentice

« Réponse #35 : 20 Août 2008, 15:08:01 »

En espérant ne pas outrepasser mes droits...

J'ai pris la liberté d'ajouter les fonctions suivantes :
- chargement d'un rotbg depuis les .bin [KT_ShowRotBG(u16 screen, u16 bg, const char* name, u8 wraparound)] (j'ai modifié le .h également en documentant)
- lecture d'un sprite depuis les .bin (j'ai modifié KT_CreateSprite qui cherche en premier lieu l'extension .gif et si le fichier n'existe pas charge _Pal.bin et _Sprite.bin) [=> KT_CreateSpriteGif et KT_CreateSpriteBin] non ajoutés dans le .h)
- ajout de u8 KT_FileRead(char** buffer, u32* fileSize, const char* name) dont je me sers pour la lecture des .bin (non ajouté dans le .h)
J'ai aussi modifié les occurrences de
   sprintf ( filename, "efs:/%s_Info.bin", name);
en
   sprintf ( filename, "%s%s_Info.bin", memtype, name);
dans KT_CreateSprite et KT_ShowBG

J'ai également une petite question : j'ai remarqué en créant KT_ShowRotBG que screen et bg sont déclarés en u16 alors que dans PA_lib c'est u8 (d'ailleurs à d'autres endroits de ton code c'est u8 ou int...) y a-t-il une raison particulière ?

Ci-joint l'exemple de createSprite modifié et un nouvel exemple pour rotBg (la lib modifié est dans chaque exemple)

Dans KT_CreateSprite, tu utilises un tableau global spritepal ; il n'est pour l'instant pas utilisé en dehors de cette fonction, aura-t-il une autre utilité plus tard ?
... si oui, je n'ai pas utilisé ce tableau dans KT_CreateSpriteBin(), ça sera donc peut-être un problème.

Je n'ai pas ajouté les fonctions de lecture de gfx et palette (de sprite) car je pense que dans ce cas il faudrait revoir l'utilisation du tableau spritegfx mais cela pourrait être une évolution permettant de créer plusieurs sprites à partir d'un même gfx et ne pas surcharger la mémoire...

à ce propos, question pour Mollusk :
Lors de l'utilisation de
 PA_CreateSprite (u8 screen, u8 obj_number, void *obj_data, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, s16 x, s16 y)
obj_data est-il dupliqué en mémoire ?
=> si obj_data a été alloué dynamiquement suite à lecture dans le filesystem, peut-on faire un free après l'appel à PA_CreateSprite() ?
sinon, à quoi sert PA_CreateSpriteFromGfx() ?

* KT_createsprite.zip (59.24 Ko - Téléchargé 153 fois.)
* KT_loadRotBg.zip (45.47 Ko - Téléchargé 158 fois.)
« Dernière édition: 20 Août 2008, 15:17:32 par vvedge » Journalisée
vvedge Hors ligne
Newbie
*
Messages: 12


Voir le profil
D(ark) S(ide) Apprentice

« Réponse #36 : 20 Août 2008, 15:45:49 »

Petite précision :
loin de moi l'idée de donner des leçons ou d'essayer de m'immiscer dans la création de ta lib... (surtout vu mon niveau en C... ! )
C'est juste que comme je viens de bosser sur ces fonctions, je me suis dit que peut-être ça pourrais te faire gagner du temps (ou pas ?).
Pour ce qui est des remarques sur u16, dans le doute, j'ai préféré le signaler.
N'hésites pas à dire franchement si tu préfères uniquement des idées d'amélioration plutôt que du code complet à insérer (surtout que mon code n'est pas forcément la meilleure façon de faire...) ou ce type de remarque (en fait jusqu'à l'utilisation de la PAlib, je n'utilisais moi-même jamais la notation u8/16/32 mais tout bêtement int dans tous les cas !).

D'ailleurs, en parlant de suggestion d'amélioration :
- pour l'instant si un fichier est dans un sous-répertoire, il faut donner le chemin complet devant le nom (ex tiré du tuto : KT_ShowBG (1, 2, "/thegooddirectory/mountain"); ) ; penses-tu ajouter une fonction de type chdir ? cela permettrait de faire par exemple :
KT_UseEFS();
KT_chdir("/thegooddirectory/");
KT_ShowBG (1, 0, "mountain1");
KT_ShowBG (1, 1, "mountain2");
KT_ShowBG (1, 2, "mountain3");
[edit]
...finalement, après utilisation, mentionner le répertoire dans l'appel est avantageux dans le sens où on est sur du chemin désigné, tandis que dans le cas du chdir, un changement précédent du répertoire peut rendre le code moins lisible
« Dernière édition: 24 Août 2008, 08:36:50 par vvedge » Journalisée
vvedge Hors ligne
Newbie
*
Messages: 12


Voir le profil
D(ark) S(ide) Apprentice

« Réponse #37 : 26 Août 2008, 14:25:00 »

Je viens juste de voir ça sur PAlib (24/08/08) :
New PAlib version is released (PAlib 080823)
avec entre autres nouveautés :
[FAT Loading] A whole new library for loading graphics and sound assets from FAT (EFS or regular FAT with DLDI) is introduced to PAlib thanks to NightFox! You can now easily load backgrounds, sprites with their palettes, textures, sound effects and other files from FAT. See the examples in /examples/FAT/FATLoading and the PAlib documentation (English only, sorry) for how to use these great new functions.
Ça ne remet pas en cause ta librairie car c'est à partir de .bin pour les bg et les sprites.
Par contre, ça correspond exactement aux fonctions que je proposais mais codé de façon beaucoup plus propre avec une gestion correcte des buffers (contrairement aux bouts de codes que j'avais écrits à priori)
Journalisée
Squale Hors ligne
Jr. Member
**
Messages: 70


Voir le profil WWW
« Réponse #38 : 08 Novembre 2008, 15:32:53 »

Bonjour à tous,

J'ai essayé de compiler un exemple de la KT_Lib (KT_AS_Lib), mais j'ai ce message lors de la compilation :
Code:
arm-eabi-g++ -g -mthumb-interwork -mno-fpu -L/L/devkitPro/PAlib/lib/lib -Wl -specs=ds_arm9.specs KT_lib.o as_lib9.o efs_lib.o main.o -L/L/devkitPro/PAlib/lib/lib -lpa9 -L/L/devkitPro/libnds/lib -L/L/devkitPro/liblobby/lib -lfat -lnds9 -llob
by9d -o build.elf
main.o: In function `main':
l:/devkitPro/MyDev/KT_AS_lib/source/main.c:17: undefined reference to `PA_InitASLibForMP3'
collect2: ld returned 1 exit status
make[1]: *** [/l/devkitPro/MyDev/KT_AS_lib/KT_AS_lib.elf] Error 1
make: *** [build] Error 2
Appuyez sur une touche pour continuer...

Une idée du problème ?

Pour info, j'ai rigoureusement suivi ce topic pour l'install...
Journalisée
Kram Hors ligne
Débile en chef
*****
Messages: 420


Voir le profil WWW
Bip Bop.

« Réponse #39 : 08 Novembre 2008, 17:20:11 »

Vérifie que la partie AS_lib de la KT n'est pas commentée, dans KT_lib.c et KT_lib.h


[EDIT] : Essaye aussi de compiler un exemple AS_lib de Palib, pour voir...
 ==>  devkitPro\PAlibExamples\Sound\ASLib_General
« Dernière édition: 08 Novembre 2008, 17:22:59 par Kram » Journalisée

Squale Hors ligne
Jr. Member
**
Messages: 70


Voir le profil WWW
« Réponse #40 : 08 Novembre 2008, 19:54:55 »

L'exemple de PALib ASLib_General se compile bien sans message d'erreur. J'ai même tester sur la lib EFS_Lib et cela fonctionne.
Comprend plus ....
« Dernière édition: 08 Novembre 2008, 21:43:02 par Squale » Journalisée
Kram Hors ligne
Débile en chef
*****
Messages: 420


Voir le profil WWW
Bip Bop.

« Réponse #41 : 08 Novembre 2008, 22:51:42 »

Tu pourrais montrer le dossier exact de l'exemple que tu veux compiler stp ? (en pièce jointe)
Journalisée

Squale Hors ligne
Jr. Member
**
Messages: 70


Voir le profil WWW
« Réponse #42 : 09 Novembre 2008, 09:56:48 »

Le template que je souhaite compile est celui de la KT_Lib d'origine KT_AS_Lib où j'ai juste modifié le Build.bat afin qu'il soit portable.
en PJ le répertoire complet du template.

Ce template a été copié dans L:\devkitPro\MyDev\

* KT_AS_lib.zip (918.46 Ko - Téléchargé 165 fois.)
Journalisée
Kram Hors ligne
Débile en chef
*****
Messages: 420


Voir le profil WWW
Bip Bop.

« Réponse #43 : 09 Novembre 2008, 11:23:28 »

Dans le makefile (que tu ouvre avec le bloc note par exemple) il faut que tu change les lignes ARM :

Code
(c):
ARM7_SELECTED = ARM7_BASIC
#ARM7_SELECTED = ARM7_MOD_DSWIFI
#ARM7_SELECTED = ARM7_MOD_LIBLOBBY
#ARM7_SELECTED = ARM7_MP3_DSWIFI
#ARM7_SELECTED = ARM7_MP3_LIBLOBBY
#ARM7_SELECTED = ARM7_MIKMOD_DSWIFI
USE_EFS = YES

doit être remplacer par

Code
(c):
#ARM7_SELECTED = ARM7_BASIC
#ARM7_SELECTED = ARM7_MOD_DSWIFI
#ARM7_SELECTED = ARM7_MOD_LIBLOBBY
ARM7_SELECTED = ARM7_MP3_DSWIFI
#ARM7_SELECTED = ARM7_MP3_LIBLOBBY
#ARM7_SELECTED = ARM7_MIKMOD_DSWIFI
USE_EFS = YES

(la ligne ARM7_SELECTED = ARM7_BASIC est commentée, et la ligne ARM7_SELECTED = ARM7_MP3_DSWIFI est décommentée Smiley tu peux aussi décommenter ARM7_SELECTED = ARM7_MP3_LIBLOBBY au lieu de ARM7_SELECTED = ARM7_MP3_DSWIFI, si tu veux utiliser Liblobby et non DSWIFI.)
Journalisée

Squale Hors ligne
Jr. Member
**
Messages: 70


Voir le profil WWW
« Réponse #44 : 09 Novembre 2008, 11:39:53 »

J'ai modifié le Makefile comme indiqué :
Code
(c):
#ARM7_SELECTED = ARM7_BASIC
#ARM7_SELECTED = ARM7_MOD_DSWIFI
#ARM7_SELECTED = ARM7_MOD_LIBLOBBY
ARM7_SELECTED = ARM7_MP3_DSWIFI
#ARM7_SELECTED = ARM7_MP3_LIBLOBBY
#ARM7_SELECTED = ARM7_MIKMOD_DSWIFI
USE_EFS = YES

résultat :
Code:
clean ...KT_AS_lib
KT_lib.c
as_lib9.c
efs_lib.c
main.c
l:/devkitPro/MyDev/KT_AS_lib/source/main.c: In function 'main':
l:/devkitPro/MyDev/KT_AS_lib/source/main.c:20: warning: implicit declaration of
function 'PA_InitASLibForMP3'
arm-eabi-g++ -g -mthumb-interwork -mno-fpu -L/L/devkitPro/PAlib/lib -Wl,--gc-sec
tions -specs=ds_arm9.specs KT_lib.o as_lib9.o efs_lib.o main.o -L/L/devkitPro/PA
lib/lib/lib -lpa9 -L/L/devkitPro/libnds/lib -lfat -lnds9 -ldswifi9 -o build.elf
main.o: In function `main':
l:/devkitPro/MyDev/KT_AS_lib/source/main.c:20: undefined reference to `PA_InitAS
LibForMP3'
collect2: ld returned 1 exit status
make[1]: *** [/l/devkitPro/MyDev/KT_AS_lib/KT_AS_lib.elf] Error 1
make: *** [build] Error 2
Appuyez sur une touche pour continuer...

en modifiant ceci :
Code
(c):
#ARM7_SELECTED = ARM7_BASIC
#ARM7_SELECTED = ARM7_MOD_DSWIFI
#ARM7_SELECTED = ARM7_MOD_LIBLOBBY
#ARM7_SELECTED = ARM7_MP3_DSWIFI
ARM7_SELECTED = ARM7_MP3_LIBLOBBY
#ARM7_SELECTED = ARM7_MIKMOD_DSWIFI
USE_EFS = YES

résultat (idem) :
Code:
clean ...KT_AS_lib
KT_lib.c
as_lib9.c
efs_lib.c
main.c
l:/devkitPro/MyDev/KT_AS_lib/source/main.c: In function 'main':
l:/devkitPro/MyDev/KT_AS_lib/source/main.c:20: warning: implicit declaration of
function 'PA_InitASLibForMP3'
arm-eabi-g++ -g -mthumb-interwork -mno-fpu -L/L/devkitPro/PAlib/lib -Wl,--gc-sec
tions -specs=ds_arm9.specs KT_lib.o as_lib9.o efs_lib.o main.o -L/L/devkitPro/PA
lib/lib/lib -lpa9 -L/L/devkitPro/libnds/lib -L/L/devkitPro/liblobby/lib -lfat -l
nds9 -llobby9d -o build.elf
main.o: In function `main':
l:/devkitPro/MyDev/KT_AS_lib/source/main.c:20: undefined reference to `PA_InitAS
LibForMP3'
collect2: ld returned 1 exit status
make[1]: *** [/l/devkitPro/MyDev/KT_AS_lib/KT_AS_lib.elf] Error 1
make: *** [build] Error 2
Appuyez sur une touche pour continuer...

D'autres idées....
Journalisée
Pages: 1 2 [3] 4   Haut de page
Imprimer

Aller à: