Всем привет, возник следующий вопрос. Можно ли как-то ускорить вывод графики через glBegin/glEnd или это совсем гиблый способ? Имеется довольно много объектов, которые следует вывести, и данный метод заметно тормозит, причем тормоза сильно отражаются и на процессоре. Насколько я знаю, при вызове данных функций данные передаются из оперативной памяти в видеопамять по довольно медленному соединению. Также, знаю, что лучше использовать VBO для ускорения вывода графики.
С VBO тоже проблемы. Знаю о нескольких типах буферов, из которых меня в данном контексте волнуют только буферы вершин, цветов и текстурных координат. Возникает законный вопрос, как среди тысяч прямоугольников, передаваемых в массиве, каждому из них назначить свою текстуру? Как повернуть каждый из них (замена glRotateF), как масштабировать (замена glScaleF), как задавать стиль наложения (glBlendFunc)?
Если предположить, что все вышеперечисленные вопросы решены, то возникает еще один - по организации простого движка, поддерживающего VBO. Допустим, у нас есть множество прямоугольников с текстурами, параметры которых меняются на каждом кадре. Те же боевые единицы в какой-нибудь игре. Есть ли смысл на каждом кадре полностью пересоздавать все буферы или надо менять все эти значения прямо в памяти? Мне подобный метод видится со следующей реализацией:
1. Вызываем метод Draw движка для очередного прямоугольника. Передаем в него все необходимые параметры: Номер текстуры, Координаты (допустим, центра), Размеры, Угол поворота, Цвет, Прозрачность.
2. Движок добавляет координаты и иные параметры переданного прямоугольника в массив, сортирует их по нескольким массивам. На этом этапе, опять же, встают вопросы про использование таких параметров, как, например, угол поворота.
3. При вызове функции Redraw движка созданные массивы посылаются в память в качестве буферов и рисуются.
4. Также, при вызове некоторых других функций производится принудительная передача массивов в память, их рисование и очистка. К таким функциям относится, например, смена масштаба сцены (glScaleF), если предположить, что объекты, рисуемые с одним масштабом, передаются группами, друг за другом. Также, к таким функциям можно отнести glBlendFunc - для смены стиля наложения текстуры.
В общем, интересуют все идеи по данной теме. Заранее спасибо.