Como posso misturar entre meu UIView e meu EAGLView?
Pergunta
I têm um render opengl sobre uma camada EAGLView e alguns outros elementos (círculos e tais) render em um UIView (que é um irmão do EAGLView, posicionado acima dele). É possível misturar cores entre as duas camadas? Eu gostaria de fazer alguma mistura diferença para obter um efeito de inversão nas cores de EAGLView.
Eu fui brincar com CGBlendMode mas só parece afetar o que eu estou desenhando em que a visão atual. Eu acho que isso tem algo a ver com o CGContext mas eu sou um pouco vago sobre os detalhes, eu posso forçar o UIView eo EAGLView ter o mesmo CGContext para que a mistura funciona entre eles?
Ajuda, correções, esclarecimentos são apreciados. Desde já, obrigado, -S
Solução
A resposta curta é que você não pode. resposta longa segue.
Por EAGLView
você deve significar a subclasse de UIView
que está incluído no modelo ES OpenGL no Xcode. O que torna esta classe especial é que o método de classe layerClass
é substituído e voltar a classe CAEAGLLayer
em vez da classe CALayer
, como é padrão.
UIView
e trabalho CALayer
em pares. Todos os objetos UIView
são apoiados por uma CALayer
, o CALayer
é o objeto responsável pelo layout e renderização para a tela. O UIView
é um delegado à CALayer
, e é responsável por desenhar seus gráficos quando necessário.
CALayer
vai deixá-lo do delegado (a UIView
) desenhar em um CGContextRef
. É um contexto per UIView
, então você não pode usar CGBlendMode
para misturar vários pontos de vista, uma vez que só funcionará dentro de um contexto de UIView único.
Blending de CALayer
deve ser feito usando as propriedades do filtro. Estes são definidos para o iPhone OS, mas os filtros disponíveis são indefinido de acordo com a documentação. Isso ocorre porque Núcleo Imagem não está disponível no iPhone OS neste momento.
Outras dicas
Eu não acho que você vai ser capaz de misturar cores nesse sentido. O melhor que você pode fazer é ter um obscurecendo completamente a outra, ou ter a camada superior semi-transparente (neste caso, você verá o debaixo parte) - mas você não será capaz de fazer o desenho tipo XOR