Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parRosemonde Clerc Modifié depuis plus de 9 années
1
OpenGL Shading Language Introduction
2
But de ce cours Non-buts Spécialistes GLSL Experts en GLSL Exploration du pipeline graphique Séparation vertex/fragment Différentes possibilités Lecture de documents techniques Spécifications Description de langage
3
Historique Rapide Années 80 : SGI IRIS GL Concept de « graphic pipeline » 1992 :OpenGL 1.0 Standard ouvert Machine à états 1993 : 1ere carte supportant OpenGL 1.0 1995 : DirectX/Direct3D 1.0 Concept d’objets 1999 : 1er pipeline hardware grand public NVIDIA GeForce
4
Pipeline Graphique © Copyright 3Dlabs
5
Vers la programmation 2000 : Register Combiners NVIDIA GeForce 2 Operation sur les textures 2001 : Vertex Program : NVIDIA GeForce 3 Fragment Shader : ATI Radeon 8500 Assembleur pour Cartes Graphiques 2002 : NVIDIA Cg : C pour le Graphique Langage de haut niveau 2003 : Direct3D HLSL OpenGL GLSL
6
Pourquoi GLSL ? OpenGL Standard ouvert Multi-plateformes IRIX, Linux, MacOS X, Windows Intégré aux drivers Mise à jour des pilotes Extensible à d’autres langages Cg (GL_EXT_Cg_shader) Proches des autres solutions HLSL / Cg
7
Différent noms DirectX/Direct3D Vertex Shader Opération sur les sommets Assembleur Pixel Shader Opération sur les fragments (après la rasterisation) Assembleur HLSL High Level Shading Language Langage de style C
8
Différent noms OpenGL Vertex Program Opération sur les sommets Assembleur Fragment Program Opération sur les fragments (après la rasterisation) Assembleur GLSL OpenGL Shading Language Langage de style C Fragment Shader / Vertex Shader
9
Pipeline Programmable © Copyright 3Dlabs
10
OpenGL 2.0 © Copyright 3Dlabs
11
Vertex Shader Peut faire Transformation des propriétés des sommets Position/normale/couleurs/coordonnées texture/… Calcul de l’éclairage Génération de coordonnées texture … Ne peut pas faire Transformation perspective Projection sur l’image Élimination des faces non-visibles Backface culling Assemblage des primitives …
12
Fragment Shader Peut faire Opérations sur les valeurs interpolées Texturing … Ne peut pas faire Histogramme Alpha test Test de profondeur Stencil test Alpha blending Opération logique Dithering …
13
Modèle GLSL Shader OpenGL Hardware Chaîne de caractères Style C Compilateur GLSL Pilote OpenGL
14
Modèle HLSL Hardware Chaîne de caractères Style C Shader HLSL Assembleur Direct3D Compilateur HLSL Librairie Direct3D Assembleur HLSL Pilote Direct3D
15
Modèle Cg Hardware Chaîne de caractères Style C Shader Cg Assembleur Direct3D Assembleur OpenGL / NVIDiA Compilateur Cg Librairie Cg Assembleur HLSL Pilote Direct3D Assembleur OpenGL Pilote OpenGL
16
Différences avec ANSI C Vecteur : 2-, 3-, ou 4- dimensions Matrices de flottants : 2x2, 3x3, or 4x4 Type “sampler” pour l’accès aux textures Qualificateur de types “attribute”, “uniform”, et “varying” Accès aux états OpenGL Fonctions pré-définies pour le graphique Mot-clef “discard” to tuer un fragment Accès aux membres des vecteurs .rgba,.xyzw,.stpq Permutations (.xxx,.stst, …)
17
Types float, vec2, vec3, vec4 1, 2, 3, ou 4 flottants int, ivec2, ivec3, ivec4 1, 2, 3, ou 4 entiers Pas de nécessité de support matériel Limitée à 16 bits de précision, avec le signe Pas de garantie de bouclage bool, bvec2, bvec3, bvec4 1, 2, 3, ou 4 booléens Pas de nécessité de support matériel
18
Types (suite) mat2, mat3, mat4 Matrices de flottants void Pour les fonctions sans valeur retournée sampler[123]D, samplerCube Texture 1D, 2D, et 3D Texture « cube map » sampler1DShadow, sampler2DShadow Texture de profondeurs 1D et 2D Construction de types Structures (struct mais pas union) Tableau
19
Qualificateur de types const attribute Donnée par sommet pour le vertex shader uniform Paramètre de shader (faible variation) varying Sortie du vertex shader Entrée du fragment shader Interpolée à la rasterisation (avec correction de perspective) in Paramètre en lecture d’un fonction out Paramètre en écriture d’un fonction inout Paramètre en lecture/écriture d’un fonction
20
Vertex Shader Vertex Processor attribute pré-défini gl_color gl_normal gl_vertex.. attribute défini par l’utilisateur varying vec3 tangent; …. varying pré-définis gl_FrontColor gl_BackColor.. variables de sortie spéciales gl_Position gl_BackColor.. varying défini par l’utilisateur varying vec3 normale;.. uniform défini par l’utilisateur uniform float time; …. uniform pré-défini gl_ModelViewMatrix, gl_FrontMaterial …. Produit par le Vertex Processor Fournie indirectement par l’application Fournie directement par l’application
21
Fragment Shader Fragment Processor varying pré-définis gl_FrontColor gl_BackColor.. variables d’entrée spéciales gl_FragCoord gl_Color.. varying défini par l’utilisateur varying vec3 normale;.. uniform défini par l’utilisateur uniform float time; …. uniform pré-défini gl_ModelViewMatrix, gl_FrontMaterial …. Produit par la rasterisation Fournie indirectement par l’application Fournie directement par l’application Produit par le fragment processor variables de sortie spéciales gl_FragDepth gl_FragColor..
22
Extensions OpenGL Plusieurs types GL_ : extensions OpenGL WGL_/AGL_/GLX_ : communication avec le fenêtrage Plusieurs sources ARB : organisme de standardisation OpenGL (officiel) EXT : couramment supportée ATI/NV/SGI/… : vendeur-spécifique ATIX/NVX/SGIX/ … : expérimentale OES/OML : pour OpenGL|ES et OpenML (consortium Khronos) …
23
Extension : Spécification Name ARB_texture_rectangle Name Strings GL_ARB_texture_rectangle …. Version Date: March 5, 2004 Revision: 0.9 Number ARB Extension #38 Dependencies OpenGL 1.1 is required OpenGL 1.4 (or ARB_texture_mirrored_repeat) affects the definition of this extension. ….. Overview .......
24
Extension : Spécification - suite New Procedures and Functions void SpriteParameteriSGIX(enum pname, int param); void SpriteParameterfSGIX(enum pname, float param); void SpriteParameterivSGIX(enum pname, int* params); void SpriteParameterfvSGIX(enum pname, float* params); New Tokens Accepted by the parameter of Enable, Disable, and IsEnabled, and by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: SPRITE_SGIX ….. Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) …… …..
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.