π
<-
Chat plein-écran
[^]

scrolling rapide

C, C++, ASM...

scrolling rapide

Message non lude newprog_creator » 26 Sep 2023, 19:38

Bonjour à la communauté,
Je me demande comment coder une fonction de scrolling (vers le haut par exemple, nombre de lignes spécifiées possibles) qui soit rapide. Sur ti83pce, le jeu oiram ce le fait avec une vitesse convenable. On devrait pouvoir faire de même sur ti nspire je pense (en plus le processeur est plus rapide).

J'ai créer le code suivant qui est très lent (seulement 10 exécutions par seconde) :
Code: Tout sélectionner
int scrollup(void)
{
    signed int x,y,w,h,ix,iy,iw,ih;
    int _x,_y,_w,_h,_xori,_wori,n,_xa,_xb;
    unsigned int nb_pix,n32,*uiptr,n16;   //ori
    unsigned short *usptr;
    ptr++;
    x=((*(fonc[*(ptr)]))()); //coin superieur gauche
    y=((*(fonc[*(ptr)]))()); //"           "         "
    w=((*(fonc[*(ptr)]))()); //width
    h=((*(fonc[*(ptr)]))()); //height
    nb_pix=((*(fonc[*(ptr)]))());

    _x= max(x, 0); _y = max(y, 0); _w = min(320 - _x, w - _x + x); _h = min(240 - _y, h - _y + y);

    if(_x%2)
    {
        for(iy=_y;iy<_y+_h-nb_pix;iy++)
        {
            *(lcdad+_x+iy*320)=*(lcdad+_x+(iy+nb_pix)*320);
        }
        _xa=_x+1;
    }
    else _xa=_x;
    if((_x+_w)%2)
    {
        //for(iy=_y+_h-1;iy>_y+nb_pix;iy--)
        for(iy=_y;iy<_y+_h-nb_pix;iy++)
        {
            *(lcdad+(_x+_w-1)+iy*320)=*(lcdad+(_x+_w-1)+(iy+nb_pix)*320);
        }
        _xb=_x+_w-1;
    }
    else _xb=_x+_w;

    //for(iy=_y+_h-1;iy>_y+nb_pix;iy--)
    for(iy=_y;iy<_y+_h-nb_pix;iy++)
    {
       for(ix=_xa;ix<_xb;ix+=2)
       {
           *(unsigned int *)(lcdad+ix+iy*320) = *(unsigned int *)(lcdad+ix+(iy+nb_pix)*320);
       }

    }

}
Avatar de l’utilisateur
newprog_creatorProgrammeur
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 74.2%
 
Messages: 67
Inscription: 29 Mar 2014, 19:07
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: bac+13

Re: scrolling rapide

Message non lude Adriweb » 28 Sep 2023, 21:27

Vogtinator a dit :
Unrolling would probably help and if this works on the framebuffer area in RAM it'll be rather slow as that is uncached. It can be faster to do all the work in an off-screen buffer and memcpy resp. lcd_blit into the active buffer.
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.3%
 
Messages: 14617
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: scrolling rapide

Message non lude newprog_creator » 30 Sep 2023, 11:53

Bonjour,
Je ne suis pas sur de comprendre tous les termes techniques. Je peux dire que je n'utilise pas nSDL.
Il y a til moyen d'avoir un exemple de code en se basant par exemple sur le code raccourci suivant (scrolling de 1 pixel sur tout l'écran) :

Code: Tout sélectionner
int scrollup2(void)
{
    signed int x,y,w,h,ix,iy,iw,ih;
    int _x,_y,_w,_h,_xori,_wori,_xa,_xb;
    unsigned int nb_pix,n32,*uiptr,*uiptr1,*uiptr2,n16;   //ori
    unsigned short *usptr,n;

    for(iy=0;iy<240-1;iy++) //lcd heigth == 240
    {
       uiptr1=(unsigned int *)(lcdad+iy*320);
       uiptr2=(unsigned int *)(lcdad+iy*320+320);
       n=0;
       while(n++<160)       //lcd width==320 ; 160=320/2
       {
           *(uiptr1++)=*(uiptr2++);
           //n++;
       }
    }
}


Merci par avance
Avatar de l’utilisateur
newprog_creatorProgrammeur
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 74.2%
 
Messages: 67
Inscription: 29 Mar 2014, 19:07
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: bac+13


Retourner vers Native: Ndless, Linux, ...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 16 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.
1270 utilisateurs:
>1238 invités
>27 membres
>5 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)