imgui_impl_opengl3_loader.h 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730
  1. /*
  2. * This file was generated with gl3w_gen.py, part of imgl3w
  3. * (hosted at https://github.com/dearimgui/gl3w_stripped)
  4. *
  5. * This is free and unencumbered software released into the public domain.
  6. *
  7. * Anyone is free to copy, modify, publish, use, compile, sell, or
  8. * distribute this software, either in source code form or as a compiled
  9. * binary, for any purpose, commercial or non-commercial, and by any
  10. * means.
  11. *
  12. * In jurisdictions that recognize copyright laws, the author or authors
  13. * of this software dedicate any and all copyright interest in the
  14. * software to the public domain. We make this dedication for the benefit
  15. * of the public at large and to the detriment of our heirs and
  16. * successors. We intend this dedication to be an overt act of
  17. * relinquishment in perpetuity of all present and future rights to this
  18. * software under copyright law.
  19. *
  20. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  21. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  23. * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  24. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  25. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  26. * OTHER DEALINGS IN THE SOFTWARE.
  27. */
  28. // We embed our own OpenGL loader to not require user to provide their own or to have to use ours, which proved to be endless problems for users.
  29. // Our loader is custom-generated, based on gl3w but automatically filtered to only include enums/functions that we use in this source file.
  30. // Regenerate with: python gl3w_gen.py --imgui-dir /path/to/imgui/
  31. // see https://github.com/dearimgui/gl3w_stripped for more info.
  32. #ifndef __gl3w_h_
  33. #define __gl3w_h_
  34. // Adapted from KHR/khrplatform.h to avoid including entire file.
  35. typedef float khronos_float_t;
  36. typedef signed char khronos_int8_t;
  37. typedef unsigned char khronos_uint8_t;
  38. typedef signed short int khronos_int16_t;
  39. typedef unsigned short int khronos_uint16_t;
  40. #ifdef _WIN64
  41. typedef signed long long int khronos_intptr_t;
  42. typedef signed long long int khronos_ssize_t;
  43. #else
  44. typedef signed long int khronos_intptr_t;
  45. typedef signed long int khronos_ssize_t;
  46. #endif
  47. #if defined(_MSC_VER) && !defined(__clang__)
  48. typedef signed __int64 khronos_int64_t;
  49. typedef unsigned __int64 khronos_uint64_t;
  50. #elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100)
  51. #include <stdint.h>
  52. typedef int64_t khronos_int64_t;
  53. typedef uint64_t khronos_uint64_t;
  54. #else
  55. typedef signed long long khronos_int64_t;
  56. typedef unsigned long long khronos_uint64_t;
  57. #endif
  58. #ifndef __gl_glcorearb_h_
  59. #define __gl_glcorearb_h_ 1
  60. #ifdef __cplusplus
  61. extern "C" {
  62. #endif
  63. /*
  64. ** Copyright 2013-2020 The Khronos Group Inc.
  65. ** SPDX-License-Identifier: MIT
  66. **
  67. ** This header is generated from the Khronos OpenGL / OpenGL ES XML
  68. ** API Registry. The current version of the Registry, generator scripts
  69. ** used to make the header, and the header can be found at
  70. ** https://github.com/KhronosGroup/OpenGL-Registry
  71. */
  72. #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
  73. #ifndef WIN32_LEAN_AND_MEAN
  74. #define WIN32_LEAN_AND_MEAN 1
  75. #endif
  76. #include <windows.h>
  77. #endif
  78. #ifndef APIENTRY
  79. #define APIENTRY
  80. #endif
  81. #ifndef APIENTRYP
  82. #define APIENTRYP APIENTRY *
  83. #endif
  84. #ifndef GLAPI
  85. #define GLAPI extern
  86. #endif
  87. /* glcorearb.h is for use with OpenGL core profile implementations.
  88. ** It should should be placed in the same directory as gl.h and
  89. ** included as <GL/glcorearb.h>.
  90. **
  91. ** glcorearb.h includes only APIs in the latest OpenGL core profile
  92. ** implementation together with APIs in newer ARB extensions which
  93. ** can be supported by the core profile. It does not, and never will
  94. ** include functionality removed from the core profile, such as
  95. ** fixed-function vertex and fragment processing.
  96. **
  97. ** Do not #include both <GL/glcorearb.h> and either of <GL/gl.h> or
  98. ** <GL/glext.h> in the same source file.
  99. */
  100. /* Generated C header for:
  101. * API: gl
  102. * Profile: core
  103. * Versions considered: .*
  104. * Versions emitted: .*
  105. * Default extensions included: glcore
  106. * Additional extensions included: _nomatch_^
  107. * Extensions removed: _nomatch_^
  108. */
  109. #ifndef GL_VERSION_1_0
  110. typedef void GLvoid;
  111. typedef unsigned int GLenum;
  112. typedef khronos_float_t GLfloat;
  113. typedef int GLint;
  114. typedef int GLsizei;
  115. typedef unsigned int GLbitfield;
  116. typedef double GLdouble;
  117. typedef unsigned int GLuint;
  118. typedef unsigned char GLboolean;
  119. typedef khronos_uint8_t GLubyte;
  120. #define GL_COLOR_BUFFER_BIT 0x00004000
  121. #define GL_FALSE 0
  122. #define GL_TRUE 1
  123. #define GL_TRIANGLES 0x0004
  124. #define GL_ONE 1
  125. #define GL_SRC_ALPHA 0x0302
  126. #define GL_ONE_MINUS_SRC_ALPHA 0x0303
  127. #define GL_FRONT_AND_BACK 0x0408
  128. #define GL_POLYGON_MODE 0x0B40
  129. #define GL_CULL_FACE 0x0B44
  130. #define GL_DEPTH_TEST 0x0B71
  131. #define GL_STENCIL_TEST 0x0B90
  132. #define GL_VIEWPORT 0x0BA2
  133. #define GL_BLEND 0x0BE2
  134. #define GL_SCISSOR_BOX 0x0C10
  135. #define GL_SCISSOR_TEST 0x0C11
  136. #define GL_UNPACK_ROW_LENGTH 0x0CF2
  137. #define GL_PACK_ALIGNMENT 0x0D05
  138. #define GL_TEXTURE_2D 0x0DE1
  139. #define GL_UNSIGNED_BYTE 0x1401
  140. #define GL_UNSIGNED_SHORT 0x1403
  141. #define GL_UNSIGNED_INT 0x1405
  142. #define GL_FLOAT 0x1406
  143. #define GL_RGBA 0x1908
  144. #define GL_FILL 0x1B02
  145. #define GL_VERSION 0x1F02
  146. #define GL_EXTENSIONS 0x1F03
  147. #define GL_LINEAR 0x2601
  148. #define GL_TEXTURE_MAG_FILTER 0x2800
  149. #define GL_TEXTURE_MIN_FILTER 0x2801
  150. typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
  151. typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
  152. typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
  153. typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
  154. typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
  155. typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
  156. typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
  157. typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
  158. typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
  159. typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
  160. typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
  161. typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
  162. typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
  163. typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
  164. #ifdef GL_GLEXT_PROTOTYPES
  165. GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode);
  166. GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
  167. GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
  168. GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
  169. GLAPI void APIENTRY glClear (GLbitfield mask);
  170. GLAPI void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
  171. GLAPI void APIENTRY glDisable (GLenum cap);
  172. GLAPI void APIENTRY glEnable (GLenum cap);
  173. GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param);
  174. GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
  175. GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *data);
  176. GLAPI const GLubyte *APIENTRY glGetString (GLenum name);
  177. GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap);
  178. GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
  179. #endif
  180. #endif /* GL_VERSION_1_0 */
  181. #ifndef GL_VERSION_1_1
  182. typedef khronos_float_t GLclampf;
  183. typedef double GLclampd;
  184. #define GL_TEXTURE_BINDING_2D 0x8069
  185. typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
  186. typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
  187. typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
  188. typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
  189. #ifdef GL_GLEXT_PROTOTYPES
  190. GLAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);
  191. GLAPI void APIENTRY glBindTexture (GLenum target, GLuint texture);
  192. GLAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
  193. GLAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures);
  194. #endif
  195. #endif /* GL_VERSION_1_1 */
  196. #ifndef GL_VERSION_1_3
  197. #define GL_TEXTURE0 0x84C0
  198. #define GL_ACTIVE_TEXTURE 0x84E0
  199. typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
  200. #ifdef GL_GLEXT_PROTOTYPES
  201. GLAPI void APIENTRY glActiveTexture (GLenum texture);
  202. #endif
  203. #endif /* GL_VERSION_1_3 */
  204. #ifndef GL_VERSION_1_4
  205. #define GL_BLEND_DST_RGB 0x80C8
  206. #define GL_BLEND_SRC_RGB 0x80C9
  207. #define GL_BLEND_DST_ALPHA 0x80CA
  208. #define GL_BLEND_SRC_ALPHA 0x80CB
  209. #define GL_FUNC_ADD 0x8006
  210. typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
  211. typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
  212. #ifdef GL_GLEXT_PROTOTYPES
  213. GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
  214. GLAPI void APIENTRY glBlendEquation (GLenum mode);
  215. #endif
  216. #endif /* GL_VERSION_1_4 */
  217. #ifndef GL_VERSION_1_5
  218. typedef khronos_ssize_t GLsizeiptr;
  219. typedef khronos_intptr_t GLintptr;
  220. #define GL_ARRAY_BUFFER 0x8892
  221. #define GL_ELEMENT_ARRAY_BUFFER 0x8893
  222. #define GL_ARRAY_BUFFER_BINDING 0x8894
  223. #define GL_STREAM_DRAW 0x88E0
  224. typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
  225. typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
  226. typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
  227. typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
  228. #ifdef GL_GLEXT_PROTOTYPES
  229. GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
  230. GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
  231. GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
  232. GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
  233. #endif
  234. #endif /* GL_VERSION_1_5 */
  235. #ifndef GL_VERSION_2_0
  236. typedef char GLchar;
  237. typedef khronos_int16_t GLshort;
  238. typedef khronos_int8_t GLbyte;
  239. typedef khronos_uint16_t GLushort;
  240. #define GL_BLEND_EQUATION_RGB 0x8009
  241. #define GL_BLEND_EQUATION_ALPHA 0x883D
  242. #define GL_FRAGMENT_SHADER 0x8B30
  243. #define GL_VERTEX_SHADER 0x8B31
  244. #define GL_COMPILE_STATUS 0x8B81
  245. #define GL_LINK_STATUS 0x8B82
  246. #define GL_INFO_LOG_LENGTH 0x8B84
  247. #define GL_CURRENT_PROGRAM 0x8B8D
  248. #define GL_UPPER_LEFT 0x8CA2
  249. typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
  250. typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
  251. typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
  252. typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
  253. typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
  254. typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
  255. typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
  256. typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
  257. typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
  258. typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
  259. typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
  260. typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
  261. typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
  262. typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
  263. typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
  264. typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
  265. typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
  266. typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
  267. typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
  268. typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  269. typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
  270. #ifdef GL_GLEXT_PROTOTYPES
  271. GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
  272. GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader);
  273. GLAPI void APIENTRY glCompileShader (GLuint shader);
  274. GLAPI GLuint APIENTRY glCreateProgram (void);
  275. GLAPI GLuint APIENTRY glCreateShader (GLenum type);
  276. GLAPI void APIENTRY glDeleteProgram (GLuint program);
  277. GLAPI void APIENTRY glDeleteShader (GLuint shader);
  278. GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader);
  279. GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index);
  280. GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
  281. GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
  282. GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
  283. GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
  284. GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
  285. GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
  286. GLAPI void APIENTRY glLinkProgram (GLuint program);
  287. GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
  288. GLAPI void APIENTRY glUseProgram (GLuint program);
  289. GLAPI void APIENTRY glUniform1i (GLint location, GLint v0);
  290. GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
  291. GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
  292. #endif
  293. #endif /* GL_VERSION_2_0 */
  294. #ifndef GL_VERSION_3_0
  295. typedef khronos_uint16_t GLhalf;
  296. #define GL_MAJOR_VERSION 0x821B
  297. #define GL_MINOR_VERSION 0x821C
  298. #define GL_NUM_EXTENSIONS 0x821D
  299. #define GL_FRAMEBUFFER_SRGB 0x8DB9
  300. #define GL_VERTEX_ARRAY_BINDING 0x85B5
  301. typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
  302. typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
  303. typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
  304. typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
  305. typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
  306. typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
  307. #ifdef GL_GLEXT_PROTOTYPES
  308. GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index);
  309. GLAPI void APIENTRY glBindVertexArray (GLuint array);
  310. GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
  311. GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
  312. #endif
  313. #endif /* GL_VERSION_3_0 */
  314. #ifndef GL_VERSION_3_1
  315. #define GL_VERSION_3_1 1
  316. #define GL_PRIMITIVE_RESTART 0x8F9D
  317. #endif /* GL_VERSION_3_1 */
  318. #ifndef GL_VERSION_3_2
  319. #define GL_VERSION_3_2 1
  320. typedef struct __GLsync *GLsync;
  321. typedef khronos_uint64_t GLuint64;
  322. typedef khronos_int64_t GLint64;
  323. typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
  324. typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
  325. #ifdef GL_GLEXT_PROTOTYPES
  326. GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
  327. #endif
  328. #endif /* GL_VERSION_3_2 */
  329. #ifndef GL_VERSION_3_3
  330. #define GL_VERSION_3_3 1
  331. #define GL_SAMPLER_BINDING 0x8919
  332. typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
  333. #ifdef GL_GLEXT_PROTOTYPES
  334. GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
  335. #endif
  336. #endif /* GL_VERSION_3_3 */
  337. #ifndef GL_VERSION_4_1
  338. typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
  339. typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
  340. #endif /* GL_VERSION_4_1 */
  341. #ifndef GL_VERSION_4_3
  342. typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
  343. #endif /* GL_VERSION_4_3 */
  344. #ifndef GL_VERSION_4_5
  345. #define GL_CLIP_ORIGIN 0x935C
  346. typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param);
  347. typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
  348. #endif /* GL_VERSION_4_5 */
  349. #ifndef GL_ARB_bindless_texture
  350. typedef khronos_uint64_t GLuint64EXT;
  351. #endif /* GL_ARB_bindless_texture */
  352. #ifndef GL_ARB_cl_event
  353. struct _cl_context;
  354. struct _cl_event;
  355. #endif /* GL_ARB_cl_event */
  356. #ifndef GL_ARB_clip_control
  357. #define GL_ARB_clip_control 1
  358. #endif /* GL_ARB_clip_control */
  359. #ifndef GL_ARB_debug_output
  360. typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
  361. #endif /* GL_ARB_debug_output */
  362. #ifndef GL_EXT_EGL_image_storage
  363. typedef void *GLeglImageOES;
  364. #endif /* GL_EXT_EGL_image_storage */
  365. #ifndef GL_EXT_direct_state_access
  366. typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params);
  367. typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params);
  368. typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params);
  369. typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
  370. typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param);
  371. #endif /* GL_EXT_direct_state_access */
  372. #ifndef GL_NV_draw_vulkan_image
  373. typedef void (APIENTRY *GLVULKANPROCNV)(void);
  374. #endif /* GL_NV_draw_vulkan_image */
  375. #ifndef GL_NV_gpu_shader5
  376. typedef khronos_int64_t GLint64EXT;
  377. #endif /* GL_NV_gpu_shader5 */
  378. #ifndef GL_NV_vertex_buffer_unified_memory
  379. typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
  380. #endif /* GL_NV_vertex_buffer_unified_memory */
  381. #ifdef __cplusplus
  382. }
  383. #endif
  384. #endif
  385. #ifndef GL3W_API
  386. #define GL3W_API
  387. #endif
  388. #ifndef __gl_h_
  389. #define __gl_h_
  390. #endif
  391. #ifdef __cplusplus
  392. extern "C" {
  393. #endif
  394. #define GL3W_OK 0
  395. #define GL3W_ERROR_INIT -1
  396. #define GL3W_ERROR_LIBRARY_OPEN -2
  397. #define GL3W_ERROR_OPENGL_VERSION -3
  398. typedef void (*GL3WglProc)(void);
  399. typedef GL3WglProc (*GL3WGetProcAddressProc)(const char *proc);
  400. /* gl3w api */
  401. GL3W_API int imgl3wInit(void);
  402. GL3W_API int imgl3wInit2(GL3WGetProcAddressProc proc);
  403. GL3W_API int imgl3wIsSupported(int major, int minor);
  404. GL3W_API GL3WglProc imgl3wGetProcAddress(const char *proc);
  405. /* gl3w internal state */
  406. union GL3WProcs {
  407. GL3WglProc ptr[52];
  408. struct {
  409. PFNGLACTIVETEXTUREPROC ActiveTexture;
  410. PFNGLATTACHSHADERPROC AttachShader;
  411. PFNGLBINDBUFFERPROC BindBuffer;
  412. PFNGLBINDSAMPLERPROC BindSampler;
  413. PFNGLBINDTEXTUREPROC BindTexture;
  414. PFNGLBINDVERTEXARRAYPROC BindVertexArray;
  415. PFNGLBLENDEQUATIONPROC BlendEquation;
  416. PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate;
  417. PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate;
  418. PFNGLBUFFERDATAPROC BufferData;
  419. PFNGLCLEARPROC Clear;
  420. PFNGLCLEARCOLORPROC ClearColor;
  421. PFNGLCOMPILESHADERPROC CompileShader;
  422. PFNGLCREATEPROGRAMPROC CreateProgram;
  423. PFNGLCREATESHADERPROC CreateShader;
  424. PFNGLDELETEBUFFERSPROC DeleteBuffers;
  425. PFNGLDELETEPROGRAMPROC DeleteProgram;
  426. PFNGLDELETESHADERPROC DeleteShader;
  427. PFNGLDELETETEXTURESPROC DeleteTextures;
  428. PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays;
  429. PFNGLDETACHSHADERPROC DetachShader;
  430. PFNGLDISABLEPROC Disable;
  431. PFNGLDRAWELEMENTSPROC DrawElements;
  432. PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex;
  433. PFNGLENABLEPROC Enable;
  434. PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray;
  435. PFNGLGENBUFFERSPROC GenBuffers;
  436. PFNGLGENTEXTURESPROC GenTextures;
  437. PFNGLGENVERTEXARRAYSPROC GenVertexArrays;
  438. PFNGLGETATTRIBLOCATIONPROC GetAttribLocation;
  439. PFNGLGETINTEGERVPROC GetIntegerv;
  440. PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog;
  441. PFNGLGETPROGRAMIVPROC GetProgramiv;
  442. PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog;
  443. PFNGLGETSHADERIVPROC GetShaderiv;
  444. PFNGLGETSTRINGPROC GetString;
  445. PFNGLGETSTRINGIPROC GetStringi;
  446. PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation;
  447. PFNGLISENABLEDPROC IsEnabled;
  448. PFNGLLINKPROGRAMPROC LinkProgram;
  449. PFNGLPIXELSTOREIPROC PixelStorei;
  450. PFNGLPOLYGONMODEPROC PolygonMode;
  451. PFNGLREADPIXELSPROC ReadPixels;
  452. PFNGLSCISSORPROC Scissor;
  453. PFNGLSHADERSOURCEPROC ShaderSource;
  454. PFNGLTEXIMAGE2DPROC TexImage2D;
  455. PFNGLTEXPARAMETERIPROC TexParameteri;
  456. PFNGLUNIFORM1IPROC Uniform1i;
  457. PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv;
  458. PFNGLUSEPROGRAMPROC UseProgram;
  459. PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer;
  460. PFNGLVIEWPORTPROC Viewport;
  461. } gl;
  462. };
  463. GL3W_API extern union GL3WProcs imgl3wProcs;
  464. /* OpenGL functions */
  465. #define glActiveTexture imgl3wProcs.gl.ActiveTexture
  466. #define glAttachShader imgl3wProcs.gl.AttachShader
  467. #define glBindBuffer imgl3wProcs.gl.BindBuffer
  468. #define glBindSampler imgl3wProcs.gl.BindSampler
  469. #define glBindTexture imgl3wProcs.gl.BindTexture
  470. #define glBindVertexArray imgl3wProcs.gl.BindVertexArray
  471. #define glBlendEquation imgl3wProcs.gl.BlendEquation
  472. #define glBlendEquationSeparate imgl3wProcs.gl.BlendEquationSeparate
  473. #define glBlendFuncSeparate imgl3wProcs.gl.BlendFuncSeparate
  474. #define glBufferData imgl3wProcs.gl.BufferData
  475. #define glClear imgl3wProcs.gl.Clear
  476. #define glClearColor imgl3wProcs.gl.ClearColor
  477. #define glCompileShader imgl3wProcs.gl.CompileShader
  478. #define glCreateProgram imgl3wProcs.gl.CreateProgram
  479. #define glCreateShader imgl3wProcs.gl.CreateShader
  480. #define glDeleteBuffers imgl3wProcs.gl.DeleteBuffers
  481. #define glDeleteProgram imgl3wProcs.gl.DeleteProgram
  482. #define glDeleteShader imgl3wProcs.gl.DeleteShader
  483. #define glDeleteTextures imgl3wProcs.gl.DeleteTextures
  484. #define glDeleteVertexArrays imgl3wProcs.gl.DeleteVertexArrays
  485. #define glDetachShader imgl3wProcs.gl.DetachShader
  486. #define glDisable imgl3wProcs.gl.Disable
  487. #define glDrawElements imgl3wProcs.gl.DrawElements
  488. #define glDrawElementsBaseVertex imgl3wProcs.gl.DrawElementsBaseVertex
  489. #define glEnable imgl3wProcs.gl.Enable
  490. #define glEnableVertexAttribArray imgl3wProcs.gl.EnableVertexAttribArray
  491. #define glGenBuffers imgl3wProcs.gl.GenBuffers
  492. #define glGenTextures imgl3wProcs.gl.GenTextures
  493. #define glGenVertexArrays imgl3wProcs.gl.GenVertexArrays
  494. #define glGetAttribLocation imgl3wProcs.gl.GetAttribLocation
  495. #define glGetIntegerv imgl3wProcs.gl.GetIntegerv
  496. #define glGetProgramInfoLog imgl3wProcs.gl.GetProgramInfoLog
  497. #define glGetProgramiv imgl3wProcs.gl.GetProgramiv
  498. #define glGetShaderInfoLog imgl3wProcs.gl.GetShaderInfoLog
  499. #define glGetShaderiv imgl3wProcs.gl.GetShaderiv
  500. #define glGetString imgl3wProcs.gl.GetString
  501. #define glGetStringi imgl3wProcs.gl.GetStringi
  502. #define glGetUniformLocation imgl3wProcs.gl.GetUniformLocation
  503. #define glIsEnabled imgl3wProcs.gl.IsEnabled
  504. #define glLinkProgram imgl3wProcs.gl.LinkProgram
  505. #define glPixelStorei imgl3wProcs.gl.PixelStorei
  506. #define glPolygonMode imgl3wProcs.gl.PolygonMode
  507. #define glReadPixels imgl3wProcs.gl.ReadPixels
  508. #define glScissor imgl3wProcs.gl.Scissor
  509. #define glShaderSource imgl3wProcs.gl.ShaderSource
  510. #define glTexImage2D imgl3wProcs.gl.TexImage2D
  511. #define glTexParameteri imgl3wProcs.gl.TexParameteri
  512. #define glUniform1i imgl3wProcs.gl.Uniform1i
  513. #define glUniformMatrix4fv imgl3wProcs.gl.UniformMatrix4fv
  514. #define glUseProgram imgl3wProcs.gl.UseProgram
  515. #define glVertexAttribPointer imgl3wProcs.gl.VertexAttribPointer
  516. #define glViewport imgl3wProcs.gl.Viewport
  517. #ifdef __cplusplus
  518. }
  519. #endif
  520. #endif
  521. #ifdef IMGL3W_IMPL
  522. #ifdef __cplusplus
  523. extern "C" {
  524. #endif
  525. #include <stdlib.h>
  526. #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
  527. #if defined(_WIN32)
  528. #ifndef WIN32_LEAN_AND_MEAN
  529. #define WIN32_LEAN_AND_MEAN 1
  530. #endif
  531. #include <windows.h>
  532. static HMODULE libgl;
  533. typedef PROC(__stdcall* GL3WglGetProcAddr)(LPCSTR);
  534. static GL3WglGetProcAddr wgl_get_proc_address;
  535. static int open_libgl(void)
  536. {
  537. libgl = LoadLibraryA("opengl32.dll");
  538. if (!libgl)
  539. return GL3W_ERROR_LIBRARY_OPEN;
  540. wgl_get_proc_address = (GL3WglGetProcAddr)GetProcAddress(libgl, "wglGetProcAddress");
  541. return GL3W_OK;
  542. }
  543. static void close_libgl(void) { FreeLibrary(libgl); }
  544. static GL3WglProc get_proc(const char *proc)
  545. {
  546. GL3WglProc res;
  547. res = (GL3WglProc)wgl_get_proc_address(proc);
  548. if (!res)
  549. res = (GL3WglProc)GetProcAddress(libgl, proc);
  550. return res;
  551. }
  552. #elif defined(__APPLE__)
  553. #include <dlfcn.h>
  554. static void *libgl;
  555. static int open_libgl(void)
  556. {
  557. libgl = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY | RTLD_LOCAL);
  558. if (!libgl)
  559. return GL3W_ERROR_LIBRARY_OPEN;
  560. return GL3W_OK;
  561. }
  562. static void close_libgl(void) { dlclose(libgl); }
  563. static GL3WglProc get_proc(const char *proc)
  564. {
  565. GL3WglProc res;
  566. *(void **)(&res) = dlsym(libgl, proc);
  567. return res;
  568. }
  569. #else
  570. #include <dlfcn.h>
  571. static void *libgl;
  572. static GL3WglProc (*glx_get_proc_address)(const GLubyte *);
  573. static int open_libgl(void)
  574. {
  575. libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_LOCAL);
  576. if (!libgl)
  577. return GL3W_ERROR_LIBRARY_OPEN;
  578. *(void **)(&glx_get_proc_address) = dlsym(libgl, "glXGetProcAddressARB");
  579. return GL3W_OK;
  580. }
  581. static void close_libgl(void) { dlclose(libgl); }
  582. static GL3WglProc get_proc(const char *proc)
  583. {
  584. GL3WglProc res;
  585. res = glx_get_proc_address((const GLubyte *)proc);
  586. if (!res)
  587. *(void **)(&res) = dlsym(libgl, proc);
  588. return res;
  589. }
  590. #endif
  591. static struct { int major, minor; } version;
  592. static int parse_version(void)
  593. {
  594. if (!glGetIntegerv)
  595. return GL3W_ERROR_INIT;
  596. glGetIntegerv(GL_MAJOR_VERSION, &version.major);
  597. glGetIntegerv(GL_MINOR_VERSION, &version.minor);
  598. if (version.major < 3)
  599. return GL3W_ERROR_OPENGL_VERSION;
  600. return GL3W_OK;
  601. }
  602. static void load_procs(GL3WGetProcAddressProc proc);
  603. int imgl3wInit(void)
  604. {
  605. int res = open_libgl();
  606. if (res)
  607. return res;
  608. atexit(close_libgl);
  609. return imgl3wInit2(get_proc);
  610. }
  611. int imgl3wInit2(GL3WGetProcAddressProc proc)
  612. {
  613. load_procs(proc);
  614. return parse_version();
  615. }
  616. int imgl3wIsSupported(int major, int minor)
  617. {
  618. if (major < 3)
  619. return 0;
  620. if (version.major == major)
  621. return version.minor >= minor;
  622. return version.major >= major;
  623. }
  624. GL3WglProc imgl3wGetProcAddress(const char *proc) { return get_proc(proc); }
  625. static const char *proc_names[] = {
  626. "glActiveTexture",
  627. "glAttachShader",
  628. "glBindBuffer",
  629. "glBindSampler",
  630. "glBindTexture",
  631. "glBindVertexArray",
  632. "glBlendEquation",
  633. "glBlendEquationSeparate",
  634. "glBlendFuncSeparate",
  635. "glBufferData",
  636. "glClear",
  637. "glClearColor",
  638. "glCompileShader",
  639. "glCreateProgram",
  640. "glCreateShader",
  641. "glDeleteBuffers",
  642. "glDeleteProgram",
  643. "glDeleteShader",
  644. "glDeleteTextures",
  645. "glDeleteVertexArrays",
  646. "glDetachShader",
  647. "glDisable",
  648. "glDrawElements",
  649. "glDrawElementsBaseVertex",
  650. "glEnable",
  651. "glEnableVertexAttribArray",
  652. "glGenBuffers",
  653. "glGenTextures",
  654. "glGenVertexArrays",
  655. "glGetAttribLocation",
  656. "glGetIntegerv",
  657. "glGetProgramInfoLog",
  658. "glGetProgramiv",
  659. "glGetShaderInfoLog",
  660. "glGetShaderiv",
  661. "glGetString",
  662. "glGetStringi",
  663. "glGetUniformLocation",
  664. "glIsEnabled",
  665. "glLinkProgram",
  666. "glPixelStorei",
  667. "glPolygonMode",
  668. "glReadPixels",
  669. "glScissor",
  670. "glShaderSource",
  671. "glTexImage2D",
  672. "glTexParameteri",
  673. "glUniform1i",
  674. "glUniformMatrix4fv",
  675. "glUseProgram",
  676. "glVertexAttribPointer",
  677. "glViewport",
  678. };
  679. GL3W_API union GL3WProcs imgl3wProcs;
  680. static void load_procs(GL3WGetProcAddressProc proc)
  681. {
  682. size_t i;
  683. for (i = 0; i < ARRAY_SIZE(proc_names); i++)
  684. imgl3wProcs.ptr[i] = proc(proc_names[i]);
  685. }
  686. #ifdef __cplusplus
  687. }
  688. #endif
  689. #endif