Gambas Documentation
Aperçu du Langage
À traduire
Code Snippets
Comment faire ...
Compilation et installation
Composants
gb
gb.args
gb.cairo
gb.clipper
gb.complex
gb.compress
gb.crypt
gb.db
gb.db.form
gb.dbus
gb.debug
gb.desktop
gb.desktop.gnome.keyring
gb.eval
gb.eval.highlight
gb.form
gb.form.dialog
gb.form.editor
gb.form.mdi
gb.gmp
gb.gsl
gb.gtk
gb.gtk3
gb.gui
gb.image
gb.image.effect
gb.image.imlib
gb.image.io
gb.inotify
gb.libxml
gb.media
gb.mysql
gb.net
gb.net.curl
gb.net.smtp
gb.openal
gb.opengl
gb.opengl.glsl
Gl
AttachShader
CompileShader
CreateProgram
CreateShader
DeleteProgram
DeleteShader
DetachShader
GetAttachedShaders
GetProgramInfoLog
GetProgramiv
GetShaderInfoLog
GetShaderiv
GetShaderSource
IsProgram
IsShader
LinkProgram
ShaderSource
Uniform1f
Uniform1fv
Uniform1i
Uniform1iv
Uniform2f
Uniform2fv
Uniform2i
Uniform2iv
Uniform3f
Uniform3fv
Uniform3i
Uniform3iv
Uniform4f
Uniform4fv
Uniform4i
Uniform4iv
UniformMatrix2fv
UniformMatrix2x3fv
UniformMatrix2x4fv
UniformMatrix3fv
UniformMatrix3x2fv
UniformMatrix3x4fv
UniformMatrix4fv
UniformMatrix4x2fv
UniformMatrix4x3fv
UseProgram
ValidateProgram
VertexAttrib1f
VertexAttrib1fv
VertexAttrib2f
VertexAttrib2fv
VertexAttrib3f
VertexAttrib3fv
VertexAttrib4f
VertexAttrib4fv
gb.opengl.glu
gb.opengl.sge
gb.option
gb.pcre
gb.pdf
gb.qt4
gb.qt4.ext
gb.qt4.opengl
gb.qt4.webkit
gb.qt5
gb.qt5.opengl
gb.report
gb.scanner
gb.sdl
gb.sdl.sound
gb.settings
gb.signal
gb.util
gb.util.web
gb.v4l
gb.vb
gb.web
gb.web.feed
gb.xml
gb.xml.html
gb.xml.rpc
gb.xml.xslt
Controls pictures
Derniers changements
Dépôt d'applications
Documentation de l'Environnement de développement
Documentation des développeurs
Documents
Indenter
Index de tous les Documents
Index du langage
Lexique
LISEZ-MOI
Manuel du wiki
Messages d'erreur
Tutoriels
Wiki License

Gl.LinkProgram (gb.opengl.glsl)

Static Sub LinkProgram ( Program As Integer )

Lie un programme objet

Paramètres

program

Spécifie le gestionnaire de l’ objet programme à lier.

Description

Gl.LinkProgram lie l’objet programme spécifié par Program. Si des objets shader de type Gl.VERTEX_SHADER sont rattachés à Program, ils seront utilisés pour créer un exécutable qui tournera sur le processeur de sommets programmable. Si des objets shader de type Gl.GEOMETRY_SHADER sont rattachés à Program, ils seront utilisés pour créer un exécutable qui tournera sur le processeur de géométrie programmable. Si des objets shader de type Gl.FRAGMENT_SHADER sont rattachés à Program, ils seront utilisés pour créer un exécutable qui tournera sur le processeur de fragments.

L’état de l’opération de liaison sera enregistré comme partie de l’état du programme objet. Cette valeur sera positionnée à Gl.TRUE si le programme objet a été lié sans erreur et prêt à être utilisé, et Gl.FALSE dans le cas contraire. Il peut être interrogé par appel à Gl.GetProgram avec les arguments program et Gl.LINK_STATUS.

En résultat d’une opération de liaison réussie, toute variable uniform active définie par l’utilisateur appartenant à program sera initialisée à 0, et à chaque variable uniform active de programme objet actif sera assigné un emplacement qui peut être interrogé par appel à Gl.GetUniformLocation. De même, toute variable attribut active définie par l’utilisateur qui n’a pas été reliée à un index d’attribut de sommet générique sera reliée à cet instant.

La liaison d’un programme objet peut échouer pour nombre de raisons comme spécifié dans les spécifications du langage OpenGL Shading . Ci-dessous la liste des conditions qui entraîneront une erreur de liaison :
  • Le nombre de variables attribut actives géré par l’implémentation a été dépassé.
  • La limite de stockage des variables uniform a été dépassée.
  • Le nombre de variables uniform actives géré par l’implémentation a été dépassé.
  • La fonction main pour le shader de sommets, de fragments ou de géométrie est manquante.
  • Une variable non constante actuellement utilisée dans le reflet de fragments n’est pas déclarée de la même manière (ou n’est pas déclarée du tout) dans le shader de sommets ou de géométrie si présent.
  • Une référence a un nom de fonction ou de variable n’est pas résolue.
  • Une global partagée est déclarée avec deux types différents ou deux valeurs initiales différentes.
  • Un objet reflet attaché, ou plus, n’a pas été compilé avec succès.
  • Le rattachement d’une matrice attribut générique conduit à ce que des rangées de la matrice tombent en dehors du maximum autorisé pour Gl.MAX_VERTEX_ATTRIBS.
  • Il ne peut être trouvé suffisamment d’attributs de connexions de sommets contigus pour se rattacher aux matrices attribut.
  • L’ objet programme contient des objets pour former un shader de fragment mais ne contient pas d’objet pour former un shader de sommet.
  • L’ objet programme contient des objets pour constituer un shader de géométrie mais ne contient pas d’objet pour former un shader de sommet.
  • L’ objet programme contient des objets pour constituer un shader de géométrie et le type de la primitive d’ entrée, le type de la primitive de sortie, ou le maximum de sommets en sortie n’est spécifié dans aucun objet shader de geometrie.
  • L’ objet programme contient des objets pour constituer un shader de géométrie et le type de la primitive d’ entrée, le type de la primitive de sortie, ou le décompte maximum de sommets en sortie est spécifié différemment dans de multiples objets shader de géométrie.
  • Le nombre de sorties actives du shader de fragment est plus grand que la valeur de Gl.MAX_DRAW_BUFFERS.
  • Le programme a une sortie active assignée à un emplacement égal ou plus grand que la valeur de Gl.MAX_DUAL_SOURCE_DRAW_BUFFERS Et possède une sortie active assignée à un indice plus grand ou égal à un.
  • Plus d’une variable de sortie liée à un même numéro et indice.
  • Les assignations de lien explicites n’ont pas assez de place pour que le linker assigne automatiquement un emplacement pour un tableau variable en sortie, requerrant des emplacements contigus multiples.
  • Le count spécifié par Gl.TransformFeedbackVaryings n’est pas nul, mais l’objet programme n’a pas de shader sommet ou géométrie.
  • Un nom de variable spécifié à Gl.TransformFeedbackVaryings dans le tableau varyings n’est pas déclaré comme sortie dans le shader de sommet (ou de geometrie, si activé).
  • Deux entrées du tableau varyings transmis à Gl.TransformFeedbackVaryings Specifient la même variable.
  • Le nombre total de composantes à capturer dans une variable de feedback de transformation est plus grand que la constante Gl.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS Et le mode du tampon est SEPARATE_ATTRIBS.

Quand un programme objet a été lié avec succès, le programme objet peut faire partie de l’état courant via l’appel à Glu.seProgram. Que l’opération de liaison ait réussi ou non, le log d’information du programme sera réécrit. le log d’information peut être extrait par Gl.GetProgramInfoLog.

Gl.LinkProgram installera également les exécutables générés comme parties de l’état de rendu courant si l’opération de liaison a été couronnée de succès et que le programme objet spécifié est déjà en cours d’utilisation en tant que résultat d’un précédent appel à Gl.useProgram. Si l’objet programme en cours d’utilisation échoue dans une nouvelle liaison, son état de liaison sera positionné à Gl.FALSE , mais les exécutables et les états associés continueront à faire partie de l’état courant jusqu’à ce qu’un appel subséquent à Gluse.Program le retire. Une fois retiré, il ne peut plus faire partie de de l’état en cours tant qu’il n’a pas été à nouveau lié avec succès.

Si program contient des objets shader de type Gl.VERTEX_SHADER , et optionnellement de type Gl.GEOMETRY_SHADER, mais ne contient pas d’objet shader de type Gl.FRAGMENT_SHADER, l’exécutable de shader de sommets sera installé dans le processeur programmable de sommet, l’exécutable de shader de géométrie, si présent, sera installé dans le processeur dans le processeur programmable de géométrie, mais aucun exécutable ne sera installé dans le processeur de fragment. Le résultat des primitives de rasterisation avec un tel programme sera indéterminé.

Le log d’information de l’ objet programme est mis à jour et le programme est généré au moment de l’opération de liaison. Après l’opération de liaison, les applications peuvent modifier les objets shader attachés, les compiler, les détacher, et attacher d’autres objets shader. Aucune de ces opérations n’affecte le log d’information du programme qui fait partie du programme objet.

Notes

Si l’opération de liaison échoue, toute information concernant une précédente opération de liaison sur program est perdue (c.a.d. une liaison infructueuse ne restaure pas l’état antérieur de program). Certaines informations de program peuvent encore être récupérées même après une opération de liaison infructueuse. Voir, en l’occurrence, Gl.GetActiveAttrib et Gl.GetActiveUniform.

Erreurs

Gl.INVALID_VALUE est généré si Program n’est pas une valeur générée par OpenGL.

Gl.INVALID_OPERATION est généré si Program n’est pas un programme objet.

Gl.INVALID_OPERATION est généré si Program est l’obet programme actuellement actif et que le mode de feedback de transformation est actif.

Gets Associés

Gl.Get avec l’argument Gl.CURRENT_PROGRAM

Gl.GetActiveAttrib avec l’argument program et l’index d’une variable attribut active.

Gl.GetActiveUniform avec l’argument program et l’indice d’une variable uniform active_

Gl.GetAttachedShaders avec l’argument _ program

Gl.GetAttribLocation avec l’argument _ program_ et le nom d’une variable attribut

Gl.GetProgram avec l’argument _ program_ et and Gl.LINK_STATUS

Gl.GetProgramInfoLog avec l’argument _ program

Gl.GetUniform avec l’argument program et l’emplacement d’une variable uniform

Gl.GetUniformLocation avec l’argument program et le nom d’une variable uniform

Gl.IsProgram

Voir aussi

Voir documentation originale sur le site OpenGL