OpenGL ES

OpenGL ES est une API(Application Programmable Interface) graphique standard maintenu par le groupe Khronos. Elle est conçue pour répondre aux besoins graphiques 2D et 3D des appareils embarqués.

=Résumé=

Au début du 21ème siècle, avec l'émergence de multiples plateformes mobiles nécessitant de hautes capacités graphiques 2D et 3D est apparue la nécessité d'une API graphique mobile standardisée. Issue d'OpenGL, l'API graphique ouverte et libre pour les applications de bureau, OpenGL ES (Embedded System) est une version allégée d'OpenGL destinée à fonctionner sur des dispositifs contraints.

Les premières versions de l'API, OpenGL ES 1.0 et 1.1, ont été construit sur OpenGL 1.3 et 1.5 respectivement et ont hérité du pipeline à fonction fixe. La dernière itération datant de 2007, OpenGL ES 2.0, utilise maintenant le pipeline programmable plus moderne et donnant plus de pouvoir aux programmeurs lors du développement graphique de leurs applications.

OpenGL ES 2.0 est disponible dans la plupart des plateformes mobiles récentes comme Android, iOS et Windows Mobile et est aussi au cœur de la technologie WebGL.

Mots clés : OpenGL, OpenGL ES, pipeline graphique, 3D, mobile

=Abstract=

At the beginning of the 21st century with the emergence of multiple mobile plateforms where high 2D and 3D graphics capabilities were needed a new industry standard was created. Stemming from OpenGL, the open and free graphics API for desktop applications, OpenGL ES(Embedded System) is a lightweight version of the API meant to run on constrained devices.

The first iterations of the API, OpenGL ES 1.0 and 1.1, were built upon OpenGL 1 and inherited its fixed function pipeline. The last iteration as of 2007, OpenGL ES 2.0, now uses the more modern programmable pipeline which gives more power to programmers in the graphic development of their applications.

OpenGL ES 2.0 is available in most recent mobile plateforms such as Android, iOS and Windows Mobile and is also at the core of the WebGL technology.

Key words : OpenGL, OpenGL ES, graphics pipeline, 3D, mobile

=Contexte=

L'apparition depuis 2007 sur le marché d'appareils mobiles dotés de GPUs mobiles dédiés tel que le PowerVR SGX d'Imagination Technologies ou l'Adreno de Qualcomm a permis aux développeurs d'applications mobiles d'utiliser des graphiques 2D et 3D jusque-là réservés aux ordinateurs de bureau. Les premiers avantages se retrouvent d'abord dans les jeux vidéos proposés sur mobile qui apportent de plus en plus la composante 3D. De nouvelles applications tirant parti d'une API graphique puissante sont apparues sur les plate-formes mobiles tel que les applications de réalité augmentée (Face Tracking par exemple).

Les plate-formes mobiles sont nombreuses avec comme acteurs majeurs du marché des smartphones et tablettes tactiles Android de Google, iOS d'Apple, Windows Phone de Microsoft, et BlackBerry de RIM entre autres. Néanmoins grâce à la standardisation apportée par OpenGL ES chacune de ces plate-formes partagent un environnement de développement pour graphiques 2D/3D basé sur une implémentation d'OpenGL ES ce qui facilite le portage des applications entre ces plate-formes et permet de fortement rentabiliser une formation sur OpenGL ES.

=Le pipeline graphique programmable=

L'API OpenGL ES 2.0 est basée sur une version light d'OpenGL 2 et en hérite l'utilisation d'un pipeline graphique programmable pour le traitement et l'affichage de primitives graphiques. Il ne comporte pas de pipline graphique à fonction fixe comme OpenGL ES 1.x pour des raisons de redondance, l'espace fournit par les systèmes embarqués étant souvent restraint.

Les élèments programmables du pipeline sont des Shaders (ombrage). Ils sont exécutés sur le GPU à différents stages du traitement et sont programmés avec le langage GLSL (Graphic Library Shading Language) défini avec OpenGL. OpenGL ES 2.0 comporte deux styles de shaders, les vertex (sommets) shaders qui manipulent les sommets (des sommets de coordonnées spatiales x y z) et les fragment shaders, aussi appelés pixel shaders, qui calculent la couleur de chaque pixel affiché.

Le pipeline d'OpenGL ES 2.0 se résume à un traitement de sommets 3D fournis par le programme au GPU sous la forme de tableau, ces sommets sont transformés via des rotations, des translations et des changements d'échelle par exemple, par le vertex shader pour former une scène 3D. Des primitives géométriques, souvent des triangles, sont ensuite utilisées pour assembler les sommets et la scéne 3D est alors rasterisée sous forme de matrice 2D contenant des pixels. Ces pixels sont coloriés par le pixel shader et sont enfin affichés à l'écran.

=Développer avec OpenGL ES 2.0 sur Android=

Android propose deux environnements de développement pour créer des applications OpenGL ES 2.0. L'Android SDK(Software Development Kit) qui permet de développer en Java et l'Android NDK(Native Development Kit) qui permet de développper en C/C++.

=Portabilité=

L'utilisation du langage GLSL pour créer des shaders permet d'obtenir un code directment portable et les appels à l'API d'OpenGL étant standardisés il est généralement rapide de porter une application d'une plate-forme à une autre (iOS à Android par exemple). Néanmoins cette standardisation reste relative car les implémentations d'OpenGL ES ne respectent pas forcément toute la spécification fixée par le groupe Chronos et il faut donc connaître les particularités des plate-formes sur lesquels l'on porte nos applications.

=Sources=

OpenGL ES
OpenGL ES on the Khronos group website

OpenGL ES 2.x

Book
OpenGL ES 2.0 Programming Guide

Tutoriels et exemples