Warum verwendet fast kein GUI-Framework OpenGL/DirectX?



  • Hallo zusammen,

    mir ist aufgefallen, dass man mit OpenGL eine VIEL höhere Performance erzielt, als, wenn man einfach mit etwas wie z.B. Swing malt.
    Warum verwendet dann fast kein GUI-Framework OpenGL oder DirectX?

    Edit: Von FLTK ist mir bekannt, dass es OpenGL benutzt, das zeigt schonmal, dass es grundsätzlich möglich ist.



  • Für Qt existiert ein OpenGL (ES) Backend so weit ich weiß und GTK+ nutzt doch mittlerweile Cairo zum zeichnen. Cairo unterstützt auch OpenGL.



  • Was heißt das - dafür existiert ein OpenGL backend?

    Ich habe selbst mit Qt schon openGL benutzt, mit dem QGLWidget, aber ich glaube nicht, dass normale widgets auf openGL zugreifen und ich weiß auch nicht, wie ich das so konfigurieren kann das sie es machen, ich vermute mal, dass das nicht gehen wird, falls doch, bin ich sehr interessiert!

    Edit:

    Und warum ist das denn so:
    "existiert ein Backend"
    "unterstützt auch"

    Warum wird es nicht standardmäßig eingestzt?



  • Deine Frage ist, wieso kein GUI-Framework OpenGL zum Zeichnen der Widgets verwendet?
    Falls dem so ist:

    Die meisten Benutzer möchten, dass das Look&Feel einer Anwendung zu dem des Betriebssystems passt. Das ist für GUI-Frameworks am einfachsten zu erreichen, wenn man die entsprechenden Funktionen des Betriebssystems verwendet anstatt alles mit OpenGL nachzubauen. Die Geschwindigkeit spielt dabei eine untergeordnete Rolle.



  • Ok dann gehe ich eben einen Schritt weiter:
    Warum benutzen die Betriebssysteme für ihre GUIs nicht OpenGL/DirectX?



  • Q schrieb:

    Warum benutzen die Betriebssysteme für ihre GUIs nicht OpenGL/DirectX?

    Ressourcen & historischer Hintergrund. Ein OpenGL-Handle ist "teurer" als ein GDI-Handle, in den meisten Fällen ist es Kanonen auf Spatzen, und daß fast jeder Office-Rechner auch eine DirectX-taugliche Graphikkarte besitzt, ist auch eher eine neue Entwicklung.

    Andererseits benutzen neuere UI-Frameworks durchaus auch Hardwareschnittstellen; z.B. WPF rendert, glaube ich, mit DirectX.


  • Mod

    Q schrieb:

    Ok dann gehe ich eben einen Schritt weiter:
    Warum benutzen die Betriebssysteme für ihre GUIs nicht OpenGL/DirectX?

    Tun sie das nicht? Schon mal versucht ein modernes Windows oder einen der Linux Windowmanager mit viel Eye-Candy auf einem Rechner ohne 3D-Beschleunigung laufen zu lassen? Die müssen dazu ja nicht den Umweg über ihre eigene API gehen.



  • Q schrieb:

    Ok dann gehe ich eben einen Schritt weiter:
    Warum benutzen die Betriebssysteme für ihre GUIs nicht OpenGL/DirectX?

    In der Regel aus historischen Gründen. Die gesamten UI-Bibliotheken auszutauschen, und dann noch eine Programmkompatibilität gewährleisten zu können ist nicht ohne.

    Wenn man mal C++ außen vor lässt fällt mir aber mindestens WPF als weitere Bibliothek ein, die auf DirectX aufbaut.



  • SeppJ schrieb:

    Q schrieb:

    Ok dann gehe ich eben einen Schritt weiter:
    Warum benutzen die Betriebssysteme für ihre GUIs nicht OpenGL/DirectX?

    Tun sie das nicht? Schon mal versucht ein modernes Windows oder einen der Linux Windowmanager mit viel Eye-Candy auf einem Rechner ohne 3D-Beschleunigung laufen zu lassen? Die müssen dazu ja nicht den Umweg über ihre eigene API gehen.

    Vielleicht tun sie es teilweise, aber diesen Eindruck hatte ich weniger.

    Ich habe früher einiges mit Swing und SWT versucht.

    SWT benutzt ja sehr viel native Sachen, Swing emuliert alles.

    Ich habe dann versucht damit Plots in Echtzeit zu machen und habe auch mal ein wenig was mit Spielgrafik (2D) versucht und es war im Vergleich zu OpenGL, das ich inzwischen für einiges verwende, wirklich miserabel.

    Ich hatte zwar vorher irgendwo gelesen, dass swing Hardwarebeschleunigung nutzt, aber nach dem was ich damit erlebt hab, kann ich das nicht glauben.

    Ich fände es gut, wenn neue Betriebssysteme Standardmäßig auf hardwarebeschleunigung setzen und evtl. noch ne Art Kompatibilitätsmodus haben, also nen Fallback, falls keine gut genuge Grafikkarte vorhanden ist, dann muss auf Softwarerendering zurückgegriffen werden.

    Dann müsste man nicht für jede halbwegs aufwendige Grafik direkt zu OpenGL/DirectX greifen, sondern kann ganz gewohnt die normale API weiterbenutzen und es ist trotzdem schnell.



  • Q schrieb:

    Ich habe früher einiges mit Swing und SWT versucht.

    SWT benutzt ja sehr viel native Sachen, Swing emuliert alles.

    Ich habe dann versucht damit Plots in Echtzeit zu machen und habe auch mal ein wenig was mit Spielgrafik (2D) versucht und es war im Vergleich zu OpenGL, das ich inzwischen für einiges verwende, wirklich miserabel.

    Ich hatte zwar vorher irgendwo gelesen, dass swing Hardwarebeschleunigung nutzt, aber nach dem was ich damit erlebt hab, kann ich das nicht glauben.

    Von Swing weiß ich nicht, aber für Java 2D gibt's, glaube ich, ein OpenGL-Backend.

    Q schrieb:

    gut genuge Grafikkarte

    Hoffentlich sieht das die Duden-Kommission nicht, sonst machen die das offiziell 😉



  • audacia schrieb:

    Von Swing weiß ich nicht, aber für Java 2D gibt's, glaube ich, ein OpenGL-Backend.

    Ja, es gibt eins.

    Es geht mir aber darum, warum diese Sachen nicht Standardmäßig genutzt werden.

    Soweit ich weiß, nutzt Swing keine nativen Widgets (bzw. nur so weit wie es unbedingt nötig ist, z.B. um das öffnen eines Fensters wird man nicht rumkommen).
    Dann wäre Swing doch perfekt geeignet um alles in OpenGL umzusetzen.
    Und für den Fall, dass OpenGL nicht verfügbar ist kann es ja einen Softwareersatz geben.
    Das würde Swing sicherlich attraktiver machen.



    1. Swing ist Java. Javas Philosophie ist anders.
    2. Fuer Linux gibt es Windowmangar mit viel Eye Candy. OpenGL wird benutzt.
    3. Hardwareanforderungen. Schon mal das OpenGL der Grafikkarte mit Mesa3D verglichen? Grauenhafte Performance.
    4. Warum sollte ueberhaupt OpenGL/DirectX fuer Windowmanager benutzt werden?


  • knivil schrieb:

    1. Warum sollte ueberhaupt OpenGL/DirectX fuer Windowmanager benutzt werden?

    Warum sollte man CPU-Cycles verschwenden wenn praktisch jeder einigermaßen aktuelle Computer mit entsprechender Hardware ausgerüstet ist? WPF machts vor 😉



  • Das warum ist für mich ziemlich klar.

    Wenn ich in Echtzeit was plotten will dann wird das mit Swing schwierig.
    Würde Swing OpenGL benutzen wärs kein Problem.
    So muss ich extra selbst OpenGL irgendwie einbinden oder mir sonst was überlegen.

    Warum schnell wenns auch langsam geht? 😃

    Edit:

    1. Hardwareanforderungen. Schon mal das OpenGL der Grafikkarte mit Mesa3D verglichen? Grauenhafte Performance.

    Kannst du das nochmal erklären plz? Habs nicht verstanden.


  • Mod

    Ist also deine eigentliche Frage, warum swing kein OpenGL benutzt?

    (Übrigens war das Gejaule ganz schön groß als Microsoft und Canonical (die hinter Ubuntu) beschlossen hatten, dass für die Standardoberfläche fortan eine 3D-Grafikkarte Pflicht ist. Gemacht haben es beide trotzdem :p )



  • Ne, es geht nicht nur um Swing, aber damit habe ich ein wenig Erfahrung und weiß, dass es nicht besonders performant ist.
    Swing war eher ein Beispiel.

    Und wenn 3D-Karten schon Pflicht sind, warum werden sie dann nicht auch für alles benutzt?



  • http://msdn.microsoft.com/en-us/library/ff729480(v=vs.85).aspx schrieb:

    Comparing Direct2D and GDI Hardware Acceleration

    ...

    Contrasting Direct2D and GDI acceleration in Windows 7

    Direct2D and GDI are both 2D immediate-mode rendering APIs and are hardware accelerated. However, there are a number of differences that remain in both APIs.

    ...

    Availability of Hardware Acceleration

    GDI is hardware accelerated on Windows XP, and accelerated on Windows 7 when the Desktop Window Manager is running and a WDDM 1.1 driver is in use. Direct2D is hardware accelerated on almost any WDDM driver and regardless of whether DWM is in use. On Vista, GDI will always render on the CPU.



  • dot schrieb:

    Warum sollte man CPU-Cycles verschwenden wenn praktisch jeder einigermaßen aktuelle Computer mit entsprechender Hardware ausgerüstet ist? WPF machts vor 😉

    Weil wir soviele davon haben. Die Verschwendung ist doch "in". Siehe C#, Java, Python, ...


Log in to reply