Was ist die Software-Rendering-API von Windows?

7

Wir verwenden normalerweise OpenGL oder DirectX, um mit der GPU zu arbeiten. Wenn ich die CPU zum Rendern von 2D / 3D-Grafiken verwenden möchte, wie funktioniert das und welche API kann ich unter Windows dafür verwenden?

Ich weiß, dass es keinen Vorteil hat, die CPU für Grafiken zu verwenden, wenn GPUs vorhanden sind, aber ich möchte trotzdem verstehen, wie es funktioniert.

Gustavo Piucco
quelle
1
Es gibt tatsächlich einen Vorteil. Manchmal kann eine Rasterung auf der CPU beim Ausschluss von Okklusionen helfen, wenn Sie stark an die GPU gebunden sind.
RandyGaul

Antworten:

7

GDI (Graphics Device Interface) ist der Software-Renderer unter Windows. Grundsätzlich wird jede Sprach- / Laufzeitplattform unter Windows, die nicht GPU-beschleunigt ist, GDI unter der Haube auf einer bestimmten Ebene verwenden. Während Java AWT GDI möglicherweise direkt über den C-Code verwendet, in den die Java-Laufzeit geschrieben ist, verwendet OTOH unter Chrome GDI, wenn der Desktop nicht GPU-beschleunigt ist, und DirectX, wenn dies der Fall ist.

Ich weiß, dass es keinen Vorteil hat, die CPU für diesen Zweck zu verwenden, sondern nur, um die Funktionsweise zu verstehen.

Ganz und gar nicht. Es kann viel einfacher sein, Linien, Pixel und Bilder einfach zu zeichnen, als die Vor- und Nachteile der GPU-basierten Grafikprogrammierung zu kennen. Wenn Sie nativen Code schreiben möchten, um direkt auf GDI zuzugreifen, lesen Sie möglicherweise die gdiplus-Bibliothek, wie in diesem Lernprogramm beschrieben . Viel Glück!

BEARBEITEN : Aus Gründen der Genauigkeit kann es auch erwähnenswert sein, dass es CPU-Implementierungen von OpenGL gibt. Mesa ist das übliche Beispiel. Genau genommen schließt OpenGL das Rendern von Software nicht aus. Aber das ist nur erwähnenswert, wenn Sie wirklich pedantisch sein wollen!

Ingenieur
quelle
Es ist nicht wahr, dass alle nicht GPU-beschleunigten Zeichencodes GDI auf einer bestimmten Ebene verwenden. WARP ist vorhanden, sodass Apps und die Betriebssystem-Shell selbst gegen Direct3D 11 codiert und bei Bedarf ordnungsgemäß auf Software-Rendering heruntergestuft werden können. Sie finden GDI beispielsweise nicht in "modernen" Windows 8-Apps.
Trillian
5

Ab Windows 7 ist Direct3D 11 Ihre Antwort. Natürlich verwendet die API standardmäßig eine GPU, wenn Sie eine haben, aber Sie können ein Direct3D-Gerät erstellen, das auf die Windows Advanced Rasterization Platform (WARP) abzielt. , die ein Hochleistungs-Software-Rasterizer sein soll, der die Direct3D-API unterstützt. Sie sollten keine Leistung erwarten, die so nah wie die einer GPU ist, aber was die CPU-Rasterung angeht, sollte sie ziemlich gut sein, da Windows Systeme ohne Hardwarebeschleunigung unterstützt. Direct3D bietet auch einen Software-Referenz-Rasterizer, der jedoch nur auf Korrektheit ausgelegt und äußerst langsam ist.

Weitere Informationen zu Direct3D 11- Rasterisierern finden Sie in der Aufzählung D3D_DRIVER_TYPE .

Edit: Aber kann es Crysis ausführen? Ja!

Trillian
quelle
2

Ich würde nicht so schnell zu dem Schluss kommen, dass es keinen Nutzen gibt. Während GPUs bei der Verarbeitung von Dreiecken absurd schnell sind, werden nicht alle Bilder mithilfe der Dreiecksrasterung erstellt!

Beispielsweise verwenden Voxel-Octree-basierte Renderer (die beispielsweise in der Medizin zur Visualisierung von CT-Scans verwendet werden) häufig Multicore-CPUs und schreiben Rohpixel auf der Grundlage völlig unterschiedlicher Algorithmen. Dies kann auch für einige Raytracing-Algorithmen gelten.

Im Allgemeinen besteht die einfachste Möglichkeit zum Rendern mit der CPU darin, die Daten beispielsweise in eine BMP-Datei auszugeben. Sie können OpenGL auch zum Erstellen eines Fensters verwenden und einfach rohe Pixeldaten in eine Textur schreiben und über den gesamten Bildschirm rendern.

Bartek Banachewicz
quelle
1
+1 Sehr relevanter Punkt zum Thema Raytracing ... Obwohl dies streng genommen ein Kommentar ist, keine Antwort;) Denken Sie beim nächsten Mal daran, oder Sie werden von den wütenden, lauten Massen herabgestimmt.
Ingenieur
@ NickWiggill hey, ich erwähnte das Rendern in OGL-Textur; Ich könnte darauf näher eingehen, denke ich.
Bartek Banachewicz
Es gibt auch Anwendungen, in denen Sie möglicherweise Inhalte in Software parallel zu den Aufgaben der GPU rastern möchten. ZB Rasterung der Szene mit niedriger Auflösung für Okklusions-Keulung.
TravisG
@TravisG hm, das klingt interessant. Fast so, als würde man eine andere Frage stellen :)
Bartek Banachewicz