1

Voilà j'ai besoin d'une fonction graphique m'affichant un sprite de 32 en mirroir horizontal (merci de ne pas me revoyer sur celle d'extgraph, elle ne convient pas sad) :
en fait il faut que ça soit une fct ordinaire, comme la Sprite32_or de extgraph, qui pour afficher un sprite aux coordonnées (x;y), l'affiche normalement mais pour chaque pixel d'abscisse xp il me l'affiche en [abscisse == (2x+16)-xp]
voilà la fct des sources d'extgraph, est-ce que vous pourriez me dire qu'est-ce qu'il faut modifier dedans pour obtenir la fct que je désire ?

void Sprite32_OR(short x,short y,short h,unsigned long* sprite,void* dest) {
    register long           addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
    register unsigned short cnt  = x&15;
    register unsigned short ccnt = 32-cnt;
    register unsigned long  data;
    for (;h;h--,addr+=30) {
        data=*sprite++;
        *(long*)addr|=(data>>cnt),*(long*)(addr+4)|=(data<<ccnt);
    }
}

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

2

el live et vite fait:

unsigned long reverse_longu32(unsigned int a)
{
register short i;
register unsigned long rv;
for(i=32;i; )
 rv|=((a>>(--i))&(1<<i));
return rv;
}


cette fonction renverse un longu32
tu fais une boucle sur tout ton sprite, tu le calcule une fois
dans un buffer que tu utilise ensuite pour l'aficher
[edit]Edité par janjan2 le 02-02-2002 à 15:57:19[/edit]
[edit]Edité par janjan2 le 02-02-2002 à 15:58:51[/edit]
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

3

à la limite:

void Sprite32_OR(short x,short y,short h,unsigned long* sprite,void* dest) {
    register long           addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
    register unsigned short cnt  = x&15;
    register unsigned short ccnt = 32-cnt;
    register unsigned long  data;
    for (;h;h--,addr+=30) {
        data=reverse_longu32(*sprite++);
        *(long*)addr|=(data>>cnt),*(long*)(addr+4)|=(data<<ccnt);
    }
}

[edit]Edité par janjan2 le 02-02-2002 à 15:18:38[/edit]
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

4

attention je n'ai rien testé!
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

5

ça marche pas, ça ne m'affiche rien sad
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

6

Voilà la fct de janjan2 un peu corrigée mais elle ne m'affiche qu'un espèce de gribouilli :

unsigned long reverse_longu32(unsigned int a)
{
register short i;
register unsigned long rv;
for(i=32;i;i--)
{
 rv|=((a>>(--i))&(1<<i));
}
return rv;
}

Sprite32_REV(short x,short y,short h,unsigned long* sprite,void* dest) {
    register long           addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
    register unsigned short cnt  = x&15;
    register unsigned short ccnt = 32-cnt;
    register unsigned long  data;
    for (;h;h--,addr+=30) {
        data=reverse_longu32(*sprite++);
        *(long*)addr|=(data>>cnt),*(long*)(addr+4)|=(data<<ccnt);
    }
}

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

7

bon,
je teste et je reviens ds pas lgtps
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

8

ok, merci
mais je pense que mon idée de départ était bonne : juste changer les coordonnées d'affichage de chaque pixel avec l'équation : [abscisse == (2x+16)-xp]
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

9

unsigned long reverse_longu32(unsigned int a)
{
register short i;
register unsigned long rv=0;
for(i=32;i; )
 rv|=((a>>(--i))&(1<<i));
return rv;
}


encore une fois j'ai pas testé car vti bugge
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

10

mais je pense que mon idée de départ était bonne : juste changer les coordonnées d'affichage de chaque pixel avec l'équation : [abscisse == (2x+16)-xp]
ouais, et tu te fais sponsoriser par lenteur magazine
(deja que ma routine doit pas etre très rapide...)
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

11

ben la tienne marche tjrs pas, au lieu dun fouilli maintenant le sprite est tronqué et n'est même pas mirrored sad

sinon t sur que ma méthode serait lente ?
une tte petite addition ça ralentit pas autant, non ?
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

12

ben oui ça serait lent
essaye comme ça:
unsigned long reverse_longu32(unsigned int a)
{
register short i;
register unsigned long rv=0;
for(i=32;i; )
 rv|=((a>>(--i))&(1<<(32-i)));
return rv;
}
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

13

là ça ne m'affiche plus rien sad
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

14

erf.... tout ca pour casmile
utilisez genlibsmile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

15

je v pas utiliser genlib pour 1 fct graphique !!!!!!!!!! 16ko pour afficher des sprites c lourd !!!!
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

16

oué, le gros prob de genlib ...

17

Il y a au moins une erreur dans la routine de janjan2: L'utilisation de unsigned int pour passer un entier de 32 bits.

Et puis l'algorithme m'a l'air vraiment inefficace.
Ceci est mieux:
extern unsigned long reverse_longu32(unsigned long a);
asm("reverse_longu32:;move.l 4(%a7),%d1;moveq.l #31,%d2;0:;add.l %d1,%d1;roxr.l #1,%d0;dbra.w %d2,0b;rts")

Ou quand il y aura le passage par registres:
extern unsigned long reverse_longu32(register unsigned long a asm("d1"));
asm("reverse_longu32:;moveq.l #31,%d2;0:;add.l %d1,%d1;roxr.l #1,%d0;dbra.w %d2,0b;rts")

[edit]Edité par Kevin Kofler le 03-02-2002 à 19:23:45[/edit]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

18

Et le problème de genlib n'est pas juste le problème de genlib, c'est un problème inhérent au concept de librairies dynamiques. Les librairies statiques sont bien plus pratiques.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

bon voilà le résultat :

extern unsigned long reverse_longu32(unsigned long a);
asm("reverse_longu32:;move.l 4(%a7),%d1;moveq.l #31,%d2;0:;add.l %d1,%d1;roxr.l #1,%d0;dbra.w %d2,0b")
>>> me tronque le sprite mais ne me le retourne pas


extern unsigned long reverse_longu32(register unsigned long a asm("d1"));
asm("reverse_longu32:;moveq.l #31,%d2;0:;add.l %d1,%d1;roxr.l #1,%d0;dbra.w %d2,0b")
>>> me met un parse error avant l'asm en rouge sad
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

20

il est vraiment tps que je me mette serieusement a l'ASM
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

21

>extern unsigned long reverse_longu32(unsigned long a);
>asm("reverse_longu32:;move.l 4(%a7),%d1;moveq.l #31,%d2;0:;add.l %d1,%d1;roxr.l #1,%d0;dbra.w %d2,0b")
>>>> me tronque le sprite mais ne me le retourne pas

eek embarrassed J'ai oublié le rts! sad Essaye maintenant.

>extern unsigned long reverse_longu32(register unsigned long a asm("d1"));
>asm("reverse_longu32:;moveq.l #31,%d2;0:;add.l %d1,%d1;roxr.l #1,%d0;dbra.w %d2,0b")
>>>> me met un parse error avant l'asm en rouge sad

C'est normal, il n'y a pas encore le passage par registres. J'ai mis "quand il y aura le passage par registres" en gras maintenant, peut-être que ça se voit mieux. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

bang

23

Ça s'adresse contre qui ou quoi, ton "bang"?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

24

Tout le monde qui a poste dans ce topic avant moi sauf TiMad devil

25

cool, ça marche, merci Kevin smile
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina