Journal Freeglut 2.8.0 : vas-y pépé !

Posté par (page perso) . Licence CC by-sa
Tags : aucun
18
22
jan.
2012

Sommaire

Freeglut : origine et objectifs

Freeglut vient de GLUT

  • Freeglut est une réécriture de la bibliothèque GLUT.

  • GLUT (OpenGL Utility Toolkit) est une bibliothèque permettant au programmeur de créer facilement une fenêtre contenant un contexte OpenGL. Sont assurés grâce à un système de callbacks:

    • L'affichage.
    • Les entrées-sorties minimales (clavier, souris, joystick).
  • GLUT permet donc de s'affranchir des spécificités de l'OS pour se concentrer sur l'essentiel: OpenGL. L'API est très simple et va à l'essentiel.

    • On l'utilise généralement pour écrire de courts programmes de tests, ou dans un but d'apprentissage.
    • L'écriture de programmes plus conséquents est bien entendu possible. Cependant, le côté spartiate de GLUT fait qu'on lui préfère généralement des bibliothèques plus fournies et plus généralistes, telles que la SDL ou l'excellente ClanLib.

Limitations de GLUT

  • Mark Kilgard, l'auteur de GLUT, a distribué les sources jusqu'à la dernière version (3.7 , août 1998).
    • Malheureusement, la distribution des sources s'accompagnait de l'interdiction de diffuser les modifications apportées.

La réponse Freeglut

  • Freeglut est né en 1999 de la volonté de s'affranchir des limitations de redistribution, afin de continuer à faire vivre cette bibliothèque.

  • Quelques améliorations furent apportées au passage, mais le but premier est une compatibilité maximale avec GLUT et l'ajout de nouveautés n'est pas une priorité.

    • Aujourd'hui, toutes les distributions utilisent Freeglut en lieu et place de la GLUT, y compris pour les programmes binaires liés à la GLUT originale.
    • Un programme compilé avec GLUT peut s'exécuter avec la lib Freeglut, sur laquelle il se linke sans problèmes.
  • Les sorties des versions stables de Freeglut sont régulières, même si elles s'espacent parfois de quelques années.

    • La précédente version date de fin 2009. Il ne faut donc pas se décourager, les commits réguliers en font une bibliothèque bien vivante.
  • À ma connaissance, il s'agit de la dernière bibliothèque en vie qui réimplémente GLUT (OpenGLUT, née d'une scission avec Freeglut, est morte depuis 2005).

Différences fondamentales avec GLUT

  • Mode step: nous ne sommes plus prisonnier de la «MainLoop» de GLUT.

    • Dans GLUT, une fois les initialisations terminées et sa boucle principale lancée, le seul moyen de reprendre le controle était d'utiliser les callbacks mis à disposition par GLUT.
    • Très «machine à état» dans l'esprit OpenGL d'origine, mais pas forcément pratique.
    • Freeglut offre un mode step, qui permet d'avancer d'une itération dans la boucle d'évenements («glutMainLoopEvent»). Ceci permet d'écrire des programmes plus lisibles, avec une vraie «boucle principale», vos routines n'étant plus reléguées dans les callbacks de GLUT qui les exécutera selon son bon vouloir.
  • Game mode: c'est sorte de mode exclusif, très prisé par les jeux qui se moquent de cohabiter avec votre horloge ou le curseur souris de votre bureau.

    • Sur ma machine, ce mode fonctionne très bien en plein écran. J'ai déja eu des blocage en fenêtré, mais ce genre de mode est plutôt destiné au plein écran.
  • Le multisampling est supporté très simplement.

    • Il suffit de le demander à l'initialisation, puis d'activer l'état lorsque vous désirez rendre avec de l'antialiasing.
  • Support de la roulette souris. Et oui, cela semble évident maintenant, mais en 1998, GLUT n'avait pas ce support.

  • Les contextes OpenGL/ : glutInitContextVersion, glutInitContextFlags, et glutInitContextProfile.

    • Ces fonctions (non référencées dans la doc officielle) permettent de spécifier la version d'OpenGL à supporter.
    • On peut également spécifier un niveau de compatibilité.
  • Quelques disparitions, comme le support de certains périphériques peu usités (votre avis pourra varier).

    • Cf «spaceballs» et «tablets» dans la doc.
    • Freeglut intègre la définition de ces fonctions pour la compatibilité avec GLUT, mais ne fera rien si ces fonctions sont appellées.

Freeglut et les versions d'OpenGL

OpenGL 1.2 / 2

  • Pas de surprises particulières, je ne m'étends pas sur le sujet.

OpenGL 3 (et les suivants)

  • Comme vous le savez, OpenGL a beaucoup changé ces dernières années.

    • Son modèle de machine à états a volé en éclat, laissant la place à une vision très macro du développement, afin de coller au plus près à l'architecture des cartes récentes (pleins de shaders à faire turbiner en parallèle).
    • On peut regretter la disparition de ce qui faisait la force d'OpenGL, toujours est-il que vous ne pourrez que difficilement (ou pas du tout) accéder aux fonctionnalités récentes d'OpenGL avec l'ancienne API (parfois référencée ironiquement sous le terme d'«ancien testament» dans certaines docs).
  • Pour utiliser la nouvelle API de OpenGL, il vous faudra utiliser GLEW conjointement à Freeglut.

    • GLEW est une bibliothèque dédiée à la gestion des extensions d'OpenGL et permet notamment d'accéder aux shaders.

La doc est naze

  • Le plus gros problème de Freeglut est sa documentation très parcellaire.
    • Le répertoire «doc» n'a pas bougé depuis la version 2.0.0 de Freeglut (2003).
    • Quelques essais de réécriture méritoires, mais rien qui ne puisse servir de référence pour l'instant.

Quelques ressources pour l'édification des masses

  • Les ressources suivantes sont à la fois un cours d'OpenGL dans toute sa glorieuse modernité, mais également le moyen d'utiliser correctement Freeglut. Ces auteurs ont défriché pour vous le terrain, profitez-en.
  • Pour une introduction aux shaders et au monde moderne, voir lighthouse.
  • Pour une vision plus complète et progressive, voici un livre disponible gratuitement et très intéressant: Learning Modern 3D Graphics Programming (Jason L. McKesson)

Pendant que j'y suis…

  • Bien que cela ne soit pas une obligation pour utiliser Freeglut avec OpenGL 3 et suivants, vous aurez également besoin d'une bibliothèque pour vous simplifier les maths.
    • La lib GLM est tout à fait ce que vous cherchez

Nouveautés dans Freeglut 2.8.0

Essentiellement de la correction de bugs

  • Le mode plein-écran , ainsi que le game mode fonctionnent mieux. Promis juré.

    • Ce fut une grosse partie du volume des mails échangés sur la mailing liste.
  • Amis sous Solaris, MacOSX et BSD, vous n'êtes pas oublié: de nombreuses modifications pour s'assurer que tous les programmes tests fournis dans l'archive fonctionnent sur vos plateformes.

  • Ajout de makefiles pour VisualStudio 2010.

    • Avec toujours le support pour les versions antérieures.
  • Amélioration du support Open Watcom avec un vrai Makefile à la place de l'ancien support qui ne fonctionnait pas.

  • Ainsi que la phrase traditionnelle: de nombreux bugs sont corrigés. Pour voir si le bug agaçant qui vous pourrissait la vie est corrigé, je vous renvoie à la mailing liste.

Il y a cependant quelques nouveautés

  • Des callbacks pour le multitouch.

  • Support des buffer sRGB (apparus dans OpenGL 3) via les extensions GLX et WGL. Permet d'appliquer une correction gamma aux images.

  • Un exemple complet pour utiliser OpenGL 3 (avec un peu de code piqué dans GLEW, pour éviter une dépendance).

Où trouver Freeglut ?

Les sources

Disponibilité des binaires 2.8.0

  • Arch : vient de passer en «testing».
  • Fedora : un rpm est disponible.
  • Ubuntu : probablement dans stable depuis la première rc.
  • Gentoo : disponible en «unstable».
  • Slackware : il faudra compiler.
  • Windows : dispo pour MSVC et Mingw entre autres ici
  • MacOSX : disponible contre une empreinte digitale et un scan rétinien.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.