OpenGL은 상태 머신입니다. OpenGL 컨텍스트는 해당 상태를 유지합니다. 상태에는 어떤 텍스처가 어떤 텍스처 단위에 바인딩되어 있는지, 현재 FBO에 어떤 첨부 파일이 있는지 등의 정보가 포함됩니다.
현재 컨텍스트를 설정하면 모든 상태가 이전 컨텍스트에서 새 컨텍스트로 전환됩니다. 예를 들면 다음과 같습니다.
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
이것이하는 일은 window1
현재 의 맥락을 만듭니다 . 그런 다음 2D 텍스처 유닛을 활성화하고 바인딩 texture1
합니다.
다음은 window2
현재 의 맥락을 만듭니다 . 활성화 된 상태를 확인 GL_TEXTURE_2D
해야하는 경우 (이전에 window2
컨텍스트 에서 활성화하지 않은 경우) false 입니다. 마찬가지로 어떤 텍스처가 2D 텍스처 단위에 바인딩되어 있는지 확인하면 바인딩 된 텍스처가 없거나 바인딩되지 않은 텍스처가있을 수 texture1
있습니다.
기본적으로 모든 드로잉은 현재 컨텍스트에서 발생합니다. 다른 컨텍스트를 현재로 만들면 이제 모든 컨텍스트에서 해당 그리기가 수행됩니다.
다중 스레드 OpenGL 응용 프로그램에서 스레드 당 단일 컨텍스트를 갖는 것이 일반적입니다. 그렇게하면 각 스레드가 자체 컨텍스트로 그려지고 다른 스레드의 컨텍스트 상태를 엉망으로 만들지 않습니다.