iOS: Core Graphics реализована поверх OpenGL? - PullRequest
10 голосов
/ 26 сентября 2011

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

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

Ответы [ 4 ]

20 голосов
/ 26 сентября 2011

Да, в 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 или изображения.

7 голосов
/ 26 сентября 2011

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

enter image description here

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

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

3 голосов
/ 18 декабря 2013

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

0 голосов
/ 14 сентября 2015

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

...