Question

J'ai un rendu OpenGL sur un calque EAGLView et quelques autres éléments (cercles, etc.) sur un UIView (un frère du EAGLView positionné au-dessus). Est-il possible de mélanger les couleurs entre les deux couches? Je voudrais faire un peu de mélange pour obtenir un effet d'inversion sur les couleurs de EAGLView.

Je joue avec CGBlendMode mais cela ne semble affecter que ce que je dessine dans cette vue actuelle. Je pense que cela a quelque chose à voir avec CGContext mais je suis un peu flou sur les détails. Puis-je forcer UIView et EAGLView à avoir le même CGContext pour que le mélange fonctionne correctement?

Aide, corrections, clarifications sont tous appréciés. Merci d'avance, -S

Était-ce utile?

La solution

La réponse courte est que vous ne pouvez pas. Une longue réponse suit.

Par EAGLView , vous devez faire référence à la sous-classe de UIView incluse dans le modèle OpenGL ES dans Xcode. La particularité de cette classe est que la méthode layerClass est remplacée et renvoie la classe CAEAGLLayer au lieu de la classe CALayer , comme c'est le cas par défaut.

UIView et CALayer fonctionnent par paires. Tous les objets UIView sont sauvegardés par un CALayer , le CALayer est l'objet responsable de la mise en page et du rendu à l'écran. UIView est un délégué de CALayer et est chargé de dessiner ses graphiques si nécessaire.

CALayer laissera son délégué (le UIView ) dessiner dans un CGContextRef . Il s'agit d'un contexte par UIView . Par conséquent, vous ne pouvez pas utiliser CGBlendMode pour fusionner plusieurs vues car il ne fonctionnera que dans un seul contexte UIView.

Le mélange de CALayer doit être effectué à l'aide des propriétés du filtre. Ceux-ci sont définis pour iPhone OS mais les filtres disponibles sont indéfinis selon la documentation. En effet, Core Image n'est pas disponible sur iPhone OS pour le moment.

Autres conseils

Je ne pense pas que vous serez capable de mélanger les couleurs dans ce sens. Le mieux que vous puissiez faire est d’en masquer complètement l’autre, ou d’avoir la couche supérieure semi-transparente (dans ce cas, vous verrez la partie dessous), mais vous ne pourrez pas créer de dessin de type XOR.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top