Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ALLEGRO_PRIM_ATTR(3)	    Library Functions Manual	    ALLEGRO_PRIM_ATTR(3)

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 ALLE-
       GRO_PRIM_SHORT_2, ALLEGRO_PRIM_FLOAT_2 and ALLEGRO_PRIM_FLOAT_3.

     * ALLEGRO_PRIM_COLOR_ATTR	 -   Color   information,  stored  in  an  ALLE-
       GRO_COLOR(3).  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 co-
       ordinates 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   ALLE-
       GRO_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  ALLE-
       GRO_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 parame-
       ter 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(3), ALLEGRO_PRIM_STORAGE(3), al_attach_shader_source(3)

Allegro reference manual				    ALLEGRO_PRIM_ATTR(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ALLEGRO_PRIM_ATTR&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help