Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Gouwi

Pages: [1]
1
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 !  8)

En vous souhaitant une bonne fin d'aprés midi,

Cordialement,

2
Fenêtrage / Re : Partage de ressources entre contextes OpenGL
« le: Mai 26, 2013, 12:19:45 am »
Okay nice ! J'ai testé et le partage de textures fonctionne niquel.

Parti d'une mauvaise approche ! (Partage de FrameBuffer)

Merci pour la réponse !  ;)

Cordialement,

Gouwi

3
Fenêtrage / [Résolu] Partage de ressources entre contextes OpenGL
« le: Mai 25, 2013, 10:04:27 pm »
Bonjour tout le monde !

D'abord, comme cela fait très longtemps que je n'était pas venu sur ce site :

Félicitations à Laurent pour la sortie de la SFML 2.0 en stable et du rework du site ! Vraiment de l'excellent boulot.

Après mes examens de M1 passés avec succès, j'ai décidé de continuer un projet qui utilise en masse la technique de l'offscreen rendering en OpenGL.

Simplement, je crée un contexte avec la SFML :

sf::Context * OGLMainContext = new sf::Context();

Ensuite j'effectue le rendu dans un framebuffer object.

Je crée une fenêtre :

sf::RenderWindow * rw = new sf::RenderWindow(...bla...bla...bla...);

Et ensuite j'aimerais transférer le rendu du framebuffer vers la fenêtre.

J'ai cru comprendre que les ressources entre les contextes OpenGL de la SFML sont partagées, donc j'essaie via un glBlitFrameBuffer(...) de transférer le contenu mais cela ne marche pas !? Pas de vrai partage ?

Donc pour essayer, a partir de la texture du FrameBuffer, je crée un tableau classique C++ que je rempli à chaque frame puis que j'affiche lors du dessin dans la fenetre. Cette technique fonctionne, mais possède des perfs pourries. (dix fois plus lent selon mes estimations)

Je souhaiterais donc savoir pourquoi le partage SFML ne fonctionne pas et si quelqu'un connait une autre technique pour faire ceci.

Cordialement,

Gouwi

Pages: [1]
anything