Vous n'êtes pas identifié.
Voilà j'ai passé pas mal de temps à chercher comment exploiter d'autres niveaux de gris sur la g100, et cela avec une méthode moins gourmande en mémoire (et en rapidité) que celle de tonton1664.
J'arrive maintenant à faire afficher 5 couleurs (noir - gris foncé - gris moyen - gris clair - blanc) sans clignotements, avec seulement 3 buffers
J'aimerais que plusieurs personnes testent sur leur calculatrice si tout s'affiche correctement (les roms 1.01 en particulier)
J'ai commencé une lib avec toutes les fonctions pour l'utiliser; pour le moment j'ai fait les fonctions setmode(), refresh(), clearbuff() et drawbmp() ainsi qu'une méthode de codage pour les sprites et les images. Je voudrais savoir si vous êtes intéressés pour que je continue (et que je crée des fonctions comme celles de db-lib et drawlib) ou bien si ca n'en vaut pas trop la peine, après tout je ne m'ennuie pas avec tout ce que j'ai déjà en attente lol
L'exe de test se trouve ici: http://orwell01.free.fr/gxTest.exe
(pas la peine de l'essayer sur l'émulateur bien entendu, il n'est pas prévu pour ce mode même en GS5 )
Utilisez les touches shift pour changer d'image, et +/- pour régler le contraste.
J'attends vos commentaires
Note: vous verrez sans doute le gris le plus clair clignoter légèrement. Je peux éliminer ce clignotement, mais alors je perds la possibilité d'intégrer un masque dans le code d'un sprite pour limiter sa taille s'il en possède un, comme pour drawlib... Il faudra voir si c'est réellement génant
Hors ligne
impressionnant !
je pense que c'est à aprofondir, et je suis préssé d'en apprendre plus !
Hors ligne
à noter que julien n' a rien inventé de plus, qu' un système d' encodage de bmp sympa le reste, c' est des techniques déjà utilisées, mais avec une petite réfléxion avant ^^
Reste à voir les perf lorsque c' est animé ^^ (comme par exemple, lorsque la balle se déplace sur mon Blob100: on voit une jolie trainée ^^)
Hors ligne
à noter que julien n' a rien inventé de plus, qu' un système d' encodage de bmp sympa
le reste, c' est des techniques déjà utilisées, mais avec une petite réfléxion avant ^^
:evil: :x Merci.
C'est vrai qu'en théorie, la technique utilisée avait déjà été évoquée dans ce topic par Mastermage, mais il y a une légère différence entre la théorie et la pratique... parce que si c'était aussi facile de mettre une idée en oeuvre, alors on pourrait se demander pourquoi on ne peut avoir que 5 couleurs avec 3 buffers et pas 8. C'est "facile", suffit de donner des poids 1,2 et 4 aux buffers pour obtenir tous les niveaux possibles de 0 à 7. Mais le jour où tu arriveras à faire ça sans clignotements, tu me feras signe ok?
En attendant, je n'avais jamais vu ce post de Mastermage avant et j'ai fait ces fonctions tout seul :evil: Le prog d'encodage des bmp je l'ai fait en une demi heure, alors que j'ai passé 2 jours à voir ce que la caltoche pourrait donner, alors bon.
Pour répondre a casiomax, je n'ai pas eu le temps de faire des tests de vitesse, de toute facon les opérations se limitent à copier des données dans les 3 buffers, donc on peut facilement imaginer ce que ca prendra comme temps.
D'autres remarques constructives?
Note: j'ajouterai que le résultat qu'on peut obtenir ne dépend pas uniquement des segments videos qui apparaissent à l'écran, mais d'autres facteurs également. Si des petits malins voulaient par exemple s'amuser à déplacer les buffers que j'utilise, ils risqueraient d'avoir de droles de surprises. Alors ne me dis pas que je n'ai "rien inventé". :x
Hors ligne
okay, donc en fait niveau vitesse, on pourrait parier sur 20-25fps sur sb2 (au lieu de 25-30)
Car on aura 1 buffer en plus à écrire et 1 en +à rafraichir, mais ce dernier c'est rien
Sinon le gris très clair qui clignote c'est pas dramatique je pense, sinon faudra faire attention aux réglages pour l'encodage des images, sachant qu'un contraste plus faible par défaut sur rom 1.03 aurait été le bienvenu, je pense de 1 à 3 niveaux en, dessous.
Pour l'image de sonic, faut pas mal descendre pour avoir une image correcte, mais c'est trop clair ç ce niveau, c'est pourquoi ça va pas être aisé d'encoder les images
Sinon c'est du bon boulot, surtout si le sprite+mask tient sur 3 buffers !!
Hors ligne
juste une question :
comment ca marche ?? 8O 8O
en tout cas c'est du beau boulot !
Hors ligne
pour afficher un bmp il suffit d'écrire qq chose comme ca:
#include "gxlib10.h" uchar monImage[] = { ... }; code généré par un convertisseur void main() { gxSetMode(true); gxClearBuff(); // pas vraiment utile ici mais bon gxDrawBmp(monImage); gxRefresh(); waitkey(K_ESC); gxSetMode(false); }
et voilà
Hors ligne
oué ok avec la lib ca sera assez simple
en fait je me demandais plus comment etaient faites les fonctions mais ca a l'air trop compliqué pour moi donc je vais laisser tomber :mrgreen:
Hors ligne
lol ça me fait penser à mes progs et leur préfixe 'Mx' (Mx comme le Nec V30 Mx et comme Maximum)
Hors ligne
ah il me tarde la lib avec impatience !!!
pk la les graphs avec 2 ou 3 nivo de gris sa m'enerve, j'espere que l'utilisation sera pas trop complexe.
Hors ligne
pk la les graphs avec 2 ou 3 nivo de gris sa m'enerve, j'espere que l'utilisation sera pas trop complexe.
peut-être que t'es un boulet :?: :mrd:
Hors ligne
je disais que cela m'énervais pas par leur complexité mais car on ne peut pas faire de beaux graphs.(pour moi)
alors que le mode 5 couleurs permet de trouver une image sur le net et de la transposer
Hors ligne
Bah avec les 3 couleurs c'était déjà bien mieux qu'en noir et blanc
Sinon je viens de terminer la lib (à moins que je trouve encore qq chose à rajouter )... Je vais d'abord adapter Sprite Maker pour pouvoir créer également des sprites 5 couleurs et puis je distribuerai le tout
Les fonctions suivantes seront disponibles:
void gxSetMode(bool enabled); void gxRefresh(); void gxClearBuff(); void gxDrawBmp(void far* bmp); void gxPixel (uint x, uint y, uchar coul); void gxPixB (uint x, uint y); void gxPixW (uint x, uint y); void gxPixLG (uint x, uint y); void gxPixMG (uint x, uint y); void gxPixDG (uint x, uint y); void gxPixInv (uint x,uint y); uchar gxPixTest (uint x,uint y); void gxVLine (uint x, uint ymin, uint ymax, uchar coul); void gxVLineB (uint x, uint ymin, uint ymax); void gxVLineW (uint x, uint ymin, uint ymax); void gxVLineLG (uint x, uint ymin, uint ymax); void gxVLineMG (uint x, uint ymin, uint ymax); void gxVLineDG (uint x, uint ymin, uint ymax); void gxVLineInv (uint x, uint ymin, uint ymax); void gxHLine (uint xmin, uint xmax, uint y, uchar coul); void gxHLineB (uint xmin, uint xmax, uint y); void gxHLineW (uint xmin, uint xmax, uint y); void gxHLineLG (uint xmin, uint xmax, uint y); void gxHLineMG (uint xmin, uint xmax, uint y); void gxHLineDG (uint xmin, uint xmax, uint y); void gxHLineInv (uint xmin, uint xmax, uint y); void gxFill (uchar coul); void gxFillW (); void gxFillLG (); void gxFillMG (); void gxFillDG (); void gxFillB (); void gxInverse (); void gxSpr_M_C(int x,char y,void far* spr); void gxSpr_noM_C(int x,char y,void far* spr); void gxSpr_M_noC(int x,char y,void far* spr); void gxSpr_noM_noC(int x,char y,void far* spr);
N'hésitez pas à dire si d'autres fonctions seraient utiles
Hors ligne
bah il n'y a toujours pas de fonction qui transforme la G100 en grille pain, mais à part ça, ça m'a l'air parfait !
Hors ligne
juste une remarque sur ton bon boulot : met plutot des int à la place des char dans les paramètres, g remarqué que ca faisait grossir l'exe (ou lib) si on met des char. (vu sur VC++1.5 et TC3)
Hors ligne
c'est surtout que les int c'est plus optimisé parce que la taille minimum d'un argument sur la pile est de deux octets. Si tu passes un char en parametre il doit le convertir en int.
la raison c'est qu'on ne peut pas utiliser push sur une variable d'un octet :
PUSH reg16 ; o16 50+r [8086] PUSH r/m16 ; o16 FF /6 [8086] PUSH CS ; 0E [8086] PUSH DS ; 1E [8086] PUSH ES ; 06 [8086] PUSH SS ; 16 [8086] PUSH imm8 ; 6A ib [186] PUSH imm16 ; o16 68 iw [186]
Hors ligne
ce que tu as en signature c'est les la lib ? que tu cites ?
Hors ligne
juste une remarque sur ton bon boulot : met plutot des int à la place des char dans les paramètres, g remarqué que ca faisait grossir l'exe (ou lib) si on met des char. (vu sur VC++1.5 et TC3)
C'est bon à savoir. Ca change rien au niveau de la vitesse, non ?
Hors ligne
Bon voilà, j'ai "finalisé" la lib et j'ai fait une nouvelle version de Sprite Maker pour gérer également les 5 couleurs; j'ai gardé la meme liste de fonctions (en mettant des int comme parametres pour l'affichage des sprites). Je me suis aussi demandé si ca vallait vraiment la peine de faire des fonctions asm pour afficher un rectangle plein quelconque à l'écran, mais bon c'est pas des plus faciles à implémenter, donc il faut voir
J'ai besoin de betatesteurs avant la release pour reperer les eventuels problemes, aussi bien dans la lib que dans le soft. Des intéressés?
Hors ligne