J'essaie de faire un jeu simple en utilisant OpenGLES. J'ai deux EAGLViews (menu et jeu). Chaque vue possède son propre viewController. L'initialisation des vues est effectuée par la méthode initWithNIBName du viewController. Et quand je veux montrer la vue, j'utilise simplement la méthode addSubview de la fenêtre principale. La vue du jeu est initialisée une seule fois au moment du lancement. La vue de menu est initialisée seulement si c'est nécessaire. Le problème est que lorsque je passe de la vue de jeu au menu, puis de retour, puis que je redessine la vue du jeu, quelque chose ne va pas. (Je mets EAGLContext dans la méthode drawView avant de dessiner, donc le contexte peut être correct). Vous ne savez pas où est le problème? Ou si l'ensemble de la commutation est mal géré, donnez-moi un conseil et s'il vous plaît. Merci pour les réponses.opengles voir le problème de commutation
Répondre
Je suppose que vous avez un problème avec la texture ne s'affiche pas correctement?
Je ne connais pas la réalité derrière OpenGL, mais voici mon hypothèse: Chaque fois que vous revenez à EAGLView, le EAGLContext de EAGLView est modifié. (si vous avez copié et collé à partir du modèle OpenGLES) Les textures ne peuvent être chargées que lorsque le contexte est dans son état correct, ou bien vous ne pouvez charger aucune texture. Maintenant, en laissant le EAGLView, et revenir, vous instanciation d'une nouvelle EAGLContext de initWithCoder: (NSCoder *) codeur:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context]) {
[self release];
return nil;
}
Alors, comment pouvons-nous préserver ce contexte? Je le rend mondial. Aussi simple que cela. Et quand EAGLView doit être instancié une fois de plus, demandez-lui si le "global" EAGLContext est nul ou non. Si c'est nul, instanciez-le, sinon ne faites rien. Et ne jamais publier ou libérer ce EAGLContext global à moins que vous ne vouliez quitter votre programme.
Cela fonctionne pour moi, mais encore une fois, mon hypothèse ci-dessus peut ne pas être correcte. Si quelqu'un connaît la réalité, veuillez me faire la leçon. J'ai aussi humblement besoin de conseils. Je veux vraiment savoir pourquoi cela se produit et pourquoi devons-nous le faire aussi.
Et au fait, est-ce que cela répond à votre question, Jenicek?
- 1. Problème de mappage de texture dans OpenGLES
- 2. La texture OpenGLES disparaît
- 3. (MVVM) Voir le modèle Voir le modèle et le filetage
- 4. Commutation Plateaux de l'imprimante
- 5. ordre de commutation Python d'éléments
- 6. Commutation de threads ASP.NET
- 7. Dynamique DataTemplate commutation
- 8. contrôleur de rails de commutation
- 9. Commutation entre ModalViews
- 10. Pourquoi OpenGLES étire mon modèle 3D?
- 11. Déclarations de commutation séparées multiples
- 12. Voir le hachage d'assemblage
- 13. JQuery bascule la commutation de la TVA
- 14. iPhone OpenGLES: Les textures consomment trop de mémoire et le programme plante avec le signal "0"
- 15. Commutation entre Java et l'applet
- 16. Impossible de voir le serveur win2k8 par nom d'hôte, mais peut le voir par IP
- 17. Faire des onglets de commutation Winform
- 18. Modules de commutation dans le bloc d'application composite
- 19. Emacs enregistrer automatiquement sur le tampon de commutation
- 20. C# itérer sur les cas de commutation
- 21. commutation entre le mode console et le mode graphique
- 22. Méthodes de commutation pour un seul résultat
- 23. validation Textbox, focus Numéro de commutation
- 24. Comment retourner une image/texture dans OpenGLES?
- 25. Porting iPhone app openGLES à OSX?
- 26. Commutation de répertoire de modèle Django
- 27. Comment dessinez-vous un cylindre avec OpenGLES?
- 28. Impossible de voir le serveur win2k8 par nom d'hôte, mais peut le voir par IP
- 29. Voir le rapport de tri DATETIME
- 30. Voir le contenu de Fichier supprimé Svn
Lorsque vous changez de vue et qu'une autre vue OpenGL est affichée à l'écran, vous devez appeler [EAGLContext setCurrentContext: context] avec le contexte OpenGL correct. Sinon, les appels gl * modifient toujours le contenu de l'autre vue OpenGL. –