다음을 통해 공유


컨텍스트 함수 렌더링

다음 표에 설명된 대로 5개의 WGL 함수가 렌더링 컨텍스트를 관리합니다.

WGL 함수 설명
wglCreateContext 새 렌더링 컨텍스트를 만듭니다.
wglMakeCurrent 스레드의 현재 렌더링 컨텍스트를 설정합니다.
wglGetCurrentContext 스레드의 현재 렌더링 컨텍스트에 대한 핸들을 가져옵니다.
wglGetCurrentDC 스레드의 현재 렌더링 컨텍스트와 연결된 디바이스 컨텍스트에 대한 핸들을 가져옵니다.
wglDeleteContext 렌더링 컨텍스트를 삭제합니다.

 

wglCreateContext 함수는 디바이스 컨텍스트 핸들을 매개 변수로 사용하고 렌더링 컨텍스트 핸들을 반환합니다. 생성된 렌더링 컨텍스트는 디바이스 컨텍스트 핸들에서 참조하는 디바이스에 그리기에 적합합니다. 특히 해당 픽셀 형식은 디바이스 컨텍스트의 픽셀 형식과 동일합니다. 렌더링 컨텍스트를 만든 후 디바이스 컨텍스트를 해제하거나 삭제할 수 있습니다. 디바이스 컨텍스트 만들기, 가져오기, 해제 및 삭제에 대한 자세한 내용은 디바이스 컨텍스트를 참조하세요.

참고 항목

wglCreateContext전송되는 디바이스 컨텍스트는 디스플레이 디바이스 컨텍스트, 메모리 디바이스 컨텍스트 또는 픽셀당 4비트 이상을 사용하는 컬러 프린터 디바이스 컨텍스트여야 합니다. 디바이스 컨텍스트는 단색 프린터 디바이스 컨텍스트일 수 없습니다.

 

wglMakeCurrent 함수는 렌더링 컨텍스트 핸들과 디바이스 컨텍스트 핸들을 매개 변수로 사용합니다. 스레드에서 수행한 모든 후속 OpenGL 호출은 해당 렌더링 컨텍스트를 통해 이루어지며 해당 디바이스 컨텍스트에서 참조하는 디바이스에 그려집니다. 디바이스 컨텍스트는 렌더링 컨텍스트를 만들 때 wglCreateContext전달된 것과 동일할 필요는 없지만 동일한 디바이스에 있어야 하며 동일한 픽셀 형식이어야 합니다. wglMakeCurrent에 대한 호출은 제공된 렌더링 컨텍스트와 디바이스 컨텍스트 간에 연결을 만듭니다. 렌더링 컨텍스트를 최신이 아닌 상태로 만들 때까지 현재 렌더링 컨텍스트와 연결된 디바이스 컨텍스트를 해제하거나 삭제할 수 없습니다.

스레드에 현재 렌더링 컨텍스트가 있으면 OpenGL 그래픽을 호출할 수 있습니다. 모든 호출은 렌더링 컨텍스트를 통과해야 합니다. 현재 렌더링 컨텍스트가 없는 스레드에서 OpenGL 그래픽을 호출하면 아무 일도 발생하지 않습니다.

wglGetCurrentContext 함수는 매개 변수를 사용하지 않고 호출 스레드의 현재 렌더링 컨텍스트에 대한 핸들을 반환합니다. 스레드에 현재 렌더링 컨텍스트가 없으면 반환 값은 NULL입니다.

wglGetCurrentDC를 호출하여 스레드의 현재 렌더링 컨텍스트와 연결된 디바이스 컨텍스트에 대한 핸들을 가져오면 렌더링 컨텍스트가 최신 상태가 될 때 연결이 만들어집니다.

두 핸들 중 하나를 사용하여 wglMakeCurrent를 호출하여 현재 렌더링 컨텍스트와 스레드 간의 연결을 끊을 수 있습니다.

  • null 렌더링 컨텍스트 핸들
  • 원래 호출된 핸들이 아닌 핸들

렌더링 컨텍스트 핸들 매개 변수가 NULL로 설정된 wglMakeCurrent호출한 후 호출 스레드에는 현재 렌더링 컨텍스트가 없습니다. 렌더링 컨텍스트는 스레드에 대한 연결에서 해제되고 렌더링 컨텍스트와 디바이스 컨텍스트의 연결이 종료됩니다. OpenGL은 모든 그리기 명령을 플러시하고 일부 리소스를 해제할 수 있습니다. 스레드가 현재 렌더링 컨텍스트를 되찾을 때까지 OpenGL 그래픽 호출을 수행할 수 없으므로 wglMakeCurrent에 대한 다음 호출까지 OpenGL 그리기가 수행되지 않습니다.

렌더링 컨텍스트와 스레드 간의 연결을 끊는 두 번째 방법은 다른 렌더링 컨텍스트를 사용하여 wglMakeCurrent를 호출하는 것입니다. 이러한 호출 후에는 호출 스레드에 새 현재 렌더링 컨텍스트가 있고, 이전의 현재 렌더링 컨텍스트가 스레드에 대한 연결에서 해제되고, 이전의 현재 렌더링 컨텍스트와 디바이스 컨텍스트의 연결이 종료됩니다.

wglDeleteContext 함수는 삭제할 렌더링 컨텍스트에 대한 핸들인 단일 매개 변수를 취합니다. wglDeleteContext를 호출하기 전에 wglMakeCurrent를 호출하여 렌더링 컨텍스트를 최신이 아닌 상태로 만들고 DeleteDC 또는 ReleaseDC를 적절하게 호출하여 연결된 디바이스 컨텍스트를 삭제하거나 해제합니다.

스레드가 다른 스레드의 현재 렌더링 컨텍스트인 렌더링 컨텍스트를 삭제하는 것은 오류입니다. 그러나 렌더링 컨텍스트가 호출 스레드의 현재 렌더링 컨텍스트 인 경우 wglDeleteContext 는 모든 OpenGL 그리기 명령을 플러시하고 렌더링 컨텍스트를 삭제하기 전에 현재 컨텍스트가 아닌 상태로 만듭니다. 이 경우 wglDeleteContext를 사용하여 렌더링 컨텍스트를 최신이 아닌 상태로 만들려면 프로그래머가 연결된 디바이스 컨텍스트를 삭제하거나 해제해야 합니다.