# Types d'uniformes

Chaque uniforme doit avoir une propriété `value`. Le type de la valeur doit correspondre au type de la variable uniforme dans le code GLSL tel que spécifié pour les types GLSL primitifs dans le tableau ci-dessous. Les structures et tableaux d'uniformes sont également pris en charge. Les tableaux GLSL de type primitif doivent être spécifiés soit comme un tableau des objets THREE correspondants, soit comme un tableau plat contenant les données de tous les objets. En d'autres termes, les primitives GLSL dans les tableaux ne doivent pas être représentées par des tableaux. Cette règle ne s'applique pas de manière transitive. Un tableau de tableaux `vec2`, chacun d'une longueur de cinq vecteurs, doit être un tableau de tableaux, soit de cinq objets `Vector2`, soit de dix `number`s.

GLSL type | JavaScript type
--- | ---
int | Number
uint | Number
float | Number
bool | Boolean
bool | Number
vec2 | Vector2
vec2 | Float32Array (*)
vec2 | Array (*)
vec3 | Vector3
vec3 | Color
vec3 | Float32Array (*)
vec3 | Array (*)
vec4 | Vector4
vec4 | Quaternion
vec4 | Float32Array (*)
vec4 | Array (*)
mat2 | Float32Array (*)
mat2 | Array (*)
mat3 | Matrix3
mat3 | Float32Array (*)
mat3 | Array (*)
mat4 | Matrix4
mat4 | Float32Array (*)
mat4 | Array (*)
ivec2, bvec2 | Float32Array (*)
ivec2, bvec2 | Array (*)
ivec3, bvec3 | Int32Array (*)
ivec3, bvec3 | Array (*)
ivec4, bvec4 | Int32Array (*)
ivec4, bvec4 | Array (*)
sampler2D | Texture
samplerCube | CubeTexture

(*) De même pour un tableau (le plus interne) (dimension) du même type GLSL, contenant les composants de tous les vecteurs ou matrices du tableau.

## Uniforms structurés

Parfois, vous voulez organiser les uniformes en tant que `structs` dans votre code de shader. Le style suivant doit être utilisé pour que `three.js` puisse traiter les données d'uniformes structurées.

    uniforms = {
      data: {
        value: {
          position: new Vector3(),
          direction: new Vector3( 0, 0, 1 )
        }
      }
    };

Cette définition peut être mappée sur le code GLSL suivant :

    struct Data {
      vec3 position;
      vec3 direction;
    };
    uniform Data data;

## Uniforms structurés avec tableaux

Il est également possible de gérer des `structs` dans des tableaux. La syntaxe pour ce cas d'utilisation est la suivante :

    const entry1 = {
      position: new Vector3(),
      direction: new Vector3( 0, 0, 1 )
    };
    const entry2 = {
      position: new Vector3( 1, 1, 1 ),
      direction: new Vector3( 0, 1, 0 )
    };

    uniforms = {
      data: {
        value: [ entry1, entry2 ]
      }
    };

Cette définition peut être mappée sur le code GLSL suivant :

    struct Data {
      vec3 position;
      vec3 direction;
    };
    uniform Data data[ 2 ];