aboutsummaryrefslogtreecommitdiffstats
path: root/loadgl.h
blob: 01acdfa373f525780ee59dbcef8c81f0854dc97a (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
/*
 * Copyright (C) 2018 Tomasz Kramkowski <tk@the-tk.com>
 * SPDX-License-Identifier: MIT
 */
#ifndef LOADGL_H
#define LOADGL_H

#include "gldefs.h"

typedef void *lgl_loadfunc(const char *name);

enum lgl_status {
	LGL_OK,
	LGL_MISSING,
};

enum lgl_status lgl_load(lgl_loadfunc *load);
const char *lgl_strerror(enum lgl_status status);

#define _LGL_INTERFACE(rett, name, func, ...)	\
	typedef rett func(__VA_ARGS__);		\
	extern func *name;
#define LGL_INTERFACE(rett, name, ...) _LGL_INTERFACE(rett, name, name##_func, __VA_ARGS__)

LGL_INTERFACE(void, gl_viewport, GLint x, GLint y, GLsizei width, GLsizei height);
LGL_INTERFACE(void, gl_clearcolor, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
LGL_INTERFACE(void, gl_clear, GLbitfield mask);
/* LGL_INTERFACE(GLboolean, gl_isbuf, GLuint buffer); */
LGL_INTERFACE(void, gl_buf_gen, GLsizei n, GLuint *buffers);
/* LGL_INTERFACE(void, gl_buf_del, GLsizei n, GLuint *buffers); */
LGL_INTERFACE(void, gl_buf_bind, GLenum target, GLuint buffer);
LGL_INTERFACE(void, gl_buf_data, GLenum target, GLsizeiptr size, const void *data, GLenum usage);
LGL_INTERFACE(GLuint, gl_shdr_create, GLenum type);
LGL_INTERFACE(void, gl_shdr_del, GLuint shader);
/* LGL_INTERFACE(GLboolean, gl_isshdr, GLuint shader); */
LGL_INTERFACE(void, gl_shdr_source, GLuint shader, GLsizei count, const char * const *string, const GLint *length);
LGL_INTERFACE(void, gl_shdr_compile, GLuint shader);
LGL_INTERFACE(void, gl_shdr_param, GLuint shader, GLenum pname, GLint *params);
LGL_INTERFACE(void, gl_shdr_infolog, GLuint shader, GLsizei size, GLsizei *len, char *data);
LGL_INTERFACE(GLuint, gl_prog_create, void);
LGL_INTERFACE(void, gl_prog_del, GLuint program);
LGL_INTERFACE(void, gl_prog_attachshdr, GLuint program, GLuint shader);
LGL_INTERFACE(void, gl_prog_link, GLuint program);
LGL_INTERFACE(void, gl_prog_use, GLuint program);
LGL_INTERFACE(void, gl_prog_param, GLuint prog, GLenum pname, GLint *params);
LGL_INTERFACE(void, gl_prog_infolog, GLuint prog, GLsizei size, GLsizei *len, char *data);
LGL_INTERFACE(void, gl_va_define, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *data);
LGL_INTERFACE(void, gl_va_enable, GLuint index);
LGL_INTERFACE(void, gl_va_disable, GLuint index);
LGL_INTERFACE(void, gl_va_gen, GLsizei n, GLuint *arrays);
LGL_INTERFACE(void, gl_va_bind, GLuint va);
LGL_INTERFACE(void, gl_draw_arrays, GLenum mode, GLint first, GLsizei count);
LGL_INTERFACE(void, gl_draw_elems, GLenum mode, GLsizei count, GLenum type, const void *indices);
LGL_INTERFACE(void, gl_poly_mode, GLenum face, GLenum mode);

#endif // LOADGL_H