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

NAME

       al_attach_shader_source - Allegro 5 API

SYNOPSIS

              #include <allegro5/allegro.h>

              bool al_attach_shader_source(ALLEGRO_SHADER *shader, ALLEGRO_SHADER_TYPE type,
                  const char *source)

DESCRIPTION

       Attaches  the  shader's  source  code  to the shader object and compiles it.  Passing NULL
       deletes    the    underlying     (OpenGL     or     DirectX)     shader.      See     also
       al_attach_shader_source_file(3alleg5)  if  you prefer to obtain your shader source from an
       external file.

       If you do not use ALLEGRO_PROGRAMMABLE_PIPELINE Allegro's graphics functions will not  use
       any  shader  specific  functions  themselves.   In case of a system with no fixed function
       pipeline (like OpenGL ES 2 or OpenGL 3 or 4) this means Allegro's drawing functions cannot
       be used.

       TODO: Is ALLEGRO_PROGRAMMABLE_PIPELINE set automatically in this case?

       When  ALLEGRO_PROGRAMMABLE_PIPELINE  is used the following shader uniforms are provided by
       Allegro and can be accessed in your shaders:

       al_projview_matrix
              matrix    for    Allegro's    orthographic    projection    multiplied    by    the
              al_use_transform(3alleg5) matrix.  The type is mat4 in GLSL, and float4x4 in HLSL.

       al_use_tex
              whether or not to use the bound texture.  The type is bool in both GLSL and HLSL.

       al_tex the texture if one is bound.  The type is sampler2D in GLSL and texture in HLSL.

       al_use_tex_matrix
              whether or not to use a texture matrix (used by the primitives addon).  The type is
              bool in both GLSL and HLSL.

       al_tex_matrix
              the texture matrix (used by the primitives addon).  Your shader should multiply the
              texture  coordinates  by  this  matrix.   The type is mat4 in GLSL, and float4x4 in
              HLSL.

       For GLSL shaders the vertex attributes are passed using the following variables:

       al_pos vertex position attribute.  Type is vec4.

       al_texcoord
              vertex texture coordinate attribute.  Type is vec2.

       al_color
              vertex color attribute.  Type is vec4.

       For HLSL shaders the vertex attributes are passed using the following semantics:

       POSITION0
              vertex position attribute.  Type is float4.

       TEXCOORD0
              vertex texture coordinate attribute.  Type is float2.

       TEXCOORD1
              vertex color attribute.  Type is float4.

       Also, each shader variable has a corresponding macro name that can be used  when  defining
       the shaders using string literals.  Don't use these macros with the other shader functions
       as that will lead to undefined behavior.

       • ALLEGRO_SHADER_VAR_PROJVIEW_MATRIX for "al_projview_matrix"

       • ALLEGRO_SHADER_VAR_POS for "al_pos"

       • ALLEGRO_SHADER_VAR_COLOR for "al_color"

       • ALLEGRO_SHADER_VAR_TEXCOORD for "al_texcoord"

       • ALLEGRO_SHADER_VAR_USE_TEX for "al_use_tex"

       • ALLEGRO_SHADER_VAR_TEX for "al_tex"

       • ALLEGRO_SHADER_VAR_USE_TEX_MATRIX for "al_use_tex_matrix"

       • ALLEGRO_SHADER_VAR_TEX_MATRIX for "al_tex_matrix"

       Examine the output of al_get_default_shader_source(3alleg5) for an example of how  to  use
       the above uniforms and attributes.

       Returns  true  on success and false on error, in which case the error log is updated.  The
       error log can be retrieved with al_get_shader_log(3alleg5).

SINCE

       5.1.0

SEE ALSO

       al_attach_shader_source_file(3alleg5),                           al_build_shader(3alleg5),
       al_get_default_shader_source(3alleg5), al_get_shader_log(3alleg5)