2010-11-04 32 views
1

J'utilise un objet framebuffer séparé pour la sélection de couleur des objets 2d dans opengl. Je suis curieux de savoir s'il est possible de dessiner uniquement sur le framebuffer et lire la couleur en cas de besoin. Ce que je fais maintenant est dans la boucle de rendu principale. Je dessine la scène dans le framebuffer principal et restitue ensuite les objets sélectionnables au framebuffer "picking". Lorsque l'utilisateur clique sur la souris, il lie le framebuffer "picking" et lit le pixel et je sais quel objet est sélectionné. le problème avec ceci est que je n'ai besoin que du "frameing" tampon de sélection lorsqu'un utilisateur clique sur la souris, ce qui fait que chaque image est inefficace. J'ai essayé de rendre le framebuffer "picking" lorsque l'utilisateur clique sur la souris et ensuite lire directement mais tout ce que je reçois est blanc (la couleur de fond et non la couleur pour me dire quel objet il est). dessiner le framebuffer "picking" montre juste tout le blanc comme si rien ne lui était réellement rendu. Ai-je besoin d'arrêter de dessiner dans la boucle principale tout en rendant le framebuffer "picking"? ou est-ce qu'il manque quelque chose qui rendrait cela possible?est-il possible de rendre à l'objet framebuffer en dehors de la boucle de rendu principale

EDIT: J'ai essayé de ne pas dessiner dans la boucle principale pendant le rendu au framebuffer picking et cela n'a pas fonctionné non plus.

+0

Avez-vous 'glFlush()' entre votre dessin et votre lecture? – genpfault

+0

je fais. Je pense que la réponse «Non» pourrait être la bonne. – cuatro

+0

Faites-vous cela en même temps? – tibur

Répondre

0

Vous devez vérifier que votre contexte GL est le contexte actuel en utilisant wglMakeCurrent ou glXMakeCurrent. En outre, il doit être fait dans le même thread, car un seul thread peut avoir un contexte actuel.

+0

ive a essayé de s'assurer que le contexte était le bon avec le même résultat. – cuatro

0

"Non".

Mais vous pouvez plusieurs GPU (si vous l'avez). Here ou here vous pouvez trouver la spécification OpenGL; le pilote doit supporter l'extension * WGL_NV_gpu_affinity * ou * AMD_gpu_association *.

+0

Cela empêcherait les problèmes de performance lors du rendu sur * deux * contextes OpenGL en même temps sur des threads différents. Mais vous avez besoin d'un GPU professionnel pour accéder à ces extensions. – tibur