1

Comme une autre personne du forum je rencontre le même pb en l'initialisant comme ceci:
DSCREEN *DScr[2] = {NULL, NULL };
int ts = 0;


void SwapBuffer()
{
gl_set_dscreen_int(DScr[ts]);
ts ^= 1;
gl_set_dscreen_function(DScr[ts]);
}

// Constant speed 30Hz function


// Constant speed 15Hz function


// Ready to print ?
void Ready()
{
while (gl_timer == 0);
}



HANDLE hd;

gl_init(); // Init genlib

gl_init_dscreen(&DScr[0], &hd); // Alloc 1 DScreen
if (hd == H_NULL) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_init_dscreen(&DScr[1], &hd); // Alloc the 2nd DScreen
if (hd == 0) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_set_dscreen_int(DScr[0]); // Define the printed DScreen
gl_set_dscreen_function(DScr[0]); // Define the working DScreen
gl_cls(); // Clear the working DScreen

J'ai preos comme Kernel et la calc affiche une erreur de protection de mémoire.
Sur ma Hw2 rom 2.05 et sur VTi j'ai exactement le même pb.

Et en plus je ne sais même pas comment me servir des fonction pour gérer le double buffering (afficher le buffer, l'effacer...).
Quelqu'un pourrait m'aider ?
www.wikio.fr/user1921&info=comments

2

Ya personne qui programme avec Genlib ?!
www.wikio.fr/user1921&info=comments

3

je ne programme qu'avec <ezgen.h> de GTC, donc je ne sais plus trop comment allouer des plans ou faire du toggling...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

4

GTC C une lib graphique ????
http://membres.lycos.fr/pingooz/
Un cafe et deux sucres

5

Non, c'est un compilateur C.
C'est ezgen apparemment, sa lib graphique.

6

GTC c un concurent de TIGCC ???
http://membres.lycos.fr/pingooz/
Un cafe et deux sucres

7

Va voir là pour avoir plus d'infos sur GTC sans polluer ce topic : topics/16-18104-gtc-un-tigcc-sur-votre-calculatrice

8

ah oui, je m'en souviens desole de polluer ...
http://membres.lycos.fr/pingooz/
Un cafe et deux sucres

9

File la source exacte.

10

#define USE_TI89 // Compile for TI-89
#define USE_KERNEL
#define MIN_AMS 100 // Compile for AMS 1.00 or higher
#define SAVE_SCREEN // Save/Restore LCD Contents
#include <tigcclib.h> // Include All Header Files
#include "extgraph.h"
#include "DrawFastLine.h"
#include "graphX.h"
#include "NextGenEngine.h"
#define NO_EXIT_SUPPORT
#define NO_CALC_DETECT
#include "genc.h"


// Main Function
void _main(void)

{

clrscr();
DrawStr(27,20,"NextGen 3D Engine",1);
DrawStr(70,50,"By",1);
DrawStr(30,70,"Raphael Domenge",1);
ngetchx();
DSCREEN *DScr[2] = {NULL, NULL };
int ts = 0;


void SwapBuffer()
{
gl_set_dscreen_int(DScr[ts]);
ts ^= 1;
gl_set_dscreen_function(DScr[ts]);
}

// Constant speed 30Hz function


// Constant speed 15Hz function


// Ready to print ?
void Ready()
{
while (gl_timer == 0);
}



HANDLE hd;

gl_init(); // Init genlib

gl_init_dscreen(&DScr[0], &hd); // Alloc 1 DScreen
if (hd == H_NULL) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_init_dscreen(&DScr[1], &hd); // Alloc the 2nd DScreen
if (hd == 0) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_set_dscreen_int(DScr[0]); // Define the printed DScreen
gl_set_dscreen_function(DScr[0]); // Define the working DScreen
gl_cls(); // Clear the working DScreen

do
{
(boucle du moteur)...
}while(!GX_ECHAPpressed());


gl_free_hd(); // Free all the allocated handles
gl_quit(); // Quit Genlib



exit:
clrscr();
ST_showHelp("raphael.domenge@wanadoo.fr");
ngetchx();
ngetchx();

}

Ah, oui et puis à je ne sais tjrs pas comment utiliser les fonction pour le double buffering laors pr l'instant il y a rien.
Et puis j'ai la VERSION 0.99.20 de Genlib, mais je ne connais pas celle de preos, un truc qui finit par 52 je crois.
www.wikio.fr/user1921&info=comments

11

ezgen est pas une lib graphique, c'est juste un header pour genlib qui gère automatiquement l'allocation des plans et le double buffering. C'est fou ce que ça fait gagner comme temps smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

12

ezgen, il marche avec TIGCC ?
Sinon, il y a quelq'un qui peut me monter les sources d'un programme fait avec Genlib parce-que là je n'y arrive tjrs pas: ca plante.
Ou alors dite moi comment vous faites...
www.wikio.fr/user1921&info=comments

13

Tu lis la doc smile

14

Bah, oui c bien ce que j'ai fait : je fait un copier coller de la doc.
www.wikio.fr/user1921&info=comments

15

-

16

1) je pense que tu peux (dois) virer :
#define SAVE_SCREEN // Save/Restore LCD Contents
#include <tigcclib.h> // Include All Header Files
#define NO_EXIT_SUPPORT

2) ton main est bizarrement placé embarrassed
Fiou.

17

#define USE_TI89 // Compile for TI-89
#define USE_KERNEL
#include <tigcclib.h> // Include All Header Files
#include "genc.h"
DSCREEN *DScr[2] = {NULL, NULL };
int ts = 0;


void SwapBuffer()
{
gl_set_dscreen_int(DScr[ts]);
ts ^= 1;
gl_set_dscreen_function(DScr[ts]);
}

// Constant speed 30Hz function


// Constant speed 15Hz function


// Ready to print ?
void Ready()
{
while (gl_timer == 0);
}



HANDLE hd;
// Main Function
void _main(void)
{


gl_init(); // Init genlib

gl_init_dscreen(&DScr[0], &hd); // Alloc 1 DScreen
if (hd == H_NULL) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_init_dscreen(&DScr[1], &hd); // Alloc the 2nd DScreen
if (hd == 0) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_set_dscreen_int(DScr[0]); // Define the printed DScreen
gl_set_dscreen_function(DScr[0]); // Define the working DScreen
gl_cls(); // Clear the working DScreen


exit:
gl_free_hd(); // Free all the allocated handles
gl_quit(); // Quit Genlib

}

Dans ce programme ça plante aussi, exactement de la même manière qu'avec mon moteur. Et si c'était une autre lib qui ferait tout foiré ça marcherait.
J'ai pris l'habitude de mélanger les libs et d'habitude ça marche tout le temps.
La si je vire la ligne #include <tigcclib.h> // Include All Header Files, il y a que des erreurs à la compilation. Je ne vois pas bien pourquoi l'enlever: on programme comment après ?
www.wikio.fr/user1921&info=comments

18

C'est clair qu'il ne faut surtout pas enlever le #include <tigcclib.h>.
Attends PpHd ou quelqu'un qui connait genlib pour qu'il puisse t'aider.

19

le tigcclib.h était en trop c'etait un copié-collé
mais autrement chez moi ca compile et ca plante pas.
Fiou.

20

#define USE_TI89 // Compile for TI-89
#define USE_KERNEL
#include <tigcclib.h> // Include All Header Files



>>>#include "genc.h"
include "genlib.h"


DSCREEN *DScr[2] = {NULL, NULL };
int ts = 0;


void SwapBuffer()
{
gl_set_dscreen_int(DScr[ts]);
ts ^= 1;
gl_set_dscreen_function(DScr[ts]);
}

// Constant speed 30Hz function


// Constant speed 15Hz function


// Ready to print ?
void Ready()
{
while (gl_timer == 0);
}



HANDLE hd;
// Main Function
void _main(void)
{


gl_init(); // Init genlib

gl_init_dscreen(&DScr[0], &hd); // Alloc 1 DScreen
if (hd == H_NULL) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_init_dscreen(&DScr[1], &hd); // Alloc the 2nd DScreen
if (hd == 0) goto exit; // Quit if error
gl_push_hd(hd); // Save the handle

gl_set_dscreen_int(DScr[0]); // Define the printed DScreen
gl_set_dscreen_function(DScr[0]); // Define the working DScreen
gl_cls(); // Clear the working DScreen


exit:
gl_free_hd(); // Free all the allocated handles
gl_quit(); // Quit Genlib

}

21

TachMan a écrit :
1) je pense que tu peux (dois) virer :
#define SAVE_SCREEN // Save/Restore LCD Contents
#include <tigcclib.h> // Include All Header Files #define NO_EXIT_SUPPORT

D'ailleurs, tes NO_EXIT_SUPPORT et NO_CALC_DETECT ne feront strictement rien, vu que tu les as placés aprés #include <tigcclib.h>. C'est avant qu'il faut les mettre!
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é

22

raphael> bon conseil : utilise les versions les plus RECENTES de genlib et preos (et tigcc tiens au passage)!!!
warau kado niha fuku kitaru.

#trifouet#!!!

23

Eh bien, c'est exactement ce que j'ai fais (sauf pour TIGCC mais j'ai l'avant dernière sortit) et maintenant tout marche impeccable !!! smile

J'ai tester les performance sur VTI (je sais c'est pas génial, mais j'en ai marre de faire planter la mienne) avec ce code :

Frame++;
if(gl_frame_timer>=30)
{
Fps=Frame;
Frame=0;
gl_frame_timer=0;
}

printf_xy(1,1, "%d", Fps); //Fps

Pour calculer les Fps c'est bon, ou pas ? Par contre en redirigant les routines graphique avec PortSet() (j'ai encore pas dû faire ça comme il le fallait grin), ça plante alors je peux tout juste voir sur ma Hw2 les fps.

D'après les tests fait avec le bout de code ci dessus, les performances sont pas extraordinairement plus élevé que la version utilisant extgraph(routines programmés en asm), TIGCC lib :
48 fps ->> 53 fps.
D'après mes tests c'est surtout le double buffering qui est plus rapide. Les routines de tracé de ligne n'ont pas l'air bcp plus rapide que celles d'extgraph reprogrammé en asm en fait.
Et puis j'ai gardé GX_rowread de GraphX pour les touches.

Les fonction polygonales conviennent pas trop avec mon moteur : il faudrait que je change mon moteur pour que la rasterization produise une liste de triangle de la même structure que la structure POINT. Et puis il y a qu'une boucle pour gérer les faces.
Alors j'ai garder la routine de remplissage des triangles et mon clipping (qd le point d'une face n'est pas dans l'écran, on passe à la face suivante).

D'après la doc toutes les lignes horizontales seraient


D'après le doc toutes les lignes horizontales sont clippés, mais en enlevant le clipping des faces et que je fais une rotation et bien on voit bien qu'elle ne sont pas (ou mal ?!!!) clippé.
Si elle sont vraiment clippé dans ce cas là, il vaut mieux les "déclippé" parce-que le gain de performance serait appréciable.



www.wikio.fr/user1921&info=comments

24

ca me semble peu tes benchs
warau kado niha fuku kitaru.

#trifouet#!!!

25

PortSet ? Tu utilises donc des fonctions d'AMS ?
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

26

Euh comment, ça ?
Générelement oui parce-que pour se servir de printf(); il n'y a pas d'autre moyen.
Et puis dans la doc de Genlib c'est marqué que l'on peut mais ça marche toujours pas.
Je ne sais pas trop dans quelle mémoire vidéo il faut dessiner.
Enfin, en essayant avec le buffer ça marche pas.
www.wikio.fr/user1921&info=comments

27

utilise gl_put_large_string dans gl_window par exemple smile

28

Ah, parce que gl_put_large_string supporte les formats printf? grin Oui, il y a sprintf, mais il faut faire attention à la taille du buffer. printf n'a pas besoin de buffer, lui.
Sérieusement: Il y a un moyen de récupérer les adresses des plans avec genlib pour les utiliser avec PortSet, mais je ne sais pas comment faire.
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é

29

Je proposais une alternative à printf smile

30

ca me semble peu tes benchs
Si, si c'est bien ça. Genlib à un double buffering (pour hw2 en tout cas) + rapide que celui de TIGCC (parce-que les fonctions de TIGCC attendent... je ne sais plus trop koi grin).
Mais par contre les routines asm d'extgraph (la routine FastDrawLine (ExtendeD)) et la routine Hline_or) sont plus rapides que celle Genlib !!!!
Quand on l'affichage des lignes occupe tout l'écran mon programme avec Genlib est plus lent, tandis que qd il y a rien d'afficher la Frame rate est bien plus élevé.
Ca peut s'expliquer par le fait que Genlib est dynamique est que la fonction gl_draw_hline_dg(); est clippée (quoique je me pose tjrs la question).

Et moi c'est pas ce que je recherche. Avec les routines asm d'extgraph et le double buffering de TIGCC (ainsi que le Flat shading qui affiche des lignes noirs (et donc 2 lignes) quand les polygones sont plus loin et donc plus petit) j'ai quasiment la même Framerate quelque soit la distance de l'objet. Bon c'est pas toujours vrai mais j'ai jamasi réussi à avoir un programme aussi rapide quand l'affichage remplit l'écran et qui à une Frame rate aussi stable.

Il y a donc bien des raisons d'attendre avec impartience la nouvelle version de Extgraph.
Avec les fonctions de double buffering de TIGCC, ClearGrayScreen2B() d'extgraph, les routines de lignes asm d'extgraph, éventuellement GX_rowread de GraphX les performance sont plus qu'au rendez vous.
Par contre pour les sprites n'ai pas fait de bench.




www.wikio.fr/user1921&info=comments