2015-07-16 4 views
2

Si je développe actuellement un jeu pour Windows en utilisant SDL et GLEW (pour OpenGL 3.0+) et que je veux plus tard porter mon jeu sur Android, devrai-je réécrire la majorité de mon code pour convertir OpenGL 3.0 en OpenGL ES? 2,0? Y a-t-il des programmes qui le font pour moi? Est-ce un gros problème de passer d'OpenGL à OpenGL ES?Est-ce un gros problème de passer d'OpenGL 3.0 à OpenGL ES 2.0?

+0

C'est quelque chose que vous auriez pu trouver vous-même avec une recherche google rapide. – CoffeeandCode

+0

duplication possible de [OpenGL ES 2.0 vs OpenGL 3 - similitudes et différences] (http://stackoverflow.com/questions/9629897/opengl-es-2-0-vs-opengl-3-similarities-and-differences) – CoffeeandCode

Répondre

1

Cela dépend vraiment de votre code

OpenGL ES 2.0 (et 3.0) est principalement un sous-ensemble de Desktop OpenGL. La plus grande différence est qu'il n'y a pas de pipeline à fonction fixe héritée dans ES. Quel est le pipeline de fonction fixe? Tout ce qui touche à glVertex, glColor, glNormal, glLight, glPushMatrix, glPopMatrix, glMatrixMode, etc ... en utilisant GLSL l'une des variables qui accèdent aux données de fonctions fixes comme gl_Vertex, gl_Normal, gl_Color, gl_MultiTexCoord, gl_FogCoord etc ...

Si vous utilisez l'une de ces fonctions, vous aurez du travail à faire pour vous. OpenGL ES 2.0 et 3.0 sont simplement des shaders. Aucune "3d" n'est fournie pour vous. Vous devez écrire toute la projection, l'éclairage, les références de texture, etc.

Si vous le faites déjà (ce que font probablement les jeux les plus modernes), vous n'aurez peut-être pas trop de travail. Si d'un autre côté, vous utilisez ces vieilles fonctionnalités OpenGL obsolètes qui, d'après mon expérience, sont encore très courantes (la plupart des tutoriels utilisent encore ce genre de choses). Ensuite, vous avez un peu de travail à vous couper lorsque vous essayez de reproduire ces fonctionnalités par vous-même.

Il existe une bibliothèque open source, regal, qui a été démarrée par NVidia. C'est censé reproduire ce genre de choses. Soyez conscient que tout le système de fonction fixe était assez inefficace, ce qui est l'une des raisons pour lesquelles il était obsolète, mais il pourrait être un moyen de faire fonctionner les choses rapidement.

4

Pas du tout, il est très facile à convertir.

Seules les différences sont les variables de shader et les constantes, et les suffixes comme GL_RGBA8 à GL_RGBA8_OES. Cependant, il existe des limites dans OpenGL ES. Par exemple, vous pouvez utiliser uniquement GL_UNSIGNED_BYTE ou GL_UNSIGNED_SHORT comme type de données d'index GL_UNSIGNED_INT. Ce qui signifie que vous ne pouvez pas tirer plus de 65.535 indices en une fois. Il est pas un gros problème même si vous devez vous référer au manuel OpenGL ES officiel, https://www.khronos.org/opengles/sdk/docs/man/

Référez-vous au lien OpenGL ES 2.0 vs OpenGL 3 - Similarities and Differences par coffeeandcode

+1

Je ne dirais pas que c'est généralement vrai. OpenGL 3.x possède des fonctionnalités importantes qui ne sont pas disponibles dans ES 2.0. Si vous utilisez l'un d'entre eux, le portage vers ES 2.0 nécessitera beaucoup de travail ou sera totalement impossible pour certaines fonctionnalités. –

+1

J'utilise mon propre moteur de rendu qui est combiné GL 3.3 et GL ES 2.0. Cela fonctionne sur toutes les plates-formes mais c'est aussi vrai parce que, relativement, GL ES n'a pas assez de fonctionnalités en raison des faibles performances mobiles. Je me demande si vous pouvez me dire quelles fonctionnalités sont impossibles à convertir. – Sung

+0

Les textures 3D me viennent à l'esprit. –