2009-12-31 6 views
1

J'écris du code qui est destiné à: 1. Rendu dans une texture OpenGL en utilisant un FBO. 2. Dessinez à partir de la texture FBO vers un GLXPixmap, qui est attaché à un Pixmap X. 3. Dessinez le X Pixmap dans une fenêtre à l'écran.Rendu de la texture OpenGL FBO à GLXPixmap

L'étape 3 fonctionne très bien et l'étape 2 fonctionne correctement si je remplace la texture FBO par un dessin OpenGL normal. Mais si je fais ce qui est au-dessus, au moins avec le code que j'ai, cela ne fonctionne pas. Si je donne un fond coloré au GLXPixmap et que je fais 1-3, la fenêtre à l'écran devient blanche, mais rien d'autre n'a été tracé. Donc j'espère que quelqu'un peut fournir des conseils ou me diriger vers un exemple de code simple. Le code que j'ai pour cela est assez compliqué, mais si nécessaire, je peux essayer d'écrire une version d'exemple simple à poster ici pour examen.

Répondre

1

Si vos deux dernières étapes fonctionnent, mais que vous n'utilisez pas l'entité FBO que vous créez au cours de la première étape, vous êtes probablement en train d'initialiser le FBO de manière incorrecte. Quelques éléments à vérifier:

  • est le FBO "framebuffer complete"? Vérifiez en utilisant glCheckFramebufferStatus(GL_FRAMEBUFFER_COMPLETE) après avoir attaché toutes vos textures et/ou rendus.
  • Avez-vous un moyen d'examiner le FBO après l'avoir rendu (par exemple en utilisant glGetTexImage) pour déterminer si le problème consiste à écrire au FBO ou à le lire?
  • Vous avez probablement déjà vérifié, mais il vaut la peine de demander: est-ce glGetError() retour des erreurs?

Si tout correctement, puis après une configuration de squelette et code de rendu ... bien moins alambiquée mieux, bien sûr =)

+0

Hélas, j'ai vérifié l'état de fbo, et il est complet. Et je vérifie glGetError en utilisant une macro qui signale s'il y a un problème, et aucune plainte. Mais je vais vérifier glGetTexImage(), et aussi essayer de mettre en place un échantillon simple - qui en soi peut me conduire à une solution. :-) –

+0

Une autre chose simple (ne pas essayer de vous insulter - j'ai fait cette erreur plusieurs fois!) Est de s'assurer que vous utilisez GL_TEXTURE_2D et GL_TEXTURE_RECTANGLE régulièrement –