Ma vie rêvée

Aller au contenu | Aller au menu | Aller à la recherche

Comment marche X11/xorg et toute la clique ? 3° partie, le rendu 3D indirect

Plan général

  1. Les bases, le rendu 2D
  2. Le rendu 3D direct
  3. Le rendu 3D indirect
  4. Composite et XGL
  5. AIGLX
  6. Suite et fin (ou comment ne plus avoir d'idée pour le titre)

Préambule

Cet article est basé sur ce que je comprend du fonctionnement de X11. Il est loin d'être parfait et comporte peut-être des erreurs. si c'est le cas, j'apprécierais qu'on me les signale pour pouvoir améliorer le tout.

Résumé des épisodes précédents

Dans les articles précédents, nous avons parlé du rendu 2D et d'une des méthode de rendu 3D, le rendu direct qui nécessite un accès direct à la carte graphique. Aujourd'hui nous allons parler de l'autre méthode utilisée pour le rendu 3D, le rendu indirect.

Le rendu 3D indirect

Le schéma qui va bien :

Rendu 3D/OpenGL indirect

Comme on peut le voir, le rendu 3D indirect est un peu différent. Il fait intervenir une extension du protocole X11 appelée GLX, c'est elle qui va permettre au serveur X de gérer les commandes openGL.

Reprenons donc le cheminement. Une application 3D programmée en openGL va donc s'adresser à la libGL, celle-ci pour une raison ou un autre ne peut pas ouvrir un accès direct à la carte et elle va alors s'adresser à l'extension GLX au niveau du client X. Les commandes openGL vont alors transiter comme les commandes classiques 2D entre le client et le serveur X. Enfin, le serveur X va réaliser l'opération de rendu et envoyer les infos à la carte graphique pour qu'elle affiche ce qu'il faut à l'écran.

On voit donc ici que le rendu final est effectué au niveau du serveur X et pas directement par la carte graphique, d'où le nom de rendu indirect.
Ceci va avoir quelques avantages : on retrouve la transparence réseau, les commandes passant par le chemin classique de X. L'autre avantage, c'est qu'on ne dépend que de la libGL (qui est intriquée avec GLX) pour interpréter les commandes openGL et non d'une implémentation matérielle d'openGL dans la carte graphique.
A l'opposée, le rendu indirect a un énorme défaut, c'est qu'avec les serveurs X inférieurs à Xorg 7.1, le rendu est intégralement effectué au niveau du serveur par le processeur central de la machine. Et le CPU, il aime pas du tout ça parce qu'il n'est pas fait pour. Résultat, c'est effroyablement lent (facilement d'un facteur 20 par rapport au rendu direct).

Bibliographie

  • Mesa 3D, le projet qui fournit la bibliothèque libGL
  • GLX (page de wikipedia)

Commentaires

1. Le samedi 9 décembre 2006, 21:01 par gipi

Simplement pour vous féliciter de se "dégrossicement" sur X11.
C'est claire et très pédagogique (digne d'un "c'est pas sorcier").

Merci

2. Le mardi 12 décembre 2006, 12:35 par jackyvuillemin

Bonjour,
j'éprouvais le besoin de faire des dessins sur X11 et compagnie, voila que c'est déjà fait et bien fait ... Merci beaucoup pour ce travail .
Je travaille avec Gentoo, et teste en ce moment la duplication de disque pour fabriquer les machines (hards différents) , sans recompiler l'ensemble , le seul point qui résiste un peu est xorg ( ici 7.1 modulaire) avec le DRI en particulier sur les anciennes cartes comme ATI mach64 ou Savage ... et du coup je percois bien la pertinence de ces pages.

Merci aussi pour le tuyau "htop" . Avec gentoo , je fais "emerge htop" et 10 secondes plus tard j'ai l'écran sous les yeux .
(C'était la page de publicité Gentoo !)

Difficile de "rêver " mieux !