2011-06-01 1 views
2

Je cherche une méthode pour dessiner des figures semi-transparentes dans le framework draw2d. Actuellement, j'utilise setAlpha() de org.eclipse.draw2d.Graphics. Le problème est qu'il ralentit l'ensemble de l'interface utilisateur, si je dessine plus d'un demi-transparent.SWT draw2d alpha blending

Voici une autre question concernant la perfomance de celui-ci [1]. Il cible SWT sous Linux, je cible à la fois Linux et Windows. Le système Windows (Win7) dispose d'une carte graphique compatible 3D et d'un i7 q720. La machine Linux est encore mieux équipée et a aussi de la 3D, donc je pense que ce n'est pas un problème de performances de la plateforme.

Ma question est: Existe-t-il un moyen performant d'obtenir un mélange alpha dans draw2d?

J'ai essayé d'utiliser OpenGL respectivement LWJGL. Puisque draw2d et OpenGL ne peuvent pas être mélangés et je dois compter sur draw2d, je pensais que je pourrais faire quelque chose comme ça: draw2d -> OpenGL -> draw2d herecanvas est le Canvas où le dessin OpenGL arrive et c1 est le Canvas où je veux obtenir l'image OpenGL dessinée. Mais mon attempt pour copier les dessins OpenGL ne fonctionne pas, il me donne juste l'arrière-plan sous-jacent Canvas (canvas). En plus de cela, je ne suis pas sûr que cela améliorerait la « perormance » de toute façon ...

Merci,
atx

Répondre

0

Ce problème est connu mais non résolu. Sur la liste de diffusion de draw2d, il y a un fil de discussion concernant ce problème: mailing list

TL; DR: Une solution possible a été abandonnée en raison de problèmes de licence entre LWJGL et Eclipse.

0

Assurez-vous que toutes vos images src/dest sont de la même profondeur (par exemple. ARVB) Sinon, les conversions coûteuses se produisent lors de la copie (SRC-> dest)

GCS ne permettent pas l'accès à leurs tampons sous-jacents , Autant que je sache. MemoryImageSource est peut-être une solution.

Vous pouvez récupérer vos images de dessin OpenGL en utilisant quelque chose comme:

BufferedImage capture = new Robot().createScreenCapture(new Rectangle(canvas.getX(), canvas.getY(), canvas.getWidth(), canvas.getHeight())); 

Type de fiddly, mais très rapide. Je l'utilise pour enregistrer des jpeg de mes cadres d'animation en direct dans un dossier. VirtualDub crée alors un film à partir des images.

Avoir à jouer avec le taux de trame;)

Idéal pour la production de teasers youtube! You can see one here!

+0

Merci pour votre conseils! J'ai résolu mon problème en implémentant l'implémentation LwjglGraphics à moitié faite de org.eclipse.draw3d et en l'intégrant dans org.eclipse.draw2d. fonctionne comme un charme. – atx

Questions connexes