1

Bon voila, je sais faire une routine graphique pour les sprites de largeur 1 octet, c'est marque dans le tuto de tifr:


"#define SAVE_SCREEN
#include <tigcclib.h>
short _ti89;

unsigned char mon_sprite[] = {0,60,126,70,70,126,60,0 };

void sprite_8(short x,short y,short hauteur,unsigned char* sprite)
{
register unsigned char *LCD=LCD_MEM+ (y<<5)-(y+y) + (x>>3);
register unsigned short i=x&7,k=8-i;
while (hauteur--)
{
*LCD++ |= ((*sprite) >> i);
*LCD |= ((*sprite++) << k);
LCD+=29;
}
}

void _main(void)
{
clrscr();
sprite_8(1,1,8,mon_sprite);
ngetchx();
}
"
J'ai tout bien compris, mais:
*je voulais savoir si il y avait une methode plus rapide pour les sprites de largeur 8pxl...
*Sinonje voulais savoir si il fallait garder la meme methode pour les largeur de +8pxls.

Voila merci.

2

3

On peut. Mais y'a mieux : traviller en long pour les routines de + de 16 bits.

4

[pollux] tu rigoles:
#define SAVE_SCREEN
#include <tigcclib.h>
short _ti89;
volatile short count;

unsigned char mon_sprite[] = {0,60,126,70,70,126,60,0 }; 


void Sprite8_XOR(short x,short y,short h,unsigned char* sprite,void* dest) {
    register long           addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0xfffe);
    register unsigned short cnt  = 24-(x&15);
    for (;h;h--,addr+=30) *(long*)addr|=(long)(*sprite++)<<cnt;
}
void sprite_8(short x,short y,short hauteur,unsigned char* sprite)
{
  register unsigned char *LCD=LCD_MEM+ (y<<5)-(y+y) + (x>>3);
  register unsigned short i=x&7,k=8-i;
  while (hauteur--)
   {
    *LCD++ |= ((*sprite) >> i);
    *LCD |= ((*sprite++) << k);
     LCD+=29;
   }
}
void TIMER (void) { count--; }
void	_main(void)
{
	unsigned short k=0;
	clrscr();	OSVRegisterTimer (1,70,TIMER); 
	DrawStr(0,90,"Bench GO!",A_NORMAL);
	count = 1;
	while (count)
		{ 
			sprite_8(100,90,8,mon_sprite);
			k++;
		}
	printf_xy(0,0,"Ptite r:  %d Sp",k)
	; count = 1; k=0;
	while (count) { Sprite8_XOR(100,90,8,mon_sprite,LCD_MEM); k++; }
	printf_xy(0,10,"Extgraphlib: %d Sp",k); OSVFreeTimer (1); 
  ngetchx();
}

/*
Resultat bench:
Petite routine: 17948 sprites.
Extgraphlib: 19842 sprites.
difference: 1834 sprites!
Timer = 1s 10 (+-5 milisecondes)
*/


Tu les vois ou tes 2 fois plus vite??
[edit]Edité par TiMad le 23-08-2001 à 18:20:28[/edit]
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

5

beho!