GNU/Linux >> Belajar Linux >  >> Linux

OpenGL tanpa X.org di linux

Anda mungkin tertarik dengan proyek bernama Wayland

http://en.wikipedia.org/wiki/Wayland_%28display_server%29


Pembaruan (17 September 2017):

NVIDIA baru-baru ini menerbitkan artikel yang menjelaskan cara menggunakan OpenGL pada sistem headless, yang merupakan kasus penggunaan yang sangat mirip seperti yang dijelaskan dalam pertanyaan.

Singkatnya:

  • Tautkan ke libOpenGL.so dan libEGL.so bukannya libGL.so . (Opsi tautan Anda karenanya harus -lOpenGL -lEGL
  • Hubungi eglGetDisplay , lalu eglInitialize untuk menginisialisasi EGL.
  • Hubungi eglChooseConfig dengan atribut config EGL_SURFACE_TYPE diikuti dengan EGL_PBUFFER_BIT .
  • Hubungi eglCreatePbufferSurface , lalu eglBindApi(EGL_OPENGL_API); , lalu eglCreateContext dan eglMakeCurrent .

Sejak saat itu, lakukan rendering OpenGL seperti biasa, dan Anda dapat menghapus permukaan buffer piksel di mana pun Anda mau. Artikel tambahan dari NVIDIA ini menyertakan contoh dasar dan contoh untuk banyak GPU. Permukaan PBuffer juga dapat diganti dengan permukaan jendela atau permukaan pixmap, sesuai dengan kebutuhan aplikasi.

Saya menyesal tidak melakukan penelitian lebih lanjut tentang ini pada suntingan saya sebelumnya, tapi baiklah. Jawaban yang lebih baik adalah jawaban yang lebih baik.

Sejak jawaban saya di tahun 2010, telah terjadi sejumlah perombakan besar di ruang grafis Linux. Jadi, jawaban yang diperbarui:

Hari ini, nouveau dan driver DRI lainnya telah matang ke titik di mana perangkat lunak OpenGL stabil dan bekerja cukup baik secara umum. Dengan diperkenalkannya EGL API di Mesa, sekarang Anda dapat menulis aplikasi OpenGL dan OpenGL ES bahkan di desktop Linux.

Anda dapat menulis aplikasi Anda ke EGL target, dan dapat dijalankan tanpa kehadiran pengelola jendela atau bahkan penyusun. Untuk melakukannya, Anda akan memanggil eglGetDisplay , eglInitialize , dan terakhir eglCreateContext dan eglMakeCurrent , alih-alih panggilan glx biasa untuk melakukan hal yang sama.

Saya tidak tahu jalur kode khusus untuk bekerja tanpa server tampilan, tetapi EGL menerima tampilan X11 dan tampilan Wayland, dan saya tahu bahwa EGL dapat beroperasi tanpa itu. Anda dapat membuat konteks GL ES 1.1, ES 2.0, ES 3.0 (jika Anda memiliki Mesa 9.1 atau lebih baru), dan OpenGL 3.1 (Mesa 9.0 atau lebih baru). Mesa belum (per Sep. 2013) mengimplementasikan OpenGL 3.2 Core.

Khususnya, di Raspberry Pi dan di Android, EGL dan GL ES 2.0 (1.1 di Android <3.0) didukung secara default. Di Raspberry Pi, menurut saya Wayland belum berfungsi (per September 2013), tetapi Anda mendapatkan EGL tanpa server tampilan menggunakan driver biner yang disertakan. Kode EGL Anda juga harus portabel (dengan sedikit modifikasi) untuk iOS, jika Anda tertarik.

Di bawah ini adalah pos lama yang diterima sebelumnya:

Saya ingin membuka konteks OpenGL tanpa X di linux. Apakah ada cara untuk melakukannya?

Saya yakin Mesa menyediakan target framebuffer. Jika memberikan akselerasi perangkat keras sama sekali, itu hanya akan terjadi pada perangkat keras yang memiliki driver sumber terbuka yang telah diadaptasi untuk mendukung penggunaan tersebut.

Gallium3D juga belum matang, dan dukungan untuk ini bahkan tidak ada dalam peta jalan, sejauh yang saya tahu.

Saya ingin mendapatkan solusi yang berfungsi dengan kartu nvidia.

Tidak ada satu pun. Periode.

NVIDIA hanya menyediakan driver X, dan proyek Nouveau masih belum matang, dan tidak mendukung jenis penggunaan yang Anda cari, karena saat ini hanya berfokus pada driver X11.


Linux
  1. Jalankan container di Linux tanpa Sudo di Podman

  2. Modul kernel Linux kita tidak bisa hidup tanpanya

  3. Cara menggunakan dd di Linux tanpa merusak disk Anda

  1. Cara Menguji Paket Tanpa Menginstalnya Di Linux

  2. 11 panduan baris perintah Linux yang tidak boleh Anda lewatkan

  3. Malloc di linux tanpa komitmen berlebihan

  1. Memindahkan file di Linux tanpa mv

  2. Linux Kernel.org menyesatkan tentang kepanikan kernel

  3. Penerusan port di Linux tanpa iptables?