2009-01-21 7 views
4

Dans le cadre d'un projet plus vaste, j'essaie d'implémenter une fonction utilisant JOGL qui exportera les rendus 3D aux formats bitmap. Nous faisons cela en créant un GLJPanel et en dessinant la scène que nous voulons, puis en extrayant le bitmap. Tout fonctionne bien tant que le système a au moins une fenêtre visible sur l'écran - pas nécessairement la fenêtre contenant le panneau sur lequel nous dessinons. Mais si nous essayons de le faire sans faire de fenêtre visible, le GLJPanel ne dessine pas. En passant par la source JOGL, je trouve qu'elle ne dessine pas à moins d'avoir un pair valide - à moins que addNotify() n'ait été appelé. La documentation indique que addNotify() n'est appelé que lorsque le panneau fait partie d'une hiérarchie de fenêtre visible. Passer à un GLCanvas ne fait pas beaucoup de différence - le mode de défaillance est différent. WindowsOnscreenGLDrawable.realized n'est pas défini, ce qui signifie que lockSurface renvoie LOCK_SURFACE_NOT_READY, provoquant l'échec de makeCurrent().Dessiner hors écran avec JOGL

Toute aide serait la bienvenue sur la façon de créer une application Java qui peut créer et exporter des scènes 3D sans avoir à rendre sa fenêtre visible.

Répondre

5

Je ne sais pas si je devrais répondre à ma propre question, mais ici va de pair avec ce que j'ai trouvé semble fonctionner maintenant.

La clé est GLPbuffer, qui est un GLAutoDrawable hors écran et peut être créée sans une hiérarchie de composants visible.

This article a été utile pour le faire fonctionner. Je vais arrêter d'accepter cette réponse jusqu'à ce que j'ai confirmé que c'est entièrement fonctionnel.

Je devrais également dire que la réponse est venue de this forum, pas mon propre cerveau maigre.

0

Vous devriez regarder dans la méthode: glReadPixels() plus d'infos here. Fondamentalement, cela fonctionne plus ou moins comme ceci:

Init(); //doing some initializations in your JOGL app 

glDrawBuffer(GL_BACK); 

DrawGLScene(); //doing drawing here 

glReadBuffer(GL_BACK); 

//Copy the image to the array imageData 
glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_BYTE, imageData); 
+0

Merci pour l'aide, mais c'est la partie "DrawGLScene" du code qui ne fonctionnera pas. Cependant, j'ai l'air d'avoir réglé ça. – DJClayworth

+0

pouvez-vous partager votre solution? –

Questions connexes