WebGLRenderingContext.bufferData()
==================================

La méthode **`WebGLRenderingContext.bufferData()`** de l'API WebGL initialise et crée le magasin de données de l'objet tampon.

Syntaxe
-------


```js
// WebGL1:
void gl.bufferData(cible, taille, utilisation);
void gl.bufferData(cible, ArrayBuffer? donneesSrc, utilisation);
void gl.bufferData(cible, ArrayBufferView donneesSrc, utilisation);

// WebGL2:
void gl.bufferData(cible, ArrayBufferView donneesSrc, utilisation, decalageSrc, longueur);
```

### Paramètres

cible

Un `GLenum` (en-US) spécifiant le point de liaison (cible). Valeurs possibles :

* `gl.ARRAY_BUFFER` : tampon contenant des attributs de sommet, tels que des coordonnées de sommet, des données de coordonnées de texture ou des données de couleurs de sommet ;
* `gl.ELEMENT_ARRAY_BUFFER` : tampon utilisé pour les indices d'éléments ;
* lors de l'utilisation d'un WebGL context 2, les valeurs suivantes sont en outre disponibles :
    + `gl.COPY_READ_BUFFER` : tampon pour la copie d'un objet tampon à un autre ;
    + `gl.COPY_WRITE_BUFFER` : tampon pour la copie d'un objet tampon à un autre ;
    + `gl.TRANSFORM_FEEDBACK_BUFFER` : tampon pour les opérations de retour de transformation ;
    + `gl.UNIFORM_BUFFER` : tampon utilisé pour stocker des blocs uniform ;
    + `gl.PIXEL_PACK_BUFFER` : tampon utilisé pour les opérations de transfert de pixels ;
    + `gl.PIXEL_UNPACK_BUFFER` : tampon utilisé pour les opérations de transfert de pixels.

taille

Un `GLsizeiptr` (en-US) définissant la taille du magasin de données de l'objet tampon.

donneesSrc Facultatif

Un `ArrayBuffer`, `SharedArrayBuffer` ou l'un des types de tableau typés `ArrayBufferView` (en-US) à copier dans le magasin de données. Si `null`, un magasin de données est quand même créé, mais son contenu n'est ni initialisé, ni défini.

utilisation

Un `GLenum` (en-US) indiquant le modèle d'utilisation du magasin de données. Valeurs possibles :

* `gl.STATIC_DRAW` : le contenu du tampon est susceptible d'être utilisé souvent mais de ne pas changer souvent ; du contenu est écrit dans le tampon, mais non lu ;
* `gl.DYNAMIC_DRAW` : le contenu du tampon est susceptible d'être souvent utilisé et de changer souvent ; du contenu est écrit dans le tampon, mais non lu ;
* `gl.STREAM_DRAW` : le contenu du tampon est susceptible de ne pas être utilisé souvent ; du contenu est écrit dans le tampon, mais non lu ;
* lors de l'utilisation d'un WebGL 2 context, les valeurs suivantes sont en outre disponibles :
    + `gl.STATIC_READ` : le contenu du tampon est susceptible d'être utilisé souvent et de ne pas changer souvent ; du contenu est lu depuis le tampon, mais non écrit ;
    + `gl.DYNAMIC_READ` : le contenu du tampon est susceptible d'être utilisé souvent et de changer souvent ; du contenu est lu depuis le tampon, mais non écrit ;
    + `gl.STREAM_READ` : le contenu du tampon est susceptible de ne pas être utilisé souvent ; du contenu est lu depuis le tampon, mais non écrit ;
    + `gl.STATIC_COPY` : le contenu du tampon est susceptible d'être utilisé souvent et de ne pas changer souvent ; aucun contenu n'est écrit ou lu par l'utilisateur ;
    + `gl.DYNAMIC_COPY` : le contenu du tampon est susceptible d'être utilisé souvent et de changer souvent ; aucun contenu n'est écrit ou lu par l'utilisateur ;
    + `gl.STREAM_COPY` : le contenu du tampon est susceptible d'être utilisé souvent et de ne pas changer souvent ; aucun contenu n'est écrit ou lu par l'utilisateur.

decalageSrc

Un `GLuint` (en-US) indiquant le décalage d'indice d'élément où commencer à lire dans le tampon.

`longueur` Facultatif

Un `GLuint` (en-US) valant 0 par défaut.

### Valeur retournée

Aucune.

### Exceptions

* Une erreur `gl.OUT_OF_MEMORY` est déclenchée si le contexte ne peut pas créer un magasin de données de la `taille` indiquée.
* Une erreur `gl.INVALID_VALUE` est déclenchée si `taille` est négative.
* Une erreur `gl.INVALID_ENUM` est déclenchée si `cible` ou `utilisation` ne sont pas l'un des enums autorisés.
Exemples
--------

### Utilisation de `bufferData`


```js
var canevas = document.getElementById("canevas");
var gl = canevas.getContext("webgl");
var tampon = gl.createBuffer();
gl.bindBuffer(gl.ARRAY\_BUFFER, tampon);
gl.bufferData(gl.ARRAY\_BUFFER, 1024, gl.STATIC\_DRAW);
```

### Récupération de l'information de tampon

Pour vérifier l'utilisation du tampon en cours et la taille du tampon, utiliser la méthode `WebGLRenderingContext.getBufferParameter()` (en-US).


```js
gl.getBufferParameter(gl.ARRAY\_BUFFER, gl.BUFFER\_SIZE);
gl.getBufferParameter(gl.ARRAY\_BUFFER, gl.BUFFER\_USAGE);
```

Spécifications
--------------

| Specification |
| --- |
| WebGL Specification # 5.14.5 |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* `WebGLRenderingContext.createBuffer()`
* `WebGLRenderingContext.bufferSubData()` (en-US)
* Autres tampons : `WebGLFramebuffer`, `WebGLRenderbuffer` (en-US)