aboutsummaryrefslogtreecommitdiffstats
path: root/loadgl.m4
blob: 7a7bde4d0292bae8a0fa34370b2cd54eb5a2b1c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
divert(-1)
# Copyright (C) Tomasz Kramkowski <tk@the-tk.com>
# SPDX-License

# Macros

# LOAD(glname, rtype, name, args)
define(`LOAD',
`divert(1)LGL_INTERFACE(shift($@));
divert(2)LGL_FUNC($3, $1);
divert(3)LGL_LOAD($3);
divert(-1)')
m4wrap(`m4exit')

# 1 - LGL_INTERFACE(rtype, name, args);
define(`INTERFACES', `undivert(1)')
# 2 - LGL_FUNC(name, glname);
define(`FUNCS', `undivert(2)')
# 3 - LGL_LOAD(name);
define(`LOADS', `undivert(3)')

define(`FOR', `ifelse($#, 0, ``$0'', `ifelse(eval($2 <= $3), 1,
  `pushdef(`$1', $2)$4`'popdef(`$1')$0(`$1', incr($2), $3, `$4')')')')

# PAT(pattern, subst)
define(`PAT', `pushdef(`P', $2)$1`'popdef(`P')')
# PARAMS(start, n, pattern)
define(`PARAMS', `ifelse(eval(`$1 < ($2 - 1)'), 1,
  `PAT(`$3', $1), $0(incr($1), $2, `$3')', `PAT(`$3', $1)')')
define(`TYPE', `PARAMS(0, $1, `$2 v`'P')')
#       $1   $2   $3       $4      $5     $6    $7
# FLOAT(vec, suf, vectype, glname, rtype, name, args...)
define(`LOADV', `LOAD($4$1$2, $5, $6$1$2, shift(shift(shift(shift(shift(shift($@)))))), TYPE($1, $3))')
define(`LOADP', `LOAD($4$1$2, $5, $6$1$2, shift(shift(shift(shift(shift(shift($@)))))), $3 *value)')
define(`MULTI', `FOR(`n', 1, $1, `$2')')
define(`FOREACH', `ifelse(eval($# > 2), 1,
  `pushdef(`$1', `$3')$2`'popdef(`$1')dnl
`'ifelse(eval($# > 3), 1, `$0(`$1', `$2', shift(shift(shift($@))))')')')

# Functions

LOAD(glGetError, GLenum, gl_error, void)
LOAD(glViewport, void, gl_viewport, GLint x, GLint y, GLsizei width, GLsizei height)
LOAD(glClearColor, void, gl_clearcolor, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
LOAD(glClear, void, gl_clear, GLbitfield mask)
LOAD(glGenBuffers, void, gl_buf_gen, GLsizei n, GLuint *buffers)
LOAD(glBindBuffer, void, gl_buf_bind, GLenum target, GLuint buffer)
LOAD(glBufferData, void, gl_buf_data, GLenum target, GLsizeiptr size, const void *data, GLenum usage)
LOAD(glCreateShader, GLuint, gl_shdr_create, GLenum type)
LOAD(glDeleteShader, void, gl_shdr_del, GLuint shader)
LOAD(glShaderSource, void, gl_shdr_source, GLuint shader, GLsizei count, const char * const *string, const GLint *length)
LOAD(glCompileShader, void, gl_shdr_compile, GLuint shader)
LOAD(glGetShaderiv, void, gl_shdr_param, GLuint shader, GLenum pname, GLint *params)
LOAD(glGetShaderInfoLog, void, gl_shdr_infolog, GLuint shader, GLsizei size, GLsizei *len, char *data)
LOAD(glCreateProgram, GLuint, gl_prog_create, void)
LOAD(glDeleteProgram, void, gl_prog_del, GLuint program)
LOAD(glAttachShader, void, gl_prog_attachshdr, GLuint program, GLuint shader)
LOAD(glDetachShader, void, gl_prog_detachshdr, GLuint program, GLuint shader)
LOAD(glGetAttachedShaders, void, gl_prog_getshdrs, GLuint program, GLsizei max, GLsizei *count, GLuint *shaders)
LOAD(glLinkProgram, void, gl_prog_link, GLuint program)
LOAD(glUseProgram, void, gl_prog_use, GLuint program)
LOAD(glGetProgramiv, void, gl_prog_param, GLuint prog, GLenum pname, GLint *params)
LOAD(glGetProgramInfoLog, void, gl_prog_infolog, GLuint prog, GLsizei size, GLsizei *len, char *data)
LOAD(glVertexAttribPointer, void, gl_va_define, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *data)
LOAD(glEnableVertexAttribArray, void, gl_va_enable, GLuint index)
LOAD(glDisableVertexAttribArray, void, gl_va_disable, GLuint index)
LOAD(glGenVertexArrays, void, gl_va_gen, GLsizei n, GLuint *arrays)
LOAD(glBindVertexArray, void, gl_va_bind, GLuint va)
LOAD(glDrawArrays, void, gl_draw_arrays, GLenum mode, GLint first, GLsizei count)
LOAD(glDrawElements, void, gl_draw_elems, GLenum mode, GLsizei count, GLenum type, const void *indices)
LOAD(glPolygonMode, void, gl_poly_mode, GLenum face, GLenum mode)
LOAD(glGetUniformLocation, GLint, gl_uni_loc, GLuint program, const char *name);
LOAD(glGetUniformfv, void, gl_uni_getf, GLuint program, GLint location, GLfloat *params);
LOAD(glGetUniformiv, void, gl_uni_geti, GLuint program, GLint location, GLint *params);
FOREACH(`type', `FOR(`n', 1, 4, `LOADV(n, type, glUniform, void, gl_uni_set, GLint location)')',
  `f, GLfloat', `i, GLint', `ui, GLuint')
FOREACH(`type', `FOR(`n', 1, 4, `LOADP(n, type, glUniform, void, gl_uni_set, GLint location, GLsizei count)')',
  `fv, const GLfloat', `iv, const GLint', `uiv, const GLuint')
FOR(`n', 2, 4, `LOAD(glUniformMatrix`'n`'fv, void, gl_uni_setm`'n`'fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)')
LOAD(glUniformMatrix2x3fv, void, gl_uni_setm2x3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
LOAD(glUniformMatrix2x4fv, void, gl_uni_setm2x4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
LOAD(glUniformMatrix3x2fv, void, gl_uni_setm3x2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
LOAD(glUniformMatrix3x4fv, void, gl_uni_setm3x4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
LOAD(glUniformMatrix4x2fv, void, gl_uni_setm4x2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
LOAD(glUniformMatrix4x3fv, void, gl_uni_setm4x3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)

# Undefine

undefine(`LOAD')

divert(0)dnl