59 #if defined(IMGL3W_SCUMMVM_LOADER) 60 #define FORBIDDEN_SYMBOL_ALLOW_ALL 61 #include "common/system.h" 65 #ifndef __khrplatform_h_ 66 typedef float khronos_float_t;
67 typedef signed char khronos_int8_t;
68 typedef unsigned char khronos_uint8_t;
69 typedef signed short int khronos_int16_t;
70 typedef unsigned short int khronos_uint16_t;
72 typedef signed long long int khronos_intptr_t;
73 typedef signed long long int khronos_ssize_t;
75 typedef signed long int khronos_intptr_t;
76 typedef signed long int khronos_ssize_t;
79 #if defined(_MSC_VER) && !defined(__clang__) 80 typedef signed __int64 khronos_int64_t;
81 typedef unsigned __int64 khronos_uint64_t;
82 #elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100) 84 typedef int64_t khronos_int64_t;
85 typedef uint64_t khronos_uint64_t;
87 typedef signed long long khronos_int64_t;
88 typedef unsigned long long khronos_uint64_t;
90 #endif // __khrplatform_h_ 92 #ifndef __gl_glcorearb_h_ 93 #define __gl_glcorearb_h_ 1 106 #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) 107 #ifndef WIN32_LEAN_AND_MEAN 108 #define WIN32_LEAN_AND_MEAN 1 116 #define APIENTRYP APIENTRY * 143 #ifndef GL_VERSION_1_0 145 typedef unsigned int GLenum;
147 typedef khronos_float_t GLfloat;
150 typedef unsigned int GLbitfield;
151 typedef double GLdouble;
152 typedef unsigned int GLuint;
153 typedef unsigned char GLboolean;
154 typedef khronos_uint8_t GLubyte;
155 #define GL_COLOR_BUFFER_BIT 0x00004000 158 #define GL_TRIANGLES 0x0004 160 #define GL_SRC_ALPHA 0x0302 161 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 162 #define GL_FRONT 0x0404 163 #define GL_BACK 0x0405 164 #define GL_FRONT_AND_BACK 0x0408 165 #define GL_POLYGON_MODE 0x0B40 166 #define GL_CULL_FACE 0x0B44 167 #define GL_DEPTH_TEST 0x0B71 168 #define GL_STENCIL_TEST 0x0B90 169 #define GL_VIEWPORT 0x0BA2 170 #define GL_BLEND 0x0BE2 171 #define GL_SCISSOR_BOX 0x0C10 172 #define GL_SCISSOR_TEST 0x0C11 173 #define GL_UNPACK_ROW_LENGTH 0x0CF2 174 #define GL_PACK_ALIGNMENT 0x0D05 175 #define GL_MAX_TEXTURE_SIZE 0x0D33 176 #define GL_TEXTURE_2D 0x0DE1 177 #define GL_UNSIGNED_BYTE 0x1401 178 #define GL_UNSIGNED_SHORT 0x1403 179 #define GL_UNSIGNED_INT 0x1405 180 #define GL_FLOAT 0x1406 181 #define GL_RGBA 0x1908 182 #define GL_FILL 0x1B02 183 #define GL_VENDOR 0x1F00 184 #define GL_RENDERER 0x1F01 185 #define GL_VERSION 0x1F02 186 #define GL_EXTENSIONS 0x1F03 187 #define GL_LINEAR 0x2601 188 #define GL_TEXTURE_MAG_FILTER 0x2800 189 #define GL_TEXTURE_MIN_FILTER 0x2801 190 #define GL_TEXTURE_WRAP_S 0x2802 191 #define GL_TEXTURE_WRAP_T 0x2803 192 #define GL_REPEAT 0x2901 193 typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
194 typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
195 typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
196 typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type,
const void *pixels);
197 typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
198 typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
199 typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
200 typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
201 typedef void (APIENTRYP PFNGLFLUSHPROC) (void);
202 typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
203 typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
void *pixels);
204 typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void);
205 typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
206 typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
207 typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
208 typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
209 #ifdef GL_GLEXT_PROTOTYPES 210 GLAPI
void APIENTRY glPolygonMode (GLenum face, GLenum mode);
211 GLAPI
void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
212 GLAPI
void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
213 GLAPI
void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type,
const void *pixels);
214 GLAPI
void APIENTRY glClear (GLbitfield mask);
215 GLAPI
void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
216 GLAPI
void APIENTRY glDisable (GLenum cap);
217 GLAPI
void APIENTRY glEnable (GLenum cap);
218 GLAPI
void APIENTRY glFlush (
void);
219 GLAPI
void APIENTRY glPixelStorei (GLenum pname, GLint param);
220 GLAPI
void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
void *pixels);
221 GLAPI GLenum APIENTRY glGetError (
void);
222 GLAPI
void APIENTRY glGetIntegerv (GLenum pname, GLint *data);
223 GLAPI
const GLubyte *APIENTRY glGetString (GLenum name);
224 GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap);
225 GLAPI
void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
228 #ifndef GL_VERSION_1_1 229 typedef khronos_float_t GLclampf;
230 typedef double GLclampd;
231 #define GL_TEXTURE_BINDING_2D 0x8069 232 typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type,
const void *indices);
233 typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type,
const void *pixels);
234 typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
235 typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n,
const GLuint *textures);
236 typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
237 #ifdef GL_GLEXT_PROTOTYPES 238 GLAPI
void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type,
const void *indices);
239 GLAPI
void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type,
const void *pixels);
240 GLAPI
void APIENTRY glBindTexture (GLenum target, GLuint texture);
241 GLAPI
void APIENTRY glDeleteTextures (GLsizei n,
const GLuint *textures);
242 GLAPI
void APIENTRY glGenTextures (GLsizei n, GLuint *textures);
245 #ifndef GL_VERSION_1_2 246 #define GL_CLAMP_TO_EDGE 0x812F 248 #ifndef GL_VERSION_1_3 249 #define GL_TEXTURE0 0x84C0 250 #define GL_ACTIVE_TEXTURE 0x84E0 251 typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
252 #ifdef GL_GLEXT_PROTOTYPES 253 GLAPI
void APIENTRY glActiveTexture (GLenum texture);
256 #ifndef GL_VERSION_1_4 257 #define GL_BLEND_DST_RGB 0x80C8 258 #define GL_BLEND_SRC_RGB 0x80C9 259 #define GL_BLEND_DST_ALPHA 0x80CA 260 #define GL_BLEND_SRC_ALPHA 0x80CB 261 #define GL_FUNC_ADD 0x8006 262 typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
263 typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
264 #ifdef GL_GLEXT_PROTOTYPES 265 GLAPI
void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
266 GLAPI
void APIENTRY glBlendEquation (GLenum mode);
269 #ifndef GL_VERSION_1_5 270 typedef khronos_ssize_t GLsizeiptr;
271 typedef khronos_intptr_t GLintptr;
272 #define GL_ARRAY_BUFFER 0x8892 273 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 274 #define GL_ARRAY_BUFFER_BINDING 0x8894 275 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 276 #define GL_STREAM_DRAW 0x88E0 277 typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
278 typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n,
const GLuint *buffers);
279 typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
280 typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size,
const void *data, GLenum usage);
281 typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size,
const void *data);
282 #ifdef GL_GLEXT_PROTOTYPES 283 GLAPI
void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
284 GLAPI
void APIENTRY glDeleteBuffers (GLsizei n,
const GLuint *buffers);
285 GLAPI
void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
286 GLAPI
void APIENTRY glBufferData (GLenum target, GLsizeiptr size,
const void *data, GLenum usage);
287 GLAPI
void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size,
const void *data);
290 #ifndef GL_VERSION_2_0 292 typedef khronos_int16_t GLshort;
293 typedef khronos_int8_t GLbyte;
294 typedef khronos_uint16_t GLushort;
295 #define GL_BLEND_EQUATION_RGB 0x8009 296 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 297 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 298 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 299 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 300 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 301 #define GL_BLEND_EQUATION_ALPHA 0x883D 302 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A 303 #define GL_FRAGMENT_SHADER 0x8B30 304 #define GL_VERTEX_SHADER 0x8B31 305 #define GL_COMPILE_STATUS 0x8B81 306 #define GL_LINK_STATUS 0x8B82 307 #define GL_INFO_LOG_LENGTH 0x8B84 308 #define GL_CURRENT_PROGRAM 0x8B8D 309 #define GL_UPPER_LEFT 0x8CA2 310 typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
311 typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
312 typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
313 typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
314 typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
315 typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
316 typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
317 typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
318 typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
319 typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
320 typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program,
const GLchar *name);
321 typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
322 typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
323 typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
324 typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
325 typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program,
const GLchar *name);
326 typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
327 typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname,
void **pointer);
328 typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
329 typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
330 typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count,
const GLchar *
const*string,
const GLint *length);
331 typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
332 typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
333 typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose,
const GLfloat *value);
334 typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
const void *pointer);
335 #ifdef GL_GLEXT_PROTOTYPES 336 GLAPI
void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
337 GLAPI
void APIENTRY glAttachShader (GLuint program, GLuint shader);
338 GLAPI
void APIENTRY glCompileShader (GLuint shader);
339 GLAPI GLuint APIENTRY glCreateProgram (
void);
340 GLAPI GLuint APIENTRY glCreateShader (GLenum type);
341 GLAPI
void APIENTRY glDeleteProgram (GLuint program);
342 GLAPI
void APIENTRY glDeleteShader (GLuint shader);
343 GLAPI
void APIENTRY glDetachShader (GLuint program, GLuint shader);
344 GLAPI
void APIENTRY glDisableVertexAttribArray (GLuint index);
345 GLAPI
void APIENTRY glEnableVertexAttribArray (GLuint index);
346 GLAPI GLint APIENTRY glGetAttribLocation (GLuint program,
const GLchar *name);
347 GLAPI
void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
348 GLAPI
void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
349 GLAPI
void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
350 GLAPI
void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
351 GLAPI GLint APIENTRY glGetUniformLocation (GLuint program,
const GLchar *name);
352 GLAPI
void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
353 GLAPI
void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname,
void **pointer);
354 GLAPI GLboolean APIENTRY glIsProgram (GLuint program);
355 GLAPI
void APIENTRY glLinkProgram (GLuint program);
356 GLAPI
void APIENTRY glShaderSource (GLuint shader, GLsizei count,
const GLchar *
const*
string,
const GLint *length);
357 GLAPI
void APIENTRY glUseProgram (GLuint program);
358 GLAPI
void APIENTRY glUniform1i (GLint location, GLint v0);
359 GLAPI
void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose,
const GLfloat *value);
360 GLAPI
void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
const void *pointer);
363 #ifndef GL_VERSION_2_1 364 #define GL_PIXEL_UNPACK_BUFFER 0x88EC 365 #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF 367 #ifndef GL_VERSION_3_0 368 typedef khronos_uint16_t GLhalf;
369 #define GL_MAJOR_VERSION 0x821B 370 #define GL_MINOR_VERSION 0x821C 371 #define GL_NUM_EXTENSIONS 0x821D 372 #define GL_FRAMEBUFFER_SRGB 0x8DB9 373 #define GL_VERTEX_ARRAY_BINDING 0x85B5 374 typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
375 typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
376 typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
377 typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
378 typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n,
const GLuint *arrays);
379 typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
380 #ifdef GL_GLEXT_PROTOTYPES 381 GLAPI
const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index);
382 GLAPI
void APIENTRY glBindVertexArray (GLuint array);
383 GLAPI
void APIENTRY glDeleteVertexArrays (GLsizei n,
const GLuint *arrays);
384 GLAPI
void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
387 #ifndef GL_VERSION_3_1 388 #define GL_VERSION_3_1 1 389 #define GL_PRIMITIVE_RESTART 0x8F9D 391 #ifndef GL_VERSION_3_2 392 #define GL_VERSION_3_2 1 393 typedef struct __GLsync *GLsync;
394 typedef khronos_uint64_t GLuint64;
395 typedef khronos_int64_t GLint64;
396 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 397 #define GL_CONTEXT_PROFILE_MASK 0x9126 398 typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type,
const void *indices, GLint basevertex);
399 typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
400 #ifdef GL_GLEXT_PROTOTYPES 401 GLAPI
void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type,
const void *indices, GLint basevertex);
404 #ifndef GL_VERSION_3_3 405 #define GL_VERSION_3_3 1 406 #define GL_SAMPLER_BINDING 0x8919 407 typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
408 #ifdef GL_GLEXT_PROTOTYPES 409 GLAPI
void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
412 #ifndef GL_VERSION_4_1 413 typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
414 typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
416 #ifndef GL_VERSION_4_3 417 typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,
const GLchar *message,
const void *userParam);
419 #ifndef GL_VERSION_4_5 420 #define GL_CLIP_ORIGIN 0x935C 421 typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param);
422 typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
424 #ifndef GL_ARB_bindless_texture 425 typedef khronos_uint64_t GLuint64EXT;
427 #ifndef GL_ARB_cl_event 431 #ifndef GL_ARB_clip_control 432 #define GL_ARB_clip_control 1 434 #ifndef GL_ARB_debug_output 435 typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,
const GLchar *message,
const void *userParam);
437 #ifndef GL_EXT_EGL_image_storage 438 typedef void *GLeglImageOES;
440 #ifndef GL_EXT_direct_state_access 441 typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params);
442 typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params);
443 typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index,
void **params);
444 typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
445 typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname,
void **param);
447 #ifndef GL_NV_draw_vulkan_image 448 typedef void (APIENTRY *GLVULKANPROCNV)(void);
450 #ifndef GL_NV_gpu_shader5 451 typedef khronos_int64_t GLint64EXT;
453 #ifndef GL_NV_vertex_buffer_unified_memory 454 typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
474 #define GL3W_ERROR_INIT -1 475 #define GL3W_ERROR_LIBRARY_OPEN -2 476 #define GL3W_ERROR_OPENGL_VERSION -3 478 typedef void (*GL3WglProc)(void);
479 typedef GL3WglProc (*GL3WGetProcAddressProc)(
const char *proc);
482 GL3W_API
int imgl3wInit(
void);
483 GL3W_API
int imgl3wInit2(GL3WGetProcAddressProc proc);
484 GL3W_API
int imgl3wIsSupported(
int major,
int minor);
485 GL3W_API GL3WglProc imgl3wGetProcAddress(
const char *proc);
491 PFNGLACTIVETEXTUREPROC ActiveTexture;
492 PFNGLATTACHSHADERPROC AttachShader;
493 PFNGLBINDBUFFERPROC BindBuffer;
494 PFNGLBINDSAMPLERPROC BindSampler;
495 PFNGLBINDTEXTUREPROC BindTexture;
496 PFNGLBINDVERTEXARRAYPROC BindVertexArray;
497 PFNGLBLENDEQUATIONPROC BlendEquation;
498 PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate;
499 PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate;
500 PFNGLBUFFERDATAPROC BufferData;
501 PFNGLBUFFERSUBDATAPROC BufferSubData;
502 PFNGLCLEARPROC Clear;
503 PFNGLCLEARCOLORPROC ClearColor;
504 PFNGLCOMPILESHADERPROC CompileShader;
505 PFNGLCREATEPROGRAMPROC CreateProgram;
506 PFNGLCREATESHADERPROC CreateShader;
507 PFNGLDELETEBUFFERSPROC DeleteBuffers;
508 PFNGLDELETEPROGRAMPROC DeleteProgram;
509 PFNGLDELETESHADERPROC DeleteShader;
510 PFNGLDELETETEXTURESPROC DeleteTextures;
511 PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays;
512 PFNGLDETACHSHADERPROC DetachShader;
513 PFNGLDISABLEPROC Disable;
514 PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray;
515 PFNGLDRAWELEMENTSPROC DrawElements;
516 PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex;
517 PFNGLENABLEPROC Enable;
518 PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray;
519 PFNGLFLUSHPROC Flush;
520 PFNGLGENBUFFERSPROC GenBuffers;
521 PFNGLGENTEXTURESPROC GenTextures;
522 PFNGLGENVERTEXARRAYSPROC GenVertexArrays;
523 PFNGLGETATTRIBLOCATIONPROC GetAttribLocation;
524 PFNGLGETERRORPROC GetError;
525 PFNGLGETINTEGERVPROC GetIntegerv;
526 PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog;
527 PFNGLGETPROGRAMIVPROC GetProgramiv;
528 PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog;
529 PFNGLGETSHADERIVPROC GetShaderiv;
530 PFNGLGETSTRINGPROC GetString;
531 PFNGLGETSTRINGIPROC GetStringi;
532 PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation;
533 PFNGLGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv;
534 PFNGLGETVERTEXATTRIBIVPROC GetVertexAttribiv;
535 PFNGLISENABLEDPROC IsEnabled;
536 PFNGLISPROGRAMPROC IsProgram;
537 PFNGLLINKPROGRAMPROC LinkProgram;
538 PFNGLPIXELSTOREIPROC PixelStorei;
539 PFNGLPOLYGONMODEPROC PolygonMode;
540 PFNGLREADPIXELSPROC ReadPixels;
541 PFNGLSCISSORPROC Scissor;
542 PFNGLSHADERSOURCEPROC ShaderSource;
543 PFNGLTEXIMAGE2DPROC TexImage2D;
544 PFNGLTEXPARAMETERIPROC TexParameteri;
545 PFNGLTEXSUBIMAGE2DPROC TexSubImage2D;
546 PFNGLUNIFORM1IPROC Uniform1i;
547 PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv;
548 PFNGLUSEPROGRAMPROC UseProgram;
549 PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer;
550 PFNGLVIEWPORTPROC Viewport;
557 #define glActiveTexture imgl3wProcs.gl.ActiveTexture 558 #define glAttachShader imgl3wProcs.gl.AttachShader 559 #define glBindBuffer imgl3wProcs.gl.BindBuffer 560 #define glBindSampler imgl3wProcs.gl.BindSampler 561 #define glBindTexture imgl3wProcs.gl.BindTexture 562 #define glBindVertexArray imgl3wProcs.gl.BindVertexArray 563 #define glBlendEquation imgl3wProcs.gl.BlendEquation 564 #define glBlendEquationSeparate imgl3wProcs.gl.BlendEquationSeparate 565 #define glBlendFuncSeparate imgl3wProcs.gl.BlendFuncSeparate 566 #define glBufferData imgl3wProcs.gl.BufferData 567 #define glBufferSubData imgl3wProcs.gl.BufferSubData 568 #define glClear imgl3wProcs.gl.Clear 569 #define glClearColor imgl3wProcs.gl.ClearColor 570 #define glCompileShader imgl3wProcs.gl.CompileShader 571 #define glCreateProgram imgl3wProcs.gl.CreateProgram 572 #define glCreateShader imgl3wProcs.gl.CreateShader 573 #define glDeleteBuffers imgl3wProcs.gl.DeleteBuffers 574 #define glDeleteProgram imgl3wProcs.gl.DeleteProgram 575 #define glDeleteShader imgl3wProcs.gl.DeleteShader 576 #define glDeleteTextures imgl3wProcs.gl.DeleteTextures 577 #define glDeleteVertexArrays imgl3wProcs.gl.DeleteVertexArrays 578 #define glDetachShader imgl3wProcs.gl.DetachShader 579 #define glDisable imgl3wProcs.gl.Disable 580 #define glDisableVertexAttribArray imgl3wProcs.gl.DisableVertexAttribArray 581 #define glDrawElements imgl3wProcs.gl.DrawElements 582 #define glDrawElementsBaseVertex imgl3wProcs.gl.DrawElementsBaseVertex 583 #define glEnable imgl3wProcs.gl.Enable 584 #define glEnableVertexAttribArray imgl3wProcs.gl.EnableVertexAttribArray 585 #define glFlush imgl3wProcs.gl.Flush 586 #define glGenBuffers imgl3wProcs.gl.GenBuffers 587 #define glGenTextures imgl3wProcs.gl.GenTextures 588 #define glGenVertexArrays imgl3wProcs.gl.GenVertexArrays 589 #define glGetAttribLocation imgl3wProcs.gl.GetAttribLocation 590 #define glGetError imgl3wProcs.gl.GetError 591 #define glGetIntegerv imgl3wProcs.gl.GetIntegerv 592 #define glGetProgramInfoLog imgl3wProcs.gl.GetProgramInfoLog 593 #define glGetProgramiv imgl3wProcs.gl.GetProgramiv 594 #define glGetShaderInfoLog imgl3wProcs.gl.GetShaderInfoLog 595 #define glGetShaderiv imgl3wProcs.gl.GetShaderiv 596 #define glGetString imgl3wProcs.gl.GetString 597 #define glGetStringi imgl3wProcs.gl.GetStringi 598 #define glGetUniformLocation imgl3wProcs.gl.GetUniformLocation 599 #define glGetVertexAttribPointerv imgl3wProcs.gl.GetVertexAttribPointerv 600 #define glGetVertexAttribiv imgl3wProcs.gl.GetVertexAttribiv 601 #define glIsEnabled imgl3wProcs.gl.IsEnabled 602 #define glIsProgram imgl3wProcs.gl.IsProgram 603 #define glLinkProgram imgl3wProcs.gl.LinkProgram 604 #define glPixelStorei imgl3wProcs.gl.PixelStorei 605 #define glPolygonMode imgl3wProcs.gl.PolygonMode 606 #define glReadPixels imgl3wProcs.gl.ReadPixels 607 #define glScissor imgl3wProcs.gl.Scissor 608 #define glShaderSource imgl3wProcs.gl.ShaderSource 609 #define glTexImage2D imgl3wProcs.gl.TexImage2D 610 #define glTexParameteri imgl3wProcs.gl.TexParameteri 611 #define glTexSubImage2D imgl3wProcs.gl.TexSubImage2D 612 #define glUniform1i imgl3wProcs.gl.Uniform1i 613 #define glUniformMatrix4fv imgl3wProcs.gl.UniformMatrix4fv 614 #define glUseProgram imgl3wProcs.gl.UseProgram 615 #define glVertexAttribPointer imgl3wProcs.gl.VertexAttribPointer 616 #define glViewport imgl3wProcs.gl.Viewport 631 #define GL3W_ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 633 #if defined(IMGL3W_SCUMMVM_LOADER) 634 static int open_libgl(
void)
639 static void close_libgl(
void) { }
641 static GL3WglProc get_proc(
const char *proc)
643 return (GL3WglProc)
g_system->getOpenGLProcAddress(proc);
646 #elif defined(_WIN32) 647 #ifndef WIN32_LEAN_AND_MEAN 648 #define WIN32_LEAN_AND_MEAN 1 652 static HMODULE libgl;
653 typedef PROC(__stdcall* GL3WglGetProcAddr)(LPCSTR);
654 static GL3WglGetProcAddr wgl_get_proc_address;
656 static int open_libgl(
void)
658 libgl = LoadLibraryA(
"opengl32.dll");
660 return GL3W_ERROR_LIBRARY_OPEN;
661 wgl_get_proc_address = (GL3WglGetProcAddr)GetProcAddress(libgl,
"wglGetProcAddress");
665 static void close_libgl(
void) { FreeLibrary(libgl); }
666 static GL3WglProc get_proc(
const char *proc)
669 res = (GL3WglProc)wgl_get_proc_address(proc);
671 res = (GL3WglProc)GetProcAddress(libgl, proc);
674 #elif defined(__APPLE__) 678 static int open_libgl(
void)
680 libgl = dlopen(
"/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL);
682 return GL3W_ERROR_LIBRARY_OPEN;
686 static void close_libgl(
void) { dlclose(libgl); }
688 static GL3WglProc get_proc(
const char *proc)
691 *(
void **)(&res) = dlsym(libgl, proc);
700 static GL3WGetProcAddressProc gl_get_proc_address;
702 static void close_libgl(
void)
718 static int is_library_loaded(
const char* name,
void** lib)
720 *lib = dlopen(name, RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
724 static int open_libs(
void)
736 if (is_library_loaded(
"libEGL.so.1", &libegl) ||
737 is_library_loaded(
"libGLX.so.0", &libglx)) {
738 libgl = dlopen(
"libOpenGL.so.0", RTLD_LAZY | RTLD_LOCAL);
745 if (is_library_loaded(
"libGL.so", &libgl))
747 if (is_library_loaded(
"libGL.so.1", &libgl))
749 if (is_library_loaded(
"libGL.so.3", &libgl))
756 libgl = dlopen(
"libOpenGL.so.0", RTLD_LAZY | RTLD_LOCAL);
757 libegl = dlopen(
"libEGL.so.1", RTLD_LAZY | RTLD_LOCAL);
765 libgl = dlopen(
"libGL.so", RTLD_LAZY | RTLD_LOCAL);
767 libgl = dlopen(
"libGL.so.1", RTLD_LAZY | RTLD_LOCAL);
769 libgl = dlopen(
"libGL.so.3", RTLD_LAZY | RTLD_LOCAL);
774 return GL3W_ERROR_LIBRARY_OPEN;
777 static int open_libgl(
void)
779 int res = open_libs();
784 *(
void**)(&gl_get_proc_address) = dlsym(libegl,
"eglGetProcAddress");
786 *(
void**)(&gl_get_proc_address) = dlsym(libglx,
"glXGetProcAddressARB");
788 *(
void**)(&gl_get_proc_address) = dlsym(libgl,
"glXGetProcAddressARB");
790 if (!gl_get_proc_address) {
792 return GL3W_ERROR_LIBRARY_OPEN;
798 static GL3WglProc get_proc(
const char* proc)
800 GL3WglProc res = NULL;
806 *(
void**)(&res) = dlsym(libgl, proc);
809 res = gl_get_proc_address(proc);
812 *(
void**)(&res) = dlsym(libgl, proc);
818 static struct {
int major, minor; } version;
820 static int parse_version(
void)
823 return GL3W_ERROR_INIT;
824 glGetIntegerv(GL_MAJOR_VERSION, &version.major);
825 glGetIntegerv(GL_MINOR_VERSION, &version.minor);
826 if (version.major == 0 && version.minor == 0)
829 if (
const char* gl_version = (
const char*)glGetString(GL_VERSION))
830 sscanf(gl_version,
"%d.%d", &version.major, &version.minor);
832 if (version.major < 2)
833 return GL3W_ERROR_OPENGL_VERSION;
837 static void load_procs(GL3WGetProcAddressProc proc);
841 int res = open_libgl();
845 return imgl3wInit2(get_proc);
848 int imgl3wInit2(GL3WGetProcAddressProc proc)
851 return parse_version();
854 int imgl3wIsSupported(
int major,
int minor)
858 if (version.major == major)
859 return version.minor >= minor;
860 return version.major >= major;
863 GL3WglProc imgl3wGetProcAddress(
const char *proc) {
return get_proc(proc); }
865 static const char *proc_names[] = {
873 "glBlendEquationSeparate",
874 "glBlendFuncSeparate",
886 "glDeleteVertexArrays",
889 "glDisableVertexAttribArray",
891 "glDrawElementsBaseVertex",
893 "glEnableVertexAttribArray",
898 "glGetAttribLocation",
901 "glGetProgramInfoLog",
903 "glGetShaderInfoLog",
907 "glGetUniformLocation",
908 "glGetVertexAttribPointerv",
909 "glGetVertexAttribiv",
922 "glUniformMatrix4fv",
924 "glVertexAttribPointer",
930 static void load_procs(GL3WGetProcAddressProc proc)
933 for (i = 0; i < GL3W_ARRAY_SIZE(proc_names); i++)
934 imgl3wProcs.ptr[i] = proc(proc_names[i]);
Definition: imgui_impl_opengl3_loader.h:488