Безопасно ли делать вызовы GL с несколькими потоками? - PullRequest
5 голосов
/ 02 июня 2010

Мне было интересно, было ли безопасно делать вызовы GL с несколькими потоками. В основном я использую GLUtesselator, и мне было интересно, смогу ли я разделить объекты для рисования на 4 и назначить поток для каждого.

Мне просто интересно, не вызовет ли это проблемы, поскольку тесселятор использует функции обратного вызова. Могут ли 2 потока одновременно выполнять один и тот же обратный вызов, если этот обратный вызов не имеет доступа к глобальным переменным ant?

Существуют ли другие способы оптимизации рисования OpenGL с использованием многопоточности?

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

Читая между строк в вашем вопросе, ответ - нет.Вы не можете одновременно вызывать один и тот же GL-контекст из разных потоков.Вы можете найти более подробную информацию в Parallel OpenGL FAQ .

1 голос
/ 02 июня 2010

Ответ на вопрос «Могут ли 2 потока запустить один и тот же обратный вызов одновременно, если этот обратный вызов не имеет доступа к глобальным переменным ant?» Ясно ДА.

Однако у вас будут проблемы при изменении состояния OpenGL в функциях обратного вызова, особенно при использовании glBegin / glEnd (например, если вы генерируете DisplayList). Пока вы не используете графический процессор (например, если вы используете сетку), вы можете выполнять тесселяцию с многопоточностью.

Если вы хотите оптимизировать свой чертеж, вы можете вместо этого использовать геометрический шейдер для тесселяции. Для этого требуется Shader Model 4.

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