Внеэкранный рендеринг с поддержкой графического процессора, но без поддержки окон
В настоящее время я использую OSMesa для закадрового рендеринга. Я запускаю его на интерфейсе командной строки Linux (RHEL). Это работает очень хорошо, но рендеринг отнимает много времени. По сути, я запускаю анимацию opengl за кадром, захватываю кадры на лету и создаю видео с помощью ffmpeg. Итак, мой вопрос заключается в том, возможно ли использовать графический процессор для рендеринга вне экрана, чтобы ускорить процесс рендеринга. Я знаю, что могу использовать FBO, но я думаю, что они требуют поддержки окна, которой у меня нет из-за Linux CLI. Короче говоря, есть ли возможность использовать FBO в моем случае или как лучше всего ускорить процесс рендеринга?
1 ответ
Итак, мой вопрос заключается в том, возможно ли использовать графический процессор для рендеринга вне экрана, чтобы ускорить процесс рендеринга.
В принципе, да, но пока нет стандартного API, как это сделать. Если вы используете графические процессоры NVidia, вы можете использовать EGL без головы с проприетарными драйверами Nvidia: https://devblogs.nvidia.com/parallelforall/egl-eye-opengl-visualization-without-x-server/
Используя Kernel DRM и драйверы Mesa OpenGL, можно настроить и управлять графическим процессором в одном процессе без сервера дисплея. Есть демо под названием "kmscube", я разветвлял его на свой GitHub и сделал несколько небольших модификаций: https://github.com/datenwolf/kmscube В текущем состоянии kmscube будет рисовать на экране, но это должно быть возможно изменить выбор коннектора таким образом, чтобы получить полноценный внеэкранный рендеринг.
Кроме того, вся инфраструктура Wayland основана на возможности предоставления клиентам произвольных кадровых буферов для рендеринга, которые затем объединяются композиторами, поэтому стоит также посмотреть, как компоновщики Wayland выделяют внеэкранные кадровые буферы для использования клиентами Wayland.