Что на самом деле делает LIBGL_ALWAYS_INDIRECT=1?

Любое распределение, которое старается не устанавливать тяжелый менеджер окон, сделает приятно. Для максимального выбора Debian будет прекрасен в более старой системе. Ваше реальное решение который менеджер окон использовать. Я использовал FVWM на ноутбуке, сделанном в 1996, и это было много достаточно быстро. Более современные "легкие" менеджеры окон являются, вероятно, также соответствующими.

23
23.09.2016, 01:01
2 ответа

Косвенный рендеринг означает, что протокол GLX будет использоваться для передачи команд OpenGL, и X.org сделает реальный рисунок.

Прямой рендеринг означает, что приложение может получить доступ к аппаратным средствам непосредственно без связи с X.org сначала через мезаструктуру.

Прямой рендеринг быстрее, поскольку он не требует изменения контекста в процесс X.org.

Разъяснение: В обоих случаях рендеринг сделан GPU (или технически - может быть сделан GPU). Однако в косвенном рендеринге процесса похож:

  1. Программа называет команду (команды)
  2. Команда (команды), is/are отправленный в X.org протоколом GLX
  3. X.org называет аппаратные средства (т.е. GPU) для рисования

В прямом рендеринге

  1. Программа называет команду (команды)
  2. Команда (команды), is/are отправленный в GPU

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

15
27.01.2020, 19:42
  • 1
    Это означает, что мой ЦП делает банкомат рендеринга вместо моей видео микросхемы? –  xenoterracide 31.08.2010, 23:17
  • 2
    в обоих случаях GPU делает рисунок, если у Вас есть ускорение - однако существует дополнительно служебный. Не ускоренный рисунок является медленным extreamly и никакие эффекты, которые потребовали бы LIBGL_ALWAYS_INDIRECT=1 работал бы с ним (т.е. косвенное обходное решение рендеринга обычно необходимо для усовершенствованного использования OpenGL, такого как составной объект wm). –  Maciej Piechotka 31.08.2010, 23:43

Во-первых, LIBGL_ALWAYS_INDIRECT флаг, связанный с Мезаструктурой 3D клиентская реализация OpenGL (libGL.so). Это не будет работать с двоичными драйверами от других поставщиков (например, Nvidia).

Во-вторых, для ответа на вопрос непосредственно продержитесь, я посмотрел на Меза-код работы флага как это:

Пред ~2008, когда Мезаструктура работала с косвенным X-сервером (например, Вы сделали ssh -X или явно устанавливает Ваш дисплей на нелокальный сервер), он вошел бы в список зрительного ряда GLX, обеспеченного удаленным X-сервером, доступным Вашему приложению GLX. Вызовы приложения, например, glXChooseVisual () и Мезаструктура нашли бы что-то разумным для соответствия, и последующий glFoo() вызовы были бы отправлены на удаленный X-сервер, где они выполнялись любым libGL, удаленный X-сервер был сцеплен до (вероятно, Ваш GPU).

Вокруг конца Мезаструктуры 2008 был изменен так, чтобы это хотело использовать свой внутренний рендерер программного обеспечения OpenGL (драйвер Xlib) для удаленного X соединений. (Некоторые дистрибутивы как SuSE конкретно исправили это для возвращения к старому поведению.) Это только умерло бы, если бы удаленный X-сервер предложил визуальное GLX, которое точно соответствовало одному из внутреннего рендерера программного обеспечения. (Иначе Вы получили бы общее, "Ошибка: не мог получить RGB, С двойной буферизацией визуальный".), Если бы такое визуальное было найдено затем Мезаструктуру, то представил бы все glFoo() команды с локальным (к приложению) ЦП и нажатие результат к удаленному X-серверу с помощью растровых изображений (XPutImage()); Установка LIBGL_ALWAYS_INDIRECT=1 (до Мезаструктуры работали бы 17,3 любых значений, с тех пор необходимо использовать 1, или верный) говорит Мезаструктуре игнорировать нормальный прямой рендеринг или внутренний рендерер программного обеспечения и использовать косвенный рендеринг как привыкший к.

Выбор косвенного рендеринга или прямого рендеринга программного обеспечения будет влиять на две вещи:

Версия OpenGL

  • Косвенный рендеринг обычно ограничивается OpenGL 1.4.
  • Прямой рендеринг программного обеспечения будет поддерживать то, что растрирующий процессор программного обеспечения Mesa поддерживает, вероятно, OpenGL 2.1 +

Производительность

  • Если Ваше приложение разработано для косвенных соединений (оно использует дисплейные списки, минимизирует запросы туда и обратно), затем, можно получить разумную производительность.
  • Если Ваше приложение делает что-то глупое как glGetInteger() 100 раз на кадр затем даже на быстрой LAN каждый из тех запросов легко поднимет 1 мс, или общее количество на 100 мс на кадр, означая, что Вы никогда не могли получать больше чем 10 кадр/с в своем приложении.
  • То же самое приложение, если нагрузка рендеринга не является слишком большой, может работать очень хорошо с прямым рендерингом программного обеспечения, начиная со всех они glGetInteger() звонки отвечают непосредственно в течение микро или наносекунды.
  • Если Ваше приложение создаст миллион дисплейных списков вершины и затем сделает большое вращение затем, то косвенный рендеринг с реальным GPU на другом конце даст намного лучшую производительность.
  • Приложение также может отступить к другому пути выполнения кода, когда оно только имеет OpenGL 1.4 по сравнению с 2.x доступный, который также может влиять на производительность.

Так, Вы видите без точных деталей Вашего приложения и Ваших сетевых характеристик, невозможно сказать, лучше ли прямой рендеринг программного обеспечения или косвенный рендеринг для какой-либо данной ситуации.

В Вашем случае кажется выполнением локального kwin экземпляра, таким образом, эффект LIBGL_ALWAYS_INDIRECT должен вызвать косвенный рендеринг к Вашему локальному X-серверу. Это, по-видимому, любой изменения kwinповедение (только OpenGL 1.4) или избегает некоторой другой ошибки.

Определенно Вы хотите удалить этот флаг, когда базовая проблема устраняется.

14
27.01.2020, 19:42
  • 1
    Как Примечание: Другие пользователи могут делать это с Nvidia, с: __ GL_ALLOW_UNOFFICIAL_PROTOCOL... Я использую это для Уэйленда сессии гнома (3.18) удаленное подтверждение концепции приложения. –  elika kohen 14.10.2015, 21:34

Теги

Похожие вопросы