2010-06-02 4 views
3

J'essaie de comprendre le modèle d'objet OpenGL sur iPhone OS. Je suis actuellement en train de rendre dans quelques différents UIView s (construire sur CAEAGLayer s) sur l'écran. J'ai actuellement chacun de ceux-ci en utilisant EAGLContext séparé, dont chacun a un rendu de couleur et un framebuffer. Je rends des choses similaires en eux, et je voudrais partager des textures entre ces instances pour économiser la mémoire. Ma compréhension actuelle est que je pourrais utiliser la même configuration (un certain nombre de contextes, chacun avec un FBO/RBO) mais si je reproduis les derniers en utilisant le EAGLShareGroup du premier, alors je peux simplement utiliser la texture noms (GLuints) du premier dans les derniers. Est-ce exact?EAGLContext, EAGLSharegroups, RenderBuffers, FrameBuffers, oh mon dieu!

Si tel est le cas, je suppose que la question de suivi est: quel est l'avantage d'avoir un "groupe de partage"? Pourrais-je simplement réutiliser le même contexte et attacher plusieurs FBO/RBO à ce contexte? Je pense que je me bats avec la couche d'abstraction d'un groupe de partage, qui semble partager des "objets" (textures et autres choses nommées) mais pas "état" (matrices, états activé/désactivé) qui appartiennent au contexte.

Quelle est la meilleure façon de penser à cela?

Merci pour votre illumination!

Répondre

4

En effet, lorsque deux EAGLContext sont créés avec le même EAGLSharegroup, ils partagent la même vue des objets de tampon, des textures, des rendus et des framebuffers. Si vos contextes utilisent OpenGL ES 2.0, ils partagent également des shaders et des objets de programme. L'un des cas d'utilisation les plus importants pour plusieurs contextes utilisant le même groupe de partage serait la possibilité de charger des ressources de manière asynchrone à partir d'un autre thread pendant le rendu. Cela ne semble pas être ce que vous faites ici, et il ne semble pas que l'état de contexte persistant soit un problème pour vous, alors vous feriez peut-être mieux de vous en tenir à un seul EAGLContext et de simplement y placer la référence tous les objets qui pourraient en avoir besoin peuvent le voir. Vous seriez en mesure de changer les vues que vous affichez simplement en liant le framebuffer et le rendu des couleurs appropriés.

+0

Merci Pivot. Très utile pour avoir une voix assurée à ce sujet. –

+0

Ceci est seulement la moitié de l'histoire - il semble que vous ne devez pas instancier des groupes de partage; vous devez laisser Apple le faire pour vous. c.f. cette réponse: http://stackoverflow.com/questions/7547603/multiple-eaglviews-but-only-one-copy-of-each-texture-how/7547686#7547686 – Adam

Questions connexes