2017-12-26 21 views
1

두 개의 OpenGL 렌더링 스레드가있는 경우 각 스레드는 컨텍스트 설정 패턴을 가지며 고정 된 프레임 속도로 그리기를 수행합니다. 경주가 있을까요?wglMakeCurrent, Drawing 및 Multithreading이 레이스를 유발합니까?

나는 다음과 같은 일이 일어날 것을 걱정 :

  1. 스레드 1 개 통화
  2. 스레드는이 호출 스레드 2 스레드 1 회전에서

을 그립니다

  • 립니다
  • wglMakeCurrent wglMakeCurrent 두 스레드는 두 번째 스레드의 컨텍스트에서 그립니다.

    렌더링 컨텍스트를 설정할 때마다 잠금을 사용해야하며 조작이 다른 렌더링 스레드와 간섭하지 않도록해야합니까?

  • +0

    더 details.https에 대한 내 대답을 참조하십시오 : //stackoverflow.com/questions/47918078/creating-opengl-structures-in-a-multithreaded-program/47921647#47921647 –

    답변

    0

    각 스레드마다 고유 한 컨텍스트가 있으면 두 스레드를 안전하게 그릴 수 있습니다.

    스레드간에 단일 컨텍스트를 공유하려는 경우에만 컨텍스트가 한 번에 하나의 스레드에서만 현재 상태인지 확인해야합니다. 최대

    documentationwglMakeCurrent() 세트 규칙 :

    스레드는 하나 현재 렌더링 컨텍스트를 가질 수 있습니다. 프로세스는 멀티 스레딩을 통해 여러 렌더링 컨텍스트를 가질 수 있습니다.

    스레드는 OpenGL 기능을 호출하기 전에 현재 렌더링 컨텍스트를 설정해야합니다. 그렇지 않으면 모든 OpenGL 호출이 무시됩니다.

    렌더링 컨텍스트는 한 번에 하나의 스레드에만 적용될 수 있습니다. 렌더링 컨텍스트를 여러 스레드에 대해 최신으로 만들 수 없습니다.

    응용 프로그램은 다른 렌더링 컨텍스트를 다른 스레드에 대해 최신으로 만들어 각 스레드에 자체 렌더링 컨텍스트와 장치 컨텍스트를 제공하여 다중 스레드 드로잉을 수행 할 수 있습니다.

    +0

    은/복원 저장할 암시 적으로 전환 스레드 않는다 스레드의 컨텍스트 렌더링? – Dmitry

    +0

    아 그렇습니다; [wglMakeCurrent 함수는 지정된 OpenGL 렌더링 컨텍스트를 호출 스레드의 현재 렌더링 컨텍스트로 만듭니다. "] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd374387(v=vs.85) .aspx) – Dmitry

    +0

    https://msdn.microsoft.com/en-us/library/windows/desktop/dd374387(v=vs.85).aspx의'wglMakeCurrent()'문서를 보시기 바랍니다. 비고 섹션 – sterin