Может ли glGetError заблокировать поток? - PullRequest
1 голос
/ 17 января 2011

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

Я бы хотел запрашивать флаг ошибки с помощью вызова glGetError так часто, как это возможно, но я боюсьон может блокировать поток рисунка на более длительное время (на несколько мс).

Может ли вызов glGetError заблокировать поток, пока последняя команда opengl не будет обработана?узнать, была ли ошибка во время выполнения последней команды opengl?

Технические параметры: - Linux 2.6.20-1.21 - Nvidia Quadro NVS 285 - libGL.so.100.14.19

1 Ответ

4 голосов
/ 17 января 2011

Ничто в спецификации GL не гарантирует что-либо в отношении блокировки (или характеристик производительности в этом отношении).

Теперь, glGetError для большинства реализаций, которые я видел, на самом деле работает без какого-либо взаимодействия с оборудованием GPU, только с частью API на стороне драйвера. Короче говоря, он не должен блокировать (предостережение: подробности реализации).

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

Наконец, glxSwapBuffer, скорее всего, будет местом, где вы увидите, как происходит блокирование, потому что ваш графический процессор все еще занят рисованием предыдущих кадров (поэтому драйверы обычно выбирают эту точку, чтобы убедиться, что процессор не слишком далеко вперед).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...