Добрый день
Задача ускорить OpenGL отрисовку используя технику VBO. Идея в том чтобы при рисовании не передавать всякий раз данные CPU->GPU, а загрузить их в GPU один раз и затем юзать. Данные - простые линейные контейнеры, напр
C++ (Qt)
vector <float> coord1;
vector <int> indices1;
...
vector <float> coord2;
vector <float> coord3;
vector <int> indices2;
...
С помощью OpenGL API можно передать напр coord1 в карту и получить уникальный ID (типа как handle в Вындоуз). Это работает и действительно заметно ускоряет отрисовку.
Проблема в том что контейнеры (подлежащие кешированию) разбросаны в приложении в десятках (если не больше) мест и могут приходить на рисование всяко-разно. В простейшем случае есть 3D объект, он ссылается на структуру, скажем, Base, а в ней уже нужные для рисования контейнеры. Неск объектов могут шарить один Base. Однако если пользователь заказал модификацию объекта - то для рисования он уже часть контейнеров использует своих. При этом объект может быть удален или выключен временно. Если данные контейнера меняются - VBO кеш должен быть перегружен. Зависит и от режима рисования - те или иные данные используются. И наконец есть мерзкое исключение: в одном из режимов рисовалка создает временные контейнеры (на основании исходных) и их уже рисует.
Пока мне не удается удачно "поселить" ID, ф-ционал кеша неприятно проникает в десятки мест. Ваше мнение?
Спасибо