1 #ifndef __al_included_allegro5_shader_h
2 #define __al_included_allegro5_shader_h
3 
4 #include "allegro5/base.h"
5 #include "allegro5/transformations.h"
6 
7 #ifdef __cplusplus
8    extern "C" {
9 #endif
10 
11 
12 /* Type: ALLEGRO_SHADER
13  */
14 typedef struct ALLEGRO_SHADER ALLEGRO_SHADER;
15 
16 enum ALLEGRO_SHADER_TYPE {
17    ALLEGRO_VERTEX_SHADER = 1,
18    ALLEGRO_PIXEL_SHADER = 2
19 };
20 
21 /* Enum: ALLEGRO_SHADER_TYPE
22  */
23 typedef enum ALLEGRO_SHADER_TYPE ALLEGRO_SHADER_TYPE;
24 
25 enum ALLEGRO_SHADER_PLATFORM {
26    ALLEGRO_SHADER_AUTO = 0,
27    ALLEGRO_SHADER_GLSL = 1,
28    ALLEGRO_SHADER_HLSL = 2
29 };
30 
31 /* Enum: ALLEGRO_SHADER_PLATFORM
32  */
33 typedef enum ALLEGRO_SHADER_PLATFORM ALLEGRO_SHADER_PLATFORM;
34 
35 /* Shader variable names */
36 #define ALLEGRO_SHADER_VAR_COLOR             "al_color"
37 #define ALLEGRO_SHADER_VAR_POS               "al_pos"
38 #define ALLEGRO_SHADER_VAR_PROJVIEW_MATRIX   "al_projview_matrix"
39 #define ALLEGRO_SHADER_VAR_TEX               "al_tex"
40 #define ALLEGRO_SHADER_VAR_TEXCOORD          "al_texcoord"
41 #define ALLEGRO_SHADER_VAR_TEX_MATRIX        "al_tex_matrix"
42 #define ALLEGRO_SHADER_VAR_USER_ATTR         "al_user_attr_"
43 #define ALLEGRO_SHADER_VAR_USE_TEX           "al_use_tex"
44 #define ALLEGRO_SHADER_VAR_USE_TEX_MATRIX    "al_use_tex_matrix"
45 #define ALLEGRO_SHADER_VAR_ALPHA_TEST        "al_alpha_test"
46 #define ALLEGRO_SHADER_VAR_ALPHA_FUNCTION    "al_alpha_func"
47 #define ALLEGRO_SHADER_VAR_ALPHA_TEST_VALUE  "al_alpha_test_val"
48 
49 AL_FUNC(ALLEGRO_SHADER *, al_create_shader, (ALLEGRO_SHADER_PLATFORM platform));
50 AL_FUNC(bool, al_attach_shader_source, (ALLEGRO_SHADER *shader,
51    ALLEGRO_SHADER_TYPE type, const char *source));
52 AL_FUNC(bool, al_attach_shader_source_file, (ALLEGRO_SHADER *shader,
53    ALLEGRO_SHADER_TYPE type, const char *filename));
54 AL_FUNC(bool, al_build_shader, (ALLEGRO_SHADER *shader));
55 AL_FUNC(const char *, al_get_shader_log, (ALLEGRO_SHADER *shader));
56 AL_FUNC(ALLEGRO_SHADER_PLATFORM, al_get_shader_platform, (ALLEGRO_SHADER *shader));
57 AL_FUNC(bool, al_use_shader, (ALLEGRO_SHADER *shader));
58 AL_FUNC(void, al_destroy_shader, (ALLEGRO_SHADER *shader));
59 
60 AL_FUNC(bool, al_set_shader_sampler, (const char *name, ALLEGRO_BITMAP *bitmap,
61    int unit));
62 AL_FUNC(bool, al_set_shader_matrix, (const char *name,
63    const ALLEGRO_TRANSFORM *matrix));
64 AL_FUNC(bool, al_set_shader_int, (const char *name, int i));
65 AL_FUNC(bool, al_set_shader_float, (const char *name, float f));
66 AL_FUNC(bool, al_set_shader_int_vector, (const char *name, int num_components,
67    const int *i, int num_elems));
68 AL_FUNC(bool, al_set_shader_float_vector, (const char *name, int num_components,
69    const float *f, int num_elems));
70 AL_FUNC(bool, al_set_shader_bool, (const char *name, bool b));
71 
72 AL_FUNC(char const *, al_get_default_shader_source, (ALLEGRO_SHADER_PLATFORM platform,
73    ALLEGRO_SHADER_TYPE type));
74 
75 #ifdef __cplusplus
76    }
77 #endif
78 
79 #endif
80 
81 /* vim: set sts=3 sw=3 et: */
82