Wie kann ich zwischen meinem UIView und meine EAGLView mischen?
Frage
Ich habe eine OpenGL Szene auf einer EAGLView Schicht und einigen anderen Elementen (Kreise und dergleichen) Rendern auf einem UIView Rendering (die ein Geschwister des EAGLView ist, darüber positioniert). Ist es möglich, Farben zwischen den beiden Schichten zu mischen? Ich möchte einen Unterschied machen Mischen eines Inversionseffekt auf die Farben von EAGLView zu bekommen.
Ich habe mit CGBlendMode herumgespielt, aber es scheint nur zu beeinflussen, was ich in dieser aktuellen Ansicht bin Zeichnung. Ich denke, das etwas mit dem CGContext zu tun hat, aber ich bin ein wenig verschwommen auf den Details, kann ich die UIView zwingen und die EAGLView die gleiche CGContext zu haben, so dass die Mischung funktioniert zwischen ihnen?
Hilfe, Korrekturen, Klärungen sind alle sehr geschätzt. Danke im Voraus, ES
Lösung
Kurze Antwort ist, können Sie nicht. Lange Antwort folgt.
Mit dem EAGLView
müssen Sie die Unterklasse von UIView
bedeuten, die in der OpenGL ES-Vorlage in Xcode enthalten ist. Was macht diese Klasse besonders ist, dass die layerClass
Klassenmethode außer Kraft gesetzt wird, und gibt die CAEAGLLayer
Klasse anstelle der CALayer
Klasse, als Standard ist.
UIView
und CALayer
Arbeit in Paaren. Alle UIView
Objekte von einer CALayer
gesichert werden, ist die CALayer
das Objekt verantwortlich für das Layout und Rendering auf dem Bildschirm. Die UIView
ist ein Delegierter der CALayer
und ist verantwortlich für seine Grafiken zeichnen, wenn nötig.
CALayer
wird es Delegierter (der UIView
) ziehen in eine CGContextRef
lassen. Es ist ein Rahmen pro UIView
, so kann man nicht CGBlendMode
verwenden, um mehrere Ansichten zu mischen, da es funktioniert nur innerhalb eines einzigen UIView Kontext.
Das Mischen von CALayer
sollte mit Hilfe der Filtereigenschaften erfolgen. Diese sind definiert für iPhone OS aber die verfügbaren Filter sind undefined nach der Dokumentation. Dies liegt daran, Core Image auf iPhone OS zu diesem Zeitpunkt nicht verfügbar ist.
Andere Tipps
Ich glaube nicht, Sie in der Lage sein werden Farben in diesem Sinne zu mischen. Das Beste, was Sie tun können, ist eine völlig andere haben die Verschleierung oder haben die oberste Schicht semi-transparent (in diesem Fall, werden Sie den Teil unterhalb sehen.) - aber Sie werden nicht in der Lage sein, XOR-Typ Zeichnung zu tun