2010-02-16 18 views
4

J'ai un peu de problème avec les pommes EAGLView et Texture2D. Si je crée une instance d'EAGLView et dessine des textures, cela fonctionne très bien. Cependant, toutes les fois que je crée une deuxième instance de EAGLView, les textures dans la nouvelle vue (s) ne sont pas dessinées.
Étant nouveau pour OpenGL, je n'ai absolument aucune idée de ce qui cause ce comportement. Si quelqu'un veut aider, j'ai créé un petit projet qui reproduit le comportement. Le projet se trouve que j'ai essayé d'utiliser sharegroups mais je ne suis pas vraiment sûr si je les ai utilisés correctement à http://www.cocoabeans.se/OpenGLESBug.zipLes textures ne sont pas dessinées si plusieurs EAGLViews sont utilisées

Un grand merci,
Tim Andersson

Mise à jour
. Cependant, cela a légèrement changé le comportement; Au lieu du dessin de texture uniquement dans la première vue instanciée, il dessine maintenant la texture dans la vue instanciée dernière et dessine des rectangles blancs dans les autres vues. Je ne sais pas si c'est mieux ou pire, mais au moins quelque chose apparaît maintenant dans les autres vues.
Cela me rend fou et je serais très reconnaissant si quelqu'un pouvait m'aider avec ce problème. J'ai mis à jour le projet au http://www.cocoabeans.se/OpenGLESBug.zip pour refléter les changements.

Cheers,
Tim

Deuxième mise à jour
Après avoir essayé quelques autres choses, il semble que le problème est lié à la classe Texture2D d'Apple, mais je ne sais pas exactement ce qui est à l'origine du comportement. Je pense que la meilleure chose à faire est d'écrire ma propre classe de texture (cela m'aidera à comprendre comment OpenGL gère les textures, ce qui sera probablement utile).

+0

J'ai le même problème * pas * en utilisant la classe Texture2D d'Apple –

Répondre

1

(ont pas téléchargé votre code.)

Les contextes de dessin OpenGL sont différentes si vous utilisez seulement deux EAGLViews (le code dans cette classe de base crée et possède le contexte de GL ainsi que le rendu/cadre/profondeur tampons). Si vous générez/liez des textures dans un contexte, elles ne seront pas disponibles dans l'autre. Vous pouvez partager des contextes si vous aimez utiliser un groupe de partage (voir cette question pour plus d'informations: How to use OpenGL ES on a separate thread on iphone?). Ou définir les textures (si petit) dans les deux endroits, etc.

+0

Je crée les textures dans initWithCoder: de l'EAGLView après avoir créé les framebuffers. Cela ne signifie-t-il pas que les textures doivent être liées à deux contextes différents? Est-ce que vous voulez dire en créant les textures dans les deux endroits? Cheers, Tim –