Précédent   Forum du club des développeurs et IT Pro > C et C++ > Bibliothèques > wxWidgets
wxWidgets Forums d'entraide pour la programmation wxWidgets en C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/03/2011, 11h08   #1
dragonjoker59
Membre Expert
 
Homme Sylvain DOREMUS
Développeur informatique
Inscription : juin 2005
Messages : 636
Détails du profil
Informations personnelles :
Nom : Homme Sylvain DOREMUS
Âge : 31
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 636
Points : 1 537
Points : 1 537
Envoyer un message via MSN à dragonjoker59
Par défaut Utilisation d'OpenGL sous Linux

Bonjour à vous !

J'ai un moteur 3D sous OpenGl qui gère lui-même son contexte de rendu OpenGl (donc je n'utilise pas et ne veux pas utiliser wxGlCanvas).
Sous Windows je lui passe le HWND de la fenêtre et la création du contexte se passe sans aucun problème - le HWND je le récupère sous wxWidgets grâce à wxWindow::GetHandle.
Maintenant je voudrais créer le contexte sous Linux, avec la même fenêtre wxWidgets.
Comment m'y prendre ?
__________________
Si vous ne trouvez plus rien, cherchez autre chose...

Chef de projet (et unique exécutant pour l'instant) pour Castor 3D
dragonjoker59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 11h44   #2
dragonjoker59
Membre Expert
 
Homme Sylvain DOREMUS
Développeur informatique
Inscription : juin 2005
Messages : 636
Détails du profil
Informations personnelles :
Nom : Homme Sylvain DOREMUS
Âge : 31
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 636
Points : 1 537
Points : 1 537
Envoyer un message via MSN à dragonjoker59
Bon, j'ai avancé, Le problème que je rencontrais jusqu'à maintenant était que le GtkWidget que je récupérais avec wxWindow::GetHandle a un membre 'window' qui était NULL.
C'est tout simplement dû au fait que je suis dans le constructeur de mon wxPanel au moment où j'essaie de créer mon contexte OpenGL.
Pour tester j'ai déplacé ma création de contexte dans l'évènement Paint, et là je n'ai plus ce problème.
Il me reste donc un problème à régler : à l'exécution j'ai une erreur me disant que mon display 0:0 n'est pas prêt. Je vais me pencher dessus ce soir et vous communiquerai l'avancement (bien que ça n'ait pas l'air d'intéresser grand monde )
__________________
Si vous ne trouvez plus rien, cherchez autre chose...

Chef de projet (et unique exécutant pour l'instant) pour Castor 3D
dragonjoker59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 08h15   #3
wxXav
Membre confirmé
 
Avatar de wxXav
 
Homme Xavier Perrissoud
Développeur amateur
Inscription : décembre 2008
Messages : 135
Détails du profil
Informations personnelles :
Nom : Homme Xavier Perrissoud
Localisation : France

Informations professionnelles :
Activité : Développeur amateur

Informations forums :
Inscription : décembre 2008
Messages : 135
Points : 226
Points : 226
Saut.

Citation:
Envoyé par dragonjoker59 Voir le message
Je vais me pencher dessus ce soir et vous communiquerai l'avancement (bien que ça n'ait pas l'air d'intéresser grand monde )
Ce n'est pas parce que l'on ne répond pas que ça ne nous intéresse pas.
Pour ma part, c'est juste que je n'avais pas la solution ni le temps de faire quelques tests pour voir si je trouve quelque chose.

Bonne chance dans tes recherches quand même.

@+
Xav'
wxXav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 03h33   #4
dragonjoker59
Membre Expert
 
Homme Sylvain DOREMUS
Développeur informatique
Inscription : juin 2005
Messages : 636
Détails du profil
Informations personnelles :
Nom : Homme Sylvain DOREMUS
Âge : 31
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 636
Points : 1 537
Points : 1 537
Envoyer un message via MSN à dragonjoker59
Bon, j'ai avancé (encore), j'ai maintenant une création de contexte OpenGl qui semble correcte, je dis 'semble' car malgré tout ça ne fonctionne pas, pire encore, ça me fait tourner en bourrique.
J'en suis arrivé à la fonction glxMakeCurrent et c'est là que ça coince. J'ai des erreurs assez violentes qui m'arrivent dans la figure et je ne comprends pas trop ce qu'il se passe. Je vous mets les erreurs :
Citation:
dragonjoker@joker:~/Dev/Castor/bin$ ./CastorViewer
Entered Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
GlContext :: SetCurrent - Coucou 1 - 0x8a07ab8
GlContext :: SetCurrent - Coucou 2 - 0x8a3ac98
GlContext :: SetCurrent - Coucou 3 - 0x8947ea8
CastorViewer: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
Erreur de segmentation
dragonjoker@joker:~/Dev/Castor/bin$ ./CastorViewer
Entered Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
GlContext :: SetCurrent - Coucou 1 - 0xa1f7eb8
GlContext :: SetCurrent - Coucou 2 - 0xa22a498
GlContext :: SetCurrent - Coucou 3 - 0xa137ea8
GlContext :: SetCurrent - Coucou 4 - 62914939
GlContext :: SetCurrent - Coucou 5
Exited Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
CastorViewer: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
dragonjoker@joker:~/Dev/Castor/bin$ ./CastorViewer
Entered Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
GlContext :: SetCurrent - Coucou 1 - 0x93cbab8
GlContext :: SetCurrent - Coucou 2 - 0x93fe498
GlContext :: SetCurrent - Coucou 3 - 0x930bea8
GlContext :: SetCurrent - Coucou 4 - 62914939
CastorViewer: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
dragonjoker@joker:~/Dev/Castor/bin$ ./CastorViewer
Entered Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
GlContext :: SetCurrent - Coucou 1 - 0x83c9ab8
GlContext :: SetCurrent - Coucou 2 - 0x83fcc98
GlContext :: SetCurrent - Coucou 3 - 0x8309ea8
^C
dragonjoker@joker:~/Dev/Castor/bin$ ./CastorViewer
Entered Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
GlContext :: SetCurrent - Coucou 1 - 0x90d6eb8
GlContext :: SetCurrent - Coucou 2 - 0x9109498
GlContext :: SetCurrent - Coucou 3 - 0x9016ea8
GlContext :: SetCurrent - Coucou 4 - 62914960
GlContext :: SetCurrent - Coucou 5
Exited Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
CastorViewer: ../../src/xcb_io.c:249: process_responses: Assertion `(((long) (dpy->last_request_read) - (long) (dpy->request)) <= 0)' failed.
Abandon
dragonjoker@joker:~/Dev/Castor/bin$ ./CastorViewer
Entered Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
GlContext :: SetCurrent - Coucou 1 - 0x8968ab8
GlContext :: SetCurrent - Coucou 2 - 0x899bc98
GlContext :: SetCurrent - Coucou 3 - 0x88a8ea8
The program 'CastorViewer' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadLength (poly request too large or internal Xlib length erro'.
(Details: serial 2040 error_code 16 request_code 8 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
dragonjoker@joker:~/Dev/Castor/bin$ ./CastorViewer
Entered Function : _startRenderGl2 in /home/dragonjoker/Dev/Castor/source/GlRenderSystem/GlWindowRenderer.cpp, line 73
GlContext :: SetCurrent - Coucou 1 - 0x9d98ab8
GlContext :: SetCurrent - Coucou 2 - 0x9dcbc98
GlContext :: SetCurrent - Coucou 3 - 0x9cd8ea8
The program 'CastorViewer' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadIDChoice (invalid resource ID chosen for this connection)'.
(Details: serial 2509 error_code 14 request_code 139 minor_code 5)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
Comme vous pouvez le voir, il n'y a pas une seule fois où l'erreur et le moment où elle arrive sont identiques, même si on reste globalement au même endroit. Il y a même des fois où je suis obligé de fermer mon appli avec un bon vieux Ctrl+C des campagnes...
Bref, je suis un peu perdu.
Je vous mets le code du SetCurrent :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
	GtkWidget * l_pWidget = static_cast<GtkWidget *>( m_pWindow->GetHandle());
	std::cout << "GlContext :: SetCurrent - Coucou 1 - " << l_pWidget << "\n";
	GdkWindow * l_pWindow = gtk_widget_get_window( l_pWidget);
	std::cout << "GlContext :: SetCurrent - Coucou 2 - " << l_pWindow << "\n";
	Display * l_pDisplay = gdk_x11_drawable_get_xdisplay( l_pWindow);
	std::cout << "GlContext :: SetCurrent - Coucou 3 - " << l_pDisplay << "\n";
	int l_iId = gdk_x11_drawable_get_xid ( l_pWindow);
	std::cout << "GlContext :: SetCurrent - Coucou 4 - " << l_iId << "\n";
 
	if (m_iGlXVersion >= 13)
	{
		CheckGlError( glXMakeContextCurrent( l_pDisplay, m_drawable, m_drawable, m_glXContext), CU_T( "GlGtkContext :: SetCurrent - glXMakeContextCurrent"));
	}
	else
	{
		CheckGlError( glXMakeCurrent( l_pDisplay, l_iId, m_glXContext), CU_T( "GlGtkContext :: SetCurrent - glMakeCurrent"));
	}
 
	std::cout << "GlContext :: SetCurrent - Coucou 5\n";
Une dernière information : je crée la fenêtre et le contexte de rendu dans le thread principal, et je fais le SetCurrent dans le thread de rendu (différent du thread principal). J'en suis venu à me demander si ça pouvait venir de là, en espérant que non.
__________________
Si vous ne trouvez plus rien, cherchez autre chose...

Chef de projet (et unique exécutant pour l'instant) pour Castor 3D
dragonjoker59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 08h57   #5
dragonjoker59
Membre Expert
 
Homme Sylvain DOREMUS
Développeur informatique
Inscription : juin 2005
Messages : 636
Détails du profil
Informations personnelles :
Nom : Homme Sylvain DOREMUS
Âge : 31
Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2005
Messages : 636
Points : 1 537
Points : 1 537
Envoyer un message via MSN à dragonjoker59
Bon, à 4h du mat' j'ai réussi.
Le premier problème venait bien du fait que je faisais le rendu dans un thread à part.
Ensuite il y a une ligne de mon code que j'ai viré, dans la liste des attributs que je définis pour récupérer le XVisualInfo : GL_ALPHA (ben oui, ma version de GTK ne supporte pas la transparence des fenêtres).
__________________
Si vous ne trouvez plus rien, cherchez autre chose...

Chef de projet (et unique exécutant pour l'instant) pour Castor 3D
dragonjoker59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h33.


 
 
 
 
Partenaires

Hébergement Web