Estoy empezando a escribir una pequeña aplicación para Linux bajo el marco de Mono, la aplicación será esencialmente una pequeña interfaz de kiosco con muy poca interacción del usuario. Esto es para reemplazar una versión anterior de la misma aplicación que estaba 100% basada en texto/consola.¿Cómo acceder a Linux Framebuffer en Mono (Mono.Cairo/GTK #)?
Como este se ejecutará en un Raspberry Pi, que quiere evitar la utilización X y tienen mi solicitud hablar con el framebuffer directamente. Estoy preparado para usar el framework Mono y C# como mi lenguaje de desarrollo ya que conozco C# muy bien. La portabilidad no es un problema en este caso.
Estoy teniendo algunos problemas para encontrar las bibliotecas y enlaces adecuados a me deja acceder a la Framebuffer de Mono sin embargo. Las bibliotecas GTK#
se vinculan explícitamente a la interfaz X11 y, en cualquier caso, no parece haber bibliotecas GtkFB precompiladas en Debian Wheezy para la arquitectura ARM Soft-Float (armel).
La biblioteca Mono.Cairo
expone un tipo DirectFBSurface
, sin embargo, la constructora de dicha superficie toma dos argumentos IntPtr
y no está documentado, así que no sé lo que debería ser pasado al constructor para inicializar correctamente el framebuffer como superficie de El Cairo.
¿Alguien ha trabajado con Mono y C# para hablar con Linux Framebuffer, y si es así, puede proporcionar ejemplos básicos para inicializar y comenzar a dibujar en el FB, o indicar documentación en línea para ayudar?
Actualización 1
pensé que iba a tratar una instancia del DirectFBSurface con null
tanto para los parámetros del constructor, con el siguiente código:
public static void Main(string[] args)
{
// ...
DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
// ...
}
esperaba que esto genera una excepción que indica que null
no se permitieron los valores de los parámetros; sin embargo, parece que DirectFBSurface no está implementado en Mono.Cairo
o no está compilado en la biblioteca incluida con Debian Wheezy (armel):
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
por lo que parece que el enfoque Mono.Cairo
probablemente no funcionará para mis necesidades, y como se señaló anteriormente, GTK#
biblioteca Framebuffer no parece ser parte de Debian Wheezy para Armel. ¿Hay otro conjunto de bibliotecas que podría utilizar para acceder al Linux Framebuffer desde Mono?
¿es este usted? http://www.raspberrypi.org/phpBB3/viewtopic.php?t=15788&p=160933 – IanNorton
Si es así, podría dibujar en una superficie de software en El Cairo y ajustarla a la superficie del SDL de vez en cuando. – IanNorton
Parece que necesita pasar un puntero a un IDirectFB nativo y una IDirectFBSurface. Aquí está la fuente de Mono.Cairo: https://github.com/mono/mono/blob/master/mcs/class/Mono.Cairo/Mono.Cairo/DirectFBSurface.cs Y aquí está el origen de El Cairo para ese constructor: http : //cgit.freedesktop.org/cairo/tree/src/cairo-directfb-surface.c#n499 – joncham