質問

EAGLViewレイヤーでレンダリングするopenglシーンと、UIView(EAGLViewの兄弟で、その上に位置する)でレンダリングする他の要素(円など)があります。 2つのレイヤー間で色をブレンドすることはできますか? EAGLViewから色の反転効果を得るために、いくつかの差分ブレンディングを行いたいです。

私はCGBlendModeをいじくり回してきましたが、現在のビューで描画しているものにしか影響しないようです。これはCGContextと関係があると思いますが、詳細については少し曖昧です。UIViewとEAGLViewに同じCGContextを強制して、それらの間でブレンドが機能するようにできますか?

ヘルプ、修正、説明を歓迎します。前もって感謝します、 -S

役に立ちましたか?

解決

簡単な答えはできません。長い答えが続きます。

EAGLView とは、XcodeのOpenGL ESテンプレートに含まれている UIView のサブクラスを意味する必要があります。このクラスを特別なものにしているのは、 layerClass クラスメソッドがオーバーライドされ、デフォルトの CALayer クラスの代わりに CAEAGLLayer クラスを返すことです。

UIView CALayer はペアで機能します。すべての UIView オブジェクトは CALayer によってサポートされ、 CALayer はレイアウトと画面へのレンダリングを担当するオブジェクトです。 UIView は、 CALayer のデリゲートであり、必要に応じてグラフィックを描画します。

CALayer は、デリゲート( UIView )を CGContextRef に描画させます。 UIView ごとに1つのコンテキストであるため、1つのUIViewコンテキスト内でのみ機能するため、 CGBlendMode を使用して複数のビューをブレンドすることはできません。

CALayer のブレンドは、フィルタープロパティを使用して行う必要があります。これらはiPhone OS用に定義されていますが、使用可能なフィルターはドキュメントに従って未定義です。これは、現時点ではiPhone OSでCore Imageを使用できないためです。

他のヒント

その意味で色をブレンドできるとは思いません。できる最善の方法は、一方が他方を完全に覆い隠すか、最上層を半透明にすることです(この場合、下に部品が表示されます)。しかし、XORタイプの描画はできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top