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.
graphics
windows
software-rendering
Gustavo Piucco
quelle
quelle
Antworten:
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.
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!
quelle
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!
quelle
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.
quelle