Association d'attributs et d'objets tampons
Chaque attribut du programme vertex shader pointe vers un objet de tampon de sommet. Après avoir créé les objets de tampon de vertex, les programmeurs doivent les associer aux attributs du programme vertex shader. Chaque attribut pointe vers un seul objet de tampon de sommet à partir duquel ils extraient les valeurs de données, puis ces attributs sont transmis au programme de shader.
Pour associer les objets Vertex Buffer aux attributs du programme vertex shader, vous devez suivre les étapes ci-dessous -
- Obtenez l'emplacement de l'attribut
- Pointez l'attribut vers un objet tampon de sommet
- Activer l'attribut
Obtenir l'emplacement de l'attribut
WebGL fournit une méthode appelée getAttribLocation()qui renvoie l'emplacement de l'attribut. Sa syntaxe est la suivante -
ulong getAttribLocation(Object program, string name)
Cette méthode accepte l'objet programme vertex shader et les valeurs d'attribut du programme vertex shader.
L'extrait de code suivant montre comment utiliser cette méthode.
var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates");
Ici, shader_program est l'objet du programme shader et coordinates est l'attribut du programme vertex shader.
Pointez l'attribut vers un VBO
Pour affecter l'objet tampon à la variable d'attribut, WebGL fournit une méthode appelée vertexAttribPointer(). Voici la syntaxe de cette méthode -
void vertexAttribPointer(location, int size, enum type, bool normalized, long stride, long offset)
Cette méthode accepte six paramètres et ils sont décrits ci-dessous.
Location- Il spécifie l'emplacement de stockage d'une variable d'attribut. Sous cette option, vous devez transmettre la valeur renvoyée par legetAttribLocation() méthode.
Size - Il spécifie le nombre de composants par sommet dans l'objet tampon.
Type - Il spécifie le type de données.
Normalized- Il s'agit d'une valeur booléenne. Si vrai, les données non flottantes sont normalisées à [0, 1]; sinon, il est normalisé à [-1, 1].
Stride - Il spécifie le nombre d'octets entre les différents éléments de données de sommet, ou zéro pour la foulée par défaut.
Offset- Il spécifie le décalage (en octets) dans un objet tampon pour indiquer de quel octet les données de sommet sont stockées. Si les données sont stockées depuis le début, le décalage est égal à 0.
L'extrait suivant montre comment utiliser vertexAttribPointer() dans un programme -
gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0);
Activation de l'attribut
Activez l'attribut vertex shader pour accéder à l'objet tampon dans un vertex shader. Pour cette opération, WebGL fournitenableVertexAttribArray()méthode. Cette méthode accepte l'emplacement de l'attribut comme paramètre. Voici comment utiliser cette méthode dans un programme -
gl.enableVertexAttribArray(coordinatesVar);