Вопрос

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

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

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

Это было полезно?

Решение

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

Под 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.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top