Движок с нуля
Справочник

Драйвер видеокарты

Программа от производителя видеокарты (NVIDIA, AMD, Intel), через которую Windows и программы управляют видеокартой. В драйвере лежит готовый код всех функций OpenGL для этой видеокарты.

Драйвер ставит установщик производителя видеокарты или сама Windows через Windows Update. Отдельной установки OpenGL нет: драйвер видеокарты и есть то, что содержит код функций OpenGL. На компьютере с рабочим драйвером код OpenGL уже есть, и программе ничего ставить не нужно.

OpenGL — это описание: как функция называется, что принимает и что должна сделать. Код каждой функции, например glGenBuffers, пишет производитель видеокарты. Поэтому у видеокарт разных производителей это разный код с одним именем и одними параметрами. Какую версию OpenGL получит программа, зависит от версии драйвера, а не от Windows.

Файлы с кодом лежат на диске с момента установки драйвера. В программу код попадает, когда создаётся окно с OpenGL (glfwCreateWindow): Windows находит драйвер видеокарты, на которой окно будет рисовать, и подгружает код драйвера в программу.

После этого у драйвера можно спросить адрес любой функции. Загрузчик glad задаёт вопрос функцией wglGetProcAddress и записывает полученный адрес в указатель с именем функции. Вызов glGenBuffers(...) в коде программы идёт по адресу из этого указателя, то есть прямо в код драйвера. Указатель лежит в программе и ведёт в драйвер, а не наоборот.

Старые функции и opengl32.dll

Windows даёт программам файл opengl32.dll. В файле opengl32.dll лежат только заглушки самых старых функций OpenGL, версии 1.1 1997 года: вызов такой функции Windows сама передаёт драйверу. Функций новее в этом файле нет, поэтому для них нужен загрузчик, который берёт адреса у драйвера.

Две видеокарты в ноутбуке

В ноутбуке бывают две видеокарты, встроенная и дискретная, и у каждой свой драйвер. В программу подгружается драйвер той видеокарты, которую Windows выбрала для этой программы. Если нужна дискретная, программа просит об этом у системы.