- Оптимизировал много, кеширование (почти по любому поводу).
- Минимизация переключений (пока без каких либо сортировок) между VBO, Program (шейдерами), стейтами и др. сущностями.
- Сделал формат для Program с описанием аттрибутов и униформ для шейдеров.
- Если mesh и установленный на entity program оба поддерживают тот или иной аттрибут (позиция, нормаль, цвет, текстурные координаты, и т.д.), то они будут автоматически подставлены. Таким образом всё что нужно знать, это описание формата данных вершины (смещение по байтам, и какие сами данные). Таким образом отлично можно совмещать разные типы данных вершин, минимум только позиция, и далее уже хоть все из доступных.
Т.к. в планах простой формат с оптимизациями, и поддержкой разных типов данных (когда не нужны нормали, хранить их нету смысла).
Минимум трансформаций. Пока только глобальные (Translate, Position, Rotate, Turn), при этом матрица пересчитывается только при наличии обновления.
Вот с матрицами у меня немного косяк пока - недостаток тупо информации. Вот в нете нашёл много инфы о том как они работают, а в плане как организуют систему трансформаций в движках, и совмещают глобальные и локальные - тупо не нашёл..
ЗЫ, 1500 цветных кубиков - примерно 40 фпс на x10i (с использованием VBO).
500 кубиков с произвольными кубиками и directional light shading, выдаёт около 50 фпс на том же девайсе.
Скрины с планшета (Asus Transformer 101).