Да, в iOS Core Graphics (Quartz), по-видимому, располагается поверх OpenGL ES для рисования, ориентированного на экран, хотя и не в явном виде, к которому у нас есть доступ.
Базовая графика принимает векторные элементы (линии, дуги и т. Д.) И некоторые растровые (изображения) и обрабатывает их для отображения на экране или для других форм вывода (файлы PDF, печать и т. Д.). Если целью является экран на iOS, эти векторные элементы будут размещены в CALayer, либо напрямую, либо через слой поддержки UIView.
Эти слои Core Animation фактически обертывают вокруг прямоугольных текстур на графическом процессоре, и именно так Core Animation может обеспечить плавный перевод, масштабирование и вращение слоев даже на оригинальном оборудовании iPhone. Я не могу найти ссылку на него прямо сейчас, но, по крайней мере, в одной презентации WWDC говорится, что OpenGL ES используется Core Animation для связи с графическим процессором для выполнения этого аппаратного ускорения. Нечто подобное можно наблюдать и на новом MacBook Pro с двумя графическими процессорами, где более мощный графический процессор начинает работать при взаимодействии с приложением, использующим Core Animation.
Поскольку Core Graphics растеризует векторные и растровые элементы в CALayer при рисовании на экран, а CALayer эффективно оборачивает текстуру OpenGL ES, я бы поместил OpenGL ES ниже Core Graphics на iOS, но только для случая, когда Core Графика рендеринга на экран. Причина параллельного размещения в иерархии, которую вы видели, может быть связана с тремя факторами: на Mac не все представления имеют слоистую поддержку, поэтому аппаратное ускорение не может быть одинаковым; мы не можем реально взаимодействовать с поддержкой OpenGL ES стандартных элементов пользовательского интерфейса, поэтому с точки зрения разработчика они представляют собой разные концепции; и Core Graphics можно использовать для рендеринга в закадровый контекст, например, в файлы PDF или изображения.