2009-10-22 6 views
5

Bonjour Je suis en train de programmer OpenGLES pour l'iPhone mais je suis actuellement coincé avec une étrange erreur d'objet framebuffer.Objet Framebuffer Problème

Au début, je suivais quelques tutoriels de Simon Maurice: http://web.me.com/smaurice/AppleCoder/Welcome.html

Mais je suis passé à faire quelques expériences de moi-même avant de poursuivre avec d'autres didacticiels, mais mon expérience a frappé un problème. Ce que j'essayais de faire était de faire de l'EAGLView la vue d'un ViewController et cela fonctionnait parfaitement bien lorsque le code de base était originellement tiré des tutoriels.

Comme EAGLView est une sous-classe de l'UIView, ce n'est pas trop difficile à faire, donc en continuant avec l'expérience, je voulais le faire avec une table rase. J'ai créé un nouveau projet dans Xcode avec le projet d'application Windows et créé un nouvel EAGLView et un ViewController pour faire la même tâche que le projet précédent.

Toutefois, après la compilation et l'exécution de la vue est blanc et la console affiche l'erreur «Impossible de créer l'objet framebuffer complet% x» pendant le processus createFramebuffer. (Sortie de console d'erreur: "GLController [2071: 207] n'a pas réussi à créer l'objet framebuffer complet 0"). J'ai d'abord pensé que c'était mon code, j'ai donc déchiré le code de travail du projet précédent dans le nouveau projet et toujours recevoir les mêmes erreurs. En même temps, j'ai déplacé le code des nouveaux projets dans l'ancien projet et compilé avec une sortie réussie.

Je ne comprends pas pourquoi le même code ne fonctionnera pas correctement dans un nouveau projet, mais le nouveau code fonctionnera correctement dans l'ancien projet. Si quelqu'un sait ce que je manque, ce serait grandement apprécié.

Merci.

(également testé avec plusieurs EAGLViews de codes d'échantillons Apple et la même erreur se produit sur le nouveau projet, mais ne se produit pas sur l'ancien projet avec ViewController ci-joint.)

+0

Il nous est difficile d'y répondre sans passer par les mêmes étapes que vous. Vous pouvez nous indiquer quel code de résultat a été renvoyé lorsque vous avez appelé glCheckFramebufferStatusOES. – prideout

+0

La sortie de la console d'erreur était 0. Étapes: 1. Créez un nouveau projet à partir de Xcode (dans ce cas, l'application Windows). 2. Créez un nouveau UIViewController lié à la sous-vue de la fenêtre. 3. Dans le cadre d'un test contrôlé, récupérez un EAGLView à partir de l'un des tutoriels ou de simples exemples de codes. 4. Définissez la vue UIViewController comme EAGLView. 5. (Ajouter des cadres nécessaires.) Construire et aller. Le problème se produit également sans UIViewController, mais les étapes ci-dessus expliquent ce que j'essaie d'obtenir. Je ne sais pas pourquoi cela ne peut pas être fait avec un nouveau projet, mais c'est le problème principal avec lequel j'ai besoin d'aide. – Wesux

Répondre

0

il y a eu un changement dans le modèle de OpenGLES programme du dernier SDK Iphone à l'actuel. Il y a un code de support écrit pour choisir entre ES2.0 et ES1.1

s'il vous plaît noter que.

+0

Je pensais à ça aussi, j'ai utilisé le nouveau modèle OpenGLES pour mon test et ça n'a pas marché non plus. Sauf lors de la copie de toutes les classes EAGLView et apparentées telles que ES1 et ES2 Renderer à partir de l'exemple de modèle fonctionne parfaitement bien dans l'ancien projet. Il ne semble pas vouloir travailler dans l'autre sens (Déplacer les classes ViewController dans le nouveau modèle SDK OpenGLES). – Wesux

4

J'ai rencontré un problème similaire en essayant de définir un EAGLView comme vue d'un viewController. Au lieu de cela, attachez la propriété view de viewController à un UIView standard. Ensuite, plus tard, lorsque la vue a été chargée avec succès (peut-être dans la méthode viewDidLoad de viewController), instanciez une EAGLView et l'ajoutez en tant que sous-vue à viewController.view.

7

Dans le noir ici, sans plus d'informations sur ce que vous avez fait, mais ... vous instanciez votre EAGLView via IB (et donc en passant par -initWithCoder:), ou par programmation (-initWithFrame:)?

Si vous regardez EAGLView.m, vous verrez que seulement -initWithCoder: fait l'initialisation réelle requise. Il est très facile de migrer ce code d'initialisation vers un initialiseur partagé (ou -initWithFrame: uniquement).

+0

Merci, a rencontré exactement ce problème – blueberryfields