Tôi bắt đầu viết một ứng dụng nhỏ cho Linux theo khung Mono, ứng dụng về bản chất sẽ là một giao diện người dùng nhỏ với tương tác rất nhỏ của người dùng. Điều này là để thay thế một phiên bản trước đó của cùng một ứng dụng được dựa trên 100% văn bản/bàn điều khiển.Làm thế nào để truy cập vào bộ đệm Framebuffer Linux trong Mono (Mono.Cairo/GTK #)?
Vì điều này sẽ chạy trên một Raspberry Pi, tôi muốn tránh chạy X và yêu cầu ứng dụng của tôi trao đổi trực tiếp với Framebuffer. Tôi đang sử dụng khung Mono và C# làm ngôn ngữ phát triển của mình vì tôi biết C# rất tốt. Tính di động không phải là một vấn đề trong trường hợp này.
Tôi đang gặp sự cố khi tìm các thư viện và liên kết phù hợp để cho phép tôi truy cập Framebuffer từ Mono. Các thư viện GTK#
tất cả ràng buộc rõ ràng với giao diện X11, và trong mọi trường hợp, dường như không có thư viện GtkFB được dựng sẵn trong Debian Wheezy cho kiến trúc ARM Soft-Float (armel).
Thư viện Mono.Cairo
cho thấy một loại DirectFBSurface
, tuy nhiên các nhà xây dựng cho bề mặt mà phải mất hai IntPtr
đối số và không được ghi nhận vì vậy tôi không biết những gì nên được chuyển vào constructor để khởi động các bộ đệm khung như một bề mặt Cairo.
Có ai đã từng làm việc với Mono và C# để nói chuyện với bộ đệm Framebuffer của Linux không, và nếu có, bạn có thể cung cấp các ví dụ cơ bản để khởi tạo và bắt đầu vẽ lên FB hoặc trỏ tới tài liệu trực tuyến để hỗ trợ không?
Cập nhật 1
tôi nghĩ rằng tôi muốn thử instantiating DirectFBSurface với null
cho cả thông số nhà xây dựng, với đoạn mã sau:
public static void Main(string[] args)
{
// ...
DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
// ...
}
tôi mong đợi này để tạo ra một ngoại lệ chỉ ra rằng null
giá trị tham số không được phép, tuy nhiên thay vào đó, nó trông như thể DirectFBSurface không được triển khai trong Mono.Cairo
hoặc không được biên dịch vào thư viện được gửi kèm với 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
Vì vậy, có vẻ như cách tiếp cận Mono.Cairo
có lẽ sẽ không làm việc cho nhu cầu của tôi, và như đã nói ở trên, GTK#
thư viện bộ đệm khung dường như không phải là một phần của Debian Wheezy cho armel. Có một bộ thư viện nào khác mà tôi có thể sử dụng để truy cập vào Framebuffer Linux từ Mono không?
là bạn này? http://www.raspberrypi.org/phpBB3/viewtopic.php?t=15788&p=160933 – IanNorton
Nếu vậy, bạn có thể vẽ lên bề mặt phần mềm ở Cairo và ghi nó lên bề mặt SDL thường xuyên. – IanNorton
Dường như bạn cần chuyển con trỏ tới IDirectFB và IDirectFBSurface. Đây là nguồn cho Mono.Cairo: https://github.com/mono/mono/blob/master/mcs/class/Mono.Cairo/Mono.Cairo/DirectFBSurface.cs Và đây là nguồn cairo cho hàm tạo đó: http : //cgit.freedesktop.org/cairo/tree/src/cairo-directfb-surface.c#n499 – joncham