Подтвердить что ты не робот

Смешивание кварца и OpenGL?

Я пытаюсь выяснить, что на самом деле происходит в фоновом режиме, когда мы это делаем (см. изображение)

enter image description here

Как вы можете видеть на изображении, я добавил несколько кнопок и проверил Content View из Interface builder для окна.

Теперь, как мы знаем, он будет использовать базовую анимацию или скажет, что создаст слои. (Пожалуйста, поправьте меня, если я ошибаюсь. Все еще учится...)

Я хочу знать, как рисуются эти кнопки?

Мое предположение - когда мы отмечаем Content View, эти кнопки вычерчиваются из CGBitmapContextRef, а растровое изображение, созданное из него, передается в Core Animation (OpenGL). Но я пока не могу это доказать. Как мне это доказать? Любой пример или идея с некоторым подходом были бы хороши?

Я уверен, что это кнопки, созданные из CGBitmapContextRef. Но то, что происходит с этими изображениями кнопок, неизвестно.

Может ли кто-нибудь объяснить, как возможна эта интеграция? Как это изображение получилось на экране?

Edit:

Чтобы добавить дополнительную информацию по той же теме, пожалуйста, проверьте изображение ниже для слоев OpenGL. Я думаю, что я нацелен на общий слой OpenGL Framework. enter image description here

4b9b3361

Ответ 1

Кнопки нарисованы на CGBitmapContextRef.

Допустим, у нас есть CGBitmapContextRef, созданный с использованием

CGContextRef CGBitmapContextCreate (
   void *data,
   size_t width,
   size_t height,
   size_t bitsPerComponent,
   size_t bytesPerRow,
   CGColorSpaceRef colorspace,
   CGBitmapInfo bitmapInfo
);

Здесь void *data, является указателем на место назначения в памяти, где чертеж должен быть визуализирован.

API CGContext можно затем использовать для выполнения различных операций на data. Таким образом, кнопки и фон могут быть нарисованы на нем.

После выполнения мы можем освободить CGContextRef, но данные все еще находятся в памяти, которые могут быть переданы OpenGLContext (CGLContextObj).

Я до сих пор не знаю, как он загружает data в CGLContextObj. Должен использоваться какой-то частный api.

Ответ 2

Начну с того, что создаю крутую петлю, которая навсегда вернет ваши кнопки. Затем, пока он работает, используйте Activity Monitor, чтобы выполнить образец трассировки вашего процесса. Вы увидите все пути, которые он использует для рисования кнопок. Вы должны уметь видеть, что происходит оттуда, от имен подпрограмм в стеке рисунков. Если вы не можете понять это, разместите соответствующие биты и здесь, и мы можем взглянуть.