1

en fait c'est pour un programme ou il y a du scrolling mais avec des niveaux de gris.
Je voudrais savoir comment redessiner les sprites dans 2 écrans virtuels.(1 correspondant à LIGHT_PLANE & 1 à DARK_PLANE)
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

2

Tu veux les dessiner avec quoi tes sprites ?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

3

for(x;...;x++){
for(y;...;y++){
GrayClipSprite16_OR_R(X,Y, 16, sprite<LIGHT>, sprite<DARK>,GetPlane(0),GetPlane(1)); // une fonction de extgraph
}
}
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

4

Ben, tu remplaces GetPlane(0) et GetPlane(1) par tes écrans virtuels (qui doivent avoir la même taille que l'écran).
Au passage, le nom GetPlane est deprecated, tu es censé utiliser GrayGetPlane, et passer 0 et 1 à GrayGetPlane est très moche, les constantes LIGHT_PLANE et DARK_PLANE sont là pour ça.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

GrayClipSprite16_OR_R(X,Y, 16, sprite<LIGHT>, sprite<DARK>,virtual_LIGHT,virtual_DARK);
puis après je fais un memcpy de virtual_LIGHT>>GrayGetPlane(LIGHT_PLANE)
et pareille pour la DARK.
c'est bien ca?
et entre -temps il faut que je fasse un clrscr() ou nan?
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

6

DoomAngel :
GrayClipSprite16_OR_R(X,Y, 16, sprite<LIGHT>, sprite<DARK>,virtual_LIGHT,virtual_DARK);
puis après je fais un memcpy de virtual_LIGHT>>GrayGetPlane(LIGHT_PLANE)
et pareille pour la DARK. c'est bien ca?

Oui.
et entre -temps il faut que je fasse un clrscr() ou nan?

Non. 1. c'est ClrScr qu'il faudrait utiliser dans cette situation, pas clrscr et 2. memcpy écrase ce qu'il y avait dans la mémoire avant, donc pas besoin de l'effacer auparavant.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

ok
est-ce que utiliser FastCopyScreen de extgraph est bien???
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

8

C'est un peu plus rapide que memcpy, mais prend aussi nettement plus de place.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

ok bon ca arche bien avec les écran virtuels mais un gros pb:"Protected memory violation" apparait rapidement après quelques scroll. short mod16(short x) {           return (x-(x%16))/16; } void DRAWMAP(short x, short y) {           short i=0,j=0;            void *virtualL = malloc (LCD_SIZE);           void *virtualD = malloc (LCD_SIZE);            for( i = mod16(x); i < (mod16(x)+11); i++)             for( j = mod16(y); j < (mod16(y)+7); j++)                   if (i>=0 && i<=xmax && j>=0 && j<=ymax)                             GrayClipSprite16_OR_R((16*i)-x,(16*j)-y, 16, sprites[(map[j][i])][0], sprites[(map[j][i])][1],virtualL,virtualD);                   memcpy(GrayGetPlane(LIGHT_PLANE),virtualL,LCD_SIZE);                   memcpy(GrayGetPlane(DARK_PLANE),virtualD,LCD_SIZE);                   virtualL=malloc(0);                   virtualD=malloc(0); }
donc il faut que je supprime virtualL et virtualD à chaque fois??
et comment puis-je le faire??
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

10

Ce doit être parce que tu ne vérifies pas tes allocations, que tu ne les libères pas après utilisation et que tu réalloues 7ko à chaque frame...

malloc(0) ne sert à rien, pour libérer un bloc de mémoire, il faut utiliser la fonction free.

Et c'est un peu idiot de réallouer un écran virtuel (enfin, 2) à chaque image. Je te conseille de les allouer à l'initialisation une fois pour toute (et de les libérer à la fin du programme).
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

11

donc le programme se présenterai comme ca:
void drawmap(short x,short y){
... //codes
void virtualL=malloc(LCD_SIZE);
void virtualD=malloc(LCD_SIZE);
... //codes
free(virtualL);
free(virtualD);
}//fin de la fonction

mais en fait, c'est que je déclarent ces écrans dans une fonction.
donc faudrait que je le fasse dans le main???
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

12

13

DoomAngel :
mais en fait, c'est que je déclarent ces écrans dans une fonction. donc faudrait que je le fasse dans le main???

Oui.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

ok merci j'essaie ce soir
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

15

Kevin Kofler :
Memcpy écrase ce qu'il y avait dans la mémoire avant, donc pas besoin de l'effacer auparavant.


Et ya moyen d'aviter ça ? Une autre commande pour copier un écran vers un autre, virtuel ou pas, sans vider l'écran destination ?
avatar

16

Que veux-tu faire exactement ?
Si tu copies un écran vers un autre, tu écrases forcément l'ancien contenu !
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

17

Wai just comme ça pour savoir, est-ce qu'il y a une commande pour additionner les deux contenus ou faut-il la faire nous-même ?
avatar

18

Il y a les fonctions SpriteX8 de ExtGraph.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

19

20

Mais ça veut dire quoi "additionner" deux contenus ? Tu veux faire un OR logique ?
Ce n'est pas compliqué à faire de toute façon :
void screenOR(char *scr1,char *scr2)
{
  short i;
  for(i = 0 ; i<3840 ; i++)
    *scr1++ |= *scr2++;
}

Pour le principe. Après, tu peux accélérer pas mal en copiant des long ou en déroulant la boucle.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

21

Mouai je retiendrai. Nan en fait c'était juste comme ça pour savoir, s'il un avait une fonction directe pour faire un OR. mais c'est vrai que c'est pas compliqué.
++
avatar