π
<-
Chat plein-écran
[^]

Jetpack Impossible

C, C++, ASM...

Re: Jetpack Impossible

Message non lude pierrotdu18 » 01 Juin 2014, 13:54

Bah c'est ce que je pensais, mais bon...
static void* DEFAULT_BUFFER;
DEFAULT_BUFFER = SCREEN_BASE_ADDRESS;
Code: Tout sélectionner
if (buf != ((volatile unsigned*)(DEFAULT_BUFFER)))
   {
      free(buf);
   }
   else
   {
      buf = *((volatile unsigned**)0xC0000010);
      *((volatile unsigned**)0xC0000010) = ((volatile unsigned*)(DEFAULT_BUFFER));
      free(buf);
   }


Donc à part si vraiment je suis débile léger, DEFAULT_BUFFER est bien initialisé comme étant le buffer par défaut (son initialisation est dans le initDoubleBuffering() qui n'est lancé qu'une seule fois et avant toute modification des buffers).
Et ensuite, dans la fonction quit(), si le buffer sur lequel on est entrain de dessiner n'est pas le buffer par défaut, alors on le free (et du coup le buffer final est bien le buffer de départ), et sinon, on se débrouille pour remettre le buffer courant au buffer de départ, et on free, on retombe toujours bien sur le bon buffer...
C'est pour ça que je ne comprends pas...
Bonjour
Avatar de l’utilisateur
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 40.5%
 
Messages: 975
Inscription: 07 Nov 2013, 20:18
Localisation: Paris V
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP* Lycée Henri IV

Re: Jetpack Impossible

Message non lude Excale » 01 Juin 2014, 15:20

Tu te casserais moins la tête si tu ne passais pas d'argument à flip().*

*ça n'est pas la seule bonne solution
Avatar de l’utilisateur
ExcaleAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 3.9%
 
Messages: 2955
Images: 3
Inscription: 10 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Jetpack Impossible

Message non lude pierrotdu18 » 01 Juin 2014, 15:21

Parce que comme c'est limité au double buffering, il n'y a que deux possibilités :
- Le LCD lit le buffer par défaut
- Le LCD lit le deuxième buffer

Donc si le LCD ne lit pas le deuxième buffer, alors il lit le buffer par défaut et il suffit de libérer le deuxième buffer pour quitter... non?

EDIT : Ah bah j'ai répondu à ta question mais comme tu l'as éditée et supprimée... :p

Et sinon, oui, mais je voulais pas faire avec des globales...
C'est vraiment pas possible de faire marcher mon code?
Bonjour
Avatar de l’utilisateur
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 40.5%
 
Messages: 975
Inscription: 07 Nov 2013, 20:18
Localisation: Paris V
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP* Lycée Henri IV

Re: Jetpack Impossible

Message non lude matref » 01 Juin 2014, 23:12

C'est bon mon double buffering marche, pour toutes Nspires. J'ai juste trois fonctions, testé sur écran monochrome et couleur, ça marche :

Code: Tout sélectionner
int currentBuf = 0;
unsigned short *bufCX[2];
unsigned char *bufMono[2];

#define BUFF_BASE_ADDRESS (is_cx ? bufCX[currentBuf] : bufMono[currentBuf])

int initDoubleBuff()
{
   if(is_cx)
   {
      bufCX[0] = (unsigned short *)SCREEN_BASE_ADDRESS;
      bufCX[1] = (unsigned short *)malloc(SCREEN_BYTES_SIZE);
      return !bufCX[1];
   }
   else
   {
      bufMono[0] = (unsigned char *)SCREEN_BASE_ADDRESS;
      bufMono[1] = (unsigned char *)malloc(SCREEN_BYTES_SIZE);
      return !bufMono[1];
   }
}

void switchBuffers()
{
   if(is_cx)
      *(unsigned short**)0xC0000010 = bufCX[currentBuf];
   else
      *(unsigned char**)0xC0000010 = bufMono[currentBuf];
   currentBuf ^= 1;
}

void deinitDoubleBuff()
{
   if(is_cx)
   {
      *(unsigned short**)0xC0000010 = bufCX[0];
      free(bufCX[1]);
   }
   else
   {
      *(unsigned char**)0xC0000010 = bufMono[0];
      free(bufMono[1]);
   }
}

On a juste à dessiner sur BUFF_BASE_ADDRESS comme on le ferait sur SCREEN_BASE_ADDRESS et appeler switchBuffers() à chaque frame et c'est bon.
Dernière édition par matref le 01 Juin 2014, 23:14, édité 1 fois.
Avatar de l’utilisateur
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 25%
 
Messages: 506
Inscription: 11 Déc 2011, 03:08
Localisation: France, Châteaurenard
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Prépa MPSI

Re: Jetpack Impossible

Message non lude pierrotdu18 » 01 Juin 2014, 23:14

Je préfère vraiment mes fonctions.
Je ne suis pas sur PC mais je les upload demain ;)
je n'utilise qu'une variable globale, et qu'un buffer, pas deux.
Bonjour
Avatar de l’utilisateur
pierrotdu18Premium
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 40.5%
 
Messages: 975
Inscription: 07 Nov 2013, 20:18
Localisation: Paris V
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP* Lycée Henri IV

Re: Jetpack Impossible

Message non lude matref » 01 Juin 2014, 23:29

P'tit update, c'est vraiment les casts qui me faisaient peur, mais apparemment comme ça ça marche (testé sur couleur et monochrome, je vais pas le dire à chaque fois :P ) :

Code: Tout sélectionner
int currentBuf = 0;
void *doubleBuf[2];

#define BUFF_BASE_ADDRESS doubleBuf[currentBuf]

int initDoubleBuff()
{
   doubleBuf[0] = (void*)SCREEN_BASE_ADDRESS;
   doubleBuf[1] = malloc(SCREEN_BYTES_SIZE);
   return !doubleBuf[1];
}

void switchBuffers()
{
   *(volatile unsigned**)0xC0000010 = doubleBuf[currentBuf];
   currentBuf ^= 1;
}

void deinitDoubleBuff()
{
   *(volatile unsigned**)0xC0000010 = doubleBuf[0];
   free(doubleBuf[1]);
}
Avatar de l’utilisateur
matref
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 25%
 
Messages: 506
Inscription: 11 Déc 2011, 03:08
Localisation: France, Châteaurenard
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Prépa MPSI

Précédente

Retourner vers Native: Ndless, Linux, ...

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 26 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.
1378 utilisateurs:
>1346 invités
>28 membres
>4 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)