Je travaille sur une application iPhone OS dont la vue principale est une vue 2D OpenGL (c'est une sous-classe de la classe EAGLView d'Apple, qui consiste à configurer un environnement 2D ortho-projeté) avec laquelle l'utilisateur interagit directement."architecture" la plus efficace pour une application 2D en couches utilisant OpenGL sur iPhone?
Parfois (pas toujours) je voudrais rendre quelques contrôles au-dessus de cette vue GL de base - penser comme un affichage tête haute. Notez que la vue de la ligne de base en dessous peut faire défiler/animer alors que les contrôles semblent être fixés sur l'écran ci-dessus. Je suis bon avec les vues Cocoa en général, et je suis assez bon avec CoreGraphics, mais je suis vert avec Open GL, et les opérations d'EAGLView (et sa relation avec CALayers) sont assez opaques pour moi. Je ne sais pas comment mélanger les autres éléments le plus efficacement (lire: meilleure performance, moins de tracas, etc). Je sais que dans un pincement, je peux créer et conserver la géométrie pour tous les autres contrôles, et les placer au-dessus de ma géométrie de base chaque fois que je peins/permutons et que je garde tout ce que l'utilisateur voit sur une seule vue. Mais je suis moins certain des autres techniques, comme avoir une autre vue sur le dessus (UIKit/CG ou GL?) Ou créer d'autres couches dans ma seule vue, etc.
Si les gens seraient si gentils d'écrire quelques brèves observations si elles ont déjà parcouru ces routes, ou au moins me diriger vers la documentation ou la discussion existante sur cette question, je l'apprécierais grandement.
Merci.
Merci pour votre réponse, Pod. Je suppose que ce que vous dites est "ne dessinez pas de contrôles ou quoi que ce soit avec CoreGraphics au-dessus de votre vue GL".Voici le suivi: Quand je rends sur une autre surface (pas sur l'écran), comment puis-je le faire sur la surface principale? –
Je n'ai pas utilisé OGL depuis longtemps, mais je le fais facilement (si ce n'est pas le cas), c'est juste dessiner un quad qui correspond à la taille de la surface cible, et utiliser vos trucs pré-rendus comme une texture . Cela vous permettra également de l'adapter si vous avez des tailles différentes. Si elles sont 1: 1, il s'agit essentiellement d'un blit démodé. Utilisez alpha blending etc pour obtenir les résultats souhaités lors du dessin de la HUD (de sorte que vous ne faites pas un écran blanc avec seulement HUD, etc :) – Pod
En outre, en faisant un "blit" d'un quadri pré-rendu sur votre écran, il pourrait être plus facile d'utiliser un 'passthrough' VS. Je pense que OGL a une fonction de faire cela pour vous, mais sinon, faites juste un shader GLSL que simplement passer xyzw et uvst à travers sans les transformer, et utiliser les coordonnées de (1,0,0,0), (0,0 , 0,0), (1,1,0,0) etc pour les coins de votre quad. Vous pourriez avoir besoin de jouer avec le z pour le faire apparaître "en face" des pixels déjà sur cette cible de rendu. – Pod