【问题标题】:How can I blend between my UIView and my EAGLView?如何混合我的 UIView 和我的 EAGLView?
【发布时间】:2010-11-26 23:03:24
【问题描述】:
我在 EAGLView 层上有一个 opengl 场景渲染,在 UIView(它是 EAGLView 的兄弟,位于其上方)上渲染了一些其他元素(圆圈等)。是否可以在两层之间混合颜色?我想做一些不同的混合以获得对来自 EAGLView 的颜色的反转效果。
我一直在玩 CGBlendMode,但它似乎只会影响我在当前视图中绘制的内容。我认为这与 CGContext 有关,但我对细节有点模糊,我可以强制 UIView 和 EAGLView 具有相同的 CGContext 以便在它们之间进行混合吗?
感谢您的帮助、更正、澄清。提前致谢,
-S
【问题讨论】:
标签:
iphone
opengl
uikit
uiview
eaglview
【解决方案1】:
简短的回答是你不能。接下来是长答案。
EAGLView 必须是指 UIView 的子类,它包含在 Xcode 的 OpenGL ES 模板中。这个类的特别之处在于 layerClass 类方法被覆盖并返回 CAEAGLLayer 类而不是默认的 CALayer 类。
UIView 和 CALayer 成对工作。所有UIView 对象都由CALayer 支持,CALayer 是负责布局和渲染到屏幕的对象。 UIView 是CALayer 的代表,负责在需要时绘制其图形。
CALayer 将让它的委托(UIView)绘制成CGContextRef。每个UIView 是一个上下文,因此您不能使用CGBlendMode 混合多个视图,因为它只能在一个 UIView 上下文中运行。
CALayer 的混合应该使用过滤器属性来完成。这些是为 iPhone OS 定义的,但根据文档,可用的过滤器是 undefined。这是因为 Core Image 目前在 iPhone OS 上不可用。
【解决方案2】:
我认为您无法在这种意义上混合颜色。你能做的最好的事情是让一个完全遮住另一个,或者让顶层半透明(在这种情况下,你会看到下面的部分)——但你将无法进行 XOR 类型的绘图。