2015-11-18 3 views
2

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

Я хочу протестировать приложение, которое обычно отображается в окне с OpenGL. Вместо этого я хочу, чтобы он отображался в файлах изображений для дальнейшей оценки. Я хочу сделать это на сервере Linux без GPU.

Как я могу сделать это с минимальным воздействием на оцениваемое приложение?

Некоторые замечания для ясности:

  • версия OpenGL является 2,1, так что программное обеспечение визуализации с Mesa должно быть возможным.
  • Предпочтительно, я не хочу изменять какой-либо код приложения. Если есть решение, которое позволяет мне эмулировать сервер X или что-то в этом роде, я бы предпочел это.
  • Я не хочу менять какой-либо код рендеринга. Если это действительно необходимо, я могу изменить способ инициализации OpenGL, но после этого хочу выполнить произвольный код OpenGL.

В идеале ваш ответ объясняет, как настроить среду на безголовом Linux-сервере, что позволяет запускать произвольные двоичные файлы OpenGL и выводить их на изображения. Если это невозможно, я открыт для любых предложений.

+0

Я делаю эту точную вещь как часть определенного типа автоматизированного тестирования на стороне сервера, которое подчеркивает сохранение/улучшение визуальных качеств (требует обзора человека). Я не уверен, что это самый прямой/прямой подход, но я делаю это, предоставляя внеэкранные FBOs, а затем захватывая полученные текстурные пиксели текстуры через 'glGetTexImage'. Остальное - стандартный ввод-вывод. –

+0

Работает ли ваше решение на машине без GPU? Если да, как вы это настроите? –

+0

Я делаю именно то, о чем вы говорите ... Единственная разница в том, что я использую GPU. Я никогда не пытался с MESA. Помимо этой детали, я могу помочь вам со всем остальным. –

ответ

2

Используйте Xvfb для вашего X-сервера. Установка Mesa, развернутая в любом современном дистрибутиве Linux, должна автоматически возвращаться к растеризации программного обеспечения, если не найдено поддерживаемого GPU. Вы можете делать скриншоты с любой программой захвата экрана X11; heck даже ffmpeg -i x11grab будет работать.

+0

Спасибо! Это звучит просто и, похоже, работает. Я не ожидал, что решение будет таким простым. –

1

fbdev/miniglx может быть что-то, что вы ищете. http://www.mesa3d.org/fbdev-dri.html Я не использовал его, поэтому я понятия не имею, работает ли оно для вашей цели или нет.

Альтернатива - это просто запустить и xserver без какой-либо среды рабочего стола с помощью xinit. Эта настройка использует хорошо протестированные коды кода, что делает ее более подходящей для запуска теста. У miniglx могут быть ошибки, которых никто не заметил, потому что они не используются каждый день.

Чтобы сделать вывод рендеринга изображениям, можно сделать с помощью метода LD_PRELOAD, чтобы обернуть glXSwapBuffers. Основная идея заключается в том, чтобы добавить свою собственную функцию swapbuffers между вашим приложением и библиотекой gl, где вы можете использовать glReadPixels для загрузки визуализированного фрейма, а затем использовать свою любимую библиотеку изображений для записи этих данных в файлы изображений/видео. После завершения glReadPixels вы можете вызвать библиотеку glXSwapBuffers, чтобы сделать обмен, как это произойдет на реальном рабочем столе.

Подкаталог prog удален из основного git-репозитория, и вы можете найти его с git: //anongit.freedesktop.org/git/mesa/demos.

Смежные вопросы