Depository of News

OpenGL 4.6 без glBind: Direct State Access на C++23

habrahabr.ru · world

Попробуйте найти в этой строке буфер, который она изменит: glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); Буфера в строке нет. Функция получает название гнезда GL_ARRAY_BUFFER и меняет тот буфер, который кто-то привязал к гнезду раньше: может быть, строкой выше, а может быть, в другой функции и в другом файле. На правиле «сначала привяжи, потом меняй» построены самые известные учебники OpenGL, потому что они рассчитаны на версию 3.3. На том же правиле держатся ошибки, о которых OpenGL не сообщает: настройка молча попадает не в тот объект. Начиная с OpenGL 4.5 привязывать объект ради настройки не нужно. В стандарт вошёл Direct State Access, сокращённо DSA: функции, которые получают объект первым аргументом. В статье я соберу на DSA квадрат с текстурой и индексами без единого glBindBuffer и glBindTexture и покажу на схемах, что при этом происходит внутри OpenGL. Код написан на C++23: к месту оказались std::expected , std::print , std::mdspan и новые диапазоны. Весь код статьи собран компилятором MSVC из Visual Studio 2026 с флагом /W4 без предупреждений и запущен на OpenGL 4.6. Вот что рисует программа: Читать далее

Read full article →