Steppable 0.0.1
A CAS project written from scratch in C++
Loading...
Searching...
No Matches
imgui_impl_opengl3_loader.h
1//-----------------------------------------------------------------------------
2// About imgui_impl_opengl3_loader.h:
3//
4// We embed our own OpenGL loader to not require user to provide their own or to have to use ours,
5// which proved to be endless problems for users.
6// Our loader is custom-generated, based on gl3w but automatically filtered to only include
7// enums/functions that we use in our imgui_impl_opengl3.cpp source file in order to be small.
8//
9// YOU SHOULD NOT NEED TO INCLUDE/USE THIS DIRECTLY. THIS IS USED BY imgui_impl_opengl3.cpp ONLY.
10// THE REST OF YOUR APP SHOULD USE A DIFFERENT GL LOADER: ANY GL LOADER OF YOUR CHOICE.
11//
12// IF YOU GET BUILD ERRORS IN THIS FILE (commonly macro redefinitions or function redefinitions):
13// IT LIKELY MEANS THAT YOU ARE BUILDING 'imgui_impl_opengl3.cpp' OR INCLUDING 'imgui_impl_opengl3_loader.h'
14// IN THE SAME COMPILATION UNIT AS ONE OF YOUR FILE WHICH IS USING A THIRD-PARTY OPENGL LOADER.
15// (e.g. COULD HAPPEN IF YOU ARE DOING A UNITY/JUMBO BUILD, OR INCLUDING .CPP FILES FROM OTHERS)
16// YOU SHOULD NOT BUILD BOTH IN THE SAME COMPILATION UNIT.
17// BUT IF YOU REALLY WANT TO, you can '#define IMGUI_IMPL_OPENGL_LOADER_CUSTOM' and imgui_impl_opengl3.cpp
18// WILL NOT BE USING OUR LOADER, AND INSTEAD EXPECT ANOTHER/YOUR LOADER TO BE AVAILABLE IN THE COMPILATION UNIT.
19//
20// Regenerate with:
21// python3 gl3w_gen.py --output ../imgui/backends/imgui_impl_opengl3_loader.h --ref ../imgui/backends/imgui_impl_opengl3.cpp ./extra_symbols.txt
22//
23// More info:
24// https://github.com/dearimgui/gl3w_stripped
25// https://github.com/ocornut/imgui/issues/4445
26//-----------------------------------------------------------------------------
27
28/*
29 * This file was generated with gl3w_gen.py, part of imgl3w
30 * (hosted at https://github.com/dearimgui/gl3w_stripped)
31 *
32 * This is free and unencumbered software released into the public domain.
33 *
34 * Anyone is free to copy, modify, publish, use, compile, sell, or
35 * distribute this software, either in source code form or as a compiled
36 * binary, for any purpose, commercial or non-commercial, and by any
37 * means.
38 *
39 * In jurisdictions that recognize copyright laws, the author or authors
40 * of this software dedicate any and all copyright interest in the
41 * software to the public domain. We make this dedication for the benefit
42 * of the public at large and to the detriment of our heirs and
43 * successors. We intend this dedication to be an overt act of
44 * relinquishment in perpetuity of all present and future rights to this
45 * software under copyright law.
46 *
47 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
48 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
49 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
50 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
51 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
52 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
53 * OTHER DEALINGS IN THE SOFTWARE.
54 */
55
56#ifndef __gl3w_h_
57#define __gl3w_h_
58
59// Adapted from KHR/khrplatform.h to avoid including entire file.
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;
66#ifdef _WIN64
67typedef signed long long int khronos_intptr_t;
68typedef signed long long int khronos_ssize_t;
69#else
70typedef signed long int khronos_intptr_t;
71typedef signed long int khronos_ssize_t;
72#endif
73
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)
78#include <stdint.h>
79typedef int64_t khronos_int64_t;
80typedef uint64_t khronos_uint64_t;
81#else
82typedef signed long long khronos_int64_t;
83typedef unsigned long long khronos_uint64_t;
84#endif
85#endif // __khrplatform_h_
86
87#ifndef __gl_glcorearb_h_
88#define __gl_glcorearb_h_ 1
89#ifdef __cplusplus
90extern "C" {
91#endif
92/*
93** Copyright 2013-2020 The Khronos Group Inc.
94** SPDX-License-Identifier: MIT
95**
96** This header is generated from the Khronos OpenGL / OpenGL ES XML
97** API Registry. The current version of the Registry, generator scripts
98** used to make the header, and the header can be found at
99** https://github.com/KhronosGroup/OpenGL-Registry
100*/
101#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
102#ifndef WIN32_LEAN_AND_MEAN
103#define WIN32_LEAN_AND_MEAN 1
104#endif
105#include <windows.h>
106#endif
107#ifndef APIENTRY
108#define APIENTRY
109#endif
110#ifndef APIENTRYP
111#define APIENTRYP APIENTRY *
112#endif
113#ifndef GLAPI
114#define GLAPI extern
115#endif
116/* glcorearb.h is for use with OpenGL core profile implementations.
117** It should should be placed in the same directory as gl.h and
118** included as <GL/glcorearb.h>.
119**
120** glcorearb.h includes only APIs in the latest OpenGL core profile
121** implementation together with APIs in newer ARB extensions which
122** can be supported by the core profile. It does not, and never will
123** include functionality removed from the core profile, such as
124** fixed-function vertex and fragment processing.
125**
126** Do not #include both <GL/glcorearb.h> and either of <GL/gl.h> or
127** <GL/glext.h> in the same source file.
128*/
129/* Generated C header for:
130 * API: gl
131 * Profile: core
132 * Versions considered: .*
133 * Versions emitted: .*
134 * Default extensions included: glcore
135 * Additional extensions included: _nomatch_^
136 * Extensions removed: _nomatch_^
137 */
138#ifndef GL_VERSION_1_0
139typedef void GLvoid;
140typedef unsigned int GLenum;
141
142typedef khronos_float_t GLfloat;
143typedef int GLint;
144typedef int GLsizei;
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
151#define GL_FALSE 0
152#define GL_TRUE 1
153#define GL_TRIANGLES 0x0004
154#define GL_ONE 1
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);
217#endif
218#endif /* GL_VERSION_1_0 */
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);
232#endif
233#endif /* GL_VERSION_1_1 */
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);
240#endif
241#endif /* GL_VERSION_1_3 */
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);
253#endif
254#endif /* GL_VERSION_1_4 */
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);
274#endif
275#endif /* GL_VERSION_1_5 */
276#ifndef GL_VERSION_2_0
277typedef char GLchar;
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);
347#endif
348#endif /* GL_VERSION_2_0 */
349#ifndef GL_VERSION_2_1
350#define GL_PIXEL_UNPACK_BUFFER 0x88EC
351#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
352#endif /* GL_VERSION_2_1 */
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);
371#endif
372#endif /* GL_VERSION_3_0 */
373#ifndef GL_VERSION_3_1
374#define GL_VERSION_3_1 1
375#define GL_PRIMITIVE_RESTART 0x8F9D
376#endif /* GL_VERSION_3_1 */
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);
388#endif
389#endif /* GL_VERSION_3_2 */
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);
396#endif
397#endif /* GL_VERSION_3_3 */
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);
401#endif /* GL_VERSION_4_1 */
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);
404#endif /* GL_VERSION_4_3 */
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);
409#endif /* GL_VERSION_4_5 */
410#ifndef GL_ARB_bindless_texture
411typedef khronos_uint64_t GLuint64EXT;
412#endif /* GL_ARB_bindless_texture */
413#ifndef GL_ARB_cl_event
414struct _cl_context;
415struct _cl_event;
416#endif /* GL_ARB_cl_event */
417#ifndef GL_ARB_clip_control
418#define GL_ARB_clip_control 1
419#endif /* GL_ARB_clip_control */
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);
422#endif /* GL_ARB_debug_output */
423#ifndef GL_EXT_EGL_image_storage
424typedef void *GLeglImageOES;
425#endif /* GL_EXT_EGL_image_storage */
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);
432#endif /* GL_EXT_direct_state_access */
433#ifndef GL_NV_draw_vulkan_image
434typedef void (APIENTRY *GLVULKANPROCNV)(void);
435#endif /* GL_NV_draw_vulkan_image */
436#ifndef GL_NV_gpu_shader5
437typedef khronos_int64_t GLint64EXT;
438#endif /* GL_NV_gpu_shader5 */
439#ifndef GL_NV_vertex_buffer_unified_memory
440typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
441#endif /* GL_NV_vertex_buffer_unified_memory */
442#ifdef __cplusplus
443}
444#endif
445#endif
446
447#ifndef GL3W_API
448#define GL3W_API
449#endif
450
451#ifndef __gl_h_
452#define __gl_h_
453#endif
454
455#ifdef __cplusplus
456extern "C" {
457#endif
458
459#define GL3W_OK 0
460#define GL3W_ERROR_INIT -1
461#define GL3W_ERROR_LIBRARY_OPEN -2
462#define GL3W_ERROR_OPENGL_VERSION -3
463
464typedef void (*GL3WglProc)(void);
465typedef GL3WglProc (*GL3WGetProcAddressProc)(const char *proc);
466
467/* gl3w api */
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);
472
473/* gl3w internal state */
475 GL3WglProc ptr[59];
476 struct {
477 PFNGLACTIVETEXTUREPROC ActiveTexture;
478 PFNGLATTACHSHADERPROC AttachShader;
479 PFNGLBINDBUFFERPROC BindBuffer;
480 PFNGLBINDSAMPLERPROC BindSampler;
481 PFNGLBINDTEXTUREPROC BindTexture;
482 PFNGLBINDVERTEXARRAYPROC BindVertexArray;
483 PFNGLBLENDEQUATIONPROC BlendEquation;
484 PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate;
485 PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate;
486 PFNGLBUFFERDATAPROC BufferData;
487 PFNGLBUFFERSUBDATAPROC BufferSubData;
488 PFNGLCLEARPROC Clear;
489 PFNGLCLEARCOLORPROC ClearColor;
490 PFNGLCOMPILESHADERPROC CompileShader;
491 PFNGLCREATEPROGRAMPROC CreateProgram;
492 PFNGLCREATESHADERPROC CreateShader;
493 PFNGLDELETEBUFFERSPROC DeleteBuffers;
494 PFNGLDELETEPROGRAMPROC DeleteProgram;
495 PFNGLDELETESHADERPROC DeleteShader;
496 PFNGLDELETETEXTURESPROC DeleteTextures;
497 PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays;
498 PFNGLDETACHSHADERPROC DetachShader;
499 PFNGLDISABLEPROC Disable;
500 PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray;
501 PFNGLDRAWELEMENTSPROC DrawElements;
502 PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex;
503 PFNGLENABLEPROC Enable;
504 PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray;
505 PFNGLFLUSHPROC Flush;
506 PFNGLGENBUFFERSPROC GenBuffers;
507 PFNGLGENTEXTURESPROC GenTextures;
508 PFNGLGENVERTEXARRAYSPROC GenVertexArrays;
509 PFNGLGETATTRIBLOCATIONPROC GetAttribLocation;
510 PFNGLGETERRORPROC GetError;
511 PFNGLGETINTEGERVPROC GetIntegerv;
512 PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog;
513 PFNGLGETPROGRAMIVPROC GetProgramiv;
514 PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog;
515 PFNGLGETSHADERIVPROC GetShaderiv;
516 PFNGLGETSTRINGPROC GetString;
517 PFNGLGETSTRINGIPROC GetStringi;
518 PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation;
519 PFNGLGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv;
520 PFNGLGETVERTEXATTRIBIVPROC GetVertexAttribiv;
521 PFNGLISENABLEDPROC IsEnabled;
522 PFNGLISPROGRAMPROC IsProgram;
523 PFNGLLINKPROGRAMPROC LinkProgram;
524 PFNGLPIXELSTOREIPROC PixelStorei;
525 PFNGLPOLYGONMODEPROC PolygonMode;
526 PFNGLREADPIXELSPROC ReadPixels;
527 PFNGLSCISSORPROC Scissor;
528 PFNGLSHADERSOURCEPROC ShaderSource;
529 PFNGLTEXIMAGE2DPROC TexImage2D;
530 PFNGLTEXPARAMETERIPROC TexParameteri;
531 PFNGLUNIFORM1IPROC Uniform1i;
532 PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv;
533 PFNGLUSEPROGRAMPROC UseProgram;
534 PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer;
535 PFNGLVIEWPORTPROC Viewport;
536 } gl;
537};
538
539GL3W_API extern union ImGL3WProcs imgl3wProcs;
540
541/* OpenGL functions */
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
601
602#ifdef __cplusplus
603}
604#endif
605
606#endif
607
608#ifdef IMGL3W_IMPL
609#ifdef __cplusplus
610extern "C" {
611#endif
612
613#include <stdlib.h>
614
615#define GL3W_ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
616
617#if defined(_WIN32)
618#ifndef WIN32_LEAN_AND_MEAN
619#define WIN32_LEAN_AND_MEAN 1
620#endif
621#include <windows.h>
622
623static HMODULE libgl;
624typedef PROC(__stdcall* GL3WglGetProcAddr)(LPCSTR);
625static GL3WglGetProcAddr wgl_get_proc_address;
626
627static int open_libgl(void)
628{
629 libgl = LoadLibraryA("opengl32.dll");
630 if (!libgl)
631 return GL3W_ERROR_LIBRARY_OPEN;
632 wgl_get_proc_address = (GL3WglGetProcAddr)GetProcAddress(libgl, "wglGetProcAddress");
633 return GL3W_OK;
634}
635
636static void close_libgl(void) { FreeLibrary(libgl); }
637static GL3WglProc get_proc(const char *proc)
638{
639 GL3WglProc res;
640 res = (GL3WglProc)wgl_get_proc_address(proc);
641 if (!res)
642 res = (GL3WglProc)GetProcAddress(libgl, proc);
643 return res;
644}
645#elif defined(__APPLE__)
646#include <dlfcn.h>
647
648static void *libgl;
649static int open_libgl(void)
650{
651 libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL);
652 if (!libgl)
653 return GL3W_ERROR_LIBRARY_OPEN;
654 return GL3W_OK;
655}
656
657static void close_libgl(void) { dlclose(libgl); }
658
659static GL3WglProc get_proc(const char *proc)
660{
661 GL3WglProc res;
662 *(void **)(&res) = dlsym(libgl, proc);
663 return res;
664}
665#else
666#include <dlfcn.h>
667
668static void* libgl; // OpenGL library
669static void* libglx; // GLX library
670static void* libegl; // EGL library
671static GL3WGetProcAddressProc gl_get_proc_address;
672
673static void close_libgl(void)
674{
675 if (libgl) {
676 dlclose(libgl);
677 libgl = NULL;
678 }
679 if (libegl) {
680 dlclose(libegl);
681 libegl = NULL;
682 }
683 if (libglx) {
684 dlclose(libglx);
685 libglx = NULL;
686 }
687}
688
689static int is_library_loaded(const char* name, void** lib)
690{
691 *lib = dlopen(name, RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
692 return *lib != NULL;
693}
694
695static int open_libs(void)
696{
697 // On Linux we have two APIs to get process addresses: EGL and GLX.
698 // EGL is supported under both X11 and Wayland, whereas GLX is X11-specific.
699
700 libgl = NULL;
701 libegl = NULL;
702 libglx = NULL;
703
704 // First check what's already loaded, the windowing library might have
705 // already loaded either EGL or GLX and we want to use the same one.
706
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);
710 if (libgl)
711 return GL3W_OK;
712 else
713 close_libgl();
714 }
715
716 if (is_library_loaded("libGL.so", &libgl))
717 return GL3W_OK;
718 if (is_library_loaded("libGL.so.1", &libgl))
719 return GL3W_OK;
720 if (is_library_loaded("libGL.so.3", &libgl))
721 return GL3W_OK;
722
723 // Neither is already loaded, so we have to load one. Try EGL first
724 // because it is supported under both X11 and Wayland.
725
726 // Load OpenGL + EGL
727 libgl = dlopen("libOpenGL.so.0", RTLD_LAZY | RTLD_LOCAL);
728 libegl = dlopen("libEGL.so.1", RTLD_LAZY | RTLD_LOCAL);
729 if (libgl && libegl)
730 return GL3W_OK;
731 else
732 close_libgl();
733
734 // Fall back to legacy libGL, which includes GLX
735 // While most systems use libGL.so.1, NetBSD seems to use that libGL.so.3. See https://github.com/ocornut/imgui/issues/6983
736 libgl = dlopen("libGL.so", RTLD_LAZY | RTLD_LOCAL);
737 if (!libgl)
738 libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_LOCAL);
739 if (!libgl)
740 libgl = dlopen("libGL.so.3", RTLD_LAZY | RTLD_LOCAL);
741
742 if (libgl)
743 return GL3W_OK;
744
745 return GL3W_ERROR_LIBRARY_OPEN;
746}
747
748static int open_libgl(void)
749{
750 int res = open_libs();
751 if (res)
752 return res;
753
754 if (libegl)
755 *(void**)(&gl_get_proc_address) = dlsym(libegl, "eglGetProcAddress");
756 else if (libglx)
757 *(void**)(&gl_get_proc_address) = dlsym(libglx, "glXGetProcAddressARB");
758 else
759 *(void**)(&gl_get_proc_address) = dlsym(libgl, "glXGetProcAddressARB");
760
761 if (!gl_get_proc_address) {
762 close_libgl();
763 return GL3W_ERROR_LIBRARY_OPEN;
764 }
765
766 return GL3W_OK;
767}
768
769static GL3WglProc get_proc(const char* proc)
770{
771 GL3WglProc res = NULL;
772
773 // Before EGL version 1.5, eglGetProcAddress doesn't support querying core
774 // functions and may return a dummy function if we try, so try to load the
775 // function from the GL library directly first.
776 if (libegl)
777 *(void**)(&res) = dlsym(libgl, proc);
778
779 if (!res)
780 res = gl_get_proc_address(proc);
781
782 if (!libegl && !res)
783 *(void**)(&res) = dlsym(libgl, proc);
784
785 return res;
786}
787#endif
788
789static struct { int major, minor; } version;
790
791static int parse_version(void)
792{
793 if (!glGetIntegerv)
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)
798 {
799 // Query GL_VERSION in desktop GL 2.x, the string will start with "<major>.<minor>"
800 if (const char* gl_version = (const char*)glGetString(GL_VERSION))
801 sscanf(gl_version, "%d.%d", &version.major, &version.minor);
802 }
803 if (version.major < 2)
804 return GL3W_ERROR_OPENGL_VERSION;
805 return GL3W_OK;
806}
807
808static void load_procs(GL3WGetProcAddressProc proc);
809
810int imgl3wInit(void)
811{
812 int res = open_libgl();
813 if (res)
814 return res;
815 atexit(close_libgl);
816 return imgl3wInit2(get_proc);
817}
818
819int imgl3wInit2(GL3WGetProcAddressProc proc)
820{
821 load_procs(proc);
822 return parse_version();
823}
824
825int imgl3wIsSupported(int major, int minor)
826{
827 if (major < 2)
828 return 0;
829 if (version.major == major)
830 return version.minor >= minor;
831 return version.major >= major;
832}
833
834GL3WglProc imgl3wGetProcAddress(const char *proc) { return get_proc(proc); }
835
836static const char *proc_names[] = {
837 "glActiveTexture",
838 "glAttachShader",
839 "glBindBuffer",
840 "glBindSampler",
841 "glBindTexture",
842 "glBindVertexArray",
843 "glBlendEquation",
844 "glBlendEquationSeparate",
845 "glBlendFuncSeparate",
846 "glBufferData",
847 "glBufferSubData",
848 "glClear",
849 "glClearColor",
850 "glCompileShader",
851 "glCreateProgram",
852 "glCreateShader",
853 "glDeleteBuffers",
854 "glDeleteProgram",
855 "glDeleteShader",
856 "glDeleteTextures",
857 "glDeleteVertexArrays",
858 "glDetachShader",
859 "glDisable",
860 "glDisableVertexAttribArray",
861 "glDrawElements",
862 "glDrawElementsBaseVertex",
863 "glEnable",
864 "glEnableVertexAttribArray",
865 "glFlush",
866 "glGenBuffers",
867 "glGenTextures",
868 "glGenVertexArrays",
869 "glGetAttribLocation",
870 "glGetError",
871 "glGetIntegerv",
872 "glGetProgramInfoLog",
873 "glGetProgramiv",
874 "glGetShaderInfoLog",
875 "glGetShaderiv",
876 "glGetString",
877 "glGetStringi",
878 "glGetUniformLocation",
879 "glGetVertexAttribPointerv",
880 "glGetVertexAttribiv",
881 "glIsEnabled",
882 "glIsProgram",
883 "glLinkProgram",
884 "glPixelStorei",
885 "glPolygonMode",
886 "glReadPixels",
887 "glScissor",
888 "glShaderSource",
889 "glTexImage2D",
890 "glTexParameteri",
891 "glUniform1i",
892 "glUniformMatrix4fv",
893 "glUseProgram",
894 "glVertexAttribPointer",
895 "glViewport",
896};
897
898GL3W_API union ImGL3WProcs imgl3wProcs;
899
900static void load_procs(GL3WGetProcAddressProc proc)
901{
902 size_t i;
903 for (i = 0; i < GL3W_ARRAY_SIZE(proc_names); i++)
904 imgl3wProcs.ptr[i] = proc(proc_names[i]);
905}
906
907#ifdef __cplusplus
908}
909#endif
910#endif
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
Untitled