2009-02-27 5 views
5

Ich brauche eine einfache Grafik-C-Bibliothek für ein Gerät, wo ich direkt in den Rahmen schreiben werde.Wo finde ich eine einfache Grafik-C-Bibliothek zum direkten Schreiben auf einen Rahmen?

Der Rahmen befindet sich im normalen Speicher. Es gibt keine Grafikbeschleunigungshardware.

Nichts Besonderes. Ich möchte nur Linien, Kreise, OSD-Elemente wie Strings zeichnen können.

Es wäre schön, Funktionen zu haben, die gute, schlanke Algorithmen verwenden (meine CPU ist ein ARM9 mit 400 MHz).

Welche Empfehlungen gibt es?

Antwort

0

OPenGL hat eine Reihe von 2D-Funktionen, nicht sicher, ob es für Sie zu aufgebläht ist oder ob es getrimmt werden kann. Es ist zumindest in C geschrieben.

3

Cairo ist sehr leistungsfähig und einfach zu bedienen. Ich denke Mozilla verwendet es als Grundlage für das <canvas> Element und den SVG-Renderer.

+1

Ja, Sie sind richtig. – dirkgently

2

Aus Ihren Anforderungen scheint es, dass Sie etwas wie eine eingebettete Framebuffer-Bibliothek (oder was auch immer es genannt wird) benötigen. Ich habe vor ein paar Jahren mit einigen der folgenden Spiele für einen eingebetteten Browser gespielt (der es nicht auf den Markt geschafft hat). Leider kann ich mich kaum an eine Analyse erinnern. Werfen Sie einen Blick:

  • DirectFB
  • GTK/X (oder um einen Anschluss mit DirectFB)
  • Kairo (als ein weiteres Plakat vorgeschlagen hat - das ist sehr mächtig)

Auch dieses article kann von Interesse sein.

+0

DirectFB wird nicht mehr gepflegt. Eine Version des Codes wurde auf der [DirectFB github-Seite] (https://github.com/DirectFB/directfb) veröffentlicht, aber seit 2014 nicht mehr. Die Dokumentation kann über das Internet-Archivprojekt aufgerufen werden. – Merlin

0

Versuchen Sie SDL. Von der Webseite:

Simple DirectMedia Layer ist eine plattformübergreifende Multimedia-Bibliothek für Audio, Tastatur, Maus, Joystick, 3D-Hardware über OpenGL und 2D-Video-Framebuffer. Es wird von MPEG-Wiedergabesoftware, Emulatoren und vielen beliebten Spielen verwendet, einschließlich des preisgekrönten Linux-Ports "Civilization: Call To Power".

+0

DirectFB wird nicht mehr gepflegt. Eine Version des Codes wurde auf der [DirectFB github-Seite] (https://github.com/DirectFB/directfb) veröffentlicht, aber seit 2014 nicht mehr. Die Dokumentation kann über das Internet-Archivprojekt aufgerufen werden. – Merlin

4

Für sehr einfache Bedürfnisse (Linien, Kreise, Polygone, Text) habe ich immer nur mein eigenes gemacht. Sehen Sie sich den Algorithmus von bresenham für Linien und Kreise an, Wu's Modifikationen für Antialiasing auf Kreisen und Linien.

Gimp wird C-Code für Bilder ausgeben, was ich für Fonts mache, und das Zeichnen ist ziemlich einfach. Ich habe Anti-Aliasing verwendet (gimp -> Graustufen, verwende den Graustufenwert als Alpha), habe aber keine proportionalen Schriften erstellt. Sie sind nicht viel härter und können das Display ein bisschen schöner machen, aber ich habe sie noch nicht gebraucht.

Polygone sind einfach mehrere Zeilen und filled polygons are quite fun to implement.

Es ist nicht viel Arbeit, und Sie werden aus der Erfahrung wachsen.

Wenn Sie jedoch entscheiden, dass Sie SVG oder eine andere komplexe Vektorsprache rendern möchten, ist eine Bibliothek in Ordnung. Aber für einfache Dinge ist das nicht kompliziert.

-Adam

+0

Dieser kleine Leckerbissen über Gimp ist faszinierend. Ich werde das ausprobieren müssen. Vielen Dank! – technomalogical

+0

Wie machen Sie Ihre eigenen? Es wäre eine großartige Lernerfahrung ... – alexpinho98

4

Ich möchte zweite OpenGL, vor allem die OpenGL | ES-Variante. Hier

ist ein Link zu einer Software auf Basis von OpenGL-Renderer: http://sourceforge.net/projects/ogl-es

verbringe ich habe die letzten drei Jahre kommerzielle Software zu schreiben Rasterung Codes auf ARM9 und ähnlichen Prozessoren, also denke ich, dass ich bei der Verwendung von kairo kommentieren und andere High-Level-APIs:

Sie arbeiten sehr gut und sind unglaublich kraftvoll, aber auf ein Ziel so begrenzt wie ein ARM9 werden Sie nie mit der Leistung zufrieden sein. Die grafischen Bibliotheken sind mit einem typischen Desktop-PC geschrieben, und sie stehen für Präzision bei der Leistung. Dies ist gut für qualitativ hochwertige SVG-Rendering, aber auf einem bescheidenen ARM zu verlangsamen.

Der Vincent OpenGL | ES Ich habe habe vorgeschlagen, über ein on the fly dynamische Code-Generierung Motor für ARM-CPUs an Ort und Stelle, so dass Sie bekommen fast die Leistung von Hand optimierten Assemblercode.

Wenn Sie sich auf nur ein Bitmap-Format, nur zwei Blend-Modi und eine Hand voll Rendering-Primitiven beschränken können, erzielen Sie eine bessere Leistung, indem Sie selbst ein Dutzend Render-Routinen schreiben. Abhängig von deiner Erfahrung und Anforderungen, die alles von zwei Tagen bis zu einem Monat dauern können.

Verwandte Themen