Guybrush Threepwood Geschrieben 30. April 2004 Teilen Geschrieben 30. April 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 30. April 2004 Teilen Geschrieben 30. April 2004 Hallo, in der Regel bauen diese Bibliotheken auf den APIs der entsprechende Betriebssysteme auf (also beispielsweise X11 für Linux/Unix). Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 30. April 2004 Teilen Geschrieben 30. April 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 30. April 2004 Autor Teilen Geschrieben 30. April 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 30. April 2004 Teilen Geschrieben 30. April 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 30. April 2004 Autor Teilen Geschrieben 30. April 2004 Dann müsste man die ganze Kommunikation mit dem BS doch auch komplett selber programmieren oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 1. Mai 2004 Teilen Geschrieben 1. Mai 2004 Hallo, Im Endeffekt programmiert man ein komplettes Gui mit allen Ein- und Ausgabefunktionen selbst (wobei natürlich auch Mischformen denkbar sind). Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 1. Mai 2004 Teilen Geschrieben 1. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 1. Mai 2004 Autor Teilen Geschrieben 1. Mai 2004 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: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 1. Mai 2004 Teilen Geschrieben 1. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 2. Mai 2004 Autor Teilen Geschrieben 2. Mai 2004 Ok ich glaub jetzt hab ichs so ungefäher. Danke für deine ausführlichen Erklärungen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 2. Mai 2004 Teilen Geschrieben 2. Mai 2004 @nic: Ja das wäre echt interessant um wenigstens mal nen Überblick zu bekommen . thx im vorraus. greetz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 7. Mai 2004 Teilen Geschrieben 7. Mai 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 7. Mai 2004 Teilen Geschrieben 7. Mai 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 7. Mai 2004 Teilen Geschrieben 7. Mai 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 7. Mai 2004 Teilen Geschrieben 7. Mai 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 7. Mai 2004 Teilen Geschrieben 7. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 9. Mai 2004 Teilen Geschrieben 9. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mephisto81 Geschrieben 9. Mai 2004 Teilen Geschrieben 9. Mai 2004 Super vielen Dank schonmal :marine greetz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.