Đồ họa Linux cấp thấp


11

Với mục đích giáo dục, tôi muốn viết một ứng dụng trên môi trường Linux có thể xử lý các sự kiện bàn phím và vẽ đồ họa mà không cần phụ thuộc lớn như X hoặc SDL. Tôi cho rằng điều này phải có thể, bởi vì X và SDL chỉ là các chương trình, vì vậy chúng phải dựa vào các phương thức khác vốn có cho môi trường. Sự hiểu biết này có đúng không?

Nếu vậy, tôi có thể học viết một chương trình như vậy ở đâu? Kinh nghiệm hạn chế của tôi cho tôi biết rằng nó sẽ liên quan đến việc thực hiện các cuộc gọi đến kernel và / hoặc ghi vào các tệp đặc biệt; tuy nhiên, tôi không thể tìm thấy bất kỳ hướng dẫn nào về vấn đề này (tôi thậm chí không chắc chắn điều gì với Google).

Ngoài ra, trong trường hợp có liên quan, tôi đang chạy Debian Squeeze trên Virtualbox. Tôi đã sử dụng một cd netinst mà không cần kết nối mạng, vì vậy hiện tại không có nhiều cài đặt trên nó. Tôi sẽ cài đặt gcc, nhưng tôi hy vọng tôi có thể nhận được mà không có gì hơn.


Tôi không biết nếu đây là những gì bạn đang tìm kiếm nhưng nó mang lại màu sắc. ncurses
Joe

Bạn có thể muốn xem qua Framebuffer Linux .
mouviciel

Ngoài X và fbdev, còn có SVGALib, chưa được cập nhật từ năm 2001.
user16764

Nếu bạn thực sự muốn lập trình kim loại trần (ví dụ như gọi một ngắt để đặt chế độ video), tôi có thể đề xuất DOS không?
dùng16764

Điều này có vẻ hữu ích: tldp.org/HOWTO/Framebuffer-HOWTO
Chinasaur

Câu trả lời:


13

X (hay Hệ thống cửa sổ X ) thực tế là API đồ họa cấp thấp nhất mà ứng dụng Linux có thể sẽ sử dụng trên Máy tính để bàn Linux hiện đại. Hầu hết các ứng dụng thậm chí sẽ không đi sâu đến thế và thay vào đó sẽ sử dụng triển khai bộ công cụ GUI như GTK hoặc Qt.

Bên dưới chỉ có trình điều khiển phần cứng và có thể một số API nội bộ X cho trình điều khiển. Nhưng những thứ đó không có nghĩa hoặc được thiết kế để được sử dụng bởi các ứng dụng không gian người dùng thông thường.

Bạn có thể sử dụng thiết bị bộ đệm khung nhân (fbdev), nhưng tôi không biết nó hỗ trợ API đồ họa hiện đại tốt đến mức nào.

Chỉnh sửa: Wayland là một thay thế cho X mà gần đây chỉ tìm thấy một số áp dụng chính thống. Hiện tại có thể chạy Linux-Desktop hoàn toàn trên Wayland mà không có hệ thống X-Windows nào chạy cả. Bản thân Wayland phụ thuộc vào trình điều khiển EGL bên dưới (API liên quan mạnh đến OpenGL).


2
X có thể sử dụng bộ đệm khung. GTK và Qt, trong khi thường nhắm mục tiêu X, cũng có thể nhắm mục tiêu bộ đệm khung.
AProgrammer

@AProgrammer: điều đó đúng, nhưng nó không thực sự thay đổi câu trả lời của tôi. Hầu hết các ứng dụng GTK / Qt chạy trên X như ở khung cơ bản (ít nhất là bây giờ) và hầu như không có ứng dụng nào sử dụng API X thô trực tiếp.
Joachim Sauer

Bộ đệm khung ít nhất nên hỗ trợ chạy card đồ họa ở chế độ VESA tiêu chuẩn. Nó có thể không hoàn hảo (ví dụ, số lượng độ phân giải khác nhau bị hạn chế và tôi không nghĩ rằng bất kỳ chế độ màn hình rộng nào cũng được hỗ trợ), nhưng nó sẽ cung cấp cho bạn đồ họa trên hệ thống Linux với số lượng phụ thuộc tối thiểu.
một CVn

9

Nếu bạn muốn nhận các sự kiện đầu vào mà không sử dụng X thì bạn sẽ phải đọc chúng ra khỏi các nút thiết bị. Linux có một hệ thống con đầu vào chung gọi là evdev mà hầu hết các trình điều khiển đều tận dụng. Vì vậy, để đọc các sự kiện đầu vào, bạn có thể đọc từ bất kỳ nút thiết bị nào trong / dev / input.

Một mẹo đơn giản để tìm nút thiết bị chuột là chạy "cat" trên các nút thiết bị một lần, di chuyển chuột trong mỗi "cat". Nếu bạn thấy dữ liệu đi ra màn hình thì đó là nút thiết bị chuột của bạn. Tệp tiêu đề có liên quan là linux / input.h. Để biết ví dụ về cách sử dụng nó, hãy xem nguồn cho trình điều khiển xevdev.

Đối với thao tác đồ họa ở mức độ thấp, nếu bạn thực sự cảm thấy tham vọng, bạn thường có thể lập bản đồ bộ nhớ bộ đệm khung và thực hiện các thao tác bit của riêng bạn.


3

Một hướng dẫn tốt cho đồ họa cấp thấp trên Linux có sẵn ở đây .

Một bài viết tốt về tràn ngăn xếp cho đầu vào cấp thấp có sẵn ở đây .

Bất kể, bạn có thể muốn sử dụng bộ đệm khung hoặc drm / kms (bộ đệm khung là đơn giản hơn trong hai) cho đồ họa và evdev cho đầu vào trực tiếp trên Linux.


Tại sao các downvote?
Vreality
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.