메시지 루프가 포함 된 별도의 스레드에서 창을 만든 다음 다른 스레드에서 OpenGL 컨텍스트를 만드는 데 문제가 있습니까?Win32 Message Loop, 다른 스레드의 OpenGL 컨텍스트
0
A
답변
4
주의가 필요한 경우 제대로 작동해야합니다. parallel opengl faq을 참조하십시오. 당신이 원하는 무엇
Q: Why does my OpenGL application crash/not work when I am rendering from another thread? A: The OpenGL context is thread-specific. You have to make it current in the thread using glXMakeCurrent, wglMakeCurrent or aglSetCurrentContext, depending on your operating system.
0
완벽하게 가능하다. 심지어 OpenGL 컨텍스트는 스레드간에 마이그레이션 할 수 있으며 픽셀 형식이 호환되는 한 여러 개의 창과 함께 사용할 수도 있습니다. 하나의 제약은 한 번에 오직 하나의 스레드에서만 OpenGL 컨텍스트를 바인딩 할 수 있고 언 바운드 컨텍스트 만 바인딩 할 수 있다는 것입니다.
하나의 스레드에서 창과 컨텍스트를 만든 다음 컨텍스트의 바인딩을 해제하고 다른 스레드를 만들고 보조 스레드의 창에 컨텍스트를 다시 바인딩 할 수도 있습니다. 문제 없습니다.
당신이 알아야 할 유일한 사실은 OpenGL 자체가 멀티 스레드되는 것을 좋아하지 않는다는 것입니다. 한 번에 하나의 컨텍스트 만 스레드에 바인딩 될 수 있기 때문에 API 자체가 스레드 안전성을 유지합니다. 그러나 OpenGL 연산이 여러 스레드에서 생성되어 불쾌한 드라이버 버그를 일으키고 특정 성능에 영향을 미칠 경우 모든 부기가 필요합니다.
관련 문제
- 1. Android Message in loop
- 2. 다른 스레드의 OpenGL 다시 그리기
- 3. 현재 실행중인 .NET 스레드와 Win32 스레드의 차이점
- 4. Android : 여러 스레드의 OpenGL
- 5. Window가없는 Win32 장치 컨텍스트
- 6. glut에서 OpenGL 컨텍스트
- 7. 다른 스레드의 Win32 Dll에서 C# Panel의 HWND를 사용 하시겠습니까?
- 8. Win32 API 렌더러 스레드 및 OpenGL
- 9. Python의 Tkinter OpenGL 컨텍스트
- 10. 유효한 OpenGL 컨텍스트
- 11. 콘솔의 openGL 컨텍스트
- 12. Mac에서 OpenGL 컨텍스트
- 13. 핵심 데이터 - 다른 스레드의 컨텍스트 병합에 이상한 예외
- 14. OpenGL 컨텍스트에서 Win32 위젯 렌더링
- 15. 다른 스레드의 OpenGL ES가 실제 장치에 그려지지 않습니다.
- 16. GUI 스레드의 컨텍스트 여야하는 이유는 무엇입니까?
- 17. 리소스 초기화 및 OpenGL 컨텍스트
- 18. 다른 버전의 다중 컨텍스트
- 19. 얻기 서비스에 의해 호출 스레드의 컨텍스트
- 20. Emacs 버퍼 내의 OpenGL 컨텍스트
- 21. Qt로 현재 OpenGL 컨텍스트 잡기
- 22. iPhone에서 보조 스레드의 OpenGL 결과가 표시되지 않습니다.
- 23. 다른 Windows 프로세스에서 스레드의 현재 로캘을 가져옵니다.
- 24. 전체 화면에서 최소화 처리 Win32 OpenGL
- 25. 다른 스레드의 DoDragDrop()
- 26. 다른 스레드의 glutPostRedisplay
- 27. 다른 스레드의 BitmapFrame
- 28. 다른 스레드의 콜백
- 29. 다른 스레드의 UI 업데이트
- 30. 다른 스레드의 새로운 형식
창이 별도의 스레드에서 생성되는 반면, 컨텍스트는 그리기가 수행되는 주 스레드에서 만들어집니다. 문맥을 최신으로 만드는 것이 필요한가? – user1920731
하나의 스레드에서 모든 OpenGL 자료를 처리하는 한 내 추측은 아닐 것입니다. –