π
<-

Nspire : Routines pour sprites

C, C++, ASM...

Nspire : Routines pour sprites

Unread postby gameblabla » 12 Apr 2018, 07:23

Bonjour,
je cherche a afficher les sprites de manière plus rapide autre que de faire pixel par pixel comme n2DLib le fait...
Code: Select all
void drawSprite(const unsigned short *src, int _x, int _y, int flash, unsigned short flashColor)
{
   int x, y, w = src[0] + _x, h = src[1] + _y, c = 3;
   for(y = _y; y < h; y++)
   {
      for(x = _x; x < w; x++, c++)
      {
         if(src[c] != src[2])
            setPixel(x, y, flash ? flashColor : src[c]);
      }
      if(y > 239) break;
   }
}


Comparé a un simple memcpy, c'est loin de efficient...
J'ai essayé d'écrire cette routine la :
(Pour l'instant, on va assumer que je veux pas que mon sprite soit transparent. (question de vitesse))
Code: Select all
typedef struct tagBITMAP
{
  unsigned short width;
  unsigned short height;
  unsigned long tsize;
  unsigned char *data;
} BITMAP;

#define SCREEN_WIDTH 320

void CopySprite(BITMAP* b, u32* dst, short x, short y)
{
    int j;
    for(j = 0; j < b->height; j++)
    {
      memcpy(dst+((b->width/2)*j), bmp->data+((b->width*2)*j), (b->width*2)*2);
      dst += (SCREEN_WIDTH - b->width);
    }
}

tsize correspond a la taille totale du fichier (320*240*2 pour l'écran de la nspire par exemple)
Le problème de cette routine est qu'elle ne fonctionne pas correctement si l'image (le bitmap en question) a une taille qui n'est pas 320 pixels en largeur.
Est-ce que quelqu'un pourrait corriger ma routine ou m'en passer une meilleure qui peut correspondre a mes besoins ?
Car j'ai pas d'idée <_<

De préference en C svp

Merci
User avatar
gameblablaProgrammeur
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 36.5%
 
Posts: 148
Joined: 10 Oct 2012, 02:33
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Nspire : Routines pour sprites

Unread postby Lionel Debroux » 12 Apr 2018, 07:57

dst est un pointeur sur u32 (devrait être uint32_t, tant qu'à faire), donc l'arithmétique de pointeurs de la deuxième et dernière ligne de la boucle for l'incrémente de (SCREEN_WIDTH - b->width) * sizeof(u32) octets. Une partie de tes problèmes ne viendraient-ils pas de là ?
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.3%
 
Posts: 6869
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

Re: Nspire : Routines pour sprites

Unread postby gameblabla » 12 Apr 2018, 13:50

Effectivement, tu n'avais pas tort...
Jacobly sur codewalrus a posté le code et je peux confirmer que ca fonctionne a merveille !
C:

Code: Select all
void CopySprite(BITMAP* b, u32* dst, short x, short y)
{
    u16* from = (u16*)b->data;
    u16* to = (u16*)dst + x + y * 320;
    int j;
    for(j = 0; j < b->height; j++)
    {
        memcpy(to, from, b->width*2);
        to += 320;
        from += b->width;
    }
}


Un grand merci a lui
User avatar
gameblablaProgrammeur
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 36.5%
 
Posts: 148
Joined: 10 Oct 2012, 02:33
Gender: Not specified
Calculator(s):
MyCalcs profile


Return to Native: Ndless, Linux, ...

Who is online

Users browsing this forum: ClaudeBot [spider] and 1 guest

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1023 utilisateurs:
>1010 invités
>7 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)