Tiny_gl.ldg quesako                   Belfort le 16/11/2003

Version actuelle de tiny_gl.ldg = 0.45


TinyGL est une librairie graphique 3D minimaliste de Patrice BELLARD
d‚velopp‚e dans le cadre d'un projet ‚tudiant de r‚alit‚ virtuelle
nomm‚ Vreng, TinyGL ‚tant le moteur de rendu 3D du projet. Les fonctions
de base sont identiques … la c‚lŠbre librairie OpenGL de SGI, dont le
clone le plus c‚lŠbre est Mesa (d‚ja port‚ par mes soins).
Contrairement … Mesa, TinyGL ne se veut pas compatible OpenGL, les 
fonctions accessibles sont assez restreintes et n'ont ‚t‚ impl‚ment‚es
que celles n‚cessaires au projet de r‚alit‚ virtuel. Pour ma part je 
tacherais de rajouter quelques fonctions pratiques et trŠs usit‚es comme
"glOrtho()"... qui peuvent facilement ˆtre impl‚ment‚es. Enfin TinyGL a 
surtout ‚t‚ optimis‚e pour le plaquage de textures.

La librairie LDG que vous avez entre les mains

Cette librairie a donc repris les sources originales de TinyGL 0.2 et
ont ‚t‚ adapt‚es au besoin de notre monde et dans le but de le rendre
dans la mesure du possible la plus compatible avec la librairie Mesa_gl.ldg
pr‚cit‚e et avec les fonctions d'affichage TrueColor de screen.ldg.
Pour se faire les fonctions GLX li‚es … X1Windows ont ‚t‚ remplac‚es pour
cr‚er un contexte compatible avec celui cr‚e dans Mesa_gl.ldg. Contrairement
… celui ci un seul mode graphique a ‚t‚ retenu: le mode 24bits RGB au format
VDI. Le rendu de base de TinyGL s'effectuant en 16bits et la transformation
de 16 vers 24bits ‚tant trŠs lente, le driver  … ‚t‚ adapt‚ afin de directement
r‚aliser le dessin dans le buffer 24bits. Une forte optimisation du code a ‚t‚
n‚cessaire afin de ne pas ˆtre p‚nalis‚ et obtenir une vitesse identique
ou presque (voir plus rapide!) par rapport au rendu 16bits d'origine, c'est
chose fait pour le rendu de gouraud (smooth) et le rendu flat. Le rendu se
r‚vŠle globalement nettement plus rapide que celui de Mesa_gl.ldg si l'on 
n'utilise pas l'acc‚l‚ration GL_CULLFACE qui permet de ne pas dessiner le
dos des objets si ceux la sont cach‚s par d'autres. Cette accel‚ration 
n'existe pas dans TinyGL.

version originale : 0.10
Ce qui ne va pas encore dans cette version

Le rendu des textures n'est actuellement pas valide car la transformation
du rendu 24 bits n'est pas faite ou incomplete, donc pas la peine d'essayer
de lui faire faire des textures! seul le rendu Flat ou Gouraud fonctionne.
La fonction glDeleteLists() est accesible dans les fonctions mais ne fait
absolument rien! je l'ai int‚gr‚e uniquement pour test de remplacement de 
mesa_gl.ldg par Tiny_gl.ldg dans Eureka 2.12 de Francois Le Coat avec succes.
Tiny_gl peut donc dans une certaine mesure remplacer Mesa_gl pour des rendus
simples.

WARNING: La largeur de l'image doit ˆtre un multiple de 4!!!!! sinon 
oups!

Save_TGA() ne fonctionne pas, elle sera retir‚e dans une prochaine 
version, elle fait double emploi avec la meme fonction de screen.ldg

version : 0.11 (1 mars 2000)
Recompilation de la version pr‚c‚dente avec nouvelle librairie LDG
pour corriger un bug de gestion m‚moire.
Save_TGA() a ‚t‚ ‚limin‚e des fonctions de Tiny (vous pouvez utiliser celle
de screen qui fonctionne parfaitement)
Les textures ne fonctionnent toujours pas normalement

version : 0.20 (3 avril 2000)
Correction du rendu filaire
Correction du rendu des textures

version : 0.30 (4 avril 2000)
Nouvelle correction pour les textures
Gestionnaire de m‚moire (grabage collecting) int‚gr‚ pour assurer l'‚ffacement 
des blocs … la fin de la session 

version : 0.31 (9 avril 2000)
Acc‚l‚ration l‚gŠre de la librairie (environ 5 … 10%)

version : 0.32 (15 avril 2000)
Correction de la fonction de d‚sallocation qui ne d‚sallouait rien!
erreur incroyable, faut que je dorme!

version : 0.33 (24 avril 2000)
Encore des problŠmes de d‚sallocations m‚moire importants, sur les
essais effectues plus riena signaler ouf, ca fait pas trŠs s‚rieux tout cela.

version : 0.34 (25 avril 2000)
Une allocation inutile enlev‚e, r‚duction du fractionnement m‚moire et du nombre
de blocs allou‚s.
swapbuffer() devrait fonctionner (attention vous devez allouer vous mˆme le bloc
3 octets par pixel)

version : 0.35 (18 juin 2000)
Une routine d'exception est installable en cas d'erreur interne non 
pr‚visible

version : 0.36 (29 juin 2000)
Correction erreur GL_FRONT GL_BACK avec le placement des vertex sous
GL_TRIANGLE_STRIP. Dor‚navant avec cette version on peut utilise les
options li‚ees … GL_BACK et GL_FRONT elles peuvent ˆtre enfin diff‚rentes
de plus l'option GL_CULLFACE est maintenant utilisable.
Interpolation des couleurs sur les lignes pour le mode filaire.

version : 0.37
Interpolation des couleurs en mode filaire et am‚lioration d'environ
20% de la vitesse.
Toutes les erreurs internes de Tiny sont g‚r‚es par l'exception

version : 0.38
Contrairement … ce que j'ai pu ‚crire pour la version 0.37 toutes les
erreurs n'‚taient pas g‚r‚es par l'exception, c'est chose faite, de plus
2 nouveaux types d'erreurs apparaissent et une erreur m‚moire ne signifie
plus syst‚matiquement un arrˆt brutal du programme si l'erreur 13 est 
pr‚sent‚e. Tout le monde peut se tromper! moi le premier. Warning sur niveau
de m‚moire basse (< 32Ko)

version 0.41
Gain en mode filaire d'environ 10% !
Gain en utilisation intensive des couleurs et utilisation en liste 10-15% !
Gain sur 3D sans perspective environ 10% 

version 0.43
Gain global en vitesse de 10%

Int‚rˆt de Tiny_gl:

Tiny_gl est tout petit et fait environ 140Ko (compil‚ avec GCC qui prend pour
n'importe quelle application environ 40Ko) et compar‚ … Mesa_gl.ldg qui est 
proche de 800Ko (les 2 en version 68000) on comprend la diff‚rence. Mais
bien plus fort  en m‚moire prise en utilisation le gain peut atteindre de 
l'ordre de 5Mo!!!!
Enfin TinyGL est petit, le source est bien plus simple … suivre et plus ais‚ …
optimiser (Est ce possible avec Mesa! je m'y suis casse le nez), si des fous
d'assembleur veulent s'y frotter, je leurs laisserais bien volontier les 
sources.

Fonctions ajout‚es … TinyGL:
	gluLookAt()
	glOrtho()

version 0.44

Corrig‚ un problŠme de signe de rotation dans un cas complexe. Si l'on
ne tournait que sur un seul axe, le sens de rotation etait correct. 
Dans un cas plus complexe, le signe ‚tait invers‚. Fran‡ois LE COAT
a trouv‚ le bug qui posait un problŠme pour son logiciel Eurˆka 2.12 ...

version 0.45

Version plus compacte et plus rapide, car compil‚e avec GCC 3.3, et
b‚n‚ficiant d'une nouvelle librairie math‚matique (CEPHES).

Olivier LANDEMARRE

