Zum Inhalt springen

Funktionsweise von multiplatform Bibliotheken für grafische Darstellungen


Empfohlene Beiträge

Es gibt ja verschiedene Bibliotheken (wie z.B. QT) mit denen ich unter verschiedenen Betriebssystemen grafische Darstellungen erzeugen kann.

Mich würde jetzt interressieren ob diese Bibliotheken die jeweiligen APIs der Betriebsysteme ansprechen oder ihre Aufgaben irgendwie anders erledigen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es gibt auch gar keine andere Möglichkeit z.B. ein Fenster zu erzeugen ohne die API eines Betriebssystems anzusprechen. Man könnte sich eine Middleware erstellen, aber die würde dann auch wieder die API benötigen.

Das hab ich mir auch gedacht, aber ich war mir nicht ganz sicher.

Danke für eure Antworten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Es gibt auch gar keine andere Möglichkeit z.B. ein Fenster zu erzeugen ohne die API eines Betriebssystems anzusprechen. Man könnte sich eine Middleware erstellen, aber die würde dann auch wieder die API benötigen.

Doch, es gibt auch andere Möglichkeiten. Beispielsweise kann man direkt auf das Framebuffer Device zugreifen und die komplette Oberfläche/Bibliothek selbst programmieren. Der Aufwand ist allerdings ungleich höher als bei der Verwendung der bereits vorhandenen grafischen Schnittstellen. Es kann jedoch gute Gründe geben, auf vorhandene Schnittstellen zu verzichten (beispielsweise wenn bestimmte Features benötigt werden oder ein Maximum an Performance gefordert ist).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Framebuffer Device - das hört sich aber interessant an :) . Hast du Links zu diesem Thema nic? Ist das dann nicht ziemlich von der Hardware abhängig? Hast du schonmal sowas gemacht? Hab keine allgemeinen links gefunden, nur in Richtung Linux... Vielleicht hat ja jemand ne gute Seite parat

greetz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Im Endeffekt programmiert man ein komplettes Gui mit allen Ein- und Ausgabefunktionen selbst (wobei natürlich auch Mischformen denkbar sind).

Nic

Ich kann mir das irgendwie noch nicht so richtig vorstellen. Das wäre doch im Prinzip genauso wie wenn ich einfach nen weißen Rahmen auf den Bildschirm male und sage das ist jetzt mein Fenster.

Ich müsste mich drum kümmern das nichts übermalt bzw. alles neugezeichnet wird. Das bei allen Möglichen Situationen die Richtigen Nachrichten ans Bestriebssystem gesendet werden. Vor allem müsste ich irgendwie die Nachrichten vom Betriebssystem bekommen wenn etwas passiert was mein Programm betrifft. :eek:

Allerdings kann ich mir (unter Windows) keinen Weg vorstellen dies ohne verwendung der API zu bewerkstelligen :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Windows ist da ein schlechtes Beispiel, da grafische Oberfläche und Betriebssystem untrennbar miteinander verbunden sind (bzw. die Oberfläche ein fester Bestandteil des Betriebssystems ist). Bei fast allen anderen Systemen sind dies jedoch getrennte Dinge (Linux, Unix, Mac OS, usw). Dort läuft die grafische Benutzeroberfläche auf dem Betriebssystem und kann damit beliebig ausgetauscht werden. Im Unix-Bereich hat sich beispielsweise X11 durchgesetzt (es gibt jedoch auch noch andere Möglichkeiten, wie SunView (für ältere Sun-Systeme oder auch die VGA-Bibliotheken für Linux).

Ich müsste mich drum kümmern das nichts übermalt bzw. alles neugezeichnet wird. Das bei allen Möglichen Situationen die Richtigen Nachrichten ans Bestriebssystem gesendet werden. Vor allem müsste ich irgendwie die Nachrichten vom Betriebssystem bekommen wenn etwas passiert was mein Programm betrifft

Ja, ist korrekt. Die komplette Ansteuerung und die grafische Ausgabe muss neu programmiert werden. Im Extremfall landest Du dabei auf einer Ebene, in der Bits und Bytes in einem Speicherbereich ("memory mapped") ein- und ausgeschaltet werden. Das komplette Management (inklusive Backing Store und anderer Feinheiten) muss von Dir übernommen werden.

@Mephisto81:

Ich müsste mal nachschauen. Ich habe mal vor Jahren auf einer Sun mit einem cg2 Framebuffer gearbeitet und diesen direkt über einen Memory Mapped Bereich angesprochen. Vielleicht finde ich den Code noch irgendwo.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Framebuffer Device - das hört sich aber interessant an :) . Hast du Links zu diesem Thema nic? Ist das dann nicht ziemlich von der Hardware abhängig? Hast du schonmal sowas gemacht? Hab keine allgemeinen links gefunden, nur in Richtung Linux... Vielleicht hat ja jemand ne gute Seite parat

greetz

Moment, wenn du irgendwelche Grafiken erzeugen willst geht das auch in Windows nur über die API. Klar kannst du dir dein Fenster selber malen, aber an die ganzen Devices kommst du auch nur über die Win32 API ran.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Windows ist da ein schlechtes Beispiel, da grafische Oberfläche und Betriebssystem untrennbar miteinander verbunden sind (bzw. die Oberfläche ein fester Bestandteil des Betriebssystems ist). Bei fast allen anderen Systemen sind dies jedoch getrennte Dinge (Linux, Unix, Mac OS, usw). Dort läuft die grafische Benutzeroberfläche auf dem Betriebssystem und kann damit beliebig ausgetauscht werden. Im Unix-Bereich hat sich beispielsweise X11 durchgesetzt (es gibt jedoch auch noch andere Möglichkeiten, wie SunView (für ältere Sun-Systeme oder auch die VGA-Bibliotheken für Linux).

Ja, ist korrekt. Die komplette Ansteuerung und die grafische Ausgabe muss neu programmiert werden. Im Extremfall landest Du dabei auf einer Ebene, in der Bits und Bytes in einem Speicherbereich ("memory mapped") ein- und ausgeschaltet werden. Das komplette Management (inklusive Backing Store und anderer Feinheiten) muss von Dir übernommen werden.

@Mephisto81:

Ich müsste mal nachschauen. Ich habe mal vor Jahren auf einer Sun mit einem cg2 Framebuffer gearbeitet und diesen direkt über einen Memory Mapped Bereich angesprochen. Vielleicht finde ich den Code noch irgendwo.

Nic

Die ganze Geschichte wäre zwar schön, funktioniert mit Windows aber nicht. Softwaretechnisch bewegen sich Windows Anwendungen auf dem sogenannten Ring 3, einem Schutzbereich für Applikationen. Es ist nicht möglich aus diesem heraus fremde Speicherbereiche, also z.B. die der Grafikkarte zu manipulieren, dafür ist die API oder z.B. DirectX da. Mit DirectX kann man natürlich Speicherseiten in Segment-Offset Notation erstellen, aber intern läuft wieder alles über die API, es gibt bei NT,2000, XP & 2003 keinen Weg diese zu umgehen.

Die grafische Oberfläche von Windows ist übrigens sehr wohl vom Kernel getrennt, man kann sie nur im laufenden Betrieb nicht beenden. Aber wenn du z.B. in eine Konsole bootest hast du ja das System ohne Oberfläche, Dienste und sämtliche Features funktionieren trotzdem.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

es geht hier nicht ausschliesslich um Windows, sondern es wurde die Frage nach plattform _übergreifenden_ (!) grafische Bibliotheken und deren Implementierung gestellt.

Die grafische Oberfläche von Windows ist übrigens sehr wohl vom Kernel getrennt, man kann sie nur im laufenden Betrieb nicht beenden. Aber wenn du z.B. in eine Konsole bootest hast du ja das System ohne Oberfläche, Dienste und sämtliche Features funktionieren trotzdem.

Es mag ja sein dass man Windows neu booten muss, um ohne die grafisch Oberfläche "arbeiten" zu können.

Bei fast allen anderen Systen ist dies nicht der Fall, dort lassen sich grafischen Oberflächen problemlos im laufenden Betrieb austauschen (beispielsweise SunView vs. X11 oder vga-Bibliotheken für Linux).

Schau Dir mal die X11/XFree86 Implementierungen an und wie diese die Grafikhardware ansprechen. Wer ausreichend Zeit hat, kann die komplette grafische Funktionalität (inkl. Windowsmanagement usw.) komplett neu programmieren, ohne auch nur eine einzige grafische Basisbibliothek verwenden zu müssen.

Nic

PS:

Der Ring 3 ist übrigens ein Architekturmerkmal von IA32 (keine Windows eigene Erfindung, sondern bezieht sich auf die vier Prioritätsebenen der Prozessorarchitektur). Abgesehen davon würde das Ersetzen der gafischen Oberfläche unter Windows etwas mehr Arbeit bedeuten, als auf Ring 3 eine Anwendung zu schreiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast das nicht richtig verstanden. Die Frage war doch, ob man eine Plattformunabhänige Grafikbibliothek die auch unter Windows läuft, ohne verwendung der API erstellen kann. Die Antwort ist: Ne. Klar könnte man die Oberfläche wie bei den XWindows Systemen vom Rest trennen, aber wozu? Mich würde es nicht stören wenn es unter Linux nur KDE oder Gnome geben würde.

Klar könnte ich dann eine neue Oberfläche schreiben, aber dafür muss ich auch wieder das X-API nutzen.

Das mit dem Ring ist korrekt, allerdings gibt es auch auf der NT Kernel Architektur dieses Ebenen, die haben dann nichts mit IA-XY zu tun.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Die Frage war doch, ob man eine Plattformunabhänige Grafikbibliothek die auch unter Windows läuft, ohne verwendung der API erstellen kann.

Nein, da hast Du nicht gründlich genug gelesen. Lies Dir bitte mal den ersten Beitrag dieses Threads durch. Wo ist dort die Rede von Windows? Zitat:

"Es gibt ja verschiedene Bibliotheken (wie z.B. QT) mit denen ich unter verschiedenen Betriebssystemen grafische Darstellungen erzeugen kann.

Mich würde jetzt interressieren ob diese Bibliotheken die jeweiligen APIs der Betriebsysteme ansprechen oder ihre Aufgaben irgendwie anders erledigen."

Klar könnte ich dann eine neue Oberfläche schreiben, aber dafür muss ich auch wieder das X-API nutzen.

Nein. Warum? X11 selbst ist nur eine einheitliche Schnittstelle um Grafiken darzustellen, unter Linux/Unix wird dafür auf die Frambuffer Devices zugegriffen, bei Windows auf Windows-Funktionen usw.usf.

Du kannst QT (oder eine andere GUI-Bibliothek) aber genauso gut (mit viel Aufwand) auf der VGA-Lib oder einem eigenen Treiber der über ein Framebuffer-Device arbeitet implementieren. Wichtig ist nur, dass die Schnittstelle nach oben unverändert bleibt. Das ist auch der Grund, warum QT auf unterschiedlichen Plattformen vorliegt.

Das mit dem Ring ist korrekt, allerdings gibt es auch auf der NT Kernel Architektur dieses Ebenen, die haben dann nichts mit IA-XY zu tun.

Doch, die Windows NT Ringe beziehen sich auf die IA32-Prozessorarchitektur. Wenn Du dich für das Thema genauer interssierst gibt es bei Microsoft eine Kurzeinführung:

http://www.microsoft.com/technet/prodtechnol/ntwrkstn/evaluate/featfunc/winarch.mspx

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

@nic:

Ja das wäre echt interessant um wenigstens mal nen Überblick zu bekommen ;) . thx im vorraus.

greetz

So, ich habe mal ein bisschen gewühlt und tatsächlich den Code wieder aufgetrieben (auf einer Uralt Backup-CD). Getestet habe ich das ganze sicherheitshalber nochmals auf einer Ultra-2 unter Solaris 9 mit einem CG6 Framebuffer. Die Dateien sind auf meiner Web-Seite zu finden. Wenn Fragen sind, melde dich einfach:

http://www.nleymann.de/sources/framebuffer.c

http://www.nleymann.de/sources/framebuffer.h

http://www.nleymann.de/sources/mandel.h

http://www.nleymann.de/sources/fbmandel.c

http://www.nleymann.de/sources/asmmandel.s

http://www.nleymann.de/sources/initmandel.c

http://www.nleymann.de/sources/Makefile

Das Programm mapped den CG6 Framebuffer direkt in den Speicher und zeichnet eine Mandelbrot-Menge auf den Bildschirm. Das Bild wird dann im Sun Rasterfile Format auf die Platte geschrieben.

Generell ist die Programmierung der Framebuffer unter Solaris nicht besonders gut dokumentiert. Man muss sich die Informationen zusammensuchen. Die Headerfiles sind recht brauchbar (/usr/include/sys/cg*) und ein Blick in den Quellcode von XFree86 oder X11R6 hilft auch weiter (wenn ich mich recht entsinne, sind die interessanten Dateien irgendwo in xc/programs/Xserver/hw/sun zu finden).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...