La Place des Développeurs MSXgl MSX Game Library
aoineko
Membre non connecté
Conseiller Municipal
Reprise du message précédent
Pas encore... ça arrive, ça arrive.C'est moins simple car c'est mon seul outil qui utilise une librairie externe (FreeImage).
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
C'est super de pouvoir utiliser n'importe quel type de fichier en entrée, mais franchement, si tu portes ton outils sans cette librairie FreeImage, et donc l'obligation d'utiliser le format BMP en entrée, je ne t'en voudrais pas du tout.
Ça serait vraiment un moindre mal.
Sur MacOS il existe un outils en ligne de commande (installé en standard) qui permet de manipuler les images, d'en changer la résolution, et d'en modifier le format facilement.
La ligne de commande ci-dessus permet de changer le format de l'image , png en bmp.
C'est juste un exemple.
Des outils equivalent existent aussi sous linux, à installé séparément, comme imageMagik.
https://github.com/ImageMagick/ImageMagick
Qui doit pouvoir être compilé sur windows aussi je pense. Edité par ericb59 Le 28/12/2022 à 08h49
Ça serait vraiment un moindre mal.
Sur MacOS il existe un outils en ligne de commande (installé en standard) qui permet de manipuler les images, d'en changer la résolution, et d'en modifier le format facilement.
Code TEXT :
sips -s format bmp image.png --out image.bmp
La ligne de commande ci-dessus permet de changer le format de l'image , png en bmp.
C'est juste un exemple.
Des outils equivalent existent aussi sous linux, à installé séparément, comme imageMagik.
https://github.com/ImageMagick/ImageMagick
Qui doit pouvoir être compilé sur windows aussi je pense. Edité par ericb59 Le 28/12/2022 à 08h49
Sector28
Membre non connecté
Villageois
Pour télécharger ImageMagick :
https://imagemagick.org/script/download.php
pas besoin de compiler ...
https://imagemagick.org/script/download.php
pas besoin de compiler ...
DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
aoineko
Membre non connecté
Conseiller Municipal
J'ai peu de temps et beaucoup de choses à faire ; Je ne vais donc clairement pas réécrire mon outil avec une autre lib que FreeImage.
Si j'arrive à faire une version Linux tant mieux, sinon la seule alternative sera « tant pis ».
Si j'arrive à faire une version Linux tant mieux, sinon la seule alternative sera « tant pis ».
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
FreeImage tu l'utilise pour la lecture des fichiers en source et le décodage de l'image je suppose.
J'imagine qu'une fois cette étape passée, tu n'utilise pas FreeImage pour le traitement et l'exportation ? si ?
Si la réponse est non, ma suggestion était de ne pas utiliser freeImage et de ne conserver que la lecture de fichier BMP.
BMP est un format qui est tout simple à charger. Pas besoin de librairie externe.
J'imagine qu'une fois cette étape passée, tu n'utilise pas FreeImage pour le traitement et l'exportation ? si ?
Si la réponse est non, ma suggestion était de ne pas utiliser freeImage et de ne conserver que la lecture de fichier BMP.
BMP est un format qui est tout simple à charger. Pas besoin de librairie externe.
aoineko
Membre non connecté
Conseiller Municipal
Je l'utilise aussi pour les changements de couleur, le tramage et d'autres effets.
J'ai bon espoir de pouvoir faire une version Linux, mais c'est pas ma priorité pour le moment.
J'ai bon espoir de pouvoir faire une version Linux, mais c'est pas ma priorité pour le moment.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Hello,
Une nouvelle version de MSXgl est dispo sur GitHub : MSXgl v0.8.0 Alpha.
Cette mise à jour est principalement orienté vers le MSX-DOS (qui était un point faible de MSXgl).
Nouveautés :
- [DOS] Ajout de nombreuses fonctions MSX-DOS 2 pour couvrir les besoins principaux et optimisation des fonctions existantes.
- [DOS] Les targets 'DOS1' et 'DOS2' peuvent maintenant utiliser la fonction du style main(argc, argv) pour obtenir les paramètres de la ligne de commande.
- [DOS Mapper] Ajout d'un nouveau module pour gérer le mappeur de mémoire à travers les fonctionnalités étendues du BIOS du MSX-DOS 2.
- [Input] Séparation du Input manager dans un module à part ('input_manager').
- [Tools] Passage du générateur de DSK de DskTool à msxtar pour permettre la génération de disques de démarrage DOS 2.
- [Build Tool] Ajout d'un nouveau type de cible 'DOS0' pour créer un programme qui démarre du disque avec accès aux fonctions BDOS mais sans passer par la séquence de démarrage MSX-DOS. Cela permet au jeu de démarrer (rapidement) directement à partir du disque.
- [Build Tool] Ajout de script de build pour Linux et correction de certains problèmes (EOL ou problème de chmod).
- [Core] Suppression du "#pragma disable_warning 85" (warning "unreferenced function argument") et correction de plusieurs warnings de compilation.
- [Doc] Mise à jour de la documentation du code source et ajout de la liste des options de compilation sur le wiki.
Ca avance.
Une nouvelle version de MSXgl est dispo sur GitHub : MSXgl v0.8.0 Alpha.
Cette mise à jour est principalement orienté vers le MSX-DOS (qui était un point faible de MSXgl).
Nouveautés :
- [DOS] Ajout de nombreuses fonctions MSX-DOS 2 pour couvrir les besoins principaux et optimisation des fonctions existantes.
- [DOS] Les targets 'DOS1' et 'DOS2' peuvent maintenant utiliser la fonction du style main(argc, argv) pour obtenir les paramètres de la ligne de commande.
Pour toutes les targets :
void main();
Pour les targets DOS1 ou DOS2 :
void main(u8 argc, const c8** argv);
Pour la target DOS2 uniquement :
u8 main();
u8 main(u8 argc, const c8** argv);
void main();
Pour les targets DOS1 ou DOS2 :
void main(u8 argc, const c8** argv);
Pour la target DOS2 uniquement :
u8 main();
u8 main(u8 argc, const c8** argv);
- [DOS Mapper] Ajout d'un nouveau module pour gérer le mappeur de mémoire à travers les fonctionnalités étendues du BIOS du MSX-DOS 2.
- [Input] Séparation du Input manager dans un module à part ('input_manager').
- [Tools] Passage du générateur de DSK de DskTool à msxtar pour permettre la génération de disques de démarrage DOS 2.
- [Build Tool] Ajout d'un nouveau type de cible 'DOS0' pour créer un programme qui démarre du disque avec accès aux fonctions BDOS mais sans passer par la séquence de démarrage MSX-DOS. Cela permet au jeu de démarrer (rapidement) directement à partir du disque.
- [Build Tool] Ajout de script de build pour Linux et correction de certains problèmes (EOL ou problème de chmod).
- [Core] Suppression du "#pragma disable_warning 85" (warning "unreferenced function argument") et correction de plusieurs warnings de compilation.
- [Doc] Mise à jour de la documentation du code source et ajout de la liste des options de compilation sur le wiki.
Ca avance.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Il y a :
- un wiki (https://aoineko.org/msxgl) qui explique comment installer la librairie, tester les programmes d'exemple (sample) et créer son propre projet.
- une documentation en ligne (https://aoineko.org/msxgl_doc),
- les nombreux programmes d'exemple (sample) qui illustrent l'utilisation d'un module, d'un périphérique ou d'un média cible particulier (ROM, ROM mappée, MSX-DOS, binaire BASIC, etc.),
- et le Village, MRC ou le serveur Discord (https://discord.gg/pMeadGfv8E) pour poser des questions auxquelles je réponds volontiers.
Je pense à créer une vidéo tutoriel pour comment se lancer dans MSXgl mais ce n'est pas une prio pour le moment.
Je pourrais aussi écrire quelques tutos ici en français.
Qu'aimerais-tu avoir comme info ?
- un wiki (https://aoineko.org/msxgl) qui explique comment installer la librairie, tester les programmes d'exemple (sample) et créer son propre projet.
- une documentation en ligne (https://aoineko.org/msxgl_doc),
- les nombreux programmes d'exemple (sample) qui illustrent l'utilisation d'un module, d'un périphérique ou d'un média cible particulier (ROM, ROM mappée, MSX-DOS, binaire BASIC, etc.),
- et le Village, MRC ou le serveur Discord (https://discord.gg/pMeadGfv8E) pour poser des questions auxquelles je réponds volontiers.
Je pense à créer une vidéo tutoriel pour comment se lancer dans MSXgl mais ce n'est pas une prio pour le moment.
Je pourrais aussi écrire quelques tutos ici en français.
Qu'aimerais-tu avoir comme info ?
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
@MSXosaure, j'ai écris une présentation de la librairie en français sur le wiki du village : https://msxvillage.fr/wiki/msxgl
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Hello,
J'ai ajouté un nouveau module à ma librairie C pour MSX : Sprite tool.
Il permet de modifier en temps-réel les données d'un sprite.
Il ajoute les fonctionnalités suivantes :
- Crop (supprime un bord du sprite),
- Flip (fait une symétrie axiale),
- Mask (masque tous les bits à 0 dans les données),
- Rotate (tourne par étape de 90°).
J'ai aussi ajouté un programme d'exemple (s_sptool) pour illustrer l'utilisation de ce nouveau module :
Vous pouvez le tester là : https://webmsx.org/?ROM=https://github.com/aoineko-fr/MSXgl/raw/main/projects/samples/emul/rom/s_sptool.rom Edité par aoineko Le 04/11/2023 à 23h39
J'ai ajouté un nouveau module à ma librairie C pour MSX : Sprite tool.
Il permet de modifier en temps-réel les données d'un sprite.
Il ajoute les fonctionnalités suivantes :
- Crop (supprime un bord du sprite),
- Flip (fait une symétrie axiale),
- Mask (masque tous les bits à 0 dans les données),
- Rotate (tourne par étape de 90°).
J'ai aussi ajouté un programme d'exemple (s_sptool) pour illustrer l'utilisation de ce nouveau module :
Vous pouvez le tester là : https://webmsx.org/?ROM=https://github.com/aoineko-fr/MSXgl/raw/main/projects/samples/emul/rom/s_sptool.rom Edité par aoineko Le 04/11/2023 à 23h39
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Pour le moment c'est écrit entièrement en C.
J'ai essayé d'écrire de façon plutôt optimal et j'utilise notamment des tables précalculées (3 x 8 octets) pour accélérer les choses.
Après, il y a quelques "triches" dans le programme d'exemple :
- Les sprites 3 couleurs sont en fait 2 sprites en OR (ça fait moins de calculs).
- Le Flip et le Rotate est précalculé en RAM au démarrage du programme.
Ceci dit, j'ai quand même les données de 8 sprites 16x16 qui sont mis à jour en VRAM à chaque frame, ainsi que tous les calculs de Crop + Flip + Mask qui tiennent en 1 frame.
Dans un vrai cas d'utilisation on pourrait étaler les calculs sur plusieurs frames pour éviter d'avoir des piques d'utilisation du Z80.
Je prévois de toute façon de passer tout ça en assembleur.
Y a moyen de gratter pas mal de cycles.
Je testerai même de unroll les bouclez de 8 itérations pour booster vraiment les calculs (à voir si le code ne devient pas trop gros).
Au final, il n'y a que les Rotate droite/gauche qui sont vraiment gourmands vu qu'ils nécessitent une double boucle pour convertir les bits en colonne sur un octet des lignes. Edité par aoineko Le 05/11/2023 à 12h30
J'ai essayé d'écrire de façon plutôt optimal et j'utilise notamment des tables précalculées (3 x 8 octets) pour accélérer les choses.
Après, il y a quelques "triches" dans le programme d'exemple :
- Les sprites 3 couleurs sont en fait 2 sprites en OR (ça fait moins de calculs).
- Le Flip et le Rotate est précalculé en RAM au démarrage du programme.
Ceci dit, j'ai quand même les données de 8 sprites 16x16 qui sont mis à jour en VRAM à chaque frame, ainsi que tous les calculs de Crop + Flip + Mask qui tiennent en 1 frame.
Dans un vrai cas d'utilisation on pourrait étaler les calculs sur plusieurs frames pour éviter d'avoir des piques d'utilisation du Z80.
Je prévois de toute façon de passer tout ça en assembleur.
Y a moyen de gratter pas mal de cycles.
Je testerai même de unroll les bouclez de 8 itérations pour booster vraiment les calculs (à voir si le code ne devient pas trop gros).
Au final, il n'y a que les Rotate droite/gauche qui sont vraiment gourmands vu qu'ils nécessitent une double boucle pour convertir les bits en colonne sur un octet des lignes. Edité par aoineko Le 05/11/2023 à 12h30
On est toujours ignorant avant de savoir.
Il est modeste, le "flip" des bits dans un octet est déjà en assembleur
7 6 5 4 3 2 1 0 les bits sont dans "l'ordre"
0 1 2 3 4 5 6 7 les bits sont "flippés" Edité par z80 Le 05/11/2023 à 13h17
7 6 5 4 3 2 1 0 les bits sont dans "l'ordre"
0 1 2 3 4 5 6 7 les bits sont "flippés" Edité par z80 Le 05/11/2023 à 13h17
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie