OpenGL - державна машина. Контекст OpenGL містить цей стан. Держава містить таку інформацію, як ті, які текстури прив’язані до яких текстурних одиниць, які вкладення має поточне FBO тощо.
Встановлюючи поточний контекст, ви перемикаєте весь стан зі старого контексту на новий. Ось приклад:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
Що це робить, це робить контекст window1
поточним. Потім він дозволяє 2D текстуру блоку і зв'язується texture1
з ним.
Далі це робить контекст window2
поточного. Якби ви перевіряли включений стан, GL_TEXTURE_2D
це було б помилково (якщо ви раніше не вмикали його в window2
контексті). Так само, якщо ви перевірите, яка текстура пов'язана з одиницею текстури 2D, ви, ймовірно, не знайдете жодної текстури або якоїсь іншої текстури, ніж texture1
зв'язана.
В основному все малювання відбувається в поточному контексті. Якщо зробити поточний інший контекст, то все малювання тепер відбуватиметься в цьому контексті.
У багатопотоковому додатку OpenGL зазвичай є один контекст на потік. Таким чином кожна нитка втягується у власний контекст і не псує стан контекстів на інших потоках.