вызывать функции OpenGL из другого потока - PullRequest
4 голосов
/ 01 февраля 2010

У моего приложения есть два потока: A и B. A - это основной поток, а B - мой поток с видео. Видеопоток имеет инициализированный контекст OpenGL, где функции OpenGL работают должным образом. Тем не менее, когда я вызываю функции OpenGL из потока A, функция завершается с ошибкой 1282 (GL_INVALID_OPERATION) Можно ли вызывать функции OpenGL из моего основного потока (A)?

Ответы [ 2 ]

11 голосов
/ 01 февраля 2010
  1. Если вы не выполняете реальный фоновый рендеринг медленного контента, это, вероятно, не даст вам снижения производительности.

  2. В Windows контексты open gl для каждого потока. Убедитесь, что вы вызываете wglMakeCurrent из вашего рабочего потока, прежде чем пытаться вызывать функции open gl.

  3. Open GL не является поточно-ориентированным. Если вы попытаетесь сделать один и тот же контекст текущим в нескольких потоках, это не остановит вас. Он просто взорвется.

3 голосов
/ 02 февраля 2010

GL - это , а не Thread Safe, и поэтому вы не можете вызывать функции GL из 2 разных потоков. Вам придется защищать каждую часть gl с помощью мьютексов, что убивает любое повышение производительности, которое вы ожидаете, плюс накладные расходы на блокировку мьютексов и, возможно, требуемое переключение контекста.

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