Salut,
Bon je poste ici parceque je vien juste de détecter un probleme sur mon petit moteur 3D et celle ci m'embète bien et j'espère qu'elle ne m'obligera pas à tout reprendre .....
Je vais vous donner quelques détails qui paraitrons peut-etre supperflus mais je pense quand même qu'il les faut pour pouvoir cerner le probleme.
J'ai découver le monde de la 3D l'an dernier pour "m'amuser" et suivant des etude d'info à la FAC les machines fonctionnent là bas sous Linux c'est donc tout naturellement que je me suis tourné vers notre amis OpenGL dont j'ai appris l'utilisation rudimentaire sur le tres bon site : http://www.linuxgraphic.org/
J'utilisais alors la combinaison avec la librairie de fenètrage GLUT san trop me poser de quesions sur celle-ci et puis l'été venant je me suis décidé à me lancer dans la création d'un petit moteur 3D purement OpenGl (donc non multi api mais ce n'est pas le débat j'étais trop peu expérimenté pour imaginer cela ) Et arrivé à la rentrée il tournait je trouvais assez correctement
J'ai donc décidé de le proposer pour participer au projet de semestre du groupe, il a donc fallu se débarasser de GLUT puisque le systeme de fenètrage utilisé est QT je me suis donc di que j'allais banir de mon moteur toutes commandes propres à un quelconque GUI de fenètrage et de n'utiliser que des fonctions opengl "native" si j'ose dire ....
Le moteur est donc maintenant tout-a-fait fonctionnel et toutrne tres bien sur le projet mais il se trouve que hier j'ai voulu le réintégrer à un fenètrage GLUT et j'ai un souci un peu bizard ......
Mon moteur se présente sous la forme d'une dll et comporte évidemment plusieurs classes :p utilisant les extension VBO j'ai créé les variables externes suivantes :
Dans une des classes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // VBO Extension Function Pointers PFNGLGENBUFFERSARBPROC DLLIMPORT glGenBuffersARB = NULL; // VBO Name Generation Procedure PFNGLBINDBUFFERARBPROC DLLIMPORT glBindBufferARB = NULL; // VBO Bind Procedure PFNGLBUFFERDATAARBPROC DLLIMPORT glBufferDataARB = NULL; // VBO Data Loading Procedure PFNGLDELETEBUFFERSARBPROC DLLIMPORT glDeleteBuffersARB = NULL; // VBO Deletion Procedure
Dans toutes les autres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // VBO Extension Function Pointers extern PFNGLGENBUFFERSARBPROC glGenBuffersARB; // VBO Name Generation Procedure extern PFNGLBINDBUFFERARBPROC glBindBufferARB; // VBO Bind Procedure extern PFNGLBUFFERDATAARBPROC glBufferDataARB; // VBO Data Loading Procedure extern PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB; // VBO Deletion Procedure
et enfin une initialisation du type
au premier appel qui va concerner une de ces fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wglGetProcAddress("glGenBuffersARB"); glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wglGetProcAddress("glBindBufferARB"); glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wglGetProcAddress("glBufferDataARB"); glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) wglGetProcAddress("glDeleteBuffersARB");
et bizarement lors de l'utilisation avec glut je me suis retrouvé avec un segfault du au fait que l'un de ces pointeur de fonction était NULL j'ai donc cru qu'il n'étais pas initialisé et qu'il sufissait de le faire ....
J'ai donc créé une methode initPointersARB qui execute le code ci dessus et je l'apelle si un des pointeur est null
La phase de création passe donc correctement et mon objet se crée et s'affiche.
Mais lors de la fermeture, le destructeur bug à nouveau mais pas parceque le pointeur de fonction est null mais parcequ'aparemment les numeros de buffers sont incorrects ....... bizard puisque l'objet a été affiché pendant toute la durée d'execution ^o)
Voila donc si vous avez une idée d'ou peut venir ce souci ....j'ai pensé qu'il pouvais y avoir un lien avec ke contexte opengl .....je ne sais pas
J'attends vos suggestions avec impatiences !!!! .. et je continue à faire tourner mon moteur avec QT en attendant :p
Merci d'avance
@+
Seb
Partager