Можно ли рисовать с помощью Quartz 2D поверх EAGLLayer? - PullRequest
0 голосов
/ 29 января 2012

В моем приложении у меня есть эквалайзер с визуализатором позади него.

Эквалайзер - это серия точек, представляющих собой изображения, с траекторией, проведенной между ними с помощью Quartz 2D (также с отметками внизу и слева для обозначения частоты и коэффициентов усиления). За этим находится визуализатор, выполненный с использованием OpenGL с CAEAGLLayer.

Способ, которым это настроено, состоит в том, что есть подпредставление основного вида моего контроллера представления, которое обрабатывает визуализатор, и выше, это другое подпредставление основного вида, который рисует путь. Над обоими показаны изображения для точек эквалайзера.

Что происходит, путь прорисовывается нормально, пока не начинается песня и не начинает рисовать визуализатор. Кажется, что он стирает Quartz 2D над ним. Даже если он вызывает setNeedsDisplay в представлении над ним каждый раз, когда он рисует, не работает. Вроде OpenGL предоставляется эксклюзивный доступ к рисованию там. Точки эквалайзера UIImageView остаются видимыми.

Есть ли способ использовать Quartz 2D поверх вида со слоем gl? Я бы предпочел не использовать OpenGL для рисования контуров и отметок с помощью OpenGL, потому что мне пришлось бы рисовать текстуру 512x512 или 1024x1024 и масштабировать ее, чтобы она не выглядела идеально, и у меня уже есть рабочий Quartz код, чтобы нарисовать все.

1 Ответ

1 голос
/ 29 января 2012

Есть ли способ использовать Quartz 2D поверх вида со слоем gl?

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

Я подозреваю, что ваши взгляды на самом деле не в том порядке, а вид GL находится сверху. Во-первых, убедитесь, что ваш вид GL помечен opaque (для производительности, но также потому, что он сделает его более очевидным, если он будет в неправильном порядке). Затем проверьте порядок просмотра (см. Основной вид subviews).

...