如何在我的UIView和我的EAGLView之间进行混合?

时间:2009-09-09 19:32:19

标签: iphone opengl uikit uiview eaglview

我在EAGLView图层上有一个opengl场景渲染,还有一些其他元素(圆圈等)渲染在UIView上(它是EAGLView的兄弟,位于它上面)。是否可以在两层之间混合颜色?我想做一些差异混合,以获得EAGLView颜色的反转效果。

我一直在玩CGBlendMode,但它似乎只会影响我在当前视图中绘制的内容。我认为这与CGContext有关,但我对细节有点朦胧,我可以强制UIView和EAGLView使用相同的CGContext,以便它们之间的混合工作吗?

帮助,更正,澄清都表示赞赏。提前致谢, -S

2 个答案:

答案 0 :(得分:7)

简短的回答是你做不到的。接下来是答案。

通过EAGLView,您必须指的是Xcode中的OpenGL ES模板中包含的UIView的子类。这个类的特殊之处在于覆盖了layerClass类方法并返回CAEAGLLayer类而不是CALayer类,这是默认的。

UIViewCALayer成对出现。所有UIView个对象都由CALayer支持,CALayer是负责布局和渲染到屏幕的对象。 UIViewCALayer的委托人,负责在需要时绘制图片。

CALayer会将其委托(UIView)绘制成CGContextRef。每个UIView是一个上下文,因此您无法使用CGBlendMode来混合多个视图,因为它只能在一个UIView上下文中运行。

CALayer的混合应使用过滤器属性完成。这些是为iPhone OS定义的,但根据文档,可用的过滤器是 undefined 。这是因为此时iPhone OS上没有Core Image。

答案 1 :(得分:0)

我认为你不能在这个意义上混合颜色。您可以做的最好的是让一个完全遮挡另一个,或者使顶层半透明(在这种情况下,您将看到下面的部分) - 但您将无法进行XOR类型绘制。