3

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

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

帮助,更正,澄清都非常感谢。在此先感谢,-S

4

2 回答 2

7

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

EAGLView你的意思是它的子类UIView包含在 Xcode 的 OpenGL ES 模板中。这个类的特别之处在于layerClass类方法被重写并返回CAEAGLLayer类而不是CALayer类,这是默认的。

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

CALayer将让它的委托 (the UIView) 绘制到CGContextRef. 它是一个上下文UIView,因此您不能用于CGBlendMode混合多个视图,因为它只能在一个 UIView 上下文中运行。

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

于 2009-09-12T21:34:08.793 回答
0

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

于 2009-09-10T21:32:45.287 回答