Я задавался вопросом, было ли безопасно выполнить вызовы GL с несколькими потоками. В основном я использую GLUtesselator и задавался вопросом, мог ли я разделить объекты вовлечь 4 и присвоить поток каждому.
Я просто задаюсь вопросом, доставило ли это неприятности, так как tesselator использует функции обратного вызова. 2 потока могут выполнить тот же обратный вызов в то же время, что и долго, поскольку тот обратный вызов не получает доступ к глобальным переменным муравья?
Есть ли также другие способы, которыми я мог оптимизировать рисунок OpenGL с помощью многопоточности?
Ответ на вопрос "Могут ли 2 потока выполнять один и тот же обратный вызов одновременно, если этот обратный вызов не обращается к глобальным переменным?" однозначно ДА.
Однако у вас возникнут проблемы, если вы измените состояние OpenGL в ваших функциях обратного вызова, особенно при использовании glBegin / glEnd (например, если вы генерируете DisplayList). Пока вы не используете GPU (например, если вы используете сетку), вы можете выполнять тесселяцию с помощью многопоточности.
Если вы хотите оптимизировать отрисовку, вы можете использовать геометрический шейдер для тесселяции. Для этого требуется Shader Model 4.
Читая между строк в вашем вопросе, ответ - нет. Вы не можете делать вызовы одного и того же контекста GL из разных потоков одновременно. Более подробную информацию вы можете найти в Parallel OpenGL FAQ.