Ich fange an, eine kleine Anwendung für Linux unter dem Mono-Framework zu schreiben, die Anwendung wird im Wesentlichen ein kleines Kiosk-Frontend mit sehr minimaler Benutzerinteraktion sein. Dies soll eine vorherige Version der gleichen Anwendung ersetzen, die zu 100% text-/konsolenbasiert ist.Zugriff auf einen Linux Framebuffer in Mono (Mono.Cairo/GTK #)?
Da dies auf einem Raspberry Pi laufen wird, möchte ich X vermeiden und meine Anwendung direkt mit dem Framebuffer sprechen lassen. Ich werde das Mono-Framework und C# als meine Entwicklungssprache verwenden, da ich C# sehr gut kenne. Portabilität ist in diesem Fall kein Problem.
Ich habe Probleme, passende Bibliotheken und Bindungen zu finden, um mich auf den Framebuffer von Mono jedoch zugreifen zu lassen. Die GTK#
-Bibliotheken binden alle explizit an die X11-Schnittstelle, und in jedem Fall scheint es keine vorgefertigten GtkFB-Bibliotheken in Debian Wheezy für die ARM Soft-Float (armel) -Architektur zu geben.
Die Mono.Cairo
Bibliothek stellt einen DirectFBSurface
Typen, aber der Konstruktor für diese Oberfläche nimmt zwei IntPtr
Argumente und ist nicht dokumentiert, damit ich weiß nicht, was in den Konstruktor übergeben werden soll, um richtig die Framebuffer als Kairo Oberfläche zu initialisieren.
Hat jemand mit Mono und C# gearbeitet, um mit dem Linux-Framebuffer zu sprechen, und wenn ja, können Sie grundlegende Beispiele zum Initialisieren und Zeichnen auf der FB bereitstellen oder auf Online-Dokumentation zeigen, um zu helfen?
Update 1
Ich dachte, ich würde versuchen, die DirectFBSurface mit null
für beide Konstruktorparameter instanziiert wird, mit dem folgenden Code:
public static void Main(string[] args)
{
// ...
DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
// ...
}
ich erwartet hatte dies eine Ausnahme zu erzeugen, das anzeigt, dass null
Parameterwerte wurden nicht zugelassen, es sieht jedoch so aus, als wäre die DirectFBSurface entweder nicht in Mono.Cairo
implementiert oder nicht in die mit Debian Wheezy (armel) gelieferte Bibliothek kompiliert:
Unhandled Exception: System.EntryPointNotFoundException: cairo_directfb_surface_create
at (wrapper managed-to-native) Cairo.NativeMethods:cairo_directfb_surface_create (intptr,intptr)
at Cairo.DirectFBSurface..ctor (IntPtr dfb, IntPtr dfb_surface) [0x00000] in <filename unknown>:0
at Info.Insch.SandBox.TestCairo.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
So scheint es, dass der Mono.Cairo
Ansatz wahrscheinlich nicht für meine Bedürfnisse funktionieren wird, und wie oben erwähnt, GTK#
Framebuffer-Bibliothek scheint nicht Teil von Debian Wheezy für Armel zu sein. Gibt es einen weiteren Satz von Bibliotheken, mit denen ich von Mono aus auf den Linux Framebuffer zugreifen kann?
bist du das? http://www.raspberrypi.org/phpBB3/viewtopic.php?t=15788&p=160933 – IanNorton
Wenn ja, könnten Sie auf eine Software-Oberfläche in Kairo zeichnen und es von Zeit zu Zeit auf die SDL-Oberfläche übertragen. – IanNorton
Es scheint, dass Sie einen Zeiger auf eine native IDirectFB und eine IDirectFBSurface übergeben müssen. Hier ist die Quelle für Mono.Cairo: https://github.com/mono/mono/blob/master/mcs/class/Mono.Cairo/Mono.Cairo/DirectFBSurface.cs Und hier ist cairo Quelle für diesen Konstruktor: http : //cgit.freedesktop.org/cairo/tree/src/cairo-directfb-surface.c#n499 – joncham