Grafis Linux tingkat rendah


11

Untuk tujuan pendidikan, saya ingin menulis aplikasi di lingkungan Linux yang dapat memproses acara keyboard dan menggambar tanpa ketergantungan besar seperti X atau SDL. Saya berasumsi bahwa ini harus dimungkinkan, karena X dan SDL hanyalah program itu sendiri, sehingga mereka harus bergantung pada metode lain yang melekat pada lingkungan. Apakah pemahaman ini benar?

Jika demikian, di mana saya bisa belajar menulis program semacam itu? Pengalaman saya yang terbatas memberi tahu saya bahwa itu akan melibatkan membuat panggilan ke kernel, dan / atau menulis ke file khusus; Namun, saya belum dapat menemukan tutorial tentang masalah ini (saya bahkan tidak yakin apa yang harus Google).

Juga, jika itu relevan, saya menjalankan Debian Squeeze on Virtualbox. Saya telah menggunakan cd netinst tanpa jaringan, jadi saat ini tidak banyak yang diinstal. Saya akan menginstal gcc, tetapi saya berharap saya bisa bertahan dengan tidak lebih.


Saya tidak tahu apakah ini yang Anda cari tetapi memberi warna. ncurses
Joe

Anda mungkin ingin melihat ke Linux Framebuffer .
mouviciel

Selain X dan fbdev, ada juga SVGALib, yang belum diperbarui sejak 2001.
user16764

Jika Anda benar-benar ingin melakukan pemrograman bare-metal (mis. Memanggil interupsi untuk mengatur mode video), bolehkah saya menyarankan DOS?
user16764

Jawaban:


13

X (atau Sistem X Window ) secara praktis adalah API grafik tingkat paling rendah yang kemungkinan akan digunakan oleh aplikasi Linux pada Desktop Linux modern. Sebagian besar aplikasi bahkan tidak akan repot sedalam itu dan sebaliknya akan menggunakan implementasi toolkit GUI seperti GTK atau Qt.

Di bawah ini hanya ada driver perangkat keras dan mungkin beberapa API X-internal untuk driver. Tetapi itu tidak dimaksudkan atau dirancang untuk digunakan oleh aplikasi userspace yang normal.

Anda dapat menggunakan perangkat kernel framebuffer (fbdev), tetapi saya tidak tahu seberapa baik yang mendukung API grafik modern.

Sunting: Wayland adalah alternatif untuk X yang baru saja menemukan beberapa adopsi arus utama. Sekarang dimungkinkan untuk menjalankan Linux-Desktop murni di Wayland tanpa sistem X-Windows yang berjalan sama sekali. Wayland sendiri tergantung pada driver EGL di bawahnya (API yang sangat terkait dengan OpenGL).


2
X dapat menggunakan framebuffer. GTK dan Qt, sementara biasanya menargetkan X, juga dapat menargetkan framebuffer.
Pemrogram

@AProgrammer: itu benar, tetapi itu tidak benar-benar mengubah jawaban saya. Sebagian besar aplikasi GTK / Qt berjalan pada X seperti pada kerangka kerja yang mendasarinya (setidaknya untuk saat ini) dan hampir tidak ada aplikasi yang menggunakan API X mentah secara langsung.
Joachim Sauer

Framebuffer setidaknya harus mendukung menjalankan kartu grafis dalam mode VESA standar. Ini mungkin tidak sempurna (jumlah resolusi yang berbeda terbatas, misalnya, dan saya tidak berpikir ada mode layar lebar yang didukung), tetapi itu akan memberi Anda grafik pada sistem Linux dengan jumlah dependensi minimum.
CVn

9

Jika Anda ingin mendapatkan input event tanpa menggunakan X maka Anda harus membacanya dari node perangkat. Linux memiliki subsistem input generik yang disebut evdev yang dimanfaatkan sebagian besar driver. Jadi, untuk membaca acara masukan, Anda dapat membaca dari simpul perangkat mana pun di / dev / input.

Trik mudah untuk menemukan simpul perangkat mouse adalah menjalankan "cat" pada node perangkat satu per satu, menggerakkan mouse selama setiap "cat". Jika Anda melihat data keluar ke layar maka itu adalah simpul perangkat mouse Anda. File header yang relevan adalah linux / input.h. Untuk contoh cara menggunakannya, lihat sumber untuk driver xevdev.

Untuk manipulasi grafis tingkat rendah, jika Anda benar-benar merasa ambisius, Anda biasanya dapat memetakan framebuffer memori dan melakukan bit blts Anda sendiri.


3

Tutorial yang bagus untuk grafik tingkat rendah di Linux tersedia di sini .

Posting yang bagus tentang stack overflow untuk input tingkat rendah tersedia di sini .

Apapun, Anda mungkin ingin menggunakan framebuffer atau drm / kms (framebuffer menjadi yang lebih sederhana dari keduanya) untuk grafik dan evdev untuk input langsung di Linux.


Mengapa downvote?
Vreality
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.