Зачем связывать объекты буфера OpenGL?

В OpenGL общей процедурой является привязка именованного объекта буфера (или объекта массива вершин, framebuffer, …), вызывать некоторые операции с текущим связанным объектом и затем связывать какой-то объект по умолчанию:

glBindBufferObject(GL_ARRAY_BUFFER, bufferObjectName) glBufferData(GL_ARRAY_BUFFER, data, GL_STATIC_DRAW) glBindBufferObject(GL_ARRAY_BUFFER, 0) 

(LWJGL в Котлине)

Я только что обнаружил, что для многих функций есть «именованная» версия. Пример сверху мог бы стать чем-то вроде

 glNamedBufferData(bufferObjectName, data, GL_STATIC_DRAW) 

что является более подходящим в объектно-ориентированном контексте.

Так зачем использовать что-то вроде первого примера? В каждом учебном пособии, на котором я натолкнулся, был использован первый подход, так же есть ли потеря производительности или аналогичные недостатки в «названном» подходе?

    Названные функции являются частью расширения ARB_direct_state_access которое было введено в OpenGL 4.5. До этого существовали только обычные методы.

    Основной причиной использования старой версии является таргетинг на оборудование перед OpenGL 4.5. Большинство учебных пособий также написаны в отношении старых версий OpenGL.