OpenGL Performer , ранее известный как IRIS Performer и обычно называемый просто Performer , представляет собой коммерческую библиотеку служебного кода, построенную поверх OpenGL для целей включения приложений визуального моделирования в жестком реальном времени . OpenGL Performer был разработан SGI . OpenGL Performer доступен для IRIX , Linux и нескольких версий Microsoft Windows . Доступны привязки как ANSI C , так и C++ .
Performer появился в 1991 году, когда группа из проекта SGI Open Inventor , тогда известного как IRIS Inventor, решила сосредоточиться на производительности, а не на простоте программирования. В то время как Inventor предоставлял простые в использовании объекты и различные элементы пользовательского интерфейса для взаимодействия с ними, Performer сосредоточился на системе графа сцены , которую можно было перестраивать на лету из соображений производительности, позволяя выполнять различные проходы задачи рендеринга параллельно в нескольких потоках . Performer позволял сцене описывать уровни детализации с помощью полос гистерезиса и возможностей затухания. Отслеживались частота кадров и статистика, а также рассчитывался фактор «стресса». Это можно было использовать для дальнейшего взвешивания уровня детализации в сцене, устраняя детали для поддержания целевой частоты кадров.
Другими ключевыми особенностями Performer были использование симметричных многопроцессорных возможностей, поддержка нескольких графических конвейеров и возможность использования масштабируемых ресурсов высокопроизводительных систем. В этом отношении Performer был на самом деле прост в использовании, учитывая базовую сложность. Отбор и рендеринг приложений могли выполняться в разных потоках, привязанных к разным физическим процессорам. В конфигурации с несколькими конвейерами (несколько графических подсистем) рендеринг для каждого графического конвейера имел бы выделенный поток, и аналогично отбор также имел бы выделенный процессор. Расширенные функции, такие как подкачка базы данных, подкачка текстур и управление точечным источником света (для моделирования полета) и тестирование пересечения для обнаружения столкновений, также имели бы выделенные процессоры, что позволяло бы выполнять асинхронный ввод-вывод и обработку без отрицательного влияния на производительность графики. Большая часть этой сложности была скрыта под более простым API графа сцены с относительно высокоуровневыми вызовами конфигурации, которые можно было бы выполнять для настройки потоков и межпроцессного взаимодействия.
Performer не имел собственного формата файла, только плагины-загрузчики от третьих лиц, такие как загрузчик формата OpenFlight от MultiGen . Аналогично не было среды выполнения по умолчанию, был пример кода и часто используемый и часто изменяемый пример приложения 'perfly'. Это, вероятно, способствовало его репутации как сложного в использовании.
К середине 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 и т. д. — предоставляют функции для создания оптимизированной геометрии, преобразования баз данных, ввода данных с устройств (например, для взаимодействия с внешними Flybox и шинами мультиплексоров MIL-STD-1553 ), моделей движения, моделей столкновений и независимый от формата интерфейс базы данных, который поддерживает распространенные форматы данных, такие как Open Inventor , OpenFlight , Designer's Workbench, Medit и файл Wavefront .obj .