2009-09-09 38 views
3

我有一个opengl场景在EAGLView图层上呈现,还有一些其他元素(圆形等)呈现在UIView(它是EAGLView的同胞,定位在它上面)上。是否有可能在两层之间混合颜色?我想做一些不同的混合来获得EAGLView颜色的反转效果。我怎样才能混合我的UIView和我的EAGLView?

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

帮助,更正,澄清都是赞赏。在此先感谢, -S

回答

7

简答题是你不能。长的答案如下。

通过EAGLView您必须表示包含在Xcode中的OpenGL ES模板中的UIView的子类。什么使这个类特别是layerClass类方法被覆盖并返回CAEAGLLayer类而不是CALayer类,这是默认的。

UIViewCALayer成对工作。所有UIView对象都支持CALayerCALayer是负责布局和渲染到屏幕的对象。 UIViewCALayer的代表,负责在需要时绘制图形。

CALayer将让它的代表(UIView)画成CGContextRef。这是每个UIView的一个上下文,所以不能使用CGBlendMode来混合几个视图,因为它只能在单个UIView上下文中运行。

应使用过滤器属性完成CALayer的混合。这些是为iPhone OS定义的,但根据文档,可用的滤波器是undefined。这是因为Core Image目前在iPhone OS上不可用。

0

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