Операция выполнена!
Закрыть
Хабы: C++, Программирование, Разработка игр

Попробуйте найти в этой строке буфер, который она изменит:

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. Вот что рисует программа:

Читать далее
Читайте также
НОВОСТИ

ПИШИТЕ

Техническая поддержка проекта ВсеТут

info@vsetut.pro