2014-11-14 4 views
3

Я хочу реализовать приложение opengl, которое генерирует изображения, и я просматриваю изображение с помощью веб-страницы.Может ли приложение EGL запускаться в консольном режиме?

приложение предназначено для работы на сервере linux, который не имеет отображения, не имеет x окон, а с gpu.

Я знаю, что egl может использовать pixmap или pbuffer в качестве целей рендеринга.

но функция eglGetDisplay меня беспокоит, похоже, мне все еще нужно иметь прикрепленный дисплей, чтобы заставить его работать?

делает egl работать без дисплея и xwindows или wayland?

+0

См. [Этот ответ] (http://stackoverflow.com/a/23166541/2207421). – Kalrish

ответ

6

Это повторяющийся вопрос. TL; DR: В текущей модели графического драйвера Linux невозможно использовать графический процессор с традиционными драйверами без запуска X-сервера. Если GPU поддерживается KMS + DRM + DRI, вы можете это сделать. (EDIT :) Также в 2016 году Nvidia наконец представила по-настоящему безгласную поддержку OpenGL в своих драйверах через EGL.


Длинная история, что технически графические процессоры вполне способны оказывать на закадровый буфер без дисплея будучи прикрепленным или запустить графический сервер. Однако из-за истории развития графического драйвера и разработки среды это невозможно, ноне удалось в течение длительного времени. Предположение тогда (когда графика впервые была представлена ​​Linux) была: «Графическое устройство предназначено для доставки изображения на экран». То, что графическая карта может использоваться в качестве ускоряющего сопроцессора, даже не является воплощением идеи.

Добавьте к этому, что еще несколько лет назад ядро ​​Linux не знало, как разговаривать с графическими устройствами (кроме тупой фреймбуфера где-то в адресном пространстве системы). X-сервер был тем, что обсуждалось с графическими процессорами, поэтому вам нужно было его запустить. И первые разработчики X-сервера сделали предположение, что между клавиатурой и стулом есть человек.


Так что ваши варианты:

Краткосрочное, если вы используете GPU NVidia: Просто запустите сервер X. Вам не нужна полная среда рабочего стола. Вы даже можете избавить себя от необходимости запуска диспетчера окон. Просто попросите X-сервер утверждать VT и быть активным.В настоящее время поддерживается поддержка безглавых контекстов OpenGL через EGL в драйверах Nvidia.

Если вы используете AMD или Intel GPU, вы можете напрямую поговорить с ним. Либо через EGL, либо с помощью KMS (Google для чего-то под названием kmscube, попробовав его, убедитесь, что вы сначала отключаетесь от своего X-сервера до текста VT, иначе вы будете разбивать сервер X). Я еще не пробовал, но можно было бы приспособить пример kmscube, который использует графический процессор для рендеринга в буфер вне экрана, без переключения VT в графический режим или на любой графический вывод на фреймбуффе дисплея.

+0

Мне любопытно, насколько это все еще действует 2 года спустя? –

+0

@ VladFiroiu: В течение чуть более года драйверы NVidia поддерживают безгласную операцию X-less https://devblogs.nvidia.com/parallelforall/egl-eye-opengl-visualization-without-x-server/, однако это следует отметить, что это своего рода собственность. Что касается драйверов OSS, вы можете использовать то, что я описал в последнем абзаце. – datenwolf

+0

Ваш ответ противоречив - в TL, DR вы говорите, что это невозможно, но в последнем абзаце вы говорите, что это возможно с EGL * (который также поддерживается NVidia) *. –

0

Как сказал datenwolf, вы можете создать буфер кадров без использования x с AMD и Intel GPU. так как iam с использованием графической карты AMD с EGL и iam способен создавать буфер кадров и рисовать iam на нем. С помощью Mesa Library можно настроить без x u.