PpHd Le 15/02/2003 à 14:41 Raphael: Tes chiffres sont faux car la routine de genlib ecrit sur les deux plans pour faire du gris fonce ! Les autres routines ne font pas de gris fonce. Je repete ?
>Non. Afficher sur les 2 plans n'est pas 2 fois plus lent qu'afficher sur un seul plan. On peut réutiliser pas mal de calculs. Mais il est vrai qu'il faut une routine GrayHLine pour cela.
Tant qu'il n'y a pas de routines dedies, je compte double.
>tu compare des fonctions même pas identiques et en plus tu oublie de préciser que extgraph est plus rapide que genlib POUR LES LIGNES !!!
C'est faux. J'en ai marre de ces benchs de *ù*^*ù*ù* !
>Si. Je lui ai dit de refaire son bench avec gl_draw_bwhline_b qui est comparable à la fonction de ExtGraph et ses résultats sont ceux du message #106.
Non regarde les chiffres. C'est encore le bench biaise !
Comment il faudrait faire alors pour avoir un bench correct. Parce que franchement ça m'intéresse.
Tu veux que je porte ma routine pour qu'elle écrive sur deux plans ?
jackiechan Le 15/02/2003 à 15:01Edité par jackiechan le 16/02/2003 à 11:50 Mais est-ce que la fonction gl_draw_bwhline_b n'est pas équivalente à celle d'extgraph ?
Mais avec des personnages vus de face, les couleurs sont plus variées, donc on voit nettement la différence quand tu n'en utilises que 3 (quelles qu'elles soient). Et puis, les sprites sont en général plus grands pour des personnages vus de face (x×2x plutôt que x×x), ce qui fait que la différence est visible plus nettement.
Vark Le 15/02/2003 à 16:40 de toutes façons kevin tu parles de qqch que tu ne connais puisque tu ne sais pas faire de jeux à part des jeux de société, dc tu ne te rends pas compte des pb rencontrés
*** Ne sous-estimez pas la puissance de la Marmotte ***
©
Marmotte Team : LaMarmotte, sBibi, Vark & sabrina
TiMad Le 15/02/2003 à 23:20 c'est clair.. vu comme l'ecran est baveux, t'as qu'a regarder un jeu qui tourne a 40 fps avec annimation et si tu vois la differences entre 4 et 3 niveau de gris, et bien c'est que t'as fumé ta beuze!
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!
jackiechan Le 16/02/2003 à 00:52Edité par jackiechan le 16/02/2003 à 11:50 PpHd> Je réitère ma question pour que tu ne l'oublies pas : gl_draw_bwhline_b n'est-elle pas complètement équivalente à la fonction d'extgraph ?
Et puis aussi, il faudrait voir la source du bench.
TiMad Le 16/02/2003 à 12:55 attend vti ne respete pas du tout les cycles...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!
Bon, j'ai corrigé le prog (erreur bête de ma part) et il se lance correctement sur ma TI-89.
Donc le résultat est :
Genlib : 2055 TU
ExtGraph (modifiée) : 2215 TU
Donc genlib est finalement 7% plus rapide que la fonction modifiée d'extgraph pour gérer le clipping.
Kevin Kofler Le 16/02/2003 à 14:11Edité par Kevin Kofler le 16/02/2003 à 14:12 As-tu mis un clipping vertical? Si oui, vire-le, il ne sert à rien pour une ligne horizontale. Il vaut mieux mettre le test en macro, comme ça GCC pourra le virer en optimisant.
Au fait, j'ai relu la source et je pense qu'avec un bon brainstorming on pourrait optimiser la fonction d'extgraph, c'était une des premières fonctions que j'avais écrites en ASM pur (XDanger m'avait aidé aussi).
PpHd Le 16/02/2003 à 18:07 Genlib gere le clipping vertical.
> Genlib gere le clipping vertical.
A ce moment-là, il faut le laisser dans ExtGraph...
jackiechan: quelles idées as-tu, toi, pour optimiser la fonction de dessin de lignes horizontale ? Je pense à l'instant à une à base de jmp 2(pc,dn.w) où la table à 2(pc) contiendrait les adresses de la sous-routine OR, celle de la routine EOR et celle de la routine AND. Mais rien ne dit que c'est fin...
> Il vaut mieux mettre le test en macro, comme ça GCC pourra le virer en optimisant.
Pourrais-tu donner le code qui le fait, Kevin ? Je n'ai pas réussi à faire une telle chose pour une macro que j'ai faite il y a plusieurs mois pour les fonts (les noms ne sont plus comme ça...). Ca vient peut-être du fait que le {...} est utilisé ?
#define _FastLittleString(x,y,s,p,m) \
({ if (m==A_NORMAL) _DrawLittleString(x,y,s,p); \
else if (m==A_XOR) _InvertLittleString(x,y,s,p); \
else if (m==A_REVERSE) _ReverseLittleString(x,y,s,p); \
else if (m==A_REPLACE) _ReplaceLittleString(x,y,s,p);})
> Enfin, ça va devenir lourd peut-être...
Très lourd... Ceux qui critiquent déjà bien trop comme ça, seraient très contents si le truc était très complexe et qu'on nous le fasse remarquer...
> si j'ai bien compris ton idée, le comportement serait complètement indéterminé si on passe un argument MODE incorrect.
Si on ne fait pas attention, bien sûr. Mais on peut choisir arbitrairement que A_REVERSE = A_REVERSE, A_XOR = A_XOR et tout le reste A_NORMAL (ce qui permet ceci dit en passant de gérer A_REPLACE et A_OR), ce qui peut être fait en quelques instructions. C'est déjà fait dans FastFilledRect et FastDrawVLine.
Ben je n'ai pas du comprendre ton idée, alors.
Si on met 12 comme paramètre mode, il se passe quoi ?
Si mode est supérieur ou égal à trois (puisque A_REVERSE = 0, A_NORMAL = 1, A_XOR = 2), on transforme le mode en A_NORMAL... 12 sera transformé en A_NORMAL.
> Pourquoi pas le mettre en macro? Comme ça GCC le virera lors de l'optimisation quand il ne sert pas.
Bonne idée. La macro ne sera pas accessible dans un programme en ASM pur, mais qui programme en ASM pur avec ExtGraph ?
> #define HLine_OR_hvclip(y,x1,x2,p) ({short __y=(y);if (__y>=0&&__y<128) HLine_OR_hclip(__y,(x1),(x2),(p));})
OK.
> Hmmm, bizarre. Il devrait vraiment optimiser ça en fonction de la valeur de m. Essaye avec un switch ou avec des ?:.
OK, j'essaierai. J'utilise TIGCC 0.94 Beta 20, mais ça ne vient certainement pas de là...
> À part si on l'appelle avec des valeurs immédiates
Je crois qu'il n'y a que ce cas-là.
> Si tu penses vraiment que personne ne programme en ASM pur avec ExtGraph, ce n'est pas la peine de garder le mode __stkparm__ "pour la compatibilité".
Si, parce que ça pourrait aussi (éventuellement) breaker des programmes en C. J'avais essayé de mettre -mregparm dans les options de compilation de TIGCC, ça ne marchait pas du tout (crash presque immédiat). C'était il y a quelques mois. Je ne sais plus quelle version de TIGCC 0.94 j'utilisais.