Article de reference

Langage de shaders OpenGL

Les jeux vidéo sous-traitent les calculs de rendu au GPU via OpenGL en temps réel. Les shaders sont écrits en langage de shaders OpenGL et compilés. Les programmes compilés sont...

Les jeux vidéo sous-traitent les calculs de rendu au GPU via OpenGL en temps réel. Les shaders sont écrits en langage de shaders OpenGL et compilés. Les programmes compilés sont ensuite exécutés sur le GPU.

Le langage de shaders OpenGL ( GLSL ) est un langage de shaders de haut niveau dont la syntaxe est basée sur le langage de programmation C. Il a été créé par l' OpenGL ARB (OpenGL Architecture Review Board) afin d'offrir aux développeurs un contrôle plus direct du pipeline graphique sans avoir à utiliser le langage assembleur ARB ni des langages spécifiques au matériel.

Arrière-plan

Grâce aux progrès réalisés dans le domaine des cartes graphiques, de nouvelles fonctionnalités ont été ajoutées afin d'accroître la flexibilité du pipeline de rendu au niveau des sommets et des fragments . La programmabilité à ce niveau est assurée par l'utilisation de shaders de fragments et de sommets .

À l'origine, cette fonctionnalité était obtenue en écrivant des shaders en langage assembleur ARB , une tâche complexe et peu intuitive. L' ARB d'OpenGL a créé le langage de shaders OpenGL afin de proposer une méthode plus intuitive pour programmer le processeur graphique, tout en préservant l'avantage des standards ouverts qui a toujours caractérisé OpenGL.

Initialement conçu comme une extension d'OpenGL 1.4, GLSL a été officiellement intégré au noyau d'OpenGL 2.0 en 2004 par l'OpenGL ARB. Il s'agissait de la première révision majeure d'OpenGL depuis la création d' OpenGL 1.0 en 1992.

L'utilisation de GLSL présente certains avantages :

  • Compatibilité multiplateforme sur plusieurs systèmes d'exploitation, notamment Linux , macOS et Windows .
  • La possibilité d'écrire des shaders utilisables sur les cartes graphiques de n'importe quel fabricant de matériel prenant en charge le langage de shaders OpenGL.
  • Chaque fabricant de matériel inclut le compilateur GLSL dans son pilote, ce qui lui permet de créer un code optimisé pour l'architecture spécifique de sa carte graphique.

Versions

Les versions de GLSL ont évolué parallèlement aux versions spécifiques de l'API OpenGL. Ce n'est qu'à partir de la version 3.3 d'OpenGL que les numéros de version majeurs et mineurs de GLSL et d'OpenGL correspondent. Ces versions de GLSL et d'OpenGL sont référencées dans le tableau suivant :

OpenGL ES et WebGL utilisent le langage de shaders OpenGL ES (abrégé : GLSL ES ou ESSL ).

Les deux langues sont apparentées mais pas directement compatibles. Elles peuvent être interconverties via SPIRV-Cross .

Langue

Opérateurs

GLSL contient les mêmes opérateurs que ceux de C et C++ , à l'exception des pointeurs . Les opérateurs bit à bit ont été ajoutés dans la version 1.30.

Fonctions et structures de contrôle

À l'instar du langage de programmation C , GLSL prend en charge les boucles et les branchements, par exemple : if-else, for, switch, etc. La récursivité est interdite et vérifiée lors de la compilation.

Les fonctions définies par l'utilisateur sont prises en charge et des fonctions intégrées sont fournies. Le fabricant de la carte graphique peut optimiser les fonctions intégrées au niveau matériel. Nombre de ces fonctions sont similaires à celles de la bibliothèque mathématique du langage C, tandis que d'autres sont spécifiques à la programmation graphique. La plupart des fonctions et opérateurs intégrés peuvent agir sur des scalaires et des vecteurs (jusqu'à 4 éléments), pour un ou deux opérandes. Parmi les fonctions intégrées couramment utilisées en graphisme, on trouve : la surcharge de fonctions (intégrées et définies par l'utilisateur), ce qui permet à plusieurs fonctions de porter le même nom, avec un nombre ou un type de paramètres différent. Chaque fonction peut avoir son propre type de retour.pow(vec3(1.5,2.0,2.5))abs(vec3(0.1,-0.2,0.3)))

Préprocesseur

GLSL définit un sous-ensemble du préprocesseur C (CPP), combiné à ses propres directives spéciales pour spécifier les versions et les extensions OpenGL. Les parties supprimées de CPP sont celles relatives aux noms de fichiers tels que L'

Compilation et exécution

Les shaders GLSL ne sont pas des applications autonomes ; ils nécessitent une application utilisant l’API OpenGL, disponible sur de nombreuses plateformes ( Linux , macOS , Windows , etc. ). Il existe des liaisons pour C , C++ , C# , JavaScript , Delphi , Java et bien d’autres langages.

Les shaders GLSL sont simplement des chaînes de caractères transmises au pilote du fournisseur de matériel pour compilation depuis une application, via les points d'entrée de l'API OpenGL. Ces shaders peuvent être créés dynamiquement depuis une application ou chargés à partir de fichiers texte, mais doivent impérativement être envoyés au pilote sous forme de chaîne de caractères.

L'ensemble des API utilisées pour compiler, lier et passer des paramètres aux programmes GLSL est spécifié dans trois extensions OpenGL et fait partie intégrante d'OpenGL depuis la version 2.0. L'API a été étendue avec les shaders de géométrie dans OpenGL 3.2, les shaders de tessellation dans OpenGL 4.0 et les shaders de calcul dans OpenGL 4.3. Ces API OpenGL se trouvent dans les extensions suivantes :

  • nuanceur de vertex ARB
  • nuanceur de fragments ARB
  • objets de shader ARB
  • ARB geometry shader 4
  • shader de tessellation ARB
  • shader de calcul ARB

Les shaders GLSL peuvent également être utilisés avec Vulkan et constituent une méthode courante pour utiliser des shaders dans Vulkan. Les shaders GLSL sont précompilés avant utilisation, ou à l'exécution, en un format de bytecode binaire appelé SPIR-V , généralement à l'aide d'un compilateur hors ligne.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index