OpenGL Performer , anteriormente conocido como IRIS Performer y comúnmente conocido simplemente como Performer , es una biblioteca comercial de código de utilidad construida sobre OpenGL con el propósito de habilitar aplicaciones de simulación visual en tiempo real . OpenGL Performer fue desarrollado por SGI . OpenGL Performer está disponible para IRIX , Linux y varias versiones de Microsoft Windows . Están disponibles enlaces ANSI C y C++ .
Performer surgió en 1991 cuando un grupo del proyecto Open Inventor de SGI , entonces conocido como IRIS Inventor, decidió centrarse en el rendimiento en lugar de en la facilidad de programación. Mientras que Inventor ofrecía objetos fáciles de usar y varios elementos de interfaz de usuario para interactuar con ellos, Performer se centró en un sistema de gráficos de escena que se podía reorganizar sobre la marcha por razones de rendimiento, lo que permitía que los distintos pasos de una tarea de renderizado se realizaran en paralelo en varios subprocesos . Performer permitía que la escena describiera niveles de detalle con bandas de histéresis y capacidades de atenuación. Se controlaban la velocidad de fotogramas y las estadísticas y se calculaba un factor de "estrés". Esto se podía utilizar para ponderar aún más el nivel de detalle en la escena eliminando detalles para mantener una velocidad de fotogramas objetivo.
Otras características clave de Performer fueron el uso de capacidades de multiprocesamiento simétrico , el soporte de múltiples canales gráficos y la capacidad de utilizar los recursos escalables de los sistemas de alta gama. En este sentido, Performer era realmente fácil de usar dada la complejidad subyacente. La selección y renderización de aplicaciones se podían ejecutar en diferentes subprocesos bloqueados en diferentes procesadores físicos. En una configuración de múltiples canales (múltiples subsistemas gráficos), la renderización en cada canal gráfico tendría un subproceso dedicado y, de manera similar, la selección también tendría un procesador dedicado. Las características avanzadas como la paginación de bases de datos, la paginación de texturas y la gestión de fuentes de luz puntuales (para simulación de vuelo) y las pruebas de intersección para la detección de colisiones también tendrían procesadores dedicados que permitieran que se produjeran E/S y procesamiento asincrónicos sin afectar negativamente al rendimiento gráfico. La mayor parte de esta complejidad estaba oculta debajo de una API de gráficos de escena más simple con llamadas de configuración de nivel relativamente alto que se podían realizar para configurar los subprocesos y la comunicación entre procesos.
Performer no tenía un formato de archivo nativo, solo cargadores de complementos de terceros, como el cargador de formato OpenFlight de MultiGen . De manera similar, no había un entorno de ejecución predeterminado, había un código de muestra y la aplicación de muestra "perfly", que se usaba y modificaba con frecuencia. Esto probablemente contribuyó a su reputación de ser difícil de usar.
A mediados de los años 90 empezó a quedar claro que no había ninguna razón por la que Inventor y Performer no pudieran combinarse. Esto condujo al proyecto Cosmo 3D, del que SGI tenía la intención de construir tanto Inventor como Performer (ahora esencialmente API shims ), así como promoverlo como una nueva API estandarizada de nivel superior para futuros trabajos en la plataforma SGI. Sin embargo, después de la primera versión beta de Cosmo 3D, SGI se unió a Intel e IBM (y más tarde a DEC ) para crear OpenGL++ , esencialmente una versión limpia de Cosmo. Este proyecto murió cuando SGI centró su atención en un proyecto casi idéntico con Microsoft conocido como Fahrenheit , que también fue cancelado. Hoy en día, Inventor y Performer siguen siendo productos separados, y ninguna de las versiones combinadas vio la luz del día.
Performer consta principalmente de dos bibliotecas: libpr, de nivel inferior , y libpf, de nivel superior . La biblioteca libpr proporciona una interfaz orientada a objetos para funciones de renderizado de alta velocidad basadas en el concepto de pfGeoSet y pfGeoState . Un pfGeoSet es una colección de primitivas gráficas, como polígonos o líneas. Un pfGeoState encapsula propiedades pertenecientes a un pfGeoSet determinado, como iluminación, transparencia y texturas.
La biblioteca libpf incluye funciones para la generación y manipulación de gráficos de escenas jerárquicos, procesamiento de escenas (simulación, intersección, selección y tareas de dibujo), gestión del nivel de detalle, paginación de bases de datos asincrónica, sistemas de coordenadas dinámicos, modelos de entorno, puntos de luz, etc. Esta biblioteca también proporciona soporte transparente para múltiples ventanas gráficas distribuidas en múltiples canales de gráficos.
Otras bibliotecas Performer (libpfutil, libpfdb, libpfui, etc.) proporcionan funciones para generar geometría optimizada, conversión de bases de datos, entrada de dispositivos (como para interactuar con flyboxes externos y buses mux MIL-STD-1553 ), modelos de movimiento, modelos de colisión y una interfaz de base de datos independiente del formato que admite formatos de datos comunes como Open Inventor , OpenFlight , Designer's Workbench, Medit y archivos .obj de Wavefront .