2016-02-02 5 views
2

Я довольно новичок в OpenGL и использовал GLFW в сочетании с GLEW для создания и отображения контекстов OpenGL. Следующий фрагмент кода показывает, как я создаю окно и использую его для OpenGL.Где хранится контекст OpenGL?

GLFWwindow* window; 

if (!glfwInit()) 
{ 
    return -1; 
} 

window = glfwCreateWindow(1280, 720, "Hello OpenGL", NULL, NULL); 

if (!window) 
{ 
    glfwTerminate(); 
    return -1; 
} 

glfwMakeContextCurrent(window); 

GLenum err = glewInit(); 

if (err != GLEW_OK) 
{ 
    glfwTerminate(); 
    return -1; 
} 

Как glewInit состоянии принести окно/контекст и использовать его для инициализации без себя необходимости проходить какие-либо дополнительные аргументы для этого?

Я могу только представить, что когда мы вызываем функцию glfwMakeContextCurrent, она каким-то образом сохраняет контекст где-то в моем процессе для последующего использования, но ни одна документация не показывает это.

+0

По существу все функции OpenGL являются их указателями; glew «инициализирует» эти указатели так, что они ведут себя как функции, а на самом деле они просто ссылаются на уже загруженные в память функции. Дело в том, что glew не является жизнеспособным API, потому что он обеспечивает небольшие накладные расходы и не охватывает все в OpenGL. Лучше всего использовать что-то более современное, как 'glbinding'. – Poriferous

ответ

3

Текущий контекст OpenGL является глобальным (или более точным, thread_local) «переменной». Все функции OpenGL действуют на любой контекст, который активен в текущем потоке.

Это включает вызовы OpenGL, которые делает GLEW.

Смежные вопросы