Вы можете структурировать свой код так, как вам нравится. Да, команды OpenGL имеют процедурный императивный стиль, но вы можете создавать свои собственные абстракции, например, объектно-ориентированный стиль поверх них. Таким образом, у вас может быть объект куба с определенными свойствами, а затем метод рисования, использующий команды OpenGL для рисования куба с этими свойствами.
Например, наша 2D-библиотека, построенная поверх OpenGL, имеет слои в качестве объектов, и эти слои образуют иерархию слоев, где каждый слой просто отвечает за рисование самого себя и применение преобразований, так что они применяются к дочерним слоям. Таким образом, например, мы можем легко создавать сложные формы из простых слоев фигур (круги, прямоугольники, выпуклые многоугольники, изображения ...) и вращая родительский слой, дочерние слои вращаются правильно как одна сложная форма.