Provided by: allegro5-doc_5.2.6.0-1_all bug

NAME

       ALLEGRO_PRIM_ATTR - Allegro 5 API

SYNOPSIS

              #include <allegro5/allegro_primitives.h>

              typedef enum ALLEGRO_PRIM_ATTR

DESCRIPTION

       Enumerates the types of vertex attributes that a custom vertex may have.

       · ALLEGRO_PRIM_POSITION    -    Position    information,    can    be   stored   only   in
         ALLEGRO_PRIM_SHORT_2, ALLEGRO_PRIM_FLOAT_2 and ALLEGRO_PRIM_FLOAT_3.

       · ALLEGRO_PRIM_COLOR_ATTR - Color information, stored in an  ALLEGRO_COLOR(3alleg5).   The
         storage field of ALLEGRO_VERTEX_ELEMENT is ignored

       · ALLEGRO_PRIM_TEX_COORD   -  Texture  coordinate  information,  can  be  stored  only  in
         ALLEGRO_PRIM_FLOAT_2 and ALLEGRO_PRIM_SHORT_2.  These coordinates are normalized by  the
         width  and  height  of  the  texture,  meaning  that the bottom-right corner has texture
         coordinates of (1, 1).

       · ALLEGRO_PRIM_TEX_COORD_PIXEL - Texture coordinate information, can  be  stored  only  in
         ALLEGRO_PRIM_FLOAT_2  and  ALLEGRO_PRIM_SHORT_2.   These  coordinates  are  measured  in
         pixels.

       · ALLEGRO_PRIM_USER_ATTR - A user specified attribute.  You can use any storage  for  this
         attribute.  You may have at most ALLEGRO_PRIM_MAX_USER_ATTR (currently 10) of these that
         you can specify by adding an index to  the  value  of  ALLEGRO_PRIM_USER_ATTR,  e.g. the
         first user attribute is ALLEGRO_PRIM_USER_ATTR + 0, the second is ALLEGRO_PRIM_USER_ATTR
         + 1 and so on.

         To access these custom attributes from GLSL shaders you need to declare attributes  that
         follow this nomenclature: al_user_attr_# where # is the index of the attribute.

         For  example to have a position and a normal vector for each vertex you could declare it
         like this:

                ALLEGRO_VERTEX_ELEMENT elements[3] = {
                    {ALLEGRO_PRIM_POSITION, ALLEGRO_PRIM_FLOAT_3, 0},
                    {ALLEGRO_PRIM_USER_ATTR + 0, ALLEGRO_PRIM_FLOAT_3, 12},
                    {0, 0, 0}};

         And then in your vertex shader access it like this:

                attribute vec3 al_pos; // ALLEGRO_PRIM_POSITION
                attribute vec3 al_user_attr_0; // ALLEGRO_PRIM_USER_ATTR + 0
                varying float light;
                const vec3 light_direction = vec3(0, 0, 1);
                void main() {
                    light = dot(al_user_attr_0, light_direction);
                    gl_Position = al_pos;
                }

         To access these custom attributes from HLSL you need to declare  a  parameter  with  the
         following  semantics:  TEXCOORD{# + 2} where # is the index of the attribute.  E.g.  the
         first attribute can be accessed via TEXCOORD2, second via TEXCOORD3 and so on.

         Since: 5.1.6

SEE ALSO

       ALLEGRO_VERTEX_DECL(3alleg5),                               ALLEGRO_PRIM_STORAGE(3alleg5),
       al_attach_shader_source(3alleg5)