Показаны сообщения с ярлыком кеширование состояний OpenGL. Показать все сообщения
Показаны сообщения с ярлыком кеширование состояний OpenGL. Показать все сообщения

суббота, 5 ноября 2011 г.

Машина состояний OpenGL. Часть третья, OGLStateEmul.


Итак, передо мной стояло три проблемы:
  1. Реализовать механизм кеширования;
  2. Обеспечить взаимодействие со сценой во избежании конфликтов;
  3. Решить "Социальную" проблему с ленивыми программистами.
"Социальная" проблема стояла очень остро, так как 100% моего кода было написано на чистом OpenGL, без использования старого механизма работы со стэйтами. Таким образом, что бы я не придумал, мне пришлось бы править весь код, потом еще и обучать других, которые только освоили систему кеширования сцены, своей "новой" системе... Само же кеширование это задача тривиальная, но очень емкая, так как нужно описать логику работы каждой команды ОГЛ, меняющей состояния (и не только, но об этом дальше).

Машина состояний OpenGL. Часть вторая, кеширование.

Чтоб понять что не так с кешированием в сцене (и чтоб не допустить тех же ошибок) нужно разобраться как оно там устроено, для этого достаточно заглянуть в файл "glState.pas", давайте заглянем.

пятница, 4 ноября 2011 г.

Машина состояний OpenGL. Часть первая, знакомство.

"OpenGL – это машина состояния. Вы задаете различные переменные состояния, и они остаются в действии, сохраняя свое состояние, до тех пор, пока вы же их не измените."

Примерно такое определение можно найти  в первых главах любого учебника по OpenGL.
Если открыть любую публикацию, посвященную повышению производительности графики в OpenGL, к примеру любую из этих:
http://www.cs.virginia.edu/~gfx/Courses/2004/RealTime/Performance-Optimisation.pdf
http://developer.amd.com/media/gpu_assets/PerformanceTuning.pdf
http://developer.amd.com/media/gpu_assets/KRI%202006-OpenGL%20optimizations.pdf
то можно найти описание одной из самых популярных проблем падения производительности - "too many state changes", что дословно переводится как "слишком много переключений состояний", тех самых состояний, на каких основана работа всего OpenGL.

Если углубиться в чтение этих (и многих других) публикаций, то можно найти простую рекомендацию - "уменьшайте количество переключений состояний". Казалось бы все очевидно, но разве мы специально вставляем лишние переключения? Откуда они берутся? И как мы можем их уменьшить?