2008-11-08 6 views
1

J'utilise QGLFramebufferObject de QT pour le rendu hors écran.
Après avoir rendu à la mémoire tampon j'ai lu le résultat en utilisant glReadPixels()
Le problème est que la couleur de fond que je lis est parfois juste 0 (noir transparent) et il est parfois 0xFF000000 (noir opaque)
Ce semble être lié au moment où le tampon est initialisé. Si le tampon est un membre de la classe héritée de QGLWidget alors il est 0. S'il est initialisé ailleurs, c'est 0xFF000000.Transparence d'arrière-plan OpenGL?

Est-ce que quelqu'un a une idée de ce qui se passe ici? Quel est le bon résultat attendu de cette lecture?

Répondre

1

Configurez-vous la bonne couleur claire (glClearColor) et effacez-la (glClear)? Assurez-vous que votre masque d'écriture en couleur (glColorMask) est complètement activé (cela affecte également les effacements). Ensuite, vous pouvez vérifier si QT met en place un étrange transfert de copie de pixels (autre que le transfert par défaut, voir glPixelStore, glPixelTransfer et glPixelMap). Etes-vous sûr que vous obtenez (et lisez dans) un tampon RGBA dans les deux cas, pas seulement RGB? Enfin, il est très possible que l'extension de l'objet framebuffer soit boguée sur votre combinaison carte graphique/pilote, d'autant plus s'il n'y a pas de fenêtre visible primaire. Au moins vérifier les cartes des deux fournisseurs. Et bien sûr, vérifiez toujours glGetError après toutes les opérations potentiellement défaillantes. Après avoir relu votre question, obtenez-vous un autre rendu valide dans le cas non QGLWidget? Est-ce clair pour dire vert, retour vert? Parce qu'il se peut très bien que vous n'ayez pas initialisé un contexte OpenGL valide pour commencer dans ce cas. Les objets framebuffer, contrairement aux pbuffers, ont besoin d'un contexte externe.

0

Mystère résolu
Il semble que la couleur claire que je donne au GLWidget est 0 et la couleur claire par défaut est 0xff000000. Selon le moment où j'initialise l'objet framebuffer, il reçoit la couleur claire courante de GLWidget.