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
dveloppe dans le cadre d'un projet tudiant de ralit virtuelle
nomm Vreng, TinyGL tant le moteur de rendu 3D du projet. Les fonctions
de base sont identiques  la clbre librairie OpenGL de SGI, dont le
clone le plus clbre est Mesa (dja port par mes soins).
Contrairement  Mesa, TinyGL ne se veut pas compatible OpenGL, les 
fonctions accessibles sont assez restreintes et n'ont t implmentes
que celles ncessaires au projet de ralit virtuel. Pour ma part je 
tacherais de rajouter quelques fonctions pratiques et trs usites comme
"glOrtho()"... qui peuvent facilement tre implmentes. Enfin TinyGL a 
surtout t optimise 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 adaptes 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
prcite et avec les fonctions d'affichage TrueColor de screen.ldg.
Pour se faire les fonctions GLX lies  X1Windows ont t remplaces pour
crer un contexte compatible avec celui cre 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 trs lente, le driver   t adapt afin de directement
raliser le dessin dans le buffer 24bits. Une forte optimisation du code a t
ncessaire afin de ne pas tre pnalis 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
rvle globalement nettement plus rapide que celui de Mesa_gl.ldg si l'on 
n'utilise pas l'acclration GL_CULLFACE qui permet de ne pas dessiner le
dos des objets si ceux la sont cachs par d'autres. Cette accelration 
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 intgre 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 retire 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 prcdente avec nouvelle librairie LDG
pour corriger un bug de gestion mmoire.
Save_TGA() a t limine 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 mmoire (grabage collecting) intgr pour assurer l'ffacement 
des blocs  la fin de la session 

version : 0.31 (9 avril 2000)
Acclration lgre de la librairie (environ 5  10%)

version : 0.32 (15 avril 2000)
Correction de la fonction de dsallocation qui ne dsallouait rien!
erreur incroyable, faut que je dorme!

version : 0.33 (24 avril 2000)
Encore des problmes de dsallocations mmoire importants, sur les
essais effectues plus riena signaler ouf, ca fait pas trs srieux tout cela.

version : 0.34 (25 avril 2000)
Une allocation inutile enleve, rduction du fractionnement mmoire et du nombre
de blocs allous.
swapbuffer() devrait fonctionner (attention vous devez allouer vous mme le bloc
3 octets par pixel)

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

version : 0.36 (29 juin 2000)
Correction erreur GL_FRONT GL_BACK avec le placement des vertex sous
GL_TRIANGLE_STRIP. Dornavant avec cette version on peut utilise les
options liees  GL_BACK et GL_FRONT elles peuvent tre enfin diffrentes
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 amlioration d'environ
20% de la vitesse.
Toutes les erreurs internes de Tiny sont gres par l'exception

version : 0.38
Contrairement  ce que j'ai pu crire pour la version 0.37 toutes les
erreurs n'taient pas gres par l'exception, c'est chose faite, de plus
2 nouveaux types d'erreurs apparaissent et une erreur mmoire ne signifie
plus systmatiquement un arrt brutal du programme si l'erreur 13 est 
prsente. Tout le monde peut se tromper! moi le premier. Warning sur niveau
de mmoire 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%

Intrt 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 diffrence. Mais
bien plus fort  en mmoire 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 ajoutes  TinyGL:
	gluLookAt()
	glOrtho()

version 0.44

Corrig un problme 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. Franois LE COAT
a trouv le bug qui posait un problme pour son logiciel Eurka 2.12 ...

version 0.45

Version plus compacte et plus rapide, car compile avec GCC 3.3, et
bnficiant d'une nouvelle librairie mathmatique (CEPHES).

Olivier LANDEMARRE

