kouellet a écritPeut-être qu'en interceptant les appels à l'API d'OpenGL il y aurait moyen de faire quelque chose. Là dessus, je peux aider, je suis pas nouveau côté programmation en C/C++ et OpenGL sous Linux.
Parfait, ça fait quelques jours que je me penche là dessus justement !
Le but est de faire un émulateur de Quad Buffer. En gros on intercepte les signaux OpenGL pour fournir une gestion du Quad Buffer. Et après on affiche en frame-packed, entrelacé ou autre ... J'ai récupéré du code qui marche et qui fait ça très bien. Il faudrait qu'on re-code tout en partant de rien mais en s'inspirant de ça. Comme ça on aura une maîtrise totale du sujet et on pourra ajouter quelques petits trucs manquants. Je pense qu'on peut faire quelque chose de très bien qui permettrait au développeur (comme moi pour Tux Stereo Viewer) d'utiliser du code standardisé sans problème (juste Quad Buffer au lieu de tout coder).
Le logiciel fonctionne assez simplement : attend l'appel de la fonction choisissant le Buffer. Donc GL_BACK_RIGHT ou GL_BACK_LEFT. On dessine tout dans le BACK_BUFFER jusqu'au choix du deuxième buffer. On sauvegarde le BACK_BUFFER actuel (pour le moment j'ai pas regardé comment ça fonctionnait). On efface le BACK_BUFFER pour pouvoir réécrire dedans les info destiné au nouveau buffer. A la fin on mix le tout dans le format choisit dans un fichier de configuration. Donc entrelacé, side-by-side (donc left/right ou top/bottome y compris le frame-packing) ou même (plus difficile je pense) en frame alternées (donc pour supporter les systèmes actifs).
D'après ce que j'ai compris ta configuration c'est du simple top/bottom mais il faut forcer la résolution avec le xorg.conf (donc résolution qui n’apparaît pas dans le EDID ?). En gros c'est presque du frame-packed sauf qu'il y a pas la séparation entre l'image du haut et celle du bas ...
En supportant ces 3 modes on supporte 99% des équipements 3D sur le marchés :
- Écran polarisé, comme les Zalman ou quelques TV LG (entrelacement horizontal),
- Écran auto-stéréoscopique comme sur 3DS (entrelacement vertical),
- TV 3D ou autre écran compatible HDMI 1.4 (frame-packing pour la plupart, voir du top/bottom ou left/right),
- Double projecteur (left/right en plein écran),
- Système de lunettes comme toi (top/bottom),
- Lunettes actives comme Nvidia 3D Vision (frame alternées).
Le plus simple étant l'entrelacé. Ensuite si on veut l'ajouter, on trouve le damier (TV polarisés d'avant 2009). Plus compliqué le side-by-side : affichage facile mais il faut passer l'écran dans la bonne résolution au moment ou la 3D est demandée (et pas avant !!!); et on presque obligé de se mettre en plein écran ! Et finalement, le plus compliqué les frames alternées : il faut changer la vue droite et la vue gauche au bon moment (vblank) et un driver doit tourner à côté pour que les lunettes soient activés au bon moment. Sauf si on gère les frames alternées comme du side-by-side avec un viewport dont on modifie la zone d'affichage à chaque vblank avec GenLock par exemple. Après changer la zone d'affichage à chaque vblank c'est spécifique à chaque carte graphique ou au moins à chaque série (GenLock gère que les Geforce 7xxx).
Je suis chaud pour me remettre à fond dans le projet 😃 Vivement les vacances, plus que 3 jours à tenir ^^'