357Fermer359
nullLe 17/02/2004 à 19:21
Non non j'ai rien dit ! C'est de ma faute en fait parce-que je calculais le nombre d'itération dans la première boucle alors que ça peut se calculer très facilement au début de la fonction :

void PutBitmap(short x, short y,unsigned char *pic,unsigned char *video_plane)
{
	
  short i=0,j=0;
  short nb_c=*(unsigned short *)(pic+0);
  short nb_l=*(unsigned short *)(pic+2);
  pic=pic+4;
  short height = (nb_l/8)+1;
  for(j=0;j<nb_c;j++)
  {
       
       short x_ = x;
       short i=0;
      
       unsigned char *pointeur = (video_plane+(((y<<8)-(y<<4)+x)>>3));
       /*                                    (256y-16y+x)/8       */
         
       short n=height;
       while(n--)
       {
  	     
  	     short mask = x_&7;
  	     *(pointeur+1) |=*(pic)<<(8-mask);
  	     *(pointeur++) |=*(pic++)>>(mask);
  	     x_=x_+8;
  	     
      
       }
       y++;
  }
  

}

D'ailleurs j'emploie cette optimisation un peu patout dans mon programme mais je ne vois jamais les optimisation tout de suite : j'essaye d'avoir d'avoir quelque chose de fonctionnel et de facile à comprendre.

et par contre pourquoi quand je fais ça :

*(pointeur+1) |=*(pic)<<(8-x_&7);
*(pointeur++) |=*(pic++)>>(x_&7);

ça foire et qaund je fais ça :
short mask = x_&7;
*(pointeur+1) |=*(pic)<<(8-mask);
*(pointeur++) |=*(pic++)>>(mask);
ça marche ?