Действительно ли безопасно выполнить вызовы GL с несколькими потоками?

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

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

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

5
задан genpfault 23 August 2011 в 20:28
поделиться

2 ответа

Ответ на вопрос "Могут ли 2 потока выполнять один и тот же обратный вызов одновременно, если этот обратный вызов не обращается к глобальным переменным?" однозначно ДА.

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

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

1
ответ дан 15 December 2019 в 06:17
поделиться

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

2
ответ дан 15 December 2019 в 06:17
поделиться