J'utilise GLFW avec QT pour une application OpenGL.
J'ai une boucle de temps à l'intérieur de la fonction principale. P>
Pourquoi la boucle de Throue ne bloque pas l'interface graphique Qt? P> } p> p>
3 Réponses :
Vous ne démarrez même pas la boucle d'événement QT Application, car vous n'appelez pas l'A.EXEC () comme votre code est I Side de la boucle. Je ne suis pas expert OpenGL, mais je suppose que la fenêtre que vous voyez est celle rendue par OpenGL elle-même pas une toile GL dans la fenêtre de l'application Qt. p>
Il semble que GLFWPollevants code> agit de manière suffisamment similaire à
QApplication :: EXEC CODE> telle que (certains) événements sont correctement traités.
Ils appellent probablement tous les deux DispatchMessage code> ( voir ) qui permet ensuite de rappeler le rappel enregistré Pour une fenêtre gérer l'événement.
Mais il pourrait également s'agir d'une comptabilité supplémentaire qui pourrait faire la dépendance à cette erreur. p>
Vous n'utilisez pas du tout la pompe d'événement QApplication, vous êtes court-circuité sur Moodle \ GLFW \ Wavefront Bibliothèque Bibliothèque. P>
Support OpenGL de Qt via QopengLwidget CODE> fonctionne directement avec
Paintgl CODE> Méthode qui doit effectuer tous les rendu et qui s'appelle à l'intérieur de la boucle d'événement. Si vous n'utilisez pas cela, vous aurez une manière d'une manière ou d'une autre, vous allez combiner deux threads, qui est problématique que le pipeline OpenGL et la boucle principale QT sur certaines plates-formes ne sont généralement utilisables que dans le fil principal. P>
Oui, c'est le problème que je suis confronté à l'initiellement que tout le rendu OpenGL a été fait dans un autre fil, mais j'ai réalisé que GL_Deleetebuffer n'était pas en mesure de supprimer la VAO, VBO.
@Summit Attendez-vous que la bibliothèque wagonne ou une classe que vous avez appelée WaveFronTrender (par exemple parce que vous rendant objs)?
C'est une classe que j'ai créée.
@Summit peut-être que vous devriez peut-être utiliser directement l'utilisation directe d'Abadon GLFW et déplacer ce rendu () code> appel à Qopenglwidget's's's's's's's's's's's's> Paintgl code>. Sinon, je ne sais pas pourquoi vous avez besoin de qt.
Cette classe est dérivée de Qmainwidow
Ouais c'est une idée fantastique.
@Summit c'est trop mystérieux. Est-il enrçonné autour de Qmainwindow avec QopenglWidget à l'intérieur? Comment vous attendez-vous à exécuter une boucle d'événement si l'objet QaPlLication laissé à l'extérieur et .exeec () n'a jamais été appelé?
J'ai besoin de qt pour l'interface graphique car le concepteur concevrait des scènes (c'est une application de modélisation 3D)
Qu'est-ce qui vous fait conclure que cela ne bloque pas?
@Darklighter Je suis libre de cliquer sur le bouton de l'interface graphique et des boutons selon leur signal et ses emplacements.
J'aurais dû avoir une sorte de sensation de gel si les boutons où bloqués.
Qu'est-ce que
w.Render () code> faire?
Essayez d'ajouter
qpushbutton pb ("appuyez sur"); pb.show (); code> immédiatement avant i>
tandis que (! GLFWWINDOWSHDLOllose (fenêtre)) code>. Pouvez-vous interagir avec le bouton-poussoir?
@Darklighter w.Render a des appels de rendu opengl.
@ G.m Le code du bouton s'exécute une fois.
Je ne sais pas ce que vous voulez dire par
"le code de bouton exécute une fois" code>. Vous ne pouvez pas interagir avec le bouton tant que
A.Exec () code> est appelé - après la fin de la boucle GLFW. Notez que vous avez déjà donné de bons conseils sur la manière de procéder à cela dans Cette réponse à une question précédente.
@ G.m La réponse de DarkLighter met en lumière pourquoi le code s'exécute une fois.