60#ifndef __khrplatform_h_
61typedef float khronos_float_t;
62typedef signed char khronos_int8_t;
63typedef unsigned char khronos_uint8_t;
64typedef signed short int khronos_int16_t;
65typedef unsigned short int khronos_uint16_t;
67typedef signed long long int khronos_intptr_t;
68typedef signed long long int khronos_ssize_t;
70typedef signed long int khronos_intptr_t;
71typedef signed long int khronos_ssize_t;
74#if defined(_MSC_VER) && !defined(__clang__)
75typedef signed __int64 khronos_int64_t;
76typedef unsigned __int64 khronos_uint64_t;
77#elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100)
79typedef int64_t khronos_int64_t;
80typedef uint64_t khronos_uint64_t;
82typedef signed long long khronos_int64_t;
83typedef unsigned long long khronos_uint64_t;
87#ifndef __gl_glcorearb_h_
88#define __gl_glcorearb_h_ 1
101#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
102#ifndef WIN32_LEAN_AND_MEAN
103#define WIN32_LEAN_AND_MEAN 1
111#define APIENTRYP APIENTRY *
138#ifndef GL_VERSION_1_0
140typedef unsigned int GLenum;
142typedef khronos_float_t GLfloat;
145typedef unsigned int GLbitfield;
146typedef double GLdouble;
147typedef unsigned int GLuint;
148typedef unsigned char GLboolean;
149typedef khronos_uint8_t GLubyte;
150#define GL_COLOR_BUFFER_BIT 0x00004000
153#define GL_TRIANGLES 0x0004
155#define GL_SRC_ALPHA 0x0302
156#define GL_ONE_MINUS_SRC_ALPHA 0x0303
157#define GL_FRONT 0x0404
158#define GL_BACK 0x0405
159#define GL_FRONT_AND_BACK 0x0408
160#define GL_POLYGON_MODE 0x0B40
161#define GL_CULL_FACE 0x0B44
162#define GL_DEPTH_TEST 0x0B71
163#define GL_STENCIL_TEST 0x0B90
164#define GL_VIEWPORT 0x0BA2
165#define GL_BLEND 0x0BE2
166#define GL_SCISSOR_BOX 0x0C10
167#define GL_SCISSOR_TEST 0x0C11
168#define GL_UNPACK_ROW_LENGTH 0x0CF2
169#define GL_PACK_ALIGNMENT 0x0D05
170#define GL_TEXTURE_2D 0x0DE1
171#define GL_UNSIGNED_BYTE 0x1401
172#define GL_UNSIGNED_SHORT 0x1403
173#define GL_UNSIGNED_INT 0x1405
174#define GL_FLOAT 0x1406
175#define GL_RGBA 0x1908
176#define GL_FILL 0x1B02
177#define GL_VENDOR 0x1F00
178#define GL_RENDERER 0x1F01
179#define GL_VERSION 0x1F02
180#define GL_EXTENSIONS 0x1F03
181#define GL_LINEAR 0x2601
182#define GL_TEXTURE_MAG_FILTER 0x2800
183#define GL_TEXTURE_MIN_FILTER 0x2801
184typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
185typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
186typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
187typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type,
const void *pixels);
188typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
189typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat
red, GLfloat green, GLfloat blue, GLfloat alpha);
190typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
191typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
192typedef void (APIENTRYP PFNGLFLUSHPROC) (void);
193typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
194typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
void *pixels);
195typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void);
196typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
197typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
198typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
199typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
200#ifdef GL_GLEXT_PROTOTYPES
201GLAPI
void APIENTRY glPolygonMode (GLenum face, GLenum mode);
202GLAPI
void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
203GLAPI
void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
204GLAPI
void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type,
const void *pixels);
205GLAPI
void APIENTRY glClear (GLbitfield mask);
206GLAPI
void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
207GLAPI
void APIENTRY glDisable (GLenum cap);
208GLAPI
void APIENTRY glEnable (GLenum cap);
209GLAPI
void APIENTRY glFlush (
void);
210GLAPI
void APIENTRY glPixelStorei (GLenum pname, GLint param);
211GLAPI
void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
void *pixels);
212GLAPI GLenum APIENTRY glGetError (
void);
213GLAPI
void APIENTRY glGetIntegerv (GLenum pname, GLint *data);
214GLAPI
const GLubyte *APIENTRY glGetString (GLenum name);
215GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap);
216GLAPI
void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
219#ifndef GL_VERSION_1_1
220typedef khronos_float_t GLclampf;
221typedef double GLclampd;
222#define GL_TEXTURE_BINDING_2D 0x8069
223typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type,
const void *indices);
224typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
225typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n,
const GLuint *textures);
226typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
227#ifdef GL_GLEXT_PROTOTYPES
228GLAPI
void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type,
const void *indices);
229GLAPI
void APIENTRY glBindTexture (GLenum target, GLuint texture);
230GLAPI
void APIENTRY glDeleteTextures (GLsizei n,
const GLuint *textures);
231GLAPI
void APIENTRY glGenTextures (GLsizei n, GLuint *textures);
234#ifndef GL_VERSION_1_3
235#define GL_TEXTURE0 0x84C0
236#define GL_ACTIVE_TEXTURE 0x84E0
237typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
238#ifdef GL_GLEXT_PROTOTYPES
239GLAPI
void APIENTRY glActiveTexture (GLenum texture);
242#ifndef GL_VERSION_1_4
243#define GL_BLEND_DST_RGB 0x80C8
244#define GL_BLEND_SRC_RGB 0x80C9
245#define GL_BLEND_DST_ALPHA 0x80CA
246#define GL_BLEND_SRC_ALPHA 0x80CB
247#define GL_FUNC_ADD 0x8006
248typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
249typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
250#ifdef GL_GLEXT_PROTOTYPES
251GLAPI
void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
252GLAPI
void APIENTRY glBlendEquation (GLenum mode);
255#ifndef GL_VERSION_1_5
256typedef khronos_ssize_t GLsizeiptr;
257typedef khronos_intptr_t GLintptr;
258#define GL_ARRAY_BUFFER 0x8892
259#define GL_ELEMENT_ARRAY_BUFFER 0x8893
260#define GL_ARRAY_BUFFER_BINDING 0x8894
261#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
262#define GL_STREAM_DRAW 0x88E0
263typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
264typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n,
const GLuint *buffers);
265typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
266typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size,
const void *data, GLenum usage);
267typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size,
const void *data);
268#ifdef GL_GLEXT_PROTOTYPES
269GLAPI
void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
270GLAPI
void APIENTRY glDeleteBuffers (GLsizei n,
const GLuint *buffers);
271GLAPI
void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
272GLAPI
void APIENTRY glBufferData (GLenum target, GLsizeiptr size,
const void *data, GLenum usage);
273GLAPI
void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size,
const void *data);
276#ifndef GL_VERSION_2_0
278typedef khronos_int16_t GLshort;
279typedef khronos_int8_t GLbyte;
280typedef khronos_uint16_t GLushort;
281#define GL_BLEND_EQUATION_RGB 0x8009
282#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
283#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
284#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
285#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
286#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
287#define GL_BLEND_EQUATION_ALPHA 0x883D
288#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
289#define GL_FRAGMENT_SHADER 0x8B30
290#define GL_VERTEX_SHADER 0x8B31
291#define GL_COMPILE_STATUS 0x8B81
292#define GL_LINK_STATUS 0x8B82
293#define GL_INFO_LOG_LENGTH 0x8B84
294#define GL_CURRENT_PROGRAM 0x8B8D
295#define GL_UPPER_LEFT 0x8CA2
296typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
297typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
298typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
299typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
300typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
301typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
302typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
303typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
304typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
305typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
306typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program,
const GLchar *name);
307typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
308typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
309typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
310typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
311typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program,
const GLchar *name);
312typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
313typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname,
void **pointer);
314typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
315typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
316typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count,
const GLchar *
const*string,
const GLint *length);
317typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
318typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
319typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose,
const GLfloat *value);
320typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
const void *pointer);
321#ifdef GL_GLEXT_PROTOTYPES
322GLAPI
void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
323GLAPI
void APIENTRY glAttachShader (GLuint program, GLuint shader);
324GLAPI
void APIENTRY glCompileShader (GLuint shader);
325GLAPI GLuint APIENTRY glCreateProgram (
void);
326GLAPI GLuint APIENTRY glCreateShader (GLenum type);
327GLAPI
void APIENTRY glDeleteProgram (GLuint program);
328GLAPI
void APIENTRY glDeleteShader (GLuint shader);
329GLAPI
void APIENTRY glDetachShader (GLuint program, GLuint shader);
330GLAPI
void APIENTRY glDisableVertexAttribArray (GLuint index);
331GLAPI
void APIENTRY glEnableVertexAttribArray (GLuint index);
332GLAPI GLint APIENTRY glGetAttribLocation (GLuint program,
const GLchar *name);
333GLAPI
void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
334GLAPI
void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
335GLAPI
void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
336GLAPI
void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
337GLAPI GLint APIENTRY glGetUniformLocation (GLuint program,
const GLchar *name);
338GLAPI
void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
339GLAPI
void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname,
void **pointer);
340GLAPI GLboolean APIENTRY glIsProgram (GLuint program);
341GLAPI
void APIENTRY glLinkProgram (GLuint program);
342GLAPI
void APIENTRY glShaderSource (GLuint shader, GLsizei count,
const GLchar *
const*
string,
const GLint *length);
343GLAPI
void APIENTRY glUseProgram (GLuint program);
344GLAPI
void APIENTRY glUniform1i (GLint location, GLint v0);
345GLAPI
void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose,
const GLfloat *value);
346GLAPI
void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
const void *pointer);
349#ifndef GL_VERSION_2_1
350#define GL_PIXEL_UNPACK_BUFFER 0x88EC
351#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
353#ifndef GL_VERSION_3_0
354typedef khronos_uint16_t GLhalf;
355#define GL_MAJOR_VERSION 0x821B
356#define GL_MINOR_VERSION 0x821C
357#define GL_NUM_EXTENSIONS 0x821D
358#define GL_FRAMEBUFFER_SRGB 0x8DB9
359#define GL_VERTEX_ARRAY_BINDING 0x85B5
360typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
361typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
362typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
363typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
364typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n,
const GLuint *arrays);
365typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
366#ifdef GL_GLEXT_PROTOTYPES
367GLAPI
const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index);
368GLAPI
void APIENTRY glBindVertexArray (GLuint array);
369GLAPI
void APIENTRY glDeleteVertexArrays (GLsizei n,
const GLuint *arrays);
370GLAPI
void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
373#ifndef GL_VERSION_3_1
374#define GL_VERSION_3_1 1
375#define GL_PRIMITIVE_RESTART 0x8F9D
377#ifndef GL_VERSION_3_2
378#define GL_VERSION_3_2 1
379typedef struct __GLsync *GLsync;
380typedef khronos_uint64_t GLuint64;
381typedef khronos_int64_t GLint64;
382#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
383#define GL_CONTEXT_PROFILE_MASK 0x9126
384typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type,
const void *indices, GLint basevertex);
385typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
386#ifdef GL_GLEXT_PROTOTYPES
387GLAPI
void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type,
const void *indices, GLint basevertex);
390#ifndef GL_VERSION_3_3
391#define GL_VERSION_3_3 1
392#define GL_SAMPLER_BINDING 0x8919
393typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
394#ifdef GL_GLEXT_PROTOTYPES
395GLAPI
void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
398#ifndef GL_VERSION_4_1
399typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
400typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
402#ifndef GL_VERSION_4_3
403typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,
const GLchar *message,
const void *userParam);
405#ifndef GL_VERSION_4_5
406#define GL_CLIP_ORIGIN 0x935C
407typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param);
408typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
410#ifndef GL_ARB_bindless_texture
411typedef khronos_uint64_t GLuint64EXT;
413#ifndef GL_ARB_cl_event
417#ifndef GL_ARB_clip_control
418#define GL_ARB_clip_control 1
420#ifndef GL_ARB_debug_output
421typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,
const GLchar *message,
const void *userParam);
423#ifndef GL_EXT_EGL_image_storage
424typedef void *GLeglImageOES;
426#ifndef GL_EXT_direct_state_access
427typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params);
428typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params);
429typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index,
void **params);
430typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
431typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname,
void **param);
433#ifndef GL_NV_draw_vulkan_image
434typedef void (APIENTRY *GLVULKANPROCNV)(void);
436#ifndef GL_NV_gpu_shader5
437typedef khronos_int64_t GLint64EXT;
439#ifndef GL_NV_vertex_buffer_unified_memory
440typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
460#define GL3W_ERROR_INIT -1
461#define GL3W_ERROR_LIBRARY_OPEN -2
462#define GL3W_ERROR_OPENGL_VERSION -3
464typedef void (*GL3WglProc)(void);
465typedef GL3WglProc (*GL3WGetProcAddressProc)(
const char *proc);
468GL3W_API
int imgl3wInit(
void);
469GL3W_API
int imgl3wInit2(GL3WGetProcAddressProc proc);
470GL3W_API
int imgl3wIsSupported(
int major,
int minor);
471GL3W_API GL3WglProc imgl3wGetProcAddress(
const char *proc);
542#define glActiveTexture imgl3wProcs.gl.ActiveTexture
543#define glAttachShader imgl3wProcs.gl.AttachShader
544#define glBindBuffer imgl3wProcs.gl.BindBuffer
545#define glBindSampler imgl3wProcs.gl.BindSampler
546#define glBindTexture imgl3wProcs.gl.BindTexture
547#define glBindVertexArray imgl3wProcs.gl.BindVertexArray
548#define glBlendEquation imgl3wProcs.gl.BlendEquation
549#define glBlendEquationSeparate imgl3wProcs.gl.BlendEquationSeparate
550#define glBlendFuncSeparate imgl3wProcs.gl.BlendFuncSeparate
551#define glBufferData imgl3wProcs.gl.BufferData
552#define glBufferSubData imgl3wProcs.gl.BufferSubData
553#define glClear imgl3wProcs.gl.Clear
554#define glClearColor imgl3wProcs.gl.ClearColor
555#define glCompileShader imgl3wProcs.gl.CompileShader
556#define glCreateProgram imgl3wProcs.gl.CreateProgram
557#define glCreateShader imgl3wProcs.gl.CreateShader
558#define glDeleteBuffers imgl3wProcs.gl.DeleteBuffers
559#define glDeleteProgram imgl3wProcs.gl.DeleteProgram
560#define glDeleteShader imgl3wProcs.gl.DeleteShader
561#define glDeleteTextures imgl3wProcs.gl.DeleteTextures
562#define glDeleteVertexArrays imgl3wProcs.gl.DeleteVertexArrays
563#define glDetachShader imgl3wProcs.gl.DetachShader
564#define glDisable imgl3wProcs.gl.Disable
565#define glDisableVertexAttribArray imgl3wProcs.gl.DisableVertexAttribArray
566#define glDrawElements imgl3wProcs.gl.DrawElements
567#define glDrawElementsBaseVertex imgl3wProcs.gl.DrawElementsBaseVertex
568#define glEnable imgl3wProcs.gl.Enable
569#define glEnableVertexAttribArray imgl3wProcs.gl.EnableVertexAttribArray
570#define glFlush imgl3wProcs.gl.Flush
571#define glGenBuffers imgl3wProcs.gl.GenBuffers
572#define glGenTextures imgl3wProcs.gl.GenTextures
573#define glGenVertexArrays imgl3wProcs.gl.GenVertexArrays
574#define glGetAttribLocation imgl3wProcs.gl.GetAttribLocation
575#define glGetError imgl3wProcs.gl.GetError
576#define glGetIntegerv imgl3wProcs.gl.GetIntegerv
577#define glGetProgramInfoLog imgl3wProcs.gl.GetProgramInfoLog
578#define glGetProgramiv imgl3wProcs.gl.GetProgramiv
579#define glGetShaderInfoLog imgl3wProcs.gl.GetShaderInfoLog
580#define glGetShaderiv imgl3wProcs.gl.GetShaderiv
581#define glGetString imgl3wProcs.gl.GetString
582#define glGetStringi imgl3wProcs.gl.GetStringi
583#define glGetUniformLocation imgl3wProcs.gl.GetUniformLocation
584#define glGetVertexAttribPointerv imgl3wProcs.gl.GetVertexAttribPointerv
585#define glGetVertexAttribiv imgl3wProcs.gl.GetVertexAttribiv
586#define glIsEnabled imgl3wProcs.gl.IsEnabled
587#define glIsProgram imgl3wProcs.gl.IsProgram
588#define glLinkProgram imgl3wProcs.gl.LinkProgram
589#define glPixelStorei imgl3wProcs.gl.PixelStorei
590#define glPolygonMode imgl3wProcs.gl.PolygonMode
591#define glReadPixels imgl3wProcs.gl.ReadPixels
592#define glScissor imgl3wProcs.gl.Scissor
593#define glShaderSource imgl3wProcs.gl.ShaderSource
594#define glTexImage2D imgl3wProcs.gl.TexImage2D
595#define glTexParameteri imgl3wProcs.gl.TexParameteri
596#define glUniform1i imgl3wProcs.gl.Uniform1i
597#define glUniformMatrix4fv imgl3wProcs.gl.UniformMatrix4fv
598#define glUseProgram imgl3wProcs.gl.UseProgram
599#define glVertexAttribPointer imgl3wProcs.gl.VertexAttribPointer
600#define glViewport imgl3wProcs.gl.Viewport
615#define GL3W_ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
618#ifndef WIN32_LEAN_AND_MEAN
619#define WIN32_LEAN_AND_MEAN 1
624typedef PROC(__stdcall* GL3WglGetProcAddr)(LPCSTR);
625static GL3WglGetProcAddr wgl_get_proc_address;
627static int open_libgl(
void)
629 libgl = LoadLibraryA(
"opengl32.dll");
631 return GL3W_ERROR_LIBRARY_OPEN;
632 wgl_get_proc_address = (GL3WglGetProcAddr)GetProcAddress(libgl,
"wglGetProcAddress");
636static void close_libgl(
void) { FreeLibrary(libgl); }
637static GL3WglProc get_proc(
const char *proc)
640 res = (GL3WglProc)wgl_get_proc_address(proc);
642 res = (GL3WglProc)GetProcAddress(libgl, proc);
645#elif defined(__APPLE__)
649static int open_libgl(
void)
651 libgl = dlopen(
"/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL);
653 return GL3W_ERROR_LIBRARY_OPEN;
657static void close_libgl(
void) { dlclose(libgl); }
659static GL3WglProc get_proc(
const char *proc)
662 *(
void **)(&res) = dlsym(libgl, proc);
671static GL3WGetProcAddressProc gl_get_proc_address;
673static void close_libgl(
void)
689static int is_library_loaded(
const char* name,
void** lib)
691 *lib = dlopen(name, RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
695static int open_libs(
void)
707 if (is_library_loaded(
"libEGL.so.1", &libegl) ||
708 is_library_loaded(
"libGLX.so.0", &libglx)) {
709 libgl = dlopen(
"libOpenGL.so.0", RTLD_LAZY | RTLD_LOCAL);
716 if (is_library_loaded(
"libGL.so", &libgl))
718 if (is_library_loaded(
"libGL.so.1", &libgl))
720 if (is_library_loaded(
"libGL.so.3", &libgl))
727 libgl = dlopen(
"libOpenGL.so.0", RTLD_LAZY | RTLD_LOCAL);
728 libegl = dlopen(
"libEGL.so.1", RTLD_LAZY | RTLD_LOCAL);
736 libgl = dlopen(
"libGL.so", RTLD_LAZY | RTLD_LOCAL);
738 libgl = dlopen(
"libGL.so.1", RTLD_LAZY | RTLD_LOCAL);
740 libgl = dlopen(
"libGL.so.3", RTLD_LAZY | RTLD_LOCAL);
745 return GL3W_ERROR_LIBRARY_OPEN;
748static int open_libgl(
void)
750 int res = open_libs();
755 *(
void**)(&gl_get_proc_address) = dlsym(libegl,
"eglGetProcAddress");
757 *(
void**)(&gl_get_proc_address) = dlsym(libglx,
"glXGetProcAddressARB");
759 *(
void**)(&gl_get_proc_address) = dlsym(libgl,
"glXGetProcAddressARB");
761 if (!gl_get_proc_address) {
763 return GL3W_ERROR_LIBRARY_OPEN;
769static GL3WglProc get_proc(
const char* proc)
771 GL3WglProc res = NULL;
777 *(
void**)(&res) = dlsym(libgl, proc);
780 res = gl_get_proc_address(proc);
783 *(
void**)(&res) = dlsym(libgl, proc);
789static struct {
int major, minor; } version;
791static int parse_version(
void)
794 return GL3W_ERROR_INIT;
795 glGetIntegerv(GL_MAJOR_VERSION, &version.major);
796 glGetIntegerv(GL_MINOR_VERSION, &version.minor);
797 if (version.major == 0 && version.minor == 0)
800 if (
const char* gl_version = (
const char*)glGetString(GL_VERSION))
801 sscanf(gl_version,
"%d.%d", &version.major, &version.minor);
803 if (version.major < 2)
804 return GL3W_ERROR_OPENGL_VERSION;
808static void load_procs(GL3WGetProcAddressProc proc);
812 int res = open_libgl();
816 return imgl3wInit2(get_proc);
819int imgl3wInit2(GL3WGetProcAddressProc proc)
822 return parse_version();
825int imgl3wIsSupported(
int major,
int minor)
829 if (version.major == major)
830 return version.minor >= minor;
831 return version.major >= major;
834GL3WglProc imgl3wGetProcAddress(
const char *proc) {
return get_proc(proc); }
836static const char *proc_names[] = {
844 "glBlendEquationSeparate",
845 "glBlendFuncSeparate",
857 "glDeleteVertexArrays",
860 "glDisableVertexAttribArray",
862 "glDrawElementsBaseVertex",
864 "glEnableVertexAttribArray",
869 "glGetAttribLocation",
872 "glGetProgramInfoLog",
874 "glGetShaderInfoLog",
878 "glGetUniformLocation",
879 "glGetVertexAttribPointerv",
880 "glGetVertexAttribiv",
892 "glUniformMatrix4fv",
894 "glVertexAttribPointer",
900static void load_procs(GL3WGetProcAddressProc proc)
903 for (i = 0; i < GL3W_ARRAY_SIZE(proc_names); i++)
904 imgl3wProcs.
ptr[i] = proc(proc_names[i]);
std::ostream & red(std::ostream &stream)
Set the text color to red.
Definition colors.cpp:69
Definition imgui_impl_opengl3_loader.h:474
PFNGLBUFFERDATAPROC BufferData
Definition imgui_impl_opengl3_loader.h:486
PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex
Definition imgui_impl_opengl3_loader.h:502
PFNGLPIXELSTOREIPROC PixelStorei
Definition imgui_impl_opengl3_loader.h:524
PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate
Definition imgui_impl_opengl3_loader.h:485
PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray
Definition imgui_impl_opengl3_loader.h:504
PFNGLDELETEBUFFERSPROC DeleteBuffers
Definition imgui_impl_opengl3_loader.h:493
PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer
Definition imgui_impl_opengl3_loader.h:534
PFNGLGENTEXTURESPROC GenTextures
Definition imgui_impl_opengl3_loader.h:507
PFNGLGETPROGRAMIVPROC GetProgramiv
Definition imgui_impl_opengl3_loader.h:513
PFNGLGETSTRINGIPROC GetStringi
Definition imgui_impl_opengl3_loader.h:517
PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation
Definition imgui_impl_opengl3_loader.h:518
PFNGLGENVERTEXARRAYSPROC GenVertexArrays
Definition imgui_impl_opengl3_loader.h:508
PFNGLBINDVERTEXARRAYPROC BindVertexArray
Definition imgui_impl_opengl3_loader.h:482
PFNGLGETVERTEXATTRIBIVPROC GetVertexAttribiv
Definition imgui_impl_opengl3_loader.h:520
PFNGLUSEPROGRAMPROC UseProgram
Definition imgui_impl_opengl3_loader.h:533
PFNGLGETINTEGERVPROC GetIntegerv
Definition imgui_impl_opengl3_loader.h:511
PFNGLSCISSORPROC Scissor
Definition imgui_impl_opengl3_loader.h:527
PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv
Definition imgui_impl_opengl3_loader.h:532
PFNGLDELETESHADERPROC DeleteShader
Definition imgui_impl_opengl3_loader.h:495
PFNGLDRAWELEMENTSPROC DrawElements
Definition imgui_impl_opengl3_loader.h:501
PFNGLBINDTEXTUREPROC BindTexture
Definition imgui_impl_opengl3_loader.h:481
PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog
Definition imgui_impl_opengl3_loader.h:514
PFNGLGETSTRINGPROC GetString
Definition imgui_impl_opengl3_loader.h:516
PFNGLGENBUFFERSPROC GenBuffers
Definition imgui_impl_opengl3_loader.h:506
PFNGLCOMPILESHADERPROC CompileShader
Definition imgui_impl_opengl3_loader.h:490
PFNGLBUFFERSUBDATAPROC BufferSubData
Definition imgui_impl_opengl3_loader.h:487
PFNGLTEXIMAGE2DPROC TexImage2D
Definition imgui_impl_opengl3_loader.h:529
PFNGLTEXPARAMETERIPROC TexParameteri
Definition imgui_impl_opengl3_loader.h:530
PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog
Definition imgui_impl_opengl3_loader.h:512
PFNGLCREATEPROGRAMPROC CreateProgram
Definition imgui_impl_opengl3_loader.h:491
PFNGLDETACHSHADERPROC DetachShader
Definition imgui_impl_opengl3_loader.h:498
PFNGLSHADERSOURCEPROC ShaderSource
Definition imgui_impl_opengl3_loader.h:528
GL3WglProc ptr[59]
Definition imgui_impl_opengl3_loader.h:475
PFNGLACTIVETEXTUREPROC ActiveTexture
Definition imgui_impl_opengl3_loader.h:477
struct ImGL3WProcs::@236261115137130130041271130064027261117126257030 gl
PFNGLPOLYGONMODEPROC PolygonMode
Definition imgui_impl_opengl3_loader.h:525
PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate
Definition imgui_impl_opengl3_loader.h:484
PFNGLGETSHADERIVPROC GetShaderiv
Definition imgui_impl_opengl3_loader.h:515
PFNGLBINDBUFFERPROC BindBuffer
Definition imgui_impl_opengl3_loader.h:479
PFNGLDISABLEPROC Disable
Definition imgui_impl_opengl3_loader.h:499
PFNGLUNIFORM1IPROC Uniform1i
Definition imgui_impl_opengl3_loader.h:531
PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays
Definition imgui_impl_opengl3_loader.h:497
PFNGLBLENDEQUATIONPROC BlendEquation
Definition imgui_impl_opengl3_loader.h:483
PFNGLISENABLEDPROC IsEnabled
Definition imgui_impl_opengl3_loader.h:521
PFNGLFLUSHPROC Flush
Definition imgui_impl_opengl3_loader.h:505
PFNGLATTACHSHADERPROC AttachShader
Definition imgui_impl_opengl3_loader.h:478
PFNGLDELETETEXTURESPROC DeleteTextures
Definition imgui_impl_opengl3_loader.h:496
PFNGLCREATESHADERPROC CreateShader
Definition imgui_impl_opengl3_loader.h:492
PFNGLCLEARCOLORPROC ClearColor
Definition imgui_impl_opengl3_loader.h:489
PFNGLGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv
Definition imgui_impl_opengl3_loader.h:519
PFNGLGETERRORPROC GetError
Definition imgui_impl_opengl3_loader.h:510
PFNGLISPROGRAMPROC IsProgram
Definition imgui_impl_opengl3_loader.h:522
PFNGLBINDSAMPLERPROC BindSampler
Definition imgui_impl_opengl3_loader.h:480
PFNGLCLEARPROC Clear
Definition imgui_impl_opengl3_loader.h:488
PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray
Definition imgui_impl_opengl3_loader.h:500
PFNGLVIEWPORTPROC Viewport
Definition imgui_impl_opengl3_loader.h:535
PFNGLREADPIXELSPROC ReadPixels
Definition imgui_impl_opengl3_loader.h:526
PFNGLLINKPROGRAMPROC LinkProgram
Definition imgui_impl_opengl3_loader.h:523
PFNGLGETATTRIBLOCATIONPROC GetAttribLocation
Definition imgui_impl_opengl3_loader.h:509
PFNGLENABLEPROC Enable
Definition imgui_impl_opengl3_loader.h:503
PFNGLDELETEPROGRAMPROC DeleteProgram
Definition imgui_impl_opengl3_loader.h:494