Salut les développeurs,
J'ai créé un programme de modélisation, animation, rendu 3d appelé Gloss3D. Au début, j'utilisais OpenMotif pour la partie interface graphique. Mais j'ai aussi écrit un front-end basé sur GTK+3 :
Frontend Motif :
Mais j'ai un problème avec le widget OpenGL. Sachant que gtkglarea n'existe pas pour GTK3, j'ai écrit mon propre widget en utilisant les fonctions x11 offertes par gdk. Le widget est dans SOURCE_ROOT/g3dui/gtk3/g3duiview.c. Quand on tourne autour d'un object low-poly, l'affichage est fluide, mais quand je crée un objet avec beaucoup de polygones, c'est non seulement saccadé (ça, c'est normal), mais en plus les saccades sont irrégulières (le framerate est irrégulier). Je n'ai pas ce probleme avec la version Motif/X11. Les saccades se produisent a intervalles réguliers.
Vous pouvez télécharger le code source ici : http://velotrip.free.fr/gloss3d-beta-0.2.3.tar.gz[/url]
compiler avec :
./configure --prefix=/usr --with-gtk3
make
ensuite executer ./gloss3d. Pas besoin de faire "make install", lancez le depuis le répertoire local.
Ensuite copier le code source dans un autre répertoire pour la version Motif, puis faites :
./configure --prefix=/usr --with-motif
make
./gloss3d
Créez n'importe quelle primitive, genre une sphère, convertissez la en mesh en utilisant le bouton et utilisez le panneau a droite pour subdiviser la sphère. Tournez autour de la sphère en utilisant le bouton de rotation . Sur mon ordi plutôt vieux, l'affichage saccade vers la subdivision niveau 3 ou 4.
Pour la version Motif, dans SOURCE_ROOT/g3dui/motif/g3duiview.c, ligne 289, pour forcer le re-dessin OpenGL, je fais juste :
et ça marche sans souci. Les saccades sont régulières lorsque les objets sont "lourds".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 XClearArea ( XtDisplay ( ogl ), XtWindow ( ogl ), 0, 0, 0, 0, True );
Pour la version GTK3, le code qui pose problème est dans SOURCE_ROOT/g3dui/gtk3/g3duiview.c, ligne 747 a 750 dans l’évènement GDK_MOTION_NOTIFY :
Si je n'utilise pas la boucle while, les saccades sont encore plus irrégulières. Est-ce que quelqu'un aurait une solution pour que le comportement soit le même que dans la version Motif/X11 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 gtk_view_redraw_area ( widget ); /* <---- redessiner le GL Drawing Area */ while (gtk_events_pending ()) gtk_main_iteration ( ); /* <---- attendre la fin du dessin ***/
Merci de votre aide.
Gary.
Partager