1

Pour ma lib Koto j'essaie de faire ma routine de sprite avec clipping... Voici le code (ca ressemble vachement avec Extgraph, je sais):
void Kspr16or(short X,short Y,unsigned char H,unsigned short* Spr,void* Scr) {
register long Buf=(long)Scr+(Y<<5)-(Y<<1)+(X>=0?2*(X>>4):0);
register unsigned short Det = (X & 15),Det2 = 16-Det,Data;
for (;H;H--,Buf+=30){
Data=*Spr++;
if(X>=0){
*(short*)Buf|=Data>>Det;
if(X<144)*(short*)(Buf+2)|=Data<<Det2;
}
else*(short*)Buf|=Data<<(-X);
}
}

Si y a qq1 ki pourrait m'aider pour l'optimiser ca srait cool.
Chtebeuh n'chtebeuh
et hop Haffi go
http://www.quarks-games.fr.st

2

C'est mieux de mettre (Y+Y) que (Y<<1), mais tu ne verras absolument pas la différence, cette instruction est exécutée une seule fois, et tu ne gagnes que 2 cycles, je crois en mettant l'addition au lieu du décalage.
Sinon, je ne sais pas trop comment tigcc optimise le 2*(X>>4), il faudrait que je regarde, mais je pense qu'il fait un asr, alors que ce serai tmieux s'il faisait une addition (X>>4+X>>4), mais je ne sais pas comment il optimiserait cette addition. Faut voir, mais là je n'ai pas le temps.
Sinon, si tu veux accélérer, c'est mieux de ne tester qu'une seule fois si x est négatif ou nul :
if(X>=0)
{
 for(;H;H--,Buf+=30)
 {
   ...
 }
}
else
{
 for(;H;H--,Buf+30)
 {
  ...
 }
}
Ça ne prendra presque rien comme place en plus, mais ce sera nettement mieux.

3

jackiechan
a écrit : Sinon, je ne sais pas trop comment tigcc optimise le 2*(X>>4), il faudrait que je regarde, mais je pense qu'il fait un asr, alors que ce serait mieux s'il faisait une addition (X>>4+X>>4), mais je ne sais pas comment il optimiserait cette addition. Faut voir, mais là je n'ai pas le temps.

Bon, j'ai vu et il met bien un add, donc ne te soucie pas du 2*(X>>4), c'est très bien.

Sinon, utilise le passage de paramètres par registres, ce sera un petit peu mieux.

4

tu pourrais écrire dans un écran virtuel que tu copierais apres.

> c'est lent ...

PS: passe à l'assembleur pour faire ca ... ce sera bcp plus rapide !