framework - ios reference
iOS: ¿Core Graphics está implementado sobre OpenGL? (4)
A partir de iOS 9 Core Graphics en iOS se basan en el marco de metal de Apple, no OpenGL.
He encontrado un diagrama que muestra Core Graphics implementado sobre OpenGL, y otro que lo coloca junto a OpenGL. Pensaría que Apple sería inteligente para darle acceso equitativo al hardware gráfico pero, una vez más, no sé mucho sobre el chip gráfico que están usando ... ¿tal vez es 3D todo el camino?
¿Alguien aquí conoce los detalles?
Sí, en iOS Core Graphics (Quartz) parece estar superpuesto a OpenGL ES para el dibujo que se dirige a la pantalla, aunque no de forma explícita a la que tenemos acceso.
Core Graphics toma elementos vectoriales (líneas, arcos, etc.) y algunos de trama (imágenes) y los procesa para mostrarlos en la pantalla o para otras formas de salida (archivos PDF, impresión, etc.). Si el objetivo es la pantalla en iOS, esos elementos del vector se alojarán en un CALayer, ya sea directamente o a través de la capa de respaldo de un UIView.
Estas capas de Core Animation son envoltorios alrededor de texturas rectangulares en la GPU, que es cómo Core Animation puede proporcionar la traducción fluida, la escala y la rotación de capas incluso en el hardware original de iPhone. No puedo encontrar una referencia en este momento, pero al menos una presentación de WWDC indica que OpenGL ES es utilizado por Core Animation para comunicarse con la GPU para realizar esta aceleración de hardware. Algo similar se puede observar en la nueva GPU de doble GPU, donde la GPU más potente se activa al interactuar con una aplicación que utiliza Core Animation.
Debido a que Core Graphics rasteriza los elementos vectoriales y de trama en un CALayer al dibujar en la pantalla, y un CALayer envuelve efectivamente una textura OpenGL ES, colocaría OpenGL ES debajo de Core Graphics en iOS, pero solo para el caso donde Core Graphics está renderizando a la pantalla. La razón de la colocación lado a lado en la jerarquía que vio puede deberse a tres factores: en la Mac, no todas las vistas están respaldadas por capas, por lo que es posible que no estén aceleradas por hardware de la misma manera; no podemos realmente interactuar con el respaldo de OpenGL ES de elementos de UI estándar, por lo que desde el punto de vista de un desarrollador son conceptos distintos; y Core Graphics se puede utilizar para visualizar contextos fuera de pantalla, como archivos PDF o imágenes.
Core Graphics y OpenGL son tecnologías separadas. UIKit y AppKit están construidos sobre ambos, así como Core Animation. Puede ver la pila de tecnología de gráficos dentro de la documentación de Apple ( Guía de programación de animación principal )
Core Graphics y OpenGL son dos sistemas completamente separados. Mire la imagen a continuación (fuente) , que muestra ambas enumeradas en el mismo nivel. La descripción de Core Graphics lower en la misma página también indica que es el sistema de dibujo nativo de nivel más bajo.
También vea la página Acerca de OpenGL ES . Muestra que el código OpenGL se ejecuta directamente en la GPU, y si se desplaza hacia abajo verá que hay algunas cosas que no se pueden hacer con una aplicación que utiliza OpenGL. Obviamente, si CG estuviera basado en OpenGL, no podrías hacer esas cosas nunca.
Finalmente, mira la página del Modelo de Dibujo para iOS. En la parte superior, compara OpenGL con el dibujo original, lo que indica que funcionan por separado.