Просьба отказаться от glBegin / glEnd , теперь , она устарела и была удалена из OpenGL-4. Вам определенно следует использовать массивы вершин, даже лучше, если вы используете объекты буфера вершин.
Используя непосредственный режим (glBegin / glEnd), драйвер OpenGL должен создавать массив вершин из вызовов функций. Поскольку неясно, сколько вершин поступит, в конечном итоге будет перераспределяться память несколько раз (времена, в которые графические процессоры непосредственно выполняли вызовы между glBegin / glEnd, давно прошли).
Использование массива вершин никогда не будет менее производительным, чем непосредственный режим. Можно поместить геометрию нескольких объектов в один массив вершин, вы можете разделить их через списки индексов вершин. Списки индексов вершин также могут храниться в буферных объектах.
Затем между рисованием объектов настройте матрицу вида модели.
Порядок сортировки должен быть следующим:
- разделить на непрозрачные и полупрозрачные объекты. Сортировать непрозрачные
- Сортировка opqaues по объектам GL (текстура, шейдер, материалы и т. Д.), Поскольку переключение объектов GL является наиболее дорогим.
- Для каждой отдельной группы объектов GL сортируйте рядом с дальним и рисуйте в этом порядке
- Сортировка полупрозрачных далеко и близко и рисовать в этом порядке
Вы не должны пытаться возиться с загрузкой / загрузкой буфера. Просто загрузите данные вершин один раз, а затем просто настройте индексные массивы и порядок их отправки. Не нужно беспокоиться о доступной памяти OpenGL, нет никаких ограничений. Если ваши данные не помещаются в ОЗУ GPU, драйвер отвечает за их замену в системной памяти - поэтому вам также следует сначала отсортировать объекты OpenGL, поскольку каждый раз, когда вы переключаете объекты OpenGL (glBindTexture, glBindBuffer и т. Д.), Драйвер может нужно поменять местами, так что вы хотите свести к минимуму эти операции обмена. Объем данных, отправляемых в графический процессор в виде индексных массивов, будет намного меньше, чем тот, который отправляется при вызовах в непосредственном режиме, как минимум: