2010-02-01 3 views
4

내 응용 프로그램에는 A와 B 두 개의 스레드가 있습니다. A는 기본 스레드이고 B는 내 비디오 스레드입니다. 비디오 스레드에는 OpenGL 함수가 제대로 작동하는 초기화 된 OpenGL 컨텍스트가 있습니다. 그러나 스레드 A에서 OpenGL 함수를 호출 할 때 함수가 1282 오류 (GL_INVALID_OPERATION)로 실패했습니다 내 주 스레드 (A)에서 OpenGL 함수를 호출 할 수 있습니까?다른 스레드에서 OpenGL 함수를 호출하십시오.

+0

왜 그렇게하고 싶은지 잘 모르겠습니다. 제발 좀 더 자세히 설명해주세요. – batbrat

답변

10
  1. 느린 콘텐츠의 실제 배경 렌더링을 수행하지 않는 한, 이는 아마도 성능 델타를 제공하지 않을 것입니다.

  2. Windows에서 열린 gl 컨텍스트는 스레드 당 있습니다. 열린 gl 함수를 호출하기 전에 작업자 스레드에서 wglMakeCurrent를 호출해야합니다.

  3. Open GL은 스레드로부터 안전하지 않습니다. 동일한 문맥을 여러 스레드에 대해 현재 상태로 만들려고해도 스레드가 멈추지 않습니다. 그것은 단지 폭발 할 것입니다.

+0

다른 스레드에서 호출 된 이후 텍스처 ID를 만들지 못했던 같은 문제 glGenTexture()가있었습니다. 일부 방어 수표가 추가되었습니다. glGetError() *가 작동하는 것처럼 보였지만주의를 기울였습니다. 그러나, 그것은 오류를 해결하지 못했고, 나는 무한 루프에 갇혀있다. while (glGetError()) {...} 절대로 끝나지 않았습니다. –

3

GL은하지 스레드 안전 이며, 따라서 당신이 개 다른 스레드에서 GL 함수를 호출 할 수 없습니다. 뮤텍스를 사용하여 각 gl 부분을 보호해야합니다. 그러면 예상되는 성능 향상과 뮤텍스 잠금 및 아마도 필요한 컨텍스트 스위칭 오버 헤드가 발생합니다.

관련 문제