Безоконный контекст OpenGL в модуле Apache2

0

Я пытаюсь разработать модуль Apache2, который использует OpenGL для выполнения рендеринга вне экрана и динамического создания изображений, которые затем я могу отправить обратно клиенту.

Apache2 работает на машине Ubuntu 12.04, и я создал тестовый модуль, который отображает квад и сохраняет кадр как образ на диск с использованием OpenGL/GLX. Но когда модуль получает запрос клиента, он сбой при XOpenDisplay(0) с ошибкой сегментации. Любые идеи, что может пойти не так?

Изменить: все примеры, которые я видел, говорят об использовании пиксельного буфера (PBuffer). Насколько я знаю, они устарели, и вместо этого следует использовать ФБО. Может ли кто-нибудь объяснить, как создать контекст и использовать FBO для выполнения рендеринга вне экрана?

Теги:
opengl
apache2-module
openglcontext
glx

1 ответ

4
Лучший ответ

В то время как технически это вполне возможно сделать без окон, отображать сервер за вычетом ускоренного рендеринга с помощью графического процессора с OpenGL, практически это невозможно в наши дни, потому что вам нужна среда отображения, чтобы фактически получить доступ к графическому процессору. К счастью, структура графических систем меняется в эти дни (гибридная графика, дисплеи). Уже Mesa предоставляет режим создания внеэкранного контекста (OSMesa), но это далеко не полный набор функций.

Поэтому прямо сейчас вам понадобится какой-то сервер отображения, пригодный для работы, с которым вы можете привязать контекст. X11 предлагает два вида графических ускорителей: Windows и PBuffers. Вы можете использовать FBOs с помощью (PBuffers - это технически Windows, которые не могут быть сопоставлены с корневым окном и иметь экранный холст). Самый простой способ - создать регулярное окно на X-сервере, но не показывать его; вы все равно можете создать контекст OpenGL и создать FBOs, как показано в многочисленных руководствах. Но для OpenGL для работы X-сервер, который вы используете, должен быть активным, удерживать консоль и настраиваться на использование графического процессора (теоретически с новыми X-серверами и драйверами с гибридной графикой, которые должны быть доступны, чтобы настроить X-сервер на использование фиктивного устройства отображения и сконфигурируйте GPU как вторичное устройство для ускоренного рендеринга, но пока я этого не делал).

  • 0
    Это действительно очень полезно. Но можете ли вы уточнить эту часть: «чтобы OpenGL работал на используемом вами X-сервере, он должен быть активным, держать консоль и быть настроен на использование графического процессора» . Основная проблема, с которой я сталкиваюсь, - это невозможность открыть дисплей, поскольку XOpenDisplay() всегда дает сбой. Я попытался передать NULL чтобы получить число из переменной среды, но все равно не получается. Я протестировал запуск Apache2 из командной строки как единый процесс, чтобы я мог контролировать вывод на консоли.
  • 0
    @ informer2000: Сначала убедитесь, что на самом деле работает X-сервер. Если это так, вы должны предоставить клиентам номер DISPLAY и путь к информации об авторизации. При запуске X-сервера используйте -auth … чтобы указать путь к месту размещения данных авторизации (где-то в /var/run или около того) и сделать их читаемыми процессом веб-сервера. Затем установите для переменной среды XAUTHORITY этот путь.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню