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
danlibEGL.so
bukannyalibGL.so
. (Opsi tautan Anda karenanya harus-lOpenGL -lEGL
- Hubungi
eglGetDisplay
, lalueglInitialize
untuk menginisialisasi EGL. - Hubungi
eglChooseConfig
dengan atribut configEGL_SURFACE_TYPE
diikuti denganEGL_PBUFFER_BIT
. - Hubungi
eglCreatePbufferSurface
, lalueglBindApi(EGL_OPENGL_API);
, lalueglCreateContext
daneglMakeCurrent
.
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.