Wie wird die Anbindung der Grafikkarte mit C oder C++?
Bibliotheken wie OpenGL Zugriff auf die Grafikkarte und kann zu Grafik-Programmen, wie funktioniert diese Bibliotheken den Zugriff auf die Grafikkarte, da Sie realisiert C. Nach dem, was ich gehört habe, C und C++ bieten keine Grafik-Funktionen in die Sprache und die Herstellung von Grafiken erforderlich Bibliotheken. Wie dann sind diese Bibliotheken, die in C geschrieben? Die gleiche Frage gilt für den sound auch?
Sind zusätzliche Funktionen für C/C++ - Sprachen, wie z.B. Grafik, sound, internet-Zugriff geschrieben, im niedrigeren level-Sprachen und C/C++ mit Bibliotheken?
Ich wäre dankbar für jede Zusammenfassung, die richtige, meine Konzepte, oder alle vorgeschlagenen Lesungen auf dem web oder Büchern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OpenGL ist nicht wirklich eine Bibliothek. Es ist eine Spezifikation. Die opengl32.dll oder libGL.so haben Sie auf Ihrem system sind nur sehr dünne Schichten, die die Kommunikation mit der GPU-Treiber.
Das Betriebssystem bietet Funktionen, um mit der hardware kommunizieren. Ein Treiber verwendet, diese Einrichtungen zu fahren (daher der name) die hardware. Zum Beispiel das schreiben einer Sequenz A, B, C, D kann einige bestimmte GPU-zeichne ein Dreieck in den framebuffer.
Erklärte ich diese Dinge schon in Auf Windows, wie funktioniert OpenGL unterscheiden sich von DirectX? und hier Wie funktioniert OpenGL arbeiten auf der untersten Ebene? (ich bin auch ein wörtliches Zitat hier):
Update
Beantworten, wie man Schnittstellen der hardware, die von einem C-Programm sagen, dass ein Betriebssystem-kernel und/oder Treiber, die in C geschrieben:
C-standard selbst behandelt-Adressen als etwas rein abstraktes. Können Sie werfen einen Zeiger auf uintptr_t, aber der numerische Wert, den Sie bekommen, ist nur erforderlich, um zu haften Zeiger-Arithmetik, wenn die Darsteller wieder auf den Zeiger. Ansonsten kann der Wert nicht auf Adressraum. Die einzig sichere Art und Weise zu implementieren, die den Zugriff auf die hardware zu C ist durch das schreiben der untersten Ebene Zeug in der Montage, nach dem ABI des verwendeten C-Implementierung und-system.
Das ist, wie alle richtigen OS tun es. Nie-Adressen Umwandlung in Zeiger in C! Das Betriebssystem implementiert hat, diese in assembler, abgestimmt auf den C compiler des Systems. Der code in der assembly exportiert Funktionen aufrufbar, die in C. stellt Der kernel diese Funktionen, dann den GPU-Treiber. Also die Kette ist:
Application Program → [OpenGL-API-Schicht → Lieferant OpenGL-Implementierung] → GPU-Treiber → OS-kernel → Hardware.
Wenn ich mich nicht Irre, haben Sie die Frage hinausläuft, wie macht man mit C auf hardware zugreifen. Die Antwort, in einem sehr Allgemeinen und hand wellenförmigen Mode, ist, dass Peripherie-hardware ist oft abgebildet in den Adressraum und auf die zugegriffen werden, als ob es normale Speicher mit dem VORBEHALT, dass es unerwartet ändern.
C macht einen guten job, der Zugriff auf den Speicher, so ist es völlig geeignet für das Lesen und schreiben direkt mit der hardware. Die
volatile
Stichwort ist dort explizit stoppen der compiler durch die Einnahme von short cuts und Kraft Abfrage der Adressen in Frage. Dies ist, da memory-mapped IO-Adressen kann sich unerwartet ändern und Verhalten sich nicht wie normale RAM.Auf ein einfaches system, dieses low-level-Speicher-Zugriff festlegen-Adressen werden abstrahiert, in eine leichter nutzbare Bibliothek. Bei modernen Betriebssystemen, kernel müssen vermitteln Zugang zu gemeinsamen Ressourcen wie eine Grafikkarte. Dies bedeutet, dass der kernel mit der Umsetzung des memory-mapped-IO, aber auch eine Reihe von system-calls (oft mit Swiss Army Knife Konstrukte wie
ioctl
), so dass ein Benutzer Zugriff auf die Peripherie. Diese wiederum verpackt in eine schöne benutzerfreundliche Bibliothek wie OpenGL.#define NULL 0
makro ist nur für Liebhaber des Schreibens NULL ist, wird der numerische Wert immer 0 ist). Und ich kenne keine richtigen OS, wo die Implementierung der Besonderheiten genutzt werden. Sie alle nutzen asm.volatile
Schlüsselwort. Während die pointer-Werte sind nicht erforderlich für die Zuordnung der Adressen ist es durchaus möglich, Rückgabe eines Zeigers einige Memory-Mapped IO (MMIO) Adresse Raum durch C Implementierung passende Assembler-code. Zugriff auf den Speicher durch das C-Zeiger werden natürlich alles tun MMIO, aber nur, wenn der compiler nicht optimiert es Weg. Das ist, wovolatile
in das Spiel. Die OS gibt Ihnen einige Arbeitsspeicher, durch eine Funktion, die aufgerufen wird, die von C, aber letztendlich landen im code, geschrieben in Assembler. Durch dieses Lotsen C-code tun können MMIO.