Как я могу смешаться между моим UIView и EAGLView? - PullRequest
3 голосов
/ 09 сентября 2009

У меня есть рендеринг сцены opengl на слое EAGLView и некоторые другие элементы (круги и т. Д.) На UIView (который является родственным EAGLView, расположенным над ним). Можно ли смешивать цвета между двумя слоями? Я хотел бы сделать смешивание различий, чтобы получить эффект инверсии цветов в EAGLView.

Я играл с CGBlendMode, но, похоже, он влияет только на то, что я рисую в этом текущем представлении. Я думаю, что это как-то связано с CGContext, но я немного запутан в деталях, могу ли я заставить UIView и EAGLView иметь одинаковый CGContext, чтобы смешивание работало между ними?

Помощь, исправления, разъяснения все приветствуются. Заранее спасибо, -S

Ответы [ 2 ]

7 голосов
/ 13 сентября 2009

Краткий ответ: нельзя. Длинный ответ следует.

Под EAGLView подразумевается подкласс UIView, включенный в шаблон OpenGL ES в Xcode. Что делает этот класс особенным, так это то, что метод класса layerClass переопределяется и возвращает класс CAEAGLLayer вместо класса CALayer, как по умолчанию.

UIView и CALayer работают в парах. Все UIView объекты поддерживаются CALayer, CALayer является объектом, отвечающим за макет и рендеринг на экран. UIView является делегатом CALayer и отвечает за отрисовку графики при необходимости.

CALayer позволит своему делегату (UIView) провести ничью в CGContextRef. Это один контекст на UIView, поэтому вы не можете использовать CGBlendMode для смешивания нескольких представлений, так как он будет функционировать только в одном контексте UIView.

Смешивание CALayer должно выполняться с использованием свойств фильтра. Они определены для iPhone OS, но доступны фильтры undefined в соответствии с документацией. Это связано с тем, что в настоящее время Core Image недоступно в iPhone OS.

0 голосов
/ 11 сентября 2009

Я не думаю, что вы сможете смешивать цвета в этом смысле. Лучшее, что вы можете сделать, это сделать один полностью скрывающим другой или иметь полупрозрачный верхний слой (в этом случае вы увидите часть внизу) - но вы не сможете рисовать XOR-тип.

...