Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/system/lib/gl/webgl2.c
6169 views
1
/*
2
* Copyright 2018 The Emscripten Authors. All rights reserved.
3
* Emscripten is available under two separate licenses, the MIT license and the
4
* University of Illinois/NCSA Open Source License. Both these licenses can be
5
* found in the LICENSE file.
6
*/
7
#if defined(__EMSCRIPTEN_FULL_ES3__) || MAX_WEBGL_VERSION >= 2
8
9
#include <emscripten/threading.h>
10
#include <emscripten.h>
11
#include <string.h>
12
#include <stdlib.h>
13
14
#include <webgl/webgl1.h>
15
#include <webgl/webgl2.h>
16
17
#include "webgl_internal.h"
18
19
#if defined(__EMSCRIPTEN_PTHREADS__) && defined(__EMSCRIPTEN_OFFSCREEN_FRAMEBUFFER__)
20
21
ASYNC_GL_FUNCTION_1(EM_FUNC_SIG_VI, void, glReadBuffer, GLenum);
22
ASYNC_GL_FUNCTION_6(EM_FUNC_SIG_VIIIIII, void, glDrawRangeElements, GLenum, GLuint, GLuint, GLsizei, GLenum, const void *); // TODO: Not async if rendering from client side memory
23
VOID_SYNC_GL_FUNCTION_10(EM_FUNC_SIG_VIIIIIIIIII, void, glTexImage3D, GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *);
24
VOID_SYNC_GL_FUNCTION_11(EM_FUNC_SIG_VIIIIIIIIIII, void, glTexSubImage3D, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const void *);
25
ASYNC_GL_FUNCTION_9(EM_FUNC_SIG_VIIIIIIIII, void, glCopyTexSubImage3D, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
26
VOID_SYNC_GL_FUNCTION_9(EM_FUNC_SIG_VIIIIIIIII, void, glCompressedTexImage3D, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const void *);
27
VOID_SYNC_GL_FUNCTION_11(EM_FUNC_SIG_VIIIIIIIIIII, void, glCompressedTexSubImage3D, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const void *);
28
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glGenQueries, GLsizei, GLuint *);
29
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glDeleteQueries, GLsizei, const GLuint *);
30
RET_SYNC_GL_FUNCTION_1(EM_FUNC_SIG_II, GLboolean, glIsQuery, GLuint);
31
ASYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glBeginQuery, GLenum, GLuint);
32
ASYNC_GL_FUNCTION_1(EM_FUNC_SIG_VI, void, glEndQuery, GLenum);
33
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetQueryiv, GLenum, GLenum, GLint *);
34
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetQueryObjectuiv, GLuint, GLenum, GLuint *);
35
#ifdef __EMSCRIPTEN_FULL_ES3__
36
RET_SYNC_GL_FUNCTION_1(EM_FUNC_SIG_II, GLboolean, glUnmapBuffer, GLenum);
37
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetBufferPointerv, GLenum, GLenum, void **);
38
#endif
39
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glDrawBuffers, GLsizei, const GLenum *);
40
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glUniformMatrix2x3fv, GLint, GLsizei, GLboolean, const GLfloat *);
41
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glUniformMatrix3x2fv, GLint, GLsizei, GLboolean, const GLfloat *);
42
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glUniformMatrix2x4fv, GLint, GLsizei, GLboolean, const GLfloat *);
43
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glUniformMatrix4x2fv, GLint, GLsizei, GLboolean, const GLfloat *);
44
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glUniformMatrix3x4fv, GLint, GLsizei, GLboolean, const GLfloat *);
45
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glUniformMatrix4x3fv, GLint, GLsizei, GLboolean, const GLfloat *);
46
ASYNC_GL_FUNCTION_10(EM_FUNC_SIG_VIIIIIIIIII, void, glBlitFramebuffer, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
47
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glRenderbufferStorageMultisample, GLenum, GLsizei, GLenum, GLsizei, GLsizei);
48
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glFramebufferTextureLayer, GLenum, GLenum, GLuint, GLint, GLint);
49
#ifdef __EMSCRIPTEN_FULL_ES3__
50
RET_PTR_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_PIIII, void *, glMapBufferRange, GLenum, GLintptr, GLsizeiptr, GLbitfield);
51
ASYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glFlushMappedBufferRange, GLenum, GLintptr, GLsizeiptr);
52
#endif
53
ASYNC_GL_FUNCTION_1(EM_FUNC_SIG_VI, void, glBindVertexArray, GLuint);
54
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glDeleteVertexArrays, GLsizei, const GLuint *);
55
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glGenVertexArrays, GLsizei, GLuint *);
56
RET_SYNC_GL_FUNCTION_1(EM_FUNC_SIG_II, GLboolean, glIsVertexArray, GLuint);
57
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetIntegeri_v, GLenum, GLuint, GLint *);
58
ASYNC_GL_FUNCTION_1(EM_FUNC_SIG_VI, void, glBeginTransformFeedback, GLenum);
59
ASYNC_GL_FUNCTION_0(EM_FUNC_SIG_V, void, glEndTransformFeedback);
60
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glBindBufferRange, GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
61
ASYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glBindBufferBase, GLenum, GLuint, GLuint);
62
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glTransformFeedbackVaryings, GLuint, GLsizei, const GLchar *const*, GLenum);
63
VOID_SYNC_GL_FUNCTION_7(EM_FUNC_SIG_VIIIIIII, void, glGetTransformFeedbackVarying, GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *);
64
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glVertexAttribIPointer, GLuint, GLint, GLenum, GLsizei, const void *); // TODO: Not async if not rendering from client side memory
65
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetVertexAttribIiv, GLuint, GLenum, GLint *);
66
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetVertexAttribIuiv, GLuint, GLenum, GLuint *);
67
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glVertexAttribI4i, GLuint, GLint, GLint, GLint, GLint);
68
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glVertexAttribI4ui, GLuint, GLuint, GLuint, GLuint, GLuint);
69
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glVertexAttribI4iv, GLuint, const GLint *);
70
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glVertexAttribI4uiv, GLuint, const GLuint *);
71
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetUniformuiv, GLuint, GLint, GLuint *);
72
RET_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_III, GLint, glGetFragDataLocation, GLuint, const GLchar *);
73
ASYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glUniform1ui, GLint, GLuint);
74
ASYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glUniform2ui, GLint, GLuint, GLuint);
75
ASYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glUniform3ui, GLint, GLuint, GLuint, GLuint);
76
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glUniform4ui, GLint, GLuint, GLuint, GLuint, GLuint);
77
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glUniform1uiv, GLint, GLsizei, const GLuint *);
78
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glUniform2uiv, GLint, GLsizei, const GLuint *);
79
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glUniform3uiv, GLint, GLsizei, const GLuint *);
80
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glUniform4uiv, GLint, GLsizei, const GLuint *);
81
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glClearBufferiv, GLenum, GLint, const GLint *);
82
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glClearBufferuiv, GLenum, GLint, const GLuint *);
83
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glClearBufferfv, GLenum, GLint, const GLfloat *);
84
ASYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIFI, void, glClearBufferfi, GLenum, GLint, GLfloat, GLint);
85
RET_PTR_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_PII, const GLubyte *, glGetStringi, GLenum, GLuint);
86
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glCopyBufferSubData, GLenum, GLenum, GLintptr, GLintptr, GLsizeiptr);
87
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glGetUniformIndices, GLuint, GLsizei, const GLchar *const*, GLuint *);
88
VOID_SYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glGetActiveUniformsiv, GLuint, GLsizei, const GLuint *, GLenum, GLint *);
89
RET_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_III, GLuint, glGetUniformBlockIndex, GLuint, const GLchar *);
90
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glGetActiveUniformBlockiv, GLuint, GLuint, GLenum, GLint *);
91
VOID_SYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glGetActiveUniformBlockName, GLuint, GLuint, GLsizei, GLsizei *, GLchar *);
92
ASYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glUniformBlockBinding, GLuint, GLuint, GLuint);
93
ASYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glDrawArraysInstanced, GLenum, GLint, GLsizei, GLsizei);
94
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glDrawElementsInstanced, GLenum, GLsizei, GLenum, const void *, GLsizei); // TODO: Not async if rendering from client side memory
95
RET_PTR_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_PII, GLsync, glFenceSync, GLenum, GLbitfield);
96
RET_SYNC_GL_FUNCTION_1(EM_FUNC_SIG_II, GLboolean, glIsSync, GLsync);
97
ASYNC_GL_FUNCTION_1(EM_FUNC_SIG_VI, void, glDeleteSync, GLsync);
98
RET_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_IIIJ, GLenum, glClientWaitSync, GLsync, GLbitfield, GLuint64);
99
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIIJ, void, glWaitSync, GLsync, GLbitfield, GLuint64);
100
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glGetInteger64v, GLenum, GLint64 *);
101
VOID_SYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glGetSynciv, GLsync, GLenum, GLsizei, GLsizei *, GLint *);
102
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetInteger64i_v, GLenum, GLuint, GLint64 *);
103
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetBufferParameteri64v, GLenum, GLenum, GLint64 *);
104
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glGenSamplers, GLsizei, GLuint *);
105
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glDeleteSamplers, GLsizei, const GLuint *);
106
RET_SYNC_GL_FUNCTION_1(EM_FUNC_SIG_II, GLboolean, glIsSampler, GLuint);
107
ASYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glBindSampler, GLuint, GLuint);
108
ASYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glSamplerParameteri, GLuint, GLenum, GLint);
109
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glSamplerParameteriv, GLuint, GLenum, const GLint *);
110
ASYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIIF, void, glSamplerParameterf, GLuint, GLenum, GLfloat);
111
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glSamplerParameterfv, GLuint, GLenum, const GLfloat *);
112
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetSamplerParameteriv, GLuint, GLenum, GLint *);
113
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glGetSamplerParameterfv, GLuint, GLenum, GLfloat *);
114
ASYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glVertexAttribDivisor, GLuint, GLuint);
115
ASYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glBindTransformFeedback, GLenum, GLuint);
116
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glDeleteTransformFeedbacks, GLsizei, const GLuint *);
117
VOID_SYNC_GL_FUNCTION_2(EM_FUNC_SIG_VII, void, glGenTransformFeedbacks, GLsizei, GLuint *);
118
RET_SYNC_GL_FUNCTION_1(EM_FUNC_SIG_II, GLboolean, glIsTransformFeedback, GLuint);
119
ASYNC_GL_FUNCTION_0(EM_FUNC_SIG_V, void, glPauseTransformFeedback);
120
ASYNC_GL_FUNCTION_0(EM_FUNC_SIG_V, void, glResumeTransformFeedback);
121
VOID_SYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glGetProgramBinary, GLuint, GLsizei, GLsizei *, GLenum *, void *);
122
VOID_SYNC_GL_FUNCTION_4(EM_FUNC_SIG_VIIII, void, glProgramBinary, GLuint, GLenum, const void *, GLsizei);
123
ASYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glProgramParameteri, GLuint, GLenum, GLint);
124
VOID_SYNC_GL_FUNCTION_3(EM_FUNC_SIG_VIII, void, glInvalidateFramebuffer, GLenum, GLsizei, const GLenum *);
125
VOID_SYNC_GL_FUNCTION_7(EM_FUNC_SIG_VIIIIIII, void, glInvalidateSubFramebuffer, GLenum, GLsizei, const GLenum *, GLint, GLint, GLsizei, GLsizei);
126
ASYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glTexStorage2D, GLenum, GLsizei, GLenum, GLsizei, GLsizei);
127
ASYNC_GL_FUNCTION_6(EM_FUNC_SIG_VIIIIII, void, glTexStorage3D, GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
128
VOID_SYNC_GL_FUNCTION_5(EM_FUNC_SIG_VIIIII, void, glGetInternalformativ, GLenum, GLenum, GLenum, GLsizei, GLint *);
129
130
// Extensions that are aliases for the proxying functions defined above.
131
// Normally these aliases get defined in library_webgl.js but when building with
132
// __EMSCRIPTEN_OFFSCREEN_FRAMEBUFFER__ we want to intercept them in native
133
// code and redirect them to their proxying counterparts.
134
GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV(GLuint index, GLuint divisor) { glVertexAttribDivisor(index, divisor); }
135
GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT(GLuint index, GLuint divisor) { glVertexAttribDivisor(index, divisor); }
136
GL_APICALL void GL_APIENTRY glVertexAttribDivisorARB(GLuint index, GLuint divisor) { glVertexAttribDivisor(index, divisor); }
137
GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) { glVertexAttribDivisor(index, divisor); }
138
GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { glDrawArraysInstanced(mode, first, count, instancecount); }
139
GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { glDrawArraysInstanced(mode, first, count, instancecount); }
140
GL_APICALL void GL_APIENTRY glDrawArraysInstancedARB(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { glDrawArraysInstanced(mode, first, count, instancecount); }
141
GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { glDrawArraysInstanced(mode, first, count, instancecount); }
142
GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount) { glDrawElementsInstanced(mode, count, type, indices, instancecount); }
143
GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount) { glDrawElementsInstanced(mode, count, type, indices, instancecount); }
144
GL_APICALL void GL_APIENTRY glDrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount) { glDrawElementsInstanced(mode, count, type, indices, instancecount); }
145
GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount) { glDrawElementsInstanced(mode, count, type, indices, instancecount); }
146
GL_APICALL void GL_APIENTRY glBindVertexArrayOES(GLuint array) { glBindVertexArray(array); }
147
GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays) { glDeleteVertexArrays(n, arrays); }
148
GL_APICALL void GL_APIENTRY glGenVertexArraysOES(GLsizei n, GLuint *arrays) { glGenVertexArrays(n, arrays); }
149
GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES(GLuint array) { return glIsVertexArray(array); }
150
GL_APICALL void GL_APIENTRY glDrawBuffersEXT(GLsizei n, const GLenum *bufs) { glDrawBuffers(n, bufs); }
151
GL_APICALL void GL_APIENTRY glDrawBuffersWEBGL(GLsizei n, const GLenum *bufs) { glDrawBuffers(n, bufs); }
152
153
#endif // ~__EMSCRIPTEN_PTHREADS__) && __EMSCRIPTEN_OFFSCREEN_FRAMEBUFFER__
154
155
#if GL_ENABLE_GET_PROC_ADDRESS
156
157
// Returns a function pointer to the given WebGL 2 extension function, when queried without
158
// a GL extension suffix such as "EXT", "OES", or "ANGLE". This function is used by
159
// emscripten_GetProcAddress() to implement legacy GL emulation semantics for portability.
160
void *_webgl2_match_ext_proc_address_without_suffix(const char *name) {
161
RETURN_FN_WITH_SUFFIX(glVertexAttribDivisor, EXT);
162
RETURN_FN_WITH_SUFFIX(glVertexAttribDivisor, ARB);
163
RETURN_FN_WITH_SUFFIX(glVertexAttribDivisor, ANGLE);
164
RETURN_FN_WITH_SUFFIX(glDrawArraysInstanced, EXT);
165
RETURN_FN_WITH_SUFFIX(glDrawArraysInstanced, ARB);
166
RETURN_FN_WITH_SUFFIX(glDrawArraysInstanced, ANGLE);
167
RETURN_FN_WITH_SUFFIX(glDrawElementsInstanced, NV);
168
RETURN_FN_WITH_SUFFIX(glDrawElementsInstanced, EXT);
169
RETURN_FN_WITH_SUFFIX(glDrawElementsInstanced, ARB);
170
RETURN_FN_WITH_SUFFIX(glDrawElementsInstanced, ANGLE);
171
RETURN_FN_WITH_SUFFIX(glBindVertexArray, OES);
172
RETURN_FN_WITH_SUFFIX(glDeleteVertexArrays, OES);
173
RETURN_FN_WITH_SUFFIX(glGenVertexArrays, OES);
174
RETURN_FN_WITH_SUFFIX(glIsVertexArray, OES);
175
RETURN_FN_WITH_SUFFIX(glDrawBuffers, EXT);
176
RETURN_FN_WITH_SUFFIX(glDrawBuffers, WEBGL);
177
178
return 0;
179
}
180
181
void *emscripten_webgl2_get_proc_address(const char *name) {
182
RETURN_FN(glReadBuffer);
183
RETURN_FN(glDrawRangeElements);
184
RETURN_FN(glTexImage3D);
185
RETURN_FN(glTexSubImage3D);
186
RETURN_FN(glCopyTexSubImage3D);
187
RETURN_FN(glCompressedTexImage3D);
188
RETURN_FN(glCompressedTexSubImage3D);
189
RETURN_FN(glGenQueries);
190
RETURN_FN(glDeleteQueries);
191
RETURN_FN(glIsQuery);
192
RETURN_FN(glBeginQuery);
193
RETURN_FN(glEndQuery);
194
RETURN_FN(glGetQueryiv);
195
RETURN_FN(glGetQueryObjectuiv);
196
#ifdef __EMSCRIPTEN_FULL_ES3__
197
RETURN_FN(glUnmapBuffer);
198
RETURN_FN(glGetBufferPointerv);
199
#endif
200
RETURN_FN(glDrawBuffers);
201
RETURN_FN(glUniformMatrix2x3fv);
202
RETURN_FN(glUniformMatrix3x2fv);
203
RETURN_FN(glUniformMatrix2x4fv);
204
RETURN_FN(glUniformMatrix4x2fv);
205
RETURN_FN(glUniformMatrix3x4fv);
206
RETURN_FN(glUniformMatrix4x3fv);
207
RETURN_FN(glBlitFramebuffer);
208
RETURN_FN(glRenderbufferStorageMultisample);
209
RETURN_FN(glFramebufferTextureLayer);
210
#ifdef __EMSCRIPTEN_FULL_ES3__
211
RETURN_FN(glMapBufferRange);
212
RETURN_FN(glFlushMappedBufferRange);
213
#endif
214
RETURN_FN(glBindVertexArray);
215
RETURN_FN(glDeleteVertexArrays);
216
RETURN_FN(glGenVertexArrays);
217
RETURN_FN(glIsVertexArray);
218
RETURN_FN(glGetIntegeri_v);
219
RETURN_FN(glBeginTransformFeedback);
220
RETURN_FN(glEndTransformFeedback);
221
RETURN_FN(glBindBufferRange);
222
RETURN_FN(glBindBufferBase);
223
RETURN_FN(glTransformFeedbackVaryings);
224
RETURN_FN(glGetTransformFeedbackVarying);
225
RETURN_FN(glVertexAttribIPointer);
226
RETURN_FN(glGetVertexAttribIiv);
227
RETURN_FN(glGetVertexAttribIuiv);
228
RETURN_FN(glVertexAttribI4i);
229
RETURN_FN(glVertexAttribI4ui);
230
RETURN_FN(glVertexAttribI4iv);
231
RETURN_FN(glVertexAttribI4uiv);
232
RETURN_FN(glGetUniformuiv);
233
RETURN_FN(glGetFragDataLocation);
234
RETURN_FN(glUniform1ui);
235
RETURN_FN(glUniform2ui);
236
RETURN_FN(glUniform3ui);
237
RETURN_FN(glUniform4ui);
238
RETURN_FN(glUniform1uiv);
239
RETURN_FN(glUniform2uiv);
240
RETURN_FN(glUniform3uiv);
241
RETURN_FN(glUniform4uiv);
242
RETURN_FN(glClearBufferiv);
243
RETURN_FN(glClearBufferuiv);
244
RETURN_FN(glClearBufferfv);
245
RETURN_FN(glClearBufferfi);
246
RETURN_FN(glGetStringi);
247
RETURN_FN(glCopyBufferSubData);
248
RETURN_FN(glGetUniformIndices);
249
RETURN_FN(glGetActiveUniformsiv);
250
RETURN_FN(glGetUniformBlockIndex);
251
RETURN_FN(glGetActiveUniformBlockiv);
252
RETURN_FN(glGetActiveUniformBlockName);
253
RETURN_FN(glUniformBlockBinding);
254
RETURN_FN(glDrawArraysInstanced);
255
RETURN_FN(glDrawElementsInstanced);
256
RETURN_FN(glFenceSync);
257
RETURN_FN(glIsSync);
258
RETURN_FN(glDeleteSync);
259
RETURN_FN(glClientWaitSync);
260
RETURN_FN(glWaitSync);
261
RETURN_FN(glGetInteger64v);
262
RETURN_FN(glGetSynciv);
263
RETURN_FN(glGetInteger64i_v);
264
RETURN_FN(glGetBufferParameteri64v);
265
RETURN_FN(glGenSamplers);
266
RETURN_FN(glDeleteSamplers);
267
RETURN_FN(glIsSampler);
268
RETURN_FN(glBindSampler);
269
RETURN_FN(glSamplerParameteri);
270
RETURN_FN(glSamplerParameteriv);
271
RETURN_FN(glSamplerParameterf);
272
RETURN_FN(glSamplerParameterfv);
273
RETURN_FN(glGetSamplerParameteriv);
274
RETURN_FN(glGetSamplerParameterfv);
275
RETURN_FN(glVertexAttribDivisor);
276
RETURN_FN(glBindTransformFeedback);
277
RETURN_FN(glDeleteTransformFeedbacks);
278
RETURN_FN(glGenTransformFeedbacks);
279
RETURN_FN(glIsTransformFeedback);
280
RETURN_FN(glPauseTransformFeedback);
281
RETURN_FN(glResumeTransformFeedback);
282
RETURN_FN(glGetProgramBinary);
283
RETURN_FN(glProgramBinary);
284
RETURN_FN(glProgramParameteri);
285
RETURN_FN(glInvalidateFramebuffer);
286
RETURN_FN(glInvalidateSubFramebuffer);
287
RETURN_FN(glTexStorage2D);
288
RETURN_FN(glTexStorage3D);
289
RETURN_FN(glGetInternalformativ);
290
RETURN_FN(glVertexAttribDivisorNV);
291
RETURN_FN(glVertexAttribDivisorEXT);
292
RETURN_FN(glVertexAttribDivisorARB);
293
RETURN_FN(glVertexAttribDivisorANGLE);
294
RETURN_FN(glDrawArraysInstancedNV);
295
RETURN_FN(glDrawArraysInstancedEXT);
296
RETURN_FN(glDrawArraysInstancedARB);
297
RETURN_FN(glDrawArraysInstancedANGLE);
298
RETURN_FN(glDrawElementsInstancedNV);
299
RETURN_FN(glDrawElementsInstancedEXT);
300
RETURN_FN(glDrawElementsInstancedARB);
301
RETURN_FN(glDrawElementsInstancedANGLE);
302
RETURN_FN(glBindVertexArrayOES);
303
RETURN_FN(glDeleteVertexArraysOES);
304
RETURN_FN(glGenVertexArraysOES);
305
RETURN_FN(glIsVertexArrayOES);
306
RETURN_FN(glDrawBuffersEXT);
307
RETURN_FN(glDrawBuffersWEBGL);
308
309
// WebGL 2 extensions:
310
// (currently none)
311
312
return 0;
313
}
314
315
#endif // GL_ENABLE_GET_PROC_ADDRESS
316
317
#endif // defined(__EMSCRIPTEN_FULL_ES3__) || MAX_WEBGL_VERSION >= 2
318
319