Bonjour à tous !
Je bosse sur un moteur de rendu basé sur le raytracing. Ce moteur fait du rendu 3D offscreen et affiche le / les résultats sur différentes fenètres par la suite.
J'utilise la SFML et plusieurs contextes OpenGL : Un contexte principal, pour le rendu offscreen, réglé en 4.3 et ensuite, un pour chaque fenêtre SFML créée par la suite.
Dans l'idée, l'ensemble des rendus (lancé de rayon / composition d'interface 2D ...) sont effectués dans le contexte principal et sont stockés dans des textures (qui sont partagées par les différents contextes).
Ces textures sont ensuite affichées dans les fenêtres sur un simple quad.
Le premier Contexte est tout le temps activé (setActive), sauf lors de l'affichage dans les fenêtres où c'est le contexte de la fenêtre qui prend le relais.
Et donc, j'ai quelques problèmes, qui ne sont pas "très graves" mais qui traduisent une certaine incompréhension de ma part dans la façon dont fonctionnent les contextes OpenGL.
- Premièrement, dans le cas d'une utilisation normale : Le contexte principal + n fenêtres, l'application tourne correctement, mais, lors de la fermeture de l'application, j'obtiens une erreur de segmentation lors de la suppression du contexte principal. Si je ne crée pas de fenêtre, cette erreur n'existe pas.
- Ensuite, le premier contexte est en OpenGL 4.3 pour pouvoir utiliser les ComputeShaders ainsi que des buffers de grande capacité. Pour les contextes des fenêtres, je n'ai pas de contraintes donc, je les règlent en 4.3 aussi. Sauf que je me retrouve avec des glitchs graphiques assez violents : "Tracés horizontaux qui clignotent dans la zone de rendu et framerate assez bas". Si j'essaie d'autres versions, idem. SAUF si je descend jusqu'en 2.1 où là, bizarrement, pas de glitchs.
- Pour finir, pour le rendu 3D, je fait du lancé de rayon (via les ComputeShaders) et pour la composition 2D (Affichage de quads texturés) je fait du rendu OpenGL classique via un vertex shader et un fragment shader. Hors, ces shaders sont crées dans le contexte principal en GLSL 430, MAIS, j'arrive tout de même à les utiliser dans les contextes des fenêtres qui eux, ne sont pas en OpenGL 4.3.
Voila, si quelqu'un aurait quelques précisions à m'apporter je serais vraiment reconnaissant !
En vous souhaitant une bonne fin d'aprés midi,
Cordialement,