2016-08-09 2 views
0

Can I make opengl extension pointers global?에 대한 후속 작업으로 OpenGL 함수 포인터 전역 변수를 작성하는 방법에 대해 질문했습니다.Glew와 다중 OpenGL 컨텍스트 (작동합니까?)

Windows에서 함수 포인터는 하나의 단일 OpenGL 컨텍스트에서만 유효하다는 것이 지적되었습니다. 나는 그것을 위해 간단히 로더 라이브러리를 사용하기로 결정했다.

내가 모두 OpenGL을 웹 사이트에 추천 glewgl3w의 구현을 검토 한 결과, 그 중 둘은 단순히 전역 변수로 함수 포인터를 덤프하는 것 그리고 당신이 하나 이상있는 경우 그렇게 작동하지 않습니다 프로세스에서 윈도우/오픈 GL 컨텍스트.

여기에 뭔가가 누락되었거나 프로세스에서 OpenGL을 사용하는 창이 둘 이상일 경우이 라이브러리를 사용하지 않을 수 있습니까?

+4

GLEW MX를 사용하십시오. GLFW와 함께 사용하는 방법에 대한 자습서 : https://blog.gvnott.com/2013/05/18/tutorial-multiple-windows-with-glfw3-and-glew-mx/ – Mars

+0

@Mars : MX를 중단했습니다. [지난 달 GLEW 2.0.0에서] (http://glew.sourceforge.net/log.html). – genpfault

+0

2 개의 윈도우/컨텍스트가 반드시 2 개의 다른 구현 일 필요는 없습니다. 동일한 하드웨어에서 실행중인 경우 확장 프로그램의 절차가 동일한 장소로 이동 될 가능성이 큽니다. 이 문제에 정말로 관심이 있다면 각각의 컨텍스트에 하나의 스레드를 할당하고 스레드 로컬 저장소를 사용하여 함수 포인터를 저장할 수 있습니다. 실제로 WGL 컨텍스트가 어떻게 작동하는지 효과적으로 나타냅니다. –

답변

1

이러한 라이브러리는 다중 컨텍스트에서 작동하지 않을 수도 있습니다.

그렇다고해서 그것이 이 아닙니다. 단지 다중 문맥에서 기능을 수행하는 데 필요한 것을 수행하지 않는다는 것입니다.

두 컨텍스트가 동일한 OpenGL 구현과 통신하지 않으면 일반적으로 실패합니다. 예를 들어, 하나의 컨텍스트와 별도의 그래픽 카드가있는 Intel 내장형 GPU가있는 경우입니다. 그러나 OpenGL ICD 드라이버 모델을 사용하면 다소 어려울 수 있습니다 (불가능하지는 않지만).