Auf Thema antworten

Eine konkrete Aussage zur Geschwindigkeit kann ich im voraus auch nicht machen. Nur grob: Swing wird prinzipbedingt nicht schneller sein können als OpenGL, da es ja auf nichts anderem als OpenGL aufbauen kann (DirectX vielleicht, je nach OS, aber DirectX und OpenGL dürften sich bei solchen Sachen nicht viel nehmen).


Bis zu einem gewissen Grad ist diese Frage eigentlich nur am Rande interessant, denn ich behaupte mal ganz frech, dass man praktisch nichts "sinnvoll" darstellen kann, was mit Swing so langsam wäre, dass man mit OpenGL noch nennenswert was rausholen könnte. Was soll das sein? Ein Scatterplot mit mehr als 10000 Punkten hat etwa den selben visuellen Informationsgehalt wie eine Schüssel mit Früchte-Müsli: Bunt, aber unübersichtlich :D


Aber wenn es um Zoomen und ggf. interaktives rum-navigieren und vielleicht auch Animationen geht, könnte das schon wieder etwas anders aussehen. Deswegen würde mich so ein Vergleich trotzdem auch mal interessieren. Das "schwierige" wäre, den Vergleich wirklich objektiv zu machen. Man würde für Swing und OpenGL (ohne im Detail darüber nachgedacht zu haben) an verschiedenen Stellen sicher komplett unterschiedliche Ansätze verwenden - jeweils den, der für die entsprechende API "besser" geeignet ist. Das hängt stark damit zusammen, wie man zeichnet und seine Daten organisiert, und wie viel Funktionalität man Swing/OpenGL überlassen will... Um das Beispiel aufzugreifen: Um's Clipping muss man sich normalerweise nicht soo viele Gedanken machen, denn das meiste davon nimmt einem Swing/OpenGL schon ab - aber speziell bei einem Scatterplot mit 100000 Punkten, wo man auf einen Ausschnit mit 100 Punkten gezoomt hat, könnte es sich doch lohnen, sich was zu überlegen... ob KD-Tree oder Spatial Hashing (und OB sich solche Dinge WIRKLICH lohnen) müßte man genauer untersuchen...

 


Man kann zumindest ziemlich sicher sagen, dass es deutlich aufwändiger sein wird, das ganze mit JOGL oder LWJGL zu machen. Abgesehen davon, dass 2D-Pixel-Operationen bei den neuesten OpenGL-Versionen afaik ohnehin "deprecated" sind... (glWritePixels und was es da so gab... Aber da weiß Fancy sicher genaueres) schreibt sich in Swing sowas wie

[code=Java]

g.setPaint(someFancyColorfulRadialGradientPaint);

g.fillOval(x,y,w,h);

[/code]

schon SEHR locker hin, und das in OpenGL umzusetzen könnte tricky sein - und es könnte, egal wie man es macht, kaum für einen (im oben angedeuteten Sinne) objektiven Geschwindigkeitsvergleich herhalten...



Oben