-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshader_procs.h
133 lines (115 loc) · 5.26 KB
/
shader_procs.h
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef SHADER_PROCS_H
#define SHADER_PROCS_H
// Enable OpenGL 2.0 shader functions. Return 0 on error.
int enableShaderProcs(void);
////////////////////////////////
#define NO_SDL_GLEXT
#include <SDL/SDL_opengl.h>
#include <SDL/SDL.h>
#if (defined __APPLE__)
#include <OpenGL/glu.h>
#include <OpenGL/glext.h>
int enableShaderProcs(void) { return 1; }
#elif (defined __WIN32__)
#define GL_IMPORT_NEEDED
#elif (defined __linux__)
#include <GL/glx.h>
#include <GL/glxext.h>
#define GL_IMPORT_NEEDED
#else
int enableShaderProcs(void) { return 0; }
#endif
#ifdef GL_IMPORT_NEEDED
#include "GL/glext.h"
#define DECLARE_GL_PROC(type, name) \
type name = 0
#define IMPORT_GL_PROC(type, name) \
do { if (!(name = (type) SDL_GL_GetProcAddress(#name))) { \
fprintf(stderr, "failed to import function " #name "\n"); \
return 0; } } while (0)
DECLARE_GL_PROC(PFNGLCREATEPROGRAMPROC, glCreateProgram);
DECLARE_GL_PROC(PFNGLDELETEPROGRAMPROC, glDeleteProgram);
DECLARE_GL_PROC(PFNGLISPROGRAMPROC, glIsProgram);
DECLARE_GL_PROC(PFNGLCREATESHADERPROC, glCreateShader);
DECLARE_GL_PROC(PFNGLDELETESHADERPROC, glDeleteShader);
DECLARE_GL_PROC(PFNGLGETSHADERIVPROC, glGetShaderiv);
DECLARE_GL_PROC(PFNGLSHADERSOURCEPROC, glShaderSource);
DECLARE_GL_PROC(PFNGLCOMPILESHADERPROC, glCompileShader);
DECLARE_GL_PROC(PFNGLATTACHSHADERPROC, glAttachShader);
DECLARE_GL_PROC(PFNGLDETACHSHADERPROC, glDetachShader);
DECLARE_GL_PROC(PFNGLGETATTACHEDSHADERSPROC, glGetAttachedShaders);
DECLARE_GL_PROC(PFNGLLINKPROGRAMPROC, glLinkProgram);
DECLARE_GL_PROC(PFNGLUSEPROGRAMPROC, glUseProgram);
DECLARE_GL_PROC(PFNGLGETSHADERIVPROC, glGetProgramiv);
DECLARE_GL_PROC(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog);
DECLARE_GL_PROC(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog);
DECLARE_GL_PROC(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation);
DECLARE_GL_PROC(PFNGLUNIFORM1FPROC, glUniform1f);
DECLARE_GL_PROC(PFNGLUNIFORM1IPROC, glUniform1i);
DECLARE_GL_PROC(PFNGLUNIFORM2FVPROC, glUniform2fv);
DECLARE_GL_PROC(PFNGLUNIFORM3FVPROC, glUniform3fv);
#if defined(GL_ARB_gpu_shader_fp64)
DECLARE_GL_PROC(PFNGLUNIFORM1DPROC, glUniform1d);
DECLARE_GL_PROC(PFNGLUNIFORM3DVPROC, glUniform3dv);
#endif
DECLARE_GL_PROC(PFNGLGENERATEMIPMAPPROC, glGenerateMipmap);
DECLARE_GL_PROC(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers);
DECLARE_GL_PROC(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers);
DECLARE_GL_PROC(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer);
DECLARE_GL_PROC(PFNGLGENRENDERBUFFERSPROC, glGenRenderbuffers);
DECLARE_GL_PROC(PFNGLDELETERENDERBUFFERSPROC, glDeleteRenderbuffers);
DECLARE_GL_PROC(PFNGLBINDRENDERBUFFERPROC, glBindRenderbuffer);
DECLARE_GL_PROC(PFNGLRENDERBUFFERSTORAGEPROC, glRenderbufferStorage);
DECLARE_GL_PROC(PFNGLFRAMEBUFFERRENDERBUFFERPROC, glFramebufferRenderbuffer);
DECLARE_GL_PROC(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D);
DECLARE_GL_PROC(PFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus);
#if defined(__WIN32__)
DECLARE_GL_PROC(PFNGLACTIVETEXTUREPROC, glActiveTexture);
#endif
int enableShaderProcs(void) {
IMPORT_GL_PROC(PFNGLCREATEPROGRAMPROC, glCreateProgram);
IMPORT_GL_PROC(PFNGLCREATESHADERPROC, glCreateShader);
IMPORT_GL_PROC(PFNGLSHADERSOURCEPROC, glShaderSource);
IMPORT_GL_PROC(PFNGLCOMPILESHADERPROC, glCompileShader);
IMPORT_GL_PROC(PFNGLATTACHSHADERPROC, glAttachShader);
IMPORT_GL_PROC(PFNGLGETSHADERIVPROC, glGetShaderiv);
IMPORT_GL_PROC(PFNGLLINKPROGRAMPROC, glLinkProgram);
IMPORT_GL_PROC(PFNGLUSEPROGRAMPROC, glUseProgram);
IMPORT_GL_PROC(PFNGLGETSHADERIVPROC, glGetProgramiv);
IMPORT_GL_PROC(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog);
IMPORT_GL_PROC(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog);
IMPORT_GL_PROC(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation);
IMPORT_GL_PROC(PFNGLUNIFORM1FPROC, glUniform1f);
IMPORT_GL_PROC(PFNGLUNIFORM1IPROC, glUniform1i);
IMPORT_GL_PROC(PFNGLUNIFORM2FVPROC, glUniform2fv);
IMPORT_GL_PROC(PFNGLUNIFORM3FVPROC, glUniform3fv);
IMPORT_GL_PROC(PFNGLGETATTACHEDSHADERSPROC, glGetAttachedShaders);
IMPORT_GL_PROC(PFNGLDELETEPROGRAMPROC, glDeleteProgram);
IMPORT_GL_PROC(PFNGLDELETESHADERPROC, glDeleteShader);
IMPORT_GL_PROC(PFNGLDETACHSHADERPROC, glDetachShader);
IMPORT_GL_PROC(PFNGLISPROGRAMPROC, glIsProgram);
#if defined(GL_ARB_gpu_shader_fp64)
IMPORT_GL_PROC(PFNGLUNIFORM1DPROC, glUniform1d);
IMPORT_GL_PROC(PFNGLUNIFORM3DVPROC, glUniform3dv);
#endif
IMPORT_GL_PROC(PFNGLGENERATEMIPMAPPROC, glGenerateMipmap);
IMPORT_GL_PROC(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers);
IMPORT_GL_PROC(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers);
IMPORT_GL_PROC(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer);
IMPORT_GL_PROC(PFNGLGENRENDERBUFFERSPROC, glGenRenderbuffers);
IMPORT_GL_PROC(PFNGLDELETERENDERBUFFERSPROC, glDeleteRenderbuffers);
IMPORT_GL_PROC(PFNGLBINDRENDERBUFFERPROC, glBindRenderbuffer);
IMPORT_GL_PROC(PFNGLRENDERBUFFERSTORAGEPROC, glRenderbufferStorage);
IMPORT_GL_PROC(PFNGLFRAMEBUFFERRENDERBUFFERPROC, glFramebufferRenderbuffer);
IMPORT_GL_PROC(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D);
IMPORT_GL_PROC(PFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus);
#if defined(__WIN32__)
IMPORT_GL_PROC(PFNGLACTIVETEXTUREPROC, glActiveTexture);
#endif
return 1;
}
#undef DECLARE_GL_PROC
#undef IMPORT_GL_PROC
#undef GL_IMPORT_NEEDED
#endif
#endif // SHADER_PROCS_H