Intégration de SDL dans GTK +

J’ai une application qui utilise GTK + pour afficher une interface graphique agréable, mais j’utilise SDL pour afficher un petit tampon de trame RVB dans GTK +

J’ai utilisé le code suivant pour obtenir SDL dans GTK +:

char SDL_windowhack[32]; sprintf(SDL_windowhack, "SDL_WINDOWID=%ld", GDK_WINDOW_XWINDOW(deviceWindow->window)); putenv(SDL_windowhack); 

Malheureusement, j’utilise aussi SDL pour les événements clavier et souris. Le thread principal qui utilise SDL pour mettre à jour l’image génère le thread suivant:

 void *SDLEvent(void *arg) { SDL_Event event; while (1) { fprintf(stderr, "Test\n"); SDL_WaitEvent(&event); switch (event.type) { /* ... */ } } } 

Je vois que l’instruction print est exécutée deux fois, puis aucune. Dès que je termine le thread que SDL utilise pour mettre à jour l’écran (affichage), la boucle dans SDLEvent s’exécute à nouveau très rapidement.

Ce code fonctionnait bien avant que j’intègre SDL dans GTK + et je pense donc que GTK + bloque peut-être SDL d’une certaine manière?

Est-ce que quelqu’un a des suggestions s’il vous plaît?

Merci beaucoup!

Bien que je n’ai pas utilisé SDL, mais lorsque vous recherchez des événements, il apparaît que vous exécutez deux boucles d’événements. Gtk exécute sa propre boucle d’événements qui gère les événements tels que ceux de la souris et du clavier. Je pense que vous devez trouver un moyen d’intégrer les deux. Certaines recherches sur Google ont abouti au lien suivant où, dans la section “Problème de double boucle d’événement”, votre problème a été traité (je pense). Essayez d’append la fonction SDLEvent tant que fonction d’utilisateur en utilisant g_idle_add comme suggéré dans le lien et voyez si cela fonctionne.
J’espère que cela t’aides!