26#ifndef _ACF_UTILS_SHADER_H_
27#define _ACF_UTILS_SHADER_H_
100 const char *filename;
102 const char *entry_pt;
125 const char *progname;
155#define DEFAULT_VTX_ATTRIB_BINDINGS \
156 "vtx_pos", VTX_ATTRIB_POS, "vtx_norm", VTX_ATTRIB_NORM, \
157 "vtx_tex0", VTX_ATTRIB_TEX0, "vtx_tex1", VTX_ATTRIB_TEX1
160#if defined(__GNUC__) || defined(__clang__)
162 { .name =
"vtx_pos", .idx = VTX_ATTRIB_POS },
163 { .name =
"vtx_norm", .idx = VTX_ATTRIB_NORM },
164 { .name =
"vtx_tex0", .idx = VTX_ATTRIB_TEX0 },
165 { .name =
"vtx_tex1", .idx = VTX_ATTRIB_TEX1 },
170#define shader_prog_from_file ACFSYM(shader_prog_from_file)
171API_EXPORT GLuint shader_prog_from_file(
const char *progname,
172 const char *vert_file,
const char *frag_file, ...);
174#define shader_prog_from_text ACFSYM(shader_prog_from_text)
175API_EXPORT GLuint shader_prog_from_text(
const char *progname,
176 const char *vert_shader_text,
const char *frag_shader_text, ...);
178#define shader_prog_from_info ACFSYM(shader_prog_from_info)
179API_EXPORT GLuint shader_prog_from_info(
const char *dirpath,
262#define SHADER_OBJ_MAX_ATTRS 128
263#define SHADER_OBJ_MAX_UNIFORMS 128
268 const char **attr_names;
270 GLint attr_loc[SHADER_OBJ_MAX_ATTRS];
271 const char **uniform_names;
272 unsigned num_uniforms;
273 GLint uniform_loc[SHADER_OBJ_MAX_UNIFORMS];
306 const char **attr_names,
unsigned num_attrs,
307 const char **uniform_names,
unsigned num_uniforms);
330API_EXPORT bool_t shader_obj_reload_check(
shader_obj_t *obj);
343 glUseProgram(obj->prog);
369 ASSERT3U(attr_ID, <, obj->num_attrs);
370 return (obj->attr_loc[attr_ID]);
383 ASSERT3U(uniform_ID, <, obj->num_uniforms);
384 return (obj->uniform_loc[uniform_ID]);
#define ASSERT3U(x, op, y)