1

Pour tout ceux qui programme avec TIGCC, ça vous arrive d'utiliser les fonctions de double buffering ? :

Au début du programme :

void *GrayBuffer=malloc(7688);
void *Light_addr,*Dark_addr;
GrayDBufInit(GrayBuffer);

Dans la boucle principale du programme :

Light_addr=GrayDBufGetHiddenPlane(LIGHT_PLANE); Dark_addt=GrayDBufGetHiddenPlane(DARK_PLANE);
GrayDBufToggle();
memset(Light_Buffer,0x00,3000);
memset(Dark_Buffer,0x00,3000);

... Et ensuite vous dessinez dans Light_addr et Dark_addr.
Bon par contre après il faut attendre les switch pour les HW1 en faisant :
GrayWaitNSwitches (2);
Moi j'attend qu'un switch en général.
Par contre je n'ai pas bien compris comment utiliser GrayGetSwitchCount, si quelqu'un pouvait m'expliquer ?
Avec ça c'est possible de faire quelque chose en attendant la synchronisation des plan au lieu d'attendre pour rien, non ?

Parce-que c'est vrai que ce sont des fonctions qui sont encore assez récentes et avec la doc en Anglais c'est pas très facile de comprendre (dû moins pour moi ça été la cas et j'ai dû me faire expliquer). Et puis il n'y a pas beaucoup de monde qui à l'air de les utiliser alors que pour les jeux en niveaux de gris ça augmente considérablement les performances !

... Ou alors vous utiliser toujours memcpy() ?
www.wikio.fr/user1921&info=comments

2

ca n'augmente pas les performance car il faut attendre la synchronisation!

3

Oui mais justement avec GrayGetSwitchCount, il n'y a pas moyen de faire quelque chose pendant ce temps au lieu d'attendre à rien faire ?
www.wikio.fr/user1921&info=comments

4

je n'utilise pas.
Ou alors vous utiliser toujours memcpy() ?

un équivalent smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

5

Oui mais justement avec GrayGetSwitchCount, il n'y a pas moyen de faire quelque chose pendant ce temps au lieu d'attendre à rien faire ?

>> tu met ta gestion de switch dans une int, et tu permet pendant ce temps le travail sur un autre buffer.

6

Autrement dit tu fais du triple buffering quoi ...
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.

7

>> tu met ta gestion de switch dans une int, et tu permet pendant ce temps le travail sur un autre buffer.

Ah d'accord, merci. C'est toujours plus intéressant que d'utiliser memcpy()... mais c'est vrai que c'est un peu plus compliqué par contre.
www.wikio.fr/user1921&info=comments

8

un équivalent

Tu utilises FastCopyScreen (extgraph) ou encore autre chose ? Sinon pour effacer les buffer il n'y a pas bien le choix : ClearGrayScreen() (extgraph) fait très bien l'affaire dans tout les cas. smile
A moins que quelqu'un utilise autre chose de plus rapide (hormis ceux qui utilisent les autres librairies : Genlib, Xlib, GraphX, ... ?
www.wikio.fr/user1921&info=comments

9

Un memset?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

10

Ouais, mais ce n'est pas ce qu'il y a de plus rapide : ClearGrayScreen() est déjà plus rapide. Mais bon il doit sûrement y avoir des routines asm encore plus rapide smile
www.wikio.fr/user1921&info=comments

11

Tu utilises FastCopyScreen (extgraph) ou encore autre chose ?

j'utilise XLib smile
(ou, dans ce cas précis, pour la copie de GPLan vers LCD, une routine que j'ai écrit en me basant sur celle de Xlib (j'avais besoin d'une routine ne copiant pas les 8 lignes en bas de l'écran))
Sinon pour effacer les buffer il n'y a pas bien le choix : ClearGrayScreen() (extgraph) fait très bien l'affaire dans tout les cas

XClrGPlan
XClrBWPLan

memset vs ClearGrayScreen...
je doute que memset soit plus rapide, car Clear... doit être optimisée pour le format de buffers, déjà, plutot que d'etre généraliste comme memset
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

12

Admettons que je développe une focntion en ASM, qui efface octets par octets un buffer, c'est très lent?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

13

heu pour effacer le buffer c'et movem et pas clr.x, mais bon Squale a l'une des premieres beta de Xlib tongue

14

movem!!!

Donc un movem du genre movem #0,(a0)?? En une ligne tu peux effacer un buffer. eek
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

15

non...

16

geogeo, regarde un peu la doc de movem... movem #0,(a0) n'est pas une instruction valide...

Pour t'aider, voici le source de ClearGrayScreen2B_R d'ExtGraph (version __regparm__). On pourrait faire un peu mieux en utilisant plus de registres et en faisant un petit movem supplémentaire à la fin (pas tous les multiples de quatre ne sont diviseurs de 3840).
| void ClearGrayScreen2B_R(register void* lightplane asm("%a0"),register void* darkplane asm("%a1")) __attribute__((__regparm__(2))); // C prototype

.data
.globl ClearGrayScreen2B_R
.even
ClearGrayScreen2B_R:
movem.l %d3-%d7/%a2-%a4,-(%sp)
lea (0xf00,%a0),%a0
lea (0xf00,%a1),%a1
moveq #0,%d0
moveq #0,%d1
moveq #0,%d2
moveq #0,%d3
moveq #0,%d4
moveq #0,%d5
moveq #0,%d6
moveq #23,%d7
movea.l %d0,%a2
movea.l %d0,%a3
movea.l %d0,%a4
0: movem.l %d0-%d6/%a2-%a4,-(%a0)
movem.l %d0-%d6/%a2-%a4,-(%a1)
movem.l %d0-%d6/%a2-%a4,-(%a0)
movem.l %d0-%d6/%a2-%a4,-(%a1)
movem.l %d0-%d6/%a2-%a4,-(%a0)
movem.l %d0-%d6/%a2-%a4,-(%a1)
movem.l %d0-%d6/%a2-%a4,-(%a0)
movem.l %d0-%d6/%a2-%a4,-(%a1)
dbf %d7,0b
movem.l (%sp)+,%d3-%d7/%a2-%a4
rts
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

17

En effet, ce code est vraiment rapide. smile
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

18

Si t'as vraiment besoin d'une vitesse incroyable, déroule la boucle en passant par une var pour sauvegarder tous tes registres.

19

Squale a l'une des premieres beta de Xlib

je suis passé à une version plus récente smile
(cela dit, c'est un mix entre la 1.00 et la 1.05)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

20

Sinon, tu utilises 1.00 a savoir que dans v2, ca sera pareil (des trucs en plus) mais sans DLL happy

21

le fait est que je n'ai pas de Dll, là smile
(j'ai repris les sources de v1.00 et 1.05 (ou plutot, d'une partie de ces versions : je n'ai pas les sources des fonctions de ligneset autres par exemple), et je les ai compilé pour en faire une librairie statique smile)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

22

Bah tu peux DL la DLL smile

23

bah, j'en veux pas de la Dll smile
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

24

j'ai les sources de _X_lib 1

elle sont meme sur le "vieux" site

http://xlib.kouette.com/download/_X_Lib.rar
ou
http://xlib.kouette.com/download/_X_Lib1.00.rar
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

25

lol la hontetongue

26

godzil> c'est celles que tu m'avais passé, je pense ?
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

27

nan c'est les sources correspondantes a la version DLL, je t'avait passé la derniere version avant la DLL
La normalement tout y est..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

28

> Si t'as vraiment besoin d'une vitesse incroyable, déroule la boucle en passant par une var pour sauvegarder tous tes registres. (#17)
J'avais essayé ce style de programmation sur une routine d'effacement d'un seul plane (__stkparm__ à l'époque, ça fait longtemps). J'avais utilisé 15 registres. Je savais bien que ça ferait du code horriblement gros, mais je voulais voir.
Résultat: amélioration vitesse très faible (quelques pourcents), alors que la taille a été augmentée dans des proportions inacceptables (3840/60 = 64 movem -> 256 bytes, plus l'effacement / restauration des registres)... Donc, poubelle.
Morale: faire le bourrin en déroulant les boucles n'est pas toujours intelligent... Si on est obligé de dérouler ses boucles pour arriver à faire ce qu'on veut, c'est peut-être qu'on veut faire trop sur une machine pas adaptée...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

29

XDanger: Lorsque sBibi a fait trinity, je pense que bcp de personnes disaient comme toi, ce n'est pas adaptés ... moralité, il a réussi a faire un moteur 3D certes non complet (mm s'il gere les arbres bsp, les textures etc.) mais qui est pas mal pour un 68000 a 10MHz ...
Des lors, cette méthode est, heuremsement, pas adaptée a presque tous les jeux etc., mais des fois, c nécessaire de passer par des méthodes bourrains.

30

./27> arf, ok

avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall