π
<-
Chat plein-écran
[^]

Nspire : Routines pour sprites

C, C++, ASM...

Nspire : Routines pour sprites

Message non lude gameblabla » 12 Avr 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: Tout sélectionner
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: Tout sélectionner
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
Avatar de l’utilisateur
gameblablaProgrammeur
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Prochain niv.: 36.5%
 
Messages: 148
Inscription: 10 Oct 2012, 02:33
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Nspire : Routines pour sprites

Message non lude Lionel Debroux » 12 Avr 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.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Nspire : Routines pour sprites

Message non lude gameblabla » 12 Avr 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: Tout sélectionner
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
Avatar de l’utilisateur
gameblablaProgrammeur
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Prochain niv.: 36.5%
 
Messages: 148
Inscription: 10 Oct 2012, 02:33
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile


Retourner vers Native: Ndless, Linux, ...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 10 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1590 utilisateurs:
>1566 invités
>18 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)