Articulo de referencia

OpenGL básico

Core OpenGL , o CGL , es la interfaz del sistema de ventanas Quartz de Apple Inc. para la implementación de la especificación OpenGL en OS X. CGL es análogo a GLX , que es la in...

Core OpenGL , o CGL , es la interfaz del sistema de ventanas Quartz de Apple Inc. para la implementación de la especificación OpenGL en OS X. CGL es análogo a GLX , que es la interfaz X11 para OpenGL, así como a WGL , que es la interfaz de Microsoft Windows para OpenGL.

Historia

Todas las interfaces del sistema de ventanas para OpenGL surgieron de la migración de la interfaz de programación de aplicaciones ( API ) de gráficos 3D propietaria de Silicon Graphics, IrisGL , a su forma actual de estándar abierto, OpenGL. Cuando se decidió convertir IrisGL en un estándar abierto, el principal cambio de diseño requerido fue hacer que esta API de gráficos estándar fuera independiente del sistema de ventanas. Por lo tanto, toda la lógica específica del sistema de ventanas se eliminó de IrisGL al migrar a OpenGL. La lógica del sistema de ventanas incluye cualquier mecanismo de eventos para recopilar información de dispositivos como teclados y ratones, así como cualquier lógica de ordenación o dimensionamiento de ventanas utilizada al dibujar en una interfaz de usuario moderna con ventanas. Además, toda la gestión interna de los búferes de memoria de las ventanas, a veces denominados superficies, también se eliminó de IrisGL para crear OpenGL.

Dado que OpenGL es independiente del sistema de ventanas, empresas como Apple deben asumir la responsabilidad de configurar y administrar las superficies utilizadas como destino para la renderización de OpenGL.

Características

Interfaces de sistemas de ventanas

En OS X, CGL es la capa base de las interfaces del sistema de ventanas para OpenGL. Tanto AGL (Apple Graphics Library) como Cocoa (API) (o AppKit) tienen interfaces para OpenGL y son capas de software lógicas que dependen de CGL para su funcionamiento. CGL y AGL son interoperables libremente. CGL y Cocoa pueden usarse conjuntamente; sin embargo, las clases de Cocoa pueden modificar implícitamente el estado de CGL. No se deben mezclar las llamadas a funciones de AGL y Cocoa.

La configuración de estas superficies se realiza mediante un proceso de selección de formato de píxel donde se combinan diferentes capas compatibles de información de renderizado para formar un framebuffer . Ejemplos de dichas capas son los búferes de color, los búferes de transparencia (alfa), los búferes de plantilla y los búferes de profundidad . La función CGL CGLChoosePixelFormat se utiliza para realizar esta comprobación de compatibilidad de búfer. CGLChoosePixelFormat, en función de los parámetros de entrada y su política de puntuación, elegirá un formato de píxel que represente una configuración de búfer compatible que sea admitida por el renderizador subyacente que se utilizará para procesar los comandos gráficos. Los renderizadores pueden ser de hardware, de modo que correspondan a las tarjetas gráficas instaladas en el sistema, o de software, donde la CPU principal del sistema se encarga de todo el procesamiento de comandos gráficos y el trabajo de rasterización final .

Cómo gestionar la heterogeneidad de Mac OS X

En Mac OS X, CGL también se encarga de gestionar la heterogeneidad de las instalaciones y configuraciones de dispositivos gráficos en sistemas Macintosh. Los ordenadores Macintosh pueden tener instalados varios monitores y tarjetas gráficas. En estas configuraciones, el escritorio del usuario puede virtualizarse (extenderse) o duplicarse en varios monitores conectados a varias tarjetas gráficas, que pueden ser o no del mismo fabricante.

Controlar la representación

Cuando los usuarios configuran su Macintosh para usar un escritorio virtualizado y arrastran ventanas de una pantalla a otra, CGL gestiona el estado gráfico de OpenGL que debe mantenerse sincronizado entre dispositivos para garantizar la coherencia en el procesamiento de comandos. Arrastrar una ventana a través del escritorio de una Macintosh entre dos pantallas diferentes compatibles con dos renderizadores distintos se conoce como "cambio de pantalla virtual".

CGL también proporciona un mecanismo para obtener información sobre el renderizador que se está utilizando. La estructura de datos principal que mantiene el estado de OpenGL en Mac OS X es un CGLContextObj . Estos contextos CGL se pueden recuperar en cualquier momento mediante una llamada a CGLGetCurrentContext . A continuación, se puede consultar el CGLContextObj para obtener información específica sobre el renderizador asociado.

Renderizador de software

También se incluye el renderizador de software OpenGL propio de Apple . Originalmente, se trataba de un paquete de enteros simple. En Mac OS X 10.3, se introdujo uno nuevo de punto flotante que finalmente lo reemplazó . El renderizador de software, aunque lento, es lo suficientemente rápido para aplicaciones básicas y se mantuvo completo en cuanto a funcionalidades. Archivado el 8 de enero de 2014 en la Wayback Machine con la implementación de OpenGL de OS X para fines de desarrollo.

Véase también

  • Guía de referencia de CGL en el sitio web de Apple (html). - Archivado el 12 de agosto de 2014 en Wayback Machine.
  • Guía de referencia de CGL en el sitio web de Apple (PDF). - Archivado el 24 de agosto de 2014 en Wayback Machine.