2012-03-19 3 views
1

Est-il possible de mélanger les appels OpenGL ES 1 et OpenGL ES 2? Supposons que vous utilisiez des bibliothèques qui implémentent des routines dans OpenGL ES 1 et que votre base de code existante soit OpenGL ES 2. Quelle serait une bonne façon d'y parvenir, supposons qu'elles soient rendues dans des passes de rendu différentes?Mixage OpenGL ES 1 et OpenGL ES 2

Répondre

4

OpenGL ES 2.0 n'est pas rétrocompatible avec OpenGL ES 1.x. Assez par définition, cela signifie que 2.0 n'est pas compatible avec 1.x. Pour la plupart. Selon la langue et la liaison à GL ES (que vous n'avez pas indiquée), il est possible que vous puissiez recompiler le code qui a été écrit pour ES 1.x pour ES 2.0. Ou que l'initialisation de ES 2.0 entraînerait l'acheminement de toutes les fonctions GL. Cela signifie que si ES 1.x et 2.0 partageaient une fonction, le code qui appelait cette fonction appelait toute version de GL ES initialisée. Encore une fois, vous n'avez pas dit quelle langue et comment vous l'initialisiez.

Il existe certaines fonctions dans ES qui fonctionnent plus ou moins de la même manière à partir de ES 1.1 et ES 2.0. Je dirais que l'initialisation et la configuration de la texture n'ont pas beaucoup changé (vous devriez lire les spécifications pour voir à quel point cela a changé). Et les appels de dessin de tableau réels (glDrawArrays, glDrawElements) sont plus ou moins les mêmes. Et certains des composants principaux tels que glViewport, glDepthRangef et similaires sont identiques.

Mais toute autre chose (comment les tableaux de vertex sont utilisés, le mode immédiat, etc.) est différent et incompatible.

4

Vous pouvez mélanger OpenGL ES 2.0 et OpenGL ES 1.1 dans la même application, mais vous ne pouvez pas mélanger les commandes des deux API différentes avec une seule liaison de contexte. Dès que vous émettez une commande GL ES 1.1 uniquement sur une liaison de contexte ES 2.0 ou vice-versa, votre application va planter et il ne sera pas évident de savoir pourquoi elle se bloque sauf si vous en êtes conscient. Lorsque des contextes sont créés, vous devez choisir l'API que vous utilisez et la respecter pour chaque commande GL émise lorsque ce contexte est lié. Donc, en ce qui concerne l'utilisation mixte des deux API dans une application, rien ne vous empêche de lier un contexte ES 1.1 sur un thread et d'émettre uniquement des appels ES 1.1 sur ce thread dans la même application que celle que vous avez un contexte ES 2.0 sur un autre thread avec rien d'autre que des commandes ES 2.0 émises sur ce thread.

Mais comme les messieurs de Ghostbusters a déclaré: "Ne traversez pas les cours d'eau !!".