IOS: Core Graphics, реализованная поверх OpenGL?

Я нашел одну диаграмму, которая показывает Core Graphics, реализованную выше OpenGL, а другую, которая ставит ее вместе с OpenGL. Я бы подумал, что Apple будет умна, чтобы дать каждому равный доступ к графическому оборудованию, но опять же, я не очень разбираюсь в графическом чипе, который они используют... может быть, это 3D полностью?

Кто-нибудь здесь знает специфику?

Ответ 1

Да, на iOS Core Graphics (Quartz), кажется, накладывается поверх OpenGL ES для рисования, ориентированного на экран, хотя и не в явном виде, к которому у нас есть доступ.

Core Graphics принимает векторные элементы (линии, дуги и т.д.) и некоторые растровые (изображения) и обрабатывает их для отображения на экране или для других форм вывода (файлы PDF, печать и т.д.). Если целью является экран iOS, эти векторные элементы будут размещаться в CALayer, либо напрямую, либо через слой поддержки UIView.

Эти слои Core Animation эффективно обертывают вокруг прямоугольных текстур на графическом процессоре, так как Core Animation может обеспечить плавный перевод, масштабирование и вращение слоев даже на оригинальном оборудовании iPhone. Я не могу найти ссылку для него прямо сейчас, но по крайней мере один доклад WWDC гласит, что OpenGL ES используется Core Animation для связи с GPU для выполнения этого аппаратного ускорения. Нечто похожее можно наблюдать на новом двухпроцессорном MacBook Pro, где более мощный GPU срабатывает при взаимодействии с приложением с использованием Core Animation.

Поскольку Core Graphics растрирует векторные и растровые элементы в CALayer при рисовании на экране, а CALayer эффективно обтекает текстуру OpenGL ES, я бы поставил OpenGL ES ниже Core Graphics на iOS, но только для случая, когда Core Графика - это рендеринг на экране. Причину для размещения "бок о бок" в иерархии, которую вы видели, может быть вызвано тремя факторами: на Mac не все представления поддерживаются с помощью слоя, поэтому они могут не быть аппаратными ускоренными тем же способом; мы не можем реально взаимодействовать с поддержкой OpenGL ES стандартных элементов пользовательского интерфейса, поэтому с точки зрения разработчика они представляют собой различные концепции; и Core Graphics могут использоваться для рендеринга внеэкранных контекстов, таких как файлы PDF или изображения.

Ответ 2

Core Graphics и OpenGL - две совершенно разные системы. Посмотрите на изображение ниже (источник), который показывает оба указанных на одном уровне. Описание Core Graphics ниже на той же странице также указывает на то, что оно является самой низкоуровневой собственной системой рисования.

enter image description here

Также см. О странице OpenGL ES. Он показывает, что код OpenGL запускается непосредственно на графическом процессоре, и если вы прокрутите вниз, вы увидите, что есть некоторые вещи, которые нельзя сделать с приложением, использующим OpenGL. Очевидно, что если бы CG был основан на OpenGL, вы бы не смогли это сделать.

Наконец, просмотрите страницу Рисунок модели для iOS. В верхней части он сравнивает OpenGL с родным рисунком, указывая, что они работают отдельно друг от друга.

Ответ 3

Core Graphics и OpenGL - это отдельные технологии. UIKit и AppKit построены поверх обоих, а также Core Animation. Вы можете увидеть стек графических технологий внутри документации Apple (Руководство по программированию Core Animation)

Ответ 4

Начиная с iOS 9 Core Graphics на iOS основаны на платформе Apple Metal, а не на OpenGL.