chenqiyang
2021-08-20 7b95fb4d4549d3452ee17165236186afc1f2b393
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
/*
 * Copyright (c) 2010-2019 Belledonne Communications SARL.
 *
 * This file is part of mediastreamer2.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
 
#ifndef msogl_functions_h
#define msogl_functions_h
 
#ifdef __APPLE__
   #include "TargetConditionals.h"
#endif
 
#if TARGET_OS_IPHONE
    #include <OpenGLES/ES2/gl.h>
    #include <OpenGLES/ES2/glext.h>
#elif TARGET_OS_MAC
    #include <OpenGL/OpenGL.h>
    #include <OpenGL/gl.h>
#elif __ANDROID__
    #include <GLES2/gl2.h>
    #include <GLES2/gl2ext.h>
#elif _WIN32
    #if !defined(QOPENGLFUNCTIONS_H)
        #include <GLES3/gl3.h>
    #endif
#elif !defined(QOPENGLFUNCTIONS_H) // glew is already included by QT.
    #include <GL/glew.h>
#endif
 
// =============================================================================
 
typedef void (*resolveGlActiveTexture)(GLenum texture);
typedef void (*resolveGlAttachShader)(GLuint program, GLuint shader);
typedef void (*resolveGlBindAttribLocation)(GLuint program, GLuint index, const char *name);
typedef void (*resolveGlBindBuffer)(GLenum target, GLuint buffer);
typedef void (*resolveGlBindFramebuffer)(GLenum target, GLuint framebuffer);
typedef void (*resolveGlBindRenderbuffer)(GLenum target, GLuint renderbuffer);
typedef void (*resolveGlBindTexture)(GLenum target, GLuint texture);
typedef void (*resolveGlBlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
typedef void (*resolveGlBlendEquation)(GLenum mode);
typedef void (*resolveGlBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha);
typedef void (*resolveGlBlendFunc)(GLenum sfactor, GLenum dfactor);
typedef void (*resolveGlBlendFuncSeparate)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
typedef void (*resolveGlBufferData)(GLenum target, GLsizei *size, const void *data, GLenum usage);
typedef void (*resolveGlBufferSubData)(GLenum target, GLint *offset, GLsizei *size, const void *data);
typedef GLenum (*resolveGlCheckFramebufferStatus)(GLenum target);
typedef void (*resolveGlClear)(GLbitfield mask);
typedef void (*resolveGlClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
typedef void (*resolveGlClearDepthf)(GLclampf depth);
typedef void (*resolveGlClearStencil)(GLint s);
typedef void (*resolveGlColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
typedef void (*resolveGlCompileShader)(GLuint shader);
typedef void (*resolveGlCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
typedef void (*resolveGlCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
typedef void (*resolveGlCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
typedef void (*resolveGlCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
typedef GLuint (*resolveGlCreateProgram)(void);
typedef GLuint (*resolveGlCreateShader)(GLenum type);
typedef void (*resolveGlCullFace)(GLenum mode);
typedef void (*resolveGlDeleteBuffers)(GLsizei n, const GLuint *buffers);
typedef void (*resolveGlDeleteFramebuffers)(GLsizei n, const GLuint *framebuffers);
typedef void (*resolveGlDeleteProgram)(GLuint program);
typedef void (*resolveGlDeleteRenderbuffers)(GLsizei n, const GLuint *renderbuffers);
typedef void (*resolveGlDeleteShader)(GLuint shader);
typedef void (*resolveGlDeleteTextures)(GLsizei n, const GLuint *textures);
typedef void (*resolveGlDepthFunc)(GLenum func);
typedef void (*resolveGlDepthMask)(GLboolean flag);
typedef void (*resolveGlDepthRangef)(GLclampf zNear, GLclampf zFar);
typedef void (*resolveGlDetachShader)(GLuint program, GLuint shader);
typedef void (*resolveGlDisable)(GLenum cap);
typedef void (*resolveGlDisableVertexAttribArray)(GLuint index);
typedef void (*resolveGlDrawArrays)(GLenum mode, GLint first, GLsizei count);
typedef void (*resolveGlDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
typedef void (*resolveGlEnable)(GLenum cap);
typedef void (*resolveGlEnableVertexAttribArray)(GLuint index);
typedef void (*resolveGlFinish)(void);
typedef void (*resolveGlFlush)(void);
typedef void (*resolveGlFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
typedef void (*resolveGlFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
typedef void (*resolveGlFrontFace)(GLenum mode);
typedef void (*resolveGlGenBuffers)(GLsizei n, GLuint *buffers);
typedef void (*resolveGlGenFramebuffers)(GLsizei n, GLuint *framebuffers);
typedef void (*resolveGlGenRenderbuffers)(GLsizei n, GLuint *renderbuffers);
typedef void (*resolveGlGenTextures)(GLsizei n, GLuint *textures);
typedef void (*resolveGlGenerateMipmap)(GLenum target);
typedef void (*resolveGlGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name);
typedef void (*resolveGlGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name);
typedef void (*resolveGlGetAttachedShaders)(GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders);
typedef GLint (*resolveGlGetAttribLocation)(GLuint program, const char *name);
typedef void (*resolveGlGetBooleanv)(GLenum pname, GLboolean *params);
typedef void (*resolveGlGetBufferParameteriv)(GLenum target, GLenum pname, GLint *params);
typedef GLenum (*resolveGlGetError)(void);
typedef void (*resolveGlGetFloatv)(GLenum pname, GLfloat *params);
typedef void (*resolveGlGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint *params);
typedef void (*resolveGlGetIntegerv)(GLenum pname, GLint *params);
typedef void (*resolveGlGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei *length, char *infolog);
typedef void (*resolveGlGetProgramiv)(GLuint program, GLenum pname, GLint *params);
typedef void (*resolveGlGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint *params);
typedef void (*resolveGlGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei *length, char *infolog);
typedef void (*resolveGlGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
typedef void (*resolveGlGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei *length, char *source);
typedef void (*resolveGlGetShaderiv)(GLuint shader, GLenum pname, GLint *params);
typedef const GLubyte *(*resolveGlGetString)(GLenum name);
typedef void (*resolveGlGetTexParameterfv)(GLenum target, GLenum pname, GLfloat *params);
typedef void (*resolveGlGetTexParameteriv)(GLenum target, GLenum pname, GLint *params);
typedef GLint (*resolveGlGetUniformLocation)(GLuint program, const char *name);
typedef void (*resolveGlGetUniformfv)(GLuint program, GLint location, GLfloat *params);
typedef void (*resolveGlGetUniformiv)(GLuint program, GLint location, GLint *params);
typedef void (*resolveGlGetVertexAttribPointerv)(GLuint index, GLenum pname, void **pointer);
typedef void (*resolveGlGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat *params);
typedef void (*resolveGlGetVertexAttribiv)(GLuint index, GLenum pname, GLint *params);
typedef void (*resolveGlHint)(GLenum target, GLenum mode);
typedef GLboolean (*resolveGlIsBuffer)(GLuint buffer);
typedef GLboolean (*resolveGlIsEnabled)(GLenum cap);
typedef GLboolean (*resolveGlIsFramebuffer)(GLuint framebuffer);
typedef GLboolean (*resolveGlIsProgram)(GLuint program);
typedef GLboolean (*resolveGlIsRenderbuffer)(GLuint renderbuffer);
typedef GLboolean (*resolveGlIsShader)(GLuint shader);
typedef GLboolean (*resolveGlIsTexture)(GLuint texture);
typedef void (*resolveGlLineWidth)(GLfloat width);
typedef void (*resolveGlLinkProgram)(GLuint program);
typedef void (*resolveGlPixelStorei)(GLenum pname, GLint param);
typedef void (*resolveGlPolygonOffset)(GLfloat factor, GLfloat units);
typedef void (*resolveGlReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
typedef void (*resolveGlReleaseShaderCompiler)(void);
typedef void (*resolveGlRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (*resolveGlSampleCoverage)(GLclampf value, GLboolean invert);
typedef void (*resolveGlScissor)(GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (*resolveGlShaderBinary)(GLint n, const GLuint *shaders, GLenum binaryformat, const void *binary, GLint length);
typedef void (*resolveGlShaderSource)(GLuint shader, GLsizei count, const char **string, const GLint *length);
typedef void (*resolveGlStencilFunc)(GLenum func, GLint ref, GLuint mask);
typedef void (*resolveGlStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask);
typedef void (*resolveGlStencilMask)(GLuint mask);
typedef void (*resolveGlStencilMaskSeparate)(GLenum face, GLuint mask);
typedef void (*resolveGlStencilOp)(GLenum fail, GLenum zfail, GLenum zpass);
typedef void (*resolveGlStencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
typedef void (*resolveGlTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (*resolveGlTexParameterf)(GLenum target, GLenum pname, GLfloat param);
typedef void (*resolveGlTexParameterfv)(GLenum target, GLenum pname, const GLfloat *params);
typedef void (*resolveGlTexParameteri)(GLenum target, GLenum pname, GLint param);
typedef void (*resolveGlTexParameteriv)(GLenum target, GLenum pname, const GLint *params);
typedef void (*resolveGlTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (*resolveGlUniform1f)(GLint location, GLfloat x);
typedef void (*resolveGlUniform1fv)(GLint location, GLsizei count, const GLfloat *v);
typedef void (*resolveGlUniform1i)(GLint location, GLint x);
typedef void (*resolveGlUniform1iv)(GLint location, GLsizei count, const GLint *v);
typedef void (*resolveGlUniform2f)(GLint location, GLfloat x, GLfloat y);
typedef void (*resolveGlUniform2fv)(GLint location, GLsizei count, const GLfloat *v);
typedef void (*resolveGlUniform2i)(GLint location, GLint x, GLint y);
typedef void (*resolveGlUniform2iv)(GLint location, GLsizei count, const GLint *v);
typedef void (*resolveGlUniform3f)(GLint location, GLfloat x, GLfloat y, GLfloat z);
typedef void (*resolveGlUniform3fv)(GLint location, GLsizei count, const GLfloat *v);
typedef void (*resolveGlUniform3i)(GLint location, GLint x, GLint y, GLint z);
typedef void (*resolveGlUniform3iv)(GLint location, GLsizei count, const GLint *v);
typedef void (*resolveGlUniform4f)(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
typedef void (*resolveGlUniform4fv)(GLint location, GLsizei count, const GLfloat *v);
typedef void (*resolveGlUniform4i)(GLint location, GLint x, GLint y, GLint z, GLint w);
typedef void (*resolveGlUniform4iv)(GLint location, GLsizei count, const GLint *v);
typedef void (*resolveGlUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (*resolveGlUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (*resolveGlUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (*resolveGlUseProgram)(GLuint program);
typedef void (*resolveGlValidateProgram)(GLuint program);
typedef void (*resolveGlVertexAttrib1f)(GLuint indx, GLfloat x);
typedef void (*resolveGlVertexAttrib1fv)(GLuint indx, const GLfloat *values);
typedef void (*resolveGlVertexAttrib2f)(GLuint indx, GLfloat x, GLfloat y);
typedef void (*resolveGlVertexAttrib2fv)(GLuint indx, const GLfloat *values);
typedef void (*resolveGlVertexAttrib3f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
typedef void (*resolveGlVertexAttrib3fv)(GLuint indx, const GLfloat *values);
typedef void (*resolveGlVertexAttrib4f)(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
typedef void (*resolveGlVertexAttrib4fv)(GLuint indx, const GLfloat *values);
typedef void (*resolveGlVertexAttribPointer)(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *ptr);
typedef void (*resolveGlViewport)(GLint x, GLint y, GLsizei width, GLsizei height);
 
// -----------------------------------------------------------------------------
 
struct OpenGlFunctions {
    resolveGlActiveTexture glActiveTexture;
    resolveGlAttachShader glAttachShader;
    resolveGlBindAttribLocation glBindAttribLocation;
    // resolveGlBindBuffer glBindBuffer;
    // resolveGlBindFramebuffer glBindFramebuffer;
    // resolveGlBindRenderbuffer glBindRenderbuffer;
    resolveGlBindTexture glBindTexture;
    // resolveGlBlendColor glBlendColor;
    // resolveGlBlendEquation glBlendEquation;
    // resolveGlBlendEquationSeparate glBlendEquationSeparate;
    // resolveGlBlendFunc glBlendFunc;
    // resolveGlBlendFuncSeparate glBlendFuncSeparate;
    // resolveGlBufferData glBufferData;
    // resolveGlBufferSubData glBufferSubData;
    // resolveGlCheckFramebufferStatus glCheckFramebufferStatus;
    resolveGlClear glClear;
    resolveGlClearColor glClearColor;
    // resolveGlClearDepthf glClearDepthf;
    // resolveGlClearStencil glClearStencil;
    // resolveGlColorMask glColorMask;
    resolveGlCompileShader glCompileShader;
    // resolveGlCompressedTexImage2D glCompressedTexImage2D;
    // resolveGlCompressedTexSubImage2D glCompressedTexSubImage2D;
    // resolveGlCopyTexImage2D glCopyTexImage2D;
    // resolveGlCopyTexSubImage2D glCopyTexSubImage2D;
    resolveGlCreateProgram glCreateProgram;
    resolveGlCreateShader glCreateShader;
    // resolveGlCullFace glCullFace;
    // resolveGlDeleteBuffers glDeleteBuffers;
    // resolveGlDeleteFramebuffers glDeleteFramebuffers;
    resolveGlDeleteProgram glDeleteProgram;
    //resolveGlDeleteRenderbuffers glDeleteRenderbuffers;
    resolveGlDeleteShader glDeleteShader;
    resolveGlDeleteTextures glDeleteTextures;
    // resolveGlDepthFunc glDepthFunc;
    // resolveGlDepthMask glDepthMask;
    // resolveGlDepthRangef glDepthRangef;
    // resolveGlDetachShader glDetachShader;
    resolveGlDisable glDisable;
    // resolveGlDisableVertexAttribArray glDisableVertexAttribArray;
    resolveGlDrawArrays glDrawArrays;
    // resolveGlDrawElements glDrawElements;
    // resolveGlEnable glEnable;
    resolveGlEnableVertexAttribArray glEnableVertexAttribArray;
    // resolveGlFinish glFinish;
    // resolveGlFlush glFlush;
    // resolveGlFramebufferRenderbuffer glFramebufferRenderbuffer;
    // resolveGlFramebufferTexture2D glFramebufferTexture2D;
    // resolveGlFrontFace glFrontFace;
    // resolveGlGenBuffers glGenBuffers;
    // resolveGlGenFramebuffers glGenFramebuffers;
    // resolveGlGenRenderbuffers glGenRenderbuffers;
    resolveGlGenTextures glGenTextures;
    // resolveGlGenerateMipmap glGenerateMipmap;
    // resolveGlGetActiveAttrib glGetActiveAttrib;
    // resolveGlGetActiveUniform glGetActiveUniform;
    // resolveGlGetAttachedShaders glGetAttachedShaders;
    // resolveGlGetAttribLocation glGetAttribLocation;
    // resolveGlGetBooleanv glGetBooleanv;
    // resolveGlGetBufferParameteriv glGetBufferParameteriv;
    resolveGlGetError glGetError;
    // resolveGlGetFloatv glGetFloatv;
    // resolveGlGetFramebufferAttachmentParameteriv glGetFramebufferAttachmentParameteriv;
    // resolveGlGetIntegerv glGetIntegerv;
    resolveGlGetProgramInfoLog glGetProgramInfoLog;
    resolveGlGetProgramiv glGetProgramiv;
    // resolveGlGetRenderbufferParameteriv glGetRenderbufferParameteriv;
    resolveGlGetShaderInfoLog glGetShaderInfoLog;
    // resolveGlGetShaderPrecisionFormat glGetShaderPrecisionFormat;
    // resolveGlGetShaderSource glGetShaderSource;
    resolveGlGetShaderiv glGetShaderiv;
    resolveGlGetString glGetString;
    // resolveGlGetTexParameterfv glGetTexParameterfv;
    // resolveGlGetTexParameteriv glGetTexParameteriv;
    resolveGlGetUniformLocation glGetUniformLocation;
    // resolveGlGetUniformfv glGetUniformfv;
    // resolveGlGetUniformiv glGetUniformiv;
    // resolveGlGetVertexAttribPointerv glGetVertexAttribPointerv;
    // resolveGlGetVertexAttribfv glGetVertexAttribfv;
    // resolveGlGetVertexAttribiv glGetVertexAttribiv;
    // resolveGlHint glHint;
    // resolveGlIsBuffer glIsBuffer;
    // resolveGlIsEnabled glIsEnabled;
    // resolveGlIsFramebuffer glIsFramebuffer;
    // resolveGlIsProgram glIsProgram;
    // resolveGlIsRenderbuffer glIsRenderbuffer;
    // resolveGlIsShader glIsShader;
    // resolveGlIsTexture glIsTexture;
    // resolveGlLineWidth glLineWidth;
    resolveGlLinkProgram glLinkProgram;
    resolveGlPixelStorei glPixelStorei;
    // resolveGlPolygonOffset glPolygonOffset;
    // resolveGlReadPixels glReadPixels;
    // resolveGlReleaseShaderCompiler glReleaseShaderCompiler;
    // resolveGlRenderbufferStorage glRenderbufferStorage;
    // resolveGlSampleCoverage glSampleCoverage;
    // resolveGlScissor glScissor;
    // resolveGlShaderBinary glShaderBinary;
    resolveGlShaderSource glShaderSource;
    // resolveGlStencilFunc glStencilFunc;
    // resolveGlStencilFuncSeparate glStencilFuncSeparate;
    // resolveGlStencilMask glStencilMask;
    // resolveGlStencilMaskSeparate glStencilMaskSeparate;
    // resolveGlStencilOp glStencilOp;
    // resolveGlStencilOpSeparate glStencilOpSeparate;
    resolveGlTexImage2D glTexImage2D;
    // resolveGlTexParameterf glTexParameterf;
    // resolveGlTexParameterfv glTexParameterfv;
    resolveGlTexParameteri glTexParameteri;
    // resolveGlTexParameteriv glTexParameteriv;
    resolveGlTexSubImage2D glTexSubImage2D;
    resolveGlUniform1f glUniform1f;
    // resolveGlUniform1fv glUniform1fv;
    resolveGlUniform1i glUniform1i;
    // resolveGlUniform1iv glUniform1iv;
    // resolveGlUniform2f glUniform2f;
    // resolveGlUniform2fv glUniform2fv;
    // resolveGlUniform2i glUniform2i;
    // resolveGlUniform2iv glUniform2iv;
    // resolveGlUniform3f glUniform3f;
    // resolveGlUniform3fv glUniform3fv;
    // resolveGlUniform3i glUniform3i;
    // resolveGlUniform3iv glUniform3iv;
    // resolveGlUniform4f glUniform4f;
    // resolveGlUniform4fv glUniform4fv;
    // resolveGlUniform4i glUniform4i;
    // resolveGlUniform4iv glUniform4iv;
    // resolveGlUniformMatrix2fv glUniformMatrix2fv;
    // resolveGlUniformMatrix3fv glUniformMatrix3fv;
    resolveGlUniformMatrix4fv glUniformMatrix4fv;
    resolveGlUseProgram glUseProgram;
    resolveGlValidateProgram glValidateProgram;
    // resolveGlVertexAttrib1f glVertexAttrib1f;
    // resolveGlVertexAttrib1fv glVertexAttrib1fv;
    // resolveGlVertexAttrib2f glVertexAttrib2f;
    // resolveGlVertexAttrib2fv glVertexAttrib2fv;
    // resolveGlVertexAttrib3f glVertexAttrib3f;
    // resolveGlVertexAttrib3fv glVertexAttrib3fv;
    // resolveGlVertexAttrib4f glVertexAttrib4f;
    // resolveGlVertexAttrib4fv glVertexAttrib4fv;
    resolveGlVertexAttribPointer glVertexAttribPointer;
    resolveGlViewport glViewport;
};
 
typedef struct OpenGlFunctions OpenGlFunctions;
 
#endif