1

Salut tt le monde !
Je suis en train de developper un moteur de mode7 pour la ti89
Vous pouvez telecharger la demo et le source sur le forum de tigen : http://pws.tigen.org/forum/index.php?action=sujet&ref=21&topic=664&page=1

Dites moi ce que vous en pensez...
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

2

Trop pixelise a mon avis.

3

-

4

Au fait, c'est en C pur (compilé en -Os), donc je trouve que c'est pas trop mal.
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. »

5

lionelA> Je pense que tu peux gagner pas mal en vitesse en deroulant au maximum tes boucles et surtout en reecrivant ton moteur en asm. Mais sinon tu comptes t'y prendre comment pour rendre une map de tiles? Parce que c'est quand meme bien different que de travailler sur un unique sprite.

6

Cad "en deroulant au maximum les boucles" ?
pour ce qui est de la map pour l'instant le moteur affiche une image contenant tous les pixels et donc il suffit de creer cette image a partir de tiles et c gagné
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

7

Tu perds l'interet d'utiliser des tiles, non ?

8

Derouler une boucle > quand tu connais a l'avance le nombres d'iterations, tu repete n fois d'affilees la suite d'instructions sequentiellement.
pour ce qui est de la map pour l'instant le moteur affiche une image contenant tous les pixels et donc il suffit de creer cette image a partir de tiles et c gagné

Ok smile

9

-

10

C'est plutôt pas mal, par contre ça ne fonctionne pas sur VTI 92+ avec les touches (le prog fait n'importe quoi et quitte ensuite). Tu as peut-être oublié de désactiver les interruptions? wink
Sinon tu as fait des benchs question vitesse? Il est très lent à démarrer... tu n'as pas besoin de calculer des tables de sinus pour chaque degré je pense... perso j'en ai calculé 64 et ça ne demande que 2 secondes. Si tu tiens à garder des tables à 360°, tu peux toujours les écrire dans un fichier la première fois mais ça prend pas mal de place (2ko pour mon Sonic mais je ne me rappelle plus combien d'angles faisait la table).
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

11

Une solution est de precalculer "l'image" de seulement une petite partie de la map, et de la reactualiser regulierement pendant le rendu, en fonctions des deplacements de la camera (si possible pas a chaque frame).

12

-> oui je garde l'utilité des tiles, ca permet de pas stocker les grosses images dans des fichiers
-> Si je devais loader les tiles a chaque fois que yen a besoin je perdrais enorment de temps
-> L'initialisation est longue parce qu'il ya des calculs de floatants pour la matrice de projection (il est possible de le faire avec des short mais je l'ai pas encore fait) et je calcule deja une table de 64 directions pour les cos et sin
Si vous avez pris le source c'est la fonction m7_CreateMatrix() qui doit etre optimiser pour l'init
-> les instructions de tests et de branchements (bouclage) sont tellement rapides qu'il n'est pas necessaire de derouler les boucles (de toute facon le moteur est configurable donc je ne connais pas forcement le nb d'iterations et puis si je fais le rendu en 40x25 ca fait deja 1000 fois la suite d'instruction : vive l'optimisation du code en taille mem !)
-> pour la ti92p c'est normal, je fais des masques sur la config ti89, trouve les touches equivalentes et ca sera bon (quand le moteur de mode7 sera fini il n'y aura pas de gestion du clavier car cela n'a rien a voir)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

13

Calculer en virgule fixe accélererait beaucoup ton programme si tu utilises des flottant dans les calculs en temps réel smilePour les brachements, quand tu développes un algo comme un mode 7 sur TI, en général tu ne craches pas sur les cycles cagnés par le déroulage de boucle. Enfin c'est un choix.

Mais il ne parlait pas de dérouler 1000 fois, mais par exemple pour afficher un sprite 16h16 c'est intéressant d'afficher 16 lignes d'affilée plutôt que de boucler (c'est juste un exemple hein)


edit: flottante->fixe
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.

14

Ximoon :
Calculer en virgule flottante ccélererait beaucoup ton programme si tu utilises des flottant dans les calculs en temps réel smile


tout est en short pour optimiser la vitesse (le 68k capte rien aux flottants)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

15

je pense qu'il voulait dire virgule fixe happy
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

16

De toutes facons il ne passe par des floats que pour les precaluls, avant de rentrer dans la boucle d'affichage.
les instructions de tests et de branchements (bouclage) sont tellement rapides qu'il n'est pas necessaire de derouler les boucles

les tests de branchements peuvent etre plus lents que tu ne le pense smile
Et puis tu n'es pas oblige de tout derouler.

17

Si je devais loader les tiles a chaque fois que yen a besoin je perdrais enorment de temps

pas tant que ca (a condition que tu ne les loades pas a chaque frame).

18

en asm une boucle for se resume a ca : "DBRA (registre de boucle), etiquette"
c a d 1 instruction (je dis pas que gcc genere exactement ca mais a peu de choses pres oui)
ma fonction de rendu imbrique 2 boucle presque sans aucun traitement dans le premier niveau et 75 lignes de code dans l'autre
je ne vois pas comment je pourrais derouler une partie et pas tout...
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

19

GoldenCrystal :
je pense qu'il voulait dire virgule fixe happy

tout à fait smile
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.

20

Au fait, tu atteinds combien de fps avec une resolution de 80x50?

21

Nerick
: Au fait, tu atteinds combien de fps avec une resolution de 80x50?

Je sais pas trop, là j'ai pas mon cable donc je teste sur l'emu (qui est plus lent) et je doi fer environ 3 fps (minable non ?)
80x50 c'est 4 fois la resolution 40x25 de la demo et donc ca met 4 fois + de temps pour chaque frame
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

22

./18 > oui mais tu as aussi toute une serie de if / else qui ne sert a rien, et qui prennent pas mal de cycles a chaque ligne affichee

23

Nerick :
./18 > oui mais tu as aussi toute une serie de if / else qui ne sert a rien, et qui prennent pas mal de cycles a chaque ligne affichee


Je vois pas trop où il y a des if / else qui ne servent pas confus
As tu mon source ? je suis ouvert a toute proposition d'optimisation de la fonction m7_drawFrame() (desolé j'ai pas mis de commentaires alors ca doit etre incaptable)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

24

Par exemple tes tests pour savoir si coordx/coordy sont bien dans les limites de la dimension de la map ne sont pas tres utiles a mon avis. Par contre au lieu d'avoir des pixels noirs quand ta camera depassera la zone a afficher tu auras n'importe quoi, mais ce n'est pas tres grave (et c'est d'ailleurs la qu'il faudra reactualiser la portion de map a afficher, cf ./11, quand tu travaillera sur une map composee de tiles).

25

essaye de disabler les tests de depassement de la carte, ca redessine la carte avec des decalages a l'endroit ou il doi y avoir du noir et on ne voi pas la difference au niveau des fps, je prefere laisser ces tests qui sont insignifiants en terme de temps d'execution par rapport aux acces memoire des matrices et aux memcpy
sinon je ne compte pas generer la carte au fur et a mesure du deplacement car la memoire de la ti permet largement de contenir un niveau en ndg donc je genererai la carte a chaque changement de map
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

26

Encore une fois, quand tu fais ce genre de fonction, rien n'est insignifiant, en effet si tu enlèves des dizaines de petits détails (ces fameuses boucles conditionnelles, une boucle enroulée par ci, un float par là, etc) tu peux gagner plus que tu ne crois smile
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.

27

Entre deux instructions qui peuvent faire la même chose, on a parfois des différences de 2 cycles (voire 4). Ça peut paraître insignifiant, mais si ça intervient dans l'affichage de pixel, ça intervient quand même 8000 fois (en 150x50), ce qui fait gagner 16000 cycles (ce qui te fait gagner 1.3 ms par frame affichée, donc si ton fps est de 50, il passe à 54 pratiquement, juste pour une différence de 2 cycles, souviens toi, ça veut dire que si tu arrives à gagner 10 cycles - et ce n'est pas compliqué en ASM de réussir à gagner 10 cycles - ton fps arriverait à 75)
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. »

28

Salut !
J'ai essayé d'optimiser le moteur pour avoir des graphisme plus joli et je me suis aperçu que deux petits "if" (2 lignes) multiplient les fps par 6
c'est ces lignes qui sont coupables :
if((pix0 << offsetmap) & 0x80)
dispbyte0 |= PIX;
if((pix1 << offsetmap) & 0x80)
dispbyte1 |= PIX;

Si quelqu'un a une idée du pourquoi ca fait ramer autant, dites le moi et je pourrait peut etre optimiser
en 80x50 sans ces lignes j'atteint presque 30fps (a la louche) ce qui veut dire que ca serait la revolution si je pouvait optimiser
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/

29

Bah, que sont pix0 et pix1 déjà ?
Sinon, pour la lenteur, c'est peut être dû aux décalages ainsi qu'aux ifs en eux mêmes (les branchements prennent pas mal de cycles je crois)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

30

les if y'en a des tonnes au dessus dans la meme boucle, c'est surement les decalages mais je comprend pas car c'est une instruction du 68k le decalage...
si j'enleve presque tout le code de la boucle et que je laisse juste ces test ca rame presque autant qu'avec tout le code
Si j'enleve que ces lignes ca booste a fond

je pense qu'il faut que je fasse un btst ou quelque chose comme ca pour remplacer le if en entier (plu de decalage et de & )
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/