주 창이있는 응용 프로그램이 있습니다. 그것은 자신의 스레드와 OpenGL 컨텍스트를 가지고 있습니다. 이 응용 프로그램에는 소프트웨어 렌더링 텍스처를 만들고 업로드하기 위해 프로세서 당 하나의 작업자 스레드가 있습니다. 이것은 완벽하게 잘 작동합니다.단일 창 device_context, 다중 OpenGL 컨텍스트
제 걱정은 작업자 스레드의 OpenGL 컨텍스트가 주 창의 device_context로 생성된다는 것입니다. 따라서 이중 프로세서 시스템의 경우, 이는 3 개의 OpenGL 컨텍스트가 동일한 창 device_context에 바인드된다는 것을 의미합니다. 그것들은 모두 메인 윈도우 스레드에서 생성 된 다음 공유리스트가 호출되어 텍스처를 공유하게하고, 각각의 gl_context는 메인 윈도우 스레드를위한 하나의 스레드, 각 워커 스레드를위한 하나의 스레드에서만 활성화됩니다.
이전에 썼듯이 이것은 테스트 한 모든 컴퓨터에서 완벽하게 작동하지만 내가하고있는 일을 설명하는 문서는 보지 못했으며 내가하고있는 일이 잘되어 있다는 유일한 확인을 보았습니다. 이 링크에 대한 마지막 코멘트는 OpenGL multiple rendering contexts in one window입니다.
그래서 누군가가 이것이 모든 시스템에서 작동한다는 확인을 알기를 바랬습니다.
편집 : 이전에 언급 한 것을 잊어 버렸지 만 한 가지 문제가 있습니다. 두 작업자 스레드가 모두 wglmakecurrent (common_window_device_context, private_opengl_context)를 호출하면 그 중 하나가 glgeterror = GL_INVALID_OPERATION으로 실패합니다. 이 경우 솔루션은 sleep (1)을 호출하여 다른 스레드의 동일한 호출에 대한 시간을 허용하고 wglmakecurrent를 다시 호출 한 다음 모든 것이 매우 부드럽게 작동합니다. 적어도 테스트 한 모든 컴퓨터에서.
나는이 문제에 대한 해결책을 취하지 않겠다. 실제 임계 영역에서 두 스레드가 동시에이 작업을 수행하지 못하게하려고합니다. –
좋은 점은 금요일에 구현 한 빠른 수정으로 월요일에 할 수 있습니다. 그래도 주요 질문에 어떤 생각? 최소한의 자원을 사용하고 작동하는 것처럼 보이지만 ?? – Marladu