Введение

OpenGL Performer, ранее известный как IRIS Performer и обычно называемый просто Performer, — это коммерческая библиотека вспомогательного кода, построенная на основе OpenGL для обеспечения работы приложений визуального моделирования в режиме реального времени. OpenGL Performer был разработан компанией SGI, которая продолжает его поддерживать и совершенствовать. OpenGL Performer доступен для IRIX, Linux и нескольких версий Microsoft Windows. Предоставляются привязки как для ANSI C, так и для C++.

История

Performer появился в 1991 году, когда группа разработчиков из проекта Open Inventor компании SGI, ранее известного как IRIS Inventor, решила сосредоточиться на производительности, а не на простоте программирования. В то время как Inventor предоставлял простые в использовании объекты и различные элементы пользовательского интерфейса для взаимодействия с ними, Performer был ориентирован на систему графа сцен, которую можно было динамически перестраивать для повышения производительности, позволяя выполнять различные этапы рендеринга параллельно в нескольких потоках. Performer позволял сцене описывать уровни детализации с использованием гистерезисных диапазонов и эффектов плавного исчезновения. Велась статистика по частоте кадров и производительности, а также рассчитывался коэффициент "нагрузки". Его можно было использовать для дальнейшей настройки уровня детализации сцены, упрощая её для поддержания целевой частоты кадров. Ключевыми особенностями Performer были использование возможностей симметричной многопроцессорной обработки, поддержка нескольких графических конвейеров и возможность использования масштабируемых ресурсов высокопроизводительных систем. При этом, учитывая лежащую в основе сложность, Performer был относительно прост в использовании. Отсечение и рендеринг приложений могли выполняться в разных потоках, привязанных к разным физическим процессорам. В конфигурации с несколькими графическими конвейерами (несколькими графическими подсистемами) рендеринг для каждого конвейера выполнялся в выделенном потоке, а отсечение – на выделенном процессоре. Продвинутые функции, такие как страничная организация базы данных, страничная организация текстур, управление точечными источниками света (для авиасимуляторов) и тестирование пересечений для обнаружения столкновений, также использовали выделенные процессоры, что позволяло осуществлять асинхронный ввод-вывод и обработку без снижения производительности графики. Большая часть этой сложности была скрыта за более простым API графа сцен с относительно высокоуровневыми вызовами конфигурации, которые можно было использовать для настройки потоков и межпроцессного взаимодействия. Performer не имел собственного формата файла, а использовал загрузчики плагинов от сторонних разработчиков, например, загрузчик формата OpenFlight от MultiGen. Также не было стандартной среды выполнения, только примеры кода и часто используемое и модифицируемое демонстрационное приложение "perfly". Вероятно, это способствовало репутации Performer как сложного в использовании. К середине 1990-х годов стало очевидно, что нет причин не объединить Inventor и Performer. Это привело к проекту Cosmo 3D, в рамках которого SGI планировала создать как Inventor, так и Performer (фактически, API-адаптеры), а также продвигать их как новый, более высокоуровневый стандартизированный API для будущих разработок на платформе SGI. Однако после первого бета-релиза Cosmo 3D, SGI объединилась с Intel и IBM (а позже с DEC) для создания OpenGL++, по сути, улучшенной версии Cosmo. Этот проект был закрыт, когда SGI переключила внимание на почти идентичный проект с Microsoft под названием Fahrenheit, который также был отменен. Сегодня Inventor и Performer остаются отдельными продуктами, и ни одна из объединенных версий так и не была выпущена.

Особенности

Performer состоит главным образом из двух библиотек: libpr нижнего уровня и libpf более высокого уровня. Библиотека libpr предоставляет объектно-ориентированный интерфейс к высокоскоростным функциям рендеринга, основанный на концепциях pfGeoSet и pfGeoState. pfGeoSet – это набор графических примитивов, таких как полигоны или линии. pfGeoState инкапсулирует свойства, относящиеся к заданному pfGeoSet, такие как освещение, прозрачность и текстурирование. Библиотека libpf включает в себя функции для генерации и манипулирования иерархическими графами сцен, обработки сцен (задачи симуляции, пересечения, отсечения и отрисовки), управления уровнем детализации, асинхронной постраничной загрузки баз данных, динамических систем координат, моделей окружения, источников света и т.д. Эта библиотека также обеспечивает прозрачную поддержку нескольких окон просмотра, распределенных по нескольким графическим конвейерам. Другие библиотеки Performer – libpfutil, libpfdb, libpfui и др. – предоставляют функции для генерации оптимизированной геометрии, преобразования баз данных, ввода с устройств (например, для взаимодействия с внешними джойстиками и шинами mux MIL STD 1553), моделей движения, моделей коллизий и формат-независимого интерфейса базы данных, поддерживающего распространенные форматы данных, такие как Open Inventor, OpenFlight, Designer's Workbench, Medit и файлы Wavefront obj.