Einfache 2D-Grafik-Programmierung
Ich verwendet DirectDraw in C und C++ Jahren zurück zu ziehen, einige einfache 2D-Grafiken. Ich wurde verwendet, um die Schritte zum erstellen einer Oberfläche, schreibt mit Zeigern, spiegeln die back-Puffer, speichern von sprites auf off-screen-Oberflächen, und so weiter. Also heute, wenn ich will, schreiben einige 2D-Grafik-Programme, die in C oder C++, was ist der Weg zu gehen?
- Wird diese Methode der Programmierung noch anwenden oder muss ich ein anderes Verständnis von der video-hardware-Abstraktion?
- Was Bibliotheken und tools, die verfügbar sind auf Windows und Linux?
- OpenGL ist die naheliegendste Reaktion. Es ist leistungsstark mit einer niedrigen Lernkurve für einfache Anwendungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
SDL, OpenGL, und Qt 4 (es ist die gui-Bibliothek, aber es ist schnell/flexibel genug für 2D-rendering)
In der Regel brauchen Sie nicht schreiben Daten in die Fläche "mit Zeigern" jeden Rahmen, und statt zu manipulieren/erstellen Sie mithilfe von Methoden bereitgestellt, die von API. Dies ist, weil der Fahrer schneller arbeiten mit video-Speicher, als wenn Sie die übertragung der Daten vom Arbeitsspeicher in den Videospeicher zu jedem Bild. Sie kann immer noch schreiben von Daten in hardware-Oberfläche/Struktur (auch nicht bei jedem Bild), wenn Sie zu haben, aber diese Oberflächen können behandelt werden müssen, in besonderer Weise, um optimale Leistung erreichen. Zum Beispiel, in DirectX, die Sie benötigen würden, um dem Fahrer sagen, dass die Oberfläche die Daten sich oft ändern und du wirst nur zum schreiben von Daten in die Oberfläche, nie Lesen es zurück. Auch im 3D-orientierte APIs (openGL/DirectX) Grafik-Oberfläche auf die andere Oberfläche ist ein etwas "spezieller Fall", und Sie verwenden müssen, um "Render Targets"(DirectX) oder "Framebuffer-Objekte"(OpenGL). Anders als bei der von DirectDraw (wobei, AFAIK, könnten Sie blit-etwas auf etwas). Die gute Sache ist, dass mit 3D-api erhalten Sie eine unglaublich flexible Umgang mit Flächen/Texturen - dehnen, drehen, färben Sie mit der Farbe, mischen Sie zusammen, verarbeiten diese mit Shadern gemacht werden kann, die auf hardware.
Andere Sache ist, dass die modernen 3D-apis mit hardware-Unterstützung Häufig nicht funktionieren auf 8bit palettierten Texturen, und bevorzugt ARGB Bilder. 8-bit-Oberflächen mit palette kann emuliert werden, wenn Sie gebraucht werden, und 2D-low-level-apis (SDL, DirectDraw) bieten Ihnen. Auch Sie emulieren kann 8bit textur auf hardware mit fragment/pixel-Shader.
Jedenfalls, wenn Sie wollen "old school" cross-Plattform-Möglichkeit der Verwendung von Oberflächen (D. H. "Daten schreiben jedes frame-Pointer" - D. H. Sie müssen die software-renderer oder sowas), SDL leicht ermöglicht. Wenn Sie wollen höhere Ebene, mehr flexible operations - Qt 4 OpenGL und sind für Sie.
Unter Linux könnte man die OpenGL verwenden, es ist nicht nur für 3D-support, sondern unterstützt auch 2D.
SDL ist auch ziemlich einfach zu bedienen, out of the box. Es ist auch cross-Plattform, und beinhaltet (und viele) plugins zur Verfügung um Ihre Bedürfnisse zu behandeln. Es lässt sich gut mit openGL als auch sollten Sie mit 3D-Unterstützung.