From 13687bee1be2240e045fd4dc34d2773e5fce7417 Mon Sep 17 00:00:00 2001 From: Victor Vobis Date: Thu, 26 Feb 2026 14:34:55 +0100 Subject: [PATCH] starting rust wrapping layer --- .gitignore | 3 +- Cargo.lock | 1835 --- Cargo.toml | 17 - build.rs | 41 - .env => gl_rust/.env | 0 gl_rust/Cargo.lock | 235 + gl_rust/Cargo.toml | 11 + .../assets}/models/small_house/materials.mtl | 0 .../assets}/models/small_house/model.obj | 0 .../assets}/models/triangle/model.obj | 0 gl_rust/build.rs | 15 + gl_rust/src/app/app.rs | 0 gl_rust/src/app/renderer.rs | 85 + gl_rust/src/gl_c.rs | 10271 ++++++++++++++++ gl_rust/src/glc.rs | 8192 ++++++++++++ {src => gl_rust/src}/lib.rs | 3 +- {src => gl_rust/src}/main.rs | 2 +- {src => gl_rust/src}/models/material.rs | 0 {src => gl_rust/src}/models/mesh.rs | 1 - {src => gl_rust/src}/models/model.rs | 0 {src => gl_rust/src}/models/scene.rs | 0 {src => gl_rust/src}/models/vertex.rs | 0 {src => gl_rust/src}/shaders/shaders.rs | 0 glc/lib/include/KHR/khrplatform.h | 311 + glc/lib/include/glad/glad.h | 3694 ++++++ glc/lib/libglc.a | Bin 0 -> 151590 bytes glc/nob | Bin 0 -> 55952 bytes glc/nob.c | 79 + glc/nob.h | 3156 +++++ glc/nob.old | Bin 0 -> 55952 bytes glc/src/bindings.h | 1 + glc/src/gl/buffers.c | 52 + glc/src/gl/clear.c | 6 + glc/src/gl/error.c | 25 + glc/src/gl/gpu_program.c | 62 + glc/src/glad.c | 1833 +++ glc/src/glc.h | 5 + glc/src/glc_api.h | 23 + glc/src/glc_internal.h | 31 + glc/src/glc_types.h | 52 + glc/src/platform/io/poll_events.c | 6 + glc/src/platform/io/process_input.c | 6 + glc/src/platform/window/swap_buffer.c | 5 + glc/src/platform/window/window.c | 38 + glrs/Cargo.lock | 245 + glrs/Cargo.toml | 11 + glrs/build.rs | 41 + glrs/src/glrs.rs | 2 + glrs/src/lib.rs | 6 + src/app/app.rs | 196 - src/app/gl.rs | 53 - src/app/renderer.rs | 208 - 52 files changed, 28504 insertions(+), 2354 deletions(-) delete mode 100644 Cargo.lock delete mode 100644 Cargo.toml delete mode 100644 build.rs rename .env => gl_rust/.env (100%) create mode 100644 gl_rust/Cargo.lock create mode 100644 gl_rust/Cargo.toml rename {assets => gl_rust/assets}/models/small_house/materials.mtl (100%) rename {assets => gl_rust/assets}/models/small_house/model.obj (100%) rename {assets => gl_rust/assets}/models/triangle/model.obj (100%) create mode 100644 gl_rust/build.rs create mode 100644 gl_rust/src/app/app.rs create mode 100644 gl_rust/src/app/renderer.rs create mode 100644 gl_rust/src/gl_c.rs create mode 100644 gl_rust/src/glc.rs rename {src => gl_rust/src}/lib.rs (95%) rename {src => gl_rust/src}/main.rs (94%) rename {src => gl_rust/src}/models/material.rs (100%) rename {src => gl_rust/src}/models/mesh.rs (99%) rename {src => gl_rust/src}/models/model.rs (100%) rename {src => gl_rust/src}/models/scene.rs (100%) rename {src => gl_rust/src}/models/vertex.rs (100%) rename {src => gl_rust/src}/shaders/shaders.rs (100%) create mode 100644 glc/lib/include/KHR/khrplatform.h create mode 100644 glc/lib/include/glad/glad.h create mode 100644 glc/lib/libglc.a create mode 100755 glc/nob create mode 100644 glc/nob.c create mode 100644 glc/nob.h create mode 100755 glc/nob.old create mode 100644 glc/src/bindings.h create mode 100644 glc/src/gl/buffers.c create mode 100644 glc/src/gl/clear.c create mode 100644 glc/src/gl/error.c create mode 100644 glc/src/gl/gpu_program.c create mode 100644 glc/src/glad.c create mode 100644 glc/src/glc.h create mode 100644 glc/src/glc_api.h create mode 100644 glc/src/glc_internal.h create mode 100644 glc/src/glc_types.h create mode 100644 glc/src/platform/io/poll_events.c create mode 100644 glc/src/platform/io/process_input.c create mode 100644 glc/src/platform/window/swap_buffer.c create mode 100644 glc/src/platform/window/window.c create mode 100644 glrs/Cargo.lock create mode 100644 glrs/Cargo.toml create mode 100644 glrs/build.rs create mode 100644 glrs/src/glrs.rs create mode 100644 glrs/src/lib.rs delete mode 100644 src/app/app.rs delete mode 100644 src/app/gl.rs delete mode 100644 src/app/renderer.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..9f1e678 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/target +*/target +*/out diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 901c142..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,1835 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "ab_glyph" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" - -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "getrandom", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "android-activity" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" -dependencies = [ - "android-properties", - "bitflags 2.10.0", - "cc", - "cesu8", - "jni", - "jni-sys", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - -[[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" - -[[package]] -name = "block2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" -dependencies = [ - "objc2 0.5.2", -] - -[[package]] -name = "bumpalo" -version = "3.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" - -[[package]] -name = "bytemuck" -version = "1.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" - -[[package]] -name = "bytes" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" - -[[package]] -name = "calloop" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" -dependencies = [ - "bitflags 2.10.0", - "log", - "polling", - "rustix 0.38.44", - "slab", - "thiserror", -] - -[[package]] -name = "calloop-wayland-source" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" -dependencies = [ - "calloop", - "rustix 0.38.44", - "wayland-backend", - "wayland-client", -] - -[[package]] -name = "cc" -version = "1.2.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" -dependencies = [ - "find-msvc-tools", - "jobserver", - "libc", - "shlex", -] - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "cgl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] - -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "cursor-icon" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dispatch2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" -dependencies = [ - "bitflags 2.10.0", - "objc2 0.6.3", -] - -[[package]] -name = "dlib" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" -dependencies = [ - "libloading", -] - -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "dpi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41" - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "gethostname" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" -dependencies = [ - "rustix 1.1.3", - "windows-link", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasip2", -] - -[[package]] -name = "gl" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a94edab108827d67608095e269cf862e60d920f144a5026d3dbcfd8b877fb404" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs", -] - -[[package]] -name = "glutin" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" -dependencies = [ - "bitflags 2.10.0", - "cfg_aliases", - "cgl", - "dispatch2", - "glutin_egl_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "libloading", - "objc2 0.6.3", - "objc2-app-kit 0.3.2", - "objc2-core-foundation", - "objc2-foundation 0.3.2", - "once_cell", - "raw-window-handle", - "wayland-sys", - "windows-sys 0.52.0", - "x11-dl", -] - -[[package]] -name = "glutin-winit" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" -dependencies = [ - "cfg_aliases", - "glutin", - "raw-window-handle", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" -dependencies = [ - "gl_generator", - "windows-sys 0.52.0", -] - -[[package]] -name = "glutin_glx_sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" -dependencies = [ - "gl_generator", - "x11-dl", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "indexmap" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" -dependencies = [ - "getrandom", - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "libc" -version = "0.2.180" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" - -[[package]] -name = "libloading" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" -dependencies = [ - "cfg-if", - "windows-link", -] - -[[package]] -name = "libredox" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" -dependencies = [ - "bitflags 2.10.0", - "libc", - "redox_syscall 0.7.0", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "memmap2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" -dependencies = [ - "libc", -] - -[[package]] -name = "ndk" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" -dependencies = [ - "bitflags 2.10.0", - "jni-sys", - "log", - "ndk-sys", - "num_enum", - "raw-window-handle", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.6.0+11769913" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "num_enum" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" -dependencies = [ - "num_enum_derive", - "rustversion", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" - -[[package]] -name = "objc2" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" -dependencies = [ - "objc-sys", - "objc2-encode", -] - -[[package]] -name = "objc2" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-app-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" -dependencies = [ - "bitflags 2.10.0", - "block2", - "libc", - "objc2 0.5.2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation 0.2.2", - "objc2-quartz-core", -] - -[[package]] -name = "objc2-app-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" -dependencies = [ - "bitflags 2.10.0", - "objc2 0.6.3", - "objc2-core-foundation", - "objc2-foundation 0.3.2", -] - -[[package]] -name = "objc2-cloud-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-contacts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" -dependencies = [ - "bitflags 2.10.0", - "dispatch2", - "objc2 0.6.3", -] - -[[package]] -name = "objc2-core-image" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-metal", -] - -[[package]] -name = "objc2-core-location" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-contacts", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" -dependencies = [ - "bitflags 2.10.0", - "block2", - "dispatch", - "libc", - "objc2 0.5.2", -] - -[[package]] -name = "objc2-foundation" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" -dependencies = [ - "bitflags 2.10.0", - "objc2 0.6.3", - "objc2-core-foundation", -] - -[[package]] -name = "objc2-link-presentation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-metal" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-metal", -] - -[[package]] -name = "objc2-symbols" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" -dependencies = [ - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2 0.5.2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation 0.2.2", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.10.0", - "block2", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "orbclient" -version = "0.3.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ad2c6bae700b7aa5d1cc30c59bdd3a1c180b09dbaea51e2ae2b8e1cf211fdd" -dependencies = [ - "libc", - "libredox", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" -dependencies = [ - "ttf-parser", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "polling" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix 1.1.3", - "windows-sys 0.61.2", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.105" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proj" -version = "0.1.0" -dependencies = [ - "cfg_aliases", - "dotenvy", - "gl", - "gl_generator", - "glutin", - "glutin-winit", - "raw-window-handle", - "winit", -] - -[[package]] -name = "quick-xml" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "raw-window-handle" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" -dependencies = [ - "bitflags 2.10.0", -] - -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.10.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustix" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" -dependencies = [ - "bitflags 2.10.0", - "errno", - "libc", - "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustversion" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "sctk-adwaita" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" -dependencies = [ - "ab_glyph", - "log", - "memmap2", - "smithay-client-toolkit", - "tiny-skia", -] - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "slab" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "smithay-client-toolkit" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" -dependencies = [ - "bitflags 2.10.0", - "calloop", - "calloop-wayland-source", - "cursor-icon", - "libc", - "log", - "memmap2", - "rustix 0.38.44", - "thiserror", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", - "wayland-scanner", - "xkeysym", -] - -[[package]] -name = "smol_str" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" -dependencies = [ - "serde", -] - -[[package]] -name = "strict-num" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" - -[[package]] -name = "syn" -version = "2.0.114" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tiny-skia" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "log", - "tiny-skia-path", -] - -[[package]] -name = "tiny-skia-path" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - -[[package]] -name = "toml_datetime" -version = "0.7.5+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.23.10+spec-1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" -dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.6+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" -dependencies = [ - "winnow", -] - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" - -[[package]] -name = "ttf-parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" - -[[package]] -name = "unicode-ident" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wayland-backend" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" -dependencies = [ - "cc", - "downcast-rs", - "rustix 1.1.3", - "scoped-tls", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" -dependencies = [ - "bitflags 2.10.0", - "rustix 1.1.3", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-csd-frame" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" -dependencies = [ - "bitflags 2.10.0", - "cursor-icon", - "wayland-backend", -] - -[[package]] -name = "wayland-cursor" -version = "0.31.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" -dependencies = [ - "rustix 1.1.3", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-protocols" -version = "0.32.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" -dependencies = [ - "bitflags 2.10.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-plasma" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" -dependencies = [ - "bitflags 2.10.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" -dependencies = [ - "bitflags 2.10.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" -dependencies = [ - "proc-macro2", - "quick-xml", - "quote", -] - -[[package]] -name = "wayland-sys" -version = "0.31.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" -dependencies = [ - "dlib", - "log", - "once_cell", - "pkg-config", -] - -[[package]] -name = "web-sys" -version = "0.3.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "winit" -version = "0.30.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" -dependencies = [ - "ahash", - "android-activity", - "atomic-waker", - "bitflags 2.10.0", - "block2", - "bytemuck", - "calloop", - "cfg_aliases", - "concurrent-queue", - "core-foundation", - "core-graphics", - "cursor-icon", - "dpi", - "js-sys", - "libc", - "memmap2", - "ndk", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", - "objc2-ui-kit", - "orbclient", - "percent-encoding", - "pin-project", - "raw-window-handle", - "redox_syscall 0.4.1", - "rustix 0.38.44", - "sctk-adwaita", - "smithay-client-toolkit", - "smol_str", - "tracing", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", - "web-sys", - "web-time", - "windows-sys 0.52.0", - "x11-dl", - "x11rb", - "xkbcommon-dl", -] - -[[package]] -name = "winnow" -version = "0.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading", - "once_cell", - "rustix 1.1.3", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" - -[[package]] -name = "xcursor" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" - -[[package]] -name = "xkbcommon-dl" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" -dependencies = [ - "bitflags 2.10.0", - "dlib", - "log", - "once_cell", - "xkeysym", -] - -[[package]] -name = "xkeysym" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" - -[[package]] -name = "xml-rs" -version = "0.8.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" - -[[package]] -name = "zerocopy" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index 40da7db..0000000 --- a/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "proj" -version = "0.1.0" -edition = "2024" - -[dependencies] -dotenvy = "0.15.7" -gl = "0.14.0" -glutin = "0.32.3" -glutin-winit = "0.5.0" -raw-window-handle = "0.6.2" -winit = "0.30.12" - -[build-dependencies] -dotenvy = "0.15.7" -gl_generator = "0.14" -cfg_aliases = "0.2.1" diff --git a/build.rs b/build.rs deleted file mode 100644 index e585832..0000000 --- a/build.rs +++ /dev/null @@ -1,41 +0,0 @@ -use std::env; -use std::fs::File; -use std::path::PathBuf; - -use cfg_aliases::cfg_aliases; -use gl_generator::{Api, Fallbacks, Profile, Registry, StructGenerator}; - -fn main() { - // XXX this is taken from glutin/build.rs. - dotenvy::dotenv().ok(); - - // Setup alias to reduce `cfg` boilerplate. - cfg_aliases! { - // Systems. - android_platform: { target_os = "android" }, - wasm_platform: { target_family = "wasm" }, - macos_platform: { target_os = "macos" }, - ios_platform: { target_os = "ios" }, - apple: { any(ios_platform, macos_platform) }, - free_unix: { all(unix, not(apple), not(android_platform)) }, - - // Native displays. - x11_platform: { all(feature = "x11", free_unix, not(wasm_platform)) }, - wayland_platform: { all(feature = "wayland", free_unix, not(wasm_platform)) }, - - // Backends. - egl_backend: { all(feature = "egl", any(windows, unix), not(apple), not(wasm_platform)) }, - glx_backend: { all(feature = "glx", x11_platform, not(wasm_platform)) }, - wgl_backend: { all(feature = "wgl", windows, not(wasm_platform)) }, - cgl_backend: { all(macos_platform, not(wasm_platform)) }, - } - - let dest = PathBuf::from(&env::var("OUT_DIR").unwrap()); - - println!("cargo:rerun-if-changed=build.rs"); - - let mut file = File::create(dest.join("gl_bindings.rs")).unwrap(); - Registry::new(Api::Gles2, (3, 0), Profile::Core, Fallbacks::All, []) - .write_bindings(StructGenerator, &mut file) - .unwrap(); -} diff --git a/.env b/gl_rust/.env similarity index 100% rename from .env rename to gl_rust/.env diff --git a/gl_rust/Cargo.lock b/gl_rust/Cargo.lock new file mode 100644 index 0000000..12bbcba --- /dev/null +++ b/gl_rust/Cargo.lock @@ -0,0 +1,235 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", +] + +[[package]] +name = "bitflags" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "libc" +version = "0.2.182" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proj" +version = "0.1.0" +dependencies = [ + "bindgen", + "dotenvy", +] + +[[package]] +name = "quote" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" diff --git a/gl_rust/Cargo.toml b/gl_rust/Cargo.toml new file mode 100644 index 0000000..14f6a75 --- /dev/null +++ b/gl_rust/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "proj" +version = "0.1.0" +edition = "2024" + +[dependencies] +dotenvy = "0.15.7" + +[build-dependencies] +dotenvy = "0.15.7" +bindgen = "0.72.1" diff --git a/assets/models/small_house/materials.mtl b/gl_rust/assets/models/small_house/materials.mtl similarity index 100% rename from assets/models/small_house/materials.mtl rename to gl_rust/assets/models/small_house/materials.mtl diff --git a/assets/models/small_house/model.obj b/gl_rust/assets/models/small_house/model.obj similarity index 100% rename from assets/models/small_house/model.obj rename to gl_rust/assets/models/small_house/model.obj diff --git a/assets/models/triangle/model.obj b/gl_rust/assets/models/triangle/model.obj similarity index 100% rename from assets/models/triangle/model.obj rename to gl_rust/assets/models/triangle/model.obj diff --git a/gl_rust/build.rs b/gl_rust/build.rs new file mode 100644 index 0000000..920b3a8 --- /dev/null +++ b/gl_rust/build.rs @@ -0,0 +1,15 @@ +use bindgen::Builder; + +fn main() { + // XXX this is taken from glutin/build.rs. + dotenvy::dotenv().ok(); + + let bindings_header = "../glc/src/glc_api.h"; + + let bindings = Builder::default().header(bindings_header).generate().unwrap(); + + bindings.write_to_file("./src/glc.rs").unwrap(); + + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed={bindings_header}"); +} diff --git a/gl_rust/src/app/app.rs b/gl_rust/src/app/app.rs new file mode 100644 index 0000000..e69de29 diff --git a/gl_rust/src/app/renderer.rs b/gl_rust/src/app/renderer.rs new file mode 100644 index 0000000..d9ba769 --- /dev/null +++ b/gl_rust/src/app/renderer.rs @@ -0,0 +1,85 @@ +use crate::models::{self, Model, ModelData, RenderObject, Scene, ShaderSource}; +use std::collections::HashMap; +use std::ffi::{ CStr, CString }; +use crate::glc; + +pub struct Renderer { + shaders: HashMap, + scenes: HashMap +} + +impl Renderer { + pub fn new() -> Self { + Self { + shaders: HashMap::new(), + scenes: HashMap::new() + } + } + + fn compile_shader(shader_kind: glc::GpuShaderType, source: &[i8]) -> glc::GpuShaderHandle { + unsafe { + let shader = glc::gpu_shader_compile(source.as_ptr(), shader_kind); + shader + } + } + + pub fn create_shader(&self, shader_src: &ShaderSource) -> glc::GpuProgram { + unsafe { + program + } + } + + pub fn add_shader(&mut self, name: &str, shader: gl::types::GLuint) { + if let None = self.shaders.get(name) { + self.shaders.insert(name.to_string(), shader); + } + } + + pub fn get_shader(&self, name: &str) -> Option<&gl::types::GLuint> { + self.shaders.get(name) + } + + pub fn remove_shader(&mut self, name: &str) { + self.shaders.remove(name); + } + + pub fn resize(&self, width: i32, height: i32) { + unsafe { + self.gl.Viewport(0, 0, width, height); + } + } + + pub fn draw_object(&self, obj: &RenderObject, shader: glc::GpuShaderHandle) { + unsafe { + + self.UseProgram(shader); + + self.BindBuffer(gl::ARRAY_BUFFER, obj.vbo); + self.BindVertexArray(obj.vao); + + self.DrawArrays(gl::TRIANGLES, 0, obj.vertex_count); + } + } + + pub fn render(&self, current_scene: &String) { + unsafe { + glc::gpu_clear(1.0, 1.0, 1.0, 0.9); + } + + if let Some(scene) = self.scenes.get(current_scene) { + for model in scene.models { + self.draw_object(obj, *shader); + } + } else { + eprintln!("Unknown Scene Requested: {}", current_scene); + } + } +} + +impl Drop for Renderer { + fn drop(&mut self) { + unsafe { + self.shaders.values().for_each(|shader| glc::gpu_program_destroy(shader)); + } + } +} diff --git a/gl_rust/src/gl_c.rs b/gl_rust/src/gl_c.rs new file mode 100644 index 0000000..b874eae --- /dev/null +++ b/gl_rust/src/gl_c.rs @@ -0,0 +1,10271 @@ +/* automatically generated by rust-bindgen 0.72.1 */ + +#[repr(C)] +#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct __BindgenBitfieldUnit { + storage: Storage, +} +impl __BindgenBitfieldUnit { + #[inline] + pub const fn new(storage: Storage) -> Self { + Self { storage } + } +} +impl __BindgenBitfieldUnit +where + Storage: AsRef<[u8]> + AsMut<[u8]>, +{ + #[inline] + fn extract_bit(byte: u8, index: usize) -> bool { + let bit_index = if cfg!(target_endian = "big") { + 7 - (index % 8) + } else { + index % 8 + }; + let mask = 1 << bit_index; + byte & mask == mask + } + #[inline] + pub fn get_bit(&self, index: usize) -> bool { + debug_assert!(index / 8 < self.storage.as_ref().len()); + let byte_index = index / 8; + let byte = self.storage.as_ref()[byte_index]; + Self::extract_bit(byte, index) + } + #[inline] + pub unsafe fn raw_get_bit(this: *const Self, index: usize) -> bool { + debug_assert!(index / 8 < core::mem::size_of::()); + let byte_index = index / 8; + let byte = unsafe { + *(core::ptr::addr_of!((*this).storage) as *const u8).offset(byte_index as isize) + }; + Self::extract_bit(byte, index) + } + #[inline] + fn change_bit(byte: u8, index: usize, val: bool) -> u8 { + let bit_index = if cfg!(target_endian = "big") { + 7 - (index % 8) + } else { + index % 8 + }; + let mask = 1 << bit_index; + if val { byte | mask } else { byte & !mask } + } + #[inline] + pub fn set_bit(&mut self, index: usize, val: bool) { + debug_assert!(index / 8 < self.storage.as_ref().len()); + let byte_index = index / 8; + let byte = &mut self.storage.as_mut()[byte_index]; + *byte = Self::change_bit(*byte, index, val); + } + #[inline] + pub unsafe fn raw_set_bit(this: *mut Self, index: usize, val: bool) { + debug_assert!(index / 8 < core::mem::size_of::()); + let byte_index = index / 8; + let byte = unsafe { + (core::ptr::addr_of_mut!((*this).storage) as *mut u8).offset(byte_index as isize) + }; + unsafe { *byte = Self::change_bit(*byte, index, val) }; + } + #[inline] + pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 { + debug_assert!(bit_width <= 64); + debug_assert!(bit_offset / 8 < self.storage.as_ref().len()); + debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len()); + let mut val = 0; + for i in 0..(bit_width as usize) { + if self.get_bit(i + bit_offset) { + let index = if cfg!(target_endian = "big") { + bit_width as usize - 1 - i + } else { + i + }; + val |= 1 << index; + } + } + val + } + #[inline] + pub unsafe fn raw_get(this: *const Self, bit_offset: usize, bit_width: u8) -> u64 { + debug_assert!(bit_width <= 64); + debug_assert!(bit_offset / 8 < core::mem::size_of::()); + debug_assert!((bit_offset + (bit_width as usize)) / 8 <= core::mem::size_of::()); + let mut val = 0; + for i in 0..(bit_width as usize) { + if unsafe { Self::raw_get_bit(this, i + bit_offset) } { + let index = if cfg!(target_endian = "big") { + bit_width as usize - 1 - i + } else { + i + }; + val |= 1 << index; + } + } + val + } + #[inline] + pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) { + debug_assert!(bit_width <= 64); + debug_assert!(bit_offset / 8 < self.storage.as_ref().len()); + debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len()); + for i in 0..(bit_width as usize) { + let mask = 1 << i; + let val_bit_is_set = val & mask == mask; + let index = if cfg!(target_endian = "big") { + bit_width as usize - 1 - i + } else { + i + }; + self.set_bit(index + bit_offset, val_bit_is_set); + } + } + #[inline] + pub unsafe fn raw_set(this: *mut Self, bit_offset: usize, bit_width: u8, val: u64) { + debug_assert!(bit_width <= 64); + debug_assert!(bit_offset / 8 < core::mem::size_of::()); + debug_assert!((bit_offset + (bit_width as usize)) / 8 <= core::mem::size_of::()); + for i in 0..(bit_width as usize) { + let mask = 1 << i; + let val_bit_is_set = val & mask == mask; + let index = if cfg!(target_endian = "big") { + bit_width as usize - 1 - i + } else { + i + }; + unsafe { Self::raw_set_bit(this, index + bit_offset, val_bit_is_set) }; + } + } +} +#[derive(PartialEq, Copy, Clone, Hash, Debug, Default)] +#[repr(C)] +pub struct __BindgenComplex { + pub re: T, + pub im: T, +} +pub const _STDINT_H: u32 = 1; +pub const _FEATURES_H: u32 = 1; +pub const _DEFAULT_SOURCE: u32 = 1; +pub const __GLIBC_USE_ISOC2Y: u32 = 0; +pub const __GLIBC_USE_ISOC23: u32 = 0; +pub const __USE_ISOC11: u32 = 1; +pub const __USE_ISOC99: u32 = 1; +pub const __USE_ISOC95: u32 = 1; +pub const __USE_POSIX_IMPLICITLY: u32 = 1; +pub const _POSIX_SOURCE: u32 = 1; +pub const _POSIX_C_SOURCE: u32 = 202405; +pub const __USE_POSIX: u32 = 1; +pub const __USE_POSIX2: u32 = 1; +pub const __USE_POSIX199309: u32 = 1; +pub const __USE_POSIX199506: u32 = 1; +pub const __USE_XOPEN2K: u32 = 1; +pub const __USE_XOPEN2K8: u32 = 1; +pub const _ATFILE_SOURCE: u32 = 1; +pub const __USE_XOPEN2K24: u32 = 1; +pub const __WORDSIZE: u32 = 64; +pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1; +pub const __SYSCALL_WORDSIZE: u32 = 64; +pub const __TIMESIZE: u32 = 64; +pub const __USE_TIME_BITS64: u32 = 1; +pub const __USE_MISC: u32 = 1; +pub const __USE_ATFILE: u32 = 1; +pub const __USE_FORTIFY_LEVEL: u32 = 0; +pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0; +pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0; +pub const __GLIBC_USE_C23_STRTOL: u32 = 0; +pub const _STDC_PREDEF_H: u32 = 1; +pub const __STDC_IEC_559__: u32 = 1; +pub const __STDC_IEC_60559_BFP__: u32 = 201404; +pub const __STDC_IEC_559_COMPLEX__: u32 = 1; +pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404; +pub const __STDC_ISO_10646__: u32 = 201706; +pub const __GNU_LIBRARY__: u32 = 6; +pub const __GLIBC__: u32 = 2; +pub const __GLIBC_MINOR__: u32 = 43; +pub const _SYS_CDEFS_H: u32 = 1; +pub const __glibc_c99_flexarr_available: u32 = 1; +pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0; +pub const __HAVE_GENERIC_SELECTION: u32 = 1; +pub const __GLIBC_USE_LIB_EXT2: u32 = 0; +pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_BFP_EXT_C23: u32 = 0; +pub const __GLIBC_USE_IEC_60559_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C23: u32 = 0; +pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0; +pub const _BITS_TYPES_H: u32 = 1; +pub const _BITS_TYPESIZES_H: u32 = 1; +pub const __OFF_T_MATCHES_OFF64_T: u32 = 1; +pub const __INO_T_MATCHES_INO64_T: u32 = 1; +pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1; +pub const __STATFS_MATCHES_STATFS64: u32 = 1; +pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64: u32 = 1; +pub const __FD_SETSIZE: u32 = 1024; +pub const _BITS_TIME64_H: u32 = 1; +pub const _BITS_WCHAR_H: u32 = 1; +pub const _BITS_STDINT_INTN_H: u32 = 1; +pub const _BITS_STDINT_UINTN_H: u32 = 1; +pub const _BITS_STDINT_LEAST_H: u32 = 1; +pub const INT8_MIN: i32 = -128; +pub const INT16_MIN: i32 = -32768; +pub const INT32_MIN: i32 = -2147483648; +pub const INT8_MAX: u32 = 127; +pub const INT16_MAX: u32 = 32767; +pub const INT32_MAX: u32 = 2147483647; +pub const UINT8_MAX: u32 = 255; +pub const UINT16_MAX: u32 = 65535; +pub const UINT32_MAX: u32 = 4294967295; +pub const INT_LEAST8_MIN: i32 = -128; +pub const INT_LEAST16_MIN: i32 = -32768; +pub const INT_LEAST32_MIN: i32 = -2147483648; +pub const INT_LEAST8_MAX: u32 = 127; +pub const INT_LEAST16_MAX: u32 = 32767; +pub const INT_LEAST32_MAX: u32 = 2147483647; +pub const UINT_LEAST8_MAX: u32 = 255; +pub const UINT_LEAST16_MAX: u32 = 65535; +pub const UINT_LEAST32_MAX: u32 = 4294967295; +pub const INT_FAST8_MIN: i32 = -128; +pub const INT_FAST16_MIN: i64 = -9223372036854775808; +pub const INT_FAST32_MIN: i64 = -9223372036854775808; +pub const INT_FAST8_MAX: u32 = 127; +pub const INT_FAST16_MAX: u64 = 9223372036854775807; +pub const INT_FAST32_MAX: u64 = 9223372036854775807; +pub const UINT_FAST8_MAX: u32 = 255; +pub const UINT_FAST16_MAX: i32 = -1; +pub const UINT_FAST32_MAX: i32 = -1; +pub const INTPTR_MIN: i64 = -9223372036854775808; +pub const INTPTR_MAX: u64 = 9223372036854775807; +pub const UINTPTR_MAX: i32 = -1; +pub const PTRDIFF_MIN: i64 = -9223372036854775808; +pub const PTRDIFF_MAX: u64 = 9223372036854775807; +pub const SIG_ATOMIC_MIN: i32 = -2147483648; +pub const SIG_ATOMIC_MAX: u32 = 2147483647; +pub const SIZE_MAX: i32 = -1; +pub const WINT_MIN: u32 = 0; +pub const WINT_MAX: u32 = 4294967295; +pub const _STDLIB_H: u32 = 1; +pub const WNOHANG: u32 = 1; +pub const WUNTRACED: u32 = 2; +pub const WSTOPPED: u32 = 2; +pub const WEXITED: u32 = 4; +pub const WCONTINUED: u32 = 8; +pub const WNOWAIT: u32 = 16777216; +pub const __WNOTHREAD: u32 = 536870912; +pub const __WALL: u32 = 1073741824; +pub const __WCLONE: u32 = 2147483648; +pub const __W_CONTINUED: u32 = 65535; +pub const __WCOREFLAG: u32 = 128; +pub const __HAVE_FLOAT128: u32 = 1; +pub const __HAVE_DISTINCT_FLOAT128: u32 = 1; +pub const __HAVE_FLOAT64X: u32 = 1; +pub const __HAVE_FLOAT64X_LONG_DOUBLE: u32 = 1; +pub const __HAVE_FLOAT16: u32 = 0; +pub const __HAVE_FLOAT32: u32 = 1; +pub const __HAVE_FLOAT64: u32 = 1; +pub const __HAVE_FLOAT32X: u32 = 1; +pub const __HAVE_FLOAT128X: u32 = 0; +pub const __HAVE_DISTINCT_FLOAT16: u32 = 0; +pub const __HAVE_DISTINCT_FLOAT32: u32 = 0; +pub const __HAVE_DISTINCT_FLOAT64: u32 = 0; +pub const __HAVE_DISTINCT_FLOAT32X: u32 = 0; +pub const __HAVE_DISTINCT_FLOAT64X: u32 = 0; +pub const __HAVE_DISTINCT_FLOAT128X: u32 = 0; +pub const __HAVE_FLOATN_NOT_TYPEDEF: u32 = 0; +pub const __ldiv_t_defined: u32 = 1; +pub const __lldiv_t_defined: u32 = 1; +pub const RAND_MAX: u32 = 2147483647; +pub const EXIT_FAILURE: u32 = 1; +pub const EXIT_SUCCESS: u32 = 0; +pub const _SYS_TYPES_H: u32 = 1; +pub const __clock_t_defined: u32 = 1; +pub const __clockid_t_defined: u32 = 1; +pub const __time_t_defined: u32 = 1; +pub const __timer_t_defined: u32 = 1; +pub const __BIT_TYPES_DEFINED__: u32 = 1; +pub const _ENDIAN_H: u32 = 1; +pub const _BITS_ENDIAN_H: u32 = 1; +pub const __LITTLE_ENDIAN: u32 = 1234; +pub const __BIG_ENDIAN: u32 = 4321; +pub const __PDP_ENDIAN: u32 = 3412; +pub const _BITS_ENDIANNESS_H: u32 = 1; +pub const __BYTE_ORDER: u32 = 1234; +pub const __FLOAT_WORD_ORDER: u32 = 1234; +pub const LITTLE_ENDIAN: u32 = 1234; +pub const BIG_ENDIAN: u32 = 4321; +pub const PDP_ENDIAN: u32 = 3412; +pub const BYTE_ORDER: u32 = 1234; +pub const _BITS_BYTESWAP_H: u32 = 1; +pub const _BITS_UINTN_IDENTITY_H: u32 = 1; +pub const _SYS_SELECT_H: u32 = 1; +pub const __sigset_t_defined: u32 = 1; +pub const __timeval_defined: u32 = 1; +pub const _STRUCT_TIMESPEC: u32 = 1; +pub const FD_SETSIZE: u32 = 1024; +pub const _BITS_PTHREADTYPES_COMMON_H: u32 = 1; +pub const _THREAD_SHARED_TYPES_H: u32 = 1; +pub const _BITS_PTHREADTYPES_ARCH_H: u32 = 1; +pub const __SIZEOF_PTHREAD_MUTEX_T: u32 = 40; +pub const __SIZEOF_PTHREAD_ATTR_T: u32 = 56; +pub const __SIZEOF_PTHREAD_RWLOCK_T: u32 = 56; +pub const __SIZEOF_PTHREAD_BARRIER_T: u32 = 32; +pub const __SIZEOF_PTHREAD_MUTEXATTR_T: u32 = 4; +pub const __SIZEOF_PTHREAD_COND_T: u32 = 48; +pub const __SIZEOF_PTHREAD_CONDATTR_T: u32 = 4; +pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: u32 = 8; +pub const __SIZEOF_PTHREAD_BARRIERATTR_T: u32 = 4; +pub const _THREAD_MUTEX_INTERNAL_H: u32 = 1; +pub const __PTHREAD_MUTEX_HAVE_PREV: u32 = 1; +pub const __have_pthread_attr_t: u32 = 1; +pub const _ALLOCA_H: u32 = 1; +pub const _STDIO_H: u32 = 1; +pub const _____fpos_t_defined: u32 = 1; +pub const ____mbstate_t_defined: u32 = 1; +pub const _____fpos64_t_defined: u32 = 1; +pub const ____FILE_defined: u32 = 1; +pub const __FILE_defined: u32 = 1; +pub const __struct_FILE_defined: u32 = 1; +pub const _IO_EOF_SEEN: u32 = 16; +pub const _IO_ERR_SEEN: u32 = 32; +pub const _IO_USER_LOCK: u32 = 32768; +pub const __cookie_io_functions_t_defined: u32 = 1; +pub const _IOFBF: u32 = 0; +pub const _IOLBF: u32 = 1; +pub const _IONBF: u32 = 2; +pub const BUFSIZ: u32 = 8192; +pub const EOF: i32 = -1; +pub const SEEK_SET: u32 = 0; +pub const SEEK_CUR: u32 = 1; +pub const SEEK_END: u32 = 2; +pub const P_tmpdir: &[u8; 5] = b"/tmp\0"; +pub const L_tmpnam: u32 = 20; +pub const TMP_MAX: u32 = 238328; +pub const _BITS_STDIO_LIM_H: u32 = 1; +pub const FILENAME_MAX: u32 = 4096; +pub const L_ctermid: u32 = 9; +pub const FOPEN_MAX: u32 = 16; +pub const KHRONOS_SUPPORT_INT64: u32 = 1; +pub const KHRONOS_SUPPORT_FLOAT: u32 = 1; +pub const KHRONOS_MAX_ENUM: u32 = 2147483647; +pub const GL_DEPTH_BUFFER_BIT: u32 = 256; +pub const GL_STENCIL_BUFFER_BIT: u32 = 1024; +pub const GL_COLOR_BUFFER_BIT: u32 = 16384; +pub const GL_FALSE: u32 = 0; +pub const GL_TRUE: u32 = 1; +pub const GL_POINTS: u32 = 0; +pub const GL_LINES: u32 = 1; +pub const GL_LINE_LOOP: u32 = 2; +pub const GL_LINE_STRIP: u32 = 3; +pub const GL_TRIANGLES: u32 = 4; +pub const GL_TRIANGLE_STRIP: u32 = 5; +pub const GL_TRIANGLE_FAN: u32 = 6; +pub const GL_NEVER: u32 = 512; +pub const GL_LESS: u32 = 513; +pub const GL_EQUAL: u32 = 514; +pub const GL_LEQUAL: u32 = 515; +pub const GL_GREATER: u32 = 516; +pub const GL_NOTEQUAL: u32 = 517; +pub const GL_GEQUAL: u32 = 518; +pub const GL_ALWAYS: u32 = 519; +pub const GL_ZERO: u32 = 0; +pub const GL_ONE: u32 = 1; +pub const GL_SRC_COLOR: u32 = 768; +pub const GL_ONE_MINUS_SRC_COLOR: u32 = 769; +pub const GL_SRC_ALPHA: u32 = 770; +pub const GL_ONE_MINUS_SRC_ALPHA: u32 = 771; +pub const GL_DST_ALPHA: u32 = 772; +pub const GL_ONE_MINUS_DST_ALPHA: u32 = 773; +pub const GL_DST_COLOR: u32 = 774; +pub const GL_ONE_MINUS_DST_COLOR: u32 = 775; +pub const GL_SRC_ALPHA_SATURATE: u32 = 776; +pub const GL_NONE: u32 = 0; +pub const GL_FRONT_LEFT: u32 = 1024; +pub const GL_FRONT_RIGHT: u32 = 1025; +pub const GL_BACK_LEFT: u32 = 1026; +pub const GL_BACK_RIGHT: u32 = 1027; +pub const GL_FRONT: u32 = 1028; +pub const GL_BACK: u32 = 1029; +pub const GL_LEFT: u32 = 1030; +pub const GL_RIGHT: u32 = 1031; +pub const GL_FRONT_AND_BACK: u32 = 1032; +pub const GL_NO_ERROR: u32 = 0; +pub const GL_INVALID_ENUM: u32 = 1280; +pub const GL_INVALID_VALUE: u32 = 1281; +pub const GL_INVALID_OPERATION: u32 = 1282; +pub const GL_OUT_OF_MEMORY: u32 = 1285; +pub const GL_CW: u32 = 2304; +pub const GL_CCW: u32 = 2305; +pub const GL_POINT_SIZE: u32 = 2833; +pub const GL_POINT_SIZE_RANGE: u32 = 2834; +pub const GL_POINT_SIZE_GRANULARITY: u32 = 2835; +pub const GL_LINE_SMOOTH: u32 = 2848; +pub const GL_LINE_WIDTH: u32 = 2849; +pub const GL_LINE_WIDTH_RANGE: u32 = 2850; +pub const GL_LINE_WIDTH_GRANULARITY: u32 = 2851; +pub const GL_POLYGON_MODE: u32 = 2880; +pub const GL_POLYGON_SMOOTH: u32 = 2881; +pub const GL_CULL_FACE: u32 = 2884; +pub const GL_CULL_FACE_MODE: u32 = 2885; +pub const GL_FRONT_FACE: u32 = 2886; +pub const GL_DEPTH_RANGE: u32 = 2928; +pub const GL_DEPTH_TEST: u32 = 2929; +pub const GL_DEPTH_WRITEMASK: u32 = 2930; +pub const GL_DEPTH_CLEAR_VALUE: u32 = 2931; +pub const GL_DEPTH_FUNC: u32 = 2932; +pub const GL_STENCIL_TEST: u32 = 2960; +pub const GL_STENCIL_CLEAR_VALUE: u32 = 2961; +pub const GL_STENCIL_FUNC: u32 = 2962; +pub const GL_STENCIL_VALUE_MASK: u32 = 2963; +pub const GL_STENCIL_FAIL: u32 = 2964; +pub const GL_STENCIL_PASS_DEPTH_FAIL: u32 = 2965; +pub const GL_STENCIL_PASS_DEPTH_PASS: u32 = 2966; +pub const GL_STENCIL_REF: u32 = 2967; +pub const GL_STENCIL_WRITEMASK: u32 = 2968; +pub const GL_VIEWPORT: u32 = 2978; +pub const GL_DITHER: u32 = 3024; +pub const GL_BLEND_DST: u32 = 3040; +pub const GL_BLEND_SRC: u32 = 3041; +pub const GL_BLEND: u32 = 3042; +pub const GL_LOGIC_OP_MODE: u32 = 3056; +pub const GL_DRAW_BUFFER: u32 = 3073; +pub const GL_READ_BUFFER: u32 = 3074; +pub const GL_SCISSOR_BOX: u32 = 3088; +pub const GL_SCISSOR_TEST: u32 = 3089; +pub const GL_COLOR_CLEAR_VALUE: u32 = 3106; +pub const GL_COLOR_WRITEMASK: u32 = 3107; +pub const GL_DOUBLEBUFFER: u32 = 3122; +pub const GL_STEREO: u32 = 3123; +pub const GL_LINE_SMOOTH_HINT: u32 = 3154; +pub const GL_POLYGON_SMOOTH_HINT: u32 = 3155; +pub const GL_UNPACK_SWAP_BYTES: u32 = 3312; +pub const GL_UNPACK_LSB_FIRST: u32 = 3313; +pub const GL_UNPACK_ROW_LENGTH: u32 = 3314; +pub const GL_UNPACK_SKIP_ROWS: u32 = 3315; +pub const GL_UNPACK_SKIP_PIXELS: u32 = 3316; +pub const GL_UNPACK_ALIGNMENT: u32 = 3317; +pub const GL_PACK_SWAP_BYTES: u32 = 3328; +pub const GL_PACK_LSB_FIRST: u32 = 3329; +pub const GL_PACK_ROW_LENGTH: u32 = 3330; +pub const GL_PACK_SKIP_ROWS: u32 = 3331; +pub const GL_PACK_SKIP_PIXELS: u32 = 3332; +pub const GL_PACK_ALIGNMENT: u32 = 3333; +pub const GL_MAX_TEXTURE_SIZE: u32 = 3379; +pub const GL_MAX_VIEWPORT_DIMS: u32 = 3386; +pub const GL_SUBPIXEL_BITS: u32 = 3408; +pub const GL_TEXTURE_1D: u32 = 3552; +pub const GL_TEXTURE_2D: u32 = 3553; +pub const GL_TEXTURE_WIDTH: u32 = 4096; +pub const GL_TEXTURE_HEIGHT: u32 = 4097; +pub const GL_TEXTURE_BORDER_COLOR: u32 = 4100; +pub const GL_DONT_CARE: u32 = 4352; +pub const GL_FASTEST: u32 = 4353; +pub const GL_NICEST: u32 = 4354; +pub const GL_BYTE: u32 = 5120; +pub const GL_UNSIGNED_BYTE: u32 = 5121; +pub const GL_SHORT: u32 = 5122; +pub const GL_UNSIGNED_SHORT: u32 = 5123; +pub const GL_INT: u32 = 5124; +pub const GL_UNSIGNED_INT: u32 = 5125; +pub const GL_FLOAT: u32 = 5126; +pub const GL_CLEAR: u32 = 5376; +pub const GL_AND: u32 = 5377; +pub const GL_AND_REVERSE: u32 = 5378; +pub const GL_COPY: u32 = 5379; +pub const GL_AND_INVERTED: u32 = 5380; +pub const GL_NOOP: u32 = 5381; +pub const GL_XOR: u32 = 5382; +pub const GL_OR: u32 = 5383; +pub const GL_NOR: u32 = 5384; +pub const GL_EQUIV: u32 = 5385; +pub const GL_INVERT: u32 = 5386; +pub const GL_OR_REVERSE: u32 = 5387; +pub const GL_COPY_INVERTED: u32 = 5388; +pub const GL_OR_INVERTED: u32 = 5389; +pub const GL_NAND: u32 = 5390; +pub const GL_SET: u32 = 5391; +pub const GL_TEXTURE: u32 = 5890; +pub const GL_COLOR: u32 = 6144; +pub const GL_DEPTH: u32 = 6145; +pub const GL_STENCIL: u32 = 6146; +pub const GL_STENCIL_INDEX: u32 = 6401; +pub const GL_DEPTH_COMPONENT: u32 = 6402; +pub const GL_RED: u32 = 6403; +pub const GL_GREEN: u32 = 6404; +pub const GL_BLUE: u32 = 6405; +pub const GL_ALPHA: u32 = 6406; +pub const GL_RGB: u32 = 6407; +pub const GL_RGBA: u32 = 6408; +pub const GL_POINT: u32 = 6912; +pub const GL_LINE: u32 = 6913; +pub const GL_FILL: u32 = 6914; +pub const GL_KEEP: u32 = 7680; +pub const GL_REPLACE: u32 = 7681; +pub const GL_INCR: u32 = 7682; +pub const GL_DECR: u32 = 7683; +pub const GL_VENDOR: u32 = 7936; +pub const GL_RENDERER: u32 = 7937; +pub const GL_VERSION: u32 = 7938; +pub const GL_EXTENSIONS: u32 = 7939; +pub const GL_NEAREST: u32 = 9728; +pub const GL_LINEAR: u32 = 9729; +pub const GL_NEAREST_MIPMAP_NEAREST: u32 = 9984; +pub const GL_LINEAR_MIPMAP_NEAREST: u32 = 9985; +pub const GL_NEAREST_MIPMAP_LINEAR: u32 = 9986; +pub const GL_LINEAR_MIPMAP_LINEAR: u32 = 9987; +pub const GL_TEXTURE_MAG_FILTER: u32 = 10240; +pub const GL_TEXTURE_MIN_FILTER: u32 = 10241; +pub const GL_TEXTURE_WRAP_S: u32 = 10242; +pub const GL_TEXTURE_WRAP_T: u32 = 10243; +pub const GL_REPEAT: u32 = 10497; +pub const GL_COLOR_LOGIC_OP: u32 = 3058; +pub const GL_POLYGON_OFFSET_UNITS: u32 = 10752; +pub const GL_POLYGON_OFFSET_POINT: u32 = 10753; +pub const GL_POLYGON_OFFSET_LINE: u32 = 10754; +pub const GL_POLYGON_OFFSET_FILL: u32 = 32823; +pub const GL_POLYGON_OFFSET_FACTOR: u32 = 32824; +pub const GL_TEXTURE_BINDING_1D: u32 = 32872; +pub const GL_TEXTURE_BINDING_2D: u32 = 32873; +pub const GL_TEXTURE_INTERNAL_FORMAT: u32 = 4099; +pub const GL_TEXTURE_RED_SIZE: u32 = 32860; +pub const GL_TEXTURE_GREEN_SIZE: u32 = 32861; +pub const GL_TEXTURE_BLUE_SIZE: u32 = 32862; +pub const GL_TEXTURE_ALPHA_SIZE: u32 = 32863; +pub const GL_DOUBLE: u32 = 5130; +pub const GL_PROXY_TEXTURE_1D: u32 = 32867; +pub const GL_PROXY_TEXTURE_2D: u32 = 32868; +pub const GL_R3_G3_B2: u32 = 10768; +pub const GL_RGB4: u32 = 32847; +pub const GL_RGB5: u32 = 32848; +pub const GL_RGB8: u32 = 32849; +pub const GL_RGB10: u32 = 32850; +pub const GL_RGB12: u32 = 32851; +pub const GL_RGB16: u32 = 32852; +pub const GL_RGBA2: u32 = 32853; +pub const GL_RGBA4: u32 = 32854; +pub const GL_RGB5_A1: u32 = 32855; +pub const GL_RGBA8: u32 = 32856; +pub const GL_RGB10_A2: u32 = 32857; +pub const GL_RGBA12: u32 = 32858; +pub const GL_RGBA16: u32 = 32859; +pub const GL_UNSIGNED_BYTE_3_3_2: u32 = 32818; +pub const GL_UNSIGNED_SHORT_4_4_4_4: u32 = 32819; +pub const GL_UNSIGNED_SHORT_5_5_5_1: u32 = 32820; +pub const GL_UNSIGNED_INT_8_8_8_8: u32 = 32821; +pub const GL_UNSIGNED_INT_10_10_10_2: u32 = 32822; +pub const GL_TEXTURE_BINDING_3D: u32 = 32874; +pub const GL_PACK_SKIP_IMAGES: u32 = 32875; +pub const GL_PACK_IMAGE_HEIGHT: u32 = 32876; +pub const GL_UNPACK_SKIP_IMAGES: u32 = 32877; +pub const GL_UNPACK_IMAGE_HEIGHT: u32 = 32878; +pub const GL_TEXTURE_3D: u32 = 32879; +pub const GL_PROXY_TEXTURE_3D: u32 = 32880; +pub const GL_TEXTURE_DEPTH: u32 = 32881; +pub const GL_TEXTURE_WRAP_R: u32 = 32882; +pub const GL_MAX_3D_TEXTURE_SIZE: u32 = 32883; +pub const GL_UNSIGNED_BYTE_2_3_3_REV: u32 = 33634; +pub const GL_UNSIGNED_SHORT_5_6_5: u32 = 33635; +pub const GL_UNSIGNED_SHORT_5_6_5_REV: u32 = 33636; +pub const GL_UNSIGNED_SHORT_4_4_4_4_REV: u32 = 33637; +pub const GL_UNSIGNED_SHORT_1_5_5_5_REV: u32 = 33638; +pub const GL_UNSIGNED_INT_8_8_8_8_REV: u32 = 33639; +pub const GL_UNSIGNED_INT_2_10_10_10_REV: u32 = 33640; +pub const GL_BGR: u32 = 32992; +pub const GL_BGRA: u32 = 32993; +pub const GL_MAX_ELEMENTS_VERTICES: u32 = 33000; +pub const GL_MAX_ELEMENTS_INDICES: u32 = 33001; +pub const GL_CLAMP_TO_EDGE: u32 = 33071; +pub const GL_TEXTURE_MIN_LOD: u32 = 33082; +pub const GL_TEXTURE_MAX_LOD: u32 = 33083; +pub const GL_TEXTURE_BASE_LEVEL: u32 = 33084; +pub const GL_TEXTURE_MAX_LEVEL: u32 = 33085; +pub const GL_SMOOTH_POINT_SIZE_RANGE: u32 = 2834; +pub const GL_SMOOTH_POINT_SIZE_GRANULARITY: u32 = 2835; +pub const GL_SMOOTH_LINE_WIDTH_RANGE: u32 = 2850; +pub const GL_SMOOTH_LINE_WIDTH_GRANULARITY: u32 = 2851; +pub const GL_ALIASED_LINE_WIDTH_RANGE: u32 = 33902; +pub const GL_TEXTURE0: u32 = 33984; +pub const GL_TEXTURE1: u32 = 33985; +pub const GL_TEXTURE2: u32 = 33986; +pub const GL_TEXTURE3: u32 = 33987; +pub const GL_TEXTURE4: u32 = 33988; +pub const GL_TEXTURE5: u32 = 33989; +pub const GL_TEXTURE6: u32 = 33990; +pub const GL_TEXTURE7: u32 = 33991; +pub const GL_TEXTURE8: u32 = 33992; +pub const GL_TEXTURE9: u32 = 33993; +pub const GL_TEXTURE10: u32 = 33994; +pub const GL_TEXTURE11: u32 = 33995; +pub const GL_TEXTURE12: u32 = 33996; +pub const GL_TEXTURE13: u32 = 33997; +pub const GL_TEXTURE14: u32 = 33998; +pub const GL_TEXTURE15: u32 = 33999; +pub const GL_TEXTURE16: u32 = 34000; +pub const GL_TEXTURE17: u32 = 34001; +pub const GL_TEXTURE18: u32 = 34002; +pub const GL_TEXTURE19: u32 = 34003; +pub const GL_TEXTURE20: u32 = 34004; +pub const GL_TEXTURE21: u32 = 34005; +pub const GL_TEXTURE22: u32 = 34006; +pub const GL_TEXTURE23: u32 = 34007; +pub const GL_TEXTURE24: u32 = 34008; +pub const GL_TEXTURE25: u32 = 34009; +pub const GL_TEXTURE26: u32 = 34010; +pub const GL_TEXTURE27: u32 = 34011; +pub const GL_TEXTURE28: u32 = 34012; +pub const GL_TEXTURE29: u32 = 34013; +pub const GL_TEXTURE30: u32 = 34014; +pub const GL_TEXTURE31: u32 = 34015; +pub const GL_ACTIVE_TEXTURE: u32 = 34016; +pub const GL_MULTISAMPLE: u32 = 32925; +pub const GL_SAMPLE_ALPHA_TO_COVERAGE: u32 = 32926; +pub const GL_SAMPLE_ALPHA_TO_ONE: u32 = 32927; +pub const GL_SAMPLE_COVERAGE: u32 = 32928; +pub const GL_SAMPLE_BUFFERS: u32 = 32936; +pub const GL_SAMPLES: u32 = 32937; +pub const GL_SAMPLE_COVERAGE_VALUE: u32 = 32938; +pub const GL_SAMPLE_COVERAGE_INVERT: u32 = 32939; +pub const GL_TEXTURE_CUBE_MAP: u32 = 34067; +pub const GL_TEXTURE_BINDING_CUBE_MAP: u32 = 34068; +pub const GL_TEXTURE_CUBE_MAP_POSITIVE_X: u32 = 34069; +pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_X: u32 = 34070; +pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Y: u32 = 34071; +pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: u32 = 34072; +pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Z: u32 = 34073; +pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: u32 = 34074; +pub const GL_PROXY_TEXTURE_CUBE_MAP: u32 = 34075; +pub const GL_MAX_CUBE_MAP_TEXTURE_SIZE: u32 = 34076; +pub const GL_COMPRESSED_RGB: u32 = 34029; +pub const GL_COMPRESSED_RGBA: u32 = 34030; +pub const GL_TEXTURE_COMPRESSION_HINT: u32 = 34031; +pub const GL_TEXTURE_COMPRESSED_IMAGE_SIZE: u32 = 34464; +pub const GL_TEXTURE_COMPRESSED: u32 = 34465; +pub const GL_NUM_COMPRESSED_TEXTURE_FORMATS: u32 = 34466; +pub const GL_COMPRESSED_TEXTURE_FORMATS: u32 = 34467; +pub const GL_CLAMP_TO_BORDER: u32 = 33069; +pub const GL_BLEND_DST_RGB: u32 = 32968; +pub const GL_BLEND_SRC_RGB: u32 = 32969; +pub const GL_BLEND_DST_ALPHA: u32 = 32970; +pub const GL_BLEND_SRC_ALPHA: u32 = 32971; +pub const GL_POINT_FADE_THRESHOLD_SIZE: u32 = 33064; +pub const GL_DEPTH_COMPONENT16: u32 = 33189; +pub const GL_DEPTH_COMPONENT24: u32 = 33190; +pub const GL_DEPTH_COMPONENT32: u32 = 33191; +pub const GL_MIRRORED_REPEAT: u32 = 33648; +pub const GL_MAX_TEXTURE_LOD_BIAS: u32 = 34045; +pub const GL_TEXTURE_LOD_BIAS: u32 = 34049; +pub const GL_INCR_WRAP: u32 = 34055; +pub const GL_DECR_WRAP: u32 = 34056; +pub const GL_TEXTURE_DEPTH_SIZE: u32 = 34890; +pub const GL_TEXTURE_COMPARE_MODE: u32 = 34892; +pub const GL_TEXTURE_COMPARE_FUNC: u32 = 34893; +pub const GL_BLEND_COLOR: u32 = 32773; +pub const GL_BLEND_EQUATION: u32 = 32777; +pub const GL_CONSTANT_COLOR: u32 = 32769; +pub const GL_ONE_MINUS_CONSTANT_COLOR: u32 = 32770; +pub const GL_CONSTANT_ALPHA: u32 = 32771; +pub const GL_ONE_MINUS_CONSTANT_ALPHA: u32 = 32772; +pub const GL_FUNC_ADD: u32 = 32774; +pub const GL_FUNC_REVERSE_SUBTRACT: u32 = 32779; +pub const GL_FUNC_SUBTRACT: u32 = 32778; +pub const GL_MIN: u32 = 32775; +pub const GL_MAX: u32 = 32776; +pub const GL_BUFFER_SIZE: u32 = 34660; +pub const GL_BUFFER_USAGE: u32 = 34661; +pub const GL_QUERY_COUNTER_BITS: u32 = 34916; +pub const GL_CURRENT_QUERY: u32 = 34917; +pub const GL_QUERY_RESULT: u32 = 34918; +pub const GL_QUERY_RESULT_AVAILABLE: u32 = 34919; +pub const GL_ARRAY_BUFFER: u32 = 34962; +pub const GL_ELEMENT_ARRAY_BUFFER: u32 = 34963; +pub const GL_ARRAY_BUFFER_BINDING: u32 = 34964; +pub const GL_ELEMENT_ARRAY_BUFFER_BINDING: u32 = 34965; +pub const GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: u32 = 34975; +pub const GL_READ_ONLY: u32 = 35000; +pub const GL_WRITE_ONLY: u32 = 35001; +pub const GL_READ_WRITE: u32 = 35002; +pub const GL_BUFFER_ACCESS: u32 = 35003; +pub const GL_BUFFER_MAPPED: u32 = 35004; +pub const GL_BUFFER_MAP_POINTER: u32 = 35005; +pub const GL_STREAM_DRAW: u32 = 35040; +pub const GL_STREAM_READ: u32 = 35041; +pub const GL_STREAM_COPY: u32 = 35042; +pub const GL_STATIC_DRAW: u32 = 35044; +pub const GL_STATIC_READ: u32 = 35045; +pub const GL_STATIC_COPY: u32 = 35046; +pub const GL_DYNAMIC_DRAW: u32 = 35048; +pub const GL_DYNAMIC_READ: u32 = 35049; +pub const GL_DYNAMIC_COPY: u32 = 35050; +pub const GL_SAMPLES_PASSED: u32 = 35092; +pub const GL_SRC1_ALPHA: u32 = 34185; +pub const GL_BLEND_EQUATION_RGB: u32 = 32777; +pub const GL_VERTEX_ATTRIB_ARRAY_ENABLED: u32 = 34338; +pub const GL_VERTEX_ATTRIB_ARRAY_SIZE: u32 = 34339; +pub const GL_VERTEX_ATTRIB_ARRAY_STRIDE: u32 = 34340; +pub const GL_VERTEX_ATTRIB_ARRAY_TYPE: u32 = 34341; +pub const GL_CURRENT_VERTEX_ATTRIB: u32 = 34342; +pub const GL_VERTEX_PROGRAM_POINT_SIZE: u32 = 34370; +pub const GL_VERTEX_ATTRIB_ARRAY_POINTER: u32 = 34373; +pub const GL_STENCIL_BACK_FUNC: u32 = 34816; +pub const GL_STENCIL_BACK_FAIL: u32 = 34817; +pub const GL_STENCIL_BACK_PASS_DEPTH_FAIL: u32 = 34818; +pub const GL_STENCIL_BACK_PASS_DEPTH_PASS: u32 = 34819; +pub const GL_MAX_DRAW_BUFFERS: u32 = 34852; +pub const GL_DRAW_BUFFER0: u32 = 34853; +pub const GL_DRAW_BUFFER1: u32 = 34854; +pub const GL_DRAW_BUFFER2: u32 = 34855; +pub const GL_DRAW_BUFFER3: u32 = 34856; +pub const GL_DRAW_BUFFER4: u32 = 34857; +pub const GL_DRAW_BUFFER5: u32 = 34858; +pub const GL_DRAW_BUFFER6: u32 = 34859; +pub const GL_DRAW_BUFFER7: u32 = 34860; +pub const GL_DRAW_BUFFER8: u32 = 34861; +pub const GL_DRAW_BUFFER9: u32 = 34862; +pub const GL_DRAW_BUFFER10: u32 = 34863; +pub const GL_DRAW_BUFFER11: u32 = 34864; +pub const GL_DRAW_BUFFER12: u32 = 34865; +pub const GL_DRAW_BUFFER13: u32 = 34866; +pub const GL_DRAW_BUFFER14: u32 = 34867; +pub const GL_DRAW_BUFFER15: u32 = 34868; +pub const GL_BLEND_EQUATION_ALPHA: u32 = 34877; +pub const GL_MAX_VERTEX_ATTRIBS: u32 = 34921; +pub const GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: u32 = 34922; +pub const GL_MAX_TEXTURE_IMAGE_UNITS: u32 = 34930; +pub const GL_FRAGMENT_SHADER: u32 = 35632; +pub const GL_VERTEX_SHADER: u32 = 35633; +pub const GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35657; +pub const GL_MAX_VERTEX_UNIFORM_COMPONENTS: u32 = 35658; +pub const GL_MAX_VARYING_FLOATS: u32 = 35659; +pub const GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: u32 = 35660; +pub const GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: u32 = 35661; +pub const GL_SHADER_TYPE: u32 = 35663; +pub const GL_FLOAT_VEC2: u32 = 35664; +pub const GL_FLOAT_VEC3: u32 = 35665; +pub const GL_FLOAT_VEC4: u32 = 35666; +pub const GL_INT_VEC2: u32 = 35667; +pub const GL_INT_VEC3: u32 = 35668; +pub const GL_INT_VEC4: u32 = 35669; +pub const GL_BOOL: u32 = 35670; +pub const GL_BOOL_VEC2: u32 = 35671; +pub const GL_BOOL_VEC3: u32 = 35672; +pub const GL_BOOL_VEC4: u32 = 35673; +pub const GL_FLOAT_MAT2: u32 = 35674; +pub const GL_FLOAT_MAT3: u32 = 35675; +pub const GL_FLOAT_MAT4: u32 = 35676; +pub const GL_SAMPLER_1D: u32 = 35677; +pub const GL_SAMPLER_2D: u32 = 35678; +pub const GL_SAMPLER_3D: u32 = 35679; +pub const GL_SAMPLER_CUBE: u32 = 35680; +pub const GL_SAMPLER_1D_SHADOW: u32 = 35681; +pub const GL_SAMPLER_2D_SHADOW: u32 = 35682; +pub const GL_DELETE_STATUS: u32 = 35712; +pub const GL_COMPILE_STATUS: u32 = 35713; +pub const GL_LINK_STATUS: u32 = 35714; +pub const GL_VALIDATE_STATUS: u32 = 35715; +pub const GL_INFO_LOG_LENGTH: u32 = 35716; +pub const GL_ATTACHED_SHADERS: u32 = 35717; +pub const GL_ACTIVE_UNIFORMS: u32 = 35718; +pub const GL_ACTIVE_UNIFORM_MAX_LENGTH: u32 = 35719; +pub const GL_SHADER_SOURCE_LENGTH: u32 = 35720; +pub const GL_ACTIVE_ATTRIBUTES: u32 = 35721; +pub const GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: u32 = 35722; +pub const GL_FRAGMENT_SHADER_DERIVATIVE_HINT: u32 = 35723; +pub const GL_SHADING_LANGUAGE_VERSION: u32 = 35724; +pub const GL_CURRENT_PROGRAM: u32 = 35725; +pub const GL_POINT_SPRITE_COORD_ORIGIN: u32 = 36000; +pub const GL_LOWER_LEFT: u32 = 36001; +pub const GL_UPPER_LEFT: u32 = 36002; +pub const GL_STENCIL_BACK_REF: u32 = 36003; +pub const GL_STENCIL_BACK_VALUE_MASK: u32 = 36004; +pub const GL_STENCIL_BACK_WRITEMASK: u32 = 36005; +pub const GL_PIXEL_PACK_BUFFER: u32 = 35051; +pub const GL_PIXEL_UNPACK_BUFFER: u32 = 35052; +pub const GL_PIXEL_PACK_BUFFER_BINDING: u32 = 35053; +pub const GL_PIXEL_UNPACK_BUFFER_BINDING: u32 = 35055; +pub const GL_FLOAT_MAT2x3: u32 = 35685; +pub const GL_FLOAT_MAT2x4: u32 = 35686; +pub const GL_FLOAT_MAT3x2: u32 = 35687; +pub const GL_FLOAT_MAT3x4: u32 = 35688; +pub const GL_FLOAT_MAT4x2: u32 = 35689; +pub const GL_FLOAT_MAT4x3: u32 = 35690; +pub const GL_SRGB: u32 = 35904; +pub const GL_SRGB8: u32 = 35905; +pub const GL_SRGB_ALPHA: u32 = 35906; +pub const GL_SRGB8_ALPHA8: u32 = 35907; +pub const GL_COMPRESSED_SRGB: u32 = 35912; +pub const GL_COMPRESSED_SRGB_ALPHA: u32 = 35913; +pub const GL_COMPARE_REF_TO_TEXTURE: u32 = 34894; +pub const GL_CLIP_DISTANCE0: u32 = 12288; +pub const GL_CLIP_DISTANCE1: u32 = 12289; +pub const GL_CLIP_DISTANCE2: u32 = 12290; +pub const GL_CLIP_DISTANCE3: u32 = 12291; +pub const GL_CLIP_DISTANCE4: u32 = 12292; +pub const GL_CLIP_DISTANCE5: u32 = 12293; +pub const GL_CLIP_DISTANCE6: u32 = 12294; +pub const GL_CLIP_DISTANCE7: u32 = 12295; +pub const GL_MAX_CLIP_DISTANCES: u32 = 3378; +pub const GL_MAJOR_VERSION: u32 = 33307; +pub const GL_MINOR_VERSION: u32 = 33308; +pub const GL_NUM_EXTENSIONS: u32 = 33309; +pub const GL_CONTEXT_FLAGS: u32 = 33310; +pub const GL_COMPRESSED_RED: u32 = 33317; +pub const GL_COMPRESSED_RG: u32 = 33318; +pub const GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT: u32 = 1; +pub const GL_RGBA32F: u32 = 34836; +pub const GL_RGB32F: u32 = 34837; +pub const GL_RGBA16F: u32 = 34842; +pub const GL_RGB16F: u32 = 34843; +pub const GL_VERTEX_ATTRIB_ARRAY_INTEGER: u32 = 35069; +pub const GL_MAX_ARRAY_TEXTURE_LAYERS: u32 = 35071; +pub const GL_MIN_PROGRAM_TEXEL_OFFSET: u32 = 35076; +pub const GL_MAX_PROGRAM_TEXEL_OFFSET: u32 = 35077; +pub const GL_CLAMP_READ_COLOR: u32 = 35100; +pub const GL_FIXED_ONLY: u32 = 35101; +pub const GL_MAX_VARYING_COMPONENTS: u32 = 35659; +pub const GL_TEXTURE_1D_ARRAY: u32 = 35864; +pub const GL_PROXY_TEXTURE_1D_ARRAY: u32 = 35865; +pub const GL_TEXTURE_2D_ARRAY: u32 = 35866; +pub const GL_PROXY_TEXTURE_2D_ARRAY: u32 = 35867; +pub const GL_TEXTURE_BINDING_1D_ARRAY: u32 = 35868; +pub const GL_TEXTURE_BINDING_2D_ARRAY: u32 = 35869; +pub const GL_R11F_G11F_B10F: u32 = 35898; +pub const GL_UNSIGNED_INT_10F_11F_11F_REV: u32 = 35899; +pub const GL_RGB9_E5: u32 = 35901; +pub const GL_UNSIGNED_INT_5_9_9_9_REV: u32 = 35902; +pub const GL_TEXTURE_SHARED_SIZE: u32 = 35903; +pub const GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: u32 = 35958; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_MODE: u32 = 35967; +pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: u32 = 35968; +pub const GL_TRANSFORM_FEEDBACK_VARYINGS: u32 = 35971; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_START: u32 = 35972; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: u32 = 35973; +pub const GL_PRIMITIVES_GENERATED: u32 = 35975; +pub const GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: u32 = 35976; +pub const GL_RASTERIZER_DISCARD: u32 = 35977; +pub const GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: u32 = 35978; +pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: u32 = 35979; +pub const GL_INTERLEAVED_ATTRIBS: u32 = 35980; +pub const GL_SEPARATE_ATTRIBS: u32 = 35981; +pub const GL_TRANSFORM_FEEDBACK_BUFFER: u32 = 35982; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: u32 = 35983; +pub const GL_RGBA32UI: u32 = 36208; +pub const GL_RGB32UI: u32 = 36209; +pub const GL_RGBA16UI: u32 = 36214; +pub const GL_RGB16UI: u32 = 36215; +pub const GL_RGBA8UI: u32 = 36220; +pub const GL_RGB8UI: u32 = 36221; +pub const GL_RGBA32I: u32 = 36226; +pub const GL_RGB32I: u32 = 36227; +pub const GL_RGBA16I: u32 = 36232; +pub const GL_RGB16I: u32 = 36233; +pub const GL_RGBA8I: u32 = 36238; +pub const GL_RGB8I: u32 = 36239; +pub const GL_RED_INTEGER: u32 = 36244; +pub const GL_GREEN_INTEGER: u32 = 36245; +pub const GL_BLUE_INTEGER: u32 = 36246; +pub const GL_RGB_INTEGER: u32 = 36248; +pub const GL_RGBA_INTEGER: u32 = 36249; +pub const GL_BGR_INTEGER: u32 = 36250; +pub const GL_BGRA_INTEGER: u32 = 36251; +pub const GL_SAMPLER_1D_ARRAY: u32 = 36288; +pub const GL_SAMPLER_2D_ARRAY: u32 = 36289; +pub const GL_SAMPLER_1D_ARRAY_SHADOW: u32 = 36291; +pub const GL_SAMPLER_2D_ARRAY_SHADOW: u32 = 36292; +pub const GL_SAMPLER_CUBE_SHADOW: u32 = 36293; +pub const GL_UNSIGNED_INT_VEC2: u32 = 36294; +pub const GL_UNSIGNED_INT_VEC3: u32 = 36295; +pub const GL_UNSIGNED_INT_VEC4: u32 = 36296; +pub const GL_INT_SAMPLER_1D: u32 = 36297; +pub const GL_INT_SAMPLER_2D: u32 = 36298; +pub const GL_INT_SAMPLER_3D: u32 = 36299; +pub const GL_INT_SAMPLER_CUBE: u32 = 36300; +pub const GL_INT_SAMPLER_1D_ARRAY: u32 = 36302; +pub const GL_INT_SAMPLER_2D_ARRAY: u32 = 36303; +pub const GL_UNSIGNED_INT_SAMPLER_1D: u32 = 36305; +pub const GL_UNSIGNED_INT_SAMPLER_2D: u32 = 36306; +pub const GL_UNSIGNED_INT_SAMPLER_3D: u32 = 36307; +pub const GL_UNSIGNED_INT_SAMPLER_CUBE: u32 = 36308; +pub const GL_UNSIGNED_INT_SAMPLER_1D_ARRAY: u32 = 36310; +pub const GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: u32 = 36311; +pub const GL_QUERY_WAIT: u32 = 36371; +pub const GL_QUERY_NO_WAIT: u32 = 36372; +pub const GL_QUERY_BY_REGION_WAIT: u32 = 36373; +pub const GL_QUERY_BY_REGION_NO_WAIT: u32 = 36374; +pub const GL_BUFFER_ACCESS_FLAGS: u32 = 37151; +pub const GL_BUFFER_MAP_LENGTH: u32 = 37152; +pub const GL_BUFFER_MAP_OFFSET: u32 = 37153; +pub const GL_DEPTH_COMPONENT32F: u32 = 36012; +pub const GL_DEPTH32F_STENCIL8: u32 = 36013; +pub const GL_FLOAT_32_UNSIGNED_INT_24_8_REV: u32 = 36269; +pub const GL_INVALID_FRAMEBUFFER_OPERATION: u32 = 1286; +pub const GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: u32 = 33296; +pub const GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: u32 = 33297; +pub const GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: u32 = 33298; +pub const GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: u32 = 33299; +pub const GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: u32 = 33300; +pub const GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: u32 = 33301; +pub const GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: u32 = 33302; +pub const GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: u32 = 33303; +pub const GL_FRAMEBUFFER_DEFAULT: u32 = 33304; +pub const GL_FRAMEBUFFER_UNDEFINED: u32 = 33305; +pub const GL_DEPTH_STENCIL_ATTACHMENT: u32 = 33306; +pub const GL_MAX_RENDERBUFFER_SIZE: u32 = 34024; +pub const GL_DEPTH_STENCIL: u32 = 34041; +pub const GL_UNSIGNED_INT_24_8: u32 = 34042; +pub const GL_DEPTH24_STENCIL8: u32 = 35056; +pub const GL_TEXTURE_STENCIL_SIZE: u32 = 35057; +pub const GL_TEXTURE_RED_TYPE: u32 = 35856; +pub const GL_TEXTURE_GREEN_TYPE: u32 = 35857; +pub const GL_TEXTURE_BLUE_TYPE: u32 = 35858; +pub const GL_TEXTURE_ALPHA_TYPE: u32 = 35859; +pub const GL_TEXTURE_DEPTH_TYPE: u32 = 35862; +pub const GL_UNSIGNED_NORMALIZED: u32 = 35863; +pub const GL_FRAMEBUFFER_BINDING: u32 = 36006; +pub const GL_DRAW_FRAMEBUFFER_BINDING: u32 = 36006; +pub const GL_RENDERBUFFER_BINDING: u32 = 36007; +pub const GL_READ_FRAMEBUFFER: u32 = 36008; +pub const GL_DRAW_FRAMEBUFFER: u32 = 36009; +pub const GL_READ_FRAMEBUFFER_BINDING: u32 = 36010; +pub const GL_RENDERBUFFER_SAMPLES: u32 = 36011; +pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: u32 = 36048; +pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: u32 = 36049; +pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: u32 = 36050; +pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: u32 = 36051; +pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: u32 = 36052; +pub const GL_FRAMEBUFFER_COMPLETE: u32 = 36053; +pub const GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: u32 = 36054; +pub const GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: u32 = 36055; +pub const GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: u32 = 36059; +pub const GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: u32 = 36060; +pub const GL_FRAMEBUFFER_UNSUPPORTED: u32 = 36061; +pub const GL_MAX_COLOR_ATTACHMENTS: u32 = 36063; +pub const GL_COLOR_ATTACHMENT0: u32 = 36064; +pub const GL_COLOR_ATTACHMENT1: u32 = 36065; +pub const GL_COLOR_ATTACHMENT2: u32 = 36066; +pub const GL_COLOR_ATTACHMENT3: u32 = 36067; +pub const GL_COLOR_ATTACHMENT4: u32 = 36068; +pub const GL_COLOR_ATTACHMENT5: u32 = 36069; +pub const GL_COLOR_ATTACHMENT6: u32 = 36070; +pub const GL_COLOR_ATTACHMENT7: u32 = 36071; +pub const GL_COLOR_ATTACHMENT8: u32 = 36072; +pub const GL_COLOR_ATTACHMENT9: u32 = 36073; +pub const GL_COLOR_ATTACHMENT10: u32 = 36074; +pub const GL_COLOR_ATTACHMENT11: u32 = 36075; +pub const GL_COLOR_ATTACHMENT12: u32 = 36076; +pub const GL_COLOR_ATTACHMENT13: u32 = 36077; +pub const GL_COLOR_ATTACHMENT14: u32 = 36078; +pub const GL_COLOR_ATTACHMENT15: u32 = 36079; +pub const GL_COLOR_ATTACHMENT16: u32 = 36080; +pub const GL_COLOR_ATTACHMENT17: u32 = 36081; +pub const GL_COLOR_ATTACHMENT18: u32 = 36082; +pub const GL_COLOR_ATTACHMENT19: u32 = 36083; +pub const GL_COLOR_ATTACHMENT20: u32 = 36084; +pub const GL_COLOR_ATTACHMENT21: u32 = 36085; +pub const GL_COLOR_ATTACHMENT22: u32 = 36086; +pub const GL_COLOR_ATTACHMENT23: u32 = 36087; +pub const GL_COLOR_ATTACHMENT24: u32 = 36088; +pub const GL_COLOR_ATTACHMENT25: u32 = 36089; +pub const GL_COLOR_ATTACHMENT26: u32 = 36090; +pub const GL_COLOR_ATTACHMENT27: u32 = 36091; +pub const GL_COLOR_ATTACHMENT28: u32 = 36092; +pub const GL_COLOR_ATTACHMENT29: u32 = 36093; +pub const GL_COLOR_ATTACHMENT30: u32 = 36094; +pub const GL_COLOR_ATTACHMENT31: u32 = 36095; +pub const GL_DEPTH_ATTACHMENT: u32 = 36096; +pub const GL_STENCIL_ATTACHMENT: u32 = 36128; +pub const GL_FRAMEBUFFER: u32 = 36160; +pub const GL_RENDERBUFFER: u32 = 36161; +pub const GL_RENDERBUFFER_WIDTH: u32 = 36162; +pub const GL_RENDERBUFFER_HEIGHT: u32 = 36163; +pub const GL_RENDERBUFFER_INTERNAL_FORMAT: u32 = 36164; +pub const GL_STENCIL_INDEX1: u32 = 36166; +pub const GL_STENCIL_INDEX4: u32 = 36167; +pub const GL_STENCIL_INDEX8: u32 = 36168; +pub const GL_STENCIL_INDEX16: u32 = 36169; +pub const GL_RENDERBUFFER_RED_SIZE: u32 = 36176; +pub const GL_RENDERBUFFER_GREEN_SIZE: u32 = 36177; +pub const GL_RENDERBUFFER_BLUE_SIZE: u32 = 36178; +pub const GL_RENDERBUFFER_ALPHA_SIZE: u32 = 36179; +pub const GL_RENDERBUFFER_DEPTH_SIZE: u32 = 36180; +pub const GL_RENDERBUFFER_STENCIL_SIZE: u32 = 36181; +pub const GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: u32 = 36182; +pub const GL_MAX_SAMPLES: u32 = 36183; +pub const GL_FRAMEBUFFER_SRGB: u32 = 36281; +pub const GL_HALF_FLOAT: u32 = 5131; +pub const GL_MAP_READ_BIT: u32 = 1; +pub const GL_MAP_WRITE_BIT: u32 = 2; +pub const GL_MAP_INVALIDATE_RANGE_BIT: u32 = 4; +pub const GL_MAP_INVALIDATE_BUFFER_BIT: u32 = 8; +pub const GL_MAP_FLUSH_EXPLICIT_BIT: u32 = 16; +pub const GL_MAP_UNSYNCHRONIZED_BIT: u32 = 32; +pub const GL_COMPRESSED_RED_RGTC1: u32 = 36283; +pub const GL_COMPRESSED_SIGNED_RED_RGTC1: u32 = 36284; +pub const GL_COMPRESSED_RG_RGTC2: u32 = 36285; +pub const GL_COMPRESSED_SIGNED_RG_RGTC2: u32 = 36286; +pub const GL_RG: u32 = 33319; +pub const GL_RG_INTEGER: u32 = 33320; +pub const GL_R8: u32 = 33321; +pub const GL_R16: u32 = 33322; +pub const GL_RG8: u32 = 33323; +pub const GL_RG16: u32 = 33324; +pub const GL_R16F: u32 = 33325; +pub const GL_R32F: u32 = 33326; +pub const GL_RG16F: u32 = 33327; +pub const GL_RG32F: u32 = 33328; +pub const GL_R8I: u32 = 33329; +pub const GL_R8UI: u32 = 33330; +pub const GL_R16I: u32 = 33331; +pub const GL_R16UI: u32 = 33332; +pub const GL_R32I: u32 = 33333; +pub const GL_R32UI: u32 = 33334; +pub const GL_RG8I: u32 = 33335; +pub const GL_RG8UI: u32 = 33336; +pub const GL_RG16I: u32 = 33337; +pub const GL_RG16UI: u32 = 33338; +pub const GL_RG32I: u32 = 33339; +pub const GL_RG32UI: u32 = 33340; +pub const GL_VERTEX_ARRAY_BINDING: u32 = 34229; +pub const GL_SAMPLER_2D_RECT: u32 = 35683; +pub const GL_SAMPLER_2D_RECT_SHADOW: u32 = 35684; +pub const GL_SAMPLER_BUFFER: u32 = 36290; +pub const GL_INT_SAMPLER_2D_RECT: u32 = 36301; +pub const GL_INT_SAMPLER_BUFFER: u32 = 36304; +pub const GL_UNSIGNED_INT_SAMPLER_2D_RECT: u32 = 36309; +pub const GL_UNSIGNED_INT_SAMPLER_BUFFER: u32 = 36312; +pub const GL_TEXTURE_BUFFER: u32 = 35882; +pub const GL_MAX_TEXTURE_BUFFER_SIZE: u32 = 35883; +pub const GL_TEXTURE_BINDING_BUFFER: u32 = 35884; +pub const GL_TEXTURE_BUFFER_DATA_STORE_BINDING: u32 = 35885; +pub const GL_TEXTURE_RECTANGLE: u32 = 34037; +pub const GL_TEXTURE_BINDING_RECTANGLE: u32 = 34038; +pub const GL_PROXY_TEXTURE_RECTANGLE: u32 = 34039; +pub const GL_MAX_RECTANGLE_TEXTURE_SIZE: u32 = 34040; +pub const GL_R8_SNORM: u32 = 36756; +pub const GL_RG8_SNORM: u32 = 36757; +pub const GL_RGB8_SNORM: u32 = 36758; +pub const GL_RGBA8_SNORM: u32 = 36759; +pub const GL_R16_SNORM: u32 = 36760; +pub const GL_RG16_SNORM: u32 = 36761; +pub const GL_RGB16_SNORM: u32 = 36762; +pub const GL_RGBA16_SNORM: u32 = 36763; +pub const GL_SIGNED_NORMALIZED: u32 = 36764; +pub const GL_PRIMITIVE_RESTART: u32 = 36765; +pub const GL_PRIMITIVE_RESTART_INDEX: u32 = 36766; +pub const GL_COPY_READ_BUFFER: u32 = 36662; +pub const GL_COPY_WRITE_BUFFER: u32 = 36663; +pub const GL_UNIFORM_BUFFER: u32 = 35345; +pub const GL_UNIFORM_BUFFER_BINDING: u32 = 35368; +pub const GL_UNIFORM_BUFFER_START: u32 = 35369; +pub const GL_UNIFORM_BUFFER_SIZE: u32 = 35370; +pub const GL_MAX_VERTEX_UNIFORM_BLOCKS: u32 = 35371; +pub const GL_MAX_GEOMETRY_UNIFORM_BLOCKS: u32 = 35372; +pub const GL_MAX_FRAGMENT_UNIFORM_BLOCKS: u32 = 35373; +pub const GL_MAX_COMBINED_UNIFORM_BLOCKS: u32 = 35374; +pub const GL_MAX_UNIFORM_BUFFER_BINDINGS: u32 = 35375; +pub const GL_MAX_UNIFORM_BLOCK_SIZE: u32 = 35376; +pub const GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: u32 = 35377; +pub const GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS: u32 = 35378; +pub const GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35379; +pub const GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: u32 = 35380; +pub const GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: u32 = 35381; +pub const GL_ACTIVE_UNIFORM_BLOCKS: u32 = 35382; +pub const GL_UNIFORM_TYPE: u32 = 35383; +pub const GL_UNIFORM_SIZE: u32 = 35384; +pub const GL_UNIFORM_NAME_LENGTH: u32 = 35385; +pub const GL_UNIFORM_BLOCK_INDEX: u32 = 35386; +pub const GL_UNIFORM_OFFSET: u32 = 35387; +pub const GL_UNIFORM_ARRAY_STRIDE: u32 = 35388; +pub const GL_UNIFORM_MATRIX_STRIDE: u32 = 35389; +pub const GL_UNIFORM_IS_ROW_MAJOR: u32 = 35390; +pub const GL_UNIFORM_BLOCK_BINDING: u32 = 35391; +pub const GL_UNIFORM_BLOCK_DATA_SIZE: u32 = 35392; +pub const GL_UNIFORM_BLOCK_NAME_LENGTH: u32 = 35393; +pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: u32 = 35394; +pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: u32 = 35395; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: u32 = 35396; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER: u32 = 35397; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: u32 = 35398; +pub const GL_INVALID_INDEX: u32 = 4294967295; +pub const GL_CONTEXT_CORE_PROFILE_BIT: u32 = 1; +pub const GL_CONTEXT_COMPATIBILITY_PROFILE_BIT: u32 = 2; +pub const GL_LINES_ADJACENCY: u32 = 10; +pub const GL_LINE_STRIP_ADJACENCY: u32 = 11; +pub const GL_TRIANGLES_ADJACENCY: u32 = 12; +pub const GL_TRIANGLE_STRIP_ADJACENCY: u32 = 13; +pub const GL_PROGRAM_POINT_SIZE: u32 = 34370; +pub const GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS: u32 = 35881; +pub const GL_FRAMEBUFFER_ATTACHMENT_LAYERED: u32 = 36263; +pub const GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: u32 = 36264; +pub const GL_GEOMETRY_SHADER: u32 = 36313; +pub const GL_GEOMETRY_VERTICES_OUT: u32 = 35094; +pub const GL_GEOMETRY_INPUT_TYPE: u32 = 35095; +pub const GL_GEOMETRY_OUTPUT_TYPE: u32 = 35096; +pub const GL_MAX_GEOMETRY_UNIFORM_COMPONENTS: u32 = 36319; +pub const GL_MAX_GEOMETRY_OUTPUT_VERTICES: u32 = 36320; +pub const GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: u32 = 36321; +pub const GL_MAX_VERTEX_OUTPUT_COMPONENTS: u32 = 37154; +pub const GL_MAX_GEOMETRY_INPUT_COMPONENTS: u32 = 37155; +pub const GL_MAX_GEOMETRY_OUTPUT_COMPONENTS: u32 = 37156; +pub const GL_MAX_FRAGMENT_INPUT_COMPONENTS: u32 = 37157; +pub const GL_CONTEXT_PROFILE_MASK: u32 = 37158; +pub const GL_DEPTH_CLAMP: u32 = 34383; +pub const GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: u32 = 36428; +pub const GL_FIRST_VERTEX_CONVENTION: u32 = 36429; +pub const GL_LAST_VERTEX_CONVENTION: u32 = 36430; +pub const GL_PROVOKING_VERTEX: u32 = 36431; +pub const GL_TEXTURE_CUBE_MAP_SEAMLESS: u32 = 34895; +pub const GL_MAX_SERVER_WAIT_TIMEOUT: u32 = 37137; +pub const GL_OBJECT_TYPE: u32 = 37138; +pub const GL_SYNC_CONDITION: u32 = 37139; +pub const GL_SYNC_STATUS: u32 = 37140; +pub const GL_SYNC_FLAGS: u32 = 37141; +pub const GL_SYNC_FENCE: u32 = 37142; +pub const GL_SYNC_GPU_COMMANDS_COMPLETE: u32 = 37143; +pub const GL_UNSIGNALED: u32 = 37144; +pub const GL_SIGNALED: u32 = 37145; +pub const GL_ALREADY_SIGNALED: u32 = 37146; +pub const GL_TIMEOUT_EXPIRED: u32 = 37147; +pub const GL_CONDITION_SATISFIED: u32 = 37148; +pub const GL_WAIT_FAILED: u32 = 37149; +pub const GL_TIMEOUT_IGNORED: i32 = -1; +pub const GL_SYNC_FLUSH_COMMANDS_BIT: u32 = 1; +pub const GL_SAMPLE_POSITION: u32 = 36432; +pub const GL_SAMPLE_MASK: u32 = 36433; +pub const GL_SAMPLE_MASK_VALUE: u32 = 36434; +pub const GL_MAX_SAMPLE_MASK_WORDS: u32 = 36441; +pub const GL_TEXTURE_2D_MULTISAMPLE: u32 = 37120; +pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE: u32 = 37121; +pub const GL_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37122; +pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37123; +pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE: u32 = 37124; +pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: u32 = 37125; +pub const GL_TEXTURE_SAMPLES: u32 = 37126; +pub const GL_TEXTURE_FIXED_SAMPLE_LOCATIONS: u32 = 37127; +pub const GL_SAMPLER_2D_MULTISAMPLE: u32 = 37128; +pub const GL_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37129; +pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37130; +pub const GL_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37131; +pub const GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37132; +pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37133; +pub const GL_MAX_COLOR_TEXTURE_SAMPLES: u32 = 37134; +pub const GL_MAX_DEPTH_TEXTURE_SAMPLES: u32 = 37135; +pub const GL_MAX_INTEGER_SAMPLES: u32 = 37136; +pub const GL_VERTEX_ATTRIB_ARRAY_DIVISOR: u32 = 35070; +pub const GL_SRC1_COLOR: u32 = 35065; +pub const GL_ONE_MINUS_SRC1_COLOR: u32 = 35066; +pub const GL_ONE_MINUS_SRC1_ALPHA: u32 = 35067; +pub const GL_MAX_DUAL_SOURCE_DRAW_BUFFERS: u32 = 35068; +pub const GL_ANY_SAMPLES_PASSED: u32 = 35887; +pub const GL_SAMPLER_BINDING: u32 = 35097; +pub const GL_RGB10_A2UI: u32 = 36975; +pub const GL_TEXTURE_SWIZZLE_R: u32 = 36418; +pub const GL_TEXTURE_SWIZZLE_G: u32 = 36419; +pub const GL_TEXTURE_SWIZZLE_B: u32 = 36420; +pub const GL_TEXTURE_SWIZZLE_A: u32 = 36421; +pub const GL_TEXTURE_SWIZZLE_RGBA: u32 = 36422; +pub const GL_TIME_ELAPSED: u32 = 35007; +pub const GL_TIMESTAMP: u32 = 36392; +pub const GL_INT_2_10_10_10_REV: u32 = 36255; +pub const GL_SAMPLE_SHADING: u32 = 35894; +pub const GL_MIN_SAMPLE_SHADING_VALUE: u32 = 35895; +pub const GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET: u32 = 36446; +pub const GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET: u32 = 36447; +pub const GL_TEXTURE_CUBE_MAP_ARRAY: u32 = 36873; +pub const GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: u32 = 36874; +pub const GL_PROXY_TEXTURE_CUBE_MAP_ARRAY: u32 = 36875; +pub const GL_SAMPLER_CUBE_MAP_ARRAY: u32 = 36876; +pub const GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: u32 = 36877; +pub const GL_INT_SAMPLER_CUBE_MAP_ARRAY: u32 = 36878; +pub const GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: u32 = 36879; +pub const GL_DRAW_INDIRECT_BUFFER: u32 = 36671; +pub const GL_DRAW_INDIRECT_BUFFER_BINDING: u32 = 36675; +pub const GL_GEOMETRY_SHADER_INVOCATIONS: u32 = 34943; +pub const GL_MAX_GEOMETRY_SHADER_INVOCATIONS: u32 = 36442; +pub const GL_MIN_FRAGMENT_INTERPOLATION_OFFSET: u32 = 36443; +pub const GL_MAX_FRAGMENT_INTERPOLATION_OFFSET: u32 = 36444; +pub const GL_FRAGMENT_INTERPOLATION_OFFSET_BITS: u32 = 36445; +pub const GL_MAX_VERTEX_STREAMS: u32 = 36465; +pub const GL_DOUBLE_VEC2: u32 = 36860; +pub const GL_DOUBLE_VEC3: u32 = 36861; +pub const GL_DOUBLE_VEC4: u32 = 36862; +pub const GL_DOUBLE_MAT2: u32 = 36678; +pub const GL_DOUBLE_MAT3: u32 = 36679; +pub const GL_DOUBLE_MAT4: u32 = 36680; +pub const GL_DOUBLE_MAT2x3: u32 = 36681; +pub const GL_DOUBLE_MAT2x4: u32 = 36682; +pub const GL_DOUBLE_MAT3x2: u32 = 36683; +pub const GL_DOUBLE_MAT3x4: u32 = 36684; +pub const GL_DOUBLE_MAT4x2: u32 = 36685; +pub const GL_DOUBLE_MAT4x3: u32 = 36686; +pub const GL_ACTIVE_SUBROUTINES: u32 = 36325; +pub const GL_ACTIVE_SUBROUTINE_UNIFORMS: u32 = 36326; +pub const GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS: u32 = 36423; +pub const GL_ACTIVE_SUBROUTINE_MAX_LENGTH: u32 = 36424; +pub const GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH: u32 = 36425; +pub const GL_MAX_SUBROUTINES: u32 = 36327; +pub const GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS: u32 = 36328; +pub const GL_NUM_COMPATIBLE_SUBROUTINES: u32 = 36426; +pub const GL_COMPATIBLE_SUBROUTINES: u32 = 36427; +pub const GL_PATCHES: u32 = 14; +pub const GL_PATCH_VERTICES: u32 = 36466; +pub const GL_PATCH_DEFAULT_INNER_LEVEL: u32 = 36467; +pub const GL_PATCH_DEFAULT_OUTER_LEVEL: u32 = 36468; +pub const GL_TESS_CONTROL_OUTPUT_VERTICES: u32 = 36469; +pub const GL_TESS_GEN_MODE: u32 = 36470; +pub const GL_TESS_GEN_SPACING: u32 = 36471; +pub const GL_TESS_GEN_VERTEX_ORDER: u32 = 36472; +pub const GL_TESS_GEN_POINT_MODE: u32 = 36473; +pub const GL_ISOLINES: u32 = 36474; +pub const GL_QUADS: u32 = 7; +pub const GL_FRACTIONAL_ODD: u32 = 36475; +pub const GL_FRACTIONAL_EVEN: u32 = 36476; +pub const GL_MAX_PATCH_VERTICES: u32 = 36477; +pub const GL_MAX_TESS_GEN_LEVEL: u32 = 36478; +pub const GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS: u32 = 36479; +pub const GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS: u32 = 36480; +pub const GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS: u32 = 36481; +pub const GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS: u32 = 36482; +pub const GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS: u32 = 36483; +pub const GL_MAX_TESS_PATCH_COMPONENTS: u32 = 36484; +pub const GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS: u32 = 36485; +pub const GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS: u32 = 36486; +pub const GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS: u32 = 36489; +pub const GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS: u32 = 36490; +pub const GL_MAX_TESS_CONTROL_INPUT_COMPONENTS: u32 = 34924; +pub const GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS: u32 = 34925; +pub const GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS: u32 = 36382; +pub const GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS: u32 = 36383; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER: u32 = 34032; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER: u32 = 34033; +pub const GL_TESS_EVALUATION_SHADER: u32 = 36487; +pub const GL_TESS_CONTROL_SHADER: u32 = 36488; +pub const GL_TRANSFORM_FEEDBACK: u32 = 36386; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED: u32 = 36387; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE: u32 = 36388; +pub const GL_TRANSFORM_FEEDBACK_BINDING: u32 = 36389; +pub const GL_MAX_TRANSFORM_FEEDBACK_BUFFERS: u32 = 36464; +pub const GL_FIXED: u32 = 5132; +pub const GL_IMPLEMENTATION_COLOR_READ_TYPE: u32 = 35738; +pub const GL_IMPLEMENTATION_COLOR_READ_FORMAT: u32 = 35739; +pub const GL_LOW_FLOAT: u32 = 36336; +pub const GL_MEDIUM_FLOAT: u32 = 36337; +pub const GL_HIGH_FLOAT: u32 = 36338; +pub const GL_LOW_INT: u32 = 36339; +pub const GL_MEDIUM_INT: u32 = 36340; +pub const GL_HIGH_INT: u32 = 36341; +pub const GL_SHADER_COMPILER: u32 = 36346; +pub const GL_SHADER_BINARY_FORMATS: u32 = 36344; +pub const GL_NUM_SHADER_BINARY_FORMATS: u32 = 36345; +pub const GL_MAX_VERTEX_UNIFORM_VECTORS: u32 = 36347; +pub const GL_MAX_VARYING_VECTORS: u32 = 36348; +pub const GL_MAX_FRAGMENT_UNIFORM_VECTORS: u32 = 36349; +pub const GL_RGB565: u32 = 36194; +pub const GL_PROGRAM_BINARY_RETRIEVABLE_HINT: u32 = 33367; +pub const GL_PROGRAM_BINARY_LENGTH: u32 = 34625; +pub const GL_NUM_PROGRAM_BINARY_FORMATS: u32 = 34814; +pub const GL_PROGRAM_BINARY_FORMATS: u32 = 34815; +pub const GL_VERTEX_SHADER_BIT: u32 = 1; +pub const GL_FRAGMENT_SHADER_BIT: u32 = 2; +pub const GL_GEOMETRY_SHADER_BIT: u32 = 4; +pub const GL_TESS_CONTROL_SHADER_BIT: u32 = 8; +pub const GL_TESS_EVALUATION_SHADER_BIT: u32 = 16; +pub const GL_ALL_SHADER_BITS: u32 = 4294967295; +pub const GL_PROGRAM_SEPARABLE: u32 = 33368; +pub const GL_ACTIVE_PROGRAM: u32 = 33369; +pub const GL_PROGRAM_PIPELINE_BINDING: u32 = 33370; +pub const GL_MAX_VIEWPORTS: u32 = 33371; +pub const GL_VIEWPORT_SUBPIXEL_BITS: u32 = 33372; +pub const GL_VIEWPORT_BOUNDS_RANGE: u32 = 33373; +pub const GL_LAYER_PROVOKING_VERTEX: u32 = 33374; +pub const GL_VIEWPORT_INDEX_PROVOKING_VERTEX: u32 = 33375; +pub const GL_UNDEFINED_VERTEX: u32 = 33376; +pub const GL_COPY_READ_BUFFER_BINDING: u32 = 36662; +pub const GL_COPY_WRITE_BUFFER_BINDING: u32 = 36663; +pub const GL_TRANSFORM_FEEDBACK_ACTIVE: u32 = 36388; +pub const GL_TRANSFORM_FEEDBACK_PAUSED: u32 = 36387; +pub const GL_UNPACK_COMPRESSED_BLOCK_WIDTH: u32 = 37159; +pub const GL_UNPACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37160; +pub const GL_UNPACK_COMPRESSED_BLOCK_DEPTH: u32 = 37161; +pub const GL_UNPACK_COMPRESSED_BLOCK_SIZE: u32 = 37162; +pub const GL_PACK_COMPRESSED_BLOCK_WIDTH: u32 = 37163; +pub const GL_PACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37164; +pub const GL_PACK_COMPRESSED_BLOCK_DEPTH: u32 = 37165; +pub const GL_PACK_COMPRESSED_BLOCK_SIZE: u32 = 37166; +pub const GL_NUM_SAMPLE_COUNTS: u32 = 37760; +pub const GL_MIN_MAP_BUFFER_ALIGNMENT: u32 = 37052; +pub const GL_ATOMIC_COUNTER_BUFFER: u32 = 37568; +pub const GL_ATOMIC_COUNTER_BUFFER_BINDING: u32 = 37569; +pub const GL_ATOMIC_COUNTER_BUFFER_START: u32 = 37570; +pub const GL_ATOMIC_COUNTER_BUFFER_SIZE: u32 = 37571; +pub const GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE: u32 = 37572; +pub const GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS: u32 = 37573; +pub const GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES: u32 = 37574; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER: u32 = 37575; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER: u32 = 37576; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER: u32 = 37577; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER: u32 = 37578; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER: u32 = 37579; +pub const GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS: u32 = 37580; +pub const GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS: u32 = 37581; +pub const GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS: u32 = 37582; +pub const GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS: u32 = 37583; +pub const GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS: u32 = 37584; +pub const GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS: u32 = 37585; +pub const GL_MAX_VERTEX_ATOMIC_COUNTERS: u32 = 37586; +pub const GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS: u32 = 37587; +pub const GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS: u32 = 37588; +pub const GL_MAX_GEOMETRY_ATOMIC_COUNTERS: u32 = 37589; +pub const GL_MAX_FRAGMENT_ATOMIC_COUNTERS: u32 = 37590; +pub const GL_MAX_COMBINED_ATOMIC_COUNTERS: u32 = 37591; +pub const GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE: u32 = 37592; +pub const GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS: u32 = 37596; +pub const GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: u32 = 37593; +pub const GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX: u32 = 37594; +pub const GL_UNSIGNED_INT_ATOMIC_COUNTER: u32 = 37595; +pub const GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT: u32 = 1; +pub const GL_ELEMENT_ARRAY_BARRIER_BIT: u32 = 2; +pub const GL_UNIFORM_BARRIER_BIT: u32 = 4; +pub const GL_TEXTURE_FETCH_BARRIER_BIT: u32 = 8; +pub const GL_SHADER_IMAGE_ACCESS_BARRIER_BIT: u32 = 32; +pub const GL_COMMAND_BARRIER_BIT: u32 = 64; +pub const GL_PIXEL_BUFFER_BARRIER_BIT: u32 = 128; +pub const GL_TEXTURE_UPDATE_BARRIER_BIT: u32 = 256; +pub const GL_BUFFER_UPDATE_BARRIER_BIT: u32 = 512; +pub const GL_FRAMEBUFFER_BARRIER_BIT: u32 = 1024; +pub const GL_TRANSFORM_FEEDBACK_BARRIER_BIT: u32 = 2048; +pub const GL_ATOMIC_COUNTER_BARRIER_BIT: u32 = 4096; +pub const GL_ALL_BARRIER_BITS: u32 = 4294967295; +pub const GL_MAX_IMAGE_UNITS: u32 = 36664; +pub const GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS: u32 = 36665; +pub const GL_IMAGE_BINDING_NAME: u32 = 36666; +pub const GL_IMAGE_BINDING_LEVEL: u32 = 36667; +pub const GL_IMAGE_BINDING_LAYERED: u32 = 36668; +pub const GL_IMAGE_BINDING_LAYER: u32 = 36669; +pub const GL_IMAGE_BINDING_ACCESS: u32 = 36670; +pub const GL_IMAGE_1D: u32 = 36940; +pub const GL_IMAGE_2D: u32 = 36941; +pub const GL_IMAGE_3D: u32 = 36942; +pub const GL_IMAGE_2D_RECT: u32 = 36943; +pub const GL_IMAGE_CUBE: u32 = 36944; +pub const GL_IMAGE_BUFFER: u32 = 36945; +pub const GL_IMAGE_1D_ARRAY: u32 = 36946; +pub const GL_IMAGE_2D_ARRAY: u32 = 36947; +pub const GL_IMAGE_CUBE_MAP_ARRAY: u32 = 36948; +pub const GL_IMAGE_2D_MULTISAMPLE: u32 = 36949; +pub const GL_IMAGE_2D_MULTISAMPLE_ARRAY: u32 = 36950; +pub const GL_INT_IMAGE_1D: u32 = 36951; +pub const GL_INT_IMAGE_2D: u32 = 36952; +pub const GL_INT_IMAGE_3D: u32 = 36953; +pub const GL_INT_IMAGE_2D_RECT: u32 = 36954; +pub const GL_INT_IMAGE_CUBE: u32 = 36955; +pub const GL_INT_IMAGE_BUFFER: u32 = 36956; +pub const GL_INT_IMAGE_1D_ARRAY: u32 = 36957; +pub const GL_INT_IMAGE_2D_ARRAY: u32 = 36958; +pub const GL_INT_IMAGE_CUBE_MAP_ARRAY: u32 = 36959; +pub const GL_INT_IMAGE_2D_MULTISAMPLE: u32 = 36960; +pub const GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY: u32 = 36961; +pub const GL_UNSIGNED_INT_IMAGE_1D: u32 = 36962; +pub const GL_UNSIGNED_INT_IMAGE_2D: u32 = 36963; +pub const GL_UNSIGNED_INT_IMAGE_3D: u32 = 36964; +pub const GL_UNSIGNED_INT_IMAGE_2D_RECT: u32 = 36965; +pub const GL_UNSIGNED_INT_IMAGE_CUBE: u32 = 36966; +pub const GL_UNSIGNED_INT_IMAGE_BUFFER: u32 = 36967; +pub const GL_UNSIGNED_INT_IMAGE_1D_ARRAY: u32 = 36968; +pub const GL_UNSIGNED_INT_IMAGE_2D_ARRAY: u32 = 36969; +pub const GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY: u32 = 36970; +pub const GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE: u32 = 36971; +pub const GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY: u32 = 36972; +pub const GL_MAX_IMAGE_SAMPLES: u32 = 36973; +pub const GL_IMAGE_BINDING_FORMAT: u32 = 36974; +pub const GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: u32 = 37063; +pub const GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE: u32 = 37064; +pub const GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS: u32 = 37065; +pub const GL_MAX_VERTEX_IMAGE_UNIFORMS: u32 = 37066; +pub const GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS: u32 = 37067; +pub const GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS: u32 = 37068; +pub const GL_MAX_GEOMETRY_IMAGE_UNIFORMS: u32 = 37069; +pub const GL_MAX_FRAGMENT_IMAGE_UNIFORMS: u32 = 37070; +pub const GL_MAX_COMBINED_IMAGE_UNIFORMS: u32 = 37071; +pub const GL_COMPRESSED_RGBA_BPTC_UNORM: u32 = 36492; +pub const GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM: u32 = 36493; +pub const GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT: u32 = 36494; +pub const GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT: u32 = 36495; +pub const GL_TEXTURE_IMMUTABLE_FORMAT: u32 = 37167; +pub const GL_NUM_SHADING_LANGUAGE_VERSIONS: u32 = 33513; +pub const GL_VERTEX_ATTRIB_ARRAY_LONG: u32 = 34638; +pub const GL_COMPRESSED_RGB8_ETC2: u32 = 37492; +pub const GL_COMPRESSED_SRGB8_ETC2: u32 = 37493; +pub const GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37494; +pub const GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37495; +pub const GL_COMPRESSED_RGBA8_ETC2_EAC: u32 = 37496; +pub const GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: u32 = 37497; +pub const GL_COMPRESSED_R11_EAC: u32 = 37488; +pub const GL_COMPRESSED_SIGNED_R11_EAC: u32 = 37489; +pub const GL_COMPRESSED_RG11_EAC: u32 = 37490; +pub const GL_COMPRESSED_SIGNED_RG11_EAC: u32 = 37491; +pub const GL_PRIMITIVE_RESTART_FIXED_INDEX: u32 = 36201; +pub const GL_ANY_SAMPLES_PASSED_CONSERVATIVE: u32 = 36202; +pub const GL_MAX_ELEMENT_INDEX: u32 = 36203; +pub const GL_COMPUTE_SHADER: u32 = 37305; +pub const GL_MAX_COMPUTE_UNIFORM_BLOCKS: u32 = 37307; +pub const GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS: u32 = 37308; +pub const GL_MAX_COMPUTE_IMAGE_UNIFORMS: u32 = 37309; +pub const GL_MAX_COMPUTE_SHARED_MEMORY_SIZE: u32 = 33378; +pub const GL_MAX_COMPUTE_UNIFORM_COMPONENTS: u32 = 33379; +pub const GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS: u32 = 33380; +pub const GL_MAX_COMPUTE_ATOMIC_COUNTERS: u32 = 33381; +pub const GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS: u32 = 33382; +pub const GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS: u32 = 37099; +pub const GL_MAX_COMPUTE_WORK_GROUP_COUNT: u32 = 37310; +pub const GL_MAX_COMPUTE_WORK_GROUP_SIZE: u32 = 37311; +pub const GL_COMPUTE_WORK_GROUP_SIZE: u32 = 33383; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER: u32 = 37100; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER: u32 = 37101; +pub const GL_DISPATCH_INDIRECT_BUFFER: u32 = 37102; +pub const GL_DISPATCH_INDIRECT_BUFFER_BINDING: u32 = 37103; +pub const GL_COMPUTE_SHADER_BIT: u32 = 32; +pub const GL_DEBUG_OUTPUT_SYNCHRONOUS: u32 = 33346; +pub const GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH: u32 = 33347; +pub const GL_DEBUG_CALLBACK_FUNCTION: u32 = 33348; +pub const GL_DEBUG_CALLBACK_USER_PARAM: u32 = 33349; +pub const GL_DEBUG_SOURCE_API: u32 = 33350; +pub const GL_DEBUG_SOURCE_WINDOW_SYSTEM: u32 = 33351; +pub const GL_DEBUG_SOURCE_SHADER_COMPILER: u32 = 33352; +pub const GL_DEBUG_SOURCE_THIRD_PARTY: u32 = 33353; +pub const GL_DEBUG_SOURCE_APPLICATION: u32 = 33354; +pub const GL_DEBUG_SOURCE_OTHER: u32 = 33355; +pub const GL_DEBUG_TYPE_ERROR: u32 = 33356; +pub const GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: u32 = 33357; +pub const GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: u32 = 33358; +pub const GL_DEBUG_TYPE_PORTABILITY: u32 = 33359; +pub const GL_DEBUG_TYPE_PERFORMANCE: u32 = 33360; +pub const GL_DEBUG_TYPE_OTHER: u32 = 33361; +pub const GL_MAX_DEBUG_MESSAGE_LENGTH: u32 = 37187; +pub const GL_MAX_DEBUG_LOGGED_MESSAGES: u32 = 37188; +pub const GL_DEBUG_LOGGED_MESSAGES: u32 = 37189; +pub const GL_DEBUG_SEVERITY_HIGH: u32 = 37190; +pub const GL_DEBUG_SEVERITY_MEDIUM: u32 = 37191; +pub const GL_DEBUG_SEVERITY_LOW: u32 = 37192; +pub const GL_DEBUG_TYPE_MARKER: u32 = 33384; +pub const GL_DEBUG_TYPE_PUSH_GROUP: u32 = 33385; +pub const GL_DEBUG_TYPE_POP_GROUP: u32 = 33386; +pub const GL_DEBUG_SEVERITY_NOTIFICATION: u32 = 33387; +pub const GL_MAX_DEBUG_GROUP_STACK_DEPTH: u32 = 33388; +pub const GL_DEBUG_GROUP_STACK_DEPTH: u32 = 33389; +pub const GL_BUFFER: u32 = 33504; +pub const GL_SHADER: u32 = 33505; +pub const GL_PROGRAM: u32 = 33506; +pub const GL_VERTEX_ARRAY: u32 = 32884; +pub const GL_QUERY: u32 = 33507; +pub const GL_PROGRAM_PIPELINE: u32 = 33508; +pub const GL_SAMPLER: u32 = 33510; +pub const GL_MAX_LABEL_LENGTH: u32 = 33512; +pub const GL_DEBUG_OUTPUT: u32 = 37600; +pub const GL_CONTEXT_FLAG_DEBUG_BIT: u32 = 2; +pub const GL_MAX_UNIFORM_LOCATIONS: u32 = 33390; +pub const GL_FRAMEBUFFER_DEFAULT_WIDTH: u32 = 37648; +pub const GL_FRAMEBUFFER_DEFAULT_HEIGHT: u32 = 37649; +pub const GL_FRAMEBUFFER_DEFAULT_LAYERS: u32 = 37650; +pub const GL_FRAMEBUFFER_DEFAULT_SAMPLES: u32 = 37651; +pub const GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS: u32 = 37652; +pub const GL_MAX_FRAMEBUFFER_WIDTH: u32 = 37653; +pub const GL_MAX_FRAMEBUFFER_HEIGHT: u32 = 37654; +pub const GL_MAX_FRAMEBUFFER_LAYERS: u32 = 37655; +pub const GL_MAX_FRAMEBUFFER_SAMPLES: u32 = 37656; +pub const GL_INTERNALFORMAT_SUPPORTED: u32 = 33391; +pub const GL_INTERNALFORMAT_PREFERRED: u32 = 33392; +pub const GL_INTERNALFORMAT_RED_SIZE: u32 = 33393; +pub const GL_INTERNALFORMAT_GREEN_SIZE: u32 = 33394; +pub const GL_INTERNALFORMAT_BLUE_SIZE: u32 = 33395; +pub const GL_INTERNALFORMAT_ALPHA_SIZE: u32 = 33396; +pub const GL_INTERNALFORMAT_DEPTH_SIZE: u32 = 33397; +pub const GL_INTERNALFORMAT_STENCIL_SIZE: u32 = 33398; +pub const GL_INTERNALFORMAT_SHARED_SIZE: u32 = 33399; +pub const GL_INTERNALFORMAT_RED_TYPE: u32 = 33400; +pub const GL_INTERNALFORMAT_GREEN_TYPE: u32 = 33401; +pub const GL_INTERNALFORMAT_BLUE_TYPE: u32 = 33402; +pub const GL_INTERNALFORMAT_ALPHA_TYPE: u32 = 33403; +pub const GL_INTERNALFORMAT_DEPTH_TYPE: u32 = 33404; +pub const GL_INTERNALFORMAT_STENCIL_TYPE: u32 = 33405; +pub const GL_MAX_WIDTH: u32 = 33406; +pub const GL_MAX_HEIGHT: u32 = 33407; +pub const GL_MAX_DEPTH: u32 = 33408; +pub const GL_MAX_LAYERS: u32 = 33409; +pub const GL_MAX_COMBINED_DIMENSIONS: u32 = 33410; +pub const GL_COLOR_COMPONENTS: u32 = 33411; +pub const GL_DEPTH_COMPONENTS: u32 = 33412; +pub const GL_STENCIL_COMPONENTS: u32 = 33413; +pub const GL_COLOR_RENDERABLE: u32 = 33414; +pub const GL_DEPTH_RENDERABLE: u32 = 33415; +pub const GL_STENCIL_RENDERABLE: u32 = 33416; +pub const GL_FRAMEBUFFER_RENDERABLE: u32 = 33417; +pub const GL_FRAMEBUFFER_RENDERABLE_LAYERED: u32 = 33418; +pub const GL_FRAMEBUFFER_BLEND: u32 = 33419; +pub const GL_READ_PIXELS: u32 = 33420; +pub const GL_READ_PIXELS_FORMAT: u32 = 33421; +pub const GL_READ_PIXELS_TYPE: u32 = 33422; +pub const GL_TEXTURE_IMAGE_FORMAT: u32 = 33423; +pub const GL_TEXTURE_IMAGE_TYPE: u32 = 33424; +pub const GL_GET_TEXTURE_IMAGE_FORMAT: u32 = 33425; +pub const GL_GET_TEXTURE_IMAGE_TYPE: u32 = 33426; +pub const GL_MIPMAP: u32 = 33427; +pub const GL_MANUAL_GENERATE_MIPMAP: u32 = 33428; +pub const GL_AUTO_GENERATE_MIPMAP: u32 = 33429; +pub const GL_COLOR_ENCODING: u32 = 33430; +pub const GL_SRGB_READ: u32 = 33431; +pub const GL_SRGB_WRITE: u32 = 33432; +pub const GL_FILTER: u32 = 33434; +pub const GL_VERTEX_TEXTURE: u32 = 33435; +pub const GL_TESS_CONTROL_TEXTURE: u32 = 33436; +pub const GL_TESS_EVALUATION_TEXTURE: u32 = 33437; +pub const GL_GEOMETRY_TEXTURE: u32 = 33438; +pub const GL_FRAGMENT_TEXTURE: u32 = 33439; +pub const GL_COMPUTE_TEXTURE: u32 = 33440; +pub const GL_TEXTURE_SHADOW: u32 = 33441; +pub const GL_TEXTURE_GATHER: u32 = 33442; +pub const GL_TEXTURE_GATHER_SHADOW: u32 = 33443; +pub const GL_SHADER_IMAGE_LOAD: u32 = 33444; +pub const GL_SHADER_IMAGE_STORE: u32 = 33445; +pub const GL_SHADER_IMAGE_ATOMIC: u32 = 33446; +pub const GL_IMAGE_TEXEL_SIZE: u32 = 33447; +pub const GL_IMAGE_COMPATIBILITY_CLASS: u32 = 33448; +pub const GL_IMAGE_PIXEL_FORMAT: u32 = 33449; +pub const GL_IMAGE_PIXEL_TYPE: u32 = 33450; +pub const GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: u32 = 33452; +pub const GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: u32 = 33453; +pub const GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: u32 = 33454; +pub const GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: u32 = 33455; +pub const GL_TEXTURE_COMPRESSED_BLOCK_WIDTH: u32 = 33457; +pub const GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT: u32 = 33458; +pub const GL_TEXTURE_COMPRESSED_BLOCK_SIZE: u32 = 33459; +pub const GL_CLEAR_BUFFER: u32 = 33460; +pub const GL_TEXTURE_VIEW: u32 = 33461; +pub const GL_VIEW_COMPATIBILITY_CLASS: u32 = 33462; +pub const GL_FULL_SUPPORT: u32 = 33463; +pub const GL_CAVEAT_SUPPORT: u32 = 33464; +pub const GL_IMAGE_CLASS_4_X_32: u32 = 33465; +pub const GL_IMAGE_CLASS_2_X_32: u32 = 33466; +pub const GL_IMAGE_CLASS_1_X_32: u32 = 33467; +pub const GL_IMAGE_CLASS_4_X_16: u32 = 33468; +pub const GL_IMAGE_CLASS_2_X_16: u32 = 33469; +pub const GL_IMAGE_CLASS_1_X_16: u32 = 33470; +pub const GL_IMAGE_CLASS_4_X_8: u32 = 33471; +pub const GL_IMAGE_CLASS_2_X_8: u32 = 33472; +pub const GL_IMAGE_CLASS_1_X_8: u32 = 33473; +pub const GL_IMAGE_CLASS_11_11_10: u32 = 33474; +pub const GL_IMAGE_CLASS_10_10_10_2: u32 = 33475; +pub const GL_VIEW_CLASS_128_BITS: u32 = 33476; +pub const GL_VIEW_CLASS_96_BITS: u32 = 33477; +pub const GL_VIEW_CLASS_64_BITS: u32 = 33478; +pub const GL_VIEW_CLASS_48_BITS: u32 = 33479; +pub const GL_VIEW_CLASS_32_BITS: u32 = 33480; +pub const GL_VIEW_CLASS_24_BITS: u32 = 33481; +pub const GL_VIEW_CLASS_16_BITS: u32 = 33482; +pub const GL_VIEW_CLASS_8_BITS: u32 = 33483; +pub const GL_VIEW_CLASS_S3TC_DXT1_RGB: u32 = 33484; +pub const GL_VIEW_CLASS_S3TC_DXT1_RGBA: u32 = 33485; +pub const GL_VIEW_CLASS_S3TC_DXT3_RGBA: u32 = 33486; +pub const GL_VIEW_CLASS_S3TC_DXT5_RGBA: u32 = 33487; +pub const GL_VIEW_CLASS_RGTC1_RED: u32 = 33488; +pub const GL_VIEW_CLASS_RGTC2_RG: u32 = 33489; +pub const GL_VIEW_CLASS_BPTC_UNORM: u32 = 33490; +pub const GL_VIEW_CLASS_BPTC_FLOAT: u32 = 33491; +pub const GL_UNIFORM: u32 = 37601; +pub const GL_UNIFORM_BLOCK: u32 = 37602; +pub const GL_PROGRAM_INPUT: u32 = 37603; +pub const GL_PROGRAM_OUTPUT: u32 = 37604; +pub const GL_BUFFER_VARIABLE: u32 = 37605; +pub const GL_SHADER_STORAGE_BLOCK: u32 = 37606; +pub const GL_VERTEX_SUBROUTINE: u32 = 37608; +pub const GL_TESS_CONTROL_SUBROUTINE: u32 = 37609; +pub const GL_TESS_EVALUATION_SUBROUTINE: u32 = 37610; +pub const GL_GEOMETRY_SUBROUTINE: u32 = 37611; +pub const GL_FRAGMENT_SUBROUTINE: u32 = 37612; +pub const GL_COMPUTE_SUBROUTINE: u32 = 37613; +pub const GL_VERTEX_SUBROUTINE_UNIFORM: u32 = 37614; +pub const GL_TESS_CONTROL_SUBROUTINE_UNIFORM: u32 = 37615; +pub const GL_TESS_EVALUATION_SUBROUTINE_UNIFORM: u32 = 37616; +pub const GL_GEOMETRY_SUBROUTINE_UNIFORM: u32 = 37617; +pub const GL_FRAGMENT_SUBROUTINE_UNIFORM: u32 = 37618; +pub const GL_COMPUTE_SUBROUTINE_UNIFORM: u32 = 37619; +pub const GL_TRANSFORM_FEEDBACK_VARYING: u32 = 37620; +pub const GL_ACTIVE_RESOURCES: u32 = 37621; +pub const GL_MAX_NAME_LENGTH: u32 = 37622; +pub const GL_MAX_NUM_ACTIVE_VARIABLES: u32 = 37623; +pub const GL_MAX_NUM_COMPATIBLE_SUBROUTINES: u32 = 37624; +pub const GL_NAME_LENGTH: u32 = 37625; +pub const GL_TYPE: u32 = 37626; +pub const GL_ARRAY_SIZE: u32 = 37627; +pub const GL_OFFSET: u32 = 37628; +pub const GL_BLOCK_INDEX: u32 = 37629; +pub const GL_ARRAY_STRIDE: u32 = 37630; +pub const GL_MATRIX_STRIDE: u32 = 37631; +pub const GL_IS_ROW_MAJOR: u32 = 37632; +pub const GL_ATOMIC_COUNTER_BUFFER_INDEX: u32 = 37633; +pub const GL_BUFFER_BINDING: u32 = 37634; +pub const GL_BUFFER_DATA_SIZE: u32 = 37635; +pub const GL_NUM_ACTIVE_VARIABLES: u32 = 37636; +pub const GL_ACTIVE_VARIABLES: u32 = 37637; +pub const GL_REFERENCED_BY_VERTEX_SHADER: u32 = 37638; +pub const GL_REFERENCED_BY_TESS_CONTROL_SHADER: u32 = 37639; +pub const GL_REFERENCED_BY_TESS_EVALUATION_SHADER: u32 = 37640; +pub const GL_REFERENCED_BY_GEOMETRY_SHADER: u32 = 37641; +pub const GL_REFERENCED_BY_FRAGMENT_SHADER: u32 = 37642; +pub const GL_REFERENCED_BY_COMPUTE_SHADER: u32 = 37643; +pub const GL_TOP_LEVEL_ARRAY_SIZE: u32 = 37644; +pub const GL_TOP_LEVEL_ARRAY_STRIDE: u32 = 37645; +pub const GL_LOCATION: u32 = 37646; +pub const GL_LOCATION_INDEX: u32 = 37647; +pub const GL_IS_PER_PATCH: u32 = 37607; +pub const GL_SHADER_STORAGE_BUFFER: u32 = 37074; +pub const GL_SHADER_STORAGE_BUFFER_BINDING: u32 = 37075; +pub const GL_SHADER_STORAGE_BUFFER_START: u32 = 37076; +pub const GL_SHADER_STORAGE_BUFFER_SIZE: u32 = 37077; +pub const GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: u32 = 37078; +pub const GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS: u32 = 37079; +pub const GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS: u32 = 37080; +pub const GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS: u32 = 37081; +pub const GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS: u32 = 37082; +pub const GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS: u32 = 37083; +pub const GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS: u32 = 37084; +pub const GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS: u32 = 37085; +pub const GL_MAX_SHADER_STORAGE_BLOCK_SIZE: u32 = 37086; +pub const GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT: u32 = 37087; +pub const GL_SHADER_STORAGE_BARRIER_BIT: u32 = 8192; +pub const GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: u32 = 36665; +pub const GL_DEPTH_STENCIL_TEXTURE_MODE: u32 = 37098; +pub const GL_TEXTURE_BUFFER_OFFSET: u32 = 37277; +pub const GL_TEXTURE_BUFFER_SIZE: u32 = 37278; +pub const GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT: u32 = 37279; +pub const GL_TEXTURE_VIEW_MIN_LEVEL: u32 = 33499; +pub const GL_TEXTURE_VIEW_NUM_LEVELS: u32 = 33500; +pub const GL_TEXTURE_VIEW_MIN_LAYER: u32 = 33501; +pub const GL_TEXTURE_VIEW_NUM_LAYERS: u32 = 33502; +pub const GL_TEXTURE_IMMUTABLE_LEVELS: u32 = 33503; +pub const GL_VERTEX_ATTRIB_BINDING: u32 = 33492; +pub const GL_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33493; +pub const GL_VERTEX_BINDING_DIVISOR: u32 = 33494; +pub const GL_VERTEX_BINDING_OFFSET: u32 = 33495; +pub const GL_VERTEX_BINDING_STRIDE: u32 = 33496; +pub const GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33497; +pub const GL_MAX_VERTEX_ATTRIB_BINDINGS: u32 = 33498; +pub const GL_VERTEX_BINDING_BUFFER: u32 = 36687; +pub const GL_DISPLAY_LIST: u32 = 33511; +pub const GL_STACK_UNDERFLOW: u32 = 1284; +pub const GL_STACK_OVERFLOW: u32 = 1283; +pub const GL_MAX_VERTEX_ATTRIB_STRIDE: u32 = 33509; +pub const GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED: u32 = 33313; +pub const GL_TEXTURE_BUFFER_BINDING: u32 = 35882; +pub const GL_MAP_PERSISTENT_BIT: u32 = 64; +pub const GL_MAP_COHERENT_BIT: u32 = 128; +pub const GL_DYNAMIC_STORAGE_BIT: u32 = 256; +pub const GL_CLIENT_STORAGE_BIT: u32 = 512; +pub const GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT: u32 = 16384; +pub const GL_BUFFER_IMMUTABLE_STORAGE: u32 = 33311; +pub const GL_BUFFER_STORAGE_FLAGS: u32 = 33312; +pub const GL_CLEAR_TEXTURE: u32 = 37733; +pub const GL_LOCATION_COMPONENT: u32 = 37706; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_INDEX: u32 = 37707; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE: u32 = 37708; +pub const GL_QUERY_BUFFER: u32 = 37266; +pub const GL_QUERY_BUFFER_BARRIER_BIT: u32 = 32768; +pub const GL_QUERY_BUFFER_BINDING: u32 = 37267; +pub const GL_QUERY_RESULT_NO_WAIT: u32 = 37268; +pub const GL_MIRROR_CLAMP_TO_EDGE: u32 = 34627; +pub const GL_CONTEXT_LOST: u32 = 1287; +pub const GL_NEGATIVE_ONE_TO_ONE: u32 = 37726; +pub const GL_ZERO_TO_ONE: u32 = 37727; +pub const GL_CLIP_ORIGIN: u32 = 37724; +pub const GL_CLIP_DEPTH_MODE: u32 = 37725; +pub const GL_QUERY_WAIT_INVERTED: u32 = 36375; +pub const GL_QUERY_NO_WAIT_INVERTED: u32 = 36376; +pub const GL_QUERY_BY_REGION_WAIT_INVERTED: u32 = 36377; +pub const GL_QUERY_BY_REGION_NO_WAIT_INVERTED: u32 = 36378; +pub const GL_MAX_CULL_DISTANCES: u32 = 33529; +pub const GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES: u32 = 33530; +pub const GL_TEXTURE_TARGET: u32 = 4102; +pub const GL_QUERY_TARGET: u32 = 33514; +pub const GL_GUILTY_CONTEXT_RESET: u32 = 33363; +pub const GL_INNOCENT_CONTEXT_RESET: u32 = 33364; +pub const GL_UNKNOWN_CONTEXT_RESET: u32 = 33365; +pub const GL_RESET_NOTIFICATION_STRATEGY: u32 = 33366; +pub const GL_LOSE_CONTEXT_ON_RESET: u32 = 33362; +pub const GL_NO_RESET_NOTIFICATION: u32 = 33377; +pub const GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT: u32 = 4; +pub const GL_COLOR_TABLE: u32 = 32976; +pub const GL_POST_CONVOLUTION_COLOR_TABLE: u32 = 32977; +pub const GL_POST_COLOR_MATRIX_COLOR_TABLE: u32 = 32978; +pub const GL_PROXY_COLOR_TABLE: u32 = 32979; +pub const GL_PROXY_POST_CONVOLUTION_COLOR_TABLE: u32 = 32980; +pub const GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE: u32 = 32981; +pub const GL_CONVOLUTION_1D: u32 = 32784; +pub const GL_CONVOLUTION_2D: u32 = 32785; +pub const GL_SEPARABLE_2D: u32 = 32786; +pub const GL_HISTOGRAM: u32 = 32804; +pub const GL_PROXY_HISTOGRAM: u32 = 32805; +pub const GL_MINMAX: u32 = 32814; +pub const GL_CONTEXT_RELEASE_BEHAVIOR: u32 = 33531; +pub const GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH: u32 = 33532; +pub const GL_SHADER_BINARY_FORMAT_SPIR_V: u32 = 38225; +pub const GL_SPIR_V_BINARY: u32 = 38226; +pub const GL_PARAMETER_BUFFER: u32 = 33006; +pub const GL_PARAMETER_BUFFER_BINDING: u32 = 33007; +pub const GL_CONTEXT_FLAG_NO_ERROR_BIT: u32 = 8; +pub const GL_VERTICES_SUBMITTED: u32 = 33518; +pub const GL_PRIMITIVES_SUBMITTED: u32 = 33519; +pub const GL_VERTEX_SHADER_INVOCATIONS: u32 = 33520; +pub const GL_TESS_CONTROL_SHADER_PATCHES: u32 = 33521; +pub const GL_TESS_EVALUATION_SHADER_INVOCATIONS: u32 = 33522; +pub const GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED: u32 = 33523; +pub const GL_FRAGMENT_SHADER_INVOCATIONS: u32 = 33524; +pub const GL_COMPUTE_SHADER_INVOCATIONS: u32 = 33525; +pub const GL_CLIPPING_INPUT_PRIMITIVES: u32 = 33526; +pub const GL_CLIPPING_OUTPUT_PRIMITIVES: u32 = 33527; +pub const GL_POLYGON_OFFSET_CLAMP: u32 = 36379; +pub const GL_SPIR_V_EXTENSIONS: u32 = 38227; +pub const GL_NUM_SPIR_V_EXTENSIONS: u32 = 38228; +pub const GL_TEXTURE_MAX_ANISOTROPY: u32 = 34046; +pub const GL_MAX_TEXTURE_MAX_ANISOTROPY: u32 = 34047; +pub const GL_TRANSFORM_FEEDBACK_OVERFLOW: u32 = 33516; +pub const GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW: u32 = 33517; +pub const GL_VERSION_1_0: u32 = 1; +pub const GL_VERSION_1_1: u32 = 1; +pub const GL_VERSION_1_2: u32 = 1; +pub const GL_VERSION_1_3: u32 = 1; +pub const GL_VERSION_1_4: u32 = 1; +pub const GL_VERSION_1_5: u32 = 1; +pub const GL_VERSION_2_0: u32 = 1; +pub const GL_VERSION_2_1: u32 = 1; +pub const GL_VERSION_3_0: u32 = 1; +pub const GL_VERSION_3_1: u32 = 1; +pub const GL_VERSION_3_2: u32 = 1; +pub const GL_VERSION_3_3: u32 = 1; +pub const GL_VERSION_4_0: u32 = 1; +pub const GL_VERSION_4_1: u32 = 1; +pub const GL_VERSION_4_2: u32 = 1; +pub const GL_VERSION_4_3: u32 = 1; +pub const GL_VERSION_4_4: u32 = 1; +pub const GL_VERSION_4_5: u32 = 1; +pub const GL_VERSION_4_6: u32 = 1; +pub const GLFW_VERSION_MAJOR: u32 = 3; +pub const GLFW_VERSION_MINOR: u32 = 4; +pub const GLFW_VERSION_REVISION: u32 = 0; +pub const GLFW_TRUE: u32 = 1; +pub const GLFW_FALSE: u32 = 0; +pub const GLFW_RELEASE: u32 = 0; +pub const GLFW_PRESS: u32 = 1; +pub const GLFW_REPEAT: u32 = 2; +pub const GLFW_HAT_CENTERED: u32 = 0; +pub const GLFW_HAT_UP: u32 = 1; +pub const GLFW_HAT_RIGHT: u32 = 2; +pub const GLFW_HAT_DOWN: u32 = 4; +pub const GLFW_HAT_LEFT: u32 = 8; +pub const GLFW_HAT_RIGHT_UP: u32 = 3; +pub const GLFW_HAT_RIGHT_DOWN: u32 = 6; +pub const GLFW_HAT_LEFT_UP: u32 = 9; +pub const GLFW_HAT_LEFT_DOWN: u32 = 12; +pub const GLFW_KEY_UNKNOWN: i32 = -1; +pub const GLFW_KEY_SPACE: u32 = 32; +pub const GLFW_KEY_APOSTROPHE: u32 = 39; +pub const GLFW_KEY_COMMA: u32 = 44; +pub const GLFW_KEY_MINUS: u32 = 45; +pub const GLFW_KEY_PERIOD: u32 = 46; +pub const GLFW_KEY_SLASH: u32 = 47; +pub const GLFW_KEY_0: u32 = 48; +pub const GLFW_KEY_1: u32 = 49; +pub const GLFW_KEY_2: u32 = 50; +pub const GLFW_KEY_3: u32 = 51; +pub const GLFW_KEY_4: u32 = 52; +pub const GLFW_KEY_5: u32 = 53; +pub const GLFW_KEY_6: u32 = 54; +pub const GLFW_KEY_7: u32 = 55; +pub const GLFW_KEY_8: u32 = 56; +pub const GLFW_KEY_9: u32 = 57; +pub const GLFW_KEY_SEMICOLON: u32 = 59; +pub const GLFW_KEY_EQUAL: u32 = 61; +pub const GLFW_KEY_A: u32 = 65; +pub const GLFW_KEY_B: u32 = 66; +pub const GLFW_KEY_C: u32 = 67; +pub const GLFW_KEY_D: u32 = 68; +pub const GLFW_KEY_E: u32 = 69; +pub const GLFW_KEY_F: u32 = 70; +pub const GLFW_KEY_G: u32 = 71; +pub const GLFW_KEY_H: u32 = 72; +pub const GLFW_KEY_I: u32 = 73; +pub const GLFW_KEY_J: u32 = 74; +pub const GLFW_KEY_K: u32 = 75; +pub const GLFW_KEY_L: u32 = 76; +pub const GLFW_KEY_M: u32 = 77; +pub const GLFW_KEY_N: u32 = 78; +pub const GLFW_KEY_O: u32 = 79; +pub const GLFW_KEY_P: u32 = 80; +pub const GLFW_KEY_Q: u32 = 81; +pub const GLFW_KEY_R: u32 = 82; +pub const GLFW_KEY_S: u32 = 83; +pub const GLFW_KEY_T: u32 = 84; +pub const GLFW_KEY_U: u32 = 85; +pub const GLFW_KEY_V: u32 = 86; +pub const GLFW_KEY_W: u32 = 87; +pub const GLFW_KEY_X: u32 = 88; +pub const GLFW_KEY_Y: u32 = 89; +pub const GLFW_KEY_Z: u32 = 90; +pub const GLFW_KEY_LEFT_BRACKET: u32 = 91; +pub const GLFW_KEY_BACKSLASH: u32 = 92; +pub const GLFW_KEY_RIGHT_BRACKET: u32 = 93; +pub const GLFW_KEY_GRAVE_ACCENT: u32 = 96; +pub const GLFW_KEY_WORLD_1: u32 = 161; +pub const GLFW_KEY_WORLD_2: u32 = 162; +pub const GLFW_KEY_ESCAPE: u32 = 256; +pub const GLFW_KEY_ENTER: u32 = 257; +pub const GLFW_KEY_TAB: u32 = 258; +pub const GLFW_KEY_BACKSPACE: u32 = 259; +pub const GLFW_KEY_INSERT: u32 = 260; +pub const GLFW_KEY_DELETE: u32 = 261; +pub const GLFW_KEY_RIGHT: u32 = 262; +pub const GLFW_KEY_LEFT: u32 = 263; +pub const GLFW_KEY_DOWN: u32 = 264; +pub const GLFW_KEY_UP: u32 = 265; +pub const GLFW_KEY_PAGE_UP: u32 = 266; +pub const GLFW_KEY_PAGE_DOWN: u32 = 267; +pub const GLFW_KEY_HOME: u32 = 268; +pub const GLFW_KEY_END: u32 = 269; +pub const GLFW_KEY_CAPS_LOCK: u32 = 280; +pub const GLFW_KEY_SCROLL_LOCK: u32 = 281; +pub const GLFW_KEY_NUM_LOCK: u32 = 282; +pub const GLFW_KEY_PRINT_SCREEN: u32 = 283; +pub const GLFW_KEY_PAUSE: u32 = 284; +pub const GLFW_KEY_F1: u32 = 290; +pub const GLFW_KEY_F2: u32 = 291; +pub const GLFW_KEY_F3: u32 = 292; +pub const GLFW_KEY_F4: u32 = 293; +pub const GLFW_KEY_F5: u32 = 294; +pub const GLFW_KEY_F6: u32 = 295; +pub const GLFW_KEY_F7: u32 = 296; +pub const GLFW_KEY_F8: u32 = 297; +pub const GLFW_KEY_F9: u32 = 298; +pub const GLFW_KEY_F10: u32 = 299; +pub const GLFW_KEY_F11: u32 = 300; +pub const GLFW_KEY_F12: u32 = 301; +pub const GLFW_KEY_F13: u32 = 302; +pub const GLFW_KEY_F14: u32 = 303; +pub const GLFW_KEY_F15: u32 = 304; +pub const GLFW_KEY_F16: u32 = 305; +pub const GLFW_KEY_F17: u32 = 306; +pub const GLFW_KEY_F18: u32 = 307; +pub const GLFW_KEY_F19: u32 = 308; +pub const GLFW_KEY_F20: u32 = 309; +pub const GLFW_KEY_F21: u32 = 310; +pub const GLFW_KEY_F22: u32 = 311; +pub const GLFW_KEY_F23: u32 = 312; +pub const GLFW_KEY_F24: u32 = 313; +pub const GLFW_KEY_F25: u32 = 314; +pub const GLFW_KEY_KP_0: u32 = 320; +pub const GLFW_KEY_KP_1: u32 = 321; +pub const GLFW_KEY_KP_2: u32 = 322; +pub const GLFW_KEY_KP_3: u32 = 323; +pub const GLFW_KEY_KP_4: u32 = 324; +pub const GLFW_KEY_KP_5: u32 = 325; +pub const GLFW_KEY_KP_6: u32 = 326; +pub const GLFW_KEY_KP_7: u32 = 327; +pub const GLFW_KEY_KP_8: u32 = 328; +pub const GLFW_KEY_KP_9: u32 = 329; +pub const GLFW_KEY_KP_DECIMAL: u32 = 330; +pub const GLFW_KEY_KP_DIVIDE: u32 = 331; +pub const GLFW_KEY_KP_MULTIPLY: u32 = 332; +pub const GLFW_KEY_KP_SUBTRACT: u32 = 333; +pub const GLFW_KEY_KP_ADD: u32 = 334; +pub const GLFW_KEY_KP_ENTER: u32 = 335; +pub const GLFW_KEY_KP_EQUAL: u32 = 336; +pub const GLFW_KEY_LEFT_SHIFT: u32 = 340; +pub const GLFW_KEY_LEFT_CONTROL: u32 = 341; +pub const GLFW_KEY_LEFT_ALT: u32 = 342; +pub const GLFW_KEY_LEFT_SUPER: u32 = 343; +pub const GLFW_KEY_RIGHT_SHIFT: u32 = 344; +pub const GLFW_KEY_RIGHT_CONTROL: u32 = 345; +pub const GLFW_KEY_RIGHT_ALT: u32 = 346; +pub const GLFW_KEY_RIGHT_SUPER: u32 = 347; +pub const GLFW_KEY_MENU: u32 = 348; +pub const GLFW_KEY_LAST: u32 = 348; +pub const GLFW_MOD_SHIFT: u32 = 1; +pub const GLFW_MOD_CONTROL: u32 = 2; +pub const GLFW_MOD_ALT: u32 = 4; +pub const GLFW_MOD_SUPER: u32 = 8; +pub const GLFW_MOD_CAPS_LOCK: u32 = 16; +pub const GLFW_MOD_NUM_LOCK: u32 = 32; +pub const GLFW_MOUSE_BUTTON_1: u32 = 0; +pub const GLFW_MOUSE_BUTTON_2: u32 = 1; +pub const GLFW_MOUSE_BUTTON_3: u32 = 2; +pub const GLFW_MOUSE_BUTTON_4: u32 = 3; +pub const GLFW_MOUSE_BUTTON_5: u32 = 4; +pub const GLFW_MOUSE_BUTTON_6: u32 = 5; +pub const GLFW_MOUSE_BUTTON_7: u32 = 6; +pub const GLFW_MOUSE_BUTTON_8: u32 = 7; +pub const GLFW_MOUSE_BUTTON_LAST: u32 = 7; +pub const GLFW_MOUSE_BUTTON_LEFT: u32 = 0; +pub const GLFW_MOUSE_BUTTON_RIGHT: u32 = 1; +pub const GLFW_MOUSE_BUTTON_MIDDLE: u32 = 2; +pub const GLFW_JOYSTICK_1: u32 = 0; +pub const GLFW_JOYSTICK_2: u32 = 1; +pub const GLFW_JOYSTICK_3: u32 = 2; +pub const GLFW_JOYSTICK_4: u32 = 3; +pub const GLFW_JOYSTICK_5: u32 = 4; +pub const GLFW_JOYSTICK_6: u32 = 5; +pub const GLFW_JOYSTICK_7: u32 = 6; +pub const GLFW_JOYSTICK_8: u32 = 7; +pub const GLFW_JOYSTICK_9: u32 = 8; +pub const GLFW_JOYSTICK_10: u32 = 9; +pub const GLFW_JOYSTICK_11: u32 = 10; +pub const GLFW_JOYSTICK_12: u32 = 11; +pub const GLFW_JOYSTICK_13: u32 = 12; +pub const GLFW_JOYSTICK_14: u32 = 13; +pub const GLFW_JOYSTICK_15: u32 = 14; +pub const GLFW_JOYSTICK_16: u32 = 15; +pub const GLFW_JOYSTICK_LAST: u32 = 15; +pub const GLFW_GAMEPAD_BUTTON_A: u32 = 0; +pub const GLFW_GAMEPAD_BUTTON_B: u32 = 1; +pub const GLFW_GAMEPAD_BUTTON_X: u32 = 2; +pub const GLFW_GAMEPAD_BUTTON_Y: u32 = 3; +pub const GLFW_GAMEPAD_BUTTON_LEFT_BUMPER: u32 = 4; +pub const GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER: u32 = 5; +pub const GLFW_GAMEPAD_BUTTON_BACK: u32 = 6; +pub const GLFW_GAMEPAD_BUTTON_START: u32 = 7; +pub const GLFW_GAMEPAD_BUTTON_GUIDE: u32 = 8; +pub const GLFW_GAMEPAD_BUTTON_LEFT_THUMB: u32 = 9; +pub const GLFW_GAMEPAD_BUTTON_RIGHT_THUMB: u32 = 10; +pub const GLFW_GAMEPAD_BUTTON_DPAD_UP: u32 = 11; +pub const GLFW_GAMEPAD_BUTTON_DPAD_RIGHT: u32 = 12; +pub const GLFW_GAMEPAD_BUTTON_DPAD_DOWN: u32 = 13; +pub const GLFW_GAMEPAD_BUTTON_DPAD_LEFT: u32 = 14; +pub const GLFW_GAMEPAD_BUTTON_LAST: u32 = 14; +pub const GLFW_GAMEPAD_BUTTON_CROSS: u32 = 0; +pub const GLFW_GAMEPAD_BUTTON_CIRCLE: u32 = 1; +pub const GLFW_GAMEPAD_BUTTON_SQUARE: u32 = 2; +pub const GLFW_GAMEPAD_BUTTON_TRIANGLE: u32 = 3; +pub const GLFW_GAMEPAD_AXIS_LEFT_X: u32 = 0; +pub const GLFW_GAMEPAD_AXIS_LEFT_Y: u32 = 1; +pub const GLFW_GAMEPAD_AXIS_RIGHT_X: u32 = 2; +pub const GLFW_GAMEPAD_AXIS_RIGHT_Y: u32 = 3; +pub const GLFW_GAMEPAD_AXIS_LEFT_TRIGGER: u32 = 4; +pub const GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER: u32 = 5; +pub const GLFW_GAMEPAD_AXIS_LAST: u32 = 5; +pub const GLFW_NO_ERROR: u32 = 0; +pub const GLFW_NOT_INITIALIZED: u32 = 65537; +pub const GLFW_NO_CURRENT_CONTEXT: u32 = 65538; +pub const GLFW_INVALID_ENUM: u32 = 65539; +pub const GLFW_INVALID_VALUE: u32 = 65540; +pub const GLFW_OUT_OF_MEMORY: u32 = 65541; +pub const GLFW_API_UNAVAILABLE: u32 = 65542; +pub const GLFW_VERSION_UNAVAILABLE: u32 = 65543; +pub const GLFW_PLATFORM_ERROR: u32 = 65544; +pub const GLFW_FORMAT_UNAVAILABLE: u32 = 65545; +pub const GLFW_NO_WINDOW_CONTEXT: u32 = 65546; +pub const GLFW_CURSOR_UNAVAILABLE: u32 = 65547; +pub const GLFW_FEATURE_UNAVAILABLE: u32 = 65548; +pub const GLFW_FEATURE_UNIMPLEMENTED: u32 = 65549; +pub const GLFW_PLATFORM_UNAVAILABLE: u32 = 65550; +pub const GLFW_FOCUSED: u32 = 131073; +pub const GLFW_ICONIFIED: u32 = 131074; +pub const GLFW_RESIZABLE: u32 = 131075; +pub const GLFW_VISIBLE: u32 = 131076; +pub const GLFW_DECORATED: u32 = 131077; +pub const GLFW_AUTO_ICONIFY: u32 = 131078; +pub const GLFW_FLOATING: u32 = 131079; +pub const GLFW_MAXIMIZED: u32 = 131080; +pub const GLFW_CENTER_CURSOR: u32 = 131081; +pub const GLFW_TRANSPARENT_FRAMEBUFFER: u32 = 131082; +pub const GLFW_HOVERED: u32 = 131083; +pub const GLFW_FOCUS_ON_SHOW: u32 = 131084; +pub const GLFW_MOUSE_PASSTHROUGH: u32 = 131085; +pub const GLFW_POSITION_X: u32 = 131086; +pub const GLFW_POSITION_Y: u32 = 131087; +pub const GLFW_RED_BITS: u32 = 135169; +pub const GLFW_GREEN_BITS: u32 = 135170; +pub const GLFW_BLUE_BITS: u32 = 135171; +pub const GLFW_ALPHA_BITS: u32 = 135172; +pub const GLFW_DEPTH_BITS: u32 = 135173; +pub const GLFW_STENCIL_BITS: u32 = 135174; +pub const GLFW_ACCUM_RED_BITS: u32 = 135175; +pub const GLFW_ACCUM_GREEN_BITS: u32 = 135176; +pub const GLFW_ACCUM_BLUE_BITS: u32 = 135177; +pub const GLFW_ACCUM_ALPHA_BITS: u32 = 135178; +pub const GLFW_AUX_BUFFERS: u32 = 135179; +pub const GLFW_STEREO: u32 = 135180; +pub const GLFW_SAMPLES: u32 = 135181; +pub const GLFW_SRGB_CAPABLE: u32 = 135182; +pub const GLFW_REFRESH_RATE: u32 = 135183; +pub const GLFW_DOUBLEBUFFER: u32 = 135184; +pub const GLFW_CLIENT_API: u32 = 139265; +pub const GLFW_CONTEXT_VERSION_MAJOR: u32 = 139266; +pub const GLFW_CONTEXT_VERSION_MINOR: u32 = 139267; +pub const GLFW_CONTEXT_REVISION: u32 = 139268; +pub const GLFW_CONTEXT_ROBUSTNESS: u32 = 139269; +pub const GLFW_OPENGL_FORWARD_COMPAT: u32 = 139270; +pub const GLFW_CONTEXT_DEBUG: u32 = 139271; +pub const GLFW_OPENGL_DEBUG_CONTEXT: u32 = 139271; +pub const GLFW_OPENGL_PROFILE: u32 = 139272; +pub const GLFW_CONTEXT_RELEASE_BEHAVIOR: u32 = 139273; +pub const GLFW_CONTEXT_NO_ERROR: u32 = 139274; +pub const GLFW_CONTEXT_CREATION_API: u32 = 139275; +pub const GLFW_SCALE_TO_MONITOR: u32 = 139276; +pub const GLFW_SCALE_FRAMEBUFFER: u32 = 139277; +pub const GLFW_COCOA_RETINA_FRAMEBUFFER: u32 = 143361; +pub const GLFW_COCOA_FRAME_NAME: u32 = 143362; +pub const GLFW_COCOA_GRAPHICS_SWITCHING: u32 = 143363; +pub const GLFW_X11_CLASS_NAME: u32 = 147457; +pub const GLFW_X11_INSTANCE_NAME: u32 = 147458; +pub const GLFW_WIN32_KEYBOARD_MENU: u32 = 151553; +pub const GLFW_WIN32_SHOWDEFAULT: u32 = 151554; +pub const GLFW_WAYLAND_APP_ID: u32 = 155649; +pub const GLFW_NO_API: u32 = 0; +pub const GLFW_OPENGL_API: u32 = 196609; +pub const GLFW_OPENGL_ES_API: u32 = 196610; +pub const GLFW_NO_ROBUSTNESS: u32 = 0; +pub const GLFW_NO_RESET_NOTIFICATION: u32 = 200705; +pub const GLFW_LOSE_CONTEXT_ON_RESET: u32 = 200706; +pub const GLFW_OPENGL_ANY_PROFILE: u32 = 0; +pub const GLFW_OPENGL_CORE_PROFILE: u32 = 204801; +pub const GLFW_OPENGL_COMPAT_PROFILE: u32 = 204802; +pub const GLFW_CURSOR: u32 = 208897; +pub const GLFW_STICKY_KEYS: u32 = 208898; +pub const GLFW_STICKY_MOUSE_BUTTONS: u32 = 208899; +pub const GLFW_LOCK_KEY_MODS: u32 = 208900; +pub const GLFW_RAW_MOUSE_MOTION: u32 = 208901; +pub const GLFW_CURSOR_NORMAL: u32 = 212993; +pub const GLFW_CURSOR_HIDDEN: u32 = 212994; +pub const GLFW_CURSOR_DISABLED: u32 = 212995; +pub const GLFW_CURSOR_CAPTURED: u32 = 212996; +pub const GLFW_ANY_RELEASE_BEHAVIOR: u32 = 0; +pub const GLFW_RELEASE_BEHAVIOR_FLUSH: u32 = 217089; +pub const GLFW_RELEASE_BEHAVIOR_NONE: u32 = 217090; +pub const GLFW_NATIVE_CONTEXT_API: u32 = 221185; +pub const GLFW_EGL_CONTEXT_API: u32 = 221186; +pub const GLFW_OSMESA_CONTEXT_API: u32 = 221187; +pub const GLFW_ANGLE_PLATFORM_TYPE_NONE: u32 = 225281; +pub const GLFW_ANGLE_PLATFORM_TYPE_OPENGL: u32 = 225282; +pub const GLFW_ANGLE_PLATFORM_TYPE_OPENGLES: u32 = 225283; +pub const GLFW_ANGLE_PLATFORM_TYPE_D3D9: u32 = 225284; +pub const GLFW_ANGLE_PLATFORM_TYPE_D3D11: u32 = 225285; +pub const GLFW_ANGLE_PLATFORM_TYPE_VULKAN: u32 = 225287; +pub const GLFW_ANGLE_PLATFORM_TYPE_METAL: u32 = 225288; +pub const GLFW_WAYLAND_PREFER_LIBDECOR: u32 = 229377; +pub const GLFW_WAYLAND_DISABLE_LIBDECOR: u32 = 229378; +pub const GLFW_ANY_POSITION: u32 = 2147483648; +pub const GLFW_ARROW_CURSOR: u32 = 221185; +pub const GLFW_IBEAM_CURSOR: u32 = 221186; +pub const GLFW_CROSSHAIR_CURSOR: u32 = 221187; +pub const GLFW_POINTING_HAND_CURSOR: u32 = 221188; +pub const GLFW_RESIZE_EW_CURSOR: u32 = 221189; +pub const GLFW_RESIZE_NS_CURSOR: u32 = 221190; +pub const GLFW_RESIZE_NWSE_CURSOR: u32 = 221191; +pub const GLFW_RESIZE_NESW_CURSOR: u32 = 221192; +pub const GLFW_RESIZE_ALL_CURSOR: u32 = 221193; +pub const GLFW_NOT_ALLOWED_CURSOR: u32 = 221194; +pub const GLFW_HRESIZE_CURSOR: u32 = 221189; +pub const GLFW_VRESIZE_CURSOR: u32 = 221190; +pub const GLFW_HAND_CURSOR: u32 = 221188; +pub const GLFW_CONNECTED: u32 = 262145; +pub const GLFW_DISCONNECTED: u32 = 262146; +pub const GLFW_JOYSTICK_HAT_BUTTONS: u32 = 327681; +pub const GLFW_ANGLE_PLATFORM_TYPE: u32 = 327682; +pub const GLFW_PLATFORM: u32 = 327683; +pub const GLFW_COCOA_CHDIR_RESOURCES: u32 = 331777; +pub const GLFW_COCOA_MENUBAR: u32 = 331778; +pub const GLFW_X11_XCB_VULKAN_SURFACE: u32 = 335873; +pub const GLFW_WAYLAND_LIBDECOR: u32 = 339969; +pub const GLFW_ANY_PLATFORM: u32 = 393216; +pub const GLFW_PLATFORM_WIN32: u32 = 393217; +pub const GLFW_PLATFORM_COCOA: u32 = 393218; +pub const GLFW_PLATFORM_WAYLAND: u32 = 393219; +pub const GLFW_PLATFORM_X11: u32 = 393220; +pub const GLFW_PLATFORM_NULL: u32 = 393221; +pub const GLFW_DONT_CARE: i32 = -1; +pub const DEFAULT_VERTEX_STRIDE: u32 = 3; +pub type __u_char = ::std::os::raw::c_uchar; +pub type __u_short = ::std::os::raw::c_ushort; +pub type __u_int = ::std::os::raw::c_uint; +pub type __u_long = ::std::os::raw::c_ulong; +pub type __int8_t = ::std::os::raw::c_schar; +pub type __uint8_t = ::std::os::raw::c_uchar; +pub type __int16_t = ::std::os::raw::c_short; +pub type __uint16_t = ::std::os::raw::c_ushort; +pub type __int32_t = ::std::os::raw::c_int; +pub type __uint32_t = ::std::os::raw::c_uint; +pub type __int64_t = ::std::os::raw::c_long; +pub type __uint64_t = ::std::os::raw::c_ulong; +pub type __int_least8_t = __int8_t; +pub type __uint_least8_t = __uint8_t; +pub type __int_least16_t = __int16_t; +pub type __uint_least16_t = __uint16_t; +pub type __int_least32_t = __int32_t; +pub type __uint_least32_t = __uint32_t; +pub type __int_least64_t = __int64_t; +pub type __uint_least64_t = __uint64_t; +pub type __quad_t = ::std::os::raw::c_long; +pub type __u_quad_t = ::std::os::raw::c_ulong; +pub type __intmax_t = ::std::os::raw::c_long; +pub type __uintmax_t = ::std::os::raw::c_ulong; +pub type __dev_t = ::std::os::raw::c_ulong; +pub type __uid_t = ::std::os::raw::c_uint; +pub type __gid_t = ::std::os::raw::c_uint; +pub type __ino_t = ::std::os::raw::c_ulong; +pub type __ino64_t = ::std::os::raw::c_ulong; +pub type __mode_t = ::std::os::raw::c_uint; +pub type __nlink_t = ::std::os::raw::c_ulong; +pub type __off_t = ::std::os::raw::c_long; +pub type __off64_t = ::std::os::raw::c_long; +pub type __pid_t = ::std::os::raw::c_int; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __fsid_t { + pub __val: [::std::os::raw::c_int; 2usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __fsid_t"][::std::mem::size_of::<__fsid_t>() - 8usize]; + ["Alignment of __fsid_t"][::std::mem::align_of::<__fsid_t>() - 4usize]; + ["Offset of field: __fsid_t::__val"][::std::mem::offset_of!(__fsid_t, __val) - 0usize]; +}; +pub type __clock_t = ::std::os::raw::c_long; +pub type __rlim_t = ::std::os::raw::c_ulong; +pub type __rlim64_t = ::std::os::raw::c_ulong; +pub type __id_t = ::std::os::raw::c_uint; +pub type __time_t = ::std::os::raw::c_long; +pub type __useconds_t = ::std::os::raw::c_uint; +pub type __suseconds_t = ::std::os::raw::c_long; +pub type __suseconds64_t = ::std::os::raw::c_long; +pub type __daddr_t = ::std::os::raw::c_int; +pub type __key_t = ::std::os::raw::c_int; +pub type __clockid_t = ::std::os::raw::c_int; +pub type __timer_t = *mut ::std::os::raw::c_void; +pub type __blksize_t = ::std::os::raw::c_long; +pub type __blkcnt_t = ::std::os::raw::c_long; +pub type __blkcnt64_t = ::std::os::raw::c_long; +pub type __fsblkcnt_t = ::std::os::raw::c_ulong; +pub type __fsblkcnt64_t = ::std::os::raw::c_ulong; +pub type __fsfilcnt_t = ::std::os::raw::c_ulong; +pub type __fsfilcnt64_t = ::std::os::raw::c_ulong; +pub type __fsword_t = ::std::os::raw::c_long; +pub type __ssize_t = ::std::os::raw::c_long; +pub type __syscall_slong_t = ::std::os::raw::c_long; +pub type __syscall_ulong_t = ::std::os::raw::c_ulong; +pub type __loff_t = __off64_t; +pub type __caddr_t = *mut ::std::os::raw::c_char; +pub type __intptr_t = ::std::os::raw::c_long; +pub type __socklen_t = ::std::os::raw::c_uint; +pub type __sig_atomic_t = ::std::os::raw::c_int; +pub type int_least8_t = __int_least8_t; +pub type int_least16_t = __int_least16_t; +pub type int_least32_t = __int_least32_t; +pub type int_least64_t = __int_least64_t; +pub type uint_least8_t = __uint_least8_t; +pub type uint_least16_t = __uint_least16_t; +pub type uint_least32_t = __uint_least32_t; +pub type uint_least64_t = __uint_least64_t; +pub type int_fast8_t = ::std::os::raw::c_schar; +pub type int_fast16_t = ::std::os::raw::c_long; +pub type int_fast32_t = ::std::os::raw::c_long; +pub type int_fast64_t = ::std::os::raw::c_long; +pub type uint_fast8_t = ::std::os::raw::c_uchar; +pub type uint_fast16_t = ::std::os::raw::c_ulong; +pub type uint_fast32_t = ::std::os::raw::c_ulong; +pub type uint_fast64_t = ::std::os::raw::c_ulong; +pub type intmax_t = __intmax_t; +pub type uintmax_t = __uintmax_t; +pub type wchar_t = ::std::os::raw::c_int; +pub type __cfloat128 = __BindgenComplex; +pub type _Float128 = u128; +pub type _Float32 = f32; +pub type _Float64 = f64; +pub type _Float32x = f64; +pub type _Float64x = u128; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct div_t { + pub quot: ::std::os::raw::c_int, + pub rem: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of div_t"][::std::mem::size_of::() - 8usize]; + ["Alignment of div_t"][::std::mem::align_of::() - 4usize]; + ["Offset of field: div_t::quot"][::std::mem::offset_of!(div_t, quot) - 0usize]; + ["Offset of field: div_t::rem"][::std::mem::offset_of!(div_t, rem) - 4usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct ldiv_t { + pub quot: ::std::os::raw::c_long, + pub rem: ::std::os::raw::c_long, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of ldiv_t"][::std::mem::size_of::() - 16usize]; + ["Alignment of ldiv_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: ldiv_t::quot"][::std::mem::offset_of!(ldiv_t, quot) - 0usize]; + ["Offset of field: ldiv_t::rem"][::std::mem::offset_of!(ldiv_t, rem) - 8usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct lldiv_t { + pub quot: ::std::os::raw::c_longlong, + pub rem: ::std::os::raw::c_longlong, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of lldiv_t"][::std::mem::size_of::() - 16usize]; + ["Alignment of lldiv_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: lldiv_t::quot"][::std::mem::offset_of!(lldiv_t, quot) - 0usize]; + ["Offset of field: lldiv_t::rem"][::std::mem::offset_of!(lldiv_t, rem) - 8usize]; +}; +unsafe extern "C" { + pub fn __ctype_get_mb_cur_max() -> usize; +} +unsafe extern "C" { + pub fn atof(__nptr: *const ::std::os::raw::c_char) -> f64; +} +unsafe extern "C" { + pub fn atoi(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn atol(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn atoll(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong; +} +unsafe extern "C" { + pub fn strtod( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + ) -> f64; +} +unsafe extern "C" { + pub fn strtof( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + ) -> f32; +} +unsafe extern "C" { + pub fn strtold( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + ) -> u128; +} +unsafe extern "C" { + pub fn strtol( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + __base: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn strtoul( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + __base: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_ulong; +} +unsafe extern "C" { + pub fn strtoq( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + __base: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_longlong; +} +unsafe extern "C" { + pub fn strtouq( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + __base: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_ulonglong; +} +unsafe extern "C" { + pub fn strtoll( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + __base: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_longlong; +} +unsafe extern "C" { + pub fn strtoull( + __nptr: *const ::std::os::raw::c_char, + __endptr: *mut *mut ::std::os::raw::c_char, + __base: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_ulonglong; +} +unsafe extern "C" { + pub fn l64a(__n: ::std::os::raw::c_long) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn a64l(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; +} +pub type u_char = __u_char; +pub type u_short = __u_short; +pub type u_int = __u_int; +pub type u_long = __u_long; +pub type quad_t = __quad_t; +pub type u_quad_t = __u_quad_t; +pub type fsid_t = __fsid_t; +pub type loff_t = __loff_t; +pub type ino_t = __ino_t; +pub type dev_t = __dev_t; +pub type gid_t = __gid_t; +pub type mode_t = __mode_t; +pub type nlink_t = __nlink_t; +pub type uid_t = __uid_t; +pub type off_t = __off_t; +pub type pid_t = __pid_t; +pub type id_t = __id_t; +pub type daddr_t = __daddr_t; +pub type caddr_t = __caddr_t; +pub type key_t = __key_t; +pub type clock_t = __clock_t; +pub type clockid_t = __clockid_t; +pub type time_t = __time_t; +pub type timer_t = __timer_t; +pub type ulong = ::std::os::raw::c_ulong; +pub type ushort = ::std::os::raw::c_ushort; +pub type uint = ::std::os::raw::c_uint; +pub type u_int8_t = __uint8_t; +pub type u_int16_t = __uint16_t; +pub type u_int32_t = __uint32_t; +pub type u_int64_t = __uint64_t; +pub type register_t = ::std::os::raw::c_long; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __sigset_t { + pub __val: [::std::os::raw::c_ulong; 16usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __sigset_t"][::std::mem::size_of::<__sigset_t>() - 128usize]; + ["Alignment of __sigset_t"][::std::mem::align_of::<__sigset_t>() - 8usize]; + ["Offset of field: __sigset_t::__val"][::std::mem::offset_of!(__sigset_t, __val) - 0usize]; +}; +pub type sigset_t = __sigset_t; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct timeval { + pub tv_sec: __time_t, + pub tv_usec: __suseconds_t, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of timeval"][::std::mem::size_of::() - 16usize]; + ["Alignment of timeval"][::std::mem::align_of::() - 8usize]; + ["Offset of field: timeval::tv_sec"][::std::mem::offset_of!(timeval, tv_sec) - 0usize]; + ["Offset of field: timeval::tv_usec"][::std::mem::offset_of!(timeval, tv_usec) - 8usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct timespec { + pub tv_sec: __time_t, + pub tv_nsec: __syscall_slong_t, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of timespec"][::std::mem::size_of::() - 16usize]; + ["Alignment of timespec"][::std::mem::align_of::() - 8usize]; + ["Offset of field: timespec::tv_sec"][::std::mem::offset_of!(timespec, tv_sec) - 0usize]; + ["Offset of field: timespec::tv_nsec"][::std::mem::offset_of!(timespec, tv_nsec) - 8usize]; +}; +pub type suseconds_t = __suseconds_t; +pub type __fd_mask = ::std::os::raw::c_long; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct fd_set { + pub __fds_bits: [__fd_mask; 16usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of fd_set"][::std::mem::size_of::() - 128usize]; + ["Alignment of fd_set"][::std::mem::align_of::() - 8usize]; + ["Offset of field: fd_set::__fds_bits"][::std::mem::offset_of!(fd_set, __fds_bits) - 0usize]; +}; +pub type fd_mask = __fd_mask; +unsafe extern "C" { + pub fn select( + __nfds: ::std::os::raw::c_int, + __readfds: *mut fd_set, + __writefds: *mut fd_set, + __exceptfds: *mut fd_set, + __timeout: *mut timeval, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn pselect( + __nfds: ::std::os::raw::c_int, + __readfds: *mut fd_set, + __writefds: *mut fd_set, + __exceptfds: *mut fd_set, + __timeout: *const timespec, + __sigmask: *const __sigset_t, + ) -> ::std::os::raw::c_int; +} +pub type blksize_t = __blksize_t; +pub type blkcnt_t = __blkcnt_t; +pub type fsblkcnt_t = __fsblkcnt_t; +pub type fsfilcnt_t = __fsfilcnt_t; +#[repr(C)] +#[derive(Copy, Clone)] +pub union __atomic_wide_counter { + pub __value64: ::std::os::raw::c_ulonglong, + pub __value32: __atomic_wide_counter__bindgen_ty_1, +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __atomic_wide_counter__bindgen_ty_1 { + pub __low: ::std::os::raw::c_uint, + pub __high: ::std::os::raw::c_uint, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __atomic_wide_counter__bindgen_ty_1"] + [::std::mem::size_of::<__atomic_wide_counter__bindgen_ty_1>() - 8usize]; + ["Alignment of __atomic_wide_counter__bindgen_ty_1"] + [::std::mem::align_of::<__atomic_wide_counter__bindgen_ty_1>() - 4usize]; + ["Offset of field: __atomic_wide_counter__bindgen_ty_1::__low"] + [::std::mem::offset_of!(__atomic_wide_counter__bindgen_ty_1, __low) - 0usize]; + ["Offset of field: __atomic_wide_counter__bindgen_ty_1::__high"] + [::std::mem::offset_of!(__atomic_wide_counter__bindgen_ty_1, __high) - 4usize]; +}; +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __atomic_wide_counter"][::std::mem::size_of::<__atomic_wide_counter>() - 8usize]; + ["Alignment of __atomic_wide_counter"] + [::std::mem::align_of::<__atomic_wide_counter>() - 8usize]; + ["Offset of field: __atomic_wide_counter::__value64"] + [::std::mem::offset_of!(__atomic_wide_counter, __value64) - 0usize]; + ["Offset of field: __atomic_wide_counter::__value32"] + [::std::mem::offset_of!(__atomic_wide_counter, __value32) - 0usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __pthread_internal_list { + pub __prev: *mut __pthread_internal_list, + pub __next: *mut __pthread_internal_list, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __pthread_internal_list"][::std::mem::size_of::<__pthread_internal_list>() - 16usize]; + ["Alignment of __pthread_internal_list"] + [::std::mem::align_of::<__pthread_internal_list>() - 8usize]; + ["Offset of field: __pthread_internal_list::__prev"] + [::std::mem::offset_of!(__pthread_internal_list, __prev) - 0usize]; + ["Offset of field: __pthread_internal_list::__next"] + [::std::mem::offset_of!(__pthread_internal_list, __next) - 8usize]; +}; +pub type __pthread_list_t = __pthread_internal_list; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __pthread_internal_slist { + pub __next: *mut __pthread_internal_slist, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __pthread_internal_slist"] + [::std::mem::size_of::<__pthread_internal_slist>() - 8usize]; + ["Alignment of __pthread_internal_slist"] + [::std::mem::align_of::<__pthread_internal_slist>() - 8usize]; + ["Offset of field: __pthread_internal_slist::__next"] + [::std::mem::offset_of!(__pthread_internal_slist, __next) - 0usize]; +}; +pub type __pthread_slist_t = __pthread_internal_slist; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __pthread_mutex_s { + pub __lock: ::std::os::raw::c_int, + pub __count: ::std::os::raw::c_uint, + pub __owner: ::std::os::raw::c_int, + pub __nusers: ::std::os::raw::c_uint, + pub __kind: ::std::os::raw::c_int, + pub __spins: ::std::os::raw::c_short, + pub __unused: ::std::os::raw::c_short, + pub __list: __pthread_list_t, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __pthread_mutex_s"][::std::mem::size_of::<__pthread_mutex_s>() - 40usize]; + ["Alignment of __pthread_mutex_s"][::std::mem::align_of::<__pthread_mutex_s>() - 8usize]; + ["Offset of field: __pthread_mutex_s::__lock"] + [::std::mem::offset_of!(__pthread_mutex_s, __lock) - 0usize]; + ["Offset of field: __pthread_mutex_s::__count"] + [::std::mem::offset_of!(__pthread_mutex_s, __count) - 4usize]; + ["Offset of field: __pthread_mutex_s::__owner"] + [::std::mem::offset_of!(__pthread_mutex_s, __owner) - 8usize]; + ["Offset of field: __pthread_mutex_s::__nusers"] + [::std::mem::offset_of!(__pthread_mutex_s, __nusers) - 12usize]; + ["Offset of field: __pthread_mutex_s::__kind"] + [::std::mem::offset_of!(__pthread_mutex_s, __kind) - 16usize]; + ["Offset of field: __pthread_mutex_s::__spins"] + [::std::mem::offset_of!(__pthread_mutex_s, __spins) - 20usize]; + ["Offset of field: __pthread_mutex_s::__unused"] + [::std::mem::offset_of!(__pthread_mutex_s, __unused) - 22usize]; + ["Offset of field: __pthread_mutex_s::__list"] + [::std::mem::offset_of!(__pthread_mutex_s, __list) - 24usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __pthread_rwlock_arch_t { + pub __readers: ::std::os::raw::c_uint, + pub __writers: ::std::os::raw::c_uint, + pub __wrphase_futex: ::std::os::raw::c_uint, + pub __writers_futex: ::std::os::raw::c_uint, + pub __pad3: ::std::os::raw::c_uint, + pub __pad4: ::std::os::raw::c_uint, + pub __cur_writer: ::std::os::raw::c_int, + pub __shared: ::std::os::raw::c_int, + pub __pad1: ::std::os::raw::c_ulong, + pub __pad2: ::std::os::raw::c_ulong, + pub __flags: ::std::os::raw::c_uint, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __pthread_rwlock_arch_t"][::std::mem::size_of::<__pthread_rwlock_arch_t>() - 56usize]; + ["Alignment of __pthread_rwlock_arch_t"] + [::std::mem::align_of::<__pthread_rwlock_arch_t>() - 8usize]; + ["Offset of field: __pthread_rwlock_arch_t::__readers"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __readers) - 0usize]; + ["Offset of field: __pthread_rwlock_arch_t::__writers"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __writers) - 4usize]; + ["Offset of field: __pthread_rwlock_arch_t::__wrphase_futex"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __wrphase_futex) - 8usize]; + ["Offset of field: __pthread_rwlock_arch_t::__writers_futex"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __writers_futex) - 12usize]; + ["Offset of field: __pthread_rwlock_arch_t::__pad3"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __pad3) - 16usize]; + ["Offset of field: __pthread_rwlock_arch_t::__pad4"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __pad4) - 20usize]; + ["Offset of field: __pthread_rwlock_arch_t::__cur_writer"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __cur_writer) - 24usize]; + ["Offset of field: __pthread_rwlock_arch_t::__shared"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __shared) - 28usize]; + ["Offset of field: __pthread_rwlock_arch_t::__pad1"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __pad1) - 32usize]; + ["Offset of field: __pthread_rwlock_arch_t::__pad2"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __pad2) - 40usize]; + ["Offset of field: __pthread_rwlock_arch_t::__flags"] + [::std::mem::offset_of!(__pthread_rwlock_arch_t, __flags) - 48usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub struct __pthread_cond_s { + pub __wseq: __atomic_wide_counter, + pub __g1_start: __atomic_wide_counter, + pub __g_size: [::std::os::raw::c_uint; 2usize], + pub __g1_orig_size: ::std::os::raw::c_uint, + pub __wrefs: ::std::os::raw::c_uint, + pub __g_signals: [::std::os::raw::c_uint; 2usize], + pub __unused_initialized_1: ::std::os::raw::c_uint, + pub __unused_initialized_2: ::std::os::raw::c_uint, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __pthread_cond_s"][::std::mem::size_of::<__pthread_cond_s>() - 48usize]; + ["Alignment of __pthread_cond_s"][::std::mem::align_of::<__pthread_cond_s>() - 8usize]; + ["Offset of field: __pthread_cond_s::__wseq"] + [::std::mem::offset_of!(__pthread_cond_s, __wseq) - 0usize]; + ["Offset of field: __pthread_cond_s::__g1_start"] + [::std::mem::offset_of!(__pthread_cond_s, __g1_start) - 8usize]; + ["Offset of field: __pthread_cond_s::__g_size"] + [::std::mem::offset_of!(__pthread_cond_s, __g_size) - 16usize]; + ["Offset of field: __pthread_cond_s::__g1_orig_size"] + [::std::mem::offset_of!(__pthread_cond_s, __g1_orig_size) - 24usize]; + ["Offset of field: __pthread_cond_s::__wrefs"] + [::std::mem::offset_of!(__pthread_cond_s, __wrefs) - 28usize]; + ["Offset of field: __pthread_cond_s::__g_signals"] + [::std::mem::offset_of!(__pthread_cond_s, __g_signals) - 32usize]; + ["Offset of field: __pthread_cond_s::__unused_initialized_1"] + [::std::mem::offset_of!(__pthread_cond_s, __unused_initialized_1) - 40usize]; + ["Offset of field: __pthread_cond_s::__unused_initialized_2"] + [::std::mem::offset_of!(__pthread_cond_s, __unused_initialized_2) - 44usize]; +}; +pub type __tss_t = ::std::os::raw::c_uint; +pub type __thrd_t = ::std::os::raw::c_ulong; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __once_flag { + pub __data: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __once_flag"][::std::mem::size_of::<__once_flag>() - 4usize]; + ["Alignment of __once_flag"][::std::mem::align_of::<__once_flag>() - 4usize]; + ["Offset of field: __once_flag::__data"][::std::mem::offset_of!(__once_flag, __data) - 0usize]; +}; +pub type pthread_t = ::std::os::raw::c_ulong; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_mutexattr_t { + pub __size: [::std::os::raw::c_char; 4usize], + pub __align: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_mutexattr_t"][::std::mem::size_of::() - 4usize]; + ["Alignment of pthread_mutexattr_t"][::std::mem::align_of::() - 4usize]; + ["Offset of field: pthread_mutexattr_t::__size"] + [::std::mem::offset_of!(pthread_mutexattr_t, __size) - 0usize]; + ["Offset of field: pthread_mutexattr_t::__align"] + [::std::mem::offset_of!(pthread_mutexattr_t, __align) - 0usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_condattr_t { + pub __size: [::std::os::raw::c_char; 4usize], + pub __align: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_condattr_t"][::std::mem::size_of::() - 4usize]; + ["Alignment of pthread_condattr_t"][::std::mem::align_of::() - 4usize]; + ["Offset of field: pthread_condattr_t::__size"] + [::std::mem::offset_of!(pthread_condattr_t, __size) - 0usize]; + ["Offset of field: pthread_condattr_t::__align"] + [::std::mem::offset_of!(pthread_condattr_t, __align) - 0usize]; +}; +pub type pthread_key_t = ::std::os::raw::c_uint; +pub type pthread_once_t = ::std::os::raw::c_int; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_attr_t { + pub __size: [::std::os::raw::c_char; 56usize], + pub __align: ::std::os::raw::c_long, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_attr_t"][::std::mem::size_of::() - 56usize]; + ["Alignment of pthread_attr_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: pthread_attr_t::__size"] + [::std::mem::offset_of!(pthread_attr_t, __size) - 0usize]; + ["Offset of field: pthread_attr_t::__align"] + [::std::mem::offset_of!(pthread_attr_t, __align) - 0usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_mutex_t { + pub __data: __pthread_mutex_s, + pub __size: [::std::os::raw::c_char; 40usize], + pub __align: ::std::os::raw::c_long, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_mutex_t"][::std::mem::size_of::() - 40usize]; + ["Alignment of pthread_mutex_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: pthread_mutex_t::__data"] + [::std::mem::offset_of!(pthread_mutex_t, __data) - 0usize]; + ["Offset of field: pthread_mutex_t::__size"] + [::std::mem::offset_of!(pthread_mutex_t, __size) - 0usize]; + ["Offset of field: pthread_mutex_t::__align"] + [::std::mem::offset_of!(pthread_mutex_t, __align) - 0usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_cond_t { + pub __data: __pthread_cond_s, + pub __size: [::std::os::raw::c_char; 48usize], + pub __align: ::std::os::raw::c_longlong, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_cond_t"][::std::mem::size_of::() - 48usize]; + ["Alignment of pthread_cond_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: pthread_cond_t::__data"] + [::std::mem::offset_of!(pthread_cond_t, __data) - 0usize]; + ["Offset of field: pthread_cond_t::__size"] + [::std::mem::offset_of!(pthread_cond_t, __size) - 0usize]; + ["Offset of field: pthread_cond_t::__align"] + [::std::mem::offset_of!(pthread_cond_t, __align) - 0usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_rwlock_t { + pub __data: __pthread_rwlock_arch_t, + pub __size: [::std::os::raw::c_char; 56usize], + pub __align: ::std::os::raw::c_long, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_rwlock_t"][::std::mem::size_of::() - 56usize]; + ["Alignment of pthread_rwlock_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: pthread_rwlock_t::__data"] + [::std::mem::offset_of!(pthread_rwlock_t, __data) - 0usize]; + ["Offset of field: pthread_rwlock_t::__size"] + [::std::mem::offset_of!(pthread_rwlock_t, __size) - 0usize]; + ["Offset of field: pthread_rwlock_t::__align"] + [::std::mem::offset_of!(pthread_rwlock_t, __align) - 0usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_rwlockattr_t { + pub __size: [::std::os::raw::c_char; 8usize], + pub __align: ::std::os::raw::c_long, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_rwlockattr_t"][::std::mem::size_of::() - 8usize]; + ["Alignment of pthread_rwlockattr_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: pthread_rwlockattr_t::__size"] + [::std::mem::offset_of!(pthread_rwlockattr_t, __size) - 0usize]; + ["Offset of field: pthread_rwlockattr_t::__align"] + [::std::mem::offset_of!(pthread_rwlockattr_t, __align) - 0usize]; +}; +pub type pthread_spinlock_t = ::std::os::raw::c_int; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_barrier_t { + pub __size: [::std::os::raw::c_char; 32usize], + pub __align: ::std::os::raw::c_long, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_barrier_t"][::std::mem::size_of::() - 32usize]; + ["Alignment of pthread_barrier_t"][::std::mem::align_of::() - 8usize]; + ["Offset of field: pthread_barrier_t::__size"] + [::std::mem::offset_of!(pthread_barrier_t, __size) - 0usize]; + ["Offset of field: pthread_barrier_t::__align"] + [::std::mem::offset_of!(pthread_barrier_t, __align) - 0usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub union pthread_barrierattr_t { + pub __size: [::std::os::raw::c_char; 4usize], + pub __align: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of pthread_barrierattr_t"][::std::mem::size_of::() - 4usize]; + ["Alignment of pthread_barrierattr_t"] + [::std::mem::align_of::() - 4usize]; + ["Offset of field: pthread_barrierattr_t::__size"] + [::std::mem::offset_of!(pthread_barrierattr_t, __size) - 0usize]; + ["Offset of field: pthread_barrierattr_t::__align"] + [::std::mem::offset_of!(pthread_barrierattr_t, __align) - 0usize]; +}; +unsafe extern "C" { + pub fn random() -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn srandom(__seed: ::std::os::raw::c_uint); +} +unsafe extern "C" { + pub fn initstate( + __seed: ::std::os::raw::c_uint, + __statebuf: *mut ::std::os::raw::c_char, + __statelen: usize, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn setstate(__statebuf: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct random_data { + pub fptr: *mut i32, + pub rptr: *mut i32, + pub state: *mut i32, + pub rand_type: ::std::os::raw::c_int, + pub rand_deg: ::std::os::raw::c_int, + pub rand_sep: ::std::os::raw::c_int, + pub end_ptr: *mut i32, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of random_data"][::std::mem::size_of::() - 48usize]; + ["Alignment of random_data"][::std::mem::align_of::() - 8usize]; + ["Offset of field: random_data::fptr"][::std::mem::offset_of!(random_data, fptr) - 0usize]; + ["Offset of field: random_data::rptr"][::std::mem::offset_of!(random_data, rptr) - 8usize]; + ["Offset of field: random_data::state"][::std::mem::offset_of!(random_data, state) - 16usize]; + ["Offset of field: random_data::rand_type"] + [::std::mem::offset_of!(random_data, rand_type) - 24usize]; + ["Offset of field: random_data::rand_deg"] + [::std::mem::offset_of!(random_data, rand_deg) - 28usize]; + ["Offset of field: random_data::rand_sep"] + [::std::mem::offset_of!(random_data, rand_sep) - 32usize]; + ["Offset of field: random_data::end_ptr"] + [::std::mem::offset_of!(random_data, end_ptr) - 40usize]; +}; +unsafe extern "C" { + pub fn random_r(__buf: *mut random_data, __result: *mut i32) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn srandom_r( + __seed: ::std::os::raw::c_uint, + __buf: *mut random_data, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn initstate_r( + __seed: ::std::os::raw::c_uint, + __statebuf: *mut ::std::os::raw::c_char, + __statelen: usize, + __buf: *mut random_data, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn setstate_r( + __statebuf: *mut ::std::os::raw::c_char, + __buf: *mut random_data, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn rand() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn srand(__seed: ::std::os::raw::c_uint); +} +unsafe extern "C" { + pub fn rand_r(__seed: *mut ::std::os::raw::c_uint) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn drand48() -> f64; +} +unsafe extern "C" { + pub fn erand48(__xsubi: *mut ::std::os::raw::c_ushort) -> f64; +} +unsafe extern "C" { + pub fn lrand48() -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn nrand48(__xsubi: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn mrand48() -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn jrand48(__xsubi: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn srand48(__seedval: ::std::os::raw::c_long); +} +unsafe extern "C" { + pub fn seed48(__seed16v: *mut ::std::os::raw::c_ushort) -> *mut ::std::os::raw::c_ushort; +} +unsafe extern "C" { + pub fn lcong48(__param: *mut ::std::os::raw::c_ushort); +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct drand48_data { + pub __x: [::std::os::raw::c_ushort; 3usize], + pub __old_x: [::std::os::raw::c_ushort; 3usize], + pub __c: ::std::os::raw::c_ushort, + pub __init: ::std::os::raw::c_ushort, + pub __a: ::std::os::raw::c_ulonglong, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of drand48_data"][::std::mem::size_of::() - 24usize]; + ["Alignment of drand48_data"][::std::mem::align_of::() - 8usize]; + ["Offset of field: drand48_data::__x"][::std::mem::offset_of!(drand48_data, __x) - 0usize]; + ["Offset of field: drand48_data::__old_x"] + [::std::mem::offset_of!(drand48_data, __old_x) - 6usize]; + ["Offset of field: drand48_data::__c"][::std::mem::offset_of!(drand48_data, __c) - 12usize]; + ["Offset of field: drand48_data::__init"] + [::std::mem::offset_of!(drand48_data, __init) - 14usize]; + ["Offset of field: drand48_data::__a"][::std::mem::offset_of!(drand48_data, __a) - 16usize]; +}; +unsafe extern "C" { + pub fn drand48_r(__buffer: *mut drand48_data, __result: *mut f64) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn erand48_r( + __xsubi: *mut ::std::os::raw::c_ushort, + __buffer: *mut drand48_data, + __result: *mut f64, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn lrand48_r( + __buffer: *mut drand48_data, + __result: *mut ::std::os::raw::c_long, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn nrand48_r( + __xsubi: *mut ::std::os::raw::c_ushort, + __buffer: *mut drand48_data, + __result: *mut ::std::os::raw::c_long, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn mrand48_r( + __buffer: *mut drand48_data, + __result: *mut ::std::os::raw::c_long, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn jrand48_r( + __xsubi: *mut ::std::os::raw::c_ushort, + __buffer: *mut drand48_data, + __result: *mut ::std::os::raw::c_long, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn srand48_r( + __seedval: ::std::os::raw::c_long, + __buffer: *mut drand48_data, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn seed48_r( + __seed16v: *mut ::std::os::raw::c_ushort, + __buffer: *mut drand48_data, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn lcong48_r( + __param: *mut ::std::os::raw::c_ushort, + __buffer: *mut drand48_data, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn arc4random() -> __uint32_t; +} +unsafe extern "C" { + pub fn arc4random_buf(__buf: *mut ::std::os::raw::c_void, __size: usize); +} +unsafe extern "C" { + pub fn arc4random_uniform(__upper_bound: __uint32_t) -> __uint32_t; +} +unsafe extern "C" { + pub fn malloc(__size: ::std::os::raw::c_ulong) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn calloc( + __nmemb: ::std::os::raw::c_ulong, + __size: ::std::os::raw::c_ulong, + ) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn realloc( + __ptr: *mut ::std::os::raw::c_void, + __size: ::std::os::raw::c_ulong, + ) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn free(__ptr: *mut ::std::os::raw::c_void); +} +unsafe extern "C" { + pub fn reallocarray( + __ptr: *mut ::std::os::raw::c_void, + __nmemb: usize, + __size: usize, + ) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn alloca(__size: ::std::os::raw::c_ulong) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn valloc(__size: usize) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn posix_memalign( + __memptr: *mut *mut ::std::os::raw::c_void, + __alignment: usize, + __size: usize, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn aligned_alloc( + __alignment: ::std::os::raw::c_ulong, + __size: ::std::os::raw::c_ulong, + ) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn abort() -> !; +} +unsafe extern "C" { + pub fn atexit(__func: ::std::option::Option) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn at_quick_exit( + __func: ::std::option::Option, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn on_exit( + __func: ::std::option::Option< + unsafe extern "C" fn( + __status: ::std::os::raw::c_int, + __arg: *mut ::std::os::raw::c_void, + ), + >, + __arg: *mut ::std::os::raw::c_void, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn exit(__status: ::std::os::raw::c_int) -> !; +} +unsafe extern "C" { + pub fn quick_exit(__status: ::std::os::raw::c_int) -> !; +} +unsafe extern "C" { + pub fn _Exit(__status: ::std::os::raw::c_int) -> !; +} +unsafe extern "C" { + pub fn getenv(__name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn putenv(__string: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn setenv( + __name: *const ::std::os::raw::c_char, + __value: *const ::std::os::raw::c_char, + __replace: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn unsetenv(__name: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn clearenv() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn mktemp(__template: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn mkstemp(__template: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn mkstemps( + __template: *mut ::std::os::raw::c_char, + __suffixlen: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn mkdtemp(__template: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn system(__command: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn realpath( + __name: *const ::std::os::raw::c_char, + __resolved: *mut ::std::os::raw::c_char, + ) -> *mut ::std::os::raw::c_char; +} +pub type __compar_fn_t = ::std::option::Option< + unsafe extern "C" fn( + arg1: *const ::std::os::raw::c_void, + arg2: *const ::std::os::raw::c_void, + ) -> ::std::os::raw::c_int, +>; +unsafe extern "C" { + pub fn bsearch( + __key: *const ::std::os::raw::c_void, + __base: *const ::std::os::raw::c_void, + __nmemb: usize, + __size: usize, + __compar: __compar_fn_t, + ) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn qsort( + __base: *mut ::std::os::raw::c_void, + __nmemb: usize, + __size: usize, + __compar: __compar_fn_t, + ); +} +unsafe extern "C" { + pub fn abs(__x: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn labs(__x: ::std::os::raw::c_long) -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn llabs(__x: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong; +} +unsafe extern "C" { + pub fn div(__numer: ::std::os::raw::c_int, __denom: ::std::os::raw::c_int) -> div_t; +} +unsafe extern "C" { + pub fn ldiv(__numer: ::std::os::raw::c_long, __denom: ::std::os::raw::c_long) -> ldiv_t; +} +unsafe extern "C" { + pub fn lldiv( + __numer: ::std::os::raw::c_longlong, + __denom: ::std::os::raw::c_longlong, + ) -> lldiv_t; +} +unsafe extern "C" { + pub fn ecvt( + __value: f64, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn fcvt( + __value: f64, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn gcvt( + __value: f64, + __ndigit: ::std::os::raw::c_int, + __buf: *mut ::std::os::raw::c_char, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn qecvt( + __value: u128, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn qfcvt( + __value: u128, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn qgcvt( + __value: u128, + __ndigit: ::std::os::raw::c_int, + __buf: *mut ::std::os::raw::c_char, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn ecvt_r( + __value: f64, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + __buf: *mut ::std::os::raw::c_char, + __len: usize, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fcvt_r( + __value: f64, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + __buf: *mut ::std::os::raw::c_char, + __len: usize, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn qecvt_r( + __value: u128, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + __buf: *mut ::std::os::raw::c_char, + __len: usize, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn qfcvt_r( + __value: u128, + __ndigit: ::std::os::raw::c_int, + __decpt: *mut ::std::os::raw::c_int, + __sign: *mut ::std::os::raw::c_int, + __buf: *mut ::std::os::raw::c_char, + __len: usize, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn mblen(__s: *const ::std::os::raw::c_char, __n: usize) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn mbtowc( + __pwc: *mut wchar_t, + __s: *const ::std::os::raw::c_char, + __n: usize, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn wctomb(__s: *mut ::std::os::raw::c_char, __wchar: wchar_t) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn mbstowcs(__pwcs: *mut wchar_t, __s: *const ::std::os::raw::c_char, __n: usize) -> usize; +} +unsafe extern "C" { + pub fn wcstombs(__s: *mut ::std::os::raw::c_char, __pwcs: *const wchar_t, __n: usize) -> usize; +} +unsafe extern "C" { + pub fn rpmatch(__response: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn getsubopt( + __optionp: *mut *mut ::std::os::raw::c_char, + __tokens: *const *mut ::std::os::raw::c_char, + __valuep: *mut *mut ::std::os::raw::c_char, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn getloadavg(__loadavg: *mut f64, __nelem: ::std::os::raw::c_int) + -> ::std::os::raw::c_int; +} +pub type __gnuc_va_list = __builtin_va_list; +#[repr(C)] +#[derive(Copy, Clone)] +pub struct __mbstate_t { + pub __count: ::std::os::raw::c_int, + pub __value: __mbstate_t__bindgen_ty_1, +} +#[repr(C)] +#[derive(Copy, Clone)] +pub union __mbstate_t__bindgen_ty_1 { + pub __wch: ::std::os::raw::c_uint, + pub __wchb: [::std::os::raw::c_char; 4usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __mbstate_t__bindgen_ty_1"] + [::std::mem::size_of::<__mbstate_t__bindgen_ty_1>() - 4usize]; + ["Alignment of __mbstate_t__bindgen_ty_1"] + [::std::mem::align_of::<__mbstate_t__bindgen_ty_1>() - 4usize]; + ["Offset of field: __mbstate_t__bindgen_ty_1::__wch"] + [::std::mem::offset_of!(__mbstate_t__bindgen_ty_1, __wch) - 0usize]; + ["Offset of field: __mbstate_t__bindgen_ty_1::__wchb"] + [::std::mem::offset_of!(__mbstate_t__bindgen_ty_1, __wchb) - 0usize]; +}; +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __mbstate_t"][::std::mem::size_of::<__mbstate_t>() - 8usize]; + ["Alignment of __mbstate_t"][::std::mem::align_of::<__mbstate_t>() - 4usize]; + ["Offset of field: __mbstate_t::__count"] + [::std::mem::offset_of!(__mbstate_t, __count) - 0usize]; + ["Offset of field: __mbstate_t::__value"] + [::std::mem::offset_of!(__mbstate_t, __value) - 4usize]; +}; +#[repr(C)] +#[derive(Copy, Clone)] +pub struct _G_fpos_t { + pub __pos: __off_t, + pub __state: __mbstate_t, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of _G_fpos_t"][::std::mem::size_of::<_G_fpos_t>() - 16usize]; + ["Alignment of _G_fpos_t"][::std::mem::align_of::<_G_fpos_t>() - 8usize]; + ["Offset of field: _G_fpos_t::__pos"][::std::mem::offset_of!(_G_fpos_t, __pos) - 0usize]; + ["Offset of field: _G_fpos_t::__state"][::std::mem::offset_of!(_G_fpos_t, __state) - 8usize]; +}; +pub type __fpos_t = _G_fpos_t; +#[repr(C)] +#[derive(Copy, Clone)] +pub struct _G_fpos64_t { + pub __pos: __off64_t, + pub __state: __mbstate_t, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of _G_fpos64_t"][::std::mem::size_of::<_G_fpos64_t>() - 16usize]; + ["Alignment of _G_fpos64_t"][::std::mem::align_of::<_G_fpos64_t>() - 8usize]; + ["Offset of field: _G_fpos64_t::__pos"][::std::mem::offset_of!(_G_fpos64_t, __pos) - 0usize]; + ["Offset of field: _G_fpos64_t::__state"] + [::std::mem::offset_of!(_G_fpos64_t, __state) - 8usize]; +}; +pub type __fpos64_t = _G_fpos64_t; +pub type __FILE = _IO_FILE; +pub type FILE = _IO_FILE; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _IO_marker { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _IO_codecvt { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _IO_wide_data { + _unused: [u8; 0], +} +pub type _IO_lock_t = ::std::os::raw::c_void; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _IO_FILE { + pub _flags: ::std::os::raw::c_int, + pub _IO_read_ptr: *mut ::std::os::raw::c_char, + pub _IO_read_end: *mut ::std::os::raw::c_char, + pub _IO_read_base: *mut ::std::os::raw::c_char, + pub _IO_write_base: *mut ::std::os::raw::c_char, + pub _IO_write_ptr: *mut ::std::os::raw::c_char, + pub _IO_write_end: *mut ::std::os::raw::c_char, + pub _IO_buf_base: *mut ::std::os::raw::c_char, + pub _IO_buf_end: *mut ::std::os::raw::c_char, + pub _IO_save_base: *mut ::std::os::raw::c_char, + pub _IO_backup_base: *mut ::std::os::raw::c_char, + pub _IO_save_end: *mut ::std::os::raw::c_char, + pub _markers: *mut _IO_marker, + pub _chain: *mut _IO_FILE, + pub _fileno: ::std::os::raw::c_int, + pub _bitfield_align_1: [u32; 0], + pub _bitfield_1: __BindgenBitfieldUnit<[u8; 3usize]>, + pub _short_backupbuf: [::std::os::raw::c_char; 1usize], + pub _old_offset: __off_t, + pub _cur_column: ::std::os::raw::c_ushort, + pub _vtable_offset: ::std::os::raw::c_schar, + pub _shortbuf: [::std::os::raw::c_char; 1usize], + pub _lock: *mut _IO_lock_t, + pub _offset: __off64_t, + pub _codecvt: *mut _IO_codecvt, + pub _wide_data: *mut _IO_wide_data, + pub _freeres_list: *mut _IO_FILE, + pub _freeres_buf: *mut ::std::os::raw::c_void, + pub _prevchain: *mut *mut _IO_FILE, + pub _mode: ::std::os::raw::c_int, + pub _unused3: ::std::os::raw::c_int, + pub _total_written: __uint64_t, + pub _unused2: [::std::os::raw::c_char; 8usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of _IO_FILE"][::std::mem::size_of::<_IO_FILE>() - 216usize]; + ["Alignment of _IO_FILE"][::std::mem::align_of::<_IO_FILE>() - 8usize]; + ["Offset of field: _IO_FILE::_flags"][::std::mem::offset_of!(_IO_FILE, _flags) - 0usize]; + ["Offset of field: _IO_FILE::_IO_read_ptr"] + [::std::mem::offset_of!(_IO_FILE, _IO_read_ptr) - 8usize]; + ["Offset of field: _IO_FILE::_IO_read_end"] + [::std::mem::offset_of!(_IO_FILE, _IO_read_end) - 16usize]; + ["Offset of field: _IO_FILE::_IO_read_base"] + [::std::mem::offset_of!(_IO_FILE, _IO_read_base) - 24usize]; + ["Offset of field: _IO_FILE::_IO_write_base"] + [::std::mem::offset_of!(_IO_FILE, _IO_write_base) - 32usize]; + ["Offset of field: _IO_FILE::_IO_write_ptr"] + [::std::mem::offset_of!(_IO_FILE, _IO_write_ptr) - 40usize]; + ["Offset of field: _IO_FILE::_IO_write_end"] + [::std::mem::offset_of!(_IO_FILE, _IO_write_end) - 48usize]; + ["Offset of field: _IO_FILE::_IO_buf_base"] + [::std::mem::offset_of!(_IO_FILE, _IO_buf_base) - 56usize]; + ["Offset of field: _IO_FILE::_IO_buf_end"] + [::std::mem::offset_of!(_IO_FILE, _IO_buf_end) - 64usize]; + ["Offset of field: _IO_FILE::_IO_save_base"] + [::std::mem::offset_of!(_IO_FILE, _IO_save_base) - 72usize]; + ["Offset of field: _IO_FILE::_IO_backup_base"] + [::std::mem::offset_of!(_IO_FILE, _IO_backup_base) - 80usize]; + ["Offset of field: _IO_FILE::_IO_save_end"] + [::std::mem::offset_of!(_IO_FILE, _IO_save_end) - 88usize]; + ["Offset of field: _IO_FILE::_markers"][::std::mem::offset_of!(_IO_FILE, _markers) - 96usize]; + ["Offset of field: _IO_FILE::_chain"][::std::mem::offset_of!(_IO_FILE, _chain) - 104usize]; + ["Offset of field: _IO_FILE::_fileno"][::std::mem::offset_of!(_IO_FILE, _fileno) - 112usize]; + ["Offset of field: _IO_FILE::_short_backupbuf"] + [::std::mem::offset_of!(_IO_FILE, _short_backupbuf) - 119usize]; + ["Offset of field: _IO_FILE::_old_offset"] + [::std::mem::offset_of!(_IO_FILE, _old_offset) - 120usize]; + ["Offset of field: _IO_FILE::_cur_column"] + [::std::mem::offset_of!(_IO_FILE, _cur_column) - 128usize]; + ["Offset of field: _IO_FILE::_vtable_offset"] + [::std::mem::offset_of!(_IO_FILE, _vtable_offset) - 130usize]; + ["Offset of field: _IO_FILE::_shortbuf"] + [::std::mem::offset_of!(_IO_FILE, _shortbuf) - 131usize]; + ["Offset of field: _IO_FILE::_lock"][::std::mem::offset_of!(_IO_FILE, _lock) - 136usize]; + ["Offset of field: _IO_FILE::_offset"][::std::mem::offset_of!(_IO_FILE, _offset) - 144usize]; + ["Offset of field: _IO_FILE::_codecvt"][::std::mem::offset_of!(_IO_FILE, _codecvt) - 152usize]; + ["Offset of field: _IO_FILE::_wide_data"] + [::std::mem::offset_of!(_IO_FILE, _wide_data) - 160usize]; + ["Offset of field: _IO_FILE::_freeres_list"] + [::std::mem::offset_of!(_IO_FILE, _freeres_list) - 168usize]; + ["Offset of field: _IO_FILE::_freeres_buf"] + [::std::mem::offset_of!(_IO_FILE, _freeres_buf) - 176usize]; + ["Offset of field: _IO_FILE::_prevchain"] + [::std::mem::offset_of!(_IO_FILE, _prevchain) - 184usize]; + ["Offset of field: _IO_FILE::_mode"][::std::mem::offset_of!(_IO_FILE, _mode) - 192usize]; + ["Offset of field: _IO_FILE::_unused3"][::std::mem::offset_of!(_IO_FILE, _unused3) - 196usize]; + ["Offset of field: _IO_FILE::_total_written"] + [::std::mem::offset_of!(_IO_FILE, _total_written) - 200usize]; + ["Offset of field: _IO_FILE::_unused2"][::std::mem::offset_of!(_IO_FILE, _unused2) - 208usize]; +}; +impl _IO_FILE { + #[inline] + pub fn _flags2(&self) -> ::std::os::raw::c_int { + unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 24u8) as u32) } + } + #[inline] + pub fn set__flags2(&mut self, val: ::std::os::raw::c_int) { + unsafe { + let val: u32 = ::std::mem::transmute(val); + self._bitfield_1.set(0usize, 24u8, val as u64) + } + } + #[inline] + pub unsafe fn _flags2_raw(this: *const Self) -> ::std::os::raw::c_int { + unsafe { + ::std::mem::transmute(<__BindgenBitfieldUnit<[u8; 3usize]>>::raw_get( + ::std::ptr::addr_of!((*this)._bitfield_1), + 0usize, + 24u8, + ) as u32) + } + } + #[inline] + pub unsafe fn set__flags2_raw(this: *mut Self, val: ::std::os::raw::c_int) { + unsafe { + let val: u32 = ::std::mem::transmute(val); + <__BindgenBitfieldUnit<[u8; 3usize]>>::raw_set( + ::std::ptr::addr_of_mut!((*this)._bitfield_1), + 0usize, + 24u8, + val as u64, + ) + } + } + #[inline] + pub fn new_bitfield_1(_flags2: ::std::os::raw::c_int) -> __BindgenBitfieldUnit<[u8; 3usize]> { + let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 3usize]> = Default::default(); + __bindgen_bitfield_unit.set(0usize, 24u8, { + let _flags2: u32 = unsafe { ::std::mem::transmute(_flags2) }; + _flags2 as u64 + }); + __bindgen_bitfield_unit + } +} +pub type cookie_read_function_t = ::std::option::Option< + unsafe extern "C" fn( + __cookie: *mut ::std::os::raw::c_void, + __buf: *mut ::std::os::raw::c_char, + __nbytes: usize, + ) -> __ssize_t, +>; +pub type cookie_write_function_t = ::std::option::Option< + unsafe extern "C" fn( + __cookie: *mut ::std::os::raw::c_void, + __buf: *const ::std::os::raw::c_char, + __nbytes: usize, + ) -> __ssize_t, +>; +pub type cookie_seek_function_t = ::std::option::Option< + unsafe extern "C" fn( + __cookie: *mut ::std::os::raw::c_void, + __pos: *mut __off64_t, + __w: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int, +>; +pub type cookie_close_function_t = ::std::option::Option< + unsafe extern "C" fn(__cookie: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int, +>; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _IO_cookie_io_functions_t { + pub read: cookie_read_function_t, + pub write: cookie_write_function_t, + pub seek: cookie_seek_function_t, + pub close: cookie_close_function_t, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of _IO_cookie_io_functions_t"] + [::std::mem::size_of::<_IO_cookie_io_functions_t>() - 32usize]; + ["Alignment of _IO_cookie_io_functions_t"] + [::std::mem::align_of::<_IO_cookie_io_functions_t>() - 8usize]; + ["Offset of field: _IO_cookie_io_functions_t::read"] + [::std::mem::offset_of!(_IO_cookie_io_functions_t, read) - 0usize]; + ["Offset of field: _IO_cookie_io_functions_t::write"] + [::std::mem::offset_of!(_IO_cookie_io_functions_t, write) - 8usize]; + ["Offset of field: _IO_cookie_io_functions_t::seek"] + [::std::mem::offset_of!(_IO_cookie_io_functions_t, seek) - 16usize]; + ["Offset of field: _IO_cookie_io_functions_t::close"] + [::std::mem::offset_of!(_IO_cookie_io_functions_t, close) - 24usize]; +}; +pub type cookie_io_functions_t = _IO_cookie_io_functions_t; +pub type va_list = __gnuc_va_list; +pub type fpos_t = __fpos_t; +unsafe extern "C" { + pub static mut stdin: *mut FILE; +} +unsafe extern "C" { + pub static mut stdout: *mut FILE; +} +unsafe extern "C" { + pub static mut stderr: *mut FILE; +} +unsafe extern "C" { + pub fn remove(__filename: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn rename( + __old: *const ::std::os::raw::c_char, + __new: *const ::std::os::raw::c_char, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn renameat( + __oldfd: ::std::os::raw::c_int, + __old: *const ::std::os::raw::c_char, + __newfd: ::std::os::raw::c_int, + __new: *const ::std::os::raw::c_char, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fclose(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn tmpfile() -> *mut FILE; +} +unsafe extern "C" { + pub fn tmpnam(arg1: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn tmpnam_r(__s: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn tempnam( + __dir: *const ::std::os::raw::c_char, + __pfx: *const ::std::os::raw::c_char, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn fflush(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fflush_unlocked(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fopen( + __filename: *const ::std::os::raw::c_char, + __modes: *const ::std::os::raw::c_char, + ) -> *mut FILE; +} +unsafe extern "C" { + pub fn freopen( + __filename: *const ::std::os::raw::c_char, + __modes: *const ::std::os::raw::c_char, + __stream: *mut FILE, + ) -> *mut FILE; +} +unsafe extern "C" { + pub fn fdopen(__fd: ::std::os::raw::c_int, __modes: *const ::std::os::raw::c_char) + -> *mut FILE; +} +unsafe extern "C" { + pub fn fopencookie( + __magic_cookie: *mut ::std::os::raw::c_void, + __modes: *const ::std::os::raw::c_char, + __io_funcs: cookie_io_functions_t, + ) -> *mut FILE; +} +unsafe extern "C" { + pub fn fmemopen( + __s: *mut ::std::os::raw::c_void, + __len: usize, + __modes: *const ::std::os::raw::c_char, + ) -> *mut FILE; +} +unsafe extern "C" { + pub fn open_memstream( + __bufloc: *mut *mut ::std::os::raw::c_char, + __sizeloc: *mut usize, + ) -> *mut FILE; +} +unsafe extern "C" { + pub fn setbuf(__stream: *mut FILE, __buf: *mut ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn setvbuf( + __stream: *mut FILE, + __buf: *mut ::std::os::raw::c_char, + __modes: ::std::os::raw::c_int, + __n: usize, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn setbuffer(__stream: *mut FILE, __buf: *mut ::std::os::raw::c_char, __size: usize); +} +unsafe extern "C" { + pub fn setlinebuf(__stream: *mut FILE); +} +unsafe extern "C" { + pub fn fprintf( + __stream: *mut FILE, + __format: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn printf(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn sprintf( + __s: *mut ::std::os::raw::c_char, + __format: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vfprintf( + __s: *mut FILE, + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vprintf( + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vsprintf( + __s: *mut ::std::os::raw::c_char, + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn snprintf( + __s: *mut ::std::os::raw::c_char, + __maxlen: ::std::os::raw::c_ulong, + __format: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vsnprintf( + __s: *mut ::std::os::raw::c_char, + __maxlen: ::std::os::raw::c_ulong, + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vasprintf( + __ptr: *mut *mut ::std::os::raw::c_char, + __f: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn __asprintf( + __ptr: *mut *mut ::std::os::raw::c_char, + __fmt: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn asprintf( + __ptr: *mut *mut ::std::os::raw::c_char, + __fmt: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vdprintf( + __fd: ::std::os::raw::c_int, + __fmt: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn dprintf( + __fd: ::std::os::raw::c_int, + __fmt: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fscanf( + __stream: *mut FILE, + __format: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn scanf(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn sscanf( + __s: *const ::std::os::raw::c_char, + __format: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + #[link_name = "\u{1}__isoc99_fscanf"] + pub fn fscanf1( + __stream: *mut FILE, + __format: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + #[link_name = "\u{1}__isoc99_scanf"] + pub fn scanf1(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + #[link_name = "\u{1}__isoc99_sscanf"] + pub fn sscanf1( + __s: *const ::std::os::raw::c_char, + __format: *const ::std::os::raw::c_char, + ... + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vfscanf( + __s: *mut FILE, + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vscanf( + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn vsscanf( + __s: *const ::std::os::raw::c_char, + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + #[link_name = "\u{1}__isoc99_vfscanf"] + pub fn vfscanf1( + __s: *mut FILE, + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + #[link_name = "\u{1}__isoc99_vscanf"] + pub fn vscanf1( + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + #[link_name = "\u{1}__isoc99_vsscanf"] + pub fn vsscanf1( + __s: *const ::std::os::raw::c_char, + __format: *const ::std::os::raw::c_char, + __arg: *mut __va_list_tag, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fgetc(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn getc(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn getchar() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn getc_unlocked(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn getchar_unlocked() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fgetc_unlocked(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fputc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn putc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn putchar(__c: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fputc_unlocked(__c: ::std::os::raw::c_int, __stream: *mut FILE) + -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn putc_unlocked(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn putchar_unlocked(__c: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn getw(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn putw(__w: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fgets( + __s: *mut ::std::os::raw::c_char, + __n: ::std::os::raw::c_int, + __stream: *mut FILE, + ) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn __getdelim( + __lineptr: *mut *mut ::std::os::raw::c_char, + __n: *mut usize, + __delimiter: ::std::os::raw::c_int, + __stream: *mut FILE, + ) -> __ssize_t; +} +unsafe extern "C" { + pub fn getdelim( + __lineptr: *mut *mut ::std::os::raw::c_char, + __n: *mut usize, + __delimiter: ::std::os::raw::c_int, + __stream: *mut FILE, + ) -> __ssize_t; +} +unsafe extern "C" { + pub fn getline( + __lineptr: *mut *mut ::std::os::raw::c_char, + __n: *mut usize, + __stream: *mut FILE, + ) -> __ssize_t; +} +unsafe extern "C" { + pub fn fputs(__s: *const ::std::os::raw::c_char, __stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn puts(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn ungetc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fread( + __ptr: *mut ::std::os::raw::c_void, + __size: ::std::os::raw::c_ulong, + __n: ::std::os::raw::c_ulong, + __stream: *mut FILE, + ) -> ::std::os::raw::c_ulong; +} +unsafe extern "C" { + pub fn fwrite( + __ptr: *const ::std::os::raw::c_void, + __size: ::std::os::raw::c_ulong, + __n: ::std::os::raw::c_ulong, + __s: *mut FILE, + ) -> ::std::os::raw::c_ulong; +} +unsafe extern "C" { + pub fn fread_unlocked( + __ptr: *mut ::std::os::raw::c_void, + __size: usize, + __n: usize, + __stream: *mut FILE, + ) -> usize; +} +unsafe extern "C" { + pub fn fwrite_unlocked( + __ptr: *const ::std::os::raw::c_void, + __size: usize, + __n: usize, + __stream: *mut FILE, + ) -> usize; +} +unsafe extern "C" { + pub fn fseek( + __stream: *mut FILE, + __off: ::std::os::raw::c_long, + __whence: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn ftell(__stream: *mut FILE) -> ::std::os::raw::c_long; +} +unsafe extern "C" { + pub fn rewind(__stream: *mut FILE); +} +unsafe extern "C" { + pub fn fseeko( + __stream: *mut FILE, + __off: __off_t, + __whence: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn ftello(__stream: *mut FILE) -> __off_t; +} +unsafe extern "C" { + pub fn fgetpos(__stream: *mut FILE, __pos: *mut fpos_t) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fsetpos(__stream: *mut FILE, __pos: *const fpos_t) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn clearerr(__stream: *mut FILE); +} +unsafe extern "C" { + pub fn feof(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn ferror(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn clearerr_unlocked(__stream: *mut FILE); +} +unsafe extern "C" { + pub fn feof_unlocked(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn ferror_unlocked(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn perror(__s: *const ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn fileno(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn fileno_unlocked(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn pclose(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn popen( + __command: *const ::std::os::raw::c_char, + __modes: *const ::std::os::raw::c_char, + ) -> *mut FILE; +} +unsafe extern "C" { + pub fn ctermid(__s: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn flockfile(__stream: *mut FILE); +} +unsafe extern "C" { + pub fn ftrylockfile(__stream: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn funlockfile(__stream: *mut FILE); +} +unsafe extern "C" { + pub fn __uflow(arg1: *mut FILE) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn __overflow(arg1: *mut FILE, arg2: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct gladGLversionStruct { + pub major: ::std::os::raw::c_int, + pub minor: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of gladGLversionStruct"][::std::mem::size_of::() - 8usize]; + ["Alignment of gladGLversionStruct"][::std::mem::align_of::() - 4usize]; + ["Offset of field: gladGLversionStruct::major"] + [::std::mem::offset_of!(gladGLversionStruct, major) - 0usize]; + ["Offset of field: gladGLversionStruct::minor"] + [::std::mem::offset_of!(gladGLversionStruct, minor) - 4usize]; +}; +pub type GLADloadproc = ::std::option::Option< + unsafe extern "C" fn(name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut GLVersion: gladGLversionStruct; +} +unsafe extern "C" { + pub fn gladLoadGL() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn gladLoadGLLoader(arg1: GLADloadproc) -> ::std::os::raw::c_int; +} +pub type khronos_int32_t = i32; +pub type khronos_uint32_t = u32; +pub type khronos_int64_t = i64; +pub type khronos_uint64_t = u64; +pub type khronos_int8_t = ::std::os::raw::c_schar; +pub type khronos_uint8_t = ::std::os::raw::c_uchar; +pub type khronos_int16_t = ::std::os::raw::c_short; +pub type khronos_uint16_t = ::std::os::raw::c_ushort; +pub type khronos_intptr_t = ::std::os::raw::c_long; +pub type khronos_uintptr_t = ::std::os::raw::c_ulong; +pub type khronos_ssize_t = ::std::os::raw::c_long; +pub type khronos_usize_t = ::std::os::raw::c_ulong; +pub type khronos_float_t = f32; +pub type khronos_utime_nanoseconds_t = khronos_uint64_t; +pub type khronos_stime_nanoseconds_t = khronos_int64_t; +pub const khronos_boolean_enum_t_KHRONOS_FALSE: khronos_boolean_enum_t = 0; +pub const khronos_boolean_enum_t_KHRONOS_TRUE: khronos_boolean_enum_t = 1; +pub const khronos_boolean_enum_t_KHRONOS_BOOLEAN_ENUM_FORCE_SIZE: khronos_boolean_enum_t = + 2147483647; +pub type khronos_boolean_enum_t = ::std::os::raw::c_uint; +pub type GLenum = ::std::os::raw::c_uint; +pub type GLboolean = ::std::os::raw::c_uchar; +pub type GLbitfield = ::std::os::raw::c_uint; +pub type GLvoid = ::std::os::raw::c_void; +pub type GLbyte = khronos_int8_t; +pub type GLubyte = khronos_uint8_t; +pub type GLshort = khronos_int16_t; +pub type GLushort = khronos_uint16_t; +pub type GLint = ::std::os::raw::c_int; +pub type GLuint = ::std::os::raw::c_uint; +pub type GLclampx = khronos_int32_t; +pub type GLsizei = ::std::os::raw::c_int; +pub type GLfloat = khronos_float_t; +pub type GLclampf = khronos_float_t; +pub type GLdouble = f64; +pub type GLclampd = f64; +pub type GLeglClientBufferEXT = *mut ::std::os::raw::c_void; +pub type GLeglImageOES = *mut ::std::os::raw::c_void; +pub type GLchar = ::std::os::raw::c_char; +pub type GLcharARB = ::std::os::raw::c_char; +pub type GLhandleARB = ::std::os::raw::c_uint; +pub type GLhalf = khronos_uint16_t; +pub type GLhalfARB = khronos_uint16_t; +pub type GLfixed = khronos_int32_t; +pub type GLintptr = khronos_intptr_t; +pub type GLintptrARB = khronos_intptr_t; +pub type GLsizeiptr = khronos_ssize_t; +pub type GLsizeiptrARB = khronos_ssize_t; +pub type GLint64 = khronos_int64_t; +pub type GLint64EXT = khronos_int64_t; +pub type GLuint64 = khronos_uint64_t; +pub type GLuint64EXT = khronos_uint64_t; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __GLsync { + _unused: [u8; 0], +} +pub type GLsync = *mut __GLsync; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _cl_context { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _cl_event { + _unused: [u8; 0], +} +pub type GLDEBUGPROC = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *const ::std::os::raw::c_void, + ), +>; +pub type GLDEBUGPROCARB = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *const ::std::os::raw::c_void, + ), +>; +pub type GLDEBUGPROCKHR = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *const ::std::os::raw::c_void, + ), +>; +pub type GLDEBUGPROCAMD = ::std::option::Option< + unsafe extern "C" fn( + id: GLuint, + category: GLenum, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *mut ::std::os::raw::c_void, + ), +>; +pub type GLhalfNV = ::std::os::raw::c_ushort; +pub type GLvdpauSurfaceNV = GLintptr; +pub type GLVULKANPROCNV = ::std::option::Option; +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_0: ::std::os::raw::c_int; +} +pub type PFNGLCULLFACEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCullFace: PFNGLCULLFACEPROC; +} +pub type PFNGLFRONTFACEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFrontFace: PFNGLFRONTFACEPROC; +} +pub type PFNGLHINTPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glHint: PFNGLHINTPROC; +} +pub type PFNGLLINEWIDTHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glLineWidth: PFNGLLINEWIDTHPROC; +} +pub type PFNGLPOINTSIZEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointSize: PFNGLPOINTSIZEPROC; +} +pub type PFNGLPOLYGONMODEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPolygonMode: PFNGLPOLYGONMODEPROC; +} +pub type PFNGLSCISSORPROC = ::std::option::Option< + unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glScissor: PFNGLSCISSORPROC; +} +pub type PFNGLTEXPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexParameterf: PFNGLTEXPARAMETERFPROC; +} +pub type PFNGLTEXPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glTexParameterfv: PFNGLTEXPARAMETERFVPROC; +} +pub type PFNGLTEXPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexParameteri: PFNGLTEXPARAMETERIPROC; +} +pub type PFNGLTEXPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTexParameteriv: PFNGLTEXPARAMETERIVPROC; +} +pub type PFNGLTEXIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + border: GLint, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage1D: PFNGLTEXIMAGE1DPROC; +} +pub type PFNGLTEXIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + height: GLsizei, + border: GLint, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage2D: PFNGLTEXIMAGE2DPROC; +} +pub type PFNGLDRAWBUFFERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawBuffer: PFNGLDRAWBUFFERPROC; +} +pub type PFNGLCLEARPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClear: PFNGLCLEARPROC; +} +pub type PFNGLCLEARCOLORPROC = ::std::option::Option< + unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glClearColor: PFNGLCLEARCOLORPROC; +} +pub type PFNGLCLEARSTENCILPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClearStencil: PFNGLCLEARSTENCILPROC; +} +pub type PFNGLCLEARDEPTHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClearDepth: PFNGLCLEARDEPTHPROC; +} +pub type PFNGLSTENCILMASKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilMask: PFNGLSTENCILMASKPROC; +} +pub type PFNGLCOLORMASKPROC = ::std::option::Option< + unsafe extern "C" fn(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean), +>; +unsafe extern "C" { + pub static mut glad_glColorMask: PFNGLCOLORMASKPROC; +} +pub type PFNGLDEPTHMASKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthMask: PFNGLDEPTHMASKPROC; +} +pub type PFNGLDISABLEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisable: PFNGLDISABLEPROC; +} +pub type PFNGLENABLEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnable: PFNGLENABLEPROC; +} +pub type PFNGLFINISHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFinish: PFNGLFINISHPROC; +} +pub type PFNGLFLUSHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFlush: PFNGLFLUSHPROC; +} +pub type PFNGLBLENDFUNCPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendFunc: PFNGLBLENDFUNCPROC; +} +pub type PFNGLLOGICOPPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glLogicOp: PFNGLLOGICOPPROC; +} +pub type PFNGLSTENCILFUNCPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilFunc: PFNGLSTENCILFUNCPROC; +} +pub type PFNGLSTENCILOPPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilOp: PFNGLSTENCILOPPROC; +} +pub type PFNGLDEPTHFUNCPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthFunc: PFNGLDEPTHFUNCPROC; +} +pub type PFNGLPIXELSTOREFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPixelStoref: PFNGLPIXELSTOREFPROC; +} +pub type PFNGLPIXELSTOREIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPixelStorei: PFNGLPIXELSTOREIPROC; +} +pub type PFNGLREADBUFFERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glReadBuffer: PFNGLREADBUFFERPROC; +} +pub type PFNGLREADPIXELSPROC = ::std::option::Option< + unsafe extern "C" fn( + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glReadPixels: PFNGLREADPIXELSPROC; +} +pub type PFNGLGETBOOLEANVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetBooleanv: PFNGLGETBOOLEANVPROC; +} +pub type PFNGLGETDOUBLEVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetDoublev: PFNGLGETDOUBLEVPROC; +} +pub type PFNGLGETERRORPROC = ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glGetError: PFNGLGETERRORPROC; +} +pub type PFNGLGETFLOATVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetFloatv: PFNGLGETFLOATVPROC; +} +pub type PFNGLGETINTEGERVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetIntegerv: PFNGLGETINTEGERVPROC; +} +pub type PFNGLGETSTRINGPROC = + ::std::option::Option *const GLubyte>; +unsafe extern "C" { + pub static mut glad_glGetString: PFNGLGETSTRINGPROC; +} +pub type PFNGLGETTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + format: GLenum, + type_: GLenum, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTexImage: PFNGLGETTEXIMAGEPROC; +} +pub type PFNGLGETTEXPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTexParameterfv: PFNGLGETTEXPARAMETERFVPROC; +} +pub type PFNGLGETTEXPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTexParameteriv: PFNGLGETTEXPARAMETERIVPROC; +} +pub type PFNGLGETTEXLEVELPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTexLevelParameterfv: PFNGLGETTEXLEVELPARAMETERFVPROC; +} +pub type PFNGLGETTEXLEVELPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetTexLevelParameteriv: PFNGLGETTEXLEVELPARAMETERIVPROC; +} +pub type PFNGLISENABLEDPROC = ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsEnabled: PFNGLISENABLEDPROC; +} +pub type PFNGLDEPTHRANGEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRange: PFNGLDEPTHRANGEPROC; +} +pub type PFNGLVIEWPORTPROC = ::std::option::Option< + unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glViewport: PFNGLVIEWPORTPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_1: ::std::os::raw::c_int; +} +pub type PFNGLDRAWARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawArrays: PFNGLDRAWARRAYSPROC; +} +pub type PFNGLDRAWELEMENTSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElements: PFNGLDRAWELEMENTSPROC; +} +pub type PFNGLPOLYGONOFFSETPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPolygonOffset: PFNGLPOLYGONOFFSETPROC; +} +pub type PFNGLCOPYTEXIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + x: GLint, + y: GLint, + width: GLsizei, + border: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexImage1D: PFNGLCOPYTEXIMAGE1DPROC; +} +pub type PFNGLCOPYTEXIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + border: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexImage2D: PFNGLCOPYTEXIMAGE2DPROC; +} +pub type PFNGLCOPYTEXSUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexSubImage1D: PFNGLCOPYTEXSUBIMAGE1DPROC; +} +pub type PFNGLCOPYTEXSUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexSubImage2D: PFNGLCOPYTEXSUBIMAGE2DPROC; +} +pub type PFNGLTEXSUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexSubImage1D: PFNGLTEXSUBIMAGE1DPROC; +} +pub type PFNGLTEXSUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexSubImage2D: PFNGLTEXSUBIMAGE2DPROC; +} +pub type PFNGLBINDTEXTUREPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindTexture: PFNGLBINDTEXTUREPROC; +} +pub type PFNGLDELETETEXTURESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteTextures: PFNGLDELETETEXTURESPROC; +} +pub type PFNGLGENTEXTURESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenTextures: PFNGLGENTEXTURESPROC; +} +pub type PFNGLISTEXTUREPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsTexture: PFNGLISTEXTUREPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_2: ::std::os::raw::c_int; +} +pub type PFNGLDRAWRANGEELEMENTSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + start: GLuint, + end: GLuint, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawRangeElements: PFNGLDRAWRANGEELEMENTSPROC; +} +pub type PFNGLTEXIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + border: GLint, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage3D: PFNGLTEXIMAGE3DPROC; +} +pub type PFNGLTEXSUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexSubImage3D: PFNGLTEXSUBIMAGE3DPROC; +} +pub type PFNGLCOPYTEXSUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexSubImage3D: PFNGLCOPYTEXSUBIMAGE3DPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_3: ::std::os::raw::c_int; +} +pub type PFNGLACTIVETEXTUREPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glActiveTexture: PFNGLACTIVETEXTUREPROC; +} +pub type PFNGLSAMPLECOVERAGEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSampleCoverage: PFNGLSAMPLECOVERAGEPROC; +} +pub type PFNGLCOMPRESSEDTEXIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + border: GLint, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexImage3D: PFNGLCOMPRESSEDTEXIMAGE3DPROC; +} +pub type PFNGLCOMPRESSEDTEXIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + border: GLint, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexImage2D: PFNGLCOMPRESSEDTEXIMAGE2DPROC; +} +pub type PFNGLCOMPRESSEDTEXIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + width: GLsizei, + border: GLint, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexImage1D: PFNGLCOMPRESSEDTEXIMAGE1DPROC; +} +pub type PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexSubImage3D: PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC; +} +pub type PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexSubImage2D: PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC; +} +pub type PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexSubImage1D: PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC; +} +pub type PFNGLGETCOMPRESSEDTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, level: GLint, img: *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetCompressedTexImage: PFNGLGETCOMPRESSEDTEXIMAGEPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_4: ::std::os::raw::c_int; +} +pub type PFNGLBLENDFUNCSEPARATEPROC = ::std::option::Option< + unsafe extern "C" fn( + sfactorRGB: GLenum, + dfactorRGB: GLenum, + sfactorAlpha: GLenum, + dfactorAlpha: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlendFuncSeparate: PFNGLBLENDFUNCSEPARATEPROC; +} +pub type PFNGLMULTIDRAWARRAYSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + first: *const GLint, + count: *const GLsizei, + drawcount: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawArrays: PFNGLMULTIDRAWARRAYSPROC; +} +pub type PFNGLMULTIDRAWELEMENTSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: *const GLsizei, + type_: GLenum, + indices: *const *const ::std::os::raw::c_void, + drawcount: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElements: PFNGLMULTIDRAWELEMENTSPROC; +} +pub type PFNGLPOINTPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameterf: PFNGLPOINTPARAMETERFPROC; +} +pub type PFNGLPOINTPARAMETERFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameterfv: PFNGLPOINTPARAMETERFVPROC; +} +pub type PFNGLPOINTPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameteri: PFNGLPOINTPARAMETERIPROC; +} +pub type PFNGLPOINTPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameteriv: PFNGLPOINTPARAMETERIVPROC; +} +pub type PFNGLBLENDCOLORPROC = ::std::option::Option< + unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glBlendColor: PFNGLBLENDCOLORPROC; +} +pub type PFNGLBLENDEQUATIONPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquation: PFNGLBLENDEQUATIONPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_5: ::std::os::raw::c_int; +} +pub type PFNGLGENQUERIESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenQueries: PFNGLGENQUERIESPROC; +} +pub type PFNGLDELETEQUERIESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteQueries: PFNGLDELETEQUERIESPROC; +} +pub type PFNGLISQUERYPROC = ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsQuery: PFNGLISQUERYPROC; +} +pub type PFNGLBEGINQUERYPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginQuery: PFNGLBEGINQUERYPROC; +} +pub type PFNGLENDQUERYPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndQuery: PFNGLENDQUERYPROC; +} +pub type PFNGLGETQUERYIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryiv: PFNGLGETQUERYIVPROC; +} +pub type PFNGLGETQUERYOBJECTIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjectiv: PFNGLGETQUERYOBJECTIVPROC; +} +pub type PFNGLGETQUERYOBJECTUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjectuiv: PFNGLGETQUERYOBJECTUIVPROC; +} +pub type PFNGLBINDBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindBuffer: PFNGLBINDBUFFERPROC; +} +pub type PFNGLDELETEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteBuffers: PFNGLDELETEBUFFERSPROC; +} +pub type PFNGLGENBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenBuffers: PFNGLGENBUFFERSPROC; +} +pub type PFNGLISBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsBuffer: PFNGLISBUFFERPROC; +} +pub type PFNGLBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + usage: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBufferData: PFNGLBUFFERDATAPROC; +} +pub type PFNGLBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + offset: GLintptr, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glBufferSubData: PFNGLBUFFERSUBDATAPROC; +} +pub type PFNGLGETBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + offset: GLintptr, + size: GLsizeiptr, + data: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetBufferSubData: PFNGLGETBUFFERSUBDATAPROC; +} +pub type PFNGLMAPBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, access: GLenum) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapBuffer: PFNGLMAPBUFFERPROC; +} +pub type PFNGLUNMAPBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glUnmapBuffer: PFNGLUNMAPBUFFERPROC; +} +pub type PFNGLGETBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetBufferParameteriv: PFNGLGETBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETBUFFERPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetBufferPointerv: PFNGLGETBUFFERPOINTERVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_2_0: ::std::os::raw::c_int; +} +pub type PFNGLBLENDEQUATIONSEPARATEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquationSeparate: PFNGLBLENDEQUATIONSEPARATEPROC; +} +pub type PFNGLDRAWBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawBuffers: PFNGLDRAWBUFFERSPROC; +} +pub type PFNGLSTENCILOPSEPARATEPROC = ::std::option::Option< + unsafe extern "C" fn(face: GLenum, sfail: GLenum, dpfail: GLenum, dppass: GLenum), +>; +unsafe extern "C" { + pub static mut glad_glStencilOpSeparate: PFNGLSTENCILOPSEPARATEPROC; +} +pub type PFNGLSTENCILFUNCSEPARATEPROC = ::std::option::Option< + unsafe extern "C" fn(face: GLenum, func: GLenum, ref_: GLint, mask: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glStencilFuncSeparate: PFNGLSTENCILFUNCSEPARATEPROC; +} +pub type PFNGLSTENCILMASKSEPARATEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilMaskSeparate: PFNGLSTENCILMASKSEPARATEPROC; +} +pub type PFNGLATTACHSHADERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glAttachShader: PFNGLATTACHSHADERPROC; +} +pub type PFNGLBINDATTRIBLOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, index: GLuint, name: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glBindAttribLocation: PFNGLBINDATTRIBLOCATIONPROC; +} +pub type PFNGLCOMPILESHADERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCompileShader: PFNGLCOMPILESHADERPROC; +} +pub type PFNGLCREATEPROGRAMPROC = ::std::option::Option GLuint>; +unsafe extern "C" { + pub static mut glad_glCreateProgram: PFNGLCREATEPROGRAMPROC; +} +pub type PFNGLCREATESHADERPROC = + ::std::option::Option GLuint>; +unsafe extern "C" { + pub static mut glad_glCreateShader: PFNGLCREATESHADERPROC; +} +pub type PFNGLDELETEPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteProgram: PFNGLDELETEPROGRAMPROC; +} +pub type PFNGLDELETESHADERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteShader: PFNGLDELETESHADERPROC; +} +pub type PFNGLDETACHSHADERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDetachShader: PFNGLDETACHSHADERPROC; +} +pub type PFNGLDISABLEVERTEXATTRIBARRAYPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisableVertexAttribArray: PFNGLDISABLEVERTEXATTRIBARRAYPROC; +} +pub type PFNGLENABLEVERTEXATTRIBARRAYPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnableVertexAttribArray: PFNGLENABLEVERTEXATTRIBARRAYPROC; +} +pub type PFNGLGETACTIVEATTRIBPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + size: *mut GLint, + type_: *mut GLenum, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveAttrib: PFNGLGETACTIVEATTRIBPROC; +} +pub type PFNGLGETACTIVEUNIFORMPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + size: *mut GLint, + type_: *mut GLenum, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniform: PFNGLGETACTIVEUNIFORMPROC; +} +pub type PFNGLGETATTACHEDSHADERSPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + maxCount: GLsizei, + count: *mut GLsizei, + shaders: *mut GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetAttachedShaders: PFNGLGETATTACHEDSHADERSPROC; +} +pub type PFNGLGETATTRIBLOCATIONPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetAttribLocation: PFNGLGETATTRIBLOCATIONPROC; +} +pub type PFNGLGETPROGRAMIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetProgramiv: PFNGLGETPROGRAMIVPROC; +} +pub type PFNGLGETPROGRAMINFOLOGPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + infoLog: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramInfoLog: PFNGLGETPROGRAMINFOLOGPROC; +} +pub type PFNGLGETSHADERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetShaderiv: PFNGLGETSHADERIVPROC; +} +pub type PFNGLGETSHADERINFOLOGPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + infoLog: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetShaderInfoLog: PFNGLGETSHADERINFOLOGPROC; +} +pub type PFNGLGETSHADERSOURCEPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + source: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetShaderSource: PFNGLGETSHADERSOURCEPROC; +} +pub type PFNGLGETUNIFORMLOCATIONPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetUniformLocation: PFNGLGETUNIFORMLOCATIONPROC; +} +pub type PFNGLGETUNIFORMFVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformfv: PFNGLGETUNIFORMFVPROC; +} +pub type PFNGLGETUNIFORMIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformiv: PFNGLGETUNIFORMIVPROC; +} +pub type PFNGLGETVERTEXATTRIBDVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribdv: PFNGLGETVERTEXATTRIBDVPROC; +} +pub type PFNGLGETVERTEXATTRIBFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribfv: PFNGLGETVERTEXATTRIBFVPROC; +} +pub type PFNGLGETVERTEXATTRIBIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribiv: PFNGLGETVERTEXATTRIBIVPROC; +} +pub type PFNGLGETVERTEXATTRIBPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, pname: GLenum, pointer: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribPointerv: PFNGLGETVERTEXATTRIBPOINTERVPROC; +} +pub type PFNGLISPROGRAMPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsProgram: PFNGLISPROGRAMPROC; +} +pub type PFNGLISSHADERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsShader: PFNGLISSHADERPROC; +} +pub type PFNGLLINKPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glLinkProgram: PFNGLLINKPROGRAMPROC; +} +pub type PFNGLSHADERSOURCEPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + count: GLsizei, + string: *const *const GLchar, + length: *const GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glShaderSource: PFNGLSHADERSOURCEPROC; +} +pub type PFNGLUSEPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUseProgram: PFNGLUSEPROGRAMPROC; +} +pub type PFNGLUNIFORM1FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1f: PFNGLUNIFORM1FPROC; +} +pub type PFNGLUNIFORM2FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2f: PFNGLUNIFORM2FPROC; +} +pub type PFNGLUNIFORM3FPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform3f: PFNGLUNIFORM3FPROC; +} +pub type PFNGLUNIFORM4FPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform4f: PFNGLUNIFORM4FPROC; +} +pub type PFNGLUNIFORM1IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1i: PFNGLUNIFORM1IPROC; +} +pub type PFNGLUNIFORM2IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2i: PFNGLUNIFORM2IPROC; +} +pub type PFNGLUNIFORM3IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform3i: PFNGLUNIFORM3IPROC; +} +pub type PFNGLUNIFORM4IPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4i: PFNGLUNIFORM4IPROC; +} +pub type PFNGLUNIFORM1FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform1fv: PFNGLUNIFORM1FVPROC; +} +pub type PFNGLUNIFORM2FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform2fv: PFNGLUNIFORM2FVPROC; +} +pub type PFNGLUNIFORM3FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform3fv: PFNGLUNIFORM3FVPROC; +} +pub type PFNGLUNIFORM4FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform4fv: PFNGLUNIFORM4FVPROC; +} +pub type PFNGLUNIFORM1IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform1iv: PFNGLUNIFORM1IVPROC; +} +pub type PFNGLUNIFORM2IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform2iv: PFNGLUNIFORM2IVPROC; +} +pub type PFNGLUNIFORM3IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform3iv: PFNGLUNIFORM3IVPROC; +} +pub type PFNGLUNIFORM4IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4iv: PFNGLUNIFORM4IVPROC; +} +pub type PFNGLUNIFORMMATRIX2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2fv: PFNGLUNIFORMMATRIX2FVPROC; +} +pub type PFNGLUNIFORMMATRIX3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3fv: PFNGLUNIFORMMATRIX3FVPROC; +} +pub type PFNGLUNIFORMMATRIX4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4fv: PFNGLUNIFORMMATRIX4FVPROC; +} +pub type PFNGLVALIDATEPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glValidateProgram: PFNGLVALIDATEPROGRAMPROC; +} +pub type PFNGLVERTEXATTRIB1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1d: PFNGLVERTEXATTRIB1DPROC; +} +pub type PFNGLVERTEXATTRIB1DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1dv: PFNGLVERTEXATTRIB1DVPROC; +} +pub type PFNGLVERTEXATTRIB1FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1f: PFNGLVERTEXATTRIB1FPROC; +} +pub type PFNGLVERTEXATTRIB1FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1fv: PFNGLVERTEXATTRIB1FVPROC; +} +pub type PFNGLVERTEXATTRIB1SPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1s: PFNGLVERTEXATTRIB1SPROC; +} +pub type PFNGLVERTEXATTRIB1SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1sv: PFNGLVERTEXATTRIB1SVPROC; +} +pub type PFNGLVERTEXATTRIB2DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2d: PFNGLVERTEXATTRIB2DPROC; +} +pub type PFNGLVERTEXATTRIB2DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2dv: PFNGLVERTEXATTRIB2DVPROC; +} +pub type PFNGLVERTEXATTRIB2FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2f: PFNGLVERTEXATTRIB2FPROC; +} +pub type PFNGLVERTEXATTRIB2FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2fv: PFNGLVERTEXATTRIB2FVPROC; +} +pub type PFNGLVERTEXATTRIB2SPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2s: PFNGLVERTEXATTRIB2SPROC; +} +pub type PFNGLVERTEXATTRIB2SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2sv: PFNGLVERTEXATTRIB2SVPROC; +} +pub type PFNGLVERTEXATTRIB3DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3d: PFNGLVERTEXATTRIB3DPROC; +} +pub type PFNGLVERTEXATTRIB3DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3dv: PFNGLVERTEXATTRIB3DVPROC; +} +pub type PFNGLVERTEXATTRIB3FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3f: PFNGLVERTEXATTRIB3FPROC; +} +pub type PFNGLVERTEXATTRIB3FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3fv: PFNGLVERTEXATTRIB3FVPROC; +} +pub type PFNGLVERTEXATTRIB3SPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3s: PFNGLVERTEXATTRIB3SPROC; +} +pub type PFNGLVERTEXATTRIB3SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3sv: PFNGLVERTEXATTRIB3SVPROC; +} +pub type PFNGLVERTEXATTRIB4NBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nbv: PFNGLVERTEXATTRIB4NBVPROC; +} +pub type PFNGLVERTEXATTRIB4NIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Niv: PFNGLVERTEXATTRIB4NIVPROC; +} +pub type PFNGLVERTEXATTRIB4NSVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nsv: PFNGLVERTEXATTRIB4NSVPROC; +} +pub type PFNGLVERTEXATTRIB4NUBPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nub: PFNGLVERTEXATTRIB4NUBPROC; +} +pub type PFNGLVERTEXATTRIB4NUBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nubv: PFNGLVERTEXATTRIB4NUBVPROC; +} +pub type PFNGLVERTEXATTRIB4NUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nuiv: PFNGLVERTEXATTRIB4NUIVPROC; +} +pub type PFNGLVERTEXATTRIB4NUSVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nusv: PFNGLVERTEXATTRIB4NUSVPROC; +} +pub type PFNGLVERTEXATTRIB4BVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4bv: PFNGLVERTEXATTRIB4BVPROC; +} +pub type PFNGLVERTEXATTRIB4DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4d: PFNGLVERTEXATTRIB4DPROC; +} +pub type PFNGLVERTEXATTRIB4DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4dv: PFNGLVERTEXATTRIB4DVPROC; +} +pub type PFNGLVERTEXATTRIB4FPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4f: PFNGLVERTEXATTRIB4FPROC; +} +pub type PFNGLVERTEXATTRIB4FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4fv: PFNGLVERTEXATTRIB4FVPROC; +} +pub type PFNGLVERTEXATTRIB4IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4iv: PFNGLVERTEXATTRIB4IVPROC; +} +pub type PFNGLVERTEXATTRIB4SPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4s: PFNGLVERTEXATTRIB4SPROC; +} +pub type PFNGLVERTEXATTRIB4SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4sv: PFNGLVERTEXATTRIB4SVPROC; +} +pub type PFNGLVERTEXATTRIB4UBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4ubv: PFNGLVERTEXATTRIB4UBVPROC; +} +pub type PFNGLVERTEXATTRIB4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4uiv: PFNGLVERTEXATTRIB4UIVPROC; +} +pub type PFNGLVERTEXATTRIB4USVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4usv: PFNGLVERTEXATTRIB4USVPROC; +} +pub type PFNGLVERTEXATTRIBPOINTERPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + size: GLint, + type_: GLenum, + normalized: GLboolean, + stride: GLsizei, + pointer: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribPointer: PFNGLVERTEXATTRIBPOINTERPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_2_1: ::std::os::raw::c_int; +} +pub type PFNGLUNIFORMMATRIX2X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x3fv: PFNGLUNIFORMMATRIX2X3FVPROC; +} +pub type PFNGLUNIFORMMATRIX3X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x2fv: PFNGLUNIFORMMATRIX3X2FVPROC; +} +pub type PFNGLUNIFORMMATRIX2X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x4fv: PFNGLUNIFORMMATRIX2X4FVPROC; +} +pub type PFNGLUNIFORMMATRIX4X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x2fv: PFNGLUNIFORMMATRIX4X2FVPROC; +} +pub type PFNGLUNIFORMMATRIX3X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x4fv: PFNGLUNIFORMMATRIX3X4FVPROC; +} +pub type PFNGLUNIFORMMATRIX4X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x3fv: PFNGLUNIFORMMATRIX4X3FVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_0: ::std::os::raw::c_int; +} +pub type PFNGLCOLORMASKIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean), +>; +unsafe extern "C" { + pub static mut glad_glColorMaski: PFNGLCOLORMASKIPROC; +} +pub type PFNGLGETBOOLEANI_VPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, index: GLuint, data: *mut GLboolean), +>; +unsafe extern "C" { + pub static mut glad_glGetBooleani_v: PFNGLGETBOOLEANI_VPROC; +} +pub type PFNGLGETINTEGERI_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetIntegeri_v: PFNGLGETINTEGERI_VPROC; +} +pub type PFNGLENABLEIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnablei: PFNGLENABLEIPROC; +} +pub type PFNGLDISABLEIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisablei: PFNGLDISABLEIPROC; +} +pub type PFNGLISENABLEDIPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsEnabledi: PFNGLISENABLEDIPROC; +} +pub type PFNGLBEGINTRANSFORMFEEDBACKPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginTransformFeedback: PFNGLBEGINTRANSFORMFEEDBACKPROC; +} +pub type PFNGLENDTRANSFORMFEEDBACKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndTransformFeedback: PFNGLENDTRANSFORMFEEDBACKPROC; +} +pub type PFNGLBINDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + index: GLuint, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindBufferRange: PFNGLBINDBUFFERRANGEPROC; +} +pub type PFNGLBINDBUFFERBASEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindBufferBase: PFNGLBINDBUFFERBASEPROC; +} +pub type PFNGLTRANSFORMFEEDBACKVARYINGSPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + count: GLsizei, + varyings: *const *const GLchar, + bufferMode: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glTransformFeedbackVaryings: PFNGLTRANSFORMFEEDBACKVARYINGSPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKVARYINGPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + size: *mut GLsizei, + type_: *mut GLenum, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbackVarying: PFNGLGETTRANSFORMFEEDBACKVARYINGPROC; +} +pub type PFNGLCLAMPCOLORPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClampColor: PFNGLCLAMPCOLORPROC; +} +pub type PFNGLBEGINCONDITIONALRENDERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginConditionalRender: PFNGLBEGINCONDITIONALRENDERPROC; +} +pub type PFNGLENDCONDITIONALRENDERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndConditionalRender: PFNGLENDCONDITIONALRENDERPROC; +} +pub type PFNGLVERTEXATTRIBIPOINTERPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + size: GLint, + type_: GLenum, + stride: GLsizei, + pointer: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribIPointer: PFNGLVERTEXATTRIBIPOINTERPROC; +} +pub type PFNGLGETVERTEXATTRIBIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribIiv: PFNGLGETVERTEXATTRIBIIVPROC; +} +pub type PFNGLGETVERTEXATTRIBIUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribIuiv: PFNGLGETVERTEXATTRIBIUIVPROC; +} +pub type PFNGLVERTEXATTRIBI1IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1i: PFNGLVERTEXATTRIBI1IPROC; +} +pub type PFNGLVERTEXATTRIBI2IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2i: PFNGLVERTEXATTRIBI2IPROC; +} +pub type PFNGLVERTEXATTRIBI3IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3i: PFNGLVERTEXATTRIBI3IPROC; +} +pub type PFNGLVERTEXATTRIBI4IPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4i: PFNGLVERTEXATTRIBI4IPROC; +} +pub type PFNGLVERTEXATTRIBI1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1ui: PFNGLVERTEXATTRIBI1UIPROC; +} +pub type PFNGLVERTEXATTRIBI2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2ui: PFNGLVERTEXATTRIBI2UIPROC; +} +pub type PFNGLVERTEXATTRIBI3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3ui: PFNGLVERTEXATTRIBI3UIPROC; +} +pub type PFNGLVERTEXATTRIBI4UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4ui: PFNGLVERTEXATTRIBI4UIPROC; +} +pub type PFNGLVERTEXATTRIBI1IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1iv: PFNGLVERTEXATTRIBI1IVPROC; +} +pub type PFNGLVERTEXATTRIBI2IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2iv: PFNGLVERTEXATTRIBI2IVPROC; +} +pub type PFNGLVERTEXATTRIBI3IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3iv: PFNGLVERTEXATTRIBI3IVPROC; +} +pub type PFNGLVERTEXATTRIBI4IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4iv: PFNGLVERTEXATTRIBI4IVPROC; +} +pub type PFNGLVERTEXATTRIBI1UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1uiv: PFNGLVERTEXATTRIBI1UIVPROC; +} +pub type PFNGLVERTEXATTRIBI2UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2uiv: PFNGLVERTEXATTRIBI2UIVPROC; +} +pub type PFNGLVERTEXATTRIBI3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3uiv: PFNGLVERTEXATTRIBI3UIVPROC; +} +pub type PFNGLVERTEXATTRIBI4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4uiv: PFNGLVERTEXATTRIBI4UIVPROC; +} +pub type PFNGLVERTEXATTRIBI4BVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4bv: PFNGLVERTEXATTRIBI4BVPROC; +} +pub type PFNGLVERTEXATTRIBI4SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4sv: PFNGLVERTEXATTRIBI4SVPROC; +} +pub type PFNGLVERTEXATTRIBI4UBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4ubv: PFNGLVERTEXATTRIBI4UBVPROC; +} +pub type PFNGLVERTEXATTRIBI4USVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4usv: PFNGLVERTEXATTRIBI4USVPROC; +} +pub type PFNGLGETUNIFORMUIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformuiv: PFNGLGETUNIFORMUIVPROC; +} +pub type PFNGLBINDFRAGDATALOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, color: GLuint, name: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glBindFragDataLocation: PFNGLBINDFRAGDATALOCATIONPROC; +} +pub type PFNGLGETFRAGDATALOCATIONPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetFragDataLocation: PFNGLGETFRAGDATALOCATIONPROC; +} +pub type PFNGLUNIFORM1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1ui: PFNGLUNIFORM1UIPROC; +} +pub type PFNGLUNIFORM2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2ui: PFNGLUNIFORM2UIPROC; +} +pub type PFNGLUNIFORM3UIPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform3ui: PFNGLUNIFORM3UIPROC; +} +pub type PFNGLUNIFORM4UIPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4ui: PFNGLUNIFORM4UIPROC; +} +pub type PFNGLUNIFORM1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform1uiv: PFNGLUNIFORM1UIVPROC; +} +pub type PFNGLUNIFORM2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform2uiv: PFNGLUNIFORM2UIVPROC; +} +pub type PFNGLUNIFORM3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform3uiv: PFNGLUNIFORM3UIVPROC; +} +pub type PFNGLUNIFORM4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4uiv: PFNGLUNIFORM4UIVPROC; +} +pub type PFNGLTEXPARAMETERIIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTexParameterIiv: PFNGLTEXPARAMETERIIVPROC; +} +pub type PFNGLTEXPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTexParameterIuiv: PFNGLTEXPARAMETERIUIVPROC; +} +pub type PFNGLGETTEXPARAMETERIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTexParameterIiv: PFNGLGETTEXPARAMETERIIVPROC; +} +pub type PFNGLGETTEXPARAMETERIUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTexParameterIuiv: PFNGLGETTEXPARAMETERIUIVPROC; +} +pub type PFNGLCLEARBUFFERIVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferiv: PFNGLCLEARBUFFERIVPROC; +} +pub type PFNGLCLEARBUFFERUIVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferuiv: PFNGLCLEARBUFFERUIVPROC; +} +pub type PFNGLCLEARBUFFERFVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferfv: PFNGLCLEARBUFFERFVPROC; +} +pub type PFNGLCLEARBUFFERFIPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferfi: PFNGLCLEARBUFFERFIPROC; +} +pub type PFNGLGETSTRINGIPROC = + ::std::option::Option *const GLubyte>; +unsafe extern "C" { + pub static mut glad_glGetStringi: PFNGLGETSTRINGIPROC; +} +pub type PFNGLISRENDERBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsRenderbuffer: PFNGLISRENDERBUFFERPROC; +} +pub type PFNGLBINDRENDERBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindRenderbuffer: PFNGLBINDRENDERBUFFERPROC; +} +pub type PFNGLDELETERENDERBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteRenderbuffers: PFNGLDELETERENDERBUFFERSPROC; +} +pub type PFNGLGENRENDERBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenRenderbuffers: PFNGLGENRENDERBUFFERSPROC; +} +pub type PFNGLRENDERBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glRenderbufferStorage: PFNGLRENDERBUFFERSTORAGEPROC; +} +pub type PFNGLGETRENDERBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetRenderbufferParameteriv: PFNGLGETRENDERBUFFERPARAMETERIVPROC; +} +pub type PFNGLISFRAMEBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsFramebuffer: PFNGLISFRAMEBUFFERPROC; +} +pub type PFNGLBINDFRAMEBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindFramebuffer: PFNGLBINDFRAMEBUFFERPROC; +} +pub type PFNGLDELETEFRAMEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteFramebuffers: PFNGLDELETEFRAMEBUFFERSPROC; +} +pub type PFNGLGENFRAMEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenFramebuffers: PFNGLGENFRAMEBUFFERSPROC; +} +pub type PFNGLCHECKFRAMEBUFFERSTATUSPROC = + ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glCheckFramebufferStatus: PFNGLCHECKFRAMEBUFFERSTATUSPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + textarget: GLenum, + texture: GLuint, + level: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture1D: PFNGLFRAMEBUFFERTEXTURE1DPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + textarget: GLenum, + texture: GLuint, + level: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture2D: PFNGLFRAMEBUFFERTEXTURE2DPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + textarget: GLenum, + texture: GLuint, + level: GLint, + zoffset: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture3D: PFNGLFRAMEBUFFERTEXTURE3DPROC; +} +pub type PFNGLFRAMEBUFFERRENDERBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + renderbuffertarget: GLenum, + renderbuffer: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferRenderbuffer: PFNGLFRAMEBUFFERRENDERBUFFERPROC; +} +pub type PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetFramebufferAttachmentParameteriv: + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC; +} +pub type PFNGLGENERATEMIPMAPPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenerateMipmap: PFNGLGENERATEMIPMAPPROC; +} +pub type PFNGLBLITFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + srcX0: GLint, + srcY0: GLint, + srcX1: GLint, + srcY1: GLint, + dstX0: GLint, + dstY0: GLint, + dstX1: GLint, + dstY1: GLint, + mask: GLbitfield, + filter: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlitFramebuffer: PFNGLBLITFRAMEBUFFERPROC; +} +pub type PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glRenderbufferStorageMultisample: PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURELAYERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + texture: GLuint, + level: GLint, + layer: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTextureLayer: PFNGLFRAMEBUFFERTEXTURELAYERPROC; +} +pub type PFNGLMAPBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + offset: GLintptr, + length: GLsizeiptr, + access: GLbitfield, + ) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapBufferRange: PFNGLMAPBUFFERRANGEPROC; +} +pub type PFNGLFLUSHMAPPEDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, offset: GLintptr, length: GLsizeiptr), +>; +unsafe extern "C" { + pub static mut glad_glFlushMappedBufferRange: PFNGLFLUSHMAPPEDBUFFERRANGEPROC; +} +pub type PFNGLBINDVERTEXARRAYPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindVertexArray: PFNGLBINDVERTEXARRAYPROC; +} +pub type PFNGLDELETEVERTEXARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteVertexArrays: PFNGLDELETEVERTEXARRAYSPROC; +} +pub type PFNGLGENVERTEXARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenVertexArrays: PFNGLGENVERTEXARRAYSPROC; +} +pub type PFNGLISVERTEXARRAYPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsVertexArray: PFNGLISVERTEXARRAYPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_1: ::std::os::raw::c_int; +} +pub type PFNGLDRAWARRAYSINSTANCEDPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glDrawArraysInstanced: PFNGLDRAWARRAYSINSTANCEDPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstanced: PFNGLDRAWELEMENTSINSTANCEDPROC; +} +pub type PFNGLTEXBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, internalformat: GLenum, buffer: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTexBuffer: PFNGLTEXBUFFERPROC; +} +pub type PFNGLPRIMITIVERESTARTINDEXPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPrimitiveRestartIndex: PFNGLPRIMITIVERESTARTINDEXPROC; +} +pub type PFNGLCOPYBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + readTarget: GLenum, + writeTarget: GLenum, + readOffset: GLintptr, + writeOffset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyBufferSubData: PFNGLCOPYBUFFERSUBDATAPROC; +} +pub type PFNGLGETUNIFORMINDICESPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformCount: GLsizei, + uniformNames: *const *const GLchar, + uniformIndices: *mut GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformIndices: PFNGLGETUNIFORMINDICESPROC; +} +pub type PFNGLGETACTIVEUNIFORMSIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformCount: GLsizei, + uniformIndices: *const GLuint, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformsiv: PFNGLGETACTIVEUNIFORMSIVPROC; +} +pub type PFNGLGETACTIVEUNIFORMNAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformIndex: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + uniformName: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformName: PFNGLGETACTIVEUNIFORMNAMEPROC; +} +pub type PFNGLGETUNIFORMBLOCKINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, uniformBlockName: *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetUniformBlockIndex: PFNGLGETUNIFORMBLOCKINDEXPROC; +} +pub type PFNGLGETACTIVEUNIFORMBLOCKIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformBlockIndex: GLuint, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformBlockiv: PFNGLGETACTIVEUNIFORMBLOCKIVPROC; +} +pub type PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformBlockIndex: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + uniformBlockName: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformBlockName: PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC; +} +pub type PFNGLUNIFORMBLOCKBINDINGPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniformBlockBinding: PFNGLUNIFORMBLOCKBINDINGPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_2: ::std::os::raw::c_int; +} +pub type PFNGLDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + basevertex: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsBaseVertex: PFNGLDRAWELEMENTSBASEVERTEXPROC; +} +pub type PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + start: GLuint, + end: GLuint, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + basevertex: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawRangeElementsBaseVertex: PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + basevertex: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstancedBaseVertex: PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC; +} +pub type PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: *const GLsizei, + type_: GLenum, + indices: *const *const ::std::os::raw::c_void, + drawcount: GLsizei, + basevertex: *const GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElementsBaseVertex: PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC; +} +pub type PFNGLPROVOKINGVERTEXPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProvokingVertex: PFNGLPROVOKINGVERTEXPROC; +} +pub type PFNGLFENCESYNCPROC = + ::std::option::Option GLsync>; +unsafe extern "C" { + pub static mut glad_glFenceSync: PFNGLFENCESYNCPROC; +} +pub type PFNGLISSYNCPROC = ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsSync: PFNGLISSYNCPROC; +} +pub type PFNGLDELETESYNCPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteSync: PFNGLDELETESYNCPROC; +} +pub type PFNGLCLIENTWAITSYNCPROC = ::std::option::Option< + unsafe extern "C" fn(sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> GLenum, +>; +unsafe extern "C" { + pub static mut glad_glClientWaitSync: PFNGLCLIENTWAITSYNCPROC; +} +pub type PFNGLWAITSYNCPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glWaitSync: PFNGLWAITSYNCPROC; +} +pub type PFNGLGETINTEGER64VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetInteger64v: PFNGLGETINTEGER64VPROC; +} +pub type PFNGLGETSYNCIVPROC = ::std::option::Option< + unsafe extern "C" fn( + sync: GLsync, + pname: GLenum, + count: GLsizei, + length: *mut GLsizei, + values: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetSynciv: PFNGLGETSYNCIVPROC; +} +pub type PFNGLGETINTEGER64I_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetInteger64i_v: PFNGLGETINTEGER64I_VPROC; +} +pub type PFNGLGETBUFFERPARAMETERI64VPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetBufferParameteri64v: PFNGLGETBUFFERPARAMETERI64VPROC; +} +pub type PFNGLFRAMEBUFFERTEXTUREPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, attachment: GLenum, texture: GLuint, level: GLint), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture: PFNGLFRAMEBUFFERTEXTUREPROC; +} +pub type PFNGLTEXIMAGE2DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage2DMultisample: PFNGLTEXIMAGE2DMULTISAMPLEPROC; +} +pub type PFNGLTEXIMAGE3DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage3DMultisample: PFNGLTEXIMAGE3DMULTISAMPLEPROC; +} +pub type PFNGLGETMULTISAMPLEFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetMultisamplefv: PFNGLGETMULTISAMPLEFVPROC; +} +pub type PFNGLSAMPLEMASKIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSampleMaski: PFNGLSAMPLEMASKIPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_3: ::std::os::raw::c_int; +} +pub type PFNGLBINDFRAGDATALOCATIONINDEXEDPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, colorNumber: GLuint, index: GLuint, name: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glBindFragDataLocationIndexed: PFNGLBINDFRAGDATALOCATIONINDEXEDPROC; +} +pub type PFNGLGETFRAGDATAINDEXPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetFragDataIndex: PFNGLGETFRAGDATAINDEXPROC; +} +pub type PFNGLGENSAMPLERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenSamplers: PFNGLGENSAMPLERSPROC; +} +pub type PFNGLDELETESAMPLERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteSamplers: PFNGLDELETESAMPLERSPROC; +} +pub type PFNGLISSAMPLERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsSampler: PFNGLISSAMPLERPROC; +} +pub type PFNGLBINDSAMPLERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindSampler: PFNGLBINDSAMPLERPROC; +} +pub type PFNGLSAMPLERPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSamplerParameteri: PFNGLSAMPLERPARAMETERIPROC; +} +pub type PFNGLSAMPLERPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameteriv: PFNGLSAMPLERPARAMETERIVPROC; +} +pub type PFNGLSAMPLERPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSamplerParameterf: PFNGLSAMPLERPARAMETERFPROC; +} +pub type PFNGLSAMPLERPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameterfv: PFNGLSAMPLERPARAMETERFVPROC; +} +pub type PFNGLSAMPLERPARAMETERIIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameterIiv: PFNGLSAMPLERPARAMETERIIVPROC; +} +pub type PFNGLSAMPLERPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameterIuiv: PFNGLSAMPLERPARAMETERIUIVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameteriv: PFNGLGETSAMPLERPARAMETERIVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameterIiv: PFNGLGETSAMPLERPARAMETERIIVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameterfv: PFNGLGETSAMPLERPARAMETERFVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameterIuiv: PFNGLGETSAMPLERPARAMETERIUIVPROC; +} +pub type PFNGLQUERYCOUNTERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glQueryCounter: PFNGLQUERYCOUNTERPROC; +} +pub type PFNGLGETQUERYOBJECTI64VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjecti64v: PFNGLGETQUERYOBJECTI64VPROC; +} +pub type PFNGLGETQUERYOBJECTUI64VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjectui64v: PFNGLGETQUERYOBJECTUI64VPROC; +} +pub type PFNGLVERTEXATTRIBDIVISORPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribDivisor: PFNGLVERTEXATTRIBDIVISORPROC; +} +pub type PFNGLVERTEXATTRIBP1UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP1ui: PFNGLVERTEXATTRIBP1UIPROC; +} +pub type PFNGLVERTEXATTRIBP1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP1uiv: PFNGLVERTEXATTRIBP1UIVPROC; +} +pub type PFNGLVERTEXATTRIBP2UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP2ui: PFNGLVERTEXATTRIBP2UIPROC; +} +pub type PFNGLVERTEXATTRIBP2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP2uiv: PFNGLVERTEXATTRIBP2UIVPROC; +} +pub type PFNGLVERTEXATTRIBP3UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP3ui: PFNGLVERTEXATTRIBP3UIPROC; +} +pub type PFNGLVERTEXATTRIBP3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP3uiv: PFNGLVERTEXATTRIBP3UIVPROC; +} +pub type PFNGLVERTEXATTRIBP4UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP4ui: PFNGLVERTEXATTRIBP4UIPROC; +} +pub type PFNGLVERTEXATTRIBP4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP4uiv: PFNGLVERTEXATTRIBP4UIVPROC; +} +pub type PFNGLVERTEXP2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP2ui: PFNGLVERTEXP2UIPROC; +} +pub type PFNGLVERTEXP2UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP2uiv: PFNGLVERTEXP2UIVPROC; +} +pub type PFNGLVERTEXP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP3ui: PFNGLVERTEXP3UIPROC; +} +pub type PFNGLVERTEXP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP3uiv: PFNGLVERTEXP3UIVPROC; +} +pub type PFNGLVERTEXP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP4ui: PFNGLVERTEXP4UIPROC; +} +pub type PFNGLVERTEXP4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP4uiv: PFNGLVERTEXP4UIVPROC; +} +pub type PFNGLTEXCOORDP1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP1ui: PFNGLTEXCOORDP1UIPROC; +} +pub type PFNGLTEXCOORDP1UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP1uiv: PFNGLTEXCOORDP1UIVPROC; +} +pub type PFNGLTEXCOORDP2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP2ui: PFNGLTEXCOORDP2UIPROC; +} +pub type PFNGLTEXCOORDP2UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP2uiv: PFNGLTEXCOORDP2UIVPROC; +} +pub type PFNGLTEXCOORDP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP3ui: PFNGLTEXCOORDP3UIPROC; +} +pub type PFNGLTEXCOORDP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP3uiv: PFNGLTEXCOORDP3UIVPROC; +} +pub type PFNGLTEXCOORDP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP4ui: PFNGLTEXCOORDP4UIPROC; +} +pub type PFNGLTEXCOORDP4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP4uiv: PFNGLTEXCOORDP4UIVPROC; +} +pub type PFNGLMULTITEXCOORDP1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP1ui: PFNGLMULTITEXCOORDP1UIPROC; +} +pub type PFNGLMULTITEXCOORDP1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP1uiv: PFNGLMULTITEXCOORDP1UIVPROC; +} +pub type PFNGLMULTITEXCOORDP2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP2ui: PFNGLMULTITEXCOORDP2UIPROC; +} +pub type PFNGLMULTITEXCOORDP2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP2uiv: PFNGLMULTITEXCOORDP2UIVPROC; +} +pub type PFNGLMULTITEXCOORDP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP3ui: PFNGLMULTITEXCOORDP3UIPROC; +} +pub type PFNGLMULTITEXCOORDP3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP3uiv: PFNGLMULTITEXCOORDP3UIVPROC; +} +pub type PFNGLMULTITEXCOORDP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP4ui: PFNGLMULTITEXCOORDP4UIPROC; +} +pub type PFNGLMULTITEXCOORDP4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP4uiv: PFNGLMULTITEXCOORDP4UIVPROC; +} +pub type PFNGLNORMALP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNormalP3ui: PFNGLNORMALP3UIPROC; +} +pub type PFNGLNORMALP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNormalP3uiv: PFNGLNORMALP3UIVPROC; +} +pub type PFNGLCOLORP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP3ui: PFNGLCOLORP3UIPROC; +} +pub type PFNGLCOLORP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP3uiv: PFNGLCOLORP3UIVPROC; +} +pub type PFNGLCOLORP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP4ui: PFNGLCOLORP4UIPROC; +} +pub type PFNGLCOLORP4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP4uiv: PFNGLCOLORP4UIVPROC; +} +pub type PFNGLSECONDARYCOLORP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSecondaryColorP3ui: PFNGLSECONDARYCOLORP3UIPROC; +} +pub type PFNGLSECONDARYCOLORP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSecondaryColorP3uiv: PFNGLSECONDARYCOLORP3UIVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_0: ::std::os::raw::c_int; +} +pub type PFNGLMINSAMPLESHADINGPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMinSampleShading: PFNGLMINSAMPLESHADINGPROC; +} +pub type PFNGLBLENDEQUATIONIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquationi: PFNGLBLENDEQUATIONIPROC; +} +pub type PFNGLBLENDEQUATIONSEPARATEIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquationSeparatei: PFNGLBLENDEQUATIONSEPARATEIPROC; +} +pub type PFNGLBLENDFUNCIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendFunci: PFNGLBLENDFUNCIPROC; +} +pub type PFNGLBLENDFUNCSEPARATEIPROC = ::std::option::Option< + unsafe extern "C" fn( + buf: GLuint, + srcRGB: GLenum, + dstRGB: GLenum, + srcAlpha: GLenum, + dstAlpha: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlendFuncSeparatei: PFNGLBLENDFUNCSEPARATEIPROC; +} +pub type PFNGLDRAWARRAYSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, indirect: *const ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glDrawArraysIndirect: PFNGLDRAWARRAYSINDIRECTPROC; +} +pub type PFNGLDRAWELEMENTSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, type_: GLenum, indirect: *const ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsIndirect: PFNGLDRAWELEMENTSINDIRECTPROC; +} +pub type PFNGLUNIFORM1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1d: PFNGLUNIFORM1DPROC; +} +pub type PFNGLUNIFORM2DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2d: PFNGLUNIFORM2DPROC; +} +pub type PFNGLUNIFORM3DPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, x: GLdouble, y: GLdouble, z: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform3d: PFNGLUNIFORM3DPROC; +} +pub type PFNGLUNIFORM4DPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform4d: PFNGLUNIFORM4DPROC; +} +pub type PFNGLUNIFORM1DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform1dv: PFNGLUNIFORM1DVPROC; +} +pub type PFNGLUNIFORM2DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform2dv: PFNGLUNIFORM2DVPROC; +} +pub type PFNGLUNIFORM3DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform3dv: PFNGLUNIFORM3DVPROC; +} +pub type PFNGLUNIFORM4DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform4dv: PFNGLUNIFORM4DVPROC; +} +pub type PFNGLUNIFORMMATRIX2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2dv: PFNGLUNIFORMMATRIX2DVPROC; +} +pub type PFNGLUNIFORMMATRIX3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3dv: PFNGLUNIFORMMATRIX3DVPROC; +} +pub type PFNGLUNIFORMMATRIX4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4dv: PFNGLUNIFORMMATRIX4DVPROC; +} +pub type PFNGLUNIFORMMATRIX2X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x3dv: PFNGLUNIFORMMATRIX2X3DVPROC; +} +pub type PFNGLUNIFORMMATRIX2X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x4dv: PFNGLUNIFORMMATRIX2X4DVPROC; +} +pub type PFNGLUNIFORMMATRIX3X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x2dv: PFNGLUNIFORMMATRIX3X2DVPROC; +} +pub type PFNGLUNIFORMMATRIX3X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x4dv: PFNGLUNIFORMMATRIX3X4DVPROC; +} +pub type PFNGLUNIFORMMATRIX4X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x2dv: PFNGLUNIFORMMATRIX4X2DVPROC; +} +pub type PFNGLUNIFORMMATRIX4X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x3dv: PFNGLUNIFORMMATRIX4X3DVPROC; +} +pub type PFNGLGETUNIFORMDVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformdv: PFNGLGETUNIFORMDVPROC; +} +pub type PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, shadertype: GLenum, name: *const GLchar) -> GLint, +>; +unsafe extern "C" { + pub static mut glad_glGetSubroutineUniformLocation: PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC; +} +pub type PFNGLGETSUBROUTINEINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, shadertype: GLenum, name: *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetSubroutineIndex: PFNGLGETSUBROUTINEINDEXPROC; +} +pub type PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + shadertype: GLenum, + index: GLuint, + pname: GLenum, + values: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveSubroutineUniformiv: PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC; +} +pub type PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + shadertype: GLenum, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveSubroutineUniformName: PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC; +} +pub type PFNGLGETACTIVESUBROUTINENAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + shadertype: GLenum, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveSubroutineName: PFNGLGETACTIVESUBROUTINENAMEPROC; +} +pub type PFNGLUNIFORMSUBROUTINESUIVPROC = ::std::option::Option< + unsafe extern "C" fn(shadertype: GLenum, count: GLsizei, indices: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniformSubroutinesuiv: PFNGLUNIFORMSUBROUTINESUIVPROC; +} +pub type PFNGLGETUNIFORMSUBROUTINEUIVPROC = ::std::option::Option< + unsafe extern "C" fn(shadertype: GLenum, location: GLint, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformSubroutineuiv: PFNGLGETUNIFORMSUBROUTINEUIVPROC; +} +pub type PFNGLGETPROGRAMSTAGEIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, shadertype: GLenum, pname: GLenum, values: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramStageiv: PFNGLGETPROGRAMSTAGEIVPROC; +} +pub type PFNGLPATCHPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPatchParameteri: PFNGLPATCHPARAMETERIPROC; +} +pub type PFNGLPATCHPARAMETERFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPatchParameterfv: PFNGLPATCHPARAMETERFVPROC; +} +pub type PFNGLBINDTRANSFORMFEEDBACKPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindTransformFeedback: PFNGLBINDTRANSFORMFEEDBACKPROC; +} +pub type PFNGLDELETETRANSFORMFEEDBACKSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteTransformFeedbacks: PFNGLDELETETRANSFORMFEEDBACKSPROC; +} +pub type PFNGLGENTRANSFORMFEEDBACKSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenTransformFeedbacks: PFNGLGENTRANSFORMFEEDBACKSPROC; +} +pub type PFNGLISTRANSFORMFEEDBACKPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsTransformFeedback: PFNGLISTRANSFORMFEEDBACKPROC; +} +pub type PFNGLPAUSETRANSFORMFEEDBACKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPauseTransformFeedback: PFNGLPAUSETRANSFORMFEEDBACKPROC; +} +pub type PFNGLRESUMETRANSFORMFEEDBACKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glResumeTransformFeedback: PFNGLRESUMETRANSFORMFEEDBACKPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedback: PFNGLDRAWTRANSFORMFEEDBACKPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedbackStream: PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC; +} +pub type PFNGLBEGINQUERYINDEXEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginQueryIndexed: PFNGLBEGINQUERYINDEXEDPROC; +} +pub type PFNGLENDQUERYINDEXEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndQueryIndexed: PFNGLENDQUERYINDEXEDPROC; +} +pub type PFNGLGETQUERYINDEXEDIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, index: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryIndexediv: PFNGLGETQUERYINDEXEDIVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_1: ::std::os::raw::c_int; +} +pub type PFNGLRELEASESHADERCOMPILERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glReleaseShaderCompiler: PFNGLRELEASESHADERCOMPILERPROC; +} +pub type PFNGLSHADERBINARYPROC = ::std::option::Option< + unsafe extern "C" fn( + count: GLsizei, + shaders: *const GLuint, + binaryFormat: GLenum, + binary: *const ::std::os::raw::c_void, + length: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glShaderBinary: PFNGLSHADERBINARYPROC; +} +pub type PFNGLGETSHADERPRECISIONFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + shadertype: GLenum, + precisiontype: GLenum, + range: *mut GLint, + precision: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetShaderPrecisionFormat: PFNGLGETSHADERPRECISIONFORMATPROC; +} +pub type PFNGLDEPTHRANGEFPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRangef: PFNGLDEPTHRANGEFPROC; +} +pub type PFNGLCLEARDEPTHFPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClearDepthf: PFNGLCLEARDEPTHFPROC; +} +pub type PFNGLGETPROGRAMBINARYPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + binaryFormat: *mut GLenum, + binary: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramBinary: PFNGLGETPROGRAMBINARYPROC; +} +pub type PFNGLPROGRAMBINARYPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + binaryFormat: GLenum, + binary: *const ::std::os::raw::c_void, + length: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramBinary: PFNGLPROGRAMBINARYPROC; +} +pub type PFNGLPROGRAMPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramParameteri: PFNGLPROGRAMPARAMETERIPROC; +} +pub type PFNGLUSEPROGRAMSTAGESPROC = ::std::option::Option< + unsafe extern "C" fn(pipeline: GLuint, stages: GLbitfield, program: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUseProgramStages: PFNGLUSEPROGRAMSTAGESPROC; +} +pub type PFNGLACTIVESHADERPROGRAMPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glActiveShaderProgram: PFNGLACTIVESHADERPROGRAMPROC; +} +pub type PFNGLCREATESHADERPROGRAMVPROC = ::std::option::Option< + unsafe extern "C" fn(type_: GLenum, count: GLsizei, strings: *const *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glCreateShaderProgramv: PFNGLCREATESHADERPROGRAMVPROC; +} +pub type PFNGLBINDPROGRAMPIPELINEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindProgramPipeline: PFNGLBINDPROGRAMPIPELINEPROC; +} +pub type PFNGLDELETEPROGRAMPIPELINESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteProgramPipelines: PFNGLDELETEPROGRAMPIPELINESPROC; +} +pub type PFNGLGENPROGRAMPIPELINESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenProgramPipelines: PFNGLGENPROGRAMPIPELINESPROC; +} +pub type PFNGLISPROGRAMPIPELINEPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsProgramPipeline: PFNGLISPROGRAMPIPELINEPROC; +} +pub type PFNGLGETPROGRAMPIPELINEIVPROC = ::std::option::Option< + unsafe extern "C" fn(pipeline: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramPipelineiv: PFNGLGETPROGRAMPIPELINEIVPROC; +} +pub type PFNGLPROGRAMUNIFORM1IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1i: PFNGLPROGRAMUNIFORM1IPROC; +} +pub type PFNGLPROGRAMUNIFORM1IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1iv: PFNGLPROGRAMUNIFORM1IVPROC; +} +pub type PFNGLPROGRAMUNIFORM1FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1f: PFNGLPROGRAMUNIFORM1FPROC; +} +pub type PFNGLPROGRAMUNIFORM1FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1fv: PFNGLPROGRAMUNIFORM1FVPROC; +} +pub type PFNGLPROGRAMUNIFORM1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1d: PFNGLPROGRAMUNIFORM1DPROC; +} +pub type PFNGLPROGRAMUNIFORM1DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1dv: PFNGLPROGRAMUNIFORM1DVPROC; +} +pub type PFNGLPROGRAMUNIFORM1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1ui: PFNGLPROGRAMUNIFORM1UIPROC; +} +pub type PFNGLPROGRAMUNIFORM1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1uiv: PFNGLPROGRAMUNIFORM1UIVPROC; +} +pub type PFNGLPROGRAMUNIFORM2IPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLint, v1: GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2i: PFNGLPROGRAMUNIFORM2IPROC; +} +pub type PFNGLPROGRAMUNIFORM2IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2iv: PFNGLPROGRAMUNIFORM2IVPROC; +} +pub type PFNGLPROGRAMUNIFORM2FPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2f: PFNGLPROGRAMUNIFORM2FPROC; +} +pub type PFNGLPROGRAMUNIFORM2FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2fv: PFNGLPROGRAMUNIFORM2FVPROC; +} +pub type PFNGLPROGRAMUNIFORM2DPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2d: PFNGLPROGRAMUNIFORM2DPROC; +} +pub type PFNGLPROGRAMUNIFORM2DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2dv: PFNGLPROGRAMUNIFORM2DVPROC; +} +pub type PFNGLPROGRAMUNIFORM2UIPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLuint, v1: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2ui: PFNGLPROGRAMUNIFORM2UIPROC; +} +pub type PFNGLPROGRAMUNIFORM2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2uiv: PFNGLPROGRAMUNIFORM2UIVPROC; +} +pub type PFNGLPROGRAMUNIFORM3IPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3i: PFNGLPROGRAMUNIFORM3IPROC; +} +pub type PFNGLPROGRAMUNIFORM3IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3iv: PFNGLPROGRAMUNIFORM3IVPROC; +} +pub type PFNGLPROGRAMUNIFORM3FPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3f: PFNGLPROGRAMUNIFORM3FPROC; +} +pub type PFNGLPROGRAMUNIFORM3FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3fv: PFNGLPROGRAMUNIFORM3FVPROC; +} +pub type PFNGLPROGRAMUNIFORM3DPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLdouble, + v1: GLdouble, + v2: GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3d: PFNGLPROGRAMUNIFORM3DPROC; +} +pub type PFNGLPROGRAMUNIFORM3DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3dv: PFNGLPROGRAMUNIFORM3DVPROC; +} +pub type PFNGLPROGRAMUNIFORM3UIPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3ui: PFNGLPROGRAMUNIFORM3UIPROC; +} +pub type PFNGLPROGRAMUNIFORM3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3uiv: PFNGLPROGRAMUNIFORM3UIVPROC; +} +pub type PFNGLPROGRAMUNIFORM4IPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLint, + v1: GLint, + v2: GLint, + v3: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4i: PFNGLPROGRAMUNIFORM4IPROC; +} +pub type PFNGLPROGRAMUNIFORM4IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4iv: PFNGLPROGRAMUNIFORM4IVPROC; +} +pub type PFNGLPROGRAMUNIFORM4FPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLfloat, + v1: GLfloat, + v2: GLfloat, + v3: GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4f: PFNGLPROGRAMUNIFORM4FPROC; +} +pub type PFNGLPROGRAMUNIFORM4FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4fv: PFNGLPROGRAMUNIFORM4FVPROC; +} +pub type PFNGLPROGRAMUNIFORM4DPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLdouble, + v1: GLdouble, + v2: GLdouble, + v3: GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4d: PFNGLPROGRAMUNIFORM4DPROC; +} +pub type PFNGLPROGRAMUNIFORM4DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4dv: PFNGLPROGRAMUNIFORM4DVPROC; +} +pub type PFNGLPROGRAMUNIFORM4UIPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLuint, + v1: GLuint, + v2: GLuint, + v3: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4ui: PFNGLPROGRAMUNIFORM4UIPROC; +} +pub type PFNGLPROGRAMUNIFORM4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4uiv: PFNGLPROGRAMUNIFORM4UIVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2fv: PFNGLPROGRAMUNIFORMMATRIX2FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3fv: PFNGLPROGRAMUNIFORMMATRIX3FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4fv: PFNGLPROGRAMUNIFORMMATRIX4FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2dv: PFNGLPROGRAMUNIFORMMATRIX2DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3dv: PFNGLPROGRAMUNIFORMMATRIX3DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4dv: PFNGLPROGRAMUNIFORMMATRIX4DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x3fv: PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x2fv: PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x4fv: PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x2fv: PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x4fv: PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x3fv: PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x3dv: PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x2dv: PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x4dv: PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x2dv: PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x4dv: PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x3dv: PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC; +} +pub type PFNGLVALIDATEPROGRAMPIPELINEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glValidateProgramPipeline: PFNGLVALIDATEPROGRAMPIPELINEPROC; +} +pub type PFNGLGETPROGRAMPIPELINEINFOLOGPROC = ::std::option::Option< + unsafe extern "C" fn( + pipeline: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + infoLog: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramPipelineInfoLog: PFNGLGETPROGRAMPIPELINEINFOLOGPROC; +} +pub type PFNGLVERTEXATTRIBL1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL1d: PFNGLVERTEXATTRIBL1DPROC; +} +pub type PFNGLVERTEXATTRIBL2DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL2d: PFNGLVERTEXATTRIBL2DPROC; +} +pub type PFNGLVERTEXATTRIBL3DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribL3d: PFNGLVERTEXATTRIBL3DPROC; +} +pub type PFNGLVERTEXATTRIBL4DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribL4d: PFNGLVERTEXATTRIBL4DPROC; +} +pub type PFNGLVERTEXATTRIBL1DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL1dv: PFNGLVERTEXATTRIBL1DVPROC; +} +pub type PFNGLVERTEXATTRIBL2DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL2dv: PFNGLVERTEXATTRIBL2DVPROC; +} +pub type PFNGLVERTEXATTRIBL3DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL3dv: PFNGLVERTEXATTRIBL3DVPROC; +} +pub type PFNGLVERTEXATTRIBL4DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL4dv: PFNGLVERTEXATTRIBL4DVPROC; +} +pub type PFNGLVERTEXATTRIBLPOINTERPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + size: GLint, + type_: GLenum, + stride: GLsizei, + pointer: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribLPointer: PFNGLVERTEXATTRIBLPOINTERPROC; +} +pub type PFNGLGETVERTEXATTRIBLDVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribLdv: PFNGLGETVERTEXATTRIBLDVPROC; +} +pub type PFNGLVIEWPORTARRAYVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glViewportArrayv: PFNGLVIEWPORTARRAYVPROC; +} +pub type PFNGLVIEWPORTINDEXEDFPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, w: GLfloat, h: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glViewportIndexedf: PFNGLVIEWPORTINDEXEDFPROC; +} +pub type PFNGLVIEWPORTINDEXEDFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glViewportIndexedfv: PFNGLVIEWPORTINDEXEDFVPROC; +} +pub type PFNGLSCISSORARRAYVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glScissorArrayv: PFNGLSCISSORARRAYVPROC; +} +pub type PFNGLSCISSORINDEXEDPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + left: GLint, + bottom: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glScissorIndexed: PFNGLSCISSORINDEXEDPROC; +} +pub type PFNGLSCISSORINDEXEDVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glScissorIndexedv: PFNGLSCISSORINDEXEDVPROC; +} +pub type PFNGLDEPTHRANGEARRAYVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRangeArrayv: PFNGLDEPTHRANGEARRAYVPROC; +} +pub type PFNGLDEPTHRANGEINDEXEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRangeIndexed: PFNGLDEPTHRANGEINDEXEDPROC; +} +pub type PFNGLGETFLOATI_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetFloati_v: PFNGLGETFLOATI_VPROC; +} +pub type PFNGLGETDOUBLEI_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetDoublei_v: PFNGLGETDOUBLEI_VPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_2: ::std::os::raw::c_int; +} +pub type PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + first: GLint, + count: GLsizei, + instancecount: GLsizei, + baseinstance: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawArraysInstancedBaseInstance: PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + baseinstance: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstancedBaseInstance: + PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + basevertex: GLint, + baseinstance: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstancedBaseVertexBaseInstance: + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC; +} +pub type PFNGLGETINTERNALFORMATIVPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + pname: GLenum, + count: GLsizei, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetInternalformativ: PFNGLGETINTERNALFORMATIVPROC; +} +pub type PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, bufferIndex: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveAtomicCounterBufferiv: PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC; +} +pub type PFNGLBINDIMAGETEXTUREPROC = ::std::option::Option< + unsafe extern "C" fn( + unit: GLuint, + texture: GLuint, + level: GLint, + layered: GLboolean, + layer: GLint, + access: GLenum, + format: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindImageTexture: PFNGLBINDIMAGETEXTUREPROC; +} +pub type PFNGLMEMORYBARRIERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMemoryBarrier: PFNGLMEMORYBARRIERPROC; +} +pub type PFNGLTEXSTORAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage1D: PFNGLTEXSTORAGE1DPROC; +} +pub type PFNGLTEXSTORAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage2D: PFNGLTEXSTORAGE2DPROC; +} +pub type PFNGLTEXSTORAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage3D: PFNGLTEXSTORAGE3DPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedbackInstanced: PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, id: GLuint, stream: GLuint, instancecount: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedbackStreamInstanced: + PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_3: ::std::os::raw::c_int; +} +pub type PFNGLCLEARBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferData: PFNGLCLEARBUFFERDATAPROC; +} +pub type PFNGLCLEARBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + offset: GLintptr, + size: GLsizeiptr, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferSubData: PFNGLCLEARBUFFERSUBDATAPROC; +} +pub type PFNGLDISPATCHCOMPUTEPROC = ::std::option::Option< + unsafe extern "C" fn(num_groups_x: GLuint, num_groups_y: GLuint, num_groups_z: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glDispatchCompute: PFNGLDISPATCHCOMPUTEPROC; +} +pub type PFNGLDISPATCHCOMPUTEINDIRECTPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDispatchComputeIndirect: PFNGLDISPATCHCOMPUTEINDIRECTPROC; +} +pub type PFNGLCOPYIMAGESUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + srcName: GLuint, + srcTarget: GLenum, + srcLevel: GLint, + srcX: GLint, + srcY: GLint, + srcZ: GLint, + dstName: GLuint, + dstTarget: GLenum, + dstLevel: GLint, + dstX: GLint, + dstY: GLint, + dstZ: GLint, + srcWidth: GLsizei, + srcHeight: GLsizei, + srcDepth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyImageSubData: PFNGLCOPYIMAGESUBDATAPROC; +} +pub type PFNGLFRAMEBUFFERPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFramebufferParameteri: PFNGLFRAMEBUFFERPARAMETERIPROC; +} +pub type PFNGLGETFRAMEBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetFramebufferParameteriv: PFNGLGETFRAMEBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETINTERNALFORMATI64VPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + pname: GLenum, + count: GLsizei, + params: *mut GLint64, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetInternalformati64v: PFNGLGETINTERNALFORMATI64VPROC; +} +pub type PFNGLINVALIDATETEXSUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateTexSubImage: PFNGLINVALIDATETEXSUBIMAGEPROC; +} +pub type PFNGLINVALIDATETEXIMAGEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glInvalidateTexImage: PFNGLINVALIDATETEXIMAGEPROC; +} +pub type PFNGLINVALIDATEBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, offset: GLintptr, length: GLsizeiptr), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateBufferSubData: PFNGLINVALIDATEBUFFERSUBDATAPROC; +} +pub type PFNGLINVALIDATEBUFFERDATAPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glInvalidateBufferData: PFNGLINVALIDATEBUFFERDATAPROC; +} +pub type PFNGLINVALIDATEFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, numAttachments: GLsizei, attachments: *const GLenum), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateFramebuffer: PFNGLINVALIDATEFRAMEBUFFERPROC; +} +pub type PFNGLINVALIDATESUBFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + numAttachments: GLsizei, + attachments: *const GLenum, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateSubFramebuffer: PFNGLINVALIDATESUBFRAMEBUFFERPROC; +} +pub type PFNGLMULTIDRAWARRAYSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawArraysIndirect: PFNGLMULTIDRAWARRAYSINDIRECTPROC; +} +pub type PFNGLMULTIDRAWELEMENTSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + type_: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElementsIndirect: PFNGLMULTIDRAWELEMENTSINDIRECTPROC; +} +pub type PFNGLGETPROGRAMINTERFACEIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + programInterface: GLenum, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramInterfaceiv: PFNGLGETPROGRAMINTERFACEIVPROC; +} +pub type PFNGLGETPROGRAMRESOURCEINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, programInterface: GLenum, name: *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceIndex: PFNGLGETPROGRAMRESOURCEINDEXPROC; +} +pub type PFNGLGETPROGRAMRESOURCENAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + programInterface: GLenum, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceName: PFNGLGETPROGRAMRESOURCENAMEPROC; +} +pub type PFNGLGETPROGRAMRESOURCEIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + programInterface: GLenum, + index: GLuint, + propCount: GLsizei, + props: *const GLenum, + count: GLsizei, + length: *mut GLsizei, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceiv: PFNGLGETPROGRAMRESOURCEIVPROC; +} +pub type PFNGLGETPROGRAMRESOURCELOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, programInterface: GLenum, name: *const GLchar) -> GLint, +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceLocation: PFNGLGETPROGRAMRESOURCELOCATIONPROC; +} +pub type PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, programInterface: GLenum, name: *const GLchar) -> GLint, +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceLocationIndex: PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC; +} +pub type PFNGLSHADERSTORAGEBLOCKBINDINGPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, storageBlockIndex: GLuint, storageBlockBinding: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glShaderStorageBlockBinding: PFNGLSHADERSTORAGEBLOCKBINDINGPROC; +} +pub type PFNGLTEXBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexBufferRange: PFNGLTEXBUFFERRANGEPROC; +} +pub type PFNGLTEXSTORAGE2DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage2DMultisample: PFNGLTEXSTORAGE2DMULTISAMPLEPROC; +} +pub type PFNGLTEXSTORAGE3DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage3DMultisample: PFNGLTEXSTORAGE3DMULTISAMPLEPROC; +} +pub type PFNGLTEXTUREVIEWPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + target: GLenum, + origtexture: GLuint, + internalformat: GLenum, + minlevel: GLuint, + numlevels: GLuint, + minlayer: GLuint, + numlayers: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureView: PFNGLTEXTUREVIEWPROC; +} +pub type PFNGLBINDVERTEXBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glBindVertexBuffer: PFNGLBINDVERTEXBUFFERPROC; +} +pub type PFNGLVERTEXATTRIBFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + attribindex: GLuint, + size: GLint, + type_: GLenum, + normalized: GLboolean, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribFormat: PFNGLVERTEXATTRIBFORMATPROC; +} +pub type PFNGLVERTEXATTRIBIFORMATPROC = ::std::option::Option< + unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribIFormat: PFNGLVERTEXATTRIBIFORMATPROC; +} +pub type PFNGLVERTEXATTRIBLFORMATPROC = ::std::option::Option< + unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribLFormat: PFNGLVERTEXATTRIBLFORMATPROC; +} +pub type PFNGLVERTEXATTRIBBINDINGPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribBinding: PFNGLVERTEXATTRIBBINDINGPROC; +} +pub type PFNGLVERTEXBINDINGDIVISORPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexBindingDivisor: PFNGLVERTEXBINDINGDIVISORPROC; +} +pub type PFNGLDEBUGMESSAGECONTROLPROC = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + severity: GLenum, + count: GLsizei, + ids: *const GLuint, + enabled: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glDebugMessageControl: PFNGLDEBUGMESSAGECONTROLPROC; +} +pub type PFNGLDEBUGMESSAGEINSERTPROC = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + buf: *const GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glDebugMessageInsert: PFNGLDEBUGMESSAGEINSERTPROC; +} +pub type PFNGLDEBUGMESSAGECALLBACKPROC = ::std::option::Option< + unsafe extern "C" fn(callback: GLDEBUGPROC, userParam: *const ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glDebugMessageCallback: PFNGLDEBUGMESSAGECALLBACKPROC; +} +pub type PFNGLGETDEBUGMESSAGELOGPROC = ::std::option::Option< + unsafe extern "C" fn( + count: GLuint, + bufSize: GLsizei, + sources: *mut GLenum, + types: *mut GLenum, + ids: *mut GLuint, + severities: *mut GLenum, + lengths: *mut GLsizei, + messageLog: *mut GLchar, + ) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetDebugMessageLog: PFNGLGETDEBUGMESSAGELOGPROC; +} +pub type PFNGLPUSHDEBUGGROUPPROC = ::std::option::Option< + unsafe extern "C" fn(source: GLenum, id: GLuint, length: GLsizei, message: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glPushDebugGroup: PFNGLPUSHDEBUGGROUPPROC; +} +pub type PFNGLPOPDEBUGGROUPPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPopDebugGroup: PFNGLPOPDEBUGGROUPPROC; +} +pub type PFNGLOBJECTLABELPROC = ::std::option::Option< + unsafe extern "C" fn(identifier: GLenum, name: GLuint, length: GLsizei, label: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glObjectLabel: PFNGLOBJECTLABELPROC; +} +pub type PFNGLGETOBJECTLABELPROC = ::std::option::Option< + unsafe extern "C" fn( + identifier: GLenum, + name: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + label: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetObjectLabel: PFNGLGETOBJECTLABELPROC; +} +pub type PFNGLOBJECTPTRLABELPROC = ::std::option::Option< + unsafe extern "C" fn(ptr: *const ::std::os::raw::c_void, length: GLsizei, label: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glObjectPtrLabel: PFNGLOBJECTPTRLABELPROC; +} +pub type PFNGLGETOBJECTPTRLABELPROC = ::std::option::Option< + unsafe extern "C" fn( + ptr: *const ::std::os::raw::c_void, + bufSize: GLsizei, + length: *mut GLsizei, + label: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetObjectPtrLabel: PFNGLGETOBJECTPTRLABELPROC; +} +pub type PFNGLGETPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(pname: GLenum, params: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetPointerv: PFNGLGETPOINTERVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_4: ::std::os::raw::c_int; +} +pub type PFNGLBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + flags: GLbitfield, + ), +>; +unsafe extern "C" { + pub static mut glad_glBufferStorage: PFNGLBUFFERSTORAGEPROC; +} +pub type PFNGLCLEARTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearTexImage: PFNGLCLEARTEXIMAGEPROC; +} +pub type PFNGLCLEARTEXSUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearTexSubImage: PFNGLCLEARTEXSUBIMAGEPROC; +} +pub type PFNGLBINDBUFFERSBASEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindBuffersBase: PFNGLBINDBUFFERSBASEPROC; +} +pub type PFNGLBINDBUFFERSRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + first: GLuint, + count: GLsizei, + buffers: *const GLuint, + offsets: *const GLintptr, + sizes: *const GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindBuffersRange: PFNGLBINDBUFFERSRANGEPROC; +} +pub type PFNGLBINDTEXTURESPROC = ::std::option::Option< + unsafe extern "C" fn(first: GLuint, count: GLsizei, textures: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindTextures: PFNGLBINDTEXTURESPROC; +} +pub type PFNGLBINDSAMPLERSPROC = ::std::option::Option< + unsafe extern "C" fn(first: GLuint, count: GLsizei, samplers: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindSamplers: PFNGLBINDSAMPLERSPROC; +} +pub type PFNGLBINDIMAGETEXTURESPROC = ::std::option::Option< + unsafe extern "C" fn(first: GLuint, count: GLsizei, textures: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindImageTextures: PFNGLBINDIMAGETEXTURESPROC; +} +pub type PFNGLBINDVERTEXBUFFERSPROC = ::std::option::Option< + unsafe extern "C" fn( + first: GLuint, + count: GLsizei, + buffers: *const GLuint, + offsets: *const GLintptr, + strides: *const GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindVertexBuffers: PFNGLBINDVERTEXBUFFERSPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_5: ::std::os::raw::c_int; +} +pub type PFNGLCLIPCONTROLPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClipControl: PFNGLCLIPCONTROLPROC; +} +pub type PFNGLCREATETRANSFORMFEEDBACKSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateTransformFeedbacks: PFNGLCREATETRANSFORMFEEDBACKSPROC; +} +pub type PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTransformFeedbackBufferBase: PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC; +} +pub type PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + xfb: GLuint, + index: GLuint, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glTransformFeedbackBufferRange: PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbackiv: PFNGLGETTRANSFORMFEEDBACKIVPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKI_VPROC = ::std::option::Option< + unsafe extern "C" fn(xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbacki_v: PFNGLGETTRANSFORMFEEDBACKI_VPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKI64_VPROC = ::std::option::Option< + unsafe extern "C" fn(xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbacki64_v: PFNGLGETTRANSFORMFEEDBACKI64_VPROC; +} +pub type PFNGLCREATEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateBuffers: PFNGLCREATEBUFFERSPROC; +} +pub type PFNGLNAMEDBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + flags: GLbitfield, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedBufferStorage: PFNGLNAMEDBUFFERSTORAGEPROC; +} +pub type PFNGLNAMEDBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + usage: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedBufferData: PFNGLNAMEDBUFFERDATAPROC; +} +pub type PFNGLNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedBufferSubData: PFNGLNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLCOPYNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + readBuffer: GLuint, + writeBuffer: GLuint, + readOffset: GLintptr, + writeOffset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyNamedBufferSubData: PFNGLCOPYNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLCLEARNAMEDBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + internalformat: GLenum, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedBufferData: PFNGLCLEARNAMEDBUFFERDATAPROC; +} +pub type PFNGLCLEARNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + internalformat: GLenum, + offset: GLintptr, + size: GLsizeiptr, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedBufferSubData: PFNGLCLEARNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLMAPNAMEDBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, access: GLenum) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapNamedBuffer: PFNGLMAPNAMEDBUFFERPROC; +} +pub type PFNGLMAPNAMEDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + offset: GLintptr, + length: GLsizeiptr, + access: GLbitfield, + ) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapNamedBufferRange: PFNGLMAPNAMEDBUFFERRANGEPROC; +} +pub type PFNGLUNMAPNAMEDBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glUnmapNamedBuffer: PFNGLUNMAPNAMEDBUFFERPROC; +} +pub type PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, offset: GLintptr, length: GLsizeiptr), +>; +unsafe extern "C" { + pub static mut glad_glFlushMappedNamedBufferRange: PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC; +} +pub type PFNGLGETNAMEDBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferParameteriv: PFNGLGETNAMEDBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETNAMEDBUFFERPARAMETERI64VPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, pname: GLenum, params: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferParameteri64v: PFNGLGETNAMEDBUFFERPARAMETERI64VPROC; +} +pub type PFNGLGETNAMEDBUFFERPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferPointerv: PFNGLGETNAMEDBUFFERPOINTERVPROC; +} +pub type PFNGLGETNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + data: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferSubData: PFNGLGETNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLCREATEFRAMEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateFramebuffers: PFNGLCREATEFRAMEBUFFERSPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + attachment: GLenum, + renderbuffertarget: GLenum, + renderbuffer: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferRenderbuffer: PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferParameteri: PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERTEXTUREPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferTexture: PFNGLNAMEDFRAMEBUFFERTEXTUREPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + attachment: GLenum, + texture: GLuint, + level: GLint, + layer: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferTextureLayer: PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferDrawBuffer: PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, n: GLsizei, bufs: *const GLenum), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferDrawBuffers: PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferReadBuffer: PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC; +} +pub type PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateNamedFramebufferData: PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC; +} +pub type PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + numAttachments: GLsizei, + attachments: *const GLenum, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateNamedFramebufferSubData: + PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERIVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + value: *const GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferiv: PFNGLCLEARNAMEDFRAMEBUFFERIVPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + value: *const GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferuiv: PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERFVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferfv: PFNGLCLEARNAMEDFRAMEBUFFERFVPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERFIPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + depth: GLfloat, + stencil: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferfi: PFNGLCLEARNAMEDFRAMEBUFFERFIPROC; +} +pub type PFNGLBLITNAMEDFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + readFramebuffer: GLuint, + drawFramebuffer: GLuint, + srcX0: GLint, + srcY0: GLint, + srcX1: GLint, + srcY1: GLint, + dstX0: GLint, + dstY0: GLint, + dstX1: GLint, + dstY1: GLint, + mask: GLbitfield, + filter: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlitNamedFramebuffer: PFNGLBLITNAMEDFRAMEBUFFERPROC; +} +pub type PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC = + ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glCheckNamedFramebufferStatus: PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC; +} +pub type PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, pname: GLenum, param: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedFramebufferParameteriv: PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + attachment: GLenum, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedFramebufferAttachmentParameteriv: + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC; +} +pub type PFNGLCREATERENDERBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateRenderbuffers: PFNGLCREATERENDERBUFFERSPROC; +} +pub type PFNGLNAMEDRENDERBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + renderbuffer: GLuint, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedRenderbufferStorage: PFNGLNAMEDRENDERBUFFERSTORAGEPROC; +} +pub type PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + renderbuffer: GLuint, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedRenderbufferStorageMultisample: + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC; +} +pub type PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(renderbuffer: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedRenderbufferParameteriv: PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC; +} +pub type PFNGLCREATETEXTURESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateTextures: PFNGLCREATETEXTURESPROC; +} +pub type PFNGLTEXTUREBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, internalformat: GLenum, buffer: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTextureBuffer: PFNGLTEXTUREBUFFERPROC; +} +pub type PFNGLTEXTUREBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + internalformat: GLenum, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureBufferRange: PFNGLTEXTUREBUFFERRANGEPROC; +} +pub type PFNGLTEXTURESTORAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage1D: PFNGLTEXTURESTORAGE1DPROC; +} +pub type PFNGLTEXTURESTORAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage2D: PFNGLTEXTURESTORAGE2DPROC; +} +pub type PFNGLTEXTURESTORAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage3D: PFNGLTEXTURESTORAGE3DPROC; +} +pub type PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage2DMultisample: PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC; +} +pub type PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage3DMultisample: PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC; +} +pub type PFNGLTEXTURESUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureSubImage1D: PFNGLTEXTURESUBIMAGE1DPROC; +} +pub type PFNGLTEXTURESUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureSubImage2D: PFNGLTEXTURESUBIMAGE2DPROC; +} +pub type PFNGLTEXTURESUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureSubImage3D: PFNGLTEXTURESUBIMAGE3DPROC; +} +pub type PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTextureSubImage1D: PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC; +} +pub type PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTextureSubImage2D: PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC; +} +pub type PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTextureSubImage3D: PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC; +} +pub type PFNGLCOPYTEXTURESUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTextureSubImage1D: PFNGLCOPYTEXTURESUBIMAGE1DPROC; +} +pub type PFNGLCOPYTEXTURESUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTextureSubImage2D: PFNGLCOPYTEXTURESUBIMAGE2DPROC; +} +pub type PFNGLCOPYTEXTURESUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTextureSubImage3D: PFNGLCOPYTEXTURESUBIMAGE3DPROC; +} +pub type PFNGLTEXTUREPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTextureParameterf: PFNGLTEXTUREPARAMETERFPROC; +} +pub type PFNGLTEXTUREPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, param: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameterfv: PFNGLTEXTUREPARAMETERFVPROC; +} +pub type PFNGLTEXTUREPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTextureParameteri: PFNGLTEXTUREPARAMETERIPROC; +} +pub type PFNGLTEXTUREPARAMETERIIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameterIiv: PFNGLTEXTUREPARAMETERIIVPROC; +} +pub type PFNGLTEXTUREPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameterIuiv: PFNGLTEXTUREPARAMETERIUIVPROC; +} +pub type PFNGLTEXTUREPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, param: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameteriv: PFNGLTEXTUREPARAMETERIVPROC; +} +pub type PFNGLGENERATETEXTUREMIPMAPPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenerateTextureMipmap: PFNGLGENERATETEXTUREMIPMAPPROC; +} +pub type PFNGLBINDTEXTUREUNITPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindTextureUnit: PFNGLBINDTEXTUREUNITPROC; +} +pub type PFNGLGETTEXTUREIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureImage: PFNGLGETTEXTUREIMAGEPROC; +} +pub type PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetCompressedTextureImage: PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC; +} +pub type PFNGLGETTEXTURELEVELPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, level: GLint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureLevelParameterfv: PFNGLGETTEXTURELEVELPARAMETERFVPROC; +} +pub type PFNGLGETTEXTURELEVELPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, level: GLint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureLevelParameteriv: PFNGLGETTEXTURELEVELPARAMETERIVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureParameterfv: PFNGLGETTEXTUREPARAMETERFVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTextureParameterIiv: PFNGLGETTEXTUREPARAMETERIIVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureParameterIuiv: PFNGLGETTEXTUREPARAMETERIUIVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTextureParameteriv: PFNGLGETTEXTUREPARAMETERIVPROC; +} +pub type PFNGLCREATEVERTEXARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateVertexArrays: PFNGLCREATEVERTEXARRAYSPROC; +} +pub type PFNGLDISABLEVERTEXARRAYATTRIBPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisableVertexArrayAttrib: PFNGLDISABLEVERTEXARRAYATTRIBPROC; +} +pub type PFNGLENABLEVERTEXARRAYATTRIBPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnableVertexArrayAttrib: PFNGLENABLEVERTEXARRAYATTRIBPROC; +} +pub type PFNGLVERTEXARRAYELEMENTBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexArrayElementBuffer: PFNGLVERTEXARRAYELEMENTBUFFERPROC; +} +pub type PFNGLVERTEXARRAYVERTEXBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + bindingindex: GLuint, + buffer: GLuint, + offset: GLintptr, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayVertexBuffer: PFNGLVERTEXARRAYVERTEXBUFFERPROC; +} +pub type PFNGLVERTEXARRAYVERTEXBUFFERSPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + first: GLuint, + count: GLsizei, + buffers: *const GLuint, + offsets: *const GLintptr, + strides: *const GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayVertexBuffers: PFNGLVERTEXARRAYVERTEXBUFFERSPROC; +} +pub type PFNGLVERTEXARRAYATTRIBBINDINGPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, attribindex: GLuint, bindingindex: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribBinding: PFNGLVERTEXARRAYATTRIBBINDINGPROC; +} +pub type PFNGLVERTEXARRAYATTRIBFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + attribindex: GLuint, + size: GLint, + type_: GLenum, + normalized: GLboolean, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribFormat: PFNGLVERTEXARRAYATTRIBFORMATPROC; +} +pub type PFNGLVERTEXARRAYATTRIBIFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + attribindex: GLuint, + size: GLint, + type_: GLenum, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribIFormat: PFNGLVERTEXARRAYATTRIBIFORMATPROC; +} +pub type PFNGLVERTEXARRAYATTRIBLFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + attribindex: GLuint, + size: GLint, + type_: GLenum, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribLFormat: PFNGLVERTEXARRAYATTRIBLFORMATPROC; +} +pub type PFNGLVERTEXARRAYBINDINGDIVISORPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, bindingindex: GLuint, divisor: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayBindingDivisor: PFNGLVERTEXARRAYBINDINGDIVISORPROC; +} +pub type PFNGLGETVERTEXARRAYIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexArrayiv: PFNGLGETVERTEXARRAYIVPROC; +} +pub type PFNGLGETVERTEXARRAYINDEXEDIVPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexArrayIndexediv: PFNGLGETVERTEXARRAYINDEXEDIVPROC; +} +pub type PFNGLGETVERTEXARRAYINDEXED64IVPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexArrayIndexed64iv: PFNGLGETVERTEXARRAYINDEXED64IVPROC; +} +pub type PFNGLCREATESAMPLERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateSamplers: PFNGLCREATESAMPLERSPROC; +} +pub type PFNGLCREATEPROGRAMPIPELINESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateProgramPipelines: PFNGLCREATEPROGRAMPIPELINESPROC; +} +pub type PFNGLCREATEQUERIESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateQueries: PFNGLCREATEQUERIESPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTI64VPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjecti64v: PFNGLGETQUERYBUFFEROBJECTI64VPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTIVPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjectiv: PFNGLGETQUERYBUFFEROBJECTIVPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTUI64VPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjectui64v: PFNGLGETQUERYBUFFEROBJECTUI64VPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTUIVPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjectuiv: PFNGLGETQUERYBUFFEROBJECTUIVPROC; +} +pub type PFNGLMEMORYBARRIERBYREGIONPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMemoryBarrierByRegion: PFNGLMEMORYBARRIERBYREGIONPROC; +} +pub type PFNGLGETTEXTURESUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureSubImage: PFNGLGETTEXTURESUBIMAGEPROC; +} +pub type PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetCompressedTextureSubImage: PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC; +} +pub type PFNGLGETGRAPHICSRESETSTATUSPROC = ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glGetGraphicsResetStatus: PFNGLGETGRAPHICSRESETSTATUSPROC; +} +pub type PFNGLGETNCOMPRESSEDTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + lod: GLint, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnCompressedTexImage: PFNGLGETNCOMPRESSEDTEXIMAGEPROC; +} +pub type PFNGLGETNTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnTexImage: PFNGLGETNTEXIMAGEPROC; +} +pub type PFNGLGETNUNIFORMDVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformdv: PFNGLGETNUNIFORMDVPROC; +} +pub type PFNGLGETNUNIFORMFVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformfv: PFNGLGETNUNIFORMFVPROC; +} +pub type PFNGLGETNUNIFORMIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformiv: PFNGLGETNUNIFORMIVPROC; +} +pub type PFNGLGETNUNIFORMUIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformuiv: PFNGLGETNUNIFORMUIVPROC; +} +pub type PFNGLREADNPIXELSPROC = ::std::option::Option< + unsafe extern "C" fn( + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + data: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glReadnPixels: PFNGLREADNPIXELSPROC; +} +pub type PFNGLGETNMAPDVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetnMapdv: PFNGLGETNMAPDVPROC; +} +pub type PFNGLGETNMAPFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetnMapfv: PFNGLGETNMAPFVPROC; +} +pub type PFNGLGETNMAPIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetnMapiv: PFNGLGETNMAPIVPROC; +} +pub type PFNGLGETNPIXELMAPFVPROC = ::std::option::Option< + unsafe extern "C" fn(map: GLenum, bufSize: GLsizei, values: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetnPixelMapfv: PFNGLGETNPIXELMAPFVPROC; +} +pub type PFNGLGETNPIXELMAPUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetnPixelMapuiv: PFNGLGETNPIXELMAPUIVPROC; +} +pub type PFNGLGETNPIXELMAPUSVPROC = ::std::option::Option< + unsafe extern "C" fn(map: GLenum, bufSize: GLsizei, values: *mut GLushort), +>; +unsafe extern "C" { + pub static mut glad_glGetnPixelMapusv: PFNGLGETNPIXELMAPUSVPROC; +} +pub type PFNGLGETNPOLYGONSTIPPLEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetnPolygonStipple: PFNGLGETNPOLYGONSTIPPLEPROC; +} +pub type PFNGLGETNCOLORTABLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + table: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnColorTable: PFNGLGETNCOLORTABLEPROC; +} +pub type PFNGLGETNCONVOLUTIONFILTERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + image: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnConvolutionFilter: PFNGLGETNCONVOLUTIONFILTERPROC; +} +pub type PFNGLGETNSEPARABLEFILTERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + format: GLenum, + type_: GLenum, + rowBufSize: GLsizei, + row: *mut ::std::os::raw::c_void, + columnBufSize: GLsizei, + column: *mut ::std::os::raw::c_void, + span: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnSeparableFilter: PFNGLGETNSEPARABLEFILTERPROC; +} +pub type PFNGLGETNHISTOGRAMPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + reset: GLboolean, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + values: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnHistogram: PFNGLGETNHISTOGRAMPROC; +} +pub type PFNGLGETNMINMAXPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + reset: GLboolean, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + values: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnMinmax: PFNGLGETNMINMAXPROC; +} +pub type PFNGLTEXTUREBARRIERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTextureBarrier: PFNGLTEXTUREBARRIERPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_6: ::std::os::raw::c_int; +} +pub type PFNGLSPECIALIZESHADERPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + pEntryPoint: *const GLchar, + numSpecializationConstants: GLuint, + pConstantIndex: *const GLuint, + pConstantValue: *const GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glSpecializeShader: PFNGLSPECIALIZESHADERPROC; +} +pub type PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLintptr, + maxdrawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawArraysIndirectCount: PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC; +} +pub type PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + type_: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLintptr, + maxdrawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElementsIndirectCount: PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC; +} +pub type PFNGLPOLYGONOFFSETCLAMPPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPolygonOffsetClamp: PFNGLPOLYGONOFFSETCLAMPPROC; +} +#[repr(C)] +#[repr(align(16))] +#[derive(Debug, Copy, Clone)] +pub struct max_align_t { + pub __clang_max_align_nonce1: ::std::os::raw::c_longlong, + pub __bindgen_padding_0: u64, + pub __clang_max_align_nonce2: u128, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of max_align_t"][::std::mem::size_of::() - 32usize]; + ["Alignment of max_align_t"][::std::mem::align_of::() - 16usize]; + ["Offset of field: max_align_t::__clang_max_align_nonce1"] + [::std::mem::offset_of!(max_align_t, __clang_max_align_nonce1) - 0usize]; + ["Offset of field: max_align_t::__clang_max_align_nonce2"] + [::std::mem::offset_of!(max_align_t, __clang_max_align_nonce2) - 16usize]; +}; +pub type GLFWglproc = ::std::option::Option; +pub type GLFWvkproc = ::std::option::Option; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWmonitor { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWwindow { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWcursor { + _unused: [u8; 0], +} +pub type GLFWallocatefun = ::std::option::Option< + unsafe extern "C" fn( + size: usize, + user: *mut ::std::os::raw::c_void, + ) -> *mut ::std::os::raw::c_void, +>; +pub type GLFWreallocatefun = ::std::option::Option< + unsafe extern "C" fn( + block: *mut ::std::os::raw::c_void, + size: usize, + user: *mut ::std::os::raw::c_void, + ) -> *mut ::std::os::raw::c_void, +>; +pub type GLFWdeallocatefun = ::std::option::Option< + unsafe extern "C" fn(block: *mut ::std::os::raw::c_void, user: *mut ::std::os::raw::c_void), +>; +pub type GLFWerrorfun = ::std::option::Option< + unsafe extern "C" fn( + error_code: ::std::os::raw::c_int, + description: *const ::std::os::raw::c_char, + ), +>; +pub type GLFWwindowposfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + xpos: ::std::os::raw::c_int, + ypos: ::std::os::raw::c_int, + ), +>; +pub type GLFWwindowsizefun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ), +>; +pub type GLFWwindowclosefun = ::std::option::Option; +pub type GLFWwindowrefreshfun = + ::std::option::Option; +pub type GLFWwindowfocusfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, focused: ::std::os::raw::c_int), +>; +pub type GLFWwindowiconifyfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, iconified: ::std::os::raw::c_int), +>; +pub type GLFWwindowmaximizefun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, maximized: ::std::os::raw::c_int), +>; +pub type GLFWframebuffersizefun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ), +>; +pub type GLFWwindowcontentscalefun = + ::std::option::Option; +pub type GLFWmousebuttonfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + button: ::std::os::raw::c_int, + action: ::std::os::raw::c_int, + mods: ::std::os::raw::c_int, + ), +>; +pub type GLFWcursorposfun = + ::std::option::Option; +pub type GLFWcursorenterfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, entered: ::std::os::raw::c_int), +>; +pub type GLFWscrollfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, xoffset: f64, yoffset: f64), +>; +pub type GLFWkeyfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + key: ::std::os::raw::c_int, + scancode: ::std::os::raw::c_int, + action: ::std::os::raw::c_int, + mods: ::std::os::raw::c_int, + ), +>; +pub type GLFWcharfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, codepoint: ::std::os::raw::c_uint), +>; +pub type GLFWcharmodsfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + codepoint: ::std::os::raw::c_uint, + mods: ::std::os::raw::c_int, + ), +>; +pub type GLFWdropfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + path_count: ::std::os::raw::c_int, + paths: *mut *const ::std::os::raw::c_char, + ), +>; +pub type GLFWmonitorfun = ::std::option::Option< + unsafe extern "C" fn(monitor: *mut GLFWmonitor, event: ::std::os::raw::c_int), +>; +pub type GLFWjoystickfun = ::std::option::Option< + unsafe extern "C" fn(jid: ::std::os::raw::c_int, event: ::std::os::raw::c_int), +>; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWvidmode { + pub width: ::std::os::raw::c_int, + pub height: ::std::os::raw::c_int, + pub redBits: ::std::os::raw::c_int, + pub greenBits: ::std::os::raw::c_int, + pub blueBits: ::std::os::raw::c_int, + pub refreshRate: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWvidmode"][::std::mem::size_of::() - 24usize]; + ["Alignment of GLFWvidmode"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GLFWvidmode::width"][::std::mem::offset_of!(GLFWvidmode, width) - 0usize]; + ["Offset of field: GLFWvidmode::height"][::std::mem::offset_of!(GLFWvidmode, height) - 4usize]; + ["Offset of field: GLFWvidmode::redBits"] + [::std::mem::offset_of!(GLFWvidmode, redBits) - 8usize]; + ["Offset of field: GLFWvidmode::greenBits"] + [::std::mem::offset_of!(GLFWvidmode, greenBits) - 12usize]; + ["Offset of field: GLFWvidmode::blueBits"] + [::std::mem::offset_of!(GLFWvidmode, blueBits) - 16usize]; + ["Offset of field: GLFWvidmode::refreshRate"] + [::std::mem::offset_of!(GLFWvidmode, refreshRate) - 20usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWgammaramp { + pub red: *mut ::std::os::raw::c_ushort, + pub green: *mut ::std::os::raw::c_ushort, + pub blue: *mut ::std::os::raw::c_ushort, + pub size: ::std::os::raw::c_uint, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWgammaramp"][::std::mem::size_of::() - 32usize]; + ["Alignment of GLFWgammaramp"][::std::mem::align_of::() - 8usize]; + ["Offset of field: GLFWgammaramp::red"][::std::mem::offset_of!(GLFWgammaramp, red) - 0usize]; + ["Offset of field: GLFWgammaramp::green"] + [::std::mem::offset_of!(GLFWgammaramp, green) - 8usize]; + ["Offset of field: GLFWgammaramp::blue"][::std::mem::offset_of!(GLFWgammaramp, blue) - 16usize]; + ["Offset of field: GLFWgammaramp::size"][::std::mem::offset_of!(GLFWgammaramp, size) - 24usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWimage { + pub width: ::std::os::raw::c_int, + pub height: ::std::os::raw::c_int, + pub pixels: *mut ::std::os::raw::c_uchar, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWimage"][::std::mem::size_of::() - 16usize]; + ["Alignment of GLFWimage"][::std::mem::align_of::() - 8usize]; + ["Offset of field: GLFWimage::width"][::std::mem::offset_of!(GLFWimage, width) - 0usize]; + ["Offset of field: GLFWimage::height"][::std::mem::offset_of!(GLFWimage, height) - 4usize]; + ["Offset of field: GLFWimage::pixels"][::std::mem::offset_of!(GLFWimage, pixels) - 8usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWgamepadstate { + pub buttons: [::std::os::raw::c_uchar; 15usize], + pub axes: [f32; 6usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWgamepadstate"][::std::mem::size_of::() - 40usize]; + ["Alignment of GLFWgamepadstate"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GLFWgamepadstate::buttons"] + [::std::mem::offset_of!(GLFWgamepadstate, buttons) - 0usize]; + ["Offset of field: GLFWgamepadstate::axes"] + [::std::mem::offset_of!(GLFWgamepadstate, axes) - 16usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWallocator { + pub allocate: GLFWallocatefun, + pub reallocate: GLFWreallocatefun, + pub deallocate: GLFWdeallocatefun, + pub user: *mut ::std::os::raw::c_void, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWallocator"][::std::mem::size_of::() - 32usize]; + ["Alignment of GLFWallocator"][::std::mem::align_of::() - 8usize]; + ["Offset of field: GLFWallocator::allocate"] + [::std::mem::offset_of!(GLFWallocator, allocate) - 0usize]; + ["Offset of field: GLFWallocator::reallocate"] + [::std::mem::offset_of!(GLFWallocator, reallocate) - 8usize]; + ["Offset of field: GLFWallocator::deallocate"] + [::std::mem::offset_of!(GLFWallocator, deallocate) - 16usize]; + ["Offset of field: GLFWallocator::user"][::std::mem::offset_of!(GLFWallocator, user) - 24usize]; +}; +unsafe extern "C" { + pub fn glfwInit() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwTerminate(); +} +unsafe extern "C" { + pub fn glfwInitHint(hint: ::std::os::raw::c_int, value: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwInitAllocator(allocator: *const GLFWallocator); +} +unsafe extern "C" { + pub fn glfwGetVersion( + major: *mut ::std::os::raw::c_int, + minor: *mut ::std::os::raw::c_int, + rev: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetVersionString() -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetError(description: *mut *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetErrorCallback(callback: GLFWerrorfun) -> GLFWerrorfun; +} +unsafe extern "C" { + pub fn glfwGetPlatform() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwPlatformSupported(platform: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetMonitors(count: *mut ::std::os::raw::c_int) -> *mut *mut GLFWmonitor; +} +unsafe extern "C" { + pub fn glfwGetPrimaryMonitor() -> *mut GLFWmonitor; +} +unsafe extern "C" { + pub fn glfwGetMonitorPos( + monitor: *mut GLFWmonitor, + xpos: *mut ::std::os::raw::c_int, + ypos: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorWorkarea( + monitor: *mut GLFWmonitor, + xpos: *mut ::std::os::raw::c_int, + ypos: *mut ::std::os::raw::c_int, + width: *mut ::std::os::raw::c_int, + height: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorPhysicalSize( + monitor: *mut GLFWmonitor, + widthMM: *mut ::std::os::raw::c_int, + heightMM: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorContentScale( + monitor: *mut GLFWmonitor, + xscale: *mut f32, + yscale: *mut f32, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorName(monitor: *mut GLFWmonitor) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwSetMonitorUserPointer( + monitor: *mut GLFWmonitor, + pointer: *mut ::std::os::raw::c_void, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorUserPointer(monitor: *mut GLFWmonitor) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn glfwSetMonitorCallback(callback: GLFWmonitorfun) -> GLFWmonitorfun; +} +unsafe extern "C" { + pub fn glfwGetVideoModes( + monitor: *mut GLFWmonitor, + count: *mut ::std::os::raw::c_int, + ) -> *const GLFWvidmode; +} +unsafe extern "C" { + pub fn glfwGetVideoMode(monitor: *mut GLFWmonitor) -> *const GLFWvidmode; +} +unsafe extern "C" { + pub fn glfwSetGamma(monitor: *mut GLFWmonitor, gamma: f32); +} +unsafe extern "C" { + pub fn glfwGetGammaRamp(monitor: *mut GLFWmonitor) -> *const GLFWgammaramp; +} +unsafe extern "C" { + pub fn glfwSetGammaRamp(monitor: *mut GLFWmonitor, ramp: *const GLFWgammaramp); +} +unsafe extern "C" { + pub fn glfwDefaultWindowHints(); +} +unsafe extern "C" { + pub fn glfwWindowHint(hint: ::std::os::raw::c_int, value: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwWindowHintString(hint: ::std::os::raw::c_int, value: *const ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn glfwCreateWindow( + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + title: *const ::std::os::raw::c_char, + monitor: *mut GLFWmonitor, + share: *mut GLFWwindow, + ) -> *mut GLFWwindow; +} +unsafe extern "C" { + pub fn glfwDestroyWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwWindowShouldClose(window: *mut GLFWwindow) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetWindowShouldClose(window: *mut GLFWwindow, value: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwGetWindowTitle(window: *mut GLFWwindow) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwSetWindowTitle(window: *mut GLFWwindow, title: *const ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn glfwSetWindowIcon( + window: *mut GLFWwindow, + count: ::std::os::raw::c_int, + images: *const GLFWimage, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowPos( + window: *mut GLFWwindow, + xpos: *mut ::std::os::raw::c_int, + ypos: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowPos( + window: *mut GLFWwindow, + xpos: ::std::os::raw::c_int, + ypos: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowSize( + window: *mut GLFWwindow, + width: *mut ::std::os::raw::c_int, + height: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowSizeLimits( + window: *mut GLFWwindow, + minwidth: ::std::os::raw::c_int, + minheight: ::std::os::raw::c_int, + maxwidth: ::std::os::raw::c_int, + maxheight: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowAspectRatio( + window: *mut GLFWwindow, + numer: ::std::os::raw::c_int, + denom: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowSize( + window: *mut GLFWwindow, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetFramebufferSize( + window: *mut GLFWwindow, + width: *mut ::std::os::raw::c_int, + height: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowFrameSize( + window: *mut GLFWwindow, + left: *mut ::std::os::raw::c_int, + top: *mut ::std::os::raw::c_int, + right: *mut ::std::os::raw::c_int, + bottom: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowContentScale(window: *mut GLFWwindow, xscale: *mut f32, yscale: *mut f32); +} +unsafe extern "C" { + pub fn glfwGetWindowOpacity(window: *mut GLFWwindow) -> f32; +} +unsafe extern "C" { + pub fn glfwSetWindowOpacity(window: *mut GLFWwindow, opacity: f32); +} +unsafe extern "C" { + pub fn glfwIconifyWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwRestoreWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwMaximizeWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwShowWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwHideWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwFocusWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwRequestWindowAttention(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwGetWindowMonitor(window: *mut GLFWwindow) -> *mut GLFWmonitor; +} +unsafe extern "C" { + pub fn glfwSetWindowMonitor( + window: *mut GLFWwindow, + monitor: *mut GLFWmonitor, + xpos: ::std::os::raw::c_int, + ypos: ::std::os::raw::c_int, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + refreshRate: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowAttrib( + window: *mut GLFWwindow, + attrib: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetWindowAttrib( + window: *mut GLFWwindow, + attrib: ::std::os::raw::c_int, + value: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowUserPointer(window: *mut GLFWwindow, pointer: *mut ::std::os::raw::c_void); +} +unsafe extern "C" { + pub fn glfwGetWindowUserPointer(window: *mut GLFWwindow) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn glfwSetWindowPosCallback( + window: *mut GLFWwindow, + callback: GLFWwindowposfun, + ) -> GLFWwindowposfun; +} +unsafe extern "C" { + pub fn glfwSetWindowSizeCallback( + window: *mut GLFWwindow, + callback: GLFWwindowsizefun, + ) -> GLFWwindowsizefun; +} +unsafe extern "C" { + pub fn glfwSetWindowCloseCallback( + window: *mut GLFWwindow, + callback: GLFWwindowclosefun, + ) -> GLFWwindowclosefun; +} +unsafe extern "C" { + pub fn glfwSetWindowRefreshCallback( + window: *mut GLFWwindow, + callback: GLFWwindowrefreshfun, + ) -> GLFWwindowrefreshfun; +} +unsafe extern "C" { + pub fn glfwSetWindowFocusCallback( + window: *mut GLFWwindow, + callback: GLFWwindowfocusfun, + ) -> GLFWwindowfocusfun; +} +unsafe extern "C" { + pub fn glfwSetWindowIconifyCallback( + window: *mut GLFWwindow, + callback: GLFWwindowiconifyfun, + ) -> GLFWwindowiconifyfun; +} +unsafe extern "C" { + pub fn glfwSetWindowMaximizeCallback( + window: *mut GLFWwindow, + callback: GLFWwindowmaximizefun, + ) -> GLFWwindowmaximizefun; +} +unsafe extern "C" { + pub fn glfwSetFramebufferSizeCallback( + window: *mut GLFWwindow, + callback: GLFWframebuffersizefun, + ) -> GLFWframebuffersizefun; +} +unsafe extern "C" { + pub fn glfwSetWindowContentScaleCallback( + window: *mut GLFWwindow, + callback: GLFWwindowcontentscalefun, + ) -> GLFWwindowcontentscalefun; +} +unsafe extern "C" { + pub fn glfwPollEvents(); +} +unsafe extern "C" { + pub fn glfwWaitEvents(); +} +unsafe extern "C" { + pub fn glfwWaitEventsTimeout(timeout: f64); +} +unsafe extern "C" { + pub fn glfwPostEmptyEvent(); +} +unsafe extern "C" { + pub fn glfwGetInputMode( + window: *mut GLFWwindow, + mode: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetInputMode( + window: *mut GLFWwindow, + mode: ::std::os::raw::c_int, + value: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwRawMouseMotionSupported() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetKeyName( + key: ::std::os::raw::c_int, + scancode: ::std::os::raw::c_int, + ) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetKeyScancode(key: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetKey(window: *mut GLFWwindow, key: ::std::os::raw::c_int) + -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetMouseButton( + window: *mut GLFWwindow, + button: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetCursorPos(window: *mut GLFWwindow, xpos: *mut f64, ypos: *mut f64); +} +unsafe extern "C" { + pub fn glfwSetCursorPos(window: *mut GLFWwindow, xpos: f64, ypos: f64); +} +unsafe extern "C" { + pub fn glfwCreateCursor( + image: *const GLFWimage, + xhot: ::std::os::raw::c_int, + yhot: ::std::os::raw::c_int, + ) -> *mut GLFWcursor; +} +unsafe extern "C" { + pub fn glfwCreateStandardCursor(shape: ::std::os::raw::c_int) -> *mut GLFWcursor; +} +unsafe extern "C" { + pub fn glfwDestroyCursor(cursor: *mut GLFWcursor); +} +unsafe extern "C" { + pub fn glfwSetCursor(window: *mut GLFWwindow, cursor: *mut GLFWcursor); +} +unsafe extern "C" { + pub fn glfwSetKeyCallback(window: *mut GLFWwindow, callback: GLFWkeyfun) -> GLFWkeyfun; +} +unsafe extern "C" { + pub fn glfwSetCharCallback(window: *mut GLFWwindow, callback: GLFWcharfun) -> GLFWcharfun; +} +unsafe extern "C" { + pub fn glfwSetCharModsCallback( + window: *mut GLFWwindow, + callback: GLFWcharmodsfun, + ) -> GLFWcharmodsfun; +} +unsafe extern "C" { + pub fn glfwSetMouseButtonCallback( + window: *mut GLFWwindow, + callback: GLFWmousebuttonfun, + ) -> GLFWmousebuttonfun; +} +unsafe extern "C" { + pub fn glfwSetCursorPosCallback( + window: *mut GLFWwindow, + callback: GLFWcursorposfun, + ) -> GLFWcursorposfun; +} +unsafe extern "C" { + pub fn glfwSetCursorEnterCallback( + window: *mut GLFWwindow, + callback: GLFWcursorenterfun, + ) -> GLFWcursorenterfun; +} +unsafe extern "C" { + pub fn glfwSetScrollCallback(window: *mut GLFWwindow, callback: GLFWscrollfun) + -> GLFWscrollfun; +} +unsafe extern "C" { + pub fn glfwSetDropCallback(window: *mut GLFWwindow, callback: GLFWdropfun) -> GLFWdropfun; +} +unsafe extern "C" { + pub fn glfwJoystickPresent(jid: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetJoystickAxes( + jid: ::std::os::raw::c_int, + count: *mut ::std::os::raw::c_int, + ) -> *const f32; +} +unsafe extern "C" { + pub fn glfwGetJoystickButtons( + jid: ::std::os::raw::c_int, + count: *mut ::std::os::raw::c_int, + ) -> *const ::std::os::raw::c_uchar; +} +unsafe extern "C" { + pub fn glfwGetJoystickHats( + jid: ::std::os::raw::c_int, + count: *mut ::std::os::raw::c_int, + ) -> *const ::std::os::raw::c_uchar; +} +unsafe extern "C" { + pub fn glfwGetJoystickName(jid: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetJoystickGUID(jid: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwSetJoystickUserPointer( + jid: ::std::os::raw::c_int, + pointer: *mut ::std::os::raw::c_void, + ); +} +unsafe extern "C" { + pub fn glfwGetJoystickUserPointer(jid: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn glfwJoystickIsGamepad(jid: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetJoystickCallback(callback: GLFWjoystickfun) -> GLFWjoystickfun; +} +unsafe extern "C" { + pub fn glfwUpdateGamepadMappings( + string: *const ::std::os::raw::c_char, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetGamepadName(jid: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetGamepadState( + jid: ::std::os::raw::c_int, + state: *mut GLFWgamepadstate, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetClipboardString(window: *mut GLFWwindow, string: *const ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn glfwGetClipboardString(window: *mut GLFWwindow) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetTime() -> f64; +} +unsafe extern "C" { + pub fn glfwSetTime(time: f64); +} +unsafe extern "C" { + pub fn glfwGetTimerValue() -> u64; +} +unsafe extern "C" { + pub fn glfwGetTimerFrequency() -> u64; +} +unsafe extern "C" { + pub fn glfwMakeContextCurrent(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwGetCurrentContext() -> *mut GLFWwindow; +} +unsafe extern "C" { + pub fn glfwSwapBuffers(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwSwapInterval(interval: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwExtensionSupported( + extension: *const ::std::os::raw::c_char, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetProcAddress(procname: *const ::std::os::raw::c_char) -> GLFWglproc; +} +unsafe extern "C" { + pub fn glfwVulkanSupported() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetRequiredInstanceExtensions(count: *mut u32) + -> *mut *const ::std::os::raw::c_char; +} +pub type u8_ = u8; +pub type u16_ = u16; +pub type u32_ = u32; +pub type u64_ = u64; +pub type i8_ = i8; +pub type i16_ = i16; +pub type i32_ = i32; +pub type i64_ = i64; +pub type GpuShaderHandle = i32_; +pub type GpuProgramHandle = i32_; +pub type GpuVoid = GLvoid; +pub type GpuBool = GLboolean; +pub type GpuByte = GLbyte; +pub type GpuShort = GLshort; +pub type GpuSizeI = GLsizei; +pub type GpuSizeIPtr = GLsizeiptr; +pub type GpuInt = GLint; +pub type GpuUint = GLuint; +pub type GpuFloat = GLfloat; +pub type GpuDouble = GLdouble; +pub const GpuShaderType_FRAGMENT_SHADER: GpuShaderType = 35632; +pub const GpuShaderType_VERTEX_SHADER: GpuShaderType = 35633; +pub type GpuShaderType = ::std::os::raw::c_uint; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GpuProgram { + pub handle: GpuShaderHandle, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GpuProgram"][::std::mem::size_of::() - 4usize]; + ["Alignment of GpuProgram"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GpuProgram::handle"][::std::mem::offset_of!(GpuProgram, handle) - 0usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct Window { + pub win: *mut GLFWwindow, + pub width: i32_, + pub height: i32_, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of Window"][::std::mem::size_of::() - 16usize]; + ["Alignment of Window"][::std::mem::align_of::() - 8usize]; + ["Offset of field: Window::win"][::std::mem::offset_of!(Window, win) - 0usize]; + ["Offset of field: Window::width"][::std::mem::offset_of!(Window, width) - 8usize]; + ["Offset of field: Window::height"][::std::mem::offset_of!(Window, height) - 12usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GpuBuffer { + pub vao: GLuint, + pub vbo: GLuint, + pub ebo: GLuint, + pub stride: u32_, + pub index_count: u32_, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GpuBuffer"][::std::mem::size_of::() - 20usize]; + ["Alignment of GpuBuffer"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GpuBuffer::vao"][::std::mem::offset_of!(GpuBuffer, vao) - 0usize]; + ["Offset of field: GpuBuffer::vbo"][::std::mem::offset_of!(GpuBuffer, vbo) - 4usize]; + ["Offset of field: GpuBuffer::ebo"][::std::mem::offset_of!(GpuBuffer, ebo) - 8usize]; + ["Offset of field: GpuBuffer::stride"][::std::mem::offset_of!(GpuBuffer, stride) - 12usize]; + ["Offset of field: GpuBuffer::index_count"] + [::std::mem::offset_of!(GpuBuffer, index_count) - 16usize]; +}; +unsafe extern "C" { + pub fn gpu_clear(r: f32, g: f32, b: f32, a: f32); +} +unsafe extern "C" { + pub static mut vertex_shader_src: *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub static mut fragment_shader_src: *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn gpu_shader_compile( + src: *const ::std::os::raw::c_char, + type_: GpuShaderType, + ) -> GpuShaderHandle; +} +unsafe extern "C" { + pub fn gpu_shader_error_get(shader: u32); +} +unsafe extern "C" { + pub fn gpu_program_handle_create( + vert_src: *const ::std::os::raw::c_char, + frag_src: *const ::std::os::raw::c_char, + ) -> GpuProgramHandle; +} +unsafe extern "C" { + pub fn gpu_program_handle_link( + handle: GpuProgramHandle, + vert_shader: GpuShaderHandle, + frag_shader: GpuShaderHandle, + ) -> GpuProgramHandle; +} +unsafe extern "C" { + pub fn gpu_program_handle_error_get(program: GpuProgramHandle); +} +unsafe extern "C" { + pub fn gpu_program_handle_use(handle: GpuProgramHandle); +} +unsafe extern "C" { + pub fn gpu_program_create( + vert_src: *const ::std::os::raw::c_char, + frag_src: *const ::std::os::raw::c_char, + ) -> GpuProgram; +} +unsafe extern "C" { + pub fn gpu_program_destroy(gpu_program: *mut GpuProgram); +} +unsafe extern "C" { + pub fn gpu_program_use(program: *mut GpuProgram); +} +unsafe extern "C" { + pub fn gpu_program_clear(); +} +unsafe extern "C" { + pub fn gpu_buffer_create( + buf: *mut GpuBuffer, + vertices: *mut f32, + vertex_count: u32_, + indices: *mut u32_, + idx_count: ::std::os::raw::c_int, + ) -> u32_; +} +unsafe extern "C" { + pub fn gpu_buffer_destroy(buffer: *mut GpuBuffer); +} +unsafe extern "C" { + pub fn gpu_buffer_draw(buffer: *mut GpuBuffer); +} +unsafe extern "C" { + pub fn window_create(width: u32_, height: u32_, title: *const ::std::os::raw::c_char) + -> Window; +} +unsafe extern "C" { + pub fn window_destroy(win: *mut Window); +} +unsafe extern "C" { + pub fn window_buffers_swap(win: *mut Window); +} +unsafe extern "C" { + pub fn window_framebuffer_size_callback( + win: *mut GLFWwindow, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn window_poll_events(win: *mut Window); +} +pub type __builtin_va_list = [__va_list_tag; 1usize]; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __va_list_tag { + pub gp_offset: ::std::os::raw::c_uint, + pub fp_offset: ::std::os::raw::c_uint, + pub overflow_arg_area: *mut ::std::os::raw::c_void, + pub reg_save_area: *mut ::std::os::raw::c_void, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __va_list_tag"][::std::mem::size_of::<__va_list_tag>() - 24usize]; + ["Alignment of __va_list_tag"][::std::mem::align_of::<__va_list_tag>() - 8usize]; + ["Offset of field: __va_list_tag::gp_offset"] + [::std::mem::offset_of!(__va_list_tag, gp_offset) - 0usize]; + ["Offset of field: __va_list_tag::fp_offset"] + [::std::mem::offset_of!(__va_list_tag, fp_offset) - 4usize]; + ["Offset of field: __va_list_tag::overflow_arg_area"] + [::std::mem::offset_of!(__va_list_tag, overflow_arg_area) - 8usize]; + ["Offset of field: __va_list_tag::reg_save_area"] + [::std::mem::offset_of!(__va_list_tag, reg_save_area) - 16usize]; +}; diff --git a/gl_rust/src/glc.rs b/gl_rust/src/glc.rs new file mode 100644 index 0000000..9317801 --- /dev/null +++ b/gl_rust/src/glc.rs @@ -0,0 +1,8192 @@ +/* automatically generated by rust-bindgen 0.72.1 */ + +pub const _STDINT_H: u32 = 1; +pub const _FEATURES_H: u32 = 1; +pub const _DEFAULT_SOURCE: u32 = 1; +pub const __GLIBC_USE_ISOC2Y: u32 = 0; +pub const __GLIBC_USE_ISOC23: u32 = 0; +pub const __USE_ISOC11: u32 = 1; +pub const __USE_ISOC99: u32 = 1; +pub const __USE_ISOC95: u32 = 1; +pub const __USE_POSIX_IMPLICITLY: u32 = 1; +pub const _POSIX_SOURCE: u32 = 1; +pub const _POSIX_C_SOURCE: u32 = 202405; +pub const __USE_POSIX: u32 = 1; +pub const __USE_POSIX2: u32 = 1; +pub const __USE_POSIX199309: u32 = 1; +pub const __USE_POSIX199506: u32 = 1; +pub const __USE_XOPEN2K: u32 = 1; +pub const __USE_XOPEN2K8: u32 = 1; +pub const _ATFILE_SOURCE: u32 = 1; +pub const __USE_XOPEN2K24: u32 = 1; +pub const __WORDSIZE: u32 = 64; +pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1; +pub const __SYSCALL_WORDSIZE: u32 = 64; +pub const __TIMESIZE: u32 = 64; +pub const __USE_TIME_BITS64: u32 = 1; +pub const __USE_MISC: u32 = 1; +pub const __USE_ATFILE: u32 = 1; +pub const __USE_FORTIFY_LEVEL: u32 = 0; +pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0; +pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0; +pub const __GLIBC_USE_C23_STRTOL: u32 = 0; +pub const _STDC_PREDEF_H: u32 = 1; +pub const __STDC_IEC_559__: u32 = 1; +pub const __STDC_IEC_60559_BFP__: u32 = 201404; +pub const __STDC_IEC_559_COMPLEX__: u32 = 1; +pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404; +pub const __STDC_ISO_10646__: u32 = 201706; +pub const __GNU_LIBRARY__: u32 = 6; +pub const __GLIBC__: u32 = 2; +pub const __GLIBC_MINOR__: u32 = 43; +pub const _SYS_CDEFS_H: u32 = 1; +pub const __glibc_c99_flexarr_available: u32 = 1; +pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0; +pub const __HAVE_GENERIC_SELECTION: u32 = 1; +pub const __GLIBC_USE_LIB_EXT2: u32 = 0; +pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_BFP_EXT_C23: u32 = 0; +pub const __GLIBC_USE_IEC_60559_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0; +pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C23: u32 = 0; +pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0; +pub const _BITS_TYPES_H: u32 = 1; +pub const _BITS_TYPESIZES_H: u32 = 1; +pub const __OFF_T_MATCHES_OFF64_T: u32 = 1; +pub const __INO_T_MATCHES_INO64_T: u32 = 1; +pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1; +pub const __STATFS_MATCHES_STATFS64: u32 = 1; +pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64: u32 = 1; +pub const __FD_SETSIZE: u32 = 1024; +pub const _BITS_TIME64_H: u32 = 1; +pub const _BITS_WCHAR_H: u32 = 1; +pub const _BITS_STDINT_INTN_H: u32 = 1; +pub const _BITS_STDINT_UINTN_H: u32 = 1; +pub const _BITS_STDINT_LEAST_H: u32 = 1; +pub const INT8_MIN: i32 = -128; +pub const INT16_MIN: i32 = -32768; +pub const INT32_MIN: i32 = -2147483648; +pub const INT8_MAX: u32 = 127; +pub const INT16_MAX: u32 = 32767; +pub const INT32_MAX: u32 = 2147483647; +pub const UINT8_MAX: u32 = 255; +pub const UINT16_MAX: u32 = 65535; +pub const UINT32_MAX: u32 = 4294967295; +pub const INT_LEAST8_MIN: i32 = -128; +pub const INT_LEAST16_MIN: i32 = -32768; +pub const INT_LEAST32_MIN: i32 = -2147483648; +pub const INT_LEAST8_MAX: u32 = 127; +pub const INT_LEAST16_MAX: u32 = 32767; +pub const INT_LEAST32_MAX: u32 = 2147483647; +pub const UINT_LEAST8_MAX: u32 = 255; +pub const UINT_LEAST16_MAX: u32 = 65535; +pub const UINT_LEAST32_MAX: u32 = 4294967295; +pub const INT_FAST8_MIN: i32 = -128; +pub const INT_FAST16_MIN: i64 = -9223372036854775808; +pub const INT_FAST32_MIN: i64 = -9223372036854775808; +pub const INT_FAST8_MAX: u32 = 127; +pub const INT_FAST16_MAX: u64 = 9223372036854775807; +pub const INT_FAST32_MAX: u64 = 9223372036854775807; +pub const UINT_FAST8_MAX: u32 = 255; +pub const UINT_FAST16_MAX: i32 = -1; +pub const UINT_FAST32_MAX: i32 = -1; +pub const INTPTR_MIN: i64 = -9223372036854775808; +pub const INTPTR_MAX: u64 = 9223372036854775807; +pub const UINTPTR_MAX: i32 = -1; +pub const PTRDIFF_MIN: i64 = -9223372036854775808; +pub const PTRDIFF_MAX: u64 = 9223372036854775807; +pub const SIG_ATOMIC_MIN: i32 = -2147483648; +pub const SIG_ATOMIC_MAX: u32 = 2147483647; +pub const SIZE_MAX: i32 = -1; +pub const WINT_MIN: u32 = 0; +pub const WINT_MAX: u32 = 4294967295; +pub const KHRONOS_SUPPORT_INT64: u32 = 1; +pub const KHRONOS_SUPPORT_FLOAT: u32 = 1; +pub const KHRONOS_MAX_ENUM: u32 = 2147483647; +pub const GL_DEPTH_BUFFER_BIT: u32 = 256; +pub const GL_STENCIL_BUFFER_BIT: u32 = 1024; +pub const GL_COLOR_BUFFER_BIT: u32 = 16384; +pub const GL_FALSE: u32 = 0; +pub const GL_TRUE: u32 = 1; +pub const GL_POINTS: u32 = 0; +pub const GL_LINES: u32 = 1; +pub const GL_LINE_LOOP: u32 = 2; +pub const GL_LINE_STRIP: u32 = 3; +pub const GL_TRIANGLES: u32 = 4; +pub const GL_TRIANGLE_STRIP: u32 = 5; +pub const GL_TRIANGLE_FAN: u32 = 6; +pub const GL_NEVER: u32 = 512; +pub const GL_LESS: u32 = 513; +pub const GL_EQUAL: u32 = 514; +pub const GL_LEQUAL: u32 = 515; +pub const GL_GREATER: u32 = 516; +pub const GL_NOTEQUAL: u32 = 517; +pub const GL_GEQUAL: u32 = 518; +pub const GL_ALWAYS: u32 = 519; +pub const GL_ZERO: u32 = 0; +pub const GL_ONE: u32 = 1; +pub const GL_SRC_COLOR: u32 = 768; +pub const GL_ONE_MINUS_SRC_COLOR: u32 = 769; +pub const GL_SRC_ALPHA: u32 = 770; +pub const GL_ONE_MINUS_SRC_ALPHA: u32 = 771; +pub const GL_DST_ALPHA: u32 = 772; +pub const GL_ONE_MINUS_DST_ALPHA: u32 = 773; +pub const GL_DST_COLOR: u32 = 774; +pub const GL_ONE_MINUS_DST_COLOR: u32 = 775; +pub const GL_SRC_ALPHA_SATURATE: u32 = 776; +pub const GL_NONE: u32 = 0; +pub const GL_FRONT_LEFT: u32 = 1024; +pub const GL_FRONT_RIGHT: u32 = 1025; +pub const GL_BACK_LEFT: u32 = 1026; +pub const GL_BACK_RIGHT: u32 = 1027; +pub const GL_FRONT: u32 = 1028; +pub const GL_BACK: u32 = 1029; +pub const GL_LEFT: u32 = 1030; +pub const GL_RIGHT: u32 = 1031; +pub const GL_FRONT_AND_BACK: u32 = 1032; +pub const GL_NO_ERROR: u32 = 0; +pub const GL_INVALID_ENUM: u32 = 1280; +pub const GL_INVALID_VALUE: u32 = 1281; +pub const GL_INVALID_OPERATION: u32 = 1282; +pub const GL_OUT_OF_MEMORY: u32 = 1285; +pub const GL_CW: u32 = 2304; +pub const GL_CCW: u32 = 2305; +pub const GL_POINT_SIZE: u32 = 2833; +pub const GL_POINT_SIZE_RANGE: u32 = 2834; +pub const GL_POINT_SIZE_GRANULARITY: u32 = 2835; +pub const GL_LINE_SMOOTH: u32 = 2848; +pub const GL_LINE_WIDTH: u32 = 2849; +pub const GL_LINE_WIDTH_RANGE: u32 = 2850; +pub const GL_LINE_WIDTH_GRANULARITY: u32 = 2851; +pub const GL_POLYGON_MODE: u32 = 2880; +pub const GL_POLYGON_SMOOTH: u32 = 2881; +pub const GL_CULL_FACE: u32 = 2884; +pub const GL_CULL_FACE_MODE: u32 = 2885; +pub const GL_FRONT_FACE: u32 = 2886; +pub const GL_DEPTH_RANGE: u32 = 2928; +pub const GL_DEPTH_TEST: u32 = 2929; +pub const GL_DEPTH_WRITEMASK: u32 = 2930; +pub const GL_DEPTH_CLEAR_VALUE: u32 = 2931; +pub const GL_DEPTH_FUNC: u32 = 2932; +pub const GL_STENCIL_TEST: u32 = 2960; +pub const GL_STENCIL_CLEAR_VALUE: u32 = 2961; +pub const GL_STENCIL_FUNC: u32 = 2962; +pub const GL_STENCIL_VALUE_MASK: u32 = 2963; +pub const GL_STENCIL_FAIL: u32 = 2964; +pub const GL_STENCIL_PASS_DEPTH_FAIL: u32 = 2965; +pub const GL_STENCIL_PASS_DEPTH_PASS: u32 = 2966; +pub const GL_STENCIL_REF: u32 = 2967; +pub const GL_STENCIL_WRITEMASK: u32 = 2968; +pub const GL_VIEWPORT: u32 = 2978; +pub const GL_DITHER: u32 = 3024; +pub const GL_BLEND_DST: u32 = 3040; +pub const GL_BLEND_SRC: u32 = 3041; +pub const GL_BLEND: u32 = 3042; +pub const GL_LOGIC_OP_MODE: u32 = 3056; +pub const GL_DRAW_BUFFER: u32 = 3073; +pub const GL_READ_BUFFER: u32 = 3074; +pub const GL_SCISSOR_BOX: u32 = 3088; +pub const GL_SCISSOR_TEST: u32 = 3089; +pub const GL_COLOR_CLEAR_VALUE: u32 = 3106; +pub const GL_COLOR_WRITEMASK: u32 = 3107; +pub const GL_DOUBLEBUFFER: u32 = 3122; +pub const GL_STEREO: u32 = 3123; +pub const GL_LINE_SMOOTH_HINT: u32 = 3154; +pub const GL_POLYGON_SMOOTH_HINT: u32 = 3155; +pub const GL_UNPACK_SWAP_BYTES: u32 = 3312; +pub const GL_UNPACK_LSB_FIRST: u32 = 3313; +pub const GL_UNPACK_ROW_LENGTH: u32 = 3314; +pub const GL_UNPACK_SKIP_ROWS: u32 = 3315; +pub const GL_UNPACK_SKIP_PIXELS: u32 = 3316; +pub const GL_UNPACK_ALIGNMENT: u32 = 3317; +pub const GL_PACK_SWAP_BYTES: u32 = 3328; +pub const GL_PACK_LSB_FIRST: u32 = 3329; +pub const GL_PACK_ROW_LENGTH: u32 = 3330; +pub const GL_PACK_SKIP_ROWS: u32 = 3331; +pub const GL_PACK_SKIP_PIXELS: u32 = 3332; +pub const GL_PACK_ALIGNMENT: u32 = 3333; +pub const GL_MAX_TEXTURE_SIZE: u32 = 3379; +pub const GL_MAX_VIEWPORT_DIMS: u32 = 3386; +pub const GL_SUBPIXEL_BITS: u32 = 3408; +pub const GL_TEXTURE_1D: u32 = 3552; +pub const GL_TEXTURE_2D: u32 = 3553; +pub const GL_TEXTURE_WIDTH: u32 = 4096; +pub const GL_TEXTURE_HEIGHT: u32 = 4097; +pub const GL_TEXTURE_BORDER_COLOR: u32 = 4100; +pub const GL_DONT_CARE: u32 = 4352; +pub const GL_FASTEST: u32 = 4353; +pub const GL_NICEST: u32 = 4354; +pub const GL_BYTE: u32 = 5120; +pub const GL_UNSIGNED_BYTE: u32 = 5121; +pub const GL_SHORT: u32 = 5122; +pub const GL_UNSIGNED_SHORT: u32 = 5123; +pub const GL_INT: u32 = 5124; +pub const GL_UNSIGNED_INT: u32 = 5125; +pub const GL_FLOAT: u32 = 5126; +pub const GL_CLEAR: u32 = 5376; +pub const GL_AND: u32 = 5377; +pub const GL_AND_REVERSE: u32 = 5378; +pub const GL_COPY: u32 = 5379; +pub const GL_AND_INVERTED: u32 = 5380; +pub const GL_NOOP: u32 = 5381; +pub const GL_XOR: u32 = 5382; +pub const GL_OR: u32 = 5383; +pub const GL_NOR: u32 = 5384; +pub const GL_EQUIV: u32 = 5385; +pub const GL_INVERT: u32 = 5386; +pub const GL_OR_REVERSE: u32 = 5387; +pub const GL_COPY_INVERTED: u32 = 5388; +pub const GL_OR_INVERTED: u32 = 5389; +pub const GL_NAND: u32 = 5390; +pub const GL_SET: u32 = 5391; +pub const GL_TEXTURE: u32 = 5890; +pub const GL_COLOR: u32 = 6144; +pub const GL_DEPTH: u32 = 6145; +pub const GL_STENCIL: u32 = 6146; +pub const GL_STENCIL_INDEX: u32 = 6401; +pub const GL_DEPTH_COMPONENT: u32 = 6402; +pub const GL_RED: u32 = 6403; +pub const GL_GREEN: u32 = 6404; +pub const GL_BLUE: u32 = 6405; +pub const GL_ALPHA: u32 = 6406; +pub const GL_RGB: u32 = 6407; +pub const GL_RGBA: u32 = 6408; +pub const GL_POINT: u32 = 6912; +pub const GL_LINE: u32 = 6913; +pub const GL_FILL: u32 = 6914; +pub const GL_KEEP: u32 = 7680; +pub const GL_REPLACE: u32 = 7681; +pub const GL_INCR: u32 = 7682; +pub const GL_DECR: u32 = 7683; +pub const GL_VENDOR: u32 = 7936; +pub const GL_RENDERER: u32 = 7937; +pub const GL_VERSION: u32 = 7938; +pub const GL_EXTENSIONS: u32 = 7939; +pub const GL_NEAREST: u32 = 9728; +pub const GL_LINEAR: u32 = 9729; +pub const GL_NEAREST_MIPMAP_NEAREST: u32 = 9984; +pub const GL_LINEAR_MIPMAP_NEAREST: u32 = 9985; +pub const GL_NEAREST_MIPMAP_LINEAR: u32 = 9986; +pub const GL_LINEAR_MIPMAP_LINEAR: u32 = 9987; +pub const GL_TEXTURE_MAG_FILTER: u32 = 10240; +pub const GL_TEXTURE_MIN_FILTER: u32 = 10241; +pub const GL_TEXTURE_WRAP_S: u32 = 10242; +pub const GL_TEXTURE_WRAP_T: u32 = 10243; +pub const GL_REPEAT: u32 = 10497; +pub const GL_COLOR_LOGIC_OP: u32 = 3058; +pub const GL_POLYGON_OFFSET_UNITS: u32 = 10752; +pub const GL_POLYGON_OFFSET_POINT: u32 = 10753; +pub const GL_POLYGON_OFFSET_LINE: u32 = 10754; +pub const GL_POLYGON_OFFSET_FILL: u32 = 32823; +pub const GL_POLYGON_OFFSET_FACTOR: u32 = 32824; +pub const GL_TEXTURE_BINDING_1D: u32 = 32872; +pub const GL_TEXTURE_BINDING_2D: u32 = 32873; +pub const GL_TEXTURE_INTERNAL_FORMAT: u32 = 4099; +pub const GL_TEXTURE_RED_SIZE: u32 = 32860; +pub const GL_TEXTURE_GREEN_SIZE: u32 = 32861; +pub const GL_TEXTURE_BLUE_SIZE: u32 = 32862; +pub const GL_TEXTURE_ALPHA_SIZE: u32 = 32863; +pub const GL_DOUBLE: u32 = 5130; +pub const GL_PROXY_TEXTURE_1D: u32 = 32867; +pub const GL_PROXY_TEXTURE_2D: u32 = 32868; +pub const GL_R3_G3_B2: u32 = 10768; +pub const GL_RGB4: u32 = 32847; +pub const GL_RGB5: u32 = 32848; +pub const GL_RGB8: u32 = 32849; +pub const GL_RGB10: u32 = 32850; +pub const GL_RGB12: u32 = 32851; +pub const GL_RGB16: u32 = 32852; +pub const GL_RGBA2: u32 = 32853; +pub const GL_RGBA4: u32 = 32854; +pub const GL_RGB5_A1: u32 = 32855; +pub const GL_RGBA8: u32 = 32856; +pub const GL_RGB10_A2: u32 = 32857; +pub const GL_RGBA12: u32 = 32858; +pub const GL_RGBA16: u32 = 32859; +pub const GL_UNSIGNED_BYTE_3_3_2: u32 = 32818; +pub const GL_UNSIGNED_SHORT_4_4_4_4: u32 = 32819; +pub const GL_UNSIGNED_SHORT_5_5_5_1: u32 = 32820; +pub const GL_UNSIGNED_INT_8_8_8_8: u32 = 32821; +pub const GL_UNSIGNED_INT_10_10_10_2: u32 = 32822; +pub const GL_TEXTURE_BINDING_3D: u32 = 32874; +pub const GL_PACK_SKIP_IMAGES: u32 = 32875; +pub const GL_PACK_IMAGE_HEIGHT: u32 = 32876; +pub const GL_UNPACK_SKIP_IMAGES: u32 = 32877; +pub const GL_UNPACK_IMAGE_HEIGHT: u32 = 32878; +pub const GL_TEXTURE_3D: u32 = 32879; +pub const GL_PROXY_TEXTURE_3D: u32 = 32880; +pub const GL_TEXTURE_DEPTH: u32 = 32881; +pub const GL_TEXTURE_WRAP_R: u32 = 32882; +pub const GL_MAX_3D_TEXTURE_SIZE: u32 = 32883; +pub const GL_UNSIGNED_BYTE_2_3_3_REV: u32 = 33634; +pub const GL_UNSIGNED_SHORT_5_6_5: u32 = 33635; +pub const GL_UNSIGNED_SHORT_5_6_5_REV: u32 = 33636; +pub const GL_UNSIGNED_SHORT_4_4_4_4_REV: u32 = 33637; +pub const GL_UNSIGNED_SHORT_1_5_5_5_REV: u32 = 33638; +pub const GL_UNSIGNED_INT_8_8_8_8_REV: u32 = 33639; +pub const GL_UNSIGNED_INT_2_10_10_10_REV: u32 = 33640; +pub const GL_BGR: u32 = 32992; +pub const GL_BGRA: u32 = 32993; +pub const GL_MAX_ELEMENTS_VERTICES: u32 = 33000; +pub const GL_MAX_ELEMENTS_INDICES: u32 = 33001; +pub const GL_CLAMP_TO_EDGE: u32 = 33071; +pub const GL_TEXTURE_MIN_LOD: u32 = 33082; +pub const GL_TEXTURE_MAX_LOD: u32 = 33083; +pub const GL_TEXTURE_BASE_LEVEL: u32 = 33084; +pub const GL_TEXTURE_MAX_LEVEL: u32 = 33085; +pub const GL_SMOOTH_POINT_SIZE_RANGE: u32 = 2834; +pub const GL_SMOOTH_POINT_SIZE_GRANULARITY: u32 = 2835; +pub const GL_SMOOTH_LINE_WIDTH_RANGE: u32 = 2850; +pub const GL_SMOOTH_LINE_WIDTH_GRANULARITY: u32 = 2851; +pub const GL_ALIASED_LINE_WIDTH_RANGE: u32 = 33902; +pub const GL_TEXTURE0: u32 = 33984; +pub const GL_TEXTURE1: u32 = 33985; +pub const GL_TEXTURE2: u32 = 33986; +pub const GL_TEXTURE3: u32 = 33987; +pub const GL_TEXTURE4: u32 = 33988; +pub const GL_TEXTURE5: u32 = 33989; +pub const GL_TEXTURE6: u32 = 33990; +pub const GL_TEXTURE7: u32 = 33991; +pub const GL_TEXTURE8: u32 = 33992; +pub const GL_TEXTURE9: u32 = 33993; +pub const GL_TEXTURE10: u32 = 33994; +pub const GL_TEXTURE11: u32 = 33995; +pub const GL_TEXTURE12: u32 = 33996; +pub const GL_TEXTURE13: u32 = 33997; +pub const GL_TEXTURE14: u32 = 33998; +pub const GL_TEXTURE15: u32 = 33999; +pub const GL_TEXTURE16: u32 = 34000; +pub const GL_TEXTURE17: u32 = 34001; +pub const GL_TEXTURE18: u32 = 34002; +pub const GL_TEXTURE19: u32 = 34003; +pub const GL_TEXTURE20: u32 = 34004; +pub const GL_TEXTURE21: u32 = 34005; +pub const GL_TEXTURE22: u32 = 34006; +pub const GL_TEXTURE23: u32 = 34007; +pub const GL_TEXTURE24: u32 = 34008; +pub const GL_TEXTURE25: u32 = 34009; +pub const GL_TEXTURE26: u32 = 34010; +pub const GL_TEXTURE27: u32 = 34011; +pub const GL_TEXTURE28: u32 = 34012; +pub const GL_TEXTURE29: u32 = 34013; +pub const GL_TEXTURE30: u32 = 34014; +pub const GL_TEXTURE31: u32 = 34015; +pub const GL_ACTIVE_TEXTURE: u32 = 34016; +pub const GL_MULTISAMPLE: u32 = 32925; +pub const GL_SAMPLE_ALPHA_TO_COVERAGE: u32 = 32926; +pub const GL_SAMPLE_ALPHA_TO_ONE: u32 = 32927; +pub const GL_SAMPLE_COVERAGE: u32 = 32928; +pub const GL_SAMPLE_BUFFERS: u32 = 32936; +pub const GL_SAMPLES: u32 = 32937; +pub const GL_SAMPLE_COVERAGE_VALUE: u32 = 32938; +pub const GL_SAMPLE_COVERAGE_INVERT: u32 = 32939; +pub const GL_TEXTURE_CUBE_MAP: u32 = 34067; +pub const GL_TEXTURE_BINDING_CUBE_MAP: u32 = 34068; +pub const GL_TEXTURE_CUBE_MAP_POSITIVE_X: u32 = 34069; +pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_X: u32 = 34070; +pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Y: u32 = 34071; +pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: u32 = 34072; +pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Z: u32 = 34073; +pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: u32 = 34074; +pub const GL_PROXY_TEXTURE_CUBE_MAP: u32 = 34075; +pub const GL_MAX_CUBE_MAP_TEXTURE_SIZE: u32 = 34076; +pub const GL_COMPRESSED_RGB: u32 = 34029; +pub const GL_COMPRESSED_RGBA: u32 = 34030; +pub const GL_TEXTURE_COMPRESSION_HINT: u32 = 34031; +pub const GL_TEXTURE_COMPRESSED_IMAGE_SIZE: u32 = 34464; +pub const GL_TEXTURE_COMPRESSED: u32 = 34465; +pub const GL_NUM_COMPRESSED_TEXTURE_FORMATS: u32 = 34466; +pub const GL_COMPRESSED_TEXTURE_FORMATS: u32 = 34467; +pub const GL_CLAMP_TO_BORDER: u32 = 33069; +pub const GL_BLEND_DST_RGB: u32 = 32968; +pub const GL_BLEND_SRC_RGB: u32 = 32969; +pub const GL_BLEND_DST_ALPHA: u32 = 32970; +pub const GL_BLEND_SRC_ALPHA: u32 = 32971; +pub const GL_POINT_FADE_THRESHOLD_SIZE: u32 = 33064; +pub const GL_DEPTH_COMPONENT16: u32 = 33189; +pub const GL_DEPTH_COMPONENT24: u32 = 33190; +pub const GL_DEPTH_COMPONENT32: u32 = 33191; +pub const GL_MIRRORED_REPEAT: u32 = 33648; +pub const GL_MAX_TEXTURE_LOD_BIAS: u32 = 34045; +pub const GL_TEXTURE_LOD_BIAS: u32 = 34049; +pub const GL_INCR_WRAP: u32 = 34055; +pub const GL_DECR_WRAP: u32 = 34056; +pub const GL_TEXTURE_DEPTH_SIZE: u32 = 34890; +pub const GL_TEXTURE_COMPARE_MODE: u32 = 34892; +pub const GL_TEXTURE_COMPARE_FUNC: u32 = 34893; +pub const GL_BLEND_COLOR: u32 = 32773; +pub const GL_BLEND_EQUATION: u32 = 32777; +pub const GL_CONSTANT_COLOR: u32 = 32769; +pub const GL_ONE_MINUS_CONSTANT_COLOR: u32 = 32770; +pub const GL_CONSTANT_ALPHA: u32 = 32771; +pub const GL_ONE_MINUS_CONSTANT_ALPHA: u32 = 32772; +pub const GL_FUNC_ADD: u32 = 32774; +pub const GL_FUNC_REVERSE_SUBTRACT: u32 = 32779; +pub const GL_FUNC_SUBTRACT: u32 = 32778; +pub const GL_MIN: u32 = 32775; +pub const GL_MAX: u32 = 32776; +pub const GL_BUFFER_SIZE: u32 = 34660; +pub const GL_BUFFER_USAGE: u32 = 34661; +pub const GL_QUERY_COUNTER_BITS: u32 = 34916; +pub const GL_CURRENT_QUERY: u32 = 34917; +pub const GL_QUERY_RESULT: u32 = 34918; +pub const GL_QUERY_RESULT_AVAILABLE: u32 = 34919; +pub const GL_ARRAY_BUFFER: u32 = 34962; +pub const GL_ELEMENT_ARRAY_BUFFER: u32 = 34963; +pub const GL_ARRAY_BUFFER_BINDING: u32 = 34964; +pub const GL_ELEMENT_ARRAY_BUFFER_BINDING: u32 = 34965; +pub const GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: u32 = 34975; +pub const GL_READ_ONLY: u32 = 35000; +pub const GL_WRITE_ONLY: u32 = 35001; +pub const GL_READ_WRITE: u32 = 35002; +pub const GL_BUFFER_ACCESS: u32 = 35003; +pub const GL_BUFFER_MAPPED: u32 = 35004; +pub const GL_BUFFER_MAP_POINTER: u32 = 35005; +pub const GL_STREAM_DRAW: u32 = 35040; +pub const GL_STREAM_READ: u32 = 35041; +pub const GL_STREAM_COPY: u32 = 35042; +pub const GL_STATIC_DRAW: u32 = 35044; +pub const GL_STATIC_READ: u32 = 35045; +pub const GL_STATIC_COPY: u32 = 35046; +pub const GL_DYNAMIC_DRAW: u32 = 35048; +pub const GL_DYNAMIC_READ: u32 = 35049; +pub const GL_DYNAMIC_COPY: u32 = 35050; +pub const GL_SAMPLES_PASSED: u32 = 35092; +pub const GL_SRC1_ALPHA: u32 = 34185; +pub const GL_BLEND_EQUATION_RGB: u32 = 32777; +pub const GL_VERTEX_ATTRIB_ARRAY_ENABLED: u32 = 34338; +pub const GL_VERTEX_ATTRIB_ARRAY_SIZE: u32 = 34339; +pub const GL_VERTEX_ATTRIB_ARRAY_STRIDE: u32 = 34340; +pub const GL_VERTEX_ATTRIB_ARRAY_TYPE: u32 = 34341; +pub const GL_CURRENT_VERTEX_ATTRIB: u32 = 34342; +pub const GL_VERTEX_PROGRAM_POINT_SIZE: u32 = 34370; +pub const GL_VERTEX_ATTRIB_ARRAY_POINTER: u32 = 34373; +pub const GL_STENCIL_BACK_FUNC: u32 = 34816; +pub const GL_STENCIL_BACK_FAIL: u32 = 34817; +pub const GL_STENCIL_BACK_PASS_DEPTH_FAIL: u32 = 34818; +pub const GL_STENCIL_BACK_PASS_DEPTH_PASS: u32 = 34819; +pub const GL_MAX_DRAW_BUFFERS: u32 = 34852; +pub const GL_DRAW_BUFFER0: u32 = 34853; +pub const GL_DRAW_BUFFER1: u32 = 34854; +pub const GL_DRAW_BUFFER2: u32 = 34855; +pub const GL_DRAW_BUFFER3: u32 = 34856; +pub const GL_DRAW_BUFFER4: u32 = 34857; +pub const GL_DRAW_BUFFER5: u32 = 34858; +pub const GL_DRAW_BUFFER6: u32 = 34859; +pub const GL_DRAW_BUFFER7: u32 = 34860; +pub const GL_DRAW_BUFFER8: u32 = 34861; +pub const GL_DRAW_BUFFER9: u32 = 34862; +pub const GL_DRAW_BUFFER10: u32 = 34863; +pub const GL_DRAW_BUFFER11: u32 = 34864; +pub const GL_DRAW_BUFFER12: u32 = 34865; +pub const GL_DRAW_BUFFER13: u32 = 34866; +pub const GL_DRAW_BUFFER14: u32 = 34867; +pub const GL_DRAW_BUFFER15: u32 = 34868; +pub const GL_BLEND_EQUATION_ALPHA: u32 = 34877; +pub const GL_MAX_VERTEX_ATTRIBS: u32 = 34921; +pub const GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: u32 = 34922; +pub const GL_MAX_TEXTURE_IMAGE_UNITS: u32 = 34930; +pub const GL_FRAGMENT_SHADER: u32 = 35632; +pub const GL_VERTEX_SHADER: u32 = 35633; +pub const GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35657; +pub const GL_MAX_VERTEX_UNIFORM_COMPONENTS: u32 = 35658; +pub const GL_MAX_VARYING_FLOATS: u32 = 35659; +pub const GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: u32 = 35660; +pub const GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: u32 = 35661; +pub const GL_SHADER_TYPE: u32 = 35663; +pub const GL_FLOAT_VEC2: u32 = 35664; +pub const GL_FLOAT_VEC3: u32 = 35665; +pub const GL_FLOAT_VEC4: u32 = 35666; +pub const GL_INT_VEC2: u32 = 35667; +pub const GL_INT_VEC3: u32 = 35668; +pub const GL_INT_VEC4: u32 = 35669; +pub const GL_BOOL: u32 = 35670; +pub const GL_BOOL_VEC2: u32 = 35671; +pub const GL_BOOL_VEC3: u32 = 35672; +pub const GL_BOOL_VEC4: u32 = 35673; +pub const GL_FLOAT_MAT2: u32 = 35674; +pub const GL_FLOAT_MAT3: u32 = 35675; +pub const GL_FLOAT_MAT4: u32 = 35676; +pub const GL_SAMPLER_1D: u32 = 35677; +pub const GL_SAMPLER_2D: u32 = 35678; +pub const GL_SAMPLER_3D: u32 = 35679; +pub const GL_SAMPLER_CUBE: u32 = 35680; +pub const GL_SAMPLER_1D_SHADOW: u32 = 35681; +pub const GL_SAMPLER_2D_SHADOW: u32 = 35682; +pub const GL_DELETE_STATUS: u32 = 35712; +pub const GL_COMPILE_STATUS: u32 = 35713; +pub const GL_LINK_STATUS: u32 = 35714; +pub const GL_VALIDATE_STATUS: u32 = 35715; +pub const GL_INFO_LOG_LENGTH: u32 = 35716; +pub const GL_ATTACHED_SHADERS: u32 = 35717; +pub const GL_ACTIVE_UNIFORMS: u32 = 35718; +pub const GL_ACTIVE_UNIFORM_MAX_LENGTH: u32 = 35719; +pub const GL_SHADER_SOURCE_LENGTH: u32 = 35720; +pub const GL_ACTIVE_ATTRIBUTES: u32 = 35721; +pub const GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: u32 = 35722; +pub const GL_FRAGMENT_SHADER_DERIVATIVE_HINT: u32 = 35723; +pub const GL_SHADING_LANGUAGE_VERSION: u32 = 35724; +pub const GL_CURRENT_PROGRAM: u32 = 35725; +pub const GL_POINT_SPRITE_COORD_ORIGIN: u32 = 36000; +pub const GL_LOWER_LEFT: u32 = 36001; +pub const GL_UPPER_LEFT: u32 = 36002; +pub const GL_STENCIL_BACK_REF: u32 = 36003; +pub const GL_STENCIL_BACK_VALUE_MASK: u32 = 36004; +pub const GL_STENCIL_BACK_WRITEMASK: u32 = 36005; +pub const GL_PIXEL_PACK_BUFFER: u32 = 35051; +pub const GL_PIXEL_UNPACK_BUFFER: u32 = 35052; +pub const GL_PIXEL_PACK_BUFFER_BINDING: u32 = 35053; +pub const GL_PIXEL_UNPACK_BUFFER_BINDING: u32 = 35055; +pub const GL_FLOAT_MAT2x3: u32 = 35685; +pub const GL_FLOAT_MAT2x4: u32 = 35686; +pub const GL_FLOAT_MAT3x2: u32 = 35687; +pub const GL_FLOAT_MAT3x4: u32 = 35688; +pub const GL_FLOAT_MAT4x2: u32 = 35689; +pub const GL_FLOAT_MAT4x3: u32 = 35690; +pub const GL_SRGB: u32 = 35904; +pub const GL_SRGB8: u32 = 35905; +pub const GL_SRGB_ALPHA: u32 = 35906; +pub const GL_SRGB8_ALPHA8: u32 = 35907; +pub const GL_COMPRESSED_SRGB: u32 = 35912; +pub const GL_COMPRESSED_SRGB_ALPHA: u32 = 35913; +pub const GL_COMPARE_REF_TO_TEXTURE: u32 = 34894; +pub const GL_CLIP_DISTANCE0: u32 = 12288; +pub const GL_CLIP_DISTANCE1: u32 = 12289; +pub const GL_CLIP_DISTANCE2: u32 = 12290; +pub const GL_CLIP_DISTANCE3: u32 = 12291; +pub const GL_CLIP_DISTANCE4: u32 = 12292; +pub const GL_CLIP_DISTANCE5: u32 = 12293; +pub const GL_CLIP_DISTANCE6: u32 = 12294; +pub const GL_CLIP_DISTANCE7: u32 = 12295; +pub const GL_MAX_CLIP_DISTANCES: u32 = 3378; +pub const GL_MAJOR_VERSION: u32 = 33307; +pub const GL_MINOR_VERSION: u32 = 33308; +pub const GL_NUM_EXTENSIONS: u32 = 33309; +pub const GL_CONTEXT_FLAGS: u32 = 33310; +pub const GL_COMPRESSED_RED: u32 = 33317; +pub const GL_COMPRESSED_RG: u32 = 33318; +pub const GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT: u32 = 1; +pub const GL_RGBA32F: u32 = 34836; +pub const GL_RGB32F: u32 = 34837; +pub const GL_RGBA16F: u32 = 34842; +pub const GL_RGB16F: u32 = 34843; +pub const GL_VERTEX_ATTRIB_ARRAY_INTEGER: u32 = 35069; +pub const GL_MAX_ARRAY_TEXTURE_LAYERS: u32 = 35071; +pub const GL_MIN_PROGRAM_TEXEL_OFFSET: u32 = 35076; +pub const GL_MAX_PROGRAM_TEXEL_OFFSET: u32 = 35077; +pub const GL_CLAMP_READ_COLOR: u32 = 35100; +pub const GL_FIXED_ONLY: u32 = 35101; +pub const GL_MAX_VARYING_COMPONENTS: u32 = 35659; +pub const GL_TEXTURE_1D_ARRAY: u32 = 35864; +pub const GL_PROXY_TEXTURE_1D_ARRAY: u32 = 35865; +pub const GL_TEXTURE_2D_ARRAY: u32 = 35866; +pub const GL_PROXY_TEXTURE_2D_ARRAY: u32 = 35867; +pub const GL_TEXTURE_BINDING_1D_ARRAY: u32 = 35868; +pub const GL_TEXTURE_BINDING_2D_ARRAY: u32 = 35869; +pub const GL_R11F_G11F_B10F: u32 = 35898; +pub const GL_UNSIGNED_INT_10F_11F_11F_REV: u32 = 35899; +pub const GL_RGB9_E5: u32 = 35901; +pub const GL_UNSIGNED_INT_5_9_9_9_REV: u32 = 35902; +pub const GL_TEXTURE_SHARED_SIZE: u32 = 35903; +pub const GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: u32 = 35958; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_MODE: u32 = 35967; +pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: u32 = 35968; +pub const GL_TRANSFORM_FEEDBACK_VARYINGS: u32 = 35971; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_START: u32 = 35972; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: u32 = 35973; +pub const GL_PRIMITIVES_GENERATED: u32 = 35975; +pub const GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: u32 = 35976; +pub const GL_RASTERIZER_DISCARD: u32 = 35977; +pub const GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: u32 = 35978; +pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: u32 = 35979; +pub const GL_INTERLEAVED_ATTRIBS: u32 = 35980; +pub const GL_SEPARATE_ATTRIBS: u32 = 35981; +pub const GL_TRANSFORM_FEEDBACK_BUFFER: u32 = 35982; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: u32 = 35983; +pub const GL_RGBA32UI: u32 = 36208; +pub const GL_RGB32UI: u32 = 36209; +pub const GL_RGBA16UI: u32 = 36214; +pub const GL_RGB16UI: u32 = 36215; +pub const GL_RGBA8UI: u32 = 36220; +pub const GL_RGB8UI: u32 = 36221; +pub const GL_RGBA32I: u32 = 36226; +pub const GL_RGB32I: u32 = 36227; +pub const GL_RGBA16I: u32 = 36232; +pub const GL_RGB16I: u32 = 36233; +pub const GL_RGBA8I: u32 = 36238; +pub const GL_RGB8I: u32 = 36239; +pub const GL_RED_INTEGER: u32 = 36244; +pub const GL_GREEN_INTEGER: u32 = 36245; +pub const GL_BLUE_INTEGER: u32 = 36246; +pub const GL_RGB_INTEGER: u32 = 36248; +pub const GL_RGBA_INTEGER: u32 = 36249; +pub const GL_BGR_INTEGER: u32 = 36250; +pub const GL_BGRA_INTEGER: u32 = 36251; +pub const GL_SAMPLER_1D_ARRAY: u32 = 36288; +pub const GL_SAMPLER_2D_ARRAY: u32 = 36289; +pub const GL_SAMPLER_1D_ARRAY_SHADOW: u32 = 36291; +pub const GL_SAMPLER_2D_ARRAY_SHADOW: u32 = 36292; +pub const GL_SAMPLER_CUBE_SHADOW: u32 = 36293; +pub const GL_UNSIGNED_INT_VEC2: u32 = 36294; +pub const GL_UNSIGNED_INT_VEC3: u32 = 36295; +pub const GL_UNSIGNED_INT_VEC4: u32 = 36296; +pub const GL_INT_SAMPLER_1D: u32 = 36297; +pub const GL_INT_SAMPLER_2D: u32 = 36298; +pub const GL_INT_SAMPLER_3D: u32 = 36299; +pub const GL_INT_SAMPLER_CUBE: u32 = 36300; +pub const GL_INT_SAMPLER_1D_ARRAY: u32 = 36302; +pub const GL_INT_SAMPLER_2D_ARRAY: u32 = 36303; +pub const GL_UNSIGNED_INT_SAMPLER_1D: u32 = 36305; +pub const GL_UNSIGNED_INT_SAMPLER_2D: u32 = 36306; +pub const GL_UNSIGNED_INT_SAMPLER_3D: u32 = 36307; +pub const GL_UNSIGNED_INT_SAMPLER_CUBE: u32 = 36308; +pub const GL_UNSIGNED_INT_SAMPLER_1D_ARRAY: u32 = 36310; +pub const GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: u32 = 36311; +pub const GL_QUERY_WAIT: u32 = 36371; +pub const GL_QUERY_NO_WAIT: u32 = 36372; +pub const GL_QUERY_BY_REGION_WAIT: u32 = 36373; +pub const GL_QUERY_BY_REGION_NO_WAIT: u32 = 36374; +pub const GL_BUFFER_ACCESS_FLAGS: u32 = 37151; +pub const GL_BUFFER_MAP_LENGTH: u32 = 37152; +pub const GL_BUFFER_MAP_OFFSET: u32 = 37153; +pub const GL_DEPTH_COMPONENT32F: u32 = 36012; +pub const GL_DEPTH32F_STENCIL8: u32 = 36013; +pub const GL_FLOAT_32_UNSIGNED_INT_24_8_REV: u32 = 36269; +pub const GL_INVALID_FRAMEBUFFER_OPERATION: u32 = 1286; +pub const GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: u32 = 33296; +pub const GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: u32 = 33297; +pub const GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: u32 = 33298; +pub const GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: u32 = 33299; +pub const GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: u32 = 33300; +pub const GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: u32 = 33301; +pub const GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: u32 = 33302; +pub const GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: u32 = 33303; +pub const GL_FRAMEBUFFER_DEFAULT: u32 = 33304; +pub const GL_FRAMEBUFFER_UNDEFINED: u32 = 33305; +pub const GL_DEPTH_STENCIL_ATTACHMENT: u32 = 33306; +pub const GL_MAX_RENDERBUFFER_SIZE: u32 = 34024; +pub const GL_DEPTH_STENCIL: u32 = 34041; +pub const GL_UNSIGNED_INT_24_8: u32 = 34042; +pub const GL_DEPTH24_STENCIL8: u32 = 35056; +pub const GL_TEXTURE_STENCIL_SIZE: u32 = 35057; +pub const GL_TEXTURE_RED_TYPE: u32 = 35856; +pub const GL_TEXTURE_GREEN_TYPE: u32 = 35857; +pub const GL_TEXTURE_BLUE_TYPE: u32 = 35858; +pub const GL_TEXTURE_ALPHA_TYPE: u32 = 35859; +pub const GL_TEXTURE_DEPTH_TYPE: u32 = 35862; +pub const GL_UNSIGNED_NORMALIZED: u32 = 35863; +pub const GL_FRAMEBUFFER_BINDING: u32 = 36006; +pub const GL_DRAW_FRAMEBUFFER_BINDING: u32 = 36006; +pub const GL_RENDERBUFFER_BINDING: u32 = 36007; +pub const GL_READ_FRAMEBUFFER: u32 = 36008; +pub const GL_DRAW_FRAMEBUFFER: u32 = 36009; +pub const GL_READ_FRAMEBUFFER_BINDING: u32 = 36010; +pub const GL_RENDERBUFFER_SAMPLES: u32 = 36011; +pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: u32 = 36048; +pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: u32 = 36049; +pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: u32 = 36050; +pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: u32 = 36051; +pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: u32 = 36052; +pub const GL_FRAMEBUFFER_COMPLETE: u32 = 36053; +pub const GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: u32 = 36054; +pub const GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: u32 = 36055; +pub const GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: u32 = 36059; +pub const GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: u32 = 36060; +pub const GL_FRAMEBUFFER_UNSUPPORTED: u32 = 36061; +pub const GL_MAX_COLOR_ATTACHMENTS: u32 = 36063; +pub const GL_COLOR_ATTACHMENT0: u32 = 36064; +pub const GL_COLOR_ATTACHMENT1: u32 = 36065; +pub const GL_COLOR_ATTACHMENT2: u32 = 36066; +pub const GL_COLOR_ATTACHMENT3: u32 = 36067; +pub const GL_COLOR_ATTACHMENT4: u32 = 36068; +pub const GL_COLOR_ATTACHMENT5: u32 = 36069; +pub const GL_COLOR_ATTACHMENT6: u32 = 36070; +pub const GL_COLOR_ATTACHMENT7: u32 = 36071; +pub const GL_COLOR_ATTACHMENT8: u32 = 36072; +pub const GL_COLOR_ATTACHMENT9: u32 = 36073; +pub const GL_COLOR_ATTACHMENT10: u32 = 36074; +pub const GL_COLOR_ATTACHMENT11: u32 = 36075; +pub const GL_COLOR_ATTACHMENT12: u32 = 36076; +pub const GL_COLOR_ATTACHMENT13: u32 = 36077; +pub const GL_COLOR_ATTACHMENT14: u32 = 36078; +pub const GL_COLOR_ATTACHMENT15: u32 = 36079; +pub const GL_COLOR_ATTACHMENT16: u32 = 36080; +pub const GL_COLOR_ATTACHMENT17: u32 = 36081; +pub const GL_COLOR_ATTACHMENT18: u32 = 36082; +pub const GL_COLOR_ATTACHMENT19: u32 = 36083; +pub const GL_COLOR_ATTACHMENT20: u32 = 36084; +pub const GL_COLOR_ATTACHMENT21: u32 = 36085; +pub const GL_COLOR_ATTACHMENT22: u32 = 36086; +pub const GL_COLOR_ATTACHMENT23: u32 = 36087; +pub const GL_COLOR_ATTACHMENT24: u32 = 36088; +pub const GL_COLOR_ATTACHMENT25: u32 = 36089; +pub const GL_COLOR_ATTACHMENT26: u32 = 36090; +pub const GL_COLOR_ATTACHMENT27: u32 = 36091; +pub const GL_COLOR_ATTACHMENT28: u32 = 36092; +pub const GL_COLOR_ATTACHMENT29: u32 = 36093; +pub const GL_COLOR_ATTACHMENT30: u32 = 36094; +pub const GL_COLOR_ATTACHMENT31: u32 = 36095; +pub const GL_DEPTH_ATTACHMENT: u32 = 36096; +pub const GL_STENCIL_ATTACHMENT: u32 = 36128; +pub const GL_FRAMEBUFFER: u32 = 36160; +pub const GL_RENDERBUFFER: u32 = 36161; +pub const GL_RENDERBUFFER_WIDTH: u32 = 36162; +pub const GL_RENDERBUFFER_HEIGHT: u32 = 36163; +pub const GL_RENDERBUFFER_INTERNAL_FORMAT: u32 = 36164; +pub const GL_STENCIL_INDEX1: u32 = 36166; +pub const GL_STENCIL_INDEX4: u32 = 36167; +pub const GL_STENCIL_INDEX8: u32 = 36168; +pub const GL_STENCIL_INDEX16: u32 = 36169; +pub const GL_RENDERBUFFER_RED_SIZE: u32 = 36176; +pub const GL_RENDERBUFFER_GREEN_SIZE: u32 = 36177; +pub const GL_RENDERBUFFER_BLUE_SIZE: u32 = 36178; +pub const GL_RENDERBUFFER_ALPHA_SIZE: u32 = 36179; +pub const GL_RENDERBUFFER_DEPTH_SIZE: u32 = 36180; +pub const GL_RENDERBUFFER_STENCIL_SIZE: u32 = 36181; +pub const GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: u32 = 36182; +pub const GL_MAX_SAMPLES: u32 = 36183; +pub const GL_FRAMEBUFFER_SRGB: u32 = 36281; +pub const GL_HALF_FLOAT: u32 = 5131; +pub const GL_MAP_READ_BIT: u32 = 1; +pub const GL_MAP_WRITE_BIT: u32 = 2; +pub const GL_MAP_INVALIDATE_RANGE_BIT: u32 = 4; +pub const GL_MAP_INVALIDATE_BUFFER_BIT: u32 = 8; +pub const GL_MAP_FLUSH_EXPLICIT_BIT: u32 = 16; +pub const GL_MAP_UNSYNCHRONIZED_BIT: u32 = 32; +pub const GL_COMPRESSED_RED_RGTC1: u32 = 36283; +pub const GL_COMPRESSED_SIGNED_RED_RGTC1: u32 = 36284; +pub const GL_COMPRESSED_RG_RGTC2: u32 = 36285; +pub const GL_COMPRESSED_SIGNED_RG_RGTC2: u32 = 36286; +pub const GL_RG: u32 = 33319; +pub const GL_RG_INTEGER: u32 = 33320; +pub const GL_R8: u32 = 33321; +pub const GL_R16: u32 = 33322; +pub const GL_RG8: u32 = 33323; +pub const GL_RG16: u32 = 33324; +pub const GL_R16F: u32 = 33325; +pub const GL_R32F: u32 = 33326; +pub const GL_RG16F: u32 = 33327; +pub const GL_RG32F: u32 = 33328; +pub const GL_R8I: u32 = 33329; +pub const GL_R8UI: u32 = 33330; +pub const GL_R16I: u32 = 33331; +pub const GL_R16UI: u32 = 33332; +pub const GL_R32I: u32 = 33333; +pub const GL_R32UI: u32 = 33334; +pub const GL_RG8I: u32 = 33335; +pub const GL_RG8UI: u32 = 33336; +pub const GL_RG16I: u32 = 33337; +pub const GL_RG16UI: u32 = 33338; +pub const GL_RG32I: u32 = 33339; +pub const GL_RG32UI: u32 = 33340; +pub const GL_VERTEX_ARRAY_BINDING: u32 = 34229; +pub const GL_SAMPLER_2D_RECT: u32 = 35683; +pub const GL_SAMPLER_2D_RECT_SHADOW: u32 = 35684; +pub const GL_SAMPLER_BUFFER: u32 = 36290; +pub const GL_INT_SAMPLER_2D_RECT: u32 = 36301; +pub const GL_INT_SAMPLER_BUFFER: u32 = 36304; +pub const GL_UNSIGNED_INT_SAMPLER_2D_RECT: u32 = 36309; +pub const GL_UNSIGNED_INT_SAMPLER_BUFFER: u32 = 36312; +pub const GL_TEXTURE_BUFFER: u32 = 35882; +pub const GL_MAX_TEXTURE_BUFFER_SIZE: u32 = 35883; +pub const GL_TEXTURE_BINDING_BUFFER: u32 = 35884; +pub const GL_TEXTURE_BUFFER_DATA_STORE_BINDING: u32 = 35885; +pub const GL_TEXTURE_RECTANGLE: u32 = 34037; +pub const GL_TEXTURE_BINDING_RECTANGLE: u32 = 34038; +pub const GL_PROXY_TEXTURE_RECTANGLE: u32 = 34039; +pub const GL_MAX_RECTANGLE_TEXTURE_SIZE: u32 = 34040; +pub const GL_R8_SNORM: u32 = 36756; +pub const GL_RG8_SNORM: u32 = 36757; +pub const GL_RGB8_SNORM: u32 = 36758; +pub const GL_RGBA8_SNORM: u32 = 36759; +pub const GL_R16_SNORM: u32 = 36760; +pub const GL_RG16_SNORM: u32 = 36761; +pub const GL_RGB16_SNORM: u32 = 36762; +pub const GL_RGBA16_SNORM: u32 = 36763; +pub const GL_SIGNED_NORMALIZED: u32 = 36764; +pub const GL_PRIMITIVE_RESTART: u32 = 36765; +pub const GL_PRIMITIVE_RESTART_INDEX: u32 = 36766; +pub const GL_COPY_READ_BUFFER: u32 = 36662; +pub const GL_COPY_WRITE_BUFFER: u32 = 36663; +pub const GL_UNIFORM_BUFFER: u32 = 35345; +pub const GL_UNIFORM_BUFFER_BINDING: u32 = 35368; +pub const GL_UNIFORM_BUFFER_START: u32 = 35369; +pub const GL_UNIFORM_BUFFER_SIZE: u32 = 35370; +pub const GL_MAX_VERTEX_UNIFORM_BLOCKS: u32 = 35371; +pub const GL_MAX_GEOMETRY_UNIFORM_BLOCKS: u32 = 35372; +pub const GL_MAX_FRAGMENT_UNIFORM_BLOCKS: u32 = 35373; +pub const GL_MAX_COMBINED_UNIFORM_BLOCKS: u32 = 35374; +pub const GL_MAX_UNIFORM_BUFFER_BINDINGS: u32 = 35375; +pub const GL_MAX_UNIFORM_BLOCK_SIZE: u32 = 35376; +pub const GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: u32 = 35377; +pub const GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS: u32 = 35378; +pub const GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35379; +pub const GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: u32 = 35380; +pub const GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: u32 = 35381; +pub const GL_ACTIVE_UNIFORM_BLOCKS: u32 = 35382; +pub const GL_UNIFORM_TYPE: u32 = 35383; +pub const GL_UNIFORM_SIZE: u32 = 35384; +pub const GL_UNIFORM_NAME_LENGTH: u32 = 35385; +pub const GL_UNIFORM_BLOCK_INDEX: u32 = 35386; +pub const GL_UNIFORM_OFFSET: u32 = 35387; +pub const GL_UNIFORM_ARRAY_STRIDE: u32 = 35388; +pub const GL_UNIFORM_MATRIX_STRIDE: u32 = 35389; +pub const GL_UNIFORM_IS_ROW_MAJOR: u32 = 35390; +pub const GL_UNIFORM_BLOCK_BINDING: u32 = 35391; +pub const GL_UNIFORM_BLOCK_DATA_SIZE: u32 = 35392; +pub const GL_UNIFORM_BLOCK_NAME_LENGTH: u32 = 35393; +pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: u32 = 35394; +pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: u32 = 35395; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: u32 = 35396; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER: u32 = 35397; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: u32 = 35398; +pub const GL_INVALID_INDEX: u32 = 4294967295; +pub const GL_CONTEXT_CORE_PROFILE_BIT: u32 = 1; +pub const GL_CONTEXT_COMPATIBILITY_PROFILE_BIT: u32 = 2; +pub const GL_LINES_ADJACENCY: u32 = 10; +pub const GL_LINE_STRIP_ADJACENCY: u32 = 11; +pub const GL_TRIANGLES_ADJACENCY: u32 = 12; +pub const GL_TRIANGLE_STRIP_ADJACENCY: u32 = 13; +pub const GL_PROGRAM_POINT_SIZE: u32 = 34370; +pub const GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS: u32 = 35881; +pub const GL_FRAMEBUFFER_ATTACHMENT_LAYERED: u32 = 36263; +pub const GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: u32 = 36264; +pub const GL_GEOMETRY_SHADER: u32 = 36313; +pub const GL_GEOMETRY_VERTICES_OUT: u32 = 35094; +pub const GL_GEOMETRY_INPUT_TYPE: u32 = 35095; +pub const GL_GEOMETRY_OUTPUT_TYPE: u32 = 35096; +pub const GL_MAX_GEOMETRY_UNIFORM_COMPONENTS: u32 = 36319; +pub const GL_MAX_GEOMETRY_OUTPUT_VERTICES: u32 = 36320; +pub const GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: u32 = 36321; +pub const GL_MAX_VERTEX_OUTPUT_COMPONENTS: u32 = 37154; +pub const GL_MAX_GEOMETRY_INPUT_COMPONENTS: u32 = 37155; +pub const GL_MAX_GEOMETRY_OUTPUT_COMPONENTS: u32 = 37156; +pub const GL_MAX_FRAGMENT_INPUT_COMPONENTS: u32 = 37157; +pub const GL_CONTEXT_PROFILE_MASK: u32 = 37158; +pub const GL_DEPTH_CLAMP: u32 = 34383; +pub const GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: u32 = 36428; +pub const GL_FIRST_VERTEX_CONVENTION: u32 = 36429; +pub const GL_LAST_VERTEX_CONVENTION: u32 = 36430; +pub const GL_PROVOKING_VERTEX: u32 = 36431; +pub const GL_TEXTURE_CUBE_MAP_SEAMLESS: u32 = 34895; +pub const GL_MAX_SERVER_WAIT_TIMEOUT: u32 = 37137; +pub const GL_OBJECT_TYPE: u32 = 37138; +pub const GL_SYNC_CONDITION: u32 = 37139; +pub const GL_SYNC_STATUS: u32 = 37140; +pub const GL_SYNC_FLAGS: u32 = 37141; +pub const GL_SYNC_FENCE: u32 = 37142; +pub const GL_SYNC_GPU_COMMANDS_COMPLETE: u32 = 37143; +pub const GL_UNSIGNALED: u32 = 37144; +pub const GL_SIGNALED: u32 = 37145; +pub const GL_ALREADY_SIGNALED: u32 = 37146; +pub const GL_TIMEOUT_EXPIRED: u32 = 37147; +pub const GL_CONDITION_SATISFIED: u32 = 37148; +pub const GL_WAIT_FAILED: u32 = 37149; +pub const GL_TIMEOUT_IGNORED: i32 = -1; +pub const GL_SYNC_FLUSH_COMMANDS_BIT: u32 = 1; +pub const GL_SAMPLE_POSITION: u32 = 36432; +pub const GL_SAMPLE_MASK: u32 = 36433; +pub const GL_SAMPLE_MASK_VALUE: u32 = 36434; +pub const GL_MAX_SAMPLE_MASK_WORDS: u32 = 36441; +pub const GL_TEXTURE_2D_MULTISAMPLE: u32 = 37120; +pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE: u32 = 37121; +pub const GL_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37122; +pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37123; +pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE: u32 = 37124; +pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: u32 = 37125; +pub const GL_TEXTURE_SAMPLES: u32 = 37126; +pub const GL_TEXTURE_FIXED_SAMPLE_LOCATIONS: u32 = 37127; +pub const GL_SAMPLER_2D_MULTISAMPLE: u32 = 37128; +pub const GL_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37129; +pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37130; +pub const GL_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37131; +pub const GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37132; +pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37133; +pub const GL_MAX_COLOR_TEXTURE_SAMPLES: u32 = 37134; +pub const GL_MAX_DEPTH_TEXTURE_SAMPLES: u32 = 37135; +pub const GL_MAX_INTEGER_SAMPLES: u32 = 37136; +pub const GL_VERTEX_ATTRIB_ARRAY_DIVISOR: u32 = 35070; +pub const GL_SRC1_COLOR: u32 = 35065; +pub const GL_ONE_MINUS_SRC1_COLOR: u32 = 35066; +pub const GL_ONE_MINUS_SRC1_ALPHA: u32 = 35067; +pub const GL_MAX_DUAL_SOURCE_DRAW_BUFFERS: u32 = 35068; +pub const GL_ANY_SAMPLES_PASSED: u32 = 35887; +pub const GL_SAMPLER_BINDING: u32 = 35097; +pub const GL_RGB10_A2UI: u32 = 36975; +pub const GL_TEXTURE_SWIZZLE_R: u32 = 36418; +pub const GL_TEXTURE_SWIZZLE_G: u32 = 36419; +pub const GL_TEXTURE_SWIZZLE_B: u32 = 36420; +pub const GL_TEXTURE_SWIZZLE_A: u32 = 36421; +pub const GL_TEXTURE_SWIZZLE_RGBA: u32 = 36422; +pub const GL_TIME_ELAPSED: u32 = 35007; +pub const GL_TIMESTAMP: u32 = 36392; +pub const GL_INT_2_10_10_10_REV: u32 = 36255; +pub const GL_SAMPLE_SHADING: u32 = 35894; +pub const GL_MIN_SAMPLE_SHADING_VALUE: u32 = 35895; +pub const GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET: u32 = 36446; +pub const GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET: u32 = 36447; +pub const GL_TEXTURE_CUBE_MAP_ARRAY: u32 = 36873; +pub const GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: u32 = 36874; +pub const GL_PROXY_TEXTURE_CUBE_MAP_ARRAY: u32 = 36875; +pub const GL_SAMPLER_CUBE_MAP_ARRAY: u32 = 36876; +pub const GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: u32 = 36877; +pub const GL_INT_SAMPLER_CUBE_MAP_ARRAY: u32 = 36878; +pub const GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: u32 = 36879; +pub const GL_DRAW_INDIRECT_BUFFER: u32 = 36671; +pub const GL_DRAW_INDIRECT_BUFFER_BINDING: u32 = 36675; +pub const GL_GEOMETRY_SHADER_INVOCATIONS: u32 = 34943; +pub const GL_MAX_GEOMETRY_SHADER_INVOCATIONS: u32 = 36442; +pub const GL_MIN_FRAGMENT_INTERPOLATION_OFFSET: u32 = 36443; +pub const GL_MAX_FRAGMENT_INTERPOLATION_OFFSET: u32 = 36444; +pub const GL_FRAGMENT_INTERPOLATION_OFFSET_BITS: u32 = 36445; +pub const GL_MAX_VERTEX_STREAMS: u32 = 36465; +pub const GL_DOUBLE_VEC2: u32 = 36860; +pub const GL_DOUBLE_VEC3: u32 = 36861; +pub const GL_DOUBLE_VEC4: u32 = 36862; +pub const GL_DOUBLE_MAT2: u32 = 36678; +pub const GL_DOUBLE_MAT3: u32 = 36679; +pub const GL_DOUBLE_MAT4: u32 = 36680; +pub const GL_DOUBLE_MAT2x3: u32 = 36681; +pub const GL_DOUBLE_MAT2x4: u32 = 36682; +pub const GL_DOUBLE_MAT3x2: u32 = 36683; +pub const GL_DOUBLE_MAT3x4: u32 = 36684; +pub const GL_DOUBLE_MAT4x2: u32 = 36685; +pub const GL_DOUBLE_MAT4x3: u32 = 36686; +pub const GL_ACTIVE_SUBROUTINES: u32 = 36325; +pub const GL_ACTIVE_SUBROUTINE_UNIFORMS: u32 = 36326; +pub const GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS: u32 = 36423; +pub const GL_ACTIVE_SUBROUTINE_MAX_LENGTH: u32 = 36424; +pub const GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH: u32 = 36425; +pub const GL_MAX_SUBROUTINES: u32 = 36327; +pub const GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS: u32 = 36328; +pub const GL_NUM_COMPATIBLE_SUBROUTINES: u32 = 36426; +pub const GL_COMPATIBLE_SUBROUTINES: u32 = 36427; +pub const GL_PATCHES: u32 = 14; +pub const GL_PATCH_VERTICES: u32 = 36466; +pub const GL_PATCH_DEFAULT_INNER_LEVEL: u32 = 36467; +pub const GL_PATCH_DEFAULT_OUTER_LEVEL: u32 = 36468; +pub const GL_TESS_CONTROL_OUTPUT_VERTICES: u32 = 36469; +pub const GL_TESS_GEN_MODE: u32 = 36470; +pub const GL_TESS_GEN_SPACING: u32 = 36471; +pub const GL_TESS_GEN_VERTEX_ORDER: u32 = 36472; +pub const GL_TESS_GEN_POINT_MODE: u32 = 36473; +pub const GL_ISOLINES: u32 = 36474; +pub const GL_QUADS: u32 = 7; +pub const GL_FRACTIONAL_ODD: u32 = 36475; +pub const GL_FRACTIONAL_EVEN: u32 = 36476; +pub const GL_MAX_PATCH_VERTICES: u32 = 36477; +pub const GL_MAX_TESS_GEN_LEVEL: u32 = 36478; +pub const GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS: u32 = 36479; +pub const GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS: u32 = 36480; +pub const GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS: u32 = 36481; +pub const GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS: u32 = 36482; +pub const GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS: u32 = 36483; +pub const GL_MAX_TESS_PATCH_COMPONENTS: u32 = 36484; +pub const GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS: u32 = 36485; +pub const GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS: u32 = 36486; +pub const GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS: u32 = 36489; +pub const GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS: u32 = 36490; +pub const GL_MAX_TESS_CONTROL_INPUT_COMPONENTS: u32 = 34924; +pub const GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS: u32 = 34925; +pub const GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS: u32 = 36382; +pub const GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS: u32 = 36383; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER: u32 = 34032; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER: u32 = 34033; +pub const GL_TESS_EVALUATION_SHADER: u32 = 36487; +pub const GL_TESS_CONTROL_SHADER: u32 = 36488; +pub const GL_TRANSFORM_FEEDBACK: u32 = 36386; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED: u32 = 36387; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE: u32 = 36388; +pub const GL_TRANSFORM_FEEDBACK_BINDING: u32 = 36389; +pub const GL_MAX_TRANSFORM_FEEDBACK_BUFFERS: u32 = 36464; +pub const GL_FIXED: u32 = 5132; +pub const GL_IMPLEMENTATION_COLOR_READ_TYPE: u32 = 35738; +pub const GL_IMPLEMENTATION_COLOR_READ_FORMAT: u32 = 35739; +pub const GL_LOW_FLOAT: u32 = 36336; +pub const GL_MEDIUM_FLOAT: u32 = 36337; +pub const GL_HIGH_FLOAT: u32 = 36338; +pub const GL_LOW_INT: u32 = 36339; +pub const GL_MEDIUM_INT: u32 = 36340; +pub const GL_HIGH_INT: u32 = 36341; +pub const GL_SHADER_COMPILER: u32 = 36346; +pub const GL_SHADER_BINARY_FORMATS: u32 = 36344; +pub const GL_NUM_SHADER_BINARY_FORMATS: u32 = 36345; +pub const GL_MAX_VERTEX_UNIFORM_VECTORS: u32 = 36347; +pub const GL_MAX_VARYING_VECTORS: u32 = 36348; +pub const GL_MAX_FRAGMENT_UNIFORM_VECTORS: u32 = 36349; +pub const GL_RGB565: u32 = 36194; +pub const GL_PROGRAM_BINARY_RETRIEVABLE_HINT: u32 = 33367; +pub const GL_PROGRAM_BINARY_LENGTH: u32 = 34625; +pub const GL_NUM_PROGRAM_BINARY_FORMATS: u32 = 34814; +pub const GL_PROGRAM_BINARY_FORMATS: u32 = 34815; +pub const GL_VERTEX_SHADER_BIT: u32 = 1; +pub const GL_FRAGMENT_SHADER_BIT: u32 = 2; +pub const GL_GEOMETRY_SHADER_BIT: u32 = 4; +pub const GL_TESS_CONTROL_SHADER_BIT: u32 = 8; +pub const GL_TESS_EVALUATION_SHADER_BIT: u32 = 16; +pub const GL_ALL_SHADER_BITS: u32 = 4294967295; +pub const GL_PROGRAM_SEPARABLE: u32 = 33368; +pub const GL_ACTIVE_PROGRAM: u32 = 33369; +pub const GL_PROGRAM_PIPELINE_BINDING: u32 = 33370; +pub const GL_MAX_VIEWPORTS: u32 = 33371; +pub const GL_VIEWPORT_SUBPIXEL_BITS: u32 = 33372; +pub const GL_VIEWPORT_BOUNDS_RANGE: u32 = 33373; +pub const GL_LAYER_PROVOKING_VERTEX: u32 = 33374; +pub const GL_VIEWPORT_INDEX_PROVOKING_VERTEX: u32 = 33375; +pub const GL_UNDEFINED_VERTEX: u32 = 33376; +pub const GL_COPY_READ_BUFFER_BINDING: u32 = 36662; +pub const GL_COPY_WRITE_BUFFER_BINDING: u32 = 36663; +pub const GL_TRANSFORM_FEEDBACK_ACTIVE: u32 = 36388; +pub const GL_TRANSFORM_FEEDBACK_PAUSED: u32 = 36387; +pub const GL_UNPACK_COMPRESSED_BLOCK_WIDTH: u32 = 37159; +pub const GL_UNPACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37160; +pub const GL_UNPACK_COMPRESSED_BLOCK_DEPTH: u32 = 37161; +pub const GL_UNPACK_COMPRESSED_BLOCK_SIZE: u32 = 37162; +pub const GL_PACK_COMPRESSED_BLOCK_WIDTH: u32 = 37163; +pub const GL_PACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37164; +pub const GL_PACK_COMPRESSED_BLOCK_DEPTH: u32 = 37165; +pub const GL_PACK_COMPRESSED_BLOCK_SIZE: u32 = 37166; +pub const GL_NUM_SAMPLE_COUNTS: u32 = 37760; +pub const GL_MIN_MAP_BUFFER_ALIGNMENT: u32 = 37052; +pub const GL_ATOMIC_COUNTER_BUFFER: u32 = 37568; +pub const GL_ATOMIC_COUNTER_BUFFER_BINDING: u32 = 37569; +pub const GL_ATOMIC_COUNTER_BUFFER_START: u32 = 37570; +pub const GL_ATOMIC_COUNTER_BUFFER_SIZE: u32 = 37571; +pub const GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE: u32 = 37572; +pub const GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS: u32 = 37573; +pub const GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES: u32 = 37574; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER: u32 = 37575; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER: u32 = 37576; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER: u32 = 37577; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER: u32 = 37578; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER: u32 = 37579; +pub const GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS: u32 = 37580; +pub const GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS: u32 = 37581; +pub const GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS: u32 = 37582; +pub const GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS: u32 = 37583; +pub const GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS: u32 = 37584; +pub const GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS: u32 = 37585; +pub const GL_MAX_VERTEX_ATOMIC_COUNTERS: u32 = 37586; +pub const GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS: u32 = 37587; +pub const GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS: u32 = 37588; +pub const GL_MAX_GEOMETRY_ATOMIC_COUNTERS: u32 = 37589; +pub const GL_MAX_FRAGMENT_ATOMIC_COUNTERS: u32 = 37590; +pub const GL_MAX_COMBINED_ATOMIC_COUNTERS: u32 = 37591; +pub const GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE: u32 = 37592; +pub const GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS: u32 = 37596; +pub const GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: u32 = 37593; +pub const GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX: u32 = 37594; +pub const GL_UNSIGNED_INT_ATOMIC_COUNTER: u32 = 37595; +pub const GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT: u32 = 1; +pub const GL_ELEMENT_ARRAY_BARRIER_BIT: u32 = 2; +pub const GL_UNIFORM_BARRIER_BIT: u32 = 4; +pub const GL_TEXTURE_FETCH_BARRIER_BIT: u32 = 8; +pub const GL_SHADER_IMAGE_ACCESS_BARRIER_BIT: u32 = 32; +pub const GL_COMMAND_BARRIER_BIT: u32 = 64; +pub const GL_PIXEL_BUFFER_BARRIER_BIT: u32 = 128; +pub const GL_TEXTURE_UPDATE_BARRIER_BIT: u32 = 256; +pub const GL_BUFFER_UPDATE_BARRIER_BIT: u32 = 512; +pub const GL_FRAMEBUFFER_BARRIER_BIT: u32 = 1024; +pub const GL_TRANSFORM_FEEDBACK_BARRIER_BIT: u32 = 2048; +pub const GL_ATOMIC_COUNTER_BARRIER_BIT: u32 = 4096; +pub const GL_ALL_BARRIER_BITS: u32 = 4294967295; +pub const GL_MAX_IMAGE_UNITS: u32 = 36664; +pub const GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS: u32 = 36665; +pub const GL_IMAGE_BINDING_NAME: u32 = 36666; +pub const GL_IMAGE_BINDING_LEVEL: u32 = 36667; +pub const GL_IMAGE_BINDING_LAYERED: u32 = 36668; +pub const GL_IMAGE_BINDING_LAYER: u32 = 36669; +pub const GL_IMAGE_BINDING_ACCESS: u32 = 36670; +pub const GL_IMAGE_1D: u32 = 36940; +pub const GL_IMAGE_2D: u32 = 36941; +pub const GL_IMAGE_3D: u32 = 36942; +pub const GL_IMAGE_2D_RECT: u32 = 36943; +pub const GL_IMAGE_CUBE: u32 = 36944; +pub const GL_IMAGE_BUFFER: u32 = 36945; +pub const GL_IMAGE_1D_ARRAY: u32 = 36946; +pub const GL_IMAGE_2D_ARRAY: u32 = 36947; +pub const GL_IMAGE_CUBE_MAP_ARRAY: u32 = 36948; +pub const GL_IMAGE_2D_MULTISAMPLE: u32 = 36949; +pub const GL_IMAGE_2D_MULTISAMPLE_ARRAY: u32 = 36950; +pub const GL_INT_IMAGE_1D: u32 = 36951; +pub const GL_INT_IMAGE_2D: u32 = 36952; +pub const GL_INT_IMAGE_3D: u32 = 36953; +pub const GL_INT_IMAGE_2D_RECT: u32 = 36954; +pub const GL_INT_IMAGE_CUBE: u32 = 36955; +pub const GL_INT_IMAGE_BUFFER: u32 = 36956; +pub const GL_INT_IMAGE_1D_ARRAY: u32 = 36957; +pub const GL_INT_IMAGE_2D_ARRAY: u32 = 36958; +pub const GL_INT_IMAGE_CUBE_MAP_ARRAY: u32 = 36959; +pub const GL_INT_IMAGE_2D_MULTISAMPLE: u32 = 36960; +pub const GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY: u32 = 36961; +pub const GL_UNSIGNED_INT_IMAGE_1D: u32 = 36962; +pub const GL_UNSIGNED_INT_IMAGE_2D: u32 = 36963; +pub const GL_UNSIGNED_INT_IMAGE_3D: u32 = 36964; +pub const GL_UNSIGNED_INT_IMAGE_2D_RECT: u32 = 36965; +pub const GL_UNSIGNED_INT_IMAGE_CUBE: u32 = 36966; +pub const GL_UNSIGNED_INT_IMAGE_BUFFER: u32 = 36967; +pub const GL_UNSIGNED_INT_IMAGE_1D_ARRAY: u32 = 36968; +pub const GL_UNSIGNED_INT_IMAGE_2D_ARRAY: u32 = 36969; +pub const GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY: u32 = 36970; +pub const GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE: u32 = 36971; +pub const GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY: u32 = 36972; +pub const GL_MAX_IMAGE_SAMPLES: u32 = 36973; +pub const GL_IMAGE_BINDING_FORMAT: u32 = 36974; +pub const GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: u32 = 37063; +pub const GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE: u32 = 37064; +pub const GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS: u32 = 37065; +pub const GL_MAX_VERTEX_IMAGE_UNIFORMS: u32 = 37066; +pub const GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS: u32 = 37067; +pub const GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS: u32 = 37068; +pub const GL_MAX_GEOMETRY_IMAGE_UNIFORMS: u32 = 37069; +pub const GL_MAX_FRAGMENT_IMAGE_UNIFORMS: u32 = 37070; +pub const GL_MAX_COMBINED_IMAGE_UNIFORMS: u32 = 37071; +pub const GL_COMPRESSED_RGBA_BPTC_UNORM: u32 = 36492; +pub const GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM: u32 = 36493; +pub const GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT: u32 = 36494; +pub const GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT: u32 = 36495; +pub const GL_TEXTURE_IMMUTABLE_FORMAT: u32 = 37167; +pub const GL_NUM_SHADING_LANGUAGE_VERSIONS: u32 = 33513; +pub const GL_VERTEX_ATTRIB_ARRAY_LONG: u32 = 34638; +pub const GL_COMPRESSED_RGB8_ETC2: u32 = 37492; +pub const GL_COMPRESSED_SRGB8_ETC2: u32 = 37493; +pub const GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37494; +pub const GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37495; +pub const GL_COMPRESSED_RGBA8_ETC2_EAC: u32 = 37496; +pub const GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: u32 = 37497; +pub const GL_COMPRESSED_R11_EAC: u32 = 37488; +pub const GL_COMPRESSED_SIGNED_R11_EAC: u32 = 37489; +pub const GL_COMPRESSED_RG11_EAC: u32 = 37490; +pub const GL_COMPRESSED_SIGNED_RG11_EAC: u32 = 37491; +pub const GL_PRIMITIVE_RESTART_FIXED_INDEX: u32 = 36201; +pub const GL_ANY_SAMPLES_PASSED_CONSERVATIVE: u32 = 36202; +pub const GL_MAX_ELEMENT_INDEX: u32 = 36203; +pub const GL_COMPUTE_SHADER: u32 = 37305; +pub const GL_MAX_COMPUTE_UNIFORM_BLOCKS: u32 = 37307; +pub const GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS: u32 = 37308; +pub const GL_MAX_COMPUTE_IMAGE_UNIFORMS: u32 = 37309; +pub const GL_MAX_COMPUTE_SHARED_MEMORY_SIZE: u32 = 33378; +pub const GL_MAX_COMPUTE_UNIFORM_COMPONENTS: u32 = 33379; +pub const GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS: u32 = 33380; +pub const GL_MAX_COMPUTE_ATOMIC_COUNTERS: u32 = 33381; +pub const GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS: u32 = 33382; +pub const GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS: u32 = 37099; +pub const GL_MAX_COMPUTE_WORK_GROUP_COUNT: u32 = 37310; +pub const GL_MAX_COMPUTE_WORK_GROUP_SIZE: u32 = 37311; +pub const GL_COMPUTE_WORK_GROUP_SIZE: u32 = 33383; +pub const GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER: u32 = 37100; +pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER: u32 = 37101; +pub const GL_DISPATCH_INDIRECT_BUFFER: u32 = 37102; +pub const GL_DISPATCH_INDIRECT_BUFFER_BINDING: u32 = 37103; +pub const GL_COMPUTE_SHADER_BIT: u32 = 32; +pub const GL_DEBUG_OUTPUT_SYNCHRONOUS: u32 = 33346; +pub const GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH: u32 = 33347; +pub const GL_DEBUG_CALLBACK_FUNCTION: u32 = 33348; +pub const GL_DEBUG_CALLBACK_USER_PARAM: u32 = 33349; +pub const GL_DEBUG_SOURCE_API: u32 = 33350; +pub const GL_DEBUG_SOURCE_WINDOW_SYSTEM: u32 = 33351; +pub const GL_DEBUG_SOURCE_SHADER_COMPILER: u32 = 33352; +pub const GL_DEBUG_SOURCE_THIRD_PARTY: u32 = 33353; +pub const GL_DEBUG_SOURCE_APPLICATION: u32 = 33354; +pub const GL_DEBUG_SOURCE_OTHER: u32 = 33355; +pub const GL_DEBUG_TYPE_ERROR: u32 = 33356; +pub const GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: u32 = 33357; +pub const GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: u32 = 33358; +pub const GL_DEBUG_TYPE_PORTABILITY: u32 = 33359; +pub const GL_DEBUG_TYPE_PERFORMANCE: u32 = 33360; +pub const GL_DEBUG_TYPE_OTHER: u32 = 33361; +pub const GL_MAX_DEBUG_MESSAGE_LENGTH: u32 = 37187; +pub const GL_MAX_DEBUG_LOGGED_MESSAGES: u32 = 37188; +pub const GL_DEBUG_LOGGED_MESSAGES: u32 = 37189; +pub const GL_DEBUG_SEVERITY_HIGH: u32 = 37190; +pub const GL_DEBUG_SEVERITY_MEDIUM: u32 = 37191; +pub const GL_DEBUG_SEVERITY_LOW: u32 = 37192; +pub const GL_DEBUG_TYPE_MARKER: u32 = 33384; +pub const GL_DEBUG_TYPE_PUSH_GROUP: u32 = 33385; +pub const GL_DEBUG_TYPE_POP_GROUP: u32 = 33386; +pub const GL_DEBUG_SEVERITY_NOTIFICATION: u32 = 33387; +pub const GL_MAX_DEBUG_GROUP_STACK_DEPTH: u32 = 33388; +pub const GL_DEBUG_GROUP_STACK_DEPTH: u32 = 33389; +pub const GL_BUFFER: u32 = 33504; +pub const GL_SHADER: u32 = 33505; +pub const GL_PROGRAM: u32 = 33506; +pub const GL_VERTEX_ARRAY: u32 = 32884; +pub const GL_QUERY: u32 = 33507; +pub const GL_PROGRAM_PIPELINE: u32 = 33508; +pub const GL_SAMPLER: u32 = 33510; +pub const GL_MAX_LABEL_LENGTH: u32 = 33512; +pub const GL_DEBUG_OUTPUT: u32 = 37600; +pub const GL_CONTEXT_FLAG_DEBUG_BIT: u32 = 2; +pub const GL_MAX_UNIFORM_LOCATIONS: u32 = 33390; +pub const GL_FRAMEBUFFER_DEFAULT_WIDTH: u32 = 37648; +pub const GL_FRAMEBUFFER_DEFAULT_HEIGHT: u32 = 37649; +pub const GL_FRAMEBUFFER_DEFAULT_LAYERS: u32 = 37650; +pub const GL_FRAMEBUFFER_DEFAULT_SAMPLES: u32 = 37651; +pub const GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS: u32 = 37652; +pub const GL_MAX_FRAMEBUFFER_WIDTH: u32 = 37653; +pub const GL_MAX_FRAMEBUFFER_HEIGHT: u32 = 37654; +pub const GL_MAX_FRAMEBUFFER_LAYERS: u32 = 37655; +pub const GL_MAX_FRAMEBUFFER_SAMPLES: u32 = 37656; +pub const GL_INTERNALFORMAT_SUPPORTED: u32 = 33391; +pub const GL_INTERNALFORMAT_PREFERRED: u32 = 33392; +pub const GL_INTERNALFORMAT_RED_SIZE: u32 = 33393; +pub const GL_INTERNALFORMAT_GREEN_SIZE: u32 = 33394; +pub const GL_INTERNALFORMAT_BLUE_SIZE: u32 = 33395; +pub const GL_INTERNALFORMAT_ALPHA_SIZE: u32 = 33396; +pub const GL_INTERNALFORMAT_DEPTH_SIZE: u32 = 33397; +pub const GL_INTERNALFORMAT_STENCIL_SIZE: u32 = 33398; +pub const GL_INTERNALFORMAT_SHARED_SIZE: u32 = 33399; +pub const GL_INTERNALFORMAT_RED_TYPE: u32 = 33400; +pub const GL_INTERNALFORMAT_GREEN_TYPE: u32 = 33401; +pub const GL_INTERNALFORMAT_BLUE_TYPE: u32 = 33402; +pub const GL_INTERNALFORMAT_ALPHA_TYPE: u32 = 33403; +pub const GL_INTERNALFORMAT_DEPTH_TYPE: u32 = 33404; +pub const GL_INTERNALFORMAT_STENCIL_TYPE: u32 = 33405; +pub const GL_MAX_WIDTH: u32 = 33406; +pub const GL_MAX_HEIGHT: u32 = 33407; +pub const GL_MAX_DEPTH: u32 = 33408; +pub const GL_MAX_LAYERS: u32 = 33409; +pub const GL_MAX_COMBINED_DIMENSIONS: u32 = 33410; +pub const GL_COLOR_COMPONENTS: u32 = 33411; +pub const GL_DEPTH_COMPONENTS: u32 = 33412; +pub const GL_STENCIL_COMPONENTS: u32 = 33413; +pub const GL_COLOR_RENDERABLE: u32 = 33414; +pub const GL_DEPTH_RENDERABLE: u32 = 33415; +pub const GL_STENCIL_RENDERABLE: u32 = 33416; +pub const GL_FRAMEBUFFER_RENDERABLE: u32 = 33417; +pub const GL_FRAMEBUFFER_RENDERABLE_LAYERED: u32 = 33418; +pub const GL_FRAMEBUFFER_BLEND: u32 = 33419; +pub const GL_READ_PIXELS: u32 = 33420; +pub const GL_READ_PIXELS_FORMAT: u32 = 33421; +pub const GL_READ_PIXELS_TYPE: u32 = 33422; +pub const GL_TEXTURE_IMAGE_FORMAT: u32 = 33423; +pub const GL_TEXTURE_IMAGE_TYPE: u32 = 33424; +pub const GL_GET_TEXTURE_IMAGE_FORMAT: u32 = 33425; +pub const GL_GET_TEXTURE_IMAGE_TYPE: u32 = 33426; +pub const GL_MIPMAP: u32 = 33427; +pub const GL_MANUAL_GENERATE_MIPMAP: u32 = 33428; +pub const GL_AUTO_GENERATE_MIPMAP: u32 = 33429; +pub const GL_COLOR_ENCODING: u32 = 33430; +pub const GL_SRGB_READ: u32 = 33431; +pub const GL_SRGB_WRITE: u32 = 33432; +pub const GL_FILTER: u32 = 33434; +pub const GL_VERTEX_TEXTURE: u32 = 33435; +pub const GL_TESS_CONTROL_TEXTURE: u32 = 33436; +pub const GL_TESS_EVALUATION_TEXTURE: u32 = 33437; +pub const GL_GEOMETRY_TEXTURE: u32 = 33438; +pub const GL_FRAGMENT_TEXTURE: u32 = 33439; +pub const GL_COMPUTE_TEXTURE: u32 = 33440; +pub const GL_TEXTURE_SHADOW: u32 = 33441; +pub const GL_TEXTURE_GATHER: u32 = 33442; +pub const GL_TEXTURE_GATHER_SHADOW: u32 = 33443; +pub const GL_SHADER_IMAGE_LOAD: u32 = 33444; +pub const GL_SHADER_IMAGE_STORE: u32 = 33445; +pub const GL_SHADER_IMAGE_ATOMIC: u32 = 33446; +pub const GL_IMAGE_TEXEL_SIZE: u32 = 33447; +pub const GL_IMAGE_COMPATIBILITY_CLASS: u32 = 33448; +pub const GL_IMAGE_PIXEL_FORMAT: u32 = 33449; +pub const GL_IMAGE_PIXEL_TYPE: u32 = 33450; +pub const GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: u32 = 33452; +pub const GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: u32 = 33453; +pub const GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: u32 = 33454; +pub const GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: u32 = 33455; +pub const GL_TEXTURE_COMPRESSED_BLOCK_WIDTH: u32 = 33457; +pub const GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT: u32 = 33458; +pub const GL_TEXTURE_COMPRESSED_BLOCK_SIZE: u32 = 33459; +pub const GL_CLEAR_BUFFER: u32 = 33460; +pub const GL_TEXTURE_VIEW: u32 = 33461; +pub const GL_VIEW_COMPATIBILITY_CLASS: u32 = 33462; +pub const GL_FULL_SUPPORT: u32 = 33463; +pub const GL_CAVEAT_SUPPORT: u32 = 33464; +pub const GL_IMAGE_CLASS_4_X_32: u32 = 33465; +pub const GL_IMAGE_CLASS_2_X_32: u32 = 33466; +pub const GL_IMAGE_CLASS_1_X_32: u32 = 33467; +pub const GL_IMAGE_CLASS_4_X_16: u32 = 33468; +pub const GL_IMAGE_CLASS_2_X_16: u32 = 33469; +pub const GL_IMAGE_CLASS_1_X_16: u32 = 33470; +pub const GL_IMAGE_CLASS_4_X_8: u32 = 33471; +pub const GL_IMAGE_CLASS_2_X_8: u32 = 33472; +pub const GL_IMAGE_CLASS_1_X_8: u32 = 33473; +pub const GL_IMAGE_CLASS_11_11_10: u32 = 33474; +pub const GL_IMAGE_CLASS_10_10_10_2: u32 = 33475; +pub const GL_VIEW_CLASS_128_BITS: u32 = 33476; +pub const GL_VIEW_CLASS_96_BITS: u32 = 33477; +pub const GL_VIEW_CLASS_64_BITS: u32 = 33478; +pub const GL_VIEW_CLASS_48_BITS: u32 = 33479; +pub const GL_VIEW_CLASS_32_BITS: u32 = 33480; +pub const GL_VIEW_CLASS_24_BITS: u32 = 33481; +pub const GL_VIEW_CLASS_16_BITS: u32 = 33482; +pub const GL_VIEW_CLASS_8_BITS: u32 = 33483; +pub const GL_VIEW_CLASS_S3TC_DXT1_RGB: u32 = 33484; +pub const GL_VIEW_CLASS_S3TC_DXT1_RGBA: u32 = 33485; +pub const GL_VIEW_CLASS_S3TC_DXT3_RGBA: u32 = 33486; +pub const GL_VIEW_CLASS_S3TC_DXT5_RGBA: u32 = 33487; +pub const GL_VIEW_CLASS_RGTC1_RED: u32 = 33488; +pub const GL_VIEW_CLASS_RGTC2_RG: u32 = 33489; +pub const GL_VIEW_CLASS_BPTC_UNORM: u32 = 33490; +pub const GL_VIEW_CLASS_BPTC_FLOAT: u32 = 33491; +pub const GL_UNIFORM: u32 = 37601; +pub const GL_UNIFORM_BLOCK: u32 = 37602; +pub const GL_PROGRAM_INPUT: u32 = 37603; +pub const GL_PROGRAM_OUTPUT: u32 = 37604; +pub const GL_BUFFER_VARIABLE: u32 = 37605; +pub const GL_SHADER_STORAGE_BLOCK: u32 = 37606; +pub const GL_VERTEX_SUBROUTINE: u32 = 37608; +pub const GL_TESS_CONTROL_SUBROUTINE: u32 = 37609; +pub const GL_TESS_EVALUATION_SUBROUTINE: u32 = 37610; +pub const GL_GEOMETRY_SUBROUTINE: u32 = 37611; +pub const GL_FRAGMENT_SUBROUTINE: u32 = 37612; +pub const GL_COMPUTE_SUBROUTINE: u32 = 37613; +pub const GL_VERTEX_SUBROUTINE_UNIFORM: u32 = 37614; +pub const GL_TESS_CONTROL_SUBROUTINE_UNIFORM: u32 = 37615; +pub const GL_TESS_EVALUATION_SUBROUTINE_UNIFORM: u32 = 37616; +pub const GL_GEOMETRY_SUBROUTINE_UNIFORM: u32 = 37617; +pub const GL_FRAGMENT_SUBROUTINE_UNIFORM: u32 = 37618; +pub const GL_COMPUTE_SUBROUTINE_UNIFORM: u32 = 37619; +pub const GL_TRANSFORM_FEEDBACK_VARYING: u32 = 37620; +pub const GL_ACTIVE_RESOURCES: u32 = 37621; +pub const GL_MAX_NAME_LENGTH: u32 = 37622; +pub const GL_MAX_NUM_ACTIVE_VARIABLES: u32 = 37623; +pub const GL_MAX_NUM_COMPATIBLE_SUBROUTINES: u32 = 37624; +pub const GL_NAME_LENGTH: u32 = 37625; +pub const GL_TYPE: u32 = 37626; +pub const GL_ARRAY_SIZE: u32 = 37627; +pub const GL_OFFSET: u32 = 37628; +pub const GL_BLOCK_INDEX: u32 = 37629; +pub const GL_ARRAY_STRIDE: u32 = 37630; +pub const GL_MATRIX_STRIDE: u32 = 37631; +pub const GL_IS_ROW_MAJOR: u32 = 37632; +pub const GL_ATOMIC_COUNTER_BUFFER_INDEX: u32 = 37633; +pub const GL_BUFFER_BINDING: u32 = 37634; +pub const GL_BUFFER_DATA_SIZE: u32 = 37635; +pub const GL_NUM_ACTIVE_VARIABLES: u32 = 37636; +pub const GL_ACTIVE_VARIABLES: u32 = 37637; +pub const GL_REFERENCED_BY_VERTEX_SHADER: u32 = 37638; +pub const GL_REFERENCED_BY_TESS_CONTROL_SHADER: u32 = 37639; +pub const GL_REFERENCED_BY_TESS_EVALUATION_SHADER: u32 = 37640; +pub const GL_REFERENCED_BY_GEOMETRY_SHADER: u32 = 37641; +pub const GL_REFERENCED_BY_FRAGMENT_SHADER: u32 = 37642; +pub const GL_REFERENCED_BY_COMPUTE_SHADER: u32 = 37643; +pub const GL_TOP_LEVEL_ARRAY_SIZE: u32 = 37644; +pub const GL_TOP_LEVEL_ARRAY_STRIDE: u32 = 37645; +pub const GL_LOCATION: u32 = 37646; +pub const GL_LOCATION_INDEX: u32 = 37647; +pub const GL_IS_PER_PATCH: u32 = 37607; +pub const GL_SHADER_STORAGE_BUFFER: u32 = 37074; +pub const GL_SHADER_STORAGE_BUFFER_BINDING: u32 = 37075; +pub const GL_SHADER_STORAGE_BUFFER_START: u32 = 37076; +pub const GL_SHADER_STORAGE_BUFFER_SIZE: u32 = 37077; +pub const GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: u32 = 37078; +pub const GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS: u32 = 37079; +pub const GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS: u32 = 37080; +pub const GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS: u32 = 37081; +pub const GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS: u32 = 37082; +pub const GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS: u32 = 37083; +pub const GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS: u32 = 37084; +pub const GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS: u32 = 37085; +pub const GL_MAX_SHADER_STORAGE_BLOCK_SIZE: u32 = 37086; +pub const GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT: u32 = 37087; +pub const GL_SHADER_STORAGE_BARRIER_BIT: u32 = 8192; +pub const GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: u32 = 36665; +pub const GL_DEPTH_STENCIL_TEXTURE_MODE: u32 = 37098; +pub const GL_TEXTURE_BUFFER_OFFSET: u32 = 37277; +pub const GL_TEXTURE_BUFFER_SIZE: u32 = 37278; +pub const GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT: u32 = 37279; +pub const GL_TEXTURE_VIEW_MIN_LEVEL: u32 = 33499; +pub const GL_TEXTURE_VIEW_NUM_LEVELS: u32 = 33500; +pub const GL_TEXTURE_VIEW_MIN_LAYER: u32 = 33501; +pub const GL_TEXTURE_VIEW_NUM_LAYERS: u32 = 33502; +pub const GL_TEXTURE_IMMUTABLE_LEVELS: u32 = 33503; +pub const GL_VERTEX_ATTRIB_BINDING: u32 = 33492; +pub const GL_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33493; +pub const GL_VERTEX_BINDING_DIVISOR: u32 = 33494; +pub const GL_VERTEX_BINDING_OFFSET: u32 = 33495; +pub const GL_VERTEX_BINDING_STRIDE: u32 = 33496; +pub const GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33497; +pub const GL_MAX_VERTEX_ATTRIB_BINDINGS: u32 = 33498; +pub const GL_VERTEX_BINDING_BUFFER: u32 = 36687; +pub const GL_DISPLAY_LIST: u32 = 33511; +pub const GL_STACK_UNDERFLOW: u32 = 1284; +pub const GL_STACK_OVERFLOW: u32 = 1283; +pub const GL_MAX_VERTEX_ATTRIB_STRIDE: u32 = 33509; +pub const GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED: u32 = 33313; +pub const GL_TEXTURE_BUFFER_BINDING: u32 = 35882; +pub const GL_MAP_PERSISTENT_BIT: u32 = 64; +pub const GL_MAP_COHERENT_BIT: u32 = 128; +pub const GL_DYNAMIC_STORAGE_BIT: u32 = 256; +pub const GL_CLIENT_STORAGE_BIT: u32 = 512; +pub const GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT: u32 = 16384; +pub const GL_BUFFER_IMMUTABLE_STORAGE: u32 = 33311; +pub const GL_BUFFER_STORAGE_FLAGS: u32 = 33312; +pub const GL_CLEAR_TEXTURE: u32 = 37733; +pub const GL_LOCATION_COMPONENT: u32 = 37706; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_INDEX: u32 = 37707; +pub const GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE: u32 = 37708; +pub const GL_QUERY_BUFFER: u32 = 37266; +pub const GL_QUERY_BUFFER_BARRIER_BIT: u32 = 32768; +pub const GL_QUERY_BUFFER_BINDING: u32 = 37267; +pub const GL_QUERY_RESULT_NO_WAIT: u32 = 37268; +pub const GL_MIRROR_CLAMP_TO_EDGE: u32 = 34627; +pub const GL_CONTEXT_LOST: u32 = 1287; +pub const GL_NEGATIVE_ONE_TO_ONE: u32 = 37726; +pub const GL_ZERO_TO_ONE: u32 = 37727; +pub const GL_CLIP_ORIGIN: u32 = 37724; +pub const GL_CLIP_DEPTH_MODE: u32 = 37725; +pub const GL_QUERY_WAIT_INVERTED: u32 = 36375; +pub const GL_QUERY_NO_WAIT_INVERTED: u32 = 36376; +pub const GL_QUERY_BY_REGION_WAIT_INVERTED: u32 = 36377; +pub const GL_QUERY_BY_REGION_NO_WAIT_INVERTED: u32 = 36378; +pub const GL_MAX_CULL_DISTANCES: u32 = 33529; +pub const GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES: u32 = 33530; +pub const GL_TEXTURE_TARGET: u32 = 4102; +pub const GL_QUERY_TARGET: u32 = 33514; +pub const GL_GUILTY_CONTEXT_RESET: u32 = 33363; +pub const GL_INNOCENT_CONTEXT_RESET: u32 = 33364; +pub const GL_UNKNOWN_CONTEXT_RESET: u32 = 33365; +pub const GL_RESET_NOTIFICATION_STRATEGY: u32 = 33366; +pub const GL_LOSE_CONTEXT_ON_RESET: u32 = 33362; +pub const GL_NO_RESET_NOTIFICATION: u32 = 33377; +pub const GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT: u32 = 4; +pub const GL_COLOR_TABLE: u32 = 32976; +pub const GL_POST_CONVOLUTION_COLOR_TABLE: u32 = 32977; +pub const GL_POST_COLOR_MATRIX_COLOR_TABLE: u32 = 32978; +pub const GL_PROXY_COLOR_TABLE: u32 = 32979; +pub const GL_PROXY_POST_CONVOLUTION_COLOR_TABLE: u32 = 32980; +pub const GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE: u32 = 32981; +pub const GL_CONVOLUTION_1D: u32 = 32784; +pub const GL_CONVOLUTION_2D: u32 = 32785; +pub const GL_SEPARABLE_2D: u32 = 32786; +pub const GL_HISTOGRAM: u32 = 32804; +pub const GL_PROXY_HISTOGRAM: u32 = 32805; +pub const GL_MINMAX: u32 = 32814; +pub const GL_CONTEXT_RELEASE_BEHAVIOR: u32 = 33531; +pub const GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH: u32 = 33532; +pub const GL_SHADER_BINARY_FORMAT_SPIR_V: u32 = 38225; +pub const GL_SPIR_V_BINARY: u32 = 38226; +pub const GL_PARAMETER_BUFFER: u32 = 33006; +pub const GL_PARAMETER_BUFFER_BINDING: u32 = 33007; +pub const GL_CONTEXT_FLAG_NO_ERROR_BIT: u32 = 8; +pub const GL_VERTICES_SUBMITTED: u32 = 33518; +pub const GL_PRIMITIVES_SUBMITTED: u32 = 33519; +pub const GL_VERTEX_SHADER_INVOCATIONS: u32 = 33520; +pub const GL_TESS_CONTROL_SHADER_PATCHES: u32 = 33521; +pub const GL_TESS_EVALUATION_SHADER_INVOCATIONS: u32 = 33522; +pub const GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED: u32 = 33523; +pub const GL_FRAGMENT_SHADER_INVOCATIONS: u32 = 33524; +pub const GL_COMPUTE_SHADER_INVOCATIONS: u32 = 33525; +pub const GL_CLIPPING_INPUT_PRIMITIVES: u32 = 33526; +pub const GL_CLIPPING_OUTPUT_PRIMITIVES: u32 = 33527; +pub const GL_POLYGON_OFFSET_CLAMP: u32 = 36379; +pub const GL_SPIR_V_EXTENSIONS: u32 = 38227; +pub const GL_NUM_SPIR_V_EXTENSIONS: u32 = 38228; +pub const GL_TEXTURE_MAX_ANISOTROPY: u32 = 34046; +pub const GL_MAX_TEXTURE_MAX_ANISOTROPY: u32 = 34047; +pub const GL_TRANSFORM_FEEDBACK_OVERFLOW: u32 = 33516; +pub const GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW: u32 = 33517; +pub const GL_VERSION_1_0: u32 = 1; +pub const GL_VERSION_1_1: u32 = 1; +pub const GL_VERSION_1_2: u32 = 1; +pub const GL_VERSION_1_3: u32 = 1; +pub const GL_VERSION_1_4: u32 = 1; +pub const GL_VERSION_1_5: u32 = 1; +pub const GL_VERSION_2_0: u32 = 1; +pub const GL_VERSION_2_1: u32 = 1; +pub const GL_VERSION_3_0: u32 = 1; +pub const GL_VERSION_3_1: u32 = 1; +pub const GL_VERSION_3_2: u32 = 1; +pub const GL_VERSION_3_3: u32 = 1; +pub const GL_VERSION_4_0: u32 = 1; +pub const GL_VERSION_4_1: u32 = 1; +pub const GL_VERSION_4_2: u32 = 1; +pub const GL_VERSION_4_3: u32 = 1; +pub const GL_VERSION_4_4: u32 = 1; +pub const GL_VERSION_4_5: u32 = 1; +pub const GL_VERSION_4_6: u32 = 1; +pub const GLFW_VERSION_MAJOR: u32 = 3; +pub const GLFW_VERSION_MINOR: u32 = 4; +pub const GLFW_VERSION_REVISION: u32 = 0; +pub const GLFW_TRUE: u32 = 1; +pub const GLFW_FALSE: u32 = 0; +pub const GLFW_RELEASE: u32 = 0; +pub const GLFW_PRESS: u32 = 1; +pub const GLFW_REPEAT: u32 = 2; +pub const GLFW_HAT_CENTERED: u32 = 0; +pub const GLFW_HAT_UP: u32 = 1; +pub const GLFW_HAT_RIGHT: u32 = 2; +pub const GLFW_HAT_DOWN: u32 = 4; +pub const GLFW_HAT_LEFT: u32 = 8; +pub const GLFW_HAT_RIGHT_UP: u32 = 3; +pub const GLFW_HAT_RIGHT_DOWN: u32 = 6; +pub const GLFW_HAT_LEFT_UP: u32 = 9; +pub const GLFW_HAT_LEFT_DOWN: u32 = 12; +pub const GLFW_KEY_UNKNOWN: i32 = -1; +pub const GLFW_KEY_SPACE: u32 = 32; +pub const GLFW_KEY_APOSTROPHE: u32 = 39; +pub const GLFW_KEY_COMMA: u32 = 44; +pub const GLFW_KEY_MINUS: u32 = 45; +pub const GLFW_KEY_PERIOD: u32 = 46; +pub const GLFW_KEY_SLASH: u32 = 47; +pub const GLFW_KEY_0: u32 = 48; +pub const GLFW_KEY_1: u32 = 49; +pub const GLFW_KEY_2: u32 = 50; +pub const GLFW_KEY_3: u32 = 51; +pub const GLFW_KEY_4: u32 = 52; +pub const GLFW_KEY_5: u32 = 53; +pub const GLFW_KEY_6: u32 = 54; +pub const GLFW_KEY_7: u32 = 55; +pub const GLFW_KEY_8: u32 = 56; +pub const GLFW_KEY_9: u32 = 57; +pub const GLFW_KEY_SEMICOLON: u32 = 59; +pub const GLFW_KEY_EQUAL: u32 = 61; +pub const GLFW_KEY_A: u32 = 65; +pub const GLFW_KEY_B: u32 = 66; +pub const GLFW_KEY_C: u32 = 67; +pub const GLFW_KEY_D: u32 = 68; +pub const GLFW_KEY_E: u32 = 69; +pub const GLFW_KEY_F: u32 = 70; +pub const GLFW_KEY_G: u32 = 71; +pub const GLFW_KEY_H: u32 = 72; +pub const GLFW_KEY_I: u32 = 73; +pub const GLFW_KEY_J: u32 = 74; +pub const GLFW_KEY_K: u32 = 75; +pub const GLFW_KEY_L: u32 = 76; +pub const GLFW_KEY_M: u32 = 77; +pub const GLFW_KEY_N: u32 = 78; +pub const GLFW_KEY_O: u32 = 79; +pub const GLFW_KEY_P: u32 = 80; +pub const GLFW_KEY_Q: u32 = 81; +pub const GLFW_KEY_R: u32 = 82; +pub const GLFW_KEY_S: u32 = 83; +pub const GLFW_KEY_T: u32 = 84; +pub const GLFW_KEY_U: u32 = 85; +pub const GLFW_KEY_V: u32 = 86; +pub const GLFW_KEY_W: u32 = 87; +pub const GLFW_KEY_X: u32 = 88; +pub const GLFW_KEY_Y: u32 = 89; +pub const GLFW_KEY_Z: u32 = 90; +pub const GLFW_KEY_LEFT_BRACKET: u32 = 91; +pub const GLFW_KEY_BACKSLASH: u32 = 92; +pub const GLFW_KEY_RIGHT_BRACKET: u32 = 93; +pub const GLFW_KEY_GRAVE_ACCENT: u32 = 96; +pub const GLFW_KEY_WORLD_1: u32 = 161; +pub const GLFW_KEY_WORLD_2: u32 = 162; +pub const GLFW_KEY_ESCAPE: u32 = 256; +pub const GLFW_KEY_ENTER: u32 = 257; +pub const GLFW_KEY_TAB: u32 = 258; +pub const GLFW_KEY_BACKSPACE: u32 = 259; +pub const GLFW_KEY_INSERT: u32 = 260; +pub const GLFW_KEY_DELETE: u32 = 261; +pub const GLFW_KEY_RIGHT: u32 = 262; +pub const GLFW_KEY_LEFT: u32 = 263; +pub const GLFW_KEY_DOWN: u32 = 264; +pub const GLFW_KEY_UP: u32 = 265; +pub const GLFW_KEY_PAGE_UP: u32 = 266; +pub const GLFW_KEY_PAGE_DOWN: u32 = 267; +pub const GLFW_KEY_HOME: u32 = 268; +pub const GLFW_KEY_END: u32 = 269; +pub const GLFW_KEY_CAPS_LOCK: u32 = 280; +pub const GLFW_KEY_SCROLL_LOCK: u32 = 281; +pub const GLFW_KEY_NUM_LOCK: u32 = 282; +pub const GLFW_KEY_PRINT_SCREEN: u32 = 283; +pub const GLFW_KEY_PAUSE: u32 = 284; +pub const GLFW_KEY_F1: u32 = 290; +pub const GLFW_KEY_F2: u32 = 291; +pub const GLFW_KEY_F3: u32 = 292; +pub const GLFW_KEY_F4: u32 = 293; +pub const GLFW_KEY_F5: u32 = 294; +pub const GLFW_KEY_F6: u32 = 295; +pub const GLFW_KEY_F7: u32 = 296; +pub const GLFW_KEY_F8: u32 = 297; +pub const GLFW_KEY_F9: u32 = 298; +pub const GLFW_KEY_F10: u32 = 299; +pub const GLFW_KEY_F11: u32 = 300; +pub const GLFW_KEY_F12: u32 = 301; +pub const GLFW_KEY_F13: u32 = 302; +pub const GLFW_KEY_F14: u32 = 303; +pub const GLFW_KEY_F15: u32 = 304; +pub const GLFW_KEY_F16: u32 = 305; +pub const GLFW_KEY_F17: u32 = 306; +pub const GLFW_KEY_F18: u32 = 307; +pub const GLFW_KEY_F19: u32 = 308; +pub const GLFW_KEY_F20: u32 = 309; +pub const GLFW_KEY_F21: u32 = 310; +pub const GLFW_KEY_F22: u32 = 311; +pub const GLFW_KEY_F23: u32 = 312; +pub const GLFW_KEY_F24: u32 = 313; +pub const GLFW_KEY_F25: u32 = 314; +pub const GLFW_KEY_KP_0: u32 = 320; +pub const GLFW_KEY_KP_1: u32 = 321; +pub const GLFW_KEY_KP_2: u32 = 322; +pub const GLFW_KEY_KP_3: u32 = 323; +pub const GLFW_KEY_KP_4: u32 = 324; +pub const GLFW_KEY_KP_5: u32 = 325; +pub const GLFW_KEY_KP_6: u32 = 326; +pub const GLFW_KEY_KP_7: u32 = 327; +pub const GLFW_KEY_KP_8: u32 = 328; +pub const GLFW_KEY_KP_9: u32 = 329; +pub const GLFW_KEY_KP_DECIMAL: u32 = 330; +pub const GLFW_KEY_KP_DIVIDE: u32 = 331; +pub const GLFW_KEY_KP_MULTIPLY: u32 = 332; +pub const GLFW_KEY_KP_SUBTRACT: u32 = 333; +pub const GLFW_KEY_KP_ADD: u32 = 334; +pub const GLFW_KEY_KP_ENTER: u32 = 335; +pub const GLFW_KEY_KP_EQUAL: u32 = 336; +pub const GLFW_KEY_LEFT_SHIFT: u32 = 340; +pub const GLFW_KEY_LEFT_CONTROL: u32 = 341; +pub const GLFW_KEY_LEFT_ALT: u32 = 342; +pub const GLFW_KEY_LEFT_SUPER: u32 = 343; +pub const GLFW_KEY_RIGHT_SHIFT: u32 = 344; +pub const GLFW_KEY_RIGHT_CONTROL: u32 = 345; +pub const GLFW_KEY_RIGHT_ALT: u32 = 346; +pub const GLFW_KEY_RIGHT_SUPER: u32 = 347; +pub const GLFW_KEY_MENU: u32 = 348; +pub const GLFW_KEY_LAST: u32 = 348; +pub const GLFW_MOD_SHIFT: u32 = 1; +pub const GLFW_MOD_CONTROL: u32 = 2; +pub const GLFW_MOD_ALT: u32 = 4; +pub const GLFW_MOD_SUPER: u32 = 8; +pub const GLFW_MOD_CAPS_LOCK: u32 = 16; +pub const GLFW_MOD_NUM_LOCK: u32 = 32; +pub const GLFW_MOUSE_BUTTON_1: u32 = 0; +pub const GLFW_MOUSE_BUTTON_2: u32 = 1; +pub const GLFW_MOUSE_BUTTON_3: u32 = 2; +pub const GLFW_MOUSE_BUTTON_4: u32 = 3; +pub const GLFW_MOUSE_BUTTON_5: u32 = 4; +pub const GLFW_MOUSE_BUTTON_6: u32 = 5; +pub const GLFW_MOUSE_BUTTON_7: u32 = 6; +pub const GLFW_MOUSE_BUTTON_8: u32 = 7; +pub const GLFW_MOUSE_BUTTON_LAST: u32 = 7; +pub const GLFW_MOUSE_BUTTON_LEFT: u32 = 0; +pub const GLFW_MOUSE_BUTTON_RIGHT: u32 = 1; +pub const GLFW_MOUSE_BUTTON_MIDDLE: u32 = 2; +pub const GLFW_JOYSTICK_1: u32 = 0; +pub const GLFW_JOYSTICK_2: u32 = 1; +pub const GLFW_JOYSTICK_3: u32 = 2; +pub const GLFW_JOYSTICK_4: u32 = 3; +pub const GLFW_JOYSTICK_5: u32 = 4; +pub const GLFW_JOYSTICK_6: u32 = 5; +pub const GLFW_JOYSTICK_7: u32 = 6; +pub const GLFW_JOYSTICK_8: u32 = 7; +pub const GLFW_JOYSTICK_9: u32 = 8; +pub const GLFW_JOYSTICK_10: u32 = 9; +pub const GLFW_JOYSTICK_11: u32 = 10; +pub const GLFW_JOYSTICK_12: u32 = 11; +pub const GLFW_JOYSTICK_13: u32 = 12; +pub const GLFW_JOYSTICK_14: u32 = 13; +pub const GLFW_JOYSTICK_15: u32 = 14; +pub const GLFW_JOYSTICK_16: u32 = 15; +pub const GLFW_JOYSTICK_LAST: u32 = 15; +pub const GLFW_GAMEPAD_BUTTON_A: u32 = 0; +pub const GLFW_GAMEPAD_BUTTON_B: u32 = 1; +pub const GLFW_GAMEPAD_BUTTON_X: u32 = 2; +pub const GLFW_GAMEPAD_BUTTON_Y: u32 = 3; +pub const GLFW_GAMEPAD_BUTTON_LEFT_BUMPER: u32 = 4; +pub const GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER: u32 = 5; +pub const GLFW_GAMEPAD_BUTTON_BACK: u32 = 6; +pub const GLFW_GAMEPAD_BUTTON_START: u32 = 7; +pub const GLFW_GAMEPAD_BUTTON_GUIDE: u32 = 8; +pub const GLFW_GAMEPAD_BUTTON_LEFT_THUMB: u32 = 9; +pub const GLFW_GAMEPAD_BUTTON_RIGHT_THUMB: u32 = 10; +pub const GLFW_GAMEPAD_BUTTON_DPAD_UP: u32 = 11; +pub const GLFW_GAMEPAD_BUTTON_DPAD_RIGHT: u32 = 12; +pub const GLFW_GAMEPAD_BUTTON_DPAD_DOWN: u32 = 13; +pub const GLFW_GAMEPAD_BUTTON_DPAD_LEFT: u32 = 14; +pub const GLFW_GAMEPAD_BUTTON_LAST: u32 = 14; +pub const GLFW_GAMEPAD_BUTTON_CROSS: u32 = 0; +pub const GLFW_GAMEPAD_BUTTON_CIRCLE: u32 = 1; +pub const GLFW_GAMEPAD_BUTTON_SQUARE: u32 = 2; +pub const GLFW_GAMEPAD_BUTTON_TRIANGLE: u32 = 3; +pub const GLFW_GAMEPAD_AXIS_LEFT_X: u32 = 0; +pub const GLFW_GAMEPAD_AXIS_LEFT_Y: u32 = 1; +pub const GLFW_GAMEPAD_AXIS_RIGHT_X: u32 = 2; +pub const GLFW_GAMEPAD_AXIS_RIGHT_Y: u32 = 3; +pub const GLFW_GAMEPAD_AXIS_LEFT_TRIGGER: u32 = 4; +pub const GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER: u32 = 5; +pub const GLFW_GAMEPAD_AXIS_LAST: u32 = 5; +pub const GLFW_NO_ERROR: u32 = 0; +pub const GLFW_NOT_INITIALIZED: u32 = 65537; +pub const GLFW_NO_CURRENT_CONTEXT: u32 = 65538; +pub const GLFW_INVALID_ENUM: u32 = 65539; +pub const GLFW_INVALID_VALUE: u32 = 65540; +pub const GLFW_OUT_OF_MEMORY: u32 = 65541; +pub const GLFW_API_UNAVAILABLE: u32 = 65542; +pub const GLFW_VERSION_UNAVAILABLE: u32 = 65543; +pub const GLFW_PLATFORM_ERROR: u32 = 65544; +pub const GLFW_FORMAT_UNAVAILABLE: u32 = 65545; +pub const GLFW_NO_WINDOW_CONTEXT: u32 = 65546; +pub const GLFW_CURSOR_UNAVAILABLE: u32 = 65547; +pub const GLFW_FEATURE_UNAVAILABLE: u32 = 65548; +pub const GLFW_FEATURE_UNIMPLEMENTED: u32 = 65549; +pub const GLFW_PLATFORM_UNAVAILABLE: u32 = 65550; +pub const GLFW_FOCUSED: u32 = 131073; +pub const GLFW_ICONIFIED: u32 = 131074; +pub const GLFW_RESIZABLE: u32 = 131075; +pub const GLFW_VISIBLE: u32 = 131076; +pub const GLFW_DECORATED: u32 = 131077; +pub const GLFW_AUTO_ICONIFY: u32 = 131078; +pub const GLFW_FLOATING: u32 = 131079; +pub const GLFW_MAXIMIZED: u32 = 131080; +pub const GLFW_CENTER_CURSOR: u32 = 131081; +pub const GLFW_TRANSPARENT_FRAMEBUFFER: u32 = 131082; +pub const GLFW_HOVERED: u32 = 131083; +pub const GLFW_FOCUS_ON_SHOW: u32 = 131084; +pub const GLFW_MOUSE_PASSTHROUGH: u32 = 131085; +pub const GLFW_POSITION_X: u32 = 131086; +pub const GLFW_POSITION_Y: u32 = 131087; +pub const GLFW_RED_BITS: u32 = 135169; +pub const GLFW_GREEN_BITS: u32 = 135170; +pub const GLFW_BLUE_BITS: u32 = 135171; +pub const GLFW_ALPHA_BITS: u32 = 135172; +pub const GLFW_DEPTH_BITS: u32 = 135173; +pub const GLFW_STENCIL_BITS: u32 = 135174; +pub const GLFW_ACCUM_RED_BITS: u32 = 135175; +pub const GLFW_ACCUM_GREEN_BITS: u32 = 135176; +pub const GLFW_ACCUM_BLUE_BITS: u32 = 135177; +pub const GLFW_ACCUM_ALPHA_BITS: u32 = 135178; +pub const GLFW_AUX_BUFFERS: u32 = 135179; +pub const GLFW_STEREO: u32 = 135180; +pub const GLFW_SAMPLES: u32 = 135181; +pub const GLFW_SRGB_CAPABLE: u32 = 135182; +pub const GLFW_REFRESH_RATE: u32 = 135183; +pub const GLFW_DOUBLEBUFFER: u32 = 135184; +pub const GLFW_CLIENT_API: u32 = 139265; +pub const GLFW_CONTEXT_VERSION_MAJOR: u32 = 139266; +pub const GLFW_CONTEXT_VERSION_MINOR: u32 = 139267; +pub const GLFW_CONTEXT_REVISION: u32 = 139268; +pub const GLFW_CONTEXT_ROBUSTNESS: u32 = 139269; +pub const GLFW_OPENGL_FORWARD_COMPAT: u32 = 139270; +pub const GLFW_CONTEXT_DEBUG: u32 = 139271; +pub const GLFW_OPENGL_DEBUG_CONTEXT: u32 = 139271; +pub const GLFW_OPENGL_PROFILE: u32 = 139272; +pub const GLFW_CONTEXT_RELEASE_BEHAVIOR: u32 = 139273; +pub const GLFW_CONTEXT_NO_ERROR: u32 = 139274; +pub const GLFW_CONTEXT_CREATION_API: u32 = 139275; +pub const GLFW_SCALE_TO_MONITOR: u32 = 139276; +pub const GLFW_SCALE_FRAMEBUFFER: u32 = 139277; +pub const GLFW_COCOA_RETINA_FRAMEBUFFER: u32 = 143361; +pub const GLFW_COCOA_FRAME_NAME: u32 = 143362; +pub const GLFW_COCOA_GRAPHICS_SWITCHING: u32 = 143363; +pub const GLFW_X11_CLASS_NAME: u32 = 147457; +pub const GLFW_X11_INSTANCE_NAME: u32 = 147458; +pub const GLFW_WIN32_KEYBOARD_MENU: u32 = 151553; +pub const GLFW_WIN32_SHOWDEFAULT: u32 = 151554; +pub const GLFW_WAYLAND_APP_ID: u32 = 155649; +pub const GLFW_NO_API: u32 = 0; +pub const GLFW_OPENGL_API: u32 = 196609; +pub const GLFW_OPENGL_ES_API: u32 = 196610; +pub const GLFW_NO_ROBUSTNESS: u32 = 0; +pub const GLFW_NO_RESET_NOTIFICATION: u32 = 200705; +pub const GLFW_LOSE_CONTEXT_ON_RESET: u32 = 200706; +pub const GLFW_OPENGL_ANY_PROFILE: u32 = 0; +pub const GLFW_OPENGL_CORE_PROFILE: u32 = 204801; +pub const GLFW_OPENGL_COMPAT_PROFILE: u32 = 204802; +pub const GLFW_CURSOR: u32 = 208897; +pub const GLFW_STICKY_KEYS: u32 = 208898; +pub const GLFW_STICKY_MOUSE_BUTTONS: u32 = 208899; +pub const GLFW_LOCK_KEY_MODS: u32 = 208900; +pub const GLFW_RAW_MOUSE_MOTION: u32 = 208901; +pub const GLFW_CURSOR_NORMAL: u32 = 212993; +pub const GLFW_CURSOR_HIDDEN: u32 = 212994; +pub const GLFW_CURSOR_DISABLED: u32 = 212995; +pub const GLFW_CURSOR_CAPTURED: u32 = 212996; +pub const GLFW_ANY_RELEASE_BEHAVIOR: u32 = 0; +pub const GLFW_RELEASE_BEHAVIOR_FLUSH: u32 = 217089; +pub const GLFW_RELEASE_BEHAVIOR_NONE: u32 = 217090; +pub const GLFW_NATIVE_CONTEXT_API: u32 = 221185; +pub const GLFW_EGL_CONTEXT_API: u32 = 221186; +pub const GLFW_OSMESA_CONTEXT_API: u32 = 221187; +pub const GLFW_ANGLE_PLATFORM_TYPE_NONE: u32 = 225281; +pub const GLFW_ANGLE_PLATFORM_TYPE_OPENGL: u32 = 225282; +pub const GLFW_ANGLE_PLATFORM_TYPE_OPENGLES: u32 = 225283; +pub const GLFW_ANGLE_PLATFORM_TYPE_D3D9: u32 = 225284; +pub const GLFW_ANGLE_PLATFORM_TYPE_D3D11: u32 = 225285; +pub const GLFW_ANGLE_PLATFORM_TYPE_VULKAN: u32 = 225287; +pub const GLFW_ANGLE_PLATFORM_TYPE_METAL: u32 = 225288; +pub const GLFW_WAYLAND_PREFER_LIBDECOR: u32 = 229377; +pub const GLFW_WAYLAND_DISABLE_LIBDECOR: u32 = 229378; +pub const GLFW_ANY_POSITION: u32 = 2147483648; +pub const GLFW_ARROW_CURSOR: u32 = 221185; +pub const GLFW_IBEAM_CURSOR: u32 = 221186; +pub const GLFW_CROSSHAIR_CURSOR: u32 = 221187; +pub const GLFW_POINTING_HAND_CURSOR: u32 = 221188; +pub const GLFW_RESIZE_EW_CURSOR: u32 = 221189; +pub const GLFW_RESIZE_NS_CURSOR: u32 = 221190; +pub const GLFW_RESIZE_NWSE_CURSOR: u32 = 221191; +pub const GLFW_RESIZE_NESW_CURSOR: u32 = 221192; +pub const GLFW_RESIZE_ALL_CURSOR: u32 = 221193; +pub const GLFW_NOT_ALLOWED_CURSOR: u32 = 221194; +pub const GLFW_HRESIZE_CURSOR: u32 = 221189; +pub const GLFW_VRESIZE_CURSOR: u32 = 221190; +pub const GLFW_HAND_CURSOR: u32 = 221188; +pub const GLFW_CONNECTED: u32 = 262145; +pub const GLFW_DISCONNECTED: u32 = 262146; +pub const GLFW_JOYSTICK_HAT_BUTTONS: u32 = 327681; +pub const GLFW_ANGLE_PLATFORM_TYPE: u32 = 327682; +pub const GLFW_PLATFORM: u32 = 327683; +pub const GLFW_COCOA_CHDIR_RESOURCES: u32 = 331777; +pub const GLFW_COCOA_MENUBAR: u32 = 331778; +pub const GLFW_X11_XCB_VULKAN_SURFACE: u32 = 335873; +pub const GLFW_WAYLAND_LIBDECOR: u32 = 339969; +pub const GLFW_ANY_PLATFORM: u32 = 393216; +pub const GLFW_PLATFORM_WIN32: u32 = 393217; +pub const GLFW_PLATFORM_COCOA: u32 = 393218; +pub const GLFW_PLATFORM_WAYLAND: u32 = 393219; +pub const GLFW_PLATFORM_X11: u32 = 393220; +pub const GLFW_PLATFORM_NULL: u32 = 393221; +pub const GLFW_DONT_CARE: i32 = -1; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct gladGLversionStruct { + pub major: ::std::os::raw::c_int, + pub minor: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of gladGLversionStruct"][::std::mem::size_of::() - 8usize]; + ["Alignment of gladGLversionStruct"][::std::mem::align_of::() - 4usize]; + ["Offset of field: gladGLversionStruct::major"] + [::std::mem::offset_of!(gladGLversionStruct, major) - 0usize]; + ["Offset of field: gladGLversionStruct::minor"] + [::std::mem::offset_of!(gladGLversionStruct, minor) - 4usize]; +}; +pub type GLADloadproc = ::std::option::Option< + unsafe extern "C" fn(name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut GLVersion: gladGLversionStruct; +} +unsafe extern "C" { + pub fn gladLoadGL() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn gladLoadGLLoader(arg1: GLADloadproc) -> ::std::os::raw::c_int; +} +pub type __u_char = ::std::os::raw::c_uchar; +pub type __u_short = ::std::os::raw::c_ushort; +pub type __u_int = ::std::os::raw::c_uint; +pub type __u_long = ::std::os::raw::c_ulong; +pub type __int8_t = ::std::os::raw::c_schar; +pub type __uint8_t = ::std::os::raw::c_uchar; +pub type __int16_t = ::std::os::raw::c_short; +pub type __uint16_t = ::std::os::raw::c_ushort; +pub type __int32_t = ::std::os::raw::c_int; +pub type __uint32_t = ::std::os::raw::c_uint; +pub type __int64_t = ::std::os::raw::c_long; +pub type __uint64_t = ::std::os::raw::c_ulong; +pub type __int_least8_t = __int8_t; +pub type __uint_least8_t = __uint8_t; +pub type __int_least16_t = __int16_t; +pub type __uint_least16_t = __uint16_t; +pub type __int_least32_t = __int32_t; +pub type __uint_least32_t = __uint32_t; +pub type __int_least64_t = __int64_t; +pub type __uint_least64_t = __uint64_t; +pub type __quad_t = ::std::os::raw::c_long; +pub type __u_quad_t = ::std::os::raw::c_ulong; +pub type __intmax_t = ::std::os::raw::c_long; +pub type __uintmax_t = ::std::os::raw::c_ulong; +pub type __dev_t = ::std::os::raw::c_ulong; +pub type __uid_t = ::std::os::raw::c_uint; +pub type __gid_t = ::std::os::raw::c_uint; +pub type __ino_t = ::std::os::raw::c_ulong; +pub type __ino64_t = ::std::os::raw::c_ulong; +pub type __mode_t = ::std::os::raw::c_uint; +pub type __nlink_t = ::std::os::raw::c_ulong; +pub type __off_t = ::std::os::raw::c_long; +pub type __off64_t = ::std::os::raw::c_long; +pub type __pid_t = ::std::os::raw::c_int; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __fsid_t { + pub __val: [::std::os::raw::c_int; 2usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of __fsid_t"][::std::mem::size_of::<__fsid_t>() - 8usize]; + ["Alignment of __fsid_t"][::std::mem::align_of::<__fsid_t>() - 4usize]; + ["Offset of field: __fsid_t::__val"][::std::mem::offset_of!(__fsid_t, __val) - 0usize]; +}; +pub type __clock_t = ::std::os::raw::c_long; +pub type __rlim_t = ::std::os::raw::c_ulong; +pub type __rlim64_t = ::std::os::raw::c_ulong; +pub type __id_t = ::std::os::raw::c_uint; +pub type __time_t = ::std::os::raw::c_long; +pub type __useconds_t = ::std::os::raw::c_uint; +pub type __suseconds_t = ::std::os::raw::c_long; +pub type __suseconds64_t = ::std::os::raw::c_long; +pub type __daddr_t = ::std::os::raw::c_int; +pub type __key_t = ::std::os::raw::c_int; +pub type __clockid_t = ::std::os::raw::c_int; +pub type __timer_t = *mut ::std::os::raw::c_void; +pub type __blksize_t = ::std::os::raw::c_long; +pub type __blkcnt_t = ::std::os::raw::c_long; +pub type __blkcnt64_t = ::std::os::raw::c_long; +pub type __fsblkcnt_t = ::std::os::raw::c_ulong; +pub type __fsblkcnt64_t = ::std::os::raw::c_ulong; +pub type __fsfilcnt_t = ::std::os::raw::c_ulong; +pub type __fsfilcnt64_t = ::std::os::raw::c_ulong; +pub type __fsword_t = ::std::os::raw::c_long; +pub type __ssize_t = ::std::os::raw::c_long; +pub type __syscall_slong_t = ::std::os::raw::c_long; +pub type __syscall_ulong_t = ::std::os::raw::c_ulong; +pub type __loff_t = __off64_t; +pub type __caddr_t = *mut ::std::os::raw::c_char; +pub type __intptr_t = ::std::os::raw::c_long; +pub type __socklen_t = ::std::os::raw::c_uint; +pub type __sig_atomic_t = ::std::os::raw::c_int; +pub type int_least8_t = __int_least8_t; +pub type int_least16_t = __int_least16_t; +pub type int_least32_t = __int_least32_t; +pub type int_least64_t = __int_least64_t; +pub type uint_least8_t = __uint_least8_t; +pub type uint_least16_t = __uint_least16_t; +pub type uint_least32_t = __uint_least32_t; +pub type uint_least64_t = __uint_least64_t; +pub type int_fast8_t = ::std::os::raw::c_schar; +pub type int_fast16_t = ::std::os::raw::c_long; +pub type int_fast32_t = ::std::os::raw::c_long; +pub type int_fast64_t = ::std::os::raw::c_long; +pub type uint_fast8_t = ::std::os::raw::c_uchar; +pub type uint_fast16_t = ::std::os::raw::c_ulong; +pub type uint_fast32_t = ::std::os::raw::c_ulong; +pub type uint_fast64_t = ::std::os::raw::c_ulong; +pub type intmax_t = __intmax_t; +pub type uintmax_t = __uintmax_t; +pub type khronos_int32_t = i32; +pub type khronos_uint32_t = u32; +pub type khronos_int64_t = i64; +pub type khronos_uint64_t = u64; +pub type khronos_int8_t = ::std::os::raw::c_schar; +pub type khronos_uint8_t = ::std::os::raw::c_uchar; +pub type khronos_int16_t = ::std::os::raw::c_short; +pub type khronos_uint16_t = ::std::os::raw::c_ushort; +pub type khronos_intptr_t = ::std::os::raw::c_long; +pub type khronos_uintptr_t = ::std::os::raw::c_ulong; +pub type khronos_ssize_t = ::std::os::raw::c_long; +pub type khronos_usize_t = ::std::os::raw::c_ulong; +pub type khronos_float_t = f32; +pub type khronos_utime_nanoseconds_t = khronos_uint64_t; +pub type khronos_stime_nanoseconds_t = khronos_int64_t; +pub const khronos_boolean_enum_t_KHRONOS_FALSE: khronos_boolean_enum_t = 0; +pub const khronos_boolean_enum_t_KHRONOS_TRUE: khronos_boolean_enum_t = 1; +pub const khronos_boolean_enum_t_KHRONOS_BOOLEAN_ENUM_FORCE_SIZE: khronos_boolean_enum_t = + 2147483647; +pub type khronos_boolean_enum_t = ::std::os::raw::c_uint; +pub type GLenum = ::std::os::raw::c_uint; +pub type GLboolean = ::std::os::raw::c_uchar; +pub type GLbitfield = ::std::os::raw::c_uint; +pub type GLvoid = ::std::os::raw::c_void; +pub type GLbyte = khronos_int8_t; +pub type GLubyte = khronos_uint8_t; +pub type GLshort = khronos_int16_t; +pub type GLushort = khronos_uint16_t; +pub type GLint = ::std::os::raw::c_int; +pub type GLuint = ::std::os::raw::c_uint; +pub type GLclampx = khronos_int32_t; +pub type GLsizei = ::std::os::raw::c_int; +pub type GLfloat = khronos_float_t; +pub type GLclampf = khronos_float_t; +pub type GLdouble = f64; +pub type GLclampd = f64; +pub type GLeglClientBufferEXT = *mut ::std::os::raw::c_void; +pub type GLeglImageOES = *mut ::std::os::raw::c_void; +pub type GLchar = ::std::os::raw::c_char; +pub type GLcharARB = ::std::os::raw::c_char; +pub type GLhandleARB = ::std::os::raw::c_uint; +pub type GLhalf = khronos_uint16_t; +pub type GLhalfARB = khronos_uint16_t; +pub type GLfixed = khronos_int32_t; +pub type GLintptr = khronos_intptr_t; +pub type GLintptrARB = khronos_intptr_t; +pub type GLsizeiptr = khronos_ssize_t; +pub type GLsizeiptrARB = khronos_ssize_t; +pub type GLint64 = khronos_int64_t; +pub type GLint64EXT = khronos_int64_t; +pub type GLuint64 = khronos_uint64_t; +pub type GLuint64EXT = khronos_uint64_t; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct __GLsync { + _unused: [u8; 0], +} +pub type GLsync = *mut __GLsync; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _cl_context { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct _cl_event { + _unused: [u8; 0], +} +pub type GLDEBUGPROC = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *const ::std::os::raw::c_void, + ), +>; +pub type GLDEBUGPROCARB = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *const ::std::os::raw::c_void, + ), +>; +pub type GLDEBUGPROCKHR = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *const ::std::os::raw::c_void, + ), +>; +pub type GLDEBUGPROCAMD = ::std::option::Option< + unsafe extern "C" fn( + id: GLuint, + category: GLenum, + severity: GLenum, + length: GLsizei, + message: *const GLchar, + userParam: *mut ::std::os::raw::c_void, + ), +>; +pub type GLhalfNV = ::std::os::raw::c_ushort; +pub type GLvdpauSurfaceNV = GLintptr; +pub type GLVULKANPROCNV = ::std::option::Option; +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_0: ::std::os::raw::c_int; +} +pub type PFNGLCULLFACEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCullFace: PFNGLCULLFACEPROC; +} +pub type PFNGLFRONTFACEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFrontFace: PFNGLFRONTFACEPROC; +} +pub type PFNGLHINTPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glHint: PFNGLHINTPROC; +} +pub type PFNGLLINEWIDTHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glLineWidth: PFNGLLINEWIDTHPROC; +} +pub type PFNGLPOINTSIZEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointSize: PFNGLPOINTSIZEPROC; +} +pub type PFNGLPOLYGONMODEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPolygonMode: PFNGLPOLYGONMODEPROC; +} +pub type PFNGLSCISSORPROC = ::std::option::Option< + unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glScissor: PFNGLSCISSORPROC; +} +pub type PFNGLTEXPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexParameterf: PFNGLTEXPARAMETERFPROC; +} +pub type PFNGLTEXPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glTexParameterfv: PFNGLTEXPARAMETERFVPROC; +} +pub type PFNGLTEXPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexParameteri: PFNGLTEXPARAMETERIPROC; +} +pub type PFNGLTEXPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTexParameteriv: PFNGLTEXPARAMETERIVPROC; +} +pub type PFNGLTEXIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + border: GLint, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage1D: PFNGLTEXIMAGE1DPROC; +} +pub type PFNGLTEXIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + height: GLsizei, + border: GLint, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage2D: PFNGLTEXIMAGE2DPROC; +} +pub type PFNGLDRAWBUFFERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawBuffer: PFNGLDRAWBUFFERPROC; +} +pub type PFNGLCLEARPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClear: PFNGLCLEARPROC; +} +pub type PFNGLCLEARCOLORPROC = ::std::option::Option< + unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glClearColor: PFNGLCLEARCOLORPROC; +} +pub type PFNGLCLEARSTENCILPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClearStencil: PFNGLCLEARSTENCILPROC; +} +pub type PFNGLCLEARDEPTHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClearDepth: PFNGLCLEARDEPTHPROC; +} +pub type PFNGLSTENCILMASKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilMask: PFNGLSTENCILMASKPROC; +} +pub type PFNGLCOLORMASKPROC = ::std::option::Option< + unsafe extern "C" fn(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean), +>; +unsafe extern "C" { + pub static mut glad_glColorMask: PFNGLCOLORMASKPROC; +} +pub type PFNGLDEPTHMASKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthMask: PFNGLDEPTHMASKPROC; +} +pub type PFNGLDISABLEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisable: PFNGLDISABLEPROC; +} +pub type PFNGLENABLEPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnable: PFNGLENABLEPROC; +} +pub type PFNGLFINISHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFinish: PFNGLFINISHPROC; +} +pub type PFNGLFLUSHPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFlush: PFNGLFLUSHPROC; +} +pub type PFNGLBLENDFUNCPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendFunc: PFNGLBLENDFUNCPROC; +} +pub type PFNGLLOGICOPPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glLogicOp: PFNGLLOGICOPPROC; +} +pub type PFNGLSTENCILFUNCPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilFunc: PFNGLSTENCILFUNCPROC; +} +pub type PFNGLSTENCILOPPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilOp: PFNGLSTENCILOPPROC; +} +pub type PFNGLDEPTHFUNCPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthFunc: PFNGLDEPTHFUNCPROC; +} +pub type PFNGLPIXELSTOREFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPixelStoref: PFNGLPIXELSTOREFPROC; +} +pub type PFNGLPIXELSTOREIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPixelStorei: PFNGLPIXELSTOREIPROC; +} +pub type PFNGLREADBUFFERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glReadBuffer: PFNGLREADBUFFERPROC; +} +pub type PFNGLREADPIXELSPROC = ::std::option::Option< + unsafe extern "C" fn( + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glReadPixels: PFNGLREADPIXELSPROC; +} +pub type PFNGLGETBOOLEANVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetBooleanv: PFNGLGETBOOLEANVPROC; +} +pub type PFNGLGETDOUBLEVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetDoublev: PFNGLGETDOUBLEVPROC; +} +pub type PFNGLGETERRORPROC = ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glGetError: PFNGLGETERRORPROC; +} +pub type PFNGLGETFLOATVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetFloatv: PFNGLGETFLOATVPROC; +} +pub type PFNGLGETINTEGERVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetIntegerv: PFNGLGETINTEGERVPROC; +} +pub type PFNGLGETSTRINGPROC = + ::std::option::Option *const GLubyte>; +unsafe extern "C" { + pub static mut glad_glGetString: PFNGLGETSTRINGPROC; +} +pub type PFNGLGETTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + format: GLenum, + type_: GLenum, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTexImage: PFNGLGETTEXIMAGEPROC; +} +pub type PFNGLGETTEXPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTexParameterfv: PFNGLGETTEXPARAMETERFVPROC; +} +pub type PFNGLGETTEXPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTexParameteriv: PFNGLGETTEXPARAMETERIVPROC; +} +pub type PFNGLGETTEXLEVELPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTexLevelParameterfv: PFNGLGETTEXLEVELPARAMETERFVPROC; +} +pub type PFNGLGETTEXLEVELPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetTexLevelParameteriv: PFNGLGETTEXLEVELPARAMETERIVPROC; +} +pub type PFNGLISENABLEDPROC = ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsEnabled: PFNGLISENABLEDPROC; +} +pub type PFNGLDEPTHRANGEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRange: PFNGLDEPTHRANGEPROC; +} +pub type PFNGLVIEWPORTPROC = ::std::option::Option< + unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glViewport: PFNGLVIEWPORTPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_1: ::std::os::raw::c_int; +} +pub type PFNGLDRAWARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawArrays: PFNGLDRAWARRAYSPROC; +} +pub type PFNGLDRAWELEMENTSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElements: PFNGLDRAWELEMENTSPROC; +} +pub type PFNGLPOLYGONOFFSETPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPolygonOffset: PFNGLPOLYGONOFFSETPROC; +} +pub type PFNGLCOPYTEXIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + x: GLint, + y: GLint, + width: GLsizei, + border: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexImage1D: PFNGLCOPYTEXIMAGE1DPROC; +} +pub type PFNGLCOPYTEXIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + border: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexImage2D: PFNGLCOPYTEXIMAGE2DPROC; +} +pub type PFNGLCOPYTEXSUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexSubImage1D: PFNGLCOPYTEXSUBIMAGE1DPROC; +} +pub type PFNGLCOPYTEXSUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexSubImage2D: PFNGLCOPYTEXSUBIMAGE2DPROC; +} +pub type PFNGLTEXSUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexSubImage1D: PFNGLTEXSUBIMAGE1DPROC; +} +pub type PFNGLTEXSUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexSubImage2D: PFNGLTEXSUBIMAGE2DPROC; +} +pub type PFNGLBINDTEXTUREPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindTexture: PFNGLBINDTEXTUREPROC; +} +pub type PFNGLDELETETEXTURESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteTextures: PFNGLDELETETEXTURESPROC; +} +pub type PFNGLGENTEXTURESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenTextures: PFNGLGENTEXTURESPROC; +} +pub type PFNGLISTEXTUREPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsTexture: PFNGLISTEXTUREPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_2: ::std::os::raw::c_int; +} +pub type PFNGLDRAWRANGEELEMENTSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + start: GLuint, + end: GLuint, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawRangeElements: PFNGLDRAWRANGEELEMENTSPROC; +} +pub type PFNGLTEXIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + border: GLint, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage3D: PFNGLTEXIMAGE3DPROC; +} +pub type PFNGLTEXSUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexSubImage3D: PFNGLTEXSUBIMAGE3DPROC; +} +pub type PFNGLCOPYTEXSUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTexSubImage3D: PFNGLCOPYTEXSUBIMAGE3DPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_3: ::std::os::raw::c_int; +} +pub type PFNGLACTIVETEXTUREPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glActiveTexture: PFNGLACTIVETEXTUREPROC; +} +pub type PFNGLSAMPLECOVERAGEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSampleCoverage: PFNGLSAMPLECOVERAGEPROC; +} +pub type PFNGLCOMPRESSEDTEXIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + border: GLint, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexImage3D: PFNGLCOMPRESSEDTEXIMAGE3DPROC; +} +pub type PFNGLCOMPRESSEDTEXIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + border: GLint, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexImage2D: PFNGLCOMPRESSEDTEXIMAGE2DPROC; +} +pub type PFNGLCOMPRESSEDTEXIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + internalformat: GLenum, + width: GLsizei, + border: GLint, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexImage1D: PFNGLCOMPRESSEDTEXIMAGE1DPROC; +} +pub type PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexSubImage3D: PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC; +} +pub type PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexSubImage2D: PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC; +} +pub type PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTexSubImage1D: PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC; +} +pub type PFNGLGETCOMPRESSEDTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, level: GLint, img: *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetCompressedTexImage: PFNGLGETCOMPRESSEDTEXIMAGEPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_4: ::std::os::raw::c_int; +} +pub type PFNGLBLENDFUNCSEPARATEPROC = ::std::option::Option< + unsafe extern "C" fn( + sfactorRGB: GLenum, + dfactorRGB: GLenum, + sfactorAlpha: GLenum, + dfactorAlpha: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlendFuncSeparate: PFNGLBLENDFUNCSEPARATEPROC; +} +pub type PFNGLMULTIDRAWARRAYSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + first: *const GLint, + count: *const GLsizei, + drawcount: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawArrays: PFNGLMULTIDRAWARRAYSPROC; +} +pub type PFNGLMULTIDRAWELEMENTSPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: *const GLsizei, + type_: GLenum, + indices: *const *const ::std::os::raw::c_void, + drawcount: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElements: PFNGLMULTIDRAWELEMENTSPROC; +} +pub type PFNGLPOINTPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameterf: PFNGLPOINTPARAMETERFPROC; +} +pub type PFNGLPOINTPARAMETERFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameterfv: PFNGLPOINTPARAMETERFVPROC; +} +pub type PFNGLPOINTPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameteri: PFNGLPOINTPARAMETERIPROC; +} +pub type PFNGLPOINTPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPointParameteriv: PFNGLPOINTPARAMETERIVPROC; +} +pub type PFNGLBLENDCOLORPROC = ::std::option::Option< + unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glBlendColor: PFNGLBLENDCOLORPROC; +} +pub type PFNGLBLENDEQUATIONPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquation: PFNGLBLENDEQUATIONPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_1_5: ::std::os::raw::c_int; +} +pub type PFNGLGENQUERIESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenQueries: PFNGLGENQUERIESPROC; +} +pub type PFNGLDELETEQUERIESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteQueries: PFNGLDELETEQUERIESPROC; +} +pub type PFNGLISQUERYPROC = ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsQuery: PFNGLISQUERYPROC; +} +pub type PFNGLBEGINQUERYPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginQuery: PFNGLBEGINQUERYPROC; +} +pub type PFNGLENDQUERYPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndQuery: PFNGLENDQUERYPROC; +} +pub type PFNGLGETQUERYIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryiv: PFNGLGETQUERYIVPROC; +} +pub type PFNGLGETQUERYOBJECTIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjectiv: PFNGLGETQUERYOBJECTIVPROC; +} +pub type PFNGLGETQUERYOBJECTUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjectuiv: PFNGLGETQUERYOBJECTUIVPROC; +} +pub type PFNGLBINDBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindBuffer: PFNGLBINDBUFFERPROC; +} +pub type PFNGLDELETEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteBuffers: PFNGLDELETEBUFFERSPROC; +} +pub type PFNGLGENBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenBuffers: PFNGLGENBUFFERSPROC; +} +pub type PFNGLISBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsBuffer: PFNGLISBUFFERPROC; +} +pub type PFNGLBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + usage: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBufferData: PFNGLBUFFERDATAPROC; +} +pub type PFNGLBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + offset: GLintptr, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glBufferSubData: PFNGLBUFFERSUBDATAPROC; +} +pub type PFNGLGETBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + offset: GLintptr, + size: GLsizeiptr, + data: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetBufferSubData: PFNGLGETBUFFERSUBDATAPROC; +} +pub type PFNGLMAPBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, access: GLenum) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapBuffer: PFNGLMAPBUFFERPROC; +} +pub type PFNGLUNMAPBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glUnmapBuffer: PFNGLUNMAPBUFFERPROC; +} +pub type PFNGLGETBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetBufferParameteriv: PFNGLGETBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETBUFFERPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetBufferPointerv: PFNGLGETBUFFERPOINTERVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_2_0: ::std::os::raw::c_int; +} +pub type PFNGLBLENDEQUATIONSEPARATEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquationSeparate: PFNGLBLENDEQUATIONSEPARATEPROC; +} +pub type PFNGLDRAWBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawBuffers: PFNGLDRAWBUFFERSPROC; +} +pub type PFNGLSTENCILOPSEPARATEPROC = ::std::option::Option< + unsafe extern "C" fn(face: GLenum, sfail: GLenum, dpfail: GLenum, dppass: GLenum), +>; +unsafe extern "C" { + pub static mut glad_glStencilOpSeparate: PFNGLSTENCILOPSEPARATEPROC; +} +pub type PFNGLSTENCILFUNCSEPARATEPROC = ::std::option::Option< + unsafe extern "C" fn(face: GLenum, func: GLenum, ref_: GLint, mask: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glStencilFuncSeparate: PFNGLSTENCILFUNCSEPARATEPROC; +} +pub type PFNGLSTENCILMASKSEPARATEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glStencilMaskSeparate: PFNGLSTENCILMASKSEPARATEPROC; +} +pub type PFNGLATTACHSHADERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glAttachShader: PFNGLATTACHSHADERPROC; +} +pub type PFNGLBINDATTRIBLOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, index: GLuint, name: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glBindAttribLocation: PFNGLBINDATTRIBLOCATIONPROC; +} +pub type PFNGLCOMPILESHADERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCompileShader: PFNGLCOMPILESHADERPROC; +} +pub type PFNGLCREATEPROGRAMPROC = ::std::option::Option GLuint>; +unsafe extern "C" { + pub static mut glad_glCreateProgram: PFNGLCREATEPROGRAMPROC; +} +pub type PFNGLCREATESHADERPROC = + ::std::option::Option GLuint>; +unsafe extern "C" { + pub static mut glad_glCreateShader: PFNGLCREATESHADERPROC; +} +pub type PFNGLDELETEPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteProgram: PFNGLDELETEPROGRAMPROC; +} +pub type PFNGLDELETESHADERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteShader: PFNGLDELETESHADERPROC; +} +pub type PFNGLDETACHSHADERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDetachShader: PFNGLDETACHSHADERPROC; +} +pub type PFNGLDISABLEVERTEXATTRIBARRAYPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisableVertexAttribArray: PFNGLDISABLEVERTEXATTRIBARRAYPROC; +} +pub type PFNGLENABLEVERTEXATTRIBARRAYPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnableVertexAttribArray: PFNGLENABLEVERTEXATTRIBARRAYPROC; +} +pub type PFNGLGETACTIVEATTRIBPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + size: *mut GLint, + type_: *mut GLenum, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveAttrib: PFNGLGETACTIVEATTRIBPROC; +} +pub type PFNGLGETACTIVEUNIFORMPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + size: *mut GLint, + type_: *mut GLenum, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniform: PFNGLGETACTIVEUNIFORMPROC; +} +pub type PFNGLGETATTACHEDSHADERSPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + maxCount: GLsizei, + count: *mut GLsizei, + shaders: *mut GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetAttachedShaders: PFNGLGETATTACHEDSHADERSPROC; +} +pub type PFNGLGETATTRIBLOCATIONPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetAttribLocation: PFNGLGETATTRIBLOCATIONPROC; +} +pub type PFNGLGETPROGRAMIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetProgramiv: PFNGLGETPROGRAMIVPROC; +} +pub type PFNGLGETPROGRAMINFOLOGPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + infoLog: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramInfoLog: PFNGLGETPROGRAMINFOLOGPROC; +} +pub type PFNGLGETSHADERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetShaderiv: PFNGLGETSHADERIVPROC; +} +pub type PFNGLGETSHADERINFOLOGPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + infoLog: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetShaderInfoLog: PFNGLGETSHADERINFOLOGPROC; +} +pub type PFNGLGETSHADERSOURCEPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + source: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetShaderSource: PFNGLGETSHADERSOURCEPROC; +} +pub type PFNGLGETUNIFORMLOCATIONPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetUniformLocation: PFNGLGETUNIFORMLOCATIONPROC; +} +pub type PFNGLGETUNIFORMFVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformfv: PFNGLGETUNIFORMFVPROC; +} +pub type PFNGLGETUNIFORMIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformiv: PFNGLGETUNIFORMIVPROC; +} +pub type PFNGLGETVERTEXATTRIBDVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribdv: PFNGLGETVERTEXATTRIBDVPROC; +} +pub type PFNGLGETVERTEXATTRIBFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribfv: PFNGLGETVERTEXATTRIBFVPROC; +} +pub type PFNGLGETVERTEXATTRIBIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribiv: PFNGLGETVERTEXATTRIBIVPROC; +} +pub type PFNGLGETVERTEXATTRIBPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, pname: GLenum, pointer: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribPointerv: PFNGLGETVERTEXATTRIBPOINTERVPROC; +} +pub type PFNGLISPROGRAMPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsProgram: PFNGLISPROGRAMPROC; +} +pub type PFNGLISSHADERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsShader: PFNGLISSHADERPROC; +} +pub type PFNGLLINKPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glLinkProgram: PFNGLLINKPROGRAMPROC; +} +pub type PFNGLSHADERSOURCEPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + count: GLsizei, + string: *const *const GLchar, + length: *const GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glShaderSource: PFNGLSHADERSOURCEPROC; +} +pub type PFNGLUSEPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUseProgram: PFNGLUSEPROGRAMPROC; +} +pub type PFNGLUNIFORM1FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1f: PFNGLUNIFORM1FPROC; +} +pub type PFNGLUNIFORM2FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2f: PFNGLUNIFORM2FPROC; +} +pub type PFNGLUNIFORM3FPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform3f: PFNGLUNIFORM3FPROC; +} +pub type PFNGLUNIFORM4FPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform4f: PFNGLUNIFORM4FPROC; +} +pub type PFNGLUNIFORM1IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1i: PFNGLUNIFORM1IPROC; +} +pub type PFNGLUNIFORM2IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2i: PFNGLUNIFORM2IPROC; +} +pub type PFNGLUNIFORM3IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform3i: PFNGLUNIFORM3IPROC; +} +pub type PFNGLUNIFORM4IPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4i: PFNGLUNIFORM4IPROC; +} +pub type PFNGLUNIFORM1FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform1fv: PFNGLUNIFORM1FVPROC; +} +pub type PFNGLUNIFORM2FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform2fv: PFNGLUNIFORM2FVPROC; +} +pub type PFNGLUNIFORM3FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform3fv: PFNGLUNIFORM3FVPROC; +} +pub type PFNGLUNIFORM4FVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glUniform4fv: PFNGLUNIFORM4FVPROC; +} +pub type PFNGLUNIFORM1IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform1iv: PFNGLUNIFORM1IVPROC; +} +pub type PFNGLUNIFORM2IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform2iv: PFNGLUNIFORM2IVPROC; +} +pub type PFNGLUNIFORM3IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform3iv: PFNGLUNIFORM3IVPROC; +} +pub type PFNGLUNIFORM4IVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4iv: PFNGLUNIFORM4IVPROC; +} +pub type PFNGLUNIFORMMATRIX2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2fv: PFNGLUNIFORMMATRIX2FVPROC; +} +pub type PFNGLUNIFORMMATRIX3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3fv: PFNGLUNIFORMMATRIX3FVPROC; +} +pub type PFNGLUNIFORMMATRIX4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4fv: PFNGLUNIFORMMATRIX4FVPROC; +} +pub type PFNGLVALIDATEPROGRAMPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glValidateProgram: PFNGLVALIDATEPROGRAMPROC; +} +pub type PFNGLVERTEXATTRIB1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1d: PFNGLVERTEXATTRIB1DPROC; +} +pub type PFNGLVERTEXATTRIB1DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1dv: PFNGLVERTEXATTRIB1DVPROC; +} +pub type PFNGLVERTEXATTRIB1FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1f: PFNGLVERTEXATTRIB1FPROC; +} +pub type PFNGLVERTEXATTRIB1FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1fv: PFNGLVERTEXATTRIB1FVPROC; +} +pub type PFNGLVERTEXATTRIB1SPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1s: PFNGLVERTEXATTRIB1SPROC; +} +pub type PFNGLVERTEXATTRIB1SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib1sv: PFNGLVERTEXATTRIB1SVPROC; +} +pub type PFNGLVERTEXATTRIB2DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2d: PFNGLVERTEXATTRIB2DPROC; +} +pub type PFNGLVERTEXATTRIB2DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2dv: PFNGLVERTEXATTRIB2DVPROC; +} +pub type PFNGLVERTEXATTRIB2FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2f: PFNGLVERTEXATTRIB2FPROC; +} +pub type PFNGLVERTEXATTRIB2FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2fv: PFNGLVERTEXATTRIB2FVPROC; +} +pub type PFNGLVERTEXATTRIB2SPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2s: PFNGLVERTEXATTRIB2SPROC; +} +pub type PFNGLVERTEXATTRIB2SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib2sv: PFNGLVERTEXATTRIB2SVPROC; +} +pub type PFNGLVERTEXATTRIB3DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3d: PFNGLVERTEXATTRIB3DPROC; +} +pub type PFNGLVERTEXATTRIB3DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3dv: PFNGLVERTEXATTRIB3DVPROC; +} +pub type PFNGLVERTEXATTRIB3FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3f: PFNGLVERTEXATTRIB3FPROC; +} +pub type PFNGLVERTEXATTRIB3FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3fv: PFNGLVERTEXATTRIB3FVPROC; +} +pub type PFNGLVERTEXATTRIB3SPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3s: PFNGLVERTEXATTRIB3SPROC; +} +pub type PFNGLVERTEXATTRIB3SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib3sv: PFNGLVERTEXATTRIB3SVPROC; +} +pub type PFNGLVERTEXATTRIB4NBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nbv: PFNGLVERTEXATTRIB4NBVPROC; +} +pub type PFNGLVERTEXATTRIB4NIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Niv: PFNGLVERTEXATTRIB4NIVPROC; +} +pub type PFNGLVERTEXATTRIB4NSVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nsv: PFNGLVERTEXATTRIB4NSVPROC; +} +pub type PFNGLVERTEXATTRIB4NUBPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nub: PFNGLVERTEXATTRIB4NUBPROC; +} +pub type PFNGLVERTEXATTRIB4NUBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nubv: PFNGLVERTEXATTRIB4NUBVPROC; +} +pub type PFNGLVERTEXATTRIB4NUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nuiv: PFNGLVERTEXATTRIB4NUIVPROC; +} +pub type PFNGLVERTEXATTRIB4NUSVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4Nusv: PFNGLVERTEXATTRIB4NUSVPROC; +} +pub type PFNGLVERTEXATTRIB4BVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4bv: PFNGLVERTEXATTRIB4BVPROC; +} +pub type PFNGLVERTEXATTRIB4DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4d: PFNGLVERTEXATTRIB4DPROC; +} +pub type PFNGLVERTEXATTRIB4DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4dv: PFNGLVERTEXATTRIB4DVPROC; +} +pub type PFNGLVERTEXATTRIB4FPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4f: PFNGLVERTEXATTRIB4FPROC; +} +pub type PFNGLVERTEXATTRIB4FVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4fv: PFNGLVERTEXATTRIB4FVPROC; +} +pub type PFNGLVERTEXATTRIB4IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4iv: PFNGLVERTEXATTRIB4IVPROC; +} +pub type PFNGLVERTEXATTRIB4SPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4s: PFNGLVERTEXATTRIB4SPROC; +} +pub type PFNGLVERTEXATTRIB4SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4sv: PFNGLVERTEXATTRIB4SVPROC; +} +pub type PFNGLVERTEXATTRIB4UBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4ubv: PFNGLVERTEXATTRIB4UBVPROC; +} +pub type PFNGLVERTEXATTRIB4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4uiv: PFNGLVERTEXATTRIB4UIVPROC; +} +pub type PFNGLVERTEXATTRIB4USVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttrib4usv: PFNGLVERTEXATTRIB4USVPROC; +} +pub type PFNGLVERTEXATTRIBPOINTERPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + size: GLint, + type_: GLenum, + normalized: GLboolean, + stride: GLsizei, + pointer: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribPointer: PFNGLVERTEXATTRIBPOINTERPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_2_1: ::std::os::raw::c_int; +} +pub type PFNGLUNIFORMMATRIX2X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x3fv: PFNGLUNIFORMMATRIX2X3FVPROC; +} +pub type PFNGLUNIFORMMATRIX3X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x2fv: PFNGLUNIFORMMATRIX3X2FVPROC; +} +pub type PFNGLUNIFORMMATRIX2X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x4fv: PFNGLUNIFORMMATRIX2X4FVPROC; +} +pub type PFNGLUNIFORMMATRIX4X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x2fv: PFNGLUNIFORMMATRIX4X2FVPROC; +} +pub type PFNGLUNIFORMMATRIX3X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x4fv: PFNGLUNIFORMMATRIX3X4FVPROC; +} +pub type PFNGLUNIFORMMATRIX4X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x3fv: PFNGLUNIFORMMATRIX4X3FVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_0: ::std::os::raw::c_int; +} +pub type PFNGLCOLORMASKIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean), +>; +unsafe extern "C" { + pub static mut glad_glColorMaski: PFNGLCOLORMASKIPROC; +} +pub type PFNGLGETBOOLEANI_VPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, index: GLuint, data: *mut GLboolean), +>; +unsafe extern "C" { + pub static mut glad_glGetBooleani_v: PFNGLGETBOOLEANI_VPROC; +} +pub type PFNGLGETINTEGERI_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetIntegeri_v: PFNGLGETINTEGERI_VPROC; +} +pub type PFNGLENABLEIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnablei: PFNGLENABLEIPROC; +} +pub type PFNGLDISABLEIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisablei: PFNGLDISABLEIPROC; +} +pub type PFNGLISENABLEDIPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsEnabledi: PFNGLISENABLEDIPROC; +} +pub type PFNGLBEGINTRANSFORMFEEDBACKPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginTransformFeedback: PFNGLBEGINTRANSFORMFEEDBACKPROC; +} +pub type PFNGLENDTRANSFORMFEEDBACKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndTransformFeedback: PFNGLENDTRANSFORMFEEDBACKPROC; +} +pub type PFNGLBINDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + index: GLuint, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindBufferRange: PFNGLBINDBUFFERRANGEPROC; +} +pub type PFNGLBINDBUFFERBASEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindBufferBase: PFNGLBINDBUFFERBASEPROC; +} +pub type PFNGLTRANSFORMFEEDBACKVARYINGSPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + count: GLsizei, + varyings: *const *const GLchar, + bufferMode: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glTransformFeedbackVaryings: PFNGLTRANSFORMFEEDBACKVARYINGSPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKVARYINGPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + size: *mut GLsizei, + type_: *mut GLenum, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbackVarying: PFNGLGETTRANSFORMFEEDBACKVARYINGPROC; +} +pub type PFNGLCLAMPCOLORPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClampColor: PFNGLCLAMPCOLORPROC; +} +pub type PFNGLBEGINCONDITIONALRENDERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginConditionalRender: PFNGLBEGINCONDITIONALRENDERPROC; +} +pub type PFNGLENDCONDITIONALRENDERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndConditionalRender: PFNGLENDCONDITIONALRENDERPROC; +} +pub type PFNGLVERTEXATTRIBIPOINTERPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + size: GLint, + type_: GLenum, + stride: GLsizei, + pointer: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribIPointer: PFNGLVERTEXATTRIBIPOINTERPROC; +} +pub type PFNGLGETVERTEXATTRIBIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribIiv: PFNGLGETVERTEXATTRIBIIVPROC; +} +pub type PFNGLGETVERTEXATTRIBIUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribIuiv: PFNGLGETVERTEXATTRIBIUIVPROC; +} +pub type PFNGLVERTEXATTRIBI1IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1i: PFNGLVERTEXATTRIBI1IPROC; +} +pub type PFNGLVERTEXATTRIBI2IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2i: PFNGLVERTEXATTRIBI2IPROC; +} +pub type PFNGLVERTEXATTRIBI3IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3i: PFNGLVERTEXATTRIBI3IPROC; +} +pub type PFNGLVERTEXATTRIBI4IPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4i: PFNGLVERTEXATTRIBI4IPROC; +} +pub type PFNGLVERTEXATTRIBI1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1ui: PFNGLVERTEXATTRIBI1UIPROC; +} +pub type PFNGLVERTEXATTRIBI2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2ui: PFNGLVERTEXATTRIBI2UIPROC; +} +pub type PFNGLVERTEXATTRIBI3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3ui: PFNGLVERTEXATTRIBI3UIPROC; +} +pub type PFNGLVERTEXATTRIBI4UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4ui: PFNGLVERTEXATTRIBI4UIPROC; +} +pub type PFNGLVERTEXATTRIBI1IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1iv: PFNGLVERTEXATTRIBI1IVPROC; +} +pub type PFNGLVERTEXATTRIBI2IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2iv: PFNGLVERTEXATTRIBI2IVPROC; +} +pub type PFNGLVERTEXATTRIBI3IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3iv: PFNGLVERTEXATTRIBI3IVPROC; +} +pub type PFNGLVERTEXATTRIBI4IVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4iv: PFNGLVERTEXATTRIBI4IVPROC; +} +pub type PFNGLVERTEXATTRIBI1UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI1uiv: PFNGLVERTEXATTRIBI1UIVPROC; +} +pub type PFNGLVERTEXATTRIBI2UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI2uiv: PFNGLVERTEXATTRIBI2UIVPROC; +} +pub type PFNGLVERTEXATTRIBI3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI3uiv: PFNGLVERTEXATTRIBI3UIVPROC; +} +pub type PFNGLVERTEXATTRIBI4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4uiv: PFNGLVERTEXATTRIBI4UIVPROC; +} +pub type PFNGLVERTEXATTRIBI4BVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4bv: PFNGLVERTEXATTRIBI4BVPROC; +} +pub type PFNGLVERTEXATTRIBI4SVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4sv: PFNGLVERTEXATTRIBI4SVPROC; +} +pub type PFNGLVERTEXATTRIBI4UBVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4ubv: PFNGLVERTEXATTRIBI4UBVPROC; +} +pub type PFNGLVERTEXATTRIBI4USVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribI4usv: PFNGLVERTEXATTRIBI4USVPROC; +} +pub type PFNGLGETUNIFORMUIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformuiv: PFNGLGETUNIFORMUIVPROC; +} +pub type PFNGLBINDFRAGDATALOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, color: GLuint, name: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glBindFragDataLocation: PFNGLBINDFRAGDATALOCATIONPROC; +} +pub type PFNGLGETFRAGDATALOCATIONPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetFragDataLocation: PFNGLGETFRAGDATALOCATIONPROC; +} +pub type PFNGLUNIFORM1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1ui: PFNGLUNIFORM1UIPROC; +} +pub type PFNGLUNIFORM2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2ui: PFNGLUNIFORM2UIPROC; +} +pub type PFNGLUNIFORM3UIPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform3ui: PFNGLUNIFORM3UIPROC; +} +pub type PFNGLUNIFORM4UIPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4ui: PFNGLUNIFORM4UIPROC; +} +pub type PFNGLUNIFORM1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform1uiv: PFNGLUNIFORM1UIVPROC; +} +pub type PFNGLUNIFORM2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform2uiv: PFNGLUNIFORM2UIVPROC; +} +pub type PFNGLUNIFORM3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform3uiv: PFNGLUNIFORM3UIVPROC; +} +pub type PFNGLUNIFORM4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniform4uiv: PFNGLUNIFORM4UIVPROC; +} +pub type PFNGLTEXPARAMETERIIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTexParameterIiv: PFNGLTEXPARAMETERIIVPROC; +} +pub type PFNGLTEXPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTexParameterIuiv: PFNGLTEXPARAMETERIUIVPROC; +} +pub type PFNGLGETTEXPARAMETERIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTexParameterIiv: PFNGLGETTEXPARAMETERIIVPROC; +} +pub type PFNGLGETTEXPARAMETERIUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTexParameterIuiv: PFNGLGETTEXPARAMETERIUIVPROC; +} +pub type PFNGLCLEARBUFFERIVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferiv: PFNGLCLEARBUFFERIVPROC; +} +pub type PFNGLCLEARBUFFERUIVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferuiv: PFNGLCLEARBUFFERUIVPROC; +} +pub type PFNGLCLEARBUFFERFVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferfv: PFNGLCLEARBUFFERFVPROC; +} +pub type PFNGLCLEARBUFFERFIPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferfi: PFNGLCLEARBUFFERFIPROC; +} +pub type PFNGLGETSTRINGIPROC = + ::std::option::Option *const GLubyte>; +unsafe extern "C" { + pub static mut glad_glGetStringi: PFNGLGETSTRINGIPROC; +} +pub type PFNGLISRENDERBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsRenderbuffer: PFNGLISRENDERBUFFERPROC; +} +pub type PFNGLBINDRENDERBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindRenderbuffer: PFNGLBINDRENDERBUFFERPROC; +} +pub type PFNGLDELETERENDERBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteRenderbuffers: PFNGLDELETERENDERBUFFERSPROC; +} +pub type PFNGLGENRENDERBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenRenderbuffers: PFNGLGENRENDERBUFFERSPROC; +} +pub type PFNGLRENDERBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glRenderbufferStorage: PFNGLRENDERBUFFERSTORAGEPROC; +} +pub type PFNGLGETRENDERBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetRenderbufferParameteriv: PFNGLGETRENDERBUFFERPARAMETERIVPROC; +} +pub type PFNGLISFRAMEBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsFramebuffer: PFNGLISFRAMEBUFFERPROC; +} +pub type PFNGLBINDFRAMEBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindFramebuffer: PFNGLBINDFRAMEBUFFERPROC; +} +pub type PFNGLDELETEFRAMEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteFramebuffers: PFNGLDELETEFRAMEBUFFERSPROC; +} +pub type PFNGLGENFRAMEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenFramebuffers: PFNGLGENFRAMEBUFFERSPROC; +} +pub type PFNGLCHECKFRAMEBUFFERSTATUSPROC = + ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glCheckFramebufferStatus: PFNGLCHECKFRAMEBUFFERSTATUSPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + textarget: GLenum, + texture: GLuint, + level: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture1D: PFNGLFRAMEBUFFERTEXTURE1DPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + textarget: GLenum, + texture: GLuint, + level: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture2D: PFNGLFRAMEBUFFERTEXTURE2DPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + textarget: GLenum, + texture: GLuint, + level: GLint, + zoffset: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture3D: PFNGLFRAMEBUFFERTEXTURE3DPROC; +} +pub type PFNGLFRAMEBUFFERRENDERBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + renderbuffertarget: GLenum, + renderbuffer: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferRenderbuffer: PFNGLFRAMEBUFFERRENDERBUFFERPROC; +} +pub type PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetFramebufferAttachmentParameteriv: + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC; +} +pub type PFNGLGENERATEMIPMAPPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenerateMipmap: PFNGLGENERATEMIPMAPPROC; +} +pub type PFNGLBLITFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + srcX0: GLint, + srcY0: GLint, + srcX1: GLint, + srcY1: GLint, + dstX0: GLint, + dstY0: GLint, + dstX1: GLint, + dstY1: GLint, + mask: GLbitfield, + filter: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlitFramebuffer: PFNGLBLITFRAMEBUFFERPROC; +} +pub type PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glRenderbufferStorageMultisample: PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC; +} +pub type PFNGLFRAMEBUFFERTEXTURELAYERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + attachment: GLenum, + texture: GLuint, + level: GLint, + layer: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTextureLayer: PFNGLFRAMEBUFFERTEXTURELAYERPROC; +} +pub type PFNGLMAPBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + offset: GLintptr, + length: GLsizeiptr, + access: GLbitfield, + ) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapBufferRange: PFNGLMAPBUFFERRANGEPROC; +} +pub type PFNGLFLUSHMAPPEDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, offset: GLintptr, length: GLsizeiptr), +>; +unsafe extern "C" { + pub static mut glad_glFlushMappedBufferRange: PFNGLFLUSHMAPPEDBUFFERRANGEPROC; +} +pub type PFNGLBINDVERTEXARRAYPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindVertexArray: PFNGLBINDVERTEXARRAYPROC; +} +pub type PFNGLDELETEVERTEXARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteVertexArrays: PFNGLDELETEVERTEXARRAYSPROC; +} +pub type PFNGLGENVERTEXARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenVertexArrays: PFNGLGENVERTEXARRAYSPROC; +} +pub type PFNGLISVERTEXARRAYPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsVertexArray: PFNGLISVERTEXARRAYPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_1: ::std::os::raw::c_int; +} +pub type PFNGLDRAWARRAYSINSTANCEDPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glDrawArraysInstanced: PFNGLDRAWARRAYSINSTANCEDPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstanced: PFNGLDRAWELEMENTSINSTANCEDPROC; +} +pub type PFNGLTEXBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, internalformat: GLenum, buffer: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTexBuffer: PFNGLTEXBUFFERPROC; +} +pub type PFNGLPRIMITIVERESTARTINDEXPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPrimitiveRestartIndex: PFNGLPRIMITIVERESTARTINDEXPROC; +} +pub type PFNGLCOPYBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + readTarget: GLenum, + writeTarget: GLenum, + readOffset: GLintptr, + writeOffset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyBufferSubData: PFNGLCOPYBUFFERSUBDATAPROC; +} +pub type PFNGLGETUNIFORMINDICESPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformCount: GLsizei, + uniformNames: *const *const GLchar, + uniformIndices: *mut GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformIndices: PFNGLGETUNIFORMINDICESPROC; +} +pub type PFNGLGETACTIVEUNIFORMSIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformCount: GLsizei, + uniformIndices: *const GLuint, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformsiv: PFNGLGETACTIVEUNIFORMSIVPROC; +} +pub type PFNGLGETACTIVEUNIFORMNAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformIndex: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + uniformName: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformName: PFNGLGETACTIVEUNIFORMNAMEPROC; +} +pub type PFNGLGETUNIFORMBLOCKINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, uniformBlockName: *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetUniformBlockIndex: PFNGLGETUNIFORMBLOCKINDEXPROC; +} +pub type PFNGLGETACTIVEUNIFORMBLOCKIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformBlockIndex: GLuint, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformBlockiv: PFNGLGETACTIVEUNIFORMBLOCKIVPROC; +} +pub type PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + uniformBlockIndex: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + uniformBlockName: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveUniformBlockName: PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC; +} +pub type PFNGLUNIFORMBLOCKBINDINGPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniformBlockBinding: PFNGLUNIFORMBLOCKBINDINGPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_2: ::std::os::raw::c_int; +} +pub type PFNGLDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + basevertex: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsBaseVertex: PFNGLDRAWELEMENTSBASEVERTEXPROC; +} +pub type PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + start: GLuint, + end: GLuint, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + basevertex: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawRangeElementsBaseVertex: PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + basevertex: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstancedBaseVertex: PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC; +} +pub type PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: *const GLsizei, + type_: GLenum, + indices: *const *const ::std::os::raw::c_void, + drawcount: GLsizei, + basevertex: *const GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElementsBaseVertex: PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC; +} +pub type PFNGLPROVOKINGVERTEXPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProvokingVertex: PFNGLPROVOKINGVERTEXPROC; +} +pub type PFNGLFENCESYNCPROC = + ::std::option::Option GLsync>; +unsafe extern "C" { + pub static mut glad_glFenceSync: PFNGLFENCESYNCPROC; +} +pub type PFNGLISSYNCPROC = ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsSync: PFNGLISSYNCPROC; +} +pub type PFNGLDELETESYNCPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteSync: PFNGLDELETESYNCPROC; +} +pub type PFNGLCLIENTWAITSYNCPROC = ::std::option::Option< + unsafe extern "C" fn(sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> GLenum, +>; +unsafe extern "C" { + pub static mut glad_glClientWaitSync: PFNGLCLIENTWAITSYNCPROC; +} +pub type PFNGLWAITSYNCPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glWaitSync: PFNGLWAITSYNCPROC; +} +pub type PFNGLGETINTEGER64VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetInteger64v: PFNGLGETINTEGER64VPROC; +} +pub type PFNGLGETSYNCIVPROC = ::std::option::Option< + unsafe extern "C" fn( + sync: GLsync, + pname: GLenum, + count: GLsizei, + length: *mut GLsizei, + values: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetSynciv: PFNGLGETSYNCIVPROC; +} +pub type PFNGLGETINTEGER64I_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetInteger64i_v: PFNGLGETINTEGER64I_VPROC; +} +pub type PFNGLGETBUFFERPARAMETERI64VPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetBufferParameteri64v: PFNGLGETBUFFERPARAMETERI64VPROC; +} +pub type PFNGLFRAMEBUFFERTEXTUREPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, attachment: GLenum, texture: GLuint, level: GLint), +>; +unsafe extern "C" { + pub static mut glad_glFramebufferTexture: PFNGLFRAMEBUFFERTEXTUREPROC; +} +pub type PFNGLTEXIMAGE2DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage2DMultisample: PFNGLTEXIMAGE2DMULTISAMPLEPROC; +} +pub type PFNGLTEXIMAGE3DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexImage3DMultisample: PFNGLTEXIMAGE3DMULTISAMPLEPROC; +} +pub type PFNGLGETMULTISAMPLEFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetMultisamplefv: PFNGLGETMULTISAMPLEFVPROC; +} +pub type PFNGLSAMPLEMASKIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSampleMaski: PFNGLSAMPLEMASKIPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_3_3: ::std::os::raw::c_int; +} +pub type PFNGLBINDFRAGDATALOCATIONINDEXEDPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, colorNumber: GLuint, index: GLuint, name: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glBindFragDataLocationIndexed: PFNGLBINDFRAGDATALOCATIONINDEXEDPROC; +} +pub type PFNGLGETFRAGDATAINDEXPROC = + ::std::option::Option GLint>; +unsafe extern "C" { + pub static mut glad_glGetFragDataIndex: PFNGLGETFRAGDATAINDEXPROC; +} +pub type PFNGLGENSAMPLERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenSamplers: PFNGLGENSAMPLERSPROC; +} +pub type PFNGLDELETESAMPLERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteSamplers: PFNGLDELETESAMPLERSPROC; +} +pub type PFNGLISSAMPLERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsSampler: PFNGLISSAMPLERPROC; +} +pub type PFNGLBINDSAMPLERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindSampler: PFNGLBINDSAMPLERPROC; +} +pub type PFNGLSAMPLERPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSamplerParameteri: PFNGLSAMPLERPARAMETERIPROC; +} +pub type PFNGLSAMPLERPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameteriv: PFNGLSAMPLERPARAMETERIVPROC; +} +pub type PFNGLSAMPLERPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSamplerParameterf: PFNGLSAMPLERPARAMETERFPROC; +} +pub type PFNGLSAMPLERPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameterfv: PFNGLSAMPLERPARAMETERFVPROC; +} +pub type PFNGLSAMPLERPARAMETERIIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameterIiv: PFNGLSAMPLERPARAMETERIIVPROC; +} +pub type PFNGLSAMPLERPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glSamplerParameterIuiv: PFNGLSAMPLERPARAMETERIUIVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameteriv: PFNGLGETSAMPLERPARAMETERIVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameterIiv: PFNGLGETSAMPLERPARAMETERIIVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameterfv: PFNGLGETSAMPLERPARAMETERFVPROC; +} +pub type PFNGLGETSAMPLERPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetSamplerParameterIuiv: PFNGLGETSAMPLERPARAMETERIUIVPROC; +} +pub type PFNGLQUERYCOUNTERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glQueryCounter: PFNGLQUERYCOUNTERPROC; +} +pub type PFNGLGETQUERYOBJECTI64VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjecti64v: PFNGLGETQUERYOBJECTI64VPROC; +} +pub type PFNGLGETQUERYOBJECTUI64VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetQueryObjectui64v: PFNGLGETQUERYOBJECTUI64VPROC; +} +pub type PFNGLVERTEXATTRIBDIVISORPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribDivisor: PFNGLVERTEXATTRIBDIVISORPROC; +} +pub type PFNGLVERTEXATTRIBP1UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP1ui: PFNGLVERTEXATTRIBP1UIPROC; +} +pub type PFNGLVERTEXATTRIBP1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP1uiv: PFNGLVERTEXATTRIBP1UIVPROC; +} +pub type PFNGLVERTEXATTRIBP2UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP2ui: PFNGLVERTEXATTRIBP2UIPROC; +} +pub type PFNGLVERTEXATTRIBP2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP2uiv: PFNGLVERTEXATTRIBP2UIVPROC; +} +pub type PFNGLVERTEXATTRIBP3UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP3ui: PFNGLVERTEXATTRIBP3UIPROC; +} +pub type PFNGLVERTEXATTRIBP3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP3uiv: PFNGLVERTEXATTRIBP3UIVPROC; +} +pub type PFNGLVERTEXATTRIBP4UIPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP4ui: PFNGLVERTEXATTRIBP4UIPROC; +} +pub type PFNGLVERTEXATTRIBP4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribP4uiv: PFNGLVERTEXATTRIBP4UIVPROC; +} +pub type PFNGLVERTEXP2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP2ui: PFNGLVERTEXP2UIPROC; +} +pub type PFNGLVERTEXP2UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP2uiv: PFNGLVERTEXP2UIVPROC; +} +pub type PFNGLVERTEXP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP3ui: PFNGLVERTEXP3UIPROC; +} +pub type PFNGLVERTEXP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP3uiv: PFNGLVERTEXP3UIVPROC; +} +pub type PFNGLVERTEXP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP4ui: PFNGLVERTEXP4UIPROC; +} +pub type PFNGLVERTEXP4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexP4uiv: PFNGLVERTEXP4UIVPROC; +} +pub type PFNGLTEXCOORDP1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP1ui: PFNGLTEXCOORDP1UIPROC; +} +pub type PFNGLTEXCOORDP1UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP1uiv: PFNGLTEXCOORDP1UIVPROC; +} +pub type PFNGLTEXCOORDP2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP2ui: PFNGLTEXCOORDP2UIPROC; +} +pub type PFNGLTEXCOORDP2UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP2uiv: PFNGLTEXCOORDP2UIVPROC; +} +pub type PFNGLTEXCOORDP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP3ui: PFNGLTEXCOORDP3UIPROC; +} +pub type PFNGLTEXCOORDP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP3uiv: PFNGLTEXCOORDP3UIVPROC; +} +pub type PFNGLTEXCOORDP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP4ui: PFNGLTEXCOORDP4UIPROC; +} +pub type PFNGLTEXCOORDP4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTexCoordP4uiv: PFNGLTEXCOORDP4UIVPROC; +} +pub type PFNGLMULTITEXCOORDP1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP1ui: PFNGLMULTITEXCOORDP1UIPROC; +} +pub type PFNGLMULTITEXCOORDP1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP1uiv: PFNGLMULTITEXCOORDP1UIVPROC; +} +pub type PFNGLMULTITEXCOORDP2UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP2ui: PFNGLMULTITEXCOORDP2UIPROC; +} +pub type PFNGLMULTITEXCOORDP2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP2uiv: PFNGLMULTITEXCOORDP2UIVPROC; +} +pub type PFNGLMULTITEXCOORDP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP3ui: PFNGLMULTITEXCOORDP3UIPROC; +} +pub type PFNGLMULTITEXCOORDP3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP3uiv: PFNGLMULTITEXCOORDP3UIVPROC; +} +pub type PFNGLMULTITEXCOORDP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP4ui: PFNGLMULTITEXCOORDP4UIPROC; +} +pub type PFNGLMULTITEXCOORDP4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glMultiTexCoordP4uiv: PFNGLMULTITEXCOORDP4UIVPROC; +} +pub type PFNGLNORMALP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNormalP3ui: PFNGLNORMALP3UIPROC; +} +pub type PFNGLNORMALP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNormalP3uiv: PFNGLNORMALP3UIVPROC; +} +pub type PFNGLCOLORP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP3ui: PFNGLCOLORP3UIPROC; +} +pub type PFNGLCOLORP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP3uiv: PFNGLCOLORP3UIVPROC; +} +pub type PFNGLCOLORP4UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP4ui: PFNGLCOLORP4UIPROC; +} +pub type PFNGLCOLORP4UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glColorP4uiv: PFNGLCOLORP4UIVPROC; +} +pub type PFNGLSECONDARYCOLORP3UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSecondaryColorP3ui: PFNGLSECONDARYCOLORP3UIPROC; +} +pub type PFNGLSECONDARYCOLORP3UIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glSecondaryColorP3uiv: PFNGLSECONDARYCOLORP3UIVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_0: ::std::os::raw::c_int; +} +pub type PFNGLMINSAMPLESHADINGPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMinSampleShading: PFNGLMINSAMPLESHADINGPROC; +} +pub type PFNGLBLENDEQUATIONIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquationi: PFNGLBLENDEQUATIONIPROC; +} +pub type PFNGLBLENDEQUATIONSEPARATEIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendEquationSeparatei: PFNGLBLENDEQUATIONSEPARATEIPROC; +} +pub type PFNGLBLENDFUNCIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBlendFunci: PFNGLBLENDFUNCIPROC; +} +pub type PFNGLBLENDFUNCSEPARATEIPROC = ::std::option::Option< + unsafe extern "C" fn( + buf: GLuint, + srcRGB: GLenum, + dstRGB: GLenum, + srcAlpha: GLenum, + dstAlpha: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlendFuncSeparatei: PFNGLBLENDFUNCSEPARATEIPROC; +} +pub type PFNGLDRAWARRAYSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, indirect: *const ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glDrawArraysIndirect: PFNGLDRAWARRAYSINDIRECTPROC; +} +pub type PFNGLDRAWELEMENTSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, type_: GLenum, indirect: *const ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsIndirect: PFNGLDRAWELEMENTSINDIRECTPROC; +} +pub type PFNGLUNIFORM1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform1d: PFNGLUNIFORM1DPROC; +} +pub type PFNGLUNIFORM2DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glUniform2d: PFNGLUNIFORM2DPROC; +} +pub type PFNGLUNIFORM3DPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, x: GLdouble, y: GLdouble, z: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform3d: PFNGLUNIFORM3DPROC; +} +pub type PFNGLUNIFORM4DPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform4d: PFNGLUNIFORM4DPROC; +} +pub type PFNGLUNIFORM1DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform1dv: PFNGLUNIFORM1DVPROC; +} +pub type PFNGLUNIFORM2DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform2dv: PFNGLUNIFORM2DVPROC; +} +pub type PFNGLUNIFORM3DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform3dv: PFNGLUNIFORM3DVPROC; +} +pub type PFNGLUNIFORM4DVPROC = ::std::option::Option< + unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glUniform4dv: PFNGLUNIFORM4DVPROC; +} +pub type PFNGLUNIFORMMATRIX2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2dv: PFNGLUNIFORMMATRIX2DVPROC; +} +pub type PFNGLUNIFORMMATRIX3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3dv: PFNGLUNIFORMMATRIX3DVPROC; +} +pub type PFNGLUNIFORMMATRIX4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4dv: PFNGLUNIFORMMATRIX4DVPROC; +} +pub type PFNGLUNIFORMMATRIX2X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x3dv: PFNGLUNIFORMMATRIX2X3DVPROC; +} +pub type PFNGLUNIFORMMATRIX2X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix2x4dv: PFNGLUNIFORMMATRIX2X4DVPROC; +} +pub type PFNGLUNIFORMMATRIX3X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x2dv: PFNGLUNIFORMMATRIX3X2DVPROC; +} +pub type PFNGLUNIFORMMATRIX3X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix3x4dv: PFNGLUNIFORMMATRIX3X4DVPROC; +} +pub type PFNGLUNIFORMMATRIX4X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x2dv: PFNGLUNIFORMMATRIX4X2DVPROC; +} +pub type PFNGLUNIFORMMATRIX4X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glUniformMatrix4x3dv: PFNGLUNIFORMMATRIX4X3DVPROC; +} +pub type PFNGLGETUNIFORMDVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformdv: PFNGLGETUNIFORMDVPROC; +} +pub type PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, shadertype: GLenum, name: *const GLchar) -> GLint, +>; +unsafe extern "C" { + pub static mut glad_glGetSubroutineUniformLocation: PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC; +} +pub type PFNGLGETSUBROUTINEINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, shadertype: GLenum, name: *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetSubroutineIndex: PFNGLGETSUBROUTINEINDEXPROC; +} +pub type PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + shadertype: GLenum, + index: GLuint, + pname: GLenum, + values: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveSubroutineUniformiv: PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC; +} +pub type PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + shadertype: GLenum, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveSubroutineUniformName: PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC; +} +pub type PFNGLGETACTIVESUBROUTINENAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + shadertype: GLenum, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveSubroutineName: PFNGLGETACTIVESUBROUTINENAMEPROC; +} +pub type PFNGLUNIFORMSUBROUTINESUIVPROC = ::std::option::Option< + unsafe extern "C" fn(shadertype: GLenum, count: GLsizei, indices: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUniformSubroutinesuiv: PFNGLUNIFORMSUBROUTINESUIVPROC; +} +pub type PFNGLGETUNIFORMSUBROUTINEUIVPROC = ::std::option::Option< + unsafe extern "C" fn(shadertype: GLenum, location: GLint, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetUniformSubroutineuiv: PFNGLGETUNIFORMSUBROUTINEUIVPROC; +} +pub type PFNGLGETPROGRAMSTAGEIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, shadertype: GLenum, pname: GLenum, values: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramStageiv: PFNGLGETPROGRAMSTAGEIVPROC; +} +pub type PFNGLPATCHPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPatchParameteri: PFNGLPATCHPARAMETERIPROC; +} +pub type PFNGLPATCHPARAMETERFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPatchParameterfv: PFNGLPATCHPARAMETERFVPROC; +} +pub type PFNGLBINDTRANSFORMFEEDBACKPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindTransformFeedback: PFNGLBINDTRANSFORMFEEDBACKPROC; +} +pub type PFNGLDELETETRANSFORMFEEDBACKSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteTransformFeedbacks: PFNGLDELETETRANSFORMFEEDBACKSPROC; +} +pub type PFNGLGENTRANSFORMFEEDBACKSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenTransformFeedbacks: PFNGLGENTRANSFORMFEEDBACKSPROC; +} +pub type PFNGLISTRANSFORMFEEDBACKPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsTransformFeedback: PFNGLISTRANSFORMFEEDBACKPROC; +} +pub type PFNGLPAUSETRANSFORMFEEDBACKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPauseTransformFeedback: PFNGLPAUSETRANSFORMFEEDBACKPROC; +} +pub type PFNGLRESUMETRANSFORMFEEDBACKPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glResumeTransformFeedback: PFNGLRESUMETRANSFORMFEEDBACKPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedback: PFNGLDRAWTRANSFORMFEEDBACKPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedbackStream: PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC; +} +pub type PFNGLBEGINQUERYINDEXEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBeginQueryIndexed: PFNGLBEGINQUERYINDEXEDPROC; +} +pub type PFNGLENDQUERYINDEXEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEndQueryIndexed: PFNGLENDQUERYINDEXEDPROC; +} +pub type PFNGLGETQUERYINDEXEDIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, index: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryIndexediv: PFNGLGETQUERYINDEXEDIVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_1: ::std::os::raw::c_int; +} +pub type PFNGLRELEASESHADERCOMPILERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glReleaseShaderCompiler: PFNGLRELEASESHADERCOMPILERPROC; +} +pub type PFNGLSHADERBINARYPROC = ::std::option::Option< + unsafe extern "C" fn( + count: GLsizei, + shaders: *const GLuint, + binaryFormat: GLenum, + binary: *const ::std::os::raw::c_void, + length: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glShaderBinary: PFNGLSHADERBINARYPROC; +} +pub type PFNGLGETSHADERPRECISIONFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + shadertype: GLenum, + precisiontype: GLenum, + range: *mut GLint, + precision: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetShaderPrecisionFormat: PFNGLGETSHADERPRECISIONFORMATPROC; +} +pub type PFNGLDEPTHRANGEFPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRangef: PFNGLDEPTHRANGEFPROC; +} +pub type PFNGLCLEARDEPTHFPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClearDepthf: PFNGLCLEARDEPTHFPROC; +} +pub type PFNGLGETPROGRAMBINARYPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + binaryFormat: *mut GLenum, + binary: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramBinary: PFNGLGETPROGRAMBINARYPROC; +} +pub type PFNGLPROGRAMBINARYPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + binaryFormat: GLenum, + binary: *const ::std::os::raw::c_void, + length: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramBinary: PFNGLPROGRAMBINARYPROC; +} +pub type PFNGLPROGRAMPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramParameteri: PFNGLPROGRAMPARAMETERIPROC; +} +pub type PFNGLUSEPROGRAMSTAGESPROC = ::std::option::Option< + unsafe extern "C" fn(pipeline: GLuint, stages: GLbitfield, program: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glUseProgramStages: PFNGLUSEPROGRAMSTAGESPROC; +} +pub type PFNGLACTIVESHADERPROGRAMPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glActiveShaderProgram: PFNGLACTIVESHADERPROGRAMPROC; +} +pub type PFNGLCREATESHADERPROGRAMVPROC = ::std::option::Option< + unsafe extern "C" fn(type_: GLenum, count: GLsizei, strings: *const *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glCreateShaderProgramv: PFNGLCREATESHADERPROGRAMVPROC; +} +pub type PFNGLBINDPROGRAMPIPELINEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindProgramPipeline: PFNGLBINDPROGRAMPIPELINEPROC; +} +pub type PFNGLDELETEPROGRAMPIPELINESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDeleteProgramPipelines: PFNGLDELETEPROGRAMPIPELINESPROC; +} +pub type PFNGLGENPROGRAMPIPELINESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenProgramPipelines: PFNGLGENPROGRAMPIPELINESPROC; +} +pub type PFNGLISPROGRAMPIPELINEPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glIsProgramPipeline: PFNGLISPROGRAMPIPELINEPROC; +} +pub type PFNGLGETPROGRAMPIPELINEIVPROC = ::std::option::Option< + unsafe extern "C" fn(pipeline: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramPipelineiv: PFNGLGETPROGRAMPIPELINEIVPROC; +} +pub type PFNGLPROGRAMUNIFORM1IPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1i: PFNGLPROGRAMUNIFORM1IPROC; +} +pub type PFNGLPROGRAMUNIFORM1IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1iv: PFNGLPROGRAMUNIFORM1IVPROC; +} +pub type PFNGLPROGRAMUNIFORM1FPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1f: PFNGLPROGRAMUNIFORM1FPROC; +} +pub type PFNGLPROGRAMUNIFORM1FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1fv: PFNGLPROGRAMUNIFORM1FVPROC; +} +pub type PFNGLPROGRAMUNIFORM1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1d: PFNGLPROGRAMUNIFORM1DPROC; +} +pub type PFNGLPROGRAMUNIFORM1DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1dv: PFNGLPROGRAMUNIFORM1DVPROC; +} +pub type PFNGLPROGRAMUNIFORM1UIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glProgramUniform1ui: PFNGLPROGRAMUNIFORM1UIPROC; +} +pub type PFNGLPROGRAMUNIFORM1UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform1uiv: PFNGLPROGRAMUNIFORM1UIVPROC; +} +pub type PFNGLPROGRAMUNIFORM2IPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLint, v1: GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2i: PFNGLPROGRAMUNIFORM2IPROC; +} +pub type PFNGLPROGRAMUNIFORM2IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2iv: PFNGLPROGRAMUNIFORM2IVPROC; +} +pub type PFNGLPROGRAMUNIFORM2FPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2f: PFNGLPROGRAMUNIFORM2FPROC; +} +pub type PFNGLPROGRAMUNIFORM2FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2fv: PFNGLPROGRAMUNIFORM2FVPROC; +} +pub type PFNGLPROGRAMUNIFORM2DPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2d: PFNGLPROGRAMUNIFORM2DPROC; +} +pub type PFNGLPROGRAMUNIFORM2DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2dv: PFNGLPROGRAMUNIFORM2DVPROC; +} +pub type PFNGLPROGRAMUNIFORM2UIPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLuint, v1: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2ui: PFNGLPROGRAMUNIFORM2UIPROC; +} +pub type PFNGLPROGRAMUNIFORM2UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform2uiv: PFNGLPROGRAMUNIFORM2UIVPROC; +} +pub type PFNGLPROGRAMUNIFORM3IPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3i: PFNGLPROGRAMUNIFORM3IPROC; +} +pub type PFNGLPROGRAMUNIFORM3IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3iv: PFNGLPROGRAMUNIFORM3IVPROC; +} +pub type PFNGLPROGRAMUNIFORM3FPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3f: PFNGLPROGRAMUNIFORM3FPROC; +} +pub type PFNGLPROGRAMUNIFORM3FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3fv: PFNGLPROGRAMUNIFORM3FVPROC; +} +pub type PFNGLPROGRAMUNIFORM3DPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLdouble, + v1: GLdouble, + v2: GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3d: PFNGLPROGRAMUNIFORM3DPROC; +} +pub type PFNGLPROGRAMUNIFORM3DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3dv: PFNGLPROGRAMUNIFORM3DVPROC; +} +pub type PFNGLPROGRAMUNIFORM3UIPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3ui: PFNGLPROGRAMUNIFORM3UIPROC; +} +pub type PFNGLPROGRAMUNIFORM3UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform3uiv: PFNGLPROGRAMUNIFORM3UIVPROC; +} +pub type PFNGLPROGRAMUNIFORM4IPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLint, + v1: GLint, + v2: GLint, + v3: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4i: PFNGLPROGRAMUNIFORM4IPROC; +} +pub type PFNGLPROGRAMUNIFORM4IVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4iv: PFNGLPROGRAMUNIFORM4IVPROC; +} +pub type PFNGLPROGRAMUNIFORM4FPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLfloat, + v1: GLfloat, + v2: GLfloat, + v3: GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4f: PFNGLPROGRAMUNIFORM4FPROC; +} +pub type PFNGLPROGRAMUNIFORM4FVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4fv: PFNGLPROGRAMUNIFORM4FVPROC; +} +pub type PFNGLPROGRAMUNIFORM4DPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLdouble, + v1: GLdouble, + v2: GLdouble, + v3: GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4d: PFNGLPROGRAMUNIFORM4DPROC; +} +pub type PFNGLPROGRAMUNIFORM4DVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4dv: PFNGLPROGRAMUNIFORM4DVPROC; +} +pub type PFNGLPROGRAMUNIFORM4UIPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + v0: GLuint, + v1: GLuint, + v2: GLuint, + v3: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4ui: PFNGLPROGRAMUNIFORM4UIPROC; +} +pub type PFNGLPROGRAMUNIFORM4UIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, count: GLsizei, value: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniform4uiv: PFNGLPROGRAMUNIFORM4UIVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2fv: PFNGLPROGRAMUNIFORMMATRIX2FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3fv: PFNGLPROGRAMUNIFORMMATRIX3FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4fv: PFNGLPROGRAMUNIFORMMATRIX4FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2dv: PFNGLPROGRAMUNIFORMMATRIX2DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3dv: PFNGLPROGRAMUNIFORMMATRIX3DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4dv: PFNGLPROGRAMUNIFORMMATRIX4DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x3fv: PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x2fv: PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x4fv: PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x2fv: PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x4fv: PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x3fv: PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x3dv: PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x2dv: PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix2x4dv: PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x2dv: PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix3x4dv: PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC; +} +pub type PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + location: GLint, + count: GLsizei, + transpose: GLboolean, + value: *const GLdouble, + ), +>; +unsafe extern "C" { + pub static mut glad_glProgramUniformMatrix4x3dv: PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC; +} +pub type PFNGLVALIDATEPROGRAMPIPELINEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glValidateProgramPipeline: PFNGLVALIDATEPROGRAMPIPELINEPROC; +} +pub type PFNGLGETPROGRAMPIPELINEINFOLOGPROC = ::std::option::Option< + unsafe extern "C" fn( + pipeline: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + infoLog: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramPipelineInfoLog: PFNGLGETPROGRAMPIPELINEINFOLOGPROC; +} +pub type PFNGLVERTEXATTRIBL1DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL1d: PFNGLVERTEXATTRIBL1DPROC; +} +pub type PFNGLVERTEXATTRIBL2DPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL2d: PFNGLVERTEXATTRIBL2DPROC; +} +pub type PFNGLVERTEXATTRIBL3DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribL3d: PFNGLVERTEXATTRIBL3DPROC; +} +pub type PFNGLVERTEXATTRIBL4DPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribL4d: PFNGLVERTEXATTRIBL4DPROC; +} +pub type PFNGLVERTEXATTRIBL1DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL1dv: PFNGLVERTEXATTRIBL1DVPROC; +} +pub type PFNGLVERTEXATTRIBL2DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL2dv: PFNGLVERTEXATTRIBL2DVPROC; +} +pub type PFNGLVERTEXATTRIBL3DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL3dv: PFNGLVERTEXATTRIBL3DVPROC; +} +pub type PFNGLVERTEXATTRIBL4DVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribL4dv: PFNGLVERTEXATTRIBL4DVPROC; +} +pub type PFNGLVERTEXATTRIBLPOINTERPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + size: GLint, + type_: GLenum, + stride: GLsizei, + pointer: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribLPointer: PFNGLVERTEXATTRIBLPOINTERPROC; +} +pub type PFNGLGETVERTEXATTRIBLDVPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexAttribLdv: PFNGLGETVERTEXATTRIBLDVPROC; +} +pub type PFNGLVIEWPORTARRAYVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glViewportArrayv: PFNGLVIEWPORTARRAYVPROC; +} +pub type PFNGLVIEWPORTINDEXEDFPROC = ::std::option::Option< + unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, w: GLfloat, h: GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glViewportIndexedf: PFNGLVIEWPORTINDEXEDFPROC; +} +pub type PFNGLVIEWPORTINDEXEDFVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glViewportIndexedfv: PFNGLVIEWPORTINDEXEDFVPROC; +} +pub type PFNGLSCISSORARRAYVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glScissorArrayv: PFNGLSCISSORARRAYVPROC; +} +pub type PFNGLSCISSORINDEXEDPROC = ::std::option::Option< + unsafe extern "C" fn( + index: GLuint, + left: GLint, + bottom: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glScissorIndexed: PFNGLSCISSORINDEXEDPROC; +} +pub type PFNGLSCISSORINDEXEDVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glScissorIndexedv: PFNGLSCISSORINDEXEDVPROC; +} +pub type PFNGLDEPTHRANGEARRAYVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRangeArrayv: PFNGLDEPTHRANGEARRAYVPROC; +} +pub type PFNGLDEPTHRANGEINDEXEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDepthRangeIndexed: PFNGLDEPTHRANGEINDEXEDPROC; +} +pub type PFNGLGETFLOATI_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetFloati_v: PFNGLGETFLOATI_VPROC; +} +pub type PFNGLGETDOUBLEI_VPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetDoublei_v: PFNGLGETDOUBLEI_VPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_2: ::std::os::raw::c_int; +} +pub type PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + first: GLint, + count: GLsizei, + instancecount: GLsizei, + baseinstance: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawArraysInstancedBaseInstance: PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + baseinstance: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstancedBaseInstance: + PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC; +} +pub type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + count: GLsizei, + type_: GLenum, + indices: *const ::std::os::raw::c_void, + instancecount: GLsizei, + basevertex: GLint, + baseinstance: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glDrawElementsInstancedBaseVertexBaseInstance: + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC; +} +pub type PFNGLGETINTERNALFORMATIVPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + pname: GLenum, + count: GLsizei, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetInternalformativ: PFNGLGETINTERNALFORMATIVPROC; +} +pub type PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, bufferIndex: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetActiveAtomicCounterBufferiv: PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC; +} +pub type PFNGLBINDIMAGETEXTUREPROC = ::std::option::Option< + unsafe extern "C" fn( + unit: GLuint, + texture: GLuint, + level: GLint, + layered: GLboolean, + layer: GLint, + access: GLenum, + format: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindImageTexture: PFNGLBINDIMAGETEXTUREPROC; +} +pub type PFNGLMEMORYBARRIERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMemoryBarrier: PFNGLMEMORYBARRIERPROC; +} +pub type PFNGLTEXSTORAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage1D: PFNGLTEXSTORAGE1DPROC; +} +pub type PFNGLTEXSTORAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage2D: PFNGLTEXSTORAGE2DPROC; +} +pub type PFNGLTEXSTORAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage3D: PFNGLTEXSTORAGE3DPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedbackInstanced: PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC; +} +pub type PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC = ::std::option::Option< + unsafe extern "C" fn(mode: GLenum, id: GLuint, stream: GLuint, instancecount: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glDrawTransformFeedbackStreamInstanced: + PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_3: ::std::os::raw::c_int; +} +pub type PFNGLCLEARBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferData: PFNGLCLEARBUFFERDATAPROC; +} +pub type PFNGLCLEARBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + offset: GLintptr, + size: GLsizeiptr, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearBufferSubData: PFNGLCLEARBUFFERSUBDATAPROC; +} +pub type PFNGLDISPATCHCOMPUTEPROC = ::std::option::Option< + unsafe extern "C" fn(num_groups_x: GLuint, num_groups_y: GLuint, num_groups_z: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glDispatchCompute: PFNGLDISPATCHCOMPUTEPROC; +} +pub type PFNGLDISPATCHCOMPUTEINDIRECTPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDispatchComputeIndirect: PFNGLDISPATCHCOMPUTEINDIRECTPROC; +} +pub type PFNGLCOPYIMAGESUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + srcName: GLuint, + srcTarget: GLenum, + srcLevel: GLint, + srcX: GLint, + srcY: GLint, + srcZ: GLint, + dstName: GLuint, + dstTarget: GLenum, + dstLevel: GLint, + dstX: GLint, + dstY: GLint, + dstZ: GLint, + srcWidth: GLsizei, + srcHeight: GLsizei, + srcDepth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyImageSubData: PFNGLCOPYIMAGESUBDATAPROC; +} +pub type PFNGLFRAMEBUFFERPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glFramebufferParameteri: PFNGLFRAMEBUFFERPARAMETERIPROC; +} +pub type PFNGLGETFRAMEBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetFramebufferParameteriv: PFNGLGETFRAMEBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETINTERNALFORMATI64VPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + pname: GLenum, + count: GLsizei, + params: *mut GLint64, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetInternalformati64v: PFNGLGETINTERNALFORMATI64VPROC; +} +pub type PFNGLINVALIDATETEXSUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateTexSubImage: PFNGLINVALIDATETEXSUBIMAGEPROC; +} +pub type PFNGLINVALIDATETEXIMAGEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glInvalidateTexImage: PFNGLINVALIDATETEXIMAGEPROC; +} +pub type PFNGLINVALIDATEBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, offset: GLintptr, length: GLsizeiptr), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateBufferSubData: PFNGLINVALIDATEBUFFERSUBDATAPROC; +} +pub type PFNGLINVALIDATEBUFFERDATAPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glInvalidateBufferData: PFNGLINVALIDATEBUFFERDATAPROC; +} +pub type PFNGLINVALIDATEFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, numAttachments: GLsizei, attachments: *const GLenum), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateFramebuffer: PFNGLINVALIDATEFRAMEBUFFERPROC; +} +pub type PFNGLINVALIDATESUBFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + numAttachments: GLsizei, + attachments: *const GLenum, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateSubFramebuffer: PFNGLINVALIDATESUBFRAMEBUFFERPROC; +} +pub type PFNGLMULTIDRAWARRAYSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawArraysIndirect: PFNGLMULTIDRAWARRAYSINDIRECTPROC; +} +pub type PFNGLMULTIDRAWELEMENTSINDIRECTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + type_: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElementsIndirect: PFNGLMULTIDRAWELEMENTSINDIRECTPROC; +} +pub type PFNGLGETPROGRAMINTERFACEIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + programInterface: GLenum, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramInterfaceiv: PFNGLGETPROGRAMINTERFACEIVPROC; +} +pub type PFNGLGETPROGRAMRESOURCEINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, programInterface: GLenum, name: *const GLchar) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceIndex: PFNGLGETPROGRAMRESOURCEINDEXPROC; +} +pub type PFNGLGETPROGRAMRESOURCENAMEPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + programInterface: GLenum, + index: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + name: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceName: PFNGLGETPROGRAMRESOURCENAMEPROC; +} +pub type PFNGLGETPROGRAMRESOURCEIVPROC = ::std::option::Option< + unsafe extern "C" fn( + program: GLuint, + programInterface: GLenum, + index: GLuint, + propCount: GLsizei, + props: *const GLenum, + count: GLsizei, + length: *mut GLsizei, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceiv: PFNGLGETPROGRAMRESOURCEIVPROC; +} +pub type PFNGLGETPROGRAMRESOURCELOCATIONPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, programInterface: GLenum, name: *const GLchar) -> GLint, +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceLocation: PFNGLGETPROGRAMRESOURCELOCATIONPROC; +} +pub type PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, programInterface: GLenum, name: *const GLchar) -> GLint, +>; +unsafe extern "C" { + pub static mut glad_glGetProgramResourceLocationIndex: PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC; +} +pub type PFNGLSHADERSTORAGEBLOCKBINDINGPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, storageBlockIndex: GLuint, storageBlockBinding: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glShaderStorageBlockBinding: PFNGLSHADERSTORAGEBLOCKBINDINGPROC; +} +pub type PFNGLTEXBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + internalformat: GLenum, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexBufferRange: PFNGLTEXBUFFERRANGEPROC; +} +pub type PFNGLTEXSTORAGE2DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage2DMultisample: PFNGLTEXSTORAGE2DMULTISAMPLEPROC; +} +pub type PFNGLTEXSTORAGE3DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTexStorage3DMultisample: PFNGLTEXSTORAGE3DMULTISAMPLEPROC; +} +pub type PFNGLTEXTUREVIEWPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + target: GLenum, + origtexture: GLuint, + internalformat: GLenum, + minlevel: GLuint, + numlevels: GLuint, + minlayer: GLuint, + numlayers: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureView: PFNGLTEXTUREVIEWPROC; +} +pub type PFNGLBINDVERTEXBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glBindVertexBuffer: PFNGLBINDVERTEXBUFFERPROC; +} +pub type PFNGLVERTEXATTRIBFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + attribindex: GLuint, + size: GLint, + type_: GLenum, + normalized: GLboolean, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribFormat: PFNGLVERTEXATTRIBFORMATPROC; +} +pub type PFNGLVERTEXATTRIBIFORMATPROC = ::std::option::Option< + unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribIFormat: PFNGLVERTEXATTRIBIFORMATPROC; +} +pub type PFNGLVERTEXATTRIBLFORMATPROC = ::std::option::Option< + unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexAttribLFormat: PFNGLVERTEXATTRIBLFORMATPROC; +} +pub type PFNGLVERTEXATTRIBBINDINGPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexAttribBinding: PFNGLVERTEXATTRIBBINDINGPROC; +} +pub type PFNGLVERTEXBINDINGDIVISORPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexBindingDivisor: PFNGLVERTEXBINDINGDIVISORPROC; +} +pub type PFNGLDEBUGMESSAGECONTROLPROC = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + severity: GLenum, + count: GLsizei, + ids: *const GLuint, + enabled: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glDebugMessageControl: PFNGLDEBUGMESSAGECONTROLPROC; +} +pub type PFNGLDEBUGMESSAGEINSERTPROC = ::std::option::Option< + unsafe extern "C" fn( + source: GLenum, + type_: GLenum, + id: GLuint, + severity: GLenum, + length: GLsizei, + buf: *const GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glDebugMessageInsert: PFNGLDEBUGMESSAGEINSERTPROC; +} +pub type PFNGLDEBUGMESSAGECALLBACKPROC = ::std::option::Option< + unsafe extern "C" fn(callback: GLDEBUGPROC, userParam: *const ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glDebugMessageCallback: PFNGLDEBUGMESSAGECALLBACKPROC; +} +pub type PFNGLGETDEBUGMESSAGELOGPROC = ::std::option::Option< + unsafe extern "C" fn( + count: GLuint, + bufSize: GLsizei, + sources: *mut GLenum, + types: *mut GLenum, + ids: *mut GLuint, + severities: *mut GLenum, + lengths: *mut GLsizei, + messageLog: *mut GLchar, + ) -> GLuint, +>; +unsafe extern "C" { + pub static mut glad_glGetDebugMessageLog: PFNGLGETDEBUGMESSAGELOGPROC; +} +pub type PFNGLPUSHDEBUGGROUPPROC = ::std::option::Option< + unsafe extern "C" fn(source: GLenum, id: GLuint, length: GLsizei, message: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glPushDebugGroup: PFNGLPUSHDEBUGGROUPPROC; +} +pub type PFNGLPOPDEBUGGROUPPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPopDebugGroup: PFNGLPOPDEBUGGROUPPROC; +} +pub type PFNGLOBJECTLABELPROC = ::std::option::Option< + unsafe extern "C" fn(identifier: GLenum, name: GLuint, length: GLsizei, label: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glObjectLabel: PFNGLOBJECTLABELPROC; +} +pub type PFNGLGETOBJECTLABELPROC = ::std::option::Option< + unsafe extern "C" fn( + identifier: GLenum, + name: GLuint, + bufSize: GLsizei, + length: *mut GLsizei, + label: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetObjectLabel: PFNGLGETOBJECTLABELPROC; +} +pub type PFNGLOBJECTPTRLABELPROC = ::std::option::Option< + unsafe extern "C" fn(ptr: *const ::std::os::raw::c_void, length: GLsizei, label: *const GLchar), +>; +unsafe extern "C" { + pub static mut glad_glObjectPtrLabel: PFNGLOBJECTPTRLABELPROC; +} +pub type PFNGLGETOBJECTPTRLABELPROC = ::std::option::Option< + unsafe extern "C" fn( + ptr: *const ::std::os::raw::c_void, + bufSize: GLsizei, + length: *mut GLsizei, + label: *mut GLchar, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetObjectPtrLabel: PFNGLGETOBJECTPTRLABELPROC; +} +pub type PFNGLGETPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(pname: GLenum, params: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetPointerv: PFNGLGETPOINTERVPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_4: ::std::os::raw::c_int; +} +pub type PFNGLBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + flags: GLbitfield, + ), +>; +unsafe extern "C" { + pub static mut glad_glBufferStorage: PFNGLBUFFERSTORAGEPROC; +} +pub type PFNGLCLEARTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearTexImage: PFNGLCLEARTEXIMAGEPROC; +} +pub type PFNGLCLEARTEXSUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearTexSubImage: PFNGLCLEARTEXSUBIMAGEPROC; +} +pub type PFNGLBINDBUFFERSBASEPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindBuffersBase: PFNGLBINDBUFFERSBASEPROC; +} +pub type PFNGLBINDBUFFERSRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + first: GLuint, + count: GLsizei, + buffers: *const GLuint, + offsets: *const GLintptr, + sizes: *const GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindBuffersRange: PFNGLBINDBUFFERSRANGEPROC; +} +pub type PFNGLBINDTEXTURESPROC = ::std::option::Option< + unsafe extern "C" fn(first: GLuint, count: GLsizei, textures: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindTextures: PFNGLBINDTEXTURESPROC; +} +pub type PFNGLBINDSAMPLERSPROC = ::std::option::Option< + unsafe extern "C" fn(first: GLuint, count: GLsizei, samplers: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindSamplers: PFNGLBINDSAMPLERSPROC; +} +pub type PFNGLBINDIMAGETEXTURESPROC = ::std::option::Option< + unsafe extern "C" fn(first: GLuint, count: GLsizei, textures: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glBindImageTextures: PFNGLBINDIMAGETEXTURESPROC; +} +pub type PFNGLBINDVERTEXBUFFERSPROC = ::std::option::Option< + unsafe extern "C" fn( + first: GLuint, + count: GLsizei, + buffers: *const GLuint, + offsets: *const GLintptr, + strides: *const GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glBindVertexBuffers: PFNGLBINDVERTEXBUFFERSPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_5: ::std::os::raw::c_int; +} +pub type PFNGLCLIPCONTROLPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glClipControl: PFNGLCLIPCONTROLPROC; +} +pub type PFNGLCREATETRANSFORMFEEDBACKSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateTransformFeedbacks: PFNGLCREATETRANSFORMFEEDBACKSPROC; +} +pub type PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTransformFeedbackBufferBase: PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC; +} +pub type PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + xfb: GLuint, + index: GLuint, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glTransformFeedbackBufferRange: PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbackiv: PFNGLGETTRANSFORMFEEDBACKIVPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKI_VPROC = ::std::option::Option< + unsafe extern "C" fn(xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbacki_v: PFNGLGETTRANSFORMFEEDBACKI_VPROC; +} +pub type PFNGLGETTRANSFORMFEEDBACKI64_VPROC = ::std::option::Option< + unsafe extern "C" fn(xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetTransformFeedbacki64_v: PFNGLGETTRANSFORMFEEDBACKI64_VPROC; +} +pub type PFNGLCREATEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateBuffers: PFNGLCREATEBUFFERSPROC; +} +pub type PFNGLNAMEDBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + flags: GLbitfield, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedBufferStorage: PFNGLNAMEDBUFFERSTORAGEPROC; +} +pub type PFNGLNAMEDBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + usage: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedBufferData: PFNGLNAMEDBUFFERDATAPROC; +} +pub type PFNGLNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedBufferSubData: PFNGLNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLCOPYNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + readBuffer: GLuint, + writeBuffer: GLuint, + readOffset: GLintptr, + writeOffset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyNamedBufferSubData: PFNGLCOPYNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLCLEARNAMEDBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + internalformat: GLenum, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedBufferData: PFNGLCLEARNAMEDBUFFERDATAPROC; +} +pub type PFNGLCLEARNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + internalformat: GLenum, + offset: GLintptr, + size: GLsizeiptr, + format: GLenum, + type_: GLenum, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedBufferSubData: PFNGLCLEARNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLMAPNAMEDBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, access: GLenum) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapNamedBuffer: PFNGLMAPNAMEDBUFFERPROC; +} +pub type PFNGLMAPNAMEDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + offset: GLintptr, + length: GLsizeiptr, + access: GLbitfield, + ) -> *mut ::std::os::raw::c_void, +>; +unsafe extern "C" { + pub static mut glad_glMapNamedBufferRange: PFNGLMAPNAMEDBUFFERRANGEPROC; +} +pub type PFNGLUNMAPNAMEDBUFFERPROC = + ::std::option::Option GLboolean>; +unsafe extern "C" { + pub static mut glad_glUnmapNamedBuffer: PFNGLUNMAPNAMEDBUFFERPROC; +} +pub type PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, offset: GLintptr, length: GLsizeiptr), +>; +unsafe extern "C" { + pub static mut glad_glFlushMappedNamedBufferRange: PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC; +} +pub type PFNGLGETNAMEDBUFFERPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferParameteriv: PFNGLGETNAMEDBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETNAMEDBUFFERPARAMETERI64VPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, pname: GLenum, params: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferParameteri64v: PFNGLGETNAMEDBUFFERPARAMETERI64VPROC; +} +pub type PFNGLGETNAMEDBUFFERPOINTERVPROC = ::std::option::Option< + unsafe extern "C" fn(buffer: GLuint, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferPointerv: PFNGLGETNAMEDBUFFERPOINTERVPROC; +} +pub type PFNGLGETNAMEDBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + data: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedBufferSubData: PFNGLGETNAMEDBUFFERSUBDATAPROC; +} +pub type PFNGLCREATEFRAMEBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateFramebuffers: PFNGLCREATEFRAMEBUFFERSPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + attachment: GLenum, + renderbuffertarget: GLenum, + renderbuffer: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferRenderbuffer: PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferParameteri: PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERTEXTUREPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferTexture: PFNGLNAMEDFRAMEBUFFERTEXTUREPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + attachment: GLenum, + texture: GLuint, + level: GLint, + layer: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferTextureLayer: PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferDrawBuffer: PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, n: GLsizei, bufs: *const GLenum), +>; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferDrawBuffers: PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC; +} +pub type PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glNamedFramebufferReadBuffer: PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC; +} +pub type PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateNamedFramebufferData: PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC; +} +pub type PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + numAttachments: GLsizei, + attachments: *const GLenum, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glInvalidateNamedFramebufferSubData: + PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERIVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + value: *const GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferiv: PFNGLCLEARNAMEDFRAMEBUFFERIVPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + value: *const GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferuiv: PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERFVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + value: *const GLfloat, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferfv: PFNGLCLEARNAMEDFRAMEBUFFERFVPROC; +} +pub type PFNGLCLEARNAMEDFRAMEBUFFERFIPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + buffer: GLenum, + drawbuffer: GLint, + depth: GLfloat, + stencil: GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glClearNamedFramebufferfi: PFNGLCLEARNAMEDFRAMEBUFFERFIPROC; +} +pub type PFNGLBLITNAMEDFRAMEBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + readFramebuffer: GLuint, + drawFramebuffer: GLuint, + srcX0: GLint, + srcY0: GLint, + srcX1: GLint, + srcY1: GLint, + dstX0: GLint, + dstY0: GLint, + dstX1: GLint, + dstY1: GLint, + mask: GLbitfield, + filter: GLenum, + ), +>; +unsafe extern "C" { + pub static mut glad_glBlitNamedFramebuffer: PFNGLBLITNAMEDFRAMEBUFFERPROC; +} +pub type PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC = + ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glCheckNamedFramebufferStatus: PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC; +} +pub type PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(framebuffer: GLuint, pname: GLenum, param: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedFramebufferParameteriv: PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC; +} +pub type PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn( + framebuffer: GLuint, + attachment: GLenum, + pname: GLenum, + params: *mut GLint, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedFramebufferAttachmentParameteriv: + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC; +} +pub type PFNGLCREATERENDERBUFFERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateRenderbuffers: PFNGLCREATERENDERBUFFERSPROC; +} +pub type PFNGLNAMEDRENDERBUFFERSTORAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + renderbuffer: GLuint, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedRenderbufferStorage: PFNGLNAMEDRENDERBUFFERSTORAGEPROC; +} +pub type PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + renderbuffer: GLuint, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glNamedRenderbufferStorageMultisample: + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC; +} +pub type PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(renderbuffer: GLuint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetNamedRenderbufferParameteriv: PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC; +} +pub type PFNGLCREATETEXTURESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateTextures: PFNGLCREATETEXTURESPROC; +} +pub type PFNGLTEXTUREBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, internalformat: GLenum, buffer: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTextureBuffer: PFNGLTEXTUREBUFFERPROC; +} +pub type PFNGLTEXTUREBUFFERRANGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + internalformat: GLenum, + buffer: GLuint, + offset: GLintptr, + size: GLsizeiptr, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureBufferRange: PFNGLTEXTUREBUFFERRANGEPROC; +} +pub type PFNGLTEXTURESTORAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage1D: PFNGLTEXTURESTORAGE1DPROC; +} +pub type PFNGLTEXTURESTORAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage2D: PFNGLTEXTURESTORAGE2DPROC; +} +pub type PFNGLTEXTURESTORAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + levels: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage3D: PFNGLTEXTURESTORAGE3DPROC; +} +pub type PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage2DMultisample: PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC; +} +pub type PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + samples: GLsizei, + internalformat: GLenum, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + fixedsamplelocations: GLboolean, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureStorage3DMultisample: PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC; +} +pub type PFNGLTEXTURESUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureSubImage1D: PFNGLTEXTURESUBIMAGE1DPROC; +} +pub type PFNGLTEXTURESUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureSubImage2D: PFNGLTEXTURESUBIMAGE2DPROC; +} +pub type PFNGLTEXTURESUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + pixels: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glTextureSubImage3D: PFNGLTEXTURESUBIMAGE3DPROC; +} +pub type PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + width: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTextureSubImage1D: PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC; +} +pub type PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTextureSubImage2D: PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC; +} +pub type PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + imageSize: GLsizei, + data: *const ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glCompressedTextureSubImage3D: PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC; +} +pub type PFNGLCOPYTEXTURESUBIMAGE1DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTextureSubImage1D: PFNGLCOPYTEXTURESUBIMAGE1DPROC; +} +pub type PFNGLCOPYTEXTURESUBIMAGE2DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTextureSubImage2D: PFNGLCOPYTEXTURESUBIMAGE2DPROC; +} +pub type PFNGLCOPYTEXTURESUBIMAGE3DPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glCopyTextureSubImage3D: PFNGLCOPYTEXTURESUBIMAGE3DPROC; +} +pub type PFNGLTEXTUREPARAMETERFPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTextureParameterf: PFNGLTEXTUREPARAMETERFPROC; +} +pub type PFNGLTEXTUREPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, param: *const GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameterfv: PFNGLTEXTUREPARAMETERFVPROC; +} +pub type PFNGLTEXTUREPARAMETERIPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTextureParameteri: PFNGLTEXTUREPARAMETERIPROC; +} +pub type PFNGLTEXTUREPARAMETERIIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameterIiv: PFNGLTEXTUREPARAMETERIIVPROC; +} +pub type PFNGLTEXTUREPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *const GLuint), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameterIuiv: PFNGLTEXTUREPARAMETERIUIVPROC; +} +pub type PFNGLTEXTUREPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, param: *const GLint), +>; +unsafe extern "C" { + pub static mut glad_glTextureParameteriv: PFNGLTEXTUREPARAMETERIVPROC; +} +pub type PFNGLGENERATETEXTUREMIPMAPPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGenerateTextureMipmap: PFNGLGENERATETEXTUREMIPMAPPROC; +} +pub type PFNGLBINDTEXTUREUNITPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glBindTextureUnit: PFNGLBINDTEXTUREUNITPROC; +} +pub type PFNGLGETTEXTUREIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureImage: PFNGLGETTEXTUREIMAGEPROC; +} +pub type PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetCompressedTextureImage: PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC; +} +pub type PFNGLGETTEXTURELEVELPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, level: GLint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureLevelParameterfv: PFNGLGETTEXTURELEVELPARAMETERFVPROC; +} +pub type PFNGLGETTEXTURELEVELPARAMETERIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, level: GLint, pname: GLenum, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureLevelParameteriv: PFNGLGETTEXTURELEVELPARAMETERIVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERFVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureParameterfv: PFNGLGETTEXTUREPARAMETERFVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERIIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTextureParameterIiv: PFNGLGETTEXTUREPARAMETERIIVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERIUIVPROC = ::std::option::Option< + unsafe extern "C" fn(texture: GLuint, pname: GLenum, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureParameterIuiv: PFNGLGETTEXTUREPARAMETERIUIVPROC; +} +pub type PFNGLGETTEXTUREPARAMETERIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetTextureParameteriv: PFNGLGETTEXTUREPARAMETERIVPROC; +} +pub type PFNGLCREATEVERTEXARRAYSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateVertexArrays: PFNGLCREATEVERTEXARRAYSPROC; +} +pub type PFNGLDISABLEVERTEXARRAYATTRIBPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glDisableVertexArrayAttrib: PFNGLDISABLEVERTEXARRAYATTRIBPROC; +} +pub type PFNGLENABLEVERTEXARRAYATTRIBPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glEnableVertexArrayAttrib: PFNGLENABLEVERTEXARRAYATTRIBPROC; +} +pub type PFNGLVERTEXARRAYELEMENTBUFFERPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glVertexArrayElementBuffer: PFNGLVERTEXARRAYELEMENTBUFFERPROC; +} +pub type PFNGLVERTEXARRAYVERTEXBUFFERPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + bindingindex: GLuint, + buffer: GLuint, + offset: GLintptr, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayVertexBuffer: PFNGLVERTEXARRAYVERTEXBUFFERPROC; +} +pub type PFNGLVERTEXARRAYVERTEXBUFFERSPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + first: GLuint, + count: GLsizei, + buffers: *const GLuint, + offsets: *const GLintptr, + strides: *const GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayVertexBuffers: PFNGLVERTEXARRAYVERTEXBUFFERSPROC; +} +pub type PFNGLVERTEXARRAYATTRIBBINDINGPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, attribindex: GLuint, bindingindex: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribBinding: PFNGLVERTEXARRAYATTRIBBINDINGPROC; +} +pub type PFNGLVERTEXARRAYATTRIBFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + attribindex: GLuint, + size: GLint, + type_: GLenum, + normalized: GLboolean, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribFormat: PFNGLVERTEXARRAYATTRIBFORMATPROC; +} +pub type PFNGLVERTEXARRAYATTRIBIFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + attribindex: GLuint, + size: GLint, + type_: GLenum, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribIFormat: PFNGLVERTEXARRAYATTRIBIFORMATPROC; +} +pub type PFNGLVERTEXARRAYATTRIBLFORMATPROC = ::std::option::Option< + unsafe extern "C" fn( + vaobj: GLuint, + attribindex: GLuint, + size: GLint, + type_: GLenum, + relativeoffset: GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayAttribLFormat: PFNGLVERTEXARRAYATTRIBLFORMATPROC; +} +pub type PFNGLVERTEXARRAYBINDINGDIVISORPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, bindingindex: GLuint, divisor: GLuint), +>; +unsafe extern "C" { + pub static mut glad_glVertexArrayBindingDivisor: PFNGLVERTEXARRAYBINDINGDIVISORPROC; +} +pub type PFNGLGETVERTEXARRAYIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetVertexArrayiv: PFNGLGETVERTEXARRAYIVPROC; +} +pub type PFNGLGETVERTEXARRAYINDEXEDIVPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexArrayIndexediv: PFNGLGETVERTEXARRAYINDEXEDIVPROC; +} +pub type PFNGLGETVERTEXARRAYINDEXED64IVPROC = ::std::option::Option< + unsafe extern "C" fn(vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint64), +>; +unsafe extern "C" { + pub static mut glad_glGetVertexArrayIndexed64iv: PFNGLGETVERTEXARRAYINDEXED64IVPROC; +} +pub type PFNGLCREATESAMPLERSPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateSamplers: PFNGLCREATESAMPLERSPROC; +} +pub type PFNGLCREATEPROGRAMPIPELINESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateProgramPipelines: PFNGLCREATEPROGRAMPIPELINESPROC; +} +pub type PFNGLCREATEQUERIESPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glCreateQueries: PFNGLCREATEQUERIESPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTI64VPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjecti64v: PFNGLGETQUERYBUFFEROBJECTI64VPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTIVPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjectiv: PFNGLGETQUERYBUFFEROBJECTIVPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTUI64VPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjectui64v: PFNGLGETQUERYBUFFEROBJECTUI64VPROC; +} +pub type PFNGLGETQUERYBUFFEROBJECTUIVPROC = ::std::option::Option< + unsafe extern "C" fn(id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr), +>; +unsafe extern "C" { + pub static mut glad_glGetQueryBufferObjectuiv: PFNGLGETQUERYBUFFEROBJECTUIVPROC; +} +pub type PFNGLMEMORYBARRIERBYREGIONPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glMemoryBarrierByRegion: PFNGLMEMORYBARRIERBYREGIONPROC; +} +pub type PFNGLGETTEXTURESUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetTextureSubImage: PFNGLGETTEXTURESUBIMAGEPROC; +} +pub type PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + texture: GLuint, + level: GLint, + xoffset: GLint, + yoffset: GLint, + zoffset: GLint, + width: GLsizei, + height: GLsizei, + depth: GLsizei, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetCompressedTextureSubImage: PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC; +} +pub type PFNGLGETGRAPHICSRESETSTATUSPROC = ::std::option::Option GLenum>; +unsafe extern "C" { + pub static mut glad_glGetGraphicsResetStatus: PFNGLGETGRAPHICSRESETSTATUSPROC; +} +pub type PFNGLGETNCOMPRESSEDTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + lod: GLint, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnCompressedTexImage: PFNGLGETNCOMPRESSEDTEXIMAGEPROC; +} +pub type PFNGLGETNTEXIMAGEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + level: GLint, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + pixels: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnTexImage: PFNGLGETNTEXIMAGEPROC; +} +pub type PFNGLGETNUNIFORMDVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformdv: PFNGLGETNUNIFORMDVPROC; +} +pub type PFNGLGETNUNIFORMFVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformfv: PFNGLGETNUNIFORMFVPROC; +} +pub type PFNGLGETNUNIFORMIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformiv: PFNGLGETNUNIFORMIVPROC; +} +pub type PFNGLGETNUNIFORMUIVPROC = ::std::option::Option< + unsafe extern "C" fn(program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLuint), +>; +unsafe extern "C" { + pub static mut glad_glGetnUniformuiv: PFNGLGETNUNIFORMUIVPROC; +} +pub type PFNGLREADNPIXELSPROC = ::std::option::Option< + unsafe extern "C" fn( + x: GLint, + y: GLint, + width: GLsizei, + height: GLsizei, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + data: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glReadnPixels: PFNGLREADNPIXELSPROC; +} +pub type PFNGLGETNMAPDVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLdouble), +>; +unsafe extern "C" { + pub static mut glad_glGetnMapdv: PFNGLGETNMAPDVPROC; +} +pub type PFNGLGETNMAPFVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetnMapfv: PFNGLGETNMAPFVPROC; +} +pub type PFNGLGETNMAPIVPROC = ::std::option::Option< + unsafe extern "C" fn(target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLint), +>; +unsafe extern "C" { + pub static mut glad_glGetnMapiv: PFNGLGETNMAPIVPROC; +} +pub type PFNGLGETNPIXELMAPFVPROC = ::std::option::Option< + unsafe extern "C" fn(map: GLenum, bufSize: GLsizei, values: *mut GLfloat), +>; +unsafe extern "C" { + pub static mut glad_glGetnPixelMapfv: PFNGLGETNPIXELMAPFVPROC; +} +pub type PFNGLGETNPIXELMAPUIVPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetnPixelMapuiv: PFNGLGETNPIXELMAPUIVPROC; +} +pub type PFNGLGETNPIXELMAPUSVPROC = ::std::option::Option< + unsafe extern "C" fn(map: GLenum, bufSize: GLsizei, values: *mut GLushort), +>; +unsafe extern "C" { + pub static mut glad_glGetnPixelMapusv: PFNGLGETNPIXELMAPUSVPROC; +} +pub type PFNGLGETNPOLYGONSTIPPLEPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glGetnPolygonStipple: PFNGLGETNPOLYGONSTIPPLEPROC; +} +pub type PFNGLGETNCOLORTABLEPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + table: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnColorTable: PFNGLGETNCOLORTABLEPROC; +} +pub type PFNGLGETNCONVOLUTIONFILTERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + image: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnConvolutionFilter: PFNGLGETNCONVOLUTIONFILTERPROC; +} +pub type PFNGLGETNSEPARABLEFILTERPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + format: GLenum, + type_: GLenum, + rowBufSize: GLsizei, + row: *mut ::std::os::raw::c_void, + columnBufSize: GLsizei, + column: *mut ::std::os::raw::c_void, + span: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnSeparableFilter: PFNGLGETNSEPARABLEFILTERPROC; +} +pub type PFNGLGETNHISTOGRAMPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + reset: GLboolean, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + values: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnHistogram: PFNGLGETNHISTOGRAMPROC; +} +pub type PFNGLGETNMINMAXPROC = ::std::option::Option< + unsafe extern "C" fn( + target: GLenum, + reset: GLboolean, + format: GLenum, + type_: GLenum, + bufSize: GLsizei, + values: *mut ::std::os::raw::c_void, + ), +>; +unsafe extern "C" { + pub static mut glad_glGetnMinmax: PFNGLGETNMINMAXPROC; +} +pub type PFNGLTEXTUREBARRIERPROC = ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glTextureBarrier: PFNGLTEXTUREBARRIERPROC; +} +unsafe extern "C" { + pub static mut GLAD_GL_VERSION_4_6: ::std::os::raw::c_int; +} +pub type PFNGLSPECIALIZESHADERPROC = ::std::option::Option< + unsafe extern "C" fn( + shader: GLuint, + pEntryPoint: *const GLchar, + numSpecializationConstants: GLuint, + pConstantIndex: *const GLuint, + pConstantValue: *const GLuint, + ), +>; +unsafe extern "C" { + pub static mut glad_glSpecializeShader: PFNGLSPECIALIZESHADERPROC; +} +pub type PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLintptr, + maxdrawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawArraysIndirectCount: PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC; +} +pub type PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC = ::std::option::Option< + unsafe extern "C" fn( + mode: GLenum, + type_: GLenum, + indirect: *const ::std::os::raw::c_void, + drawcount: GLintptr, + maxdrawcount: GLsizei, + stride: GLsizei, + ), +>; +unsafe extern "C" { + pub static mut glad_glMultiDrawElementsIndirectCount: PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC; +} +pub type PFNGLPOLYGONOFFSETCLAMPPROC = + ::std::option::Option; +unsafe extern "C" { + pub static mut glad_glPolygonOffsetClamp: PFNGLPOLYGONOFFSETCLAMPPROC; +} +pub type wchar_t = ::std::os::raw::c_int; +#[repr(C)] +#[repr(align(16))] +#[derive(Debug, Copy, Clone)] +pub struct max_align_t { + pub __clang_max_align_nonce1: ::std::os::raw::c_longlong, + pub __bindgen_padding_0: u64, + pub __clang_max_align_nonce2: u128, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of max_align_t"][::std::mem::size_of::() - 32usize]; + ["Alignment of max_align_t"][::std::mem::align_of::() - 16usize]; + ["Offset of field: max_align_t::__clang_max_align_nonce1"] + [::std::mem::offset_of!(max_align_t, __clang_max_align_nonce1) - 0usize]; + ["Offset of field: max_align_t::__clang_max_align_nonce2"] + [::std::mem::offset_of!(max_align_t, __clang_max_align_nonce2) - 16usize]; +}; +pub type GLFWglproc = ::std::option::Option; +pub type GLFWvkproc = ::std::option::Option; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWmonitor { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWwindow { + _unused: [u8; 0], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWcursor { + _unused: [u8; 0], +} +pub type GLFWallocatefun = ::std::option::Option< + unsafe extern "C" fn( + size: usize, + user: *mut ::std::os::raw::c_void, + ) -> *mut ::std::os::raw::c_void, +>; +pub type GLFWreallocatefun = ::std::option::Option< + unsafe extern "C" fn( + block: *mut ::std::os::raw::c_void, + size: usize, + user: *mut ::std::os::raw::c_void, + ) -> *mut ::std::os::raw::c_void, +>; +pub type GLFWdeallocatefun = ::std::option::Option< + unsafe extern "C" fn(block: *mut ::std::os::raw::c_void, user: *mut ::std::os::raw::c_void), +>; +pub type GLFWerrorfun = ::std::option::Option< + unsafe extern "C" fn( + error_code: ::std::os::raw::c_int, + description: *const ::std::os::raw::c_char, + ), +>; +pub type GLFWwindowposfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + xpos: ::std::os::raw::c_int, + ypos: ::std::os::raw::c_int, + ), +>; +pub type GLFWwindowsizefun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ), +>; +pub type GLFWwindowclosefun = ::std::option::Option; +pub type GLFWwindowrefreshfun = + ::std::option::Option; +pub type GLFWwindowfocusfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, focused: ::std::os::raw::c_int), +>; +pub type GLFWwindowiconifyfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, iconified: ::std::os::raw::c_int), +>; +pub type GLFWwindowmaximizefun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, maximized: ::std::os::raw::c_int), +>; +pub type GLFWframebuffersizefun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ), +>; +pub type GLFWwindowcontentscalefun = + ::std::option::Option; +pub type GLFWmousebuttonfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + button: ::std::os::raw::c_int, + action: ::std::os::raw::c_int, + mods: ::std::os::raw::c_int, + ), +>; +pub type GLFWcursorposfun = + ::std::option::Option; +pub type GLFWcursorenterfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, entered: ::std::os::raw::c_int), +>; +pub type GLFWscrollfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, xoffset: f64, yoffset: f64), +>; +pub type GLFWkeyfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + key: ::std::os::raw::c_int, + scancode: ::std::os::raw::c_int, + action: ::std::os::raw::c_int, + mods: ::std::os::raw::c_int, + ), +>; +pub type GLFWcharfun = ::std::option::Option< + unsafe extern "C" fn(window: *mut GLFWwindow, codepoint: ::std::os::raw::c_uint), +>; +pub type GLFWcharmodsfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + codepoint: ::std::os::raw::c_uint, + mods: ::std::os::raw::c_int, + ), +>; +pub type GLFWdropfun = ::std::option::Option< + unsafe extern "C" fn( + window: *mut GLFWwindow, + path_count: ::std::os::raw::c_int, + paths: *mut *const ::std::os::raw::c_char, + ), +>; +pub type GLFWmonitorfun = ::std::option::Option< + unsafe extern "C" fn(monitor: *mut GLFWmonitor, event: ::std::os::raw::c_int), +>; +pub type GLFWjoystickfun = ::std::option::Option< + unsafe extern "C" fn(jid: ::std::os::raw::c_int, event: ::std::os::raw::c_int), +>; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWvidmode { + pub width: ::std::os::raw::c_int, + pub height: ::std::os::raw::c_int, + pub redBits: ::std::os::raw::c_int, + pub greenBits: ::std::os::raw::c_int, + pub blueBits: ::std::os::raw::c_int, + pub refreshRate: ::std::os::raw::c_int, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWvidmode"][::std::mem::size_of::() - 24usize]; + ["Alignment of GLFWvidmode"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GLFWvidmode::width"][::std::mem::offset_of!(GLFWvidmode, width) - 0usize]; + ["Offset of field: GLFWvidmode::height"][::std::mem::offset_of!(GLFWvidmode, height) - 4usize]; + ["Offset of field: GLFWvidmode::redBits"] + [::std::mem::offset_of!(GLFWvidmode, redBits) - 8usize]; + ["Offset of field: GLFWvidmode::greenBits"] + [::std::mem::offset_of!(GLFWvidmode, greenBits) - 12usize]; + ["Offset of field: GLFWvidmode::blueBits"] + [::std::mem::offset_of!(GLFWvidmode, blueBits) - 16usize]; + ["Offset of field: GLFWvidmode::refreshRate"] + [::std::mem::offset_of!(GLFWvidmode, refreshRate) - 20usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWgammaramp { + pub red: *mut ::std::os::raw::c_ushort, + pub green: *mut ::std::os::raw::c_ushort, + pub blue: *mut ::std::os::raw::c_ushort, + pub size: ::std::os::raw::c_uint, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWgammaramp"][::std::mem::size_of::() - 32usize]; + ["Alignment of GLFWgammaramp"][::std::mem::align_of::() - 8usize]; + ["Offset of field: GLFWgammaramp::red"][::std::mem::offset_of!(GLFWgammaramp, red) - 0usize]; + ["Offset of field: GLFWgammaramp::green"] + [::std::mem::offset_of!(GLFWgammaramp, green) - 8usize]; + ["Offset of field: GLFWgammaramp::blue"][::std::mem::offset_of!(GLFWgammaramp, blue) - 16usize]; + ["Offset of field: GLFWgammaramp::size"][::std::mem::offset_of!(GLFWgammaramp, size) - 24usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWimage { + pub width: ::std::os::raw::c_int, + pub height: ::std::os::raw::c_int, + pub pixels: *mut ::std::os::raw::c_uchar, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWimage"][::std::mem::size_of::() - 16usize]; + ["Alignment of GLFWimage"][::std::mem::align_of::() - 8usize]; + ["Offset of field: GLFWimage::width"][::std::mem::offset_of!(GLFWimage, width) - 0usize]; + ["Offset of field: GLFWimage::height"][::std::mem::offset_of!(GLFWimage, height) - 4usize]; + ["Offset of field: GLFWimage::pixels"][::std::mem::offset_of!(GLFWimage, pixels) - 8usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWgamepadstate { + pub buttons: [::std::os::raw::c_uchar; 15usize], + pub axes: [f32; 6usize], +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWgamepadstate"][::std::mem::size_of::() - 40usize]; + ["Alignment of GLFWgamepadstate"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GLFWgamepadstate::buttons"] + [::std::mem::offset_of!(GLFWgamepadstate, buttons) - 0usize]; + ["Offset of field: GLFWgamepadstate::axes"] + [::std::mem::offset_of!(GLFWgamepadstate, axes) - 16usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GLFWallocator { + pub allocate: GLFWallocatefun, + pub reallocate: GLFWreallocatefun, + pub deallocate: GLFWdeallocatefun, + pub user: *mut ::std::os::raw::c_void, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GLFWallocator"][::std::mem::size_of::() - 32usize]; + ["Alignment of GLFWallocator"][::std::mem::align_of::() - 8usize]; + ["Offset of field: GLFWallocator::allocate"] + [::std::mem::offset_of!(GLFWallocator, allocate) - 0usize]; + ["Offset of field: GLFWallocator::reallocate"] + [::std::mem::offset_of!(GLFWallocator, reallocate) - 8usize]; + ["Offset of field: GLFWallocator::deallocate"] + [::std::mem::offset_of!(GLFWallocator, deallocate) - 16usize]; + ["Offset of field: GLFWallocator::user"][::std::mem::offset_of!(GLFWallocator, user) - 24usize]; +}; +unsafe extern "C" { + pub fn glfwInit() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwTerminate(); +} +unsafe extern "C" { + pub fn glfwInitHint(hint: ::std::os::raw::c_int, value: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwInitAllocator(allocator: *const GLFWallocator); +} +unsafe extern "C" { + pub fn glfwGetVersion( + major: *mut ::std::os::raw::c_int, + minor: *mut ::std::os::raw::c_int, + rev: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetVersionString() -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetError(description: *mut *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetErrorCallback(callback: GLFWerrorfun) -> GLFWerrorfun; +} +unsafe extern "C" { + pub fn glfwGetPlatform() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwPlatformSupported(platform: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetMonitors(count: *mut ::std::os::raw::c_int) -> *mut *mut GLFWmonitor; +} +unsafe extern "C" { + pub fn glfwGetPrimaryMonitor() -> *mut GLFWmonitor; +} +unsafe extern "C" { + pub fn glfwGetMonitorPos( + monitor: *mut GLFWmonitor, + xpos: *mut ::std::os::raw::c_int, + ypos: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorWorkarea( + monitor: *mut GLFWmonitor, + xpos: *mut ::std::os::raw::c_int, + ypos: *mut ::std::os::raw::c_int, + width: *mut ::std::os::raw::c_int, + height: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorPhysicalSize( + monitor: *mut GLFWmonitor, + widthMM: *mut ::std::os::raw::c_int, + heightMM: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorContentScale( + monitor: *mut GLFWmonitor, + xscale: *mut f32, + yscale: *mut f32, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorName(monitor: *mut GLFWmonitor) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwSetMonitorUserPointer( + monitor: *mut GLFWmonitor, + pointer: *mut ::std::os::raw::c_void, + ); +} +unsafe extern "C" { + pub fn glfwGetMonitorUserPointer(monitor: *mut GLFWmonitor) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn glfwSetMonitorCallback(callback: GLFWmonitorfun) -> GLFWmonitorfun; +} +unsafe extern "C" { + pub fn glfwGetVideoModes( + monitor: *mut GLFWmonitor, + count: *mut ::std::os::raw::c_int, + ) -> *const GLFWvidmode; +} +unsafe extern "C" { + pub fn glfwGetVideoMode(monitor: *mut GLFWmonitor) -> *const GLFWvidmode; +} +unsafe extern "C" { + pub fn glfwSetGamma(monitor: *mut GLFWmonitor, gamma: f32); +} +unsafe extern "C" { + pub fn glfwGetGammaRamp(monitor: *mut GLFWmonitor) -> *const GLFWgammaramp; +} +unsafe extern "C" { + pub fn glfwSetGammaRamp(monitor: *mut GLFWmonitor, ramp: *const GLFWgammaramp); +} +unsafe extern "C" { + pub fn glfwDefaultWindowHints(); +} +unsafe extern "C" { + pub fn glfwWindowHint(hint: ::std::os::raw::c_int, value: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwWindowHintString(hint: ::std::os::raw::c_int, value: *const ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn glfwCreateWindow( + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + title: *const ::std::os::raw::c_char, + monitor: *mut GLFWmonitor, + share: *mut GLFWwindow, + ) -> *mut GLFWwindow; +} +unsafe extern "C" { + pub fn glfwDestroyWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwWindowShouldClose(window: *mut GLFWwindow) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetWindowShouldClose(window: *mut GLFWwindow, value: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwGetWindowTitle(window: *mut GLFWwindow) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwSetWindowTitle(window: *mut GLFWwindow, title: *const ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn glfwSetWindowIcon( + window: *mut GLFWwindow, + count: ::std::os::raw::c_int, + images: *const GLFWimage, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowPos( + window: *mut GLFWwindow, + xpos: *mut ::std::os::raw::c_int, + ypos: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowPos( + window: *mut GLFWwindow, + xpos: ::std::os::raw::c_int, + ypos: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowSize( + window: *mut GLFWwindow, + width: *mut ::std::os::raw::c_int, + height: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowSizeLimits( + window: *mut GLFWwindow, + minwidth: ::std::os::raw::c_int, + minheight: ::std::os::raw::c_int, + maxwidth: ::std::os::raw::c_int, + maxheight: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowAspectRatio( + window: *mut GLFWwindow, + numer: ::std::os::raw::c_int, + denom: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowSize( + window: *mut GLFWwindow, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetFramebufferSize( + window: *mut GLFWwindow, + width: *mut ::std::os::raw::c_int, + height: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowFrameSize( + window: *mut GLFWwindow, + left: *mut ::std::os::raw::c_int, + top: *mut ::std::os::raw::c_int, + right: *mut ::std::os::raw::c_int, + bottom: *mut ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowContentScale(window: *mut GLFWwindow, xscale: *mut f32, yscale: *mut f32); +} +unsafe extern "C" { + pub fn glfwGetWindowOpacity(window: *mut GLFWwindow) -> f32; +} +unsafe extern "C" { + pub fn glfwSetWindowOpacity(window: *mut GLFWwindow, opacity: f32); +} +unsafe extern "C" { + pub fn glfwIconifyWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwRestoreWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwMaximizeWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwShowWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwHideWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwFocusWindow(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwRequestWindowAttention(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwGetWindowMonitor(window: *mut GLFWwindow) -> *mut GLFWmonitor; +} +unsafe extern "C" { + pub fn glfwSetWindowMonitor( + window: *mut GLFWwindow, + monitor: *mut GLFWmonitor, + xpos: ::std::os::raw::c_int, + ypos: ::std::os::raw::c_int, + width: ::std::os::raw::c_int, + height: ::std::os::raw::c_int, + refreshRate: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwGetWindowAttrib( + window: *mut GLFWwindow, + attrib: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetWindowAttrib( + window: *mut GLFWwindow, + attrib: ::std::os::raw::c_int, + value: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwSetWindowUserPointer(window: *mut GLFWwindow, pointer: *mut ::std::os::raw::c_void); +} +unsafe extern "C" { + pub fn glfwGetWindowUserPointer(window: *mut GLFWwindow) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn glfwSetWindowPosCallback( + window: *mut GLFWwindow, + callback: GLFWwindowposfun, + ) -> GLFWwindowposfun; +} +unsafe extern "C" { + pub fn glfwSetWindowSizeCallback( + window: *mut GLFWwindow, + callback: GLFWwindowsizefun, + ) -> GLFWwindowsizefun; +} +unsafe extern "C" { + pub fn glfwSetWindowCloseCallback( + window: *mut GLFWwindow, + callback: GLFWwindowclosefun, + ) -> GLFWwindowclosefun; +} +unsafe extern "C" { + pub fn glfwSetWindowRefreshCallback( + window: *mut GLFWwindow, + callback: GLFWwindowrefreshfun, + ) -> GLFWwindowrefreshfun; +} +unsafe extern "C" { + pub fn glfwSetWindowFocusCallback( + window: *mut GLFWwindow, + callback: GLFWwindowfocusfun, + ) -> GLFWwindowfocusfun; +} +unsafe extern "C" { + pub fn glfwSetWindowIconifyCallback( + window: *mut GLFWwindow, + callback: GLFWwindowiconifyfun, + ) -> GLFWwindowiconifyfun; +} +unsafe extern "C" { + pub fn glfwSetWindowMaximizeCallback( + window: *mut GLFWwindow, + callback: GLFWwindowmaximizefun, + ) -> GLFWwindowmaximizefun; +} +unsafe extern "C" { + pub fn glfwSetFramebufferSizeCallback( + window: *mut GLFWwindow, + callback: GLFWframebuffersizefun, + ) -> GLFWframebuffersizefun; +} +unsafe extern "C" { + pub fn glfwSetWindowContentScaleCallback( + window: *mut GLFWwindow, + callback: GLFWwindowcontentscalefun, + ) -> GLFWwindowcontentscalefun; +} +unsafe extern "C" { + pub fn glfwPollEvents(); +} +unsafe extern "C" { + pub fn glfwWaitEvents(); +} +unsafe extern "C" { + pub fn glfwWaitEventsTimeout(timeout: f64); +} +unsafe extern "C" { + pub fn glfwPostEmptyEvent(); +} +unsafe extern "C" { + pub fn glfwGetInputMode( + window: *mut GLFWwindow, + mode: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetInputMode( + window: *mut GLFWwindow, + mode: ::std::os::raw::c_int, + value: ::std::os::raw::c_int, + ); +} +unsafe extern "C" { + pub fn glfwRawMouseMotionSupported() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetKeyName( + key: ::std::os::raw::c_int, + scancode: ::std::os::raw::c_int, + ) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetKeyScancode(key: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetKey(window: *mut GLFWwindow, key: ::std::os::raw::c_int) + -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetMouseButton( + window: *mut GLFWwindow, + button: ::std::os::raw::c_int, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetCursorPos(window: *mut GLFWwindow, xpos: *mut f64, ypos: *mut f64); +} +unsafe extern "C" { + pub fn glfwSetCursorPos(window: *mut GLFWwindow, xpos: f64, ypos: f64); +} +unsafe extern "C" { + pub fn glfwCreateCursor( + image: *const GLFWimage, + xhot: ::std::os::raw::c_int, + yhot: ::std::os::raw::c_int, + ) -> *mut GLFWcursor; +} +unsafe extern "C" { + pub fn glfwCreateStandardCursor(shape: ::std::os::raw::c_int) -> *mut GLFWcursor; +} +unsafe extern "C" { + pub fn glfwDestroyCursor(cursor: *mut GLFWcursor); +} +unsafe extern "C" { + pub fn glfwSetCursor(window: *mut GLFWwindow, cursor: *mut GLFWcursor); +} +unsafe extern "C" { + pub fn glfwSetKeyCallback(window: *mut GLFWwindow, callback: GLFWkeyfun) -> GLFWkeyfun; +} +unsafe extern "C" { + pub fn glfwSetCharCallback(window: *mut GLFWwindow, callback: GLFWcharfun) -> GLFWcharfun; +} +unsafe extern "C" { + pub fn glfwSetCharModsCallback( + window: *mut GLFWwindow, + callback: GLFWcharmodsfun, + ) -> GLFWcharmodsfun; +} +unsafe extern "C" { + pub fn glfwSetMouseButtonCallback( + window: *mut GLFWwindow, + callback: GLFWmousebuttonfun, + ) -> GLFWmousebuttonfun; +} +unsafe extern "C" { + pub fn glfwSetCursorPosCallback( + window: *mut GLFWwindow, + callback: GLFWcursorposfun, + ) -> GLFWcursorposfun; +} +unsafe extern "C" { + pub fn glfwSetCursorEnterCallback( + window: *mut GLFWwindow, + callback: GLFWcursorenterfun, + ) -> GLFWcursorenterfun; +} +unsafe extern "C" { + pub fn glfwSetScrollCallback(window: *mut GLFWwindow, callback: GLFWscrollfun) + -> GLFWscrollfun; +} +unsafe extern "C" { + pub fn glfwSetDropCallback(window: *mut GLFWwindow, callback: GLFWdropfun) -> GLFWdropfun; +} +unsafe extern "C" { + pub fn glfwJoystickPresent(jid: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetJoystickAxes( + jid: ::std::os::raw::c_int, + count: *mut ::std::os::raw::c_int, + ) -> *const f32; +} +unsafe extern "C" { + pub fn glfwGetJoystickButtons( + jid: ::std::os::raw::c_int, + count: *mut ::std::os::raw::c_int, + ) -> *const ::std::os::raw::c_uchar; +} +unsafe extern "C" { + pub fn glfwGetJoystickHats( + jid: ::std::os::raw::c_int, + count: *mut ::std::os::raw::c_int, + ) -> *const ::std::os::raw::c_uchar; +} +unsafe extern "C" { + pub fn glfwGetJoystickName(jid: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetJoystickGUID(jid: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwSetJoystickUserPointer( + jid: ::std::os::raw::c_int, + pointer: *mut ::std::os::raw::c_void, + ); +} +unsafe extern "C" { + pub fn glfwGetJoystickUserPointer(jid: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void; +} +unsafe extern "C" { + pub fn glfwJoystickIsGamepad(jid: ::std::os::raw::c_int) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetJoystickCallback(callback: GLFWjoystickfun) -> GLFWjoystickfun; +} +unsafe extern "C" { + pub fn glfwUpdateGamepadMappings( + string: *const ::std::os::raw::c_char, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetGamepadName(jid: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetGamepadState( + jid: ::std::os::raw::c_int, + state: *mut GLFWgamepadstate, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwSetClipboardString(window: *mut GLFWwindow, string: *const ::std::os::raw::c_char); +} +unsafe extern "C" { + pub fn glfwGetClipboardString(window: *mut GLFWwindow) -> *const ::std::os::raw::c_char; +} +unsafe extern "C" { + pub fn glfwGetTime() -> f64; +} +unsafe extern "C" { + pub fn glfwSetTime(time: f64); +} +unsafe extern "C" { + pub fn glfwGetTimerValue() -> u64; +} +unsafe extern "C" { + pub fn glfwGetTimerFrequency() -> u64; +} +unsafe extern "C" { + pub fn glfwMakeContextCurrent(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwGetCurrentContext() -> *mut GLFWwindow; +} +unsafe extern "C" { + pub fn glfwSwapBuffers(window: *mut GLFWwindow); +} +unsafe extern "C" { + pub fn glfwSwapInterval(interval: ::std::os::raw::c_int); +} +unsafe extern "C" { + pub fn glfwExtensionSupported( + extension: *const ::std::os::raw::c_char, + ) -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetProcAddress(procname: *const ::std::os::raw::c_char) -> GLFWglproc; +} +unsafe extern "C" { + pub fn glfwVulkanSupported() -> ::std::os::raw::c_int; +} +unsafe extern "C" { + pub fn glfwGetRequiredInstanceExtensions(count: *mut u32) + -> *mut *const ::std::os::raw::c_char; +} +pub type u8_ = u8; +pub type u16_ = u16; +pub type u32_ = u32; +pub type u64_ = u64; +pub type i8_ = i8; +pub type i16_ = i16; +pub type i32_ = i32; +pub type i64_ = i64; +pub type GpuShaderHandle = i32_; +pub type GpuProgramHandle = i32_; +pub type GpuVoid = GLvoid; +pub type GpuBool = GLboolean; +pub type GpuByte = GLbyte; +pub type GpuShort = GLshort; +pub type GpuSizeI = GLsizei; +pub type GpuSizeIPtr = GLsizeiptr; +pub type GpuInt = GLint; +pub type GpuUint = GLuint; +pub type GpuFloat = GLfloat; +pub type GpuDouble = GLdouble; +pub const GpuShaderType_FRAGMENT_SHADER: GpuShaderType = 35632; +pub const GpuShaderType_VERTEX_SHADER: GpuShaderType = 35633; +pub type GpuShaderType = ::std::os::raw::c_uint; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GpuProgram { + pub handle: GpuShaderHandle, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GpuProgram"][::std::mem::size_of::() - 4usize]; + ["Alignment of GpuProgram"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GpuProgram::handle"][::std::mem::offset_of!(GpuProgram, handle) - 0usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct Window { + pub win: *mut GLFWwindow, + pub width: i32_, + pub height: i32_, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of Window"][::std::mem::size_of::() - 16usize]; + ["Alignment of Window"][::std::mem::align_of::() - 8usize]; + ["Offset of field: Window::win"][::std::mem::offset_of!(Window, win) - 0usize]; + ["Offset of field: Window::width"][::std::mem::offset_of!(Window, width) - 8usize]; + ["Offset of field: Window::height"][::std::mem::offset_of!(Window, height) - 12usize]; +}; +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GpuBuffer { + pub vao: GLuint, + pub vbo: GLuint, + pub ebo: GLuint, + pub stride: u32_, + pub index_count: u32_, +} +#[allow(clippy::unnecessary_operation, clippy::identity_op)] +const _: () = { + ["Size of GpuBuffer"][::std::mem::size_of::() - 20usize]; + ["Alignment of GpuBuffer"][::std::mem::align_of::() - 4usize]; + ["Offset of field: GpuBuffer::vao"][::std::mem::offset_of!(GpuBuffer, vao) - 0usize]; + ["Offset of field: GpuBuffer::vbo"][::std::mem::offset_of!(GpuBuffer, vbo) - 4usize]; + ["Offset of field: GpuBuffer::ebo"][::std::mem::offset_of!(GpuBuffer, ebo) - 8usize]; + ["Offset of field: GpuBuffer::stride"][::std::mem::offset_of!(GpuBuffer, stride) - 12usize]; + ["Offset of field: GpuBuffer::index_count"] + [::std::mem::offset_of!(GpuBuffer, index_count) - 16usize]; +}; +unsafe extern "C" { + pub fn gpu_program_create( + vert_src: *const ::std::os::raw::c_char, + frag_src: *const ::std::os::raw::c_char, + ) -> GpuProgram; +} +unsafe extern "C" { + pub fn gpu_program_destroy(gpu_program: *mut GpuProgram); +} +unsafe extern "C" { + pub fn gpu_program_use(program: *mut GpuProgram); +} +unsafe extern "C" { + pub fn gpu_program_clear(); +} +unsafe extern "C" { + pub fn gpu_buffer_create( + buf: *mut GpuBuffer, + vertices: *mut f32, + vertex_count: u32_, + indices: *mut u32_, + idx_count: ::std::os::raw::c_int, + ) -> u32_; +} +unsafe extern "C" { + pub fn gpu_buffer_destroy(buffer: *mut GpuBuffer); +} +unsafe extern "C" { + pub fn gpu_buffer_draw(buffer: *mut GpuBuffer); +} +unsafe extern "C" { + pub fn gpu_clear(r: f32, g: f32, b: f32, a: f32); +} +unsafe extern "C" { + pub fn window_create(width: u32_, height: u32_, title: *const ::std::os::raw::c_char) + -> Window; +} +unsafe extern "C" { + pub fn window_destroy(win: *mut Window); +} +unsafe extern "C" { + pub fn window_buffers_swap(win: *mut Window); +} +unsafe extern "C" { + pub fn window_poll_events(win: *mut Window); +} diff --git a/src/lib.rs b/gl_rust/src/lib.rs similarity index 95% rename from src/lib.rs rename to gl_rust/src/lib.rs index 230be3d..b924bb7 100644 --- a/src/lib.rs +++ b/gl_rust/src/lib.rs @@ -18,10 +18,11 @@ pub mod models { pub mod app { pub mod renderer; pub mod app; - pub mod gl; } pub mod shaders { pub mod shaders; pub use shaders::*; } + +pub mod glc; diff --git a/src/main.rs b/gl_rust/src/main.rs similarity index 94% rename from src/main.rs rename to gl_rust/src/main.rs index 51eb4b4..8372a40 100644 --- a/src/main.rs +++ b/gl_rust/src/main.rs @@ -20,7 +20,7 @@ fn main() { let scene_data = ModelData { name: "home".to_string(), - objects_data: vec![(mesh, shader_src)] + meshes: vec![(mesh)] }; let mut app = App::new(scene_data); diff --git a/src/models/material.rs b/gl_rust/src/models/material.rs similarity index 100% rename from src/models/material.rs rename to gl_rust/src/models/material.rs diff --git a/src/models/mesh.rs b/gl_rust/src/models/mesh.rs similarity index 99% rename from src/models/mesh.rs rename to gl_rust/src/models/mesh.rs index 89e125e..180e54a 100644 --- a/src/models/mesh.rs +++ b/gl_rust/src/models/mesh.rs @@ -1,4 +1,3 @@ -use std::collections::HashMap; use crate::models::Material; use super::Vertex; diff --git a/src/models/model.rs b/gl_rust/src/models/model.rs similarity index 100% rename from src/models/model.rs rename to gl_rust/src/models/model.rs diff --git a/src/models/scene.rs b/gl_rust/src/models/scene.rs similarity index 100% rename from src/models/scene.rs rename to gl_rust/src/models/scene.rs diff --git a/src/models/vertex.rs b/gl_rust/src/models/vertex.rs similarity index 100% rename from src/models/vertex.rs rename to gl_rust/src/models/vertex.rs diff --git a/src/shaders/shaders.rs b/gl_rust/src/shaders/shaders.rs similarity index 100% rename from src/shaders/shaders.rs rename to gl_rust/src/shaders/shaders.rs diff --git a/glc/lib/include/KHR/khrplatform.h b/glc/lib/include/KHR/khrplatform.h new file mode 100644 index 0000000..0164644 --- /dev/null +++ b/glc/lib/include/KHR/khrplatform.h @@ -0,0 +1,311 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/glc/lib/include/glad/glad.h b/glc/lib/include/glad/glad.h new file mode 100644 index 0000000..78d8a0e --- /dev/null +++ b/glc/lib/include/glad/glad.h @@ -0,0 +1,3694 @@ +/* + + OpenGL loader generated by glad 0.1.36 on Sun Feb 15 08:27:07 2026. + + Language/Generator: C/C++ + Specification: gl + APIs: gl=4.6 + Profile: core + Extensions: + + Loader: True + Local files: False + Omit khrplatform: False + Reproducible: False + + Commandline: + --profile="core" --api="gl=4.6" --generator="c" --spec="gl" --extensions="" + Online: + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6 +*/ + + +#ifndef __glad_h_ +#define __glad_h_ + +#ifdef __gl_h_ +#error OpenGL header already included, remove this include, glad already provides it +#endif +#define __gl_h_ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#define APIENTRY __stdcall +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY APIENTRY +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct gladGLversionStruct { + int major; + int minor; +}; + +typedef void* (* GLADloadproc)(const char *name); + +#ifndef GLAPI +# if defined(GLAD_GLAPI_EXPORT) +# if defined(_WIN32) || defined(__CYGWIN__) +# if defined(GLAD_GLAPI_EXPORT_BUILD) +# if defined(__GNUC__) +# define GLAPI __attribute__ ((dllexport)) extern +# else +# define GLAPI __declspec(dllexport) extern +# endif +# else +# if defined(__GNUC__) +# define GLAPI __attribute__ ((dllimport)) extern +# else +# define GLAPI __declspec(dllimport) extern +# endif +# endif +# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) +# define GLAPI __attribute__ ((visibility ("default"))) extern +# else +# define GLAPI extern +# endif +# else +# define GLAPI extern +# endif +#endif + +GLAPI struct gladGLversionStruct GLVersion; + +GLAPI int gladLoadGL(void); + +GLAPI int gladLoadGLLoader(GLADloadproc); + +#include +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef khronos_int8_t GLbyte; +typedef khronos_uint8_t GLubyte; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; +typedef int GLint; +typedef unsigned int GLuint; +typedef khronos_int32_t GLclampx; +typedef int GLsizei; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void *GLeglClientBufferEXT; +typedef void *GLeglImageOES; +typedef char GLchar; +typedef char GLcharARB; +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef khronos_uint16_t GLhalf; +typedef khronos_uint16_t GLhalfARB; +typedef khronos_int32_t GLfixed; +typedef khronos_intptr_t GLintptr; +typedef khronos_intptr_t GLintptrARB; +typedef khronos_ssize_t GLsizeiptr; +typedef khronos_ssize_t GLsizeiptrARB; +typedef khronos_int64_t GLint64; +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64; +typedef khronos_uint64_t GLuint64EXT; +typedef struct __GLsync *GLsync; +struct _cl_context; +struct _cl_event; +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef unsigned short GLhalfNV; +typedef GLintptr GLvdpauSurfaceNV; +typedef void (APIENTRY *GLVULKANPROCNV)(void); +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_FALSE 0 +#define GL_TRUE 1 +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_NONE 0 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_VIEWPORT 0x0BA2 +#define GL_DITHER 0x0BD0 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND 0x0BE2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F +#define GL_TEXTURE 0x1702 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_INDEX 0x1901 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_REPEAT 0x2901 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_DOUBLE 0x140A +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFF +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_QUADS 0x0007 +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_IS_PER_PATCH 0x92E7 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +#define GL_CONTEXT_LOST 0x0507 +#define GL_NEGATIVE_ONE_TO_ONE 0x935E +#define GL_ZERO_TO_ONE 0x935F +#define GL_CLIP_ORIGIN 0x935C +#define GL_CLIP_DEPTH_MODE 0x935D +#define GL_QUERY_WAIT_INVERTED 0x8E17 +#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 +#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 +#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A +#define GL_MAX_CULL_DISTANCES 0x82F9 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA +#define GL_TEXTURE_TARGET 0x1006 +#define GL_QUERY_TARGET 0x82EA +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_MINMAX 0x802E +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 +#define GL_SPIR_V_BINARY 0x9552 +#define GL_PARAMETER_BUFFER 0x80EE +#define GL_PARAMETER_BUFFER_BINDING 0x80EF +#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 +#define GL_VERTICES_SUBMITTED 0x82EE +#define GL_PRIMITIVES_SUBMITTED 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 +#define GL_POLYGON_OFFSET_CLAMP 0x8E1B +#define GL_SPIR_V_EXTENSIONS 0x9553 +#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 +#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF +#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED +#ifndef GL_VERSION_1_0 +#define GL_VERSION_1_0 1 +GLAPI int GLAD_GL_VERSION_1_0; +typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); +GLAPI PFNGLCULLFACEPROC glad_glCullFace; +#define glCullFace glad_glCullFace +typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); +GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; +#define glFrontFace glad_glFrontFace +typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); +GLAPI PFNGLHINTPROC glad_glHint; +#define glHint glad_glHint +typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); +GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; +#define glLineWidth glad_glLineWidth +typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); +GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; +#define glPointSize glad_glPointSize +typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; +#define glPolygonMode glad_glPolygonMode +typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLSCISSORPROC glad_glScissor; +#define glScissor glad_glScissor +typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; +#define glTexParameterf glad_glTexParameterf +typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); +GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; +#define glTexParameterfv glad_glTexParameterfv +typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; +#define glTexParameteri glad_glTexParameteri +typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); +GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; +#define glTexParameteriv glad_glTexParameteriv +typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; +#define glTexImage1D glad_glTexImage1D +typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; +#define glTexImage2D glad_glTexImage2D +typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); +GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; +#define glDrawBuffer glad_glDrawBuffer +typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); +GLAPI PFNGLCLEARPROC glad_glClear; +#define glClear glad_glClear +typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; +#define glClearColor glad_glClearColor +typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); +GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; +#define glClearStencil glad_glClearStencil +typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); +GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; +#define glClearDepth glad_glClearDepth +typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); +GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; +#define glStencilMask glad_glStencilMask +typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GLAPI PFNGLCOLORMASKPROC glad_glColorMask; +#define glColorMask glad_glColorMask +typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); +GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; +#define glDepthMask glad_glDepthMask +typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); +GLAPI PFNGLDISABLEPROC glad_glDisable; +#define glDisable glad_glDisable +typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); +GLAPI PFNGLENABLEPROC glad_glEnable; +#define glEnable glad_glEnable +typedef void (APIENTRYP PFNGLFINISHPROC)(void); +GLAPI PFNGLFINISHPROC glad_glFinish; +#define glFinish glad_glFinish +typedef void (APIENTRYP PFNGLFLUSHPROC)(void); +GLAPI PFNGLFLUSHPROC glad_glFlush; +#define glFlush glad_glFlush +typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; +#define glBlendFunc glad_glBlendFunc +typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); +GLAPI PFNGLLOGICOPPROC glad_glLogicOp; +#define glLogicOp glad_glLogicOp +typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; +#define glStencilFunc glad_glStencilFunc +typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; +#define glStencilOp glad_glStencilOp +typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); +GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; +#define glDepthFunc glad_glDepthFunc +typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; +#define glPixelStoref glad_glPixelStoref +typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; +#define glPixelStorei glad_glPixelStorei +typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); +GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; +#define glReadBuffer glad_glReadBuffer +typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); +GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; +#define glReadPixels glad_glReadPixels +typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); +GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; +#define glGetBooleanv glad_glGetBooleanv +typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data); +GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; +#define glGetDoublev glad_glGetDoublev +typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); +GLAPI PFNGLGETERRORPROC glad_glGetError; +#define glGetError glad_glGetError +typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); +GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; +#define glGetFloatv glad_glGetFloatv +typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); +GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; +#define glGetIntegerv glad_glGetIntegerv +typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); +GLAPI PFNGLGETSTRINGPROC glad_glGetString; +#define glGetString glad_glGetString +typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; +#define glGetTexImage glad_glGetTexImage +typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); +GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; +#define glGetTexParameterfv glad_glGetTexParameterfv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; +#define glGetTexParameteriv glad_glGetTexParameteriv +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; +#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; +#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv +typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); +GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; +#define glIsEnabled glad_glIsEnabled +typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); +GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; +#define glDepthRange glad_glDepthRange +typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLVIEWPORTPROC glad_glViewport; +#define glViewport glad_glViewport +#endif +#ifndef GL_VERSION_1_1 +#define GL_VERSION_1_1 1 +GLAPI int GLAD_GL_VERSION_1_1; +typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; +#define glDrawArrays glad_glDrawArrays +typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); +GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; +#define glDrawElements glad_glDrawElements +typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; +#define glPolygonOffset glad_glPolygonOffset +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; +#define glCopyTexImage1D glad_glCopyTexImage1D +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; +#define glCopyTexImage2D glad_glCopyTexImage2D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; +#define glCopyTexSubImage1D glad_glCopyTexSubImage1D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; +#define glCopyTexSubImage2D glad_glCopyTexSubImage2D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +#define glTexSubImage1D glad_glTexSubImage1D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; +#define glTexSubImage2D glad_glTexSubImage2D +typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; +#define glBindTexture glad_glBindTexture +typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); +GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; +#define glDeleteTextures glad_glDeleteTextures +typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); +GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; +#define glGenTextures glad_glGenTextures +typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); +GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; +#define glIsTexture glad_glIsTexture +#endif +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +GLAPI int GLAD_GL_VERSION_1_2; +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; +#define glDrawRangeElements glad_glDrawRangeElements +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; +#define glTexImage3D glad_glTexImage3D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; +#define glTexSubImage3D glad_glTexSubImage3D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; +#define glCopyTexSubImage3D glad_glCopyTexSubImage3D +#endif +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +GLAPI int GLAD_GL_VERSION_1_3; +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); +GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; +#define glActiveTexture glad_glActiveTexture +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; +#define glSampleCoverage glad_glSampleCoverage +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; +#define glCompressedTexImage3D glad_glCompressedTexImage3D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; +#define glCompressedTexImage2D glad_glCompressedTexImage2D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; +#define glCompressedTexImage1D glad_glCompressedTexImage1D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; +#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; +#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; +#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img); +GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; +#define glGetCompressedTexImage glad_glGetCompressedTexImage +#endif +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +GLAPI int GLAD_GL_VERSION_1_4; +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; +#define glBlendFuncSeparate glad_glBlendFuncSeparate +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; +#define glMultiDrawArrays glad_glMultiDrawArrays +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; +#define glMultiDrawElements glad_glMultiDrawElements +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; +#define glPointParameterf glad_glPointParameterf +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); +GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; +#define glPointParameterfv glad_glPointParameterfv +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; +#define glPointParameteri glad_glPointParameteri +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params); +GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; +#define glPointParameteriv glad_glPointParameteriv +typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; +#define glBlendColor glad_glBlendColor +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); +GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; +#define glBlendEquation glad_glBlendEquation +#endif +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +GLAPI int GLAD_GL_VERSION_1_5; +typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); +GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; +#define glGenQueries glad_glGenQueries +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); +GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; +#define glDeleteQueries glad_glDeleteQueries +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); +GLAPI PFNGLISQUERYPROC glad_glIsQuery; +#define glIsQuery glad_glIsQuery +typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; +#define glBeginQuery glad_glBeginQuery +typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); +GLAPI PFNGLENDQUERYPROC glad_glEndQuery; +#define glEndQuery glad_glEndQuery +typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; +#define glGetQueryiv glad_glGetQueryiv +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params); +GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; +#define glGetQueryObjectiv glad_glGetQueryObjectiv +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); +GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; +#define glGetQueryObjectuiv glad_glGetQueryObjectuiv +typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; +#define glBindBuffer glad_glBindBuffer +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); +GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; +#define glDeleteBuffers glad_glDeleteBuffers +typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); +GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; +#define glGenBuffers glad_glGenBuffers +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); +GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; +#define glIsBuffer glad_glIsBuffer +typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; +#define glBufferData glad_glBufferData +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; +#define glBufferSubData glad_glBufferSubData +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; +#define glGetBufferSubData glad_glGetBufferSubData +typedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; +#define glMapBuffer glad_glMapBuffer +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); +GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; +#define glUnmapBuffer glad_glUnmapBuffer +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; +#define glGetBufferParameteriv glad_glGetBufferParameteriv +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); +GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; +#define glGetBufferPointerv glad_glGetBufferPointerv +#endif +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +GLAPI int GLAD_GL_VERSION_2_0; +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; +#define glBlendEquationSeparate glad_glBlendEquationSeparate +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); +GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; +#define glDrawBuffers glad_glDrawBuffers +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; +#define glStencilOpSeparate glad_glStencilOpSeparate +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; +#define glStencilFuncSeparate glad_glStencilFuncSeparate +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; +#define glStencilMaskSeparate glad_glStencilMaskSeparate +typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; +#define glAttachShader glad_glAttachShader +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name); +GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; +#define glBindAttribLocation glad_glBindAttribLocation +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); +GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; +#define glCompileShader glad_glCompileShader +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void); +GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; +#define glCreateProgram glad_glCreateProgram +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); +GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; +#define glCreateShader glad_glCreateShader +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); +GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; +#define glDeleteProgram glad_glDeleteProgram +typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); +GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; +#define glDeleteShader glad_glDeleteShader +typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; +#define glDetachShader glad_glDetachShader +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; +#define glDisableVertexAttribArray glad_glDisableVertexAttribArray +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; +#define glEnableVertexAttribArray glad_glEnableVertexAttribArray +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; +#define glGetActiveAttrib glad_glGetActiveAttrib +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; +#define glGetActiveUniform glad_glGetActiveUniform +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; +#define glGetAttachedShaders glad_glGetAttachedShaders +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; +#define glGetAttribLocation glad_glGetAttribLocation +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); +GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; +#define glGetProgramiv glad_glGetProgramiv +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; +#define glGetProgramInfoLog glad_glGetProgramInfoLog +typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); +GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; +#define glGetShaderiv glad_glGetShaderiv +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; +#define glGetShaderInfoLog glad_glGetShaderInfoLog +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; +#define glGetShaderSource glad_glGetShaderSource +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; +#define glGetUniformLocation glad_glGetUniformLocation +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); +GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; +#define glGetUniformfv glad_glGetUniformfv +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); +GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; +#define glGetUniformiv glad_glGetUniformiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params); +GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; +#define glGetVertexAttribdv glad_glGetVertexAttribdv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); +GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; +#define glGetVertexAttribfv glad_glGetVertexAttribfv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); +GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; +#define glGetVertexAttribiv glad_glGetVertexAttribiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer); +GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; +#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); +GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; +#define glIsProgram glad_glIsProgram +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); +GLAPI PFNGLISSHADERPROC glad_glIsShader; +#define glIsShader glad_glIsShader +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); +GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; +#define glLinkProgram glad_glLinkProgram +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; +#define glShaderSource glad_glShaderSource +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); +GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; +#define glUseProgram glad_glUseProgram +typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; +#define glUniform1f glad_glUniform1f +typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; +#define glUniform2f glad_glUniform2f +typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; +#define glUniform3f glad_glUniform3f +typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; +#define glUniform4f glad_glUniform4f +typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; +#define glUniform1i glad_glUniform1i +typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; +#define glUniform2i glad_glUniform2i +typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; +#define glUniform3i glad_glUniform3i +typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; +#define glUniform4i glad_glUniform4i +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; +#define glUniform1fv glad_glUniform1fv +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; +#define glUniform2fv glad_glUniform2fv +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; +#define glUniform3fv glad_glUniform3fv +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; +#define glUniform4fv glad_glUniform4fv +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; +#define glUniform1iv glad_glUniform1iv +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; +#define glUniform2iv glad_glUniform2iv +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; +#define glUniform3iv glad_glUniform3iv +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; +#define glUniform4iv glad_glUniform4iv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; +#define glUniformMatrix2fv glad_glUniformMatrix2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; +#define glUniformMatrix3fv glad_glUniformMatrix3fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; +#define glUniformMatrix4fv glad_glUniformMatrix4fv +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); +GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; +#define glValidateProgram glad_glValidateProgram +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; +#define glVertexAttrib1d glad_glVertexAttrib1d +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; +#define glVertexAttrib1dv glad_glVertexAttrib1dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; +#define glVertexAttrib1f glad_glVertexAttrib1f +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; +#define glVertexAttrib1fv glad_glVertexAttrib1fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; +#define glVertexAttrib1s glad_glVertexAttrib1s +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; +#define glVertexAttrib1sv glad_glVertexAttrib1sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; +#define glVertexAttrib2d glad_glVertexAttrib2d +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; +#define glVertexAttrib2dv glad_glVertexAttrib2dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; +#define glVertexAttrib2f glad_glVertexAttrib2f +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; +#define glVertexAttrib2fv glad_glVertexAttrib2fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; +#define glVertexAttrib2s glad_glVertexAttrib2s +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; +#define glVertexAttrib2sv glad_glVertexAttrib2sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; +#define glVertexAttrib3d glad_glVertexAttrib3d +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; +#define glVertexAttrib3dv glad_glVertexAttrib3dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; +#define glVertexAttrib3f glad_glVertexAttrib3f +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; +#define glVertexAttrib3fv glad_glVertexAttrib3fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; +#define glVertexAttrib3s glad_glVertexAttrib3s +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; +#define glVertexAttrib3sv glad_glVertexAttrib3sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v); +GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; +#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; +#define glVertexAttrib4Niv glad_glVertexAttrib4Niv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; +#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; +#define glVertexAttrib4Nub glad_glVertexAttrib4Nub +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v); +GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; +#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; +#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v); +GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; +#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v); +GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; +#define glVertexAttrib4bv glad_glVertexAttrib4bv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; +#define glVertexAttrib4d glad_glVertexAttrib4d +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; +#define glVertexAttrib4dv glad_glVertexAttrib4dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; +#define glVertexAttrib4f glad_glVertexAttrib4f +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; +#define glVertexAttrib4fv glad_glVertexAttrib4fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; +#define glVertexAttrib4iv glad_glVertexAttrib4iv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; +#define glVertexAttrib4s glad_glVertexAttrib4s +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; +#define glVertexAttrib4sv glad_glVertexAttrib4sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v); +GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; +#define glVertexAttrib4ubv glad_glVertexAttrib4ubv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; +#define glVertexAttrib4uiv glad_glVertexAttrib4uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v); +GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; +#define glVertexAttrib4usv glad_glVertexAttrib4usv +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; +#define glVertexAttribPointer glad_glVertexAttribPointer +#endif +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +GLAPI int GLAD_GL_VERSION_2_1; +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; +#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; +#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; +#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; +#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; +#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; +#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv +#endif +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +GLAPI int GLAD_GL_VERSION_3_0; +typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; +#define glColorMaski glad_glColorMaski +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data); +GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; +#define glGetBooleani_v glad_glGetBooleani_v +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); +GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; +#define glGetIntegeri_v glad_glGetIntegeri_v +typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); +GLAPI PFNGLENABLEIPROC glad_glEnablei; +#define glEnablei glad_glEnablei +typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); +GLAPI PFNGLDISABLEIPROC glad_glDisablei; +#define glDisablei glad_glDisablei +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; +#define glIsEnabledi glad_glIsEnabledi +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; +#define glBeginTransformFeedback glad_glBeginTransformFeedback +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void); +GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; +#define glEndTransformFeedback glad_glEndTransformFeedback +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; +#define glBindBufferRange glad_glBindBufferRange +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; +#define glBindBufferBase glad_glBindBufferBase +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; +#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; +#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; +#define glClampColor glad_glClampColor +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; +#define glBeginConditionalRender glad_glBeginConditionalRender +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void); +GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; +#define glEndConditionalRender glad_glEndConditionalRender +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; +#define glVertexAttribIPointer glad_glVertexAttribIPointer +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); +GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; +#define glGetVertexAttribIiv glad_glGetVertexAttribIiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params); +GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; +#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; +#define glVertexAttribI1i glad_glVertexAttribI1i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; +#define glVertexAttribI2i glad_glVertexAttribI2i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; +#define glVertexAttribI3i glad_glVertexAttribI3i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; +#define glVertexAttribI4i glad_glVertexAttribI4i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; +#define glVertexAttribI1ui glad_glVertexAttribI1ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; +#define glVertexAttribI2ui glad_glVertexAttribI2ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; +#define glVertexAttribI3ui glad_glVertexAttribI3ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; +#define glVertexAttribI4ui glad_glVertexAttribI4ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; +#define glVertexAttribI1iv glad_glVertexAttribI1iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; +#define glVertexAttribI2iv glad_glVertexAttribI2iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; +#define glVertexAttribI3iv glad_glVertexAttribI3iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; +#define glVertexAttribI4iv glad_glVertexAttribI4iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; +#define glVertexAttribI1uiv glad_glVertexAttribI1uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; +#define glVertexAttribI2uiv glad_glVertexAttribI2uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; +#define glVertexAttribI3uiv glad_glVertexAttribI3uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; +#define glVertexAttribI4uiv glad_glVertexAttribI4uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v); +GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; +#define glVertexAttribI4bv glad_glVertexAttribI4bv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; +#define glVertexAttribI4sv glad_glVertexAttribI4sv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v); +GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; +#define glVertexAttribI4ubv glad_glVertexAttribI4ubv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v); +GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +#define glVertexAttribI4usv glad_glVertexAttribI4usv +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); +GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; +#define glGetUniformuiv glad_glGetUniformuiv +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name); +GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; +#define glBindFragDataLocation glad_glBindFragDataLocation +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; +#define glGetFragDataLocation glad_glGetFragDataLocation +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; +#define glUniform1ui glad_glUniform1ui +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; +#define glUniform2ui glad_glUniform2ui +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; +#define glUniform3ui glad_glUniform3ui +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; +#define glUniform4ui glad_glUniform4ui +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; +#define glUniform1uiv glad_glUniform1uiv +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; +#define glUniform2uiv glad_glUniform2uiv +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +#define glUniform3uiv glad_glUniform3uiv +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; +#define glUniform4uiv glad_glUniform4uiv +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params); +GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; +#define glTexParameterIiv glad_glTexParameterIiv +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params); +GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; +#define glTexParameterIuiv glad_glTexParameterIuiv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; +#define glGetTexParameterIiv glad_glGetTexParameterIiv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params); +GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; +#define glGetTexParameterIuiv glad_glGetTexParameterIuiv +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; +#define glClearBufferiv glad_glClearBufferiv +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; +#define glClearBufferuiv glad_glClearBufferuiv +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; +#define glClearBufferfv glad_glClearBufferfv +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; +#define glClearBufferfi glad_glClearBufferfi +typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; +#define glGetStringi glad_glGetStringi +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; +#define glIsRenderbuffer glad_glIsRenderbuffer +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; +#define glBindRenderbuffer glad_glBindRenderbuffer +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); +GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; +#define glDeleteRenderbuffers glad_glDeleteRenderbuffers +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); +GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; +#define glGenRenderbuffers glad_glGenRenderbuffers +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; +#define glRenderbufferStorage glad_glRenderbufferStorage +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; +#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; +#define glIsFramebuffer glad_glIsFramebuffer +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; +#define glBindFramebuffer glad_glBindFramebuffer +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); +GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; +#define glDeleteFramebuffers glad_glDeleteFramebuffers +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); +GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; +#define glGenFramebuffers glad_glGenFramebuffers +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; +#define glCheckFramebufferStatus glad_glCheckFramebufferStatus +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; +#define glFramebufferTexture1D glad_glFramebufferTexture1D +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; +#define glFramebufferTexture2D glad_glFramebufferTexture2D +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; +#define glFramebufferTexture3D glad_glFramebufferTexture3D +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; +#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; +#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); +GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; +#define glGenerateMipmap glad_glGenerateMipmap +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; +#define glBlitFramebuffer glad_glBlitFramebuffer +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; +#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; +#define glFramebufferTextureLayer glad_glFramebufferTextureLayer +typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; +#define glMapBufferRange glad_glMapBufferRange +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; +#define glFlushMappedBufferRange glad_glFlushMappedBufferRange +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); +GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; +#define glBindVertexArray glad_glBindVertexArray +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); +GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; +#define glDeleteVertexArrays glad_glDeleteVertexArrays +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); +GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; +#define glGenVertexArrays glad_glGenVertexArrays +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); +GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; +#define glIsVertexArray glad_glIsVertexArray +#endif +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +GLAPI int GLAD_GL_VERSION_3_1; +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; +#define glDrawArraysInstanced glad_glDrawArraysInstanced +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; +#define glDrawElementsInstanced glad_glDrawElementsInstanced +typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); +GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; +#define glTexBuffer glad_glTexBuffer +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); +GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; +#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; +#define glCopyBufferSubData glad_glCopyBufferSubData +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; +#define glGetUniformIndices glad_glGetUniformIndices +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; +#define glGetActiveUniformsiv glad_glGetActiveUniformsiv +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; +#define glGetActiveUniformName glad_glGetActiveUniformName +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName); +GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; +#define glGetUniformBlockIndex glad_glGetUniformBlockIndex +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; +#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; +#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; +#define glUniformBlockBinding glad_glUniformBlockBinding +#endif +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +GLAPI int GLAD_GL_VERSION_3_2; +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; +#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; +#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; +#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; +#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); +GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; +#define glProvokingVertex glad_glProvokingVertex +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); +GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; +#define glFenceSync glad_glFenceSync +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); +GLAPI PFNGLISSYNCPROC glad_glIsSync; +#define glIsSync glad_glIsSync +typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); +GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; +#define glDeleteSync glad_glDeleteSync +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; +#define glClientWaitSync glad_glClientWaitSync +typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; +#define glWaitSync glad_glWaitSync +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); +GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; +#define glGetInteger64v glad_glGetInteger64v +typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; +#define glGetSynciv glad_glGetSynciv +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); +GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; +#define glGetInteger64i_v glad_glGetInteger64i_v +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params); +GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; +#define glGetBufferParameteri64v glad_glGetBufferParameteri64v +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; +#define glFramebufferTexture glad_glFramebufferTexture +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; +#define glTexImage2DMultisample glad_glTexImage2DMultisample +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; +#define glTexImage3DMultisample glad_glTexImage3DMultisample +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val); +GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; +#define glGetMultisamplefv glad_glGetMultisamplefv +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); +GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; +#define glSampleMaski glad_glSampleMaski +#endif +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +GLAPI int GLAD_GL_VERSION_3_3; +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; +#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; +#define glGetFragDataIndex glad_glGetFragDataIndex +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); +GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; +#define glGenSamplers glad_glGenSamplers +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); +GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; +#define glDeleteSamplers glad_glDeleteSamplers +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); +GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; +#define glIsSampler glad_glIsSampler +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); +GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; +#define glBindSampler glad_glBindSampler +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); +GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; +#define glSamplerParameteri glad_glSamplerParameteri +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param); +GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; +#define glSamplerParameteriv glad_glSamplerParameteriv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); +GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; +#define glSamplerParameterf glad_glSamplerParameterf +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; +#define glSamplerParameterfv glad_glSamplerParameterfv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param); +GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; +#define glSamplerParameterIiv glad_glSamplerParameterIiv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param); +GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; +#define glSamplerParameterIuiv glad_glSamplerParameterIuiv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; +#define glGetSamplerParameteriv glad_glGetSamplerParameteriv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; +#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params); +GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; +#define glGetSamplerParameterfv glad_glGetSamplerParameterfv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; +#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); +GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; +#define glQueryCounter glad_glQueryCounter +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params); +GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; +#define glGetQueryObjecti64v glad_glGetQueryObjecti64v +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params); +GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; +#define glGetQueryObjectui64v glad_glGetQueryObjectui64v +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); +GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; +#define glVertexAttribDivisor glad_glVertexAttribDivisor +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; +#define glVertexAttribP1ui glad_glVertexAttribP1ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; +#define glVertexAttribP1uiv glad_glVertexAttribP1uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; +#define glVertexAttribP2ui glad_glVertexAttribP2ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; +#define glVertexAttribP2uiv glad_glVertexAttribP2uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; +#define glVertexAttribP3ui glad_glVertexAttribP3ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; +#define glVertexAttribP3uiv glad_glVertexAttribP3uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; +#define glVertexAttribP4ui glad_glVertexAttribP4ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; +#define glVertexAttribP4uiv glad_glVertexAttribP4uiv +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; +#define glVertexP2ui glad_glVertexP2ui +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value); +GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; +#define glVertexP2uiv glad_glVertexP2uiv +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; +#define glVertexP3ui glad_glVertexP3ui +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value); +GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; +#define glVertexP3uiv glad_glVertexP3uiv +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; +#define glVertexP4ui glad_glVertexP4ui +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value); +GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; +#define glVertexP4uiv glad_glVertexP4uiv +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; +#define glTexCoordP1ui glad_glTexCoordP1ui +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; +#define glTexCoordP1uiv glad_glTexCoordP1uiv +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; +#define glTexCoordP2ui glad_glTexCoordP2ui +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; +#define glTexCoordP2uiv glad_glTexCoordP2uiv +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; +#define glTexCoordP3ui glad_glTexCoordP3ui +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; +#define glTexCoordP3uiv glad_glTexCoordP3uiv +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; +#define glTexCoordP4ui glad_glTexCoordP4ui +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; +#define glTexCoordP4uiv glad_glTexCoordP4uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; +#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; +#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; +#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; +#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; +#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; +#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; +#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; +#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv +typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; +#define glNormalP3ui glad_glNormalP3ui +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; +#define glNormalP3uiv glad_glNormalP3uiv +typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; +#define glColorP3ui glad_glColorP3ui +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color); +GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; +#define glColorP3uiv glad_glColorP3uiv +typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; +#define glColorP4ui glad_glColorP4ui +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color); +GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; +#define glColorP4uiv glad_glColorP4uiv +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; +#define glSecondaryColorP3ui glad_glSecondaryColorP3ui +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color); +GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; +#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv +#endif +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +GLAPI int GLAD_GL_VERSION_4_0; +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC)(GLfloat value); +GLAPI PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading; +#define glMinSampleShading glad_glMinSampleShading +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); +GLAPI PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi; +#define glBlendEquationi glad_glBlendEquationi +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei; +#define glBlendEquationSeparatei glad_glBlendEquationSeparatei +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); +GLAPI PFNGLBLENDFUNCIPROC glad_glBlendFunci; +#define glBlendFunci glad_glBlendFunci +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei; +#define glBlendFuncSeparatei glad_glBlendFuncSeparatei +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect); +GLAPI PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect; +#define glDrawArraysIndirect glad_glDrawArraysIndirect +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect); +GLAPI PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect; +#define glDrawElementsIndirect glad_glDrawElementsIndirect +typedef void (APIENTRYP PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); +GLAPI PFNGLUNIFORM1DPROC glad_glUniform1d; +#define glUniform1d glad_glUniform1d +typedef void (APIENTRYP PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); +GLAPI PFNGLUNIFORM2DPROC glad_glUniform2d; +#define glUniform2d glad_glUniform2d +typedef void (APIENTRYP PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI PFNGLUNIFORM3DPROC glad_glUniform3d; +#define glUniform3d glad_glUniform3d +typedef void (APIENTRYP PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLUNIFORM4DPROC glad_glUniform4d; +#define glUniform4d glad_glUniform4d +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLUNIFORM1DVPROC glad_glUniform1dv; +#define glUniform1dv glad_glUniform1dv +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLUNIFORM2DVPROC glad_glUniform2dv; +#define glUniform2dv glad_glUniform2dv +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLUNIFORM3DVPROC glad_glUniform3dv; +#define glUniform3dv glad_glUniform3dv +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLUNIFORM4DVPROC glad_glUniform4dv; +#define glUniform4dv glad_glUniform4dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv; +#define glUniformMatrix2dv glad_glUniformMatrix2dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv; +#define glUniformMatrix3dv glad_glUniformMatrix3dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv; +#define glUniformMatrix4dv glad_glUniformMatrix4dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv; +#define glUniformMatrix2x3dv glad_glUniformMatrix2x3dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv; +#define glUniformMatrix2x4dv glad_glUniformMatrix2x4dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv; +#define glUniformMatrix3x2dv glad_glUniformMatrix3x2dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv; +#define glUniformMatrix3x4dv glad_glUniformMatrix3x4dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv; +#define glUniformMatrix4x2dv glad_glUniformMatrix4x2dv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv; +#define glUniformMatrix4x3dv glad_glUniformMatrix4x3dv +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble *params); +GLAPI PFNGLGETUNIFORMDVPROC glad_glGetUniformdv; +#define glGetUniformdv glad_glGetUniformdv +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar *name); +GLAPI PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation; +#define glGetSubroutineUniformLocation glad_glGetSubroutineUniformLocation +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar *name); +GLAPI PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex; +#define glGetSubroutineIndex glad_glGetSubroutineIndex +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv; +#define glGetActiveSubroutineUniformiv glad_glGetActiveSubroutineUniformiv +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName; +#define glGetActiveSubroutineUniformName glad_glGetActiveSubroutineUniformName +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName; +#define glGetActiveSubroutineName glad_glGetActiveSubroutineName +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv; +#define glUniformSubroutinesuiv glad_glUniformSubroutinesuiv +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint *params); +GLAPI PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv; +#define glGetUniformSubroutineuiv glad_glGetUniformSubroutineuiv +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv; +#define glGetProgramStageiv glad_glGetProgramStageiv +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); +GLAPI PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri; +#define glPatchParameteri glad_glPatchParameteri +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat *values); +GLAPI PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv; +#define glPatchParameterfv glad_glPatchParameterfv +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); +GLAPI PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback; +#define glBindTransformFeedback glad_glBindTransformFeedback +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint *ids); +GLAPI PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks; +#define glDeleteTransformFeedbacks glad_glDeleteTransformFeedbacks +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); +GLAPI PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks; +#define glGenTransformFeedbacks glad_glGenTransformFeedbacks +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); +GLAPI PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback; +#define glIsTransformFeedback glad_glIsTransformFeedback +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); +GLAPI PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback; +#define glPauseTransformFeedback glad_glPauseTransformFeedback +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); +GLAPI PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback; +#define glResumeTransformFeedback glad_glResumeTransformFeedback +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); +GLAPI PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback; +#define glDrawTransformFeedback glad_glDrawTransformFeedback +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream); +GLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream; +#define glDrawTransformFeedbackStream glad_glDrawTransformFeedbackStream +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); +GLAPI PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed; +#define glBeginQueryIndexed glad_glBeginQueryIndexed +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); +GLAPI PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed; +#define glEndQueryIndexed glad_glEndQueryIndexed +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv; +#define glGetQueryIndexediv glad_glGetQueryIndexediv +#endif +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +GLAPI int GLAD_GL_VERSION_4_1; +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(void); +GLAPI PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; +#define glReleaseShaderCompiler glad_glReleaseShaderCompiler +typedef void (APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI PFNGLSHADERBINARYPROC glad_glShaderBinary; +#define glShaderBinary glad_glShaderBinary +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; +#define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); +GLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef; +#define glDepthRangef glad_glDepthRangef +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d); +GLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf; +#define glClearDepthf glad_glClearDepthf +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary; +#define glGetProgramBinary glad_glGetProgramBinary +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI PFNGLPROGRAMBINARYPROC glad_glProgramBinary; +#define glProgramBinary glad_glProgramBinary +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); +GLAPI PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri; +#define glProgramParameteri glad_glProgramParameteri +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages; +#define glUseProgramStages glad_glUseProgramStages +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); +GLAPI PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram; +#define glActiveShaderProgram glad_glActiveShaderProgram +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv; +#define glCreateShaderProgramv glad_glCreateShaderProgramv +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); +GLAPI PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline; +#define glBindProgramPipeline glad_glBindProgramPipeline +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint *pipelines); +GLAPI PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines; +#define glDeleteProgramPipelines glad_glDeleteProgramPipelines +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines); +GLAPI PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines; +#define glGenProgramPipelines glad_glGenProgramPipelines +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); +GLAPI PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline; +#define glIsProgramPipeline glad_glIsProgramPipeline +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint *params); +GLAPI PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv; +#define glGetProgramPipelineiv glad_glGetProgramPipelineiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0); +GLAPI PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i; +#define glProgramUniform1i glad_glProgramUniform1i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv; +#define glProgramUniform1iv glad_glProgramUniform1iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0); +GLAPI PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f; +#define glProgramUniform1f glad_glProgramUniform1f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv; +#define glProgramUniform1fv glad_glProgramUniform1fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0); +GLAPI PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d; +#define glProgramUniform1d glad_glProgramUniform1d +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv; +#define glProgramUniform1dv glad_glProgramUniform1dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0); +GLAPI PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui; +#define glProgramUniform1ui glad_glProgramUniform1ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv; +#define glProgramUniform1uiv glad_glProgramUniform1uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1); +GLAPI PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i; +#define glProgramUniform2i glad_glProgramUniform2i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv; +#define glProgramUniform2iv glad_glProgramUniform2iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f; +#define glProgramUniform2f glad_glProgramUniform2f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv; +#define glProgramUniform2fv glad_glProgramUniform2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d; +#define glProgramUniform2d glad_glProgramUniform2d +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv; +#define glProgramUniform2dv glad_glProgramUniform2dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui; +#define glProgramUniform2ui glad_glProgramUniform2ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv; +#define glProgramUniform2uiv glad_glProgramUniform2uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i; +#define glProgramUniform3i glad_glProgramUniform3i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv; +#define glProgramUniform3iv glad_glProgramUniform3iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f; +#define glProgramUniform3f glad_glProgramUniform3f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv; +#define glProgramUniform3fv glad_glProgramUniform3fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d; +#define glProgramUniform3d glad_glProgramUniform3d +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv; +#define glProgramUniform3dv glad_glProgramUniform3dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui; +#define glProgramUniform3ui glad_glProgramUniform3ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv; +#define glProgramUniform3uiv glad_glProgramUniform3uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i; +#define glProgramUniform4i glad_glProgramUniform4i +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv; +#define glProgramUniform4iv glad_glProgramUniform4iv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f; +#define glProgramUniform4f glad_glProgramUniform4f +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv; +#define glProgramUniform4fv glad_glProgramUniform4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d; +#define glProgramUniform4d glad_glProgramUniform4d +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv; +#define glProgramUniform4dv glad_glProgramUniform4dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui; +#define glProgramUniform4ui glad_glProgramUniform4ui +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv; +#define glProgramUniform4uiv glad_glProgramUniform4uiv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv; +#define glProgramUniformMatrix2fv glad_glProgramUniformMatrix2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv; +#define glProgramUniformMatrix3fv glad_glProgramUniformMatrix3fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv; +#define glProgramUniformMatrix4fv glad_glProgramUniformMatrix4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv; +#define glProgramUniformMatrix2dv glad_glProgramUniformMatrix2dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv; +#define glProgramUniformMatrix3dv glad_glProgramUniformMatrix3dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv; +#define glProgramUniformMatrix4dv glad_glProgramUniformMatrix4dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv; +#define glProgramUniformMatrix2x3fv glad_glProgramUniformMatrix2x3fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv; +#define glProgramUniformMatrix3x2fv glad_glProgramUniformMatrix3x2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv; +#define glProgramUniformMatrix2x4fv glad_glProgramUniformMatrix2x4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv; +#define glProgramUniformMatrix4x2fv glad_glProgramUniformMatrix4x2fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv; +#define glProgramUniformMatrix3x4fv glad_glProgramUniformMatrix3x4fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv; +#define glProgramUniformMatrix4x3fv glad_glProgramUniformMatrix4x3fv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv; +#define glProgramUniformMatrix2x3dv glad_glProgramUniformMatrix2x3dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv; +#define glProgramUniformMatrix3x2dv glad_glProgramUniformMatrix3x2dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv; +#define glProgramUniformMatrix2x4dv glad_glProgramUniformMatrix2x4dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv; +#define glProgramUniformMatrix4x2dv glad_glProgramUniformMatrix4x2dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv; +#define glProgramUniformMatrix3x4dv glad_glProgramUniformMatrix3x4dv +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv; +#define glProgramUniformMatrix4x3dv glad_glProgramUniformMatrix4x3dv +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); +GLAPI PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline; +#define glValidateProgramPipeline glad_glValidateProgramPipeline +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog; +#define glGetProgramPipelineInfoLog glad_glGetProgramPipelineInfoLog +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x); +GLAPI PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d; +#define glVertexAttribL1d glad_glVertexAttribL1d +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y); +GLAPI PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d; +#define glVertexAttribL2d glad_glVertexAttribL2d +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d; +#define glVertexAttribL3d glad_glVertexAttribL3d +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d; +#define glVertexAttribL4d glad_glVertexAttribL4d +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv; +#define glVertexAttribL1dv glad_glVertexAttribL1dv +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv; +#define glVertexAttribL2dv glad_glVertexAttribL2dv +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv; +#define glVertexAttribL3dv glad_glVertexAttribL3dv +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv; +#define glVertexAttribL4dv glad_glVertexAttribL4dv +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer; +#define glVertexAttribLPointer glad_glVertexAttribLPointer +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble *params); +GLAPI PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv; +#define glGetVertexAttribLdv glad_glGetVertexAttribLdv +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat *v); +GLAPI PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv; +#define glViewportArrayv glad_glViewportArrayv +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf; +#define glViewportIndexedf glad_glViewportIndexedf +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv; +#define glViewportIndexedfv glad_glViewportIndexedfv +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint *v); +GLAPI PFNGLSCISSORARRAYVPROC glad_glScissorArrayv; +#define glScissorArrayv glad_glScissorArrayv +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed; +#define glScissorIndexed glad_glScissorIndexed +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv; +#define glScissorIndexedv glad_glScissorIndexedv +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble *v); +GLAPI PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv; +#define glDepthRangeArrayv glad_glDepthRangeArrayv +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); +GLAPI PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed; +#define glDepthRangeIndexed glad_glDepthRangeIndexed +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat *data); +GLAPI PFNGLGETFLOATI_VPROC glad_glGetFloati_v; +#define glGetFloati_v glad_glGetFloati_v +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble *data); +GLAPI PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v; +#define glGetDoublei_v glad_glGetDoublei_v +#endif +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 1 +GLAPI int GLAD_GL_VERSION_4_2; +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance; +#define glDrawArraysInstancedBaseInstance glad_glDrawArraysInstancedBaseInstance +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance; +#define glDrawElementsInstancedBaseInstance glad_glDrawElementsInstancedBaseInstance +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance; +#define glDrawElementsInstancedBaseVertexBaseInstance glad_glDrawElementsInstancedBaseVertexBaseInstance +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); +GLAPI PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ; +#define glGetInternalformativ glad_glGetInternalformativ +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv; +#define glGetActiveAtomicCounterBufferiv glad_glGetActiveAtomicCounterBufferiv +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture; +#define glBindImageTexture glad_glBindImageTexture +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); +GLAPI PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier; +#define glMemoryBarrier glad_glMemoryBarrier +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D; +#define glTexStorage1D glad_glTexStorage1D +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D; +#define glTexStorage2D glad_glTexStorage2D +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D; +#define glTexStorage3D glad_glTexStorage3D +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, GLsizei instancecount); +GLAPI PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced; +#define glDrawTransformFeedbackInstanced glad_glDrawTransformFeedbackInstanced +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +GLAPI PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced; +#define glDrawTransformFeedbackStreamInstanced glad_glDrawTransformFeedbackStreamInstanced +#endif +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +GLAPI int GLAD_GL_VERSION_4_3; +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData; +#define glClearBufferData glad_glClearBufferData +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData; +#define glClearBufferSubData glad_glClearBufferSubData +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute; +#define glDispatchCompute glad_glDispatchCompute +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); +GLAPI PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect; +#define glDispatchComputeIndirect glad_glDispatchComputeIndirect +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData; +#define glCopyImageSubData glad_glCopyImageSubData +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +GLAPI PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri; +#define glFramebufferParameteri glad_glFramebufferParameteri +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv; +#define glGetFramebufferParameteriv glad_glGetFramebufferParameteriv +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); +GLAPI PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v; +#define glGetInternalformati64v glad_glGetInternalformati64v +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage; +#define glInvalidateTexSubImage glad_glInvalidateTexSubImage +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level); +GLAPI PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage; +#define glInvalidateTexImage glad_glInvalidateTexImage +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData; +#define glInvalidateBufferSubData glad_glInvalidateBufferSubData +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer); +GLAPI PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData; +#define glInvalidateBufferData glad_glInvalidateBufferData +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer; +#define glInvalidateFramebuffer glad_glInvalidateFramebuffer +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer; +#define glInvalidateSubFramebuffer glad_glInvalidateSubFramebuffer +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect; +#define glMultiDrawArraysIndirect glad_glMultiDrawArraysIndirect +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect; +#define glMultiDrawElementsIndirect glad_glMultiDrawElementsIndirect +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv; +#define glGetProgramInterfaceiv glad_glGetProgramInterfaceiv +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar *name); +GLAPI PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex; +#define glGetProgramResourceIndex glad_glGetProgramResourceIndex +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName; +#define glGetProgramResourceName glad_glGetProgramResourceName +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); +GLAPI PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv; +#define glGetProgramResourceiv glad_glGetProgramResourceiv +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar *name); +GLAPI PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation; +#define glGetProgramResourceLocation glad_glGetProgramResourceLocation +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, GLenum programInterface, const GLchar *name); +GLAPI PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex; +#define glGetProgramResourceLocationIndex glad_glGetProgramResourceLocationIndex +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding; +#define glShaderStorageBlockBinding glad_glShaderStorageBlockBinding +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange; +#define glTexBufferRange glad_glTexBufferRange +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample; +#define glTexStorage2DMultisample glad_glTexStorage2DMultisample +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample; +#define glTexStorage3DMultisample glad_glTexStorage3DMultisample +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI PFNGLTEXTUREVIEWPROC glad_glTextureView; +#define glTextureView glad_glTextureView +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; +#define glBindVertexBuffer glad_glBindVertexBuffer +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; +#define glVertexAttribFormat glad_glVertexAttribFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; +#define glVertexAttribIFormat glad_glVertexAttribIFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; +#define glVertexAttribLFormat glad_glVertexAttribLFormat +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); +GLAPI PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; +#define glVertexAttribBinding glad_glVertexAttribBinding +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); +GLAPI PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; +#define glVertexBindingDivisor glad_glVertexBindingDivisor +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl; +#define glDebugMessageControl glad_glDebugMessageControl +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert; +#define glDebugMessageInsert glad_glDebugMessageInsert +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void *userParam); +GLAPI PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback; +#define glDebugMessageCallback glad_glDebugMessageCallback +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog; +#define glGetDebugMessageLog glad_glGetDebugMessageLog +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup; +#define glPushDebugGroup glad_glPushDebugGroup +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC)(void); +GLAPI PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup; +#define glPopDebugGroup glad_glPopDebugGroup +typedef void (APIENTRYP PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI PFNGLOBJECTLABELPROC glad_glObjectLabel; +#define glObjectLabel glad_glObjectLabel +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel; +#define glGetObjectLabel glad_glGetObjectLabel +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC)(const void *ptr, GLsizei length, const GLchar *label); +GLAPI PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel; +#define glObjectPtrLabel glad_glObjectPtrLabel +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC)(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel; +#define glGetObjectPtrLabel glad_glGetObjectPtrLabel +typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params); +GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv; +#define glGetPointerv glad_glGetPointerv +#endif +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +GLAPI int GLAD_GL_VERSION_4_4; +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; +#define glBufferStorage glad_glBufferStorage +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage; +#define glClearTexImage glad_glClearTexImage +typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage; +#define glClearTexSubImage glad_glClearTexSubImage +typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase; +#define glBindBuffersBase glad_glBindBuffersBase +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange; +#define glBindBuffersRange glad_glBindBuffersRange +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC)(GLuint first, GLsizei count, const GLuint *textures); +GLAPI PFNGLBINDTEXTURESPROC glad_glBindTextures; +#define glBindTextures glad_glBindTextures +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC)(GLuint first, GLsizei count, const GLuint *samplers); +GLAPI PFNGLBINDSAMPLERSPROC glad_glBindSamplers; +#define glBindSamplers glad_glBindSamplers +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC)(GLuint first, GLsizei count, const GLuint *textures); +GLAPI PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures; +#define glBindImageTextures glad_glBindImageTextures +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC)(GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +GLAPI PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers; +#define glBindVertexBuffers glad_glBindVertexBuffers +#endif +#ifndef GL_VERSION_4_5 +#define GL_VERSION_4_5 1 +GLAPI int GLAD_GL_VERSION_4_5; +typedef void (APIENTRYP PFNGLCLIPCONTROLPROC)(GLenum origin, GLenum depth); +GLAPI PFNGLCLIPCONTROLPROC glad_glClipControl; +#define glClipControl glad_glClipControl +typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint *ids); +GLAPI PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks; +#define glCreateTransformFeedbacks glad_glCreateTransformFeedbacks +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)(GLuint xfb, GLuint index, GLuint buffer); +GLAPI PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase; +#define glTransformFeedbackBufferBase glad_glTransformFeedbackBufferBase +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange; +#define glTransformFeedbackBufferRange glad_glTransformFeedbackBufferRange +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC)(GLuint xfb, GLenum pname, GLint *param); +GLAPI PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv; +#define glGetTransformFeedbackiv glad_glGetTransformFeedbackiv +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint *param); +GLAPI PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v; +#define glGetTransformFeedbacki_v glad_glGetTransformFeedbacki_v +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint64 *param); +GLAPI PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v; +#define glGetTransformFeedbacki64_v glad_glGetTransformFeedbacki64_v +typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint *buffers); +GLAPI PFNGLCREATEBUFFERSPROC glad_glCreateBuffers; +#define glCreateBuffers glad_glCreateBuffers +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage; +#define glNamedBufferStorage glad_glNamedBufferStorage +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC)(GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData; +#define glNamedBufferData glad_glNamedBufferData +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData; +#define glNamedBufferSubData glad_glNamedBufferSubData +typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData; +#define glCopyNamedBufferSubData glad_glCopyNamedBufferSubData +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData; +#define glClearNamedBufferData glad_glClearNamedBufferData +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData; +#define glClearNamedBufferSubData glad_glClearNamedBufferSubData +typedef void * (APIENTRYP PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access); +GLAPI PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer; +#define glMapNamedBuffer glad_glMapNamedBuffer +typedef void * (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange; +#define glMapNamedBufferRange glad_glMapNamedBufferRange +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer); +GLAPI PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer; +#define glUnmapNamedBuffer glad_glUnmapNamedBuffer +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange; +#define glFlushMappedNamedBufferRange glad_glFlushMappedNamedBufferRange +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC)(GLuint buffer, GLenum pname, GLint *params); +GLAPI PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv; +#define glGetNamedBufferParameteriv glad_glGetNamedBufferParameteriv +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)(GLuint buffer, GLenum pname, GLint64 *params); +GLAPI PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v; +#define glGetNamedBufferParameteri64v glad_glGetNamedBufferParameteri64v +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC)(GLuint buffer, GLenum pname, void **params); +GLAPI PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv; +#define glGetNamedBufferPointerv glad_glGetNamedBufferPointerv +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData; +#define glGetNamedBufferSubData glad_glGetNamedBufferSubData +typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); +GLAPI PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers; +#define glCreateFramebuffers glad_glCreateFramebuffers +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer; +#define glNamedFramebufferRenderbuffer glad_glNamedFramebufferRenderbuffer +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)(GLuint framebuffer, GLenum pname, GLint param); +GLAPI PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri; +#define glNamedFramebufferParameteri glad_glNamedFramebufferParameteri +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture; +#define glNamedFramebufferTexture glad_glNamedFramebufferTexture +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer; +#define glNamedFramebufferTextureLayer glad_glNamedFramebufferTextureLayer +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)(GLuint framebuffer, GLenum buf); +GLAPI PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer; +#define glNamedFramebufferDrawBuffer glad_glNamedFramebufferDrawBuffer +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)(GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers; +#define glNamedFramebufferDrawBuffers glad_glNamedFramebufferDrawBuffers +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)(GLuint framebuffer, GLenum src); +GLAPI PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer; +#define glNamedFramebufferReadBuffer glad_glNamedFramebufferReadBuffer +typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); +GLAPI PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData; +#define glInvalidateNamedFramebufferData glad_glInvalidateNamedFramebufferData +typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData; +#define glInvalidateNamedFramebufferSubData glad_glInvalidateNamedFramebufferSubData +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv; +#define glClearNamedFramebufferiv glad_glClearNamedFramebufferiv +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv; +#define glClearNamedFramebufferuiv glad_glClearNamedFramebufferuiv +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv; +#define glClearNamedFramebufferfv glad_glClearNamedFramebufferfv +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi; +#define glClearNamedFramebufferfi glad_glClearNamedFramebufferfi +typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer; +#define glBlitNamedFramebuffer glad_glBlitNamedFramebuffer +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)(GLuint framebuffer, GLenum target); +GLAPI PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus; +#define glCheckNamedFramebufferStatus glad_glCheckNamedFramebufferStatus +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)(GLuint framebuffer, GLenum pname, GLint *param); +GLAPI PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv; +#define glGetNamedFramebufferParameteriv glad_glGetNamedFramebufferParameteriv +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv; +#define glGetNamedFramebufferAttachmentParameteriv glad_glGetNamedFramebufferAttachmentParameteriv +typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); +GLAPI PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers; +#define glCreateRenderbuffers glad_glCreateRenderbuffers +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage; +#define glNamedRenderbufferStorage glad_glNamedRenderbufferStorage +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample; +#define glNamedRenderbufferStorageMultisample glad_glNamedRenderbufferStorageMultisample +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)(GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv; +#define glGetNamedRenderbufferParameteriv glad_glGetNamedRenderbufferParameteriv +typedef void (APIENTRYP PFNGLCREATETEXTURESPROC)(GLenum target, GLsizei n, GLuint *textures); +GLAPI PFNGLCREATETEXTURESPROC glad_glCreateTextures; +#define glCreateTextures glad_glCreateTextures +typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC)(GLuint texture, GLenum internalformat, GLuint buffer); +GLAPI PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer; +#define glTextureBuffer glad_glTextureBuffer +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange; +#define glTextureBufferRange glad_glTextureBufferRange +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D; +#define glTextureStorage1D glad_glTextureStorage1D +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D; +#define glTextureStorage2D glad_glTextureStorage2D +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D; +#define glTextureStorage3D glad_glTextureStorage3D +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample; +#define glTextureStorage2DMultisample glad_glTextureStorage2DMultisample +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample; +#define glTextureStorage3DMultisample glad_glTextureStorage3DMultisample +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D; +#define glTextureSubImage1D glad_glTextureSubImage1D +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D; +#define glTextureSubImage2D glad_glTextureSubImage2D +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D; +#define glTextureSubImage3D glad_glTextureSubImage3D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D; +#define glCompressedTextureSubImage1D glad_glCompressedTextureSubImage1D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D; +#define glCompressedTextureSubImage2D glad_glCompressedTextureSubImage2D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D; +#define glCompressedTextureSubImage3D glad_glCompressedTextureSubImage3D +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D; +#define glCopyTextureSubImage1D glad_glCopyTextureSubImage1D +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D; +#define glCopyTextureSubImage2D glad_glCopyTextureSubImage2D +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D; +#define glCopyTextureSubImage3D glad_glCopyTextureSubImage3D +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC)(GLuint texture, GLenum pname, GLfloat param); +GLAPI PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf; +#define glTextureParameterf glad_glTextureParameterf +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, const GLfloat *param); +GLAPI PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv; +#define glTextureParameterfv glad_glTextureParameterfv +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC)(GLuint texture, GLenum pname, GLint param); +GLAPI PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri; +#define glTextureParameteri glad_glTextureParameteri +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, const GLint *params); +GLAPI PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv; +#define glTextureParameterIiv glad_glTextureParameterIiv +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, const GLuint *params); +GLAPI PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv; +#define glTextureParameterIuiv glad_glTextureParameterIuiv +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, const GLint *param); +GLAPI PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv; +#define glTextureParameteriv glad_glTextureParameteriv +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC)(GLuint texture); +GLAPI PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap; +#define glGenerateTextureMipmap glad_glGenerateTextureMipmap +typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC)(GLuint unit, GLuint texture); +GLAPI PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit; +#define glBindTextureUnit glad_glBindTextureUnit +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage; +#define glGetTextureImage glad_glGetTextureImage +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLsizei bufSize, void *pixels); +GLAPI PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage; +#define glGetCompressedTextureImage glad_glGetCompressedTextureImage +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC)(GLuint texture, GLint level, GLenum pname, GLfloat *params); +GLAPI PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv; +#define glGetTextureLevelParameterfv glad_glGetTextureLevelParameterfv +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC)(GLuint texture, GLint level, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv; +#define glGetTextureLevelParameteriv glad_glGetTextureLevelParameteriv +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, GLfloat *params); +GLAPI PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv; +#define glGetTextureParameterfv glad_glGetTextureParameterfv +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv; +#define glGetTextureParameterIiv glad_glGetTextureParameterIiv +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, GLuint *params); +GLAPI PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv; +#define glGetTextureParameterIuiv glad_glGetTextureParameterIuiv +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv; +#define glGetTextureParameteriv glad_glGetTextureParameteriv +typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); +GLAPI PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays; +#define glCreateVertexArrays glad_glCreateVertexArrays +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +GLAPI PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib; +#define glDisableVertexArrayAttrib glad_glDisableVertexArrayAttrib +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +GLAPI PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib; +#define glEnableVertexArrayAttrib glad_glEnableVertexArrayAttrib +typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC)(GLuint vaobj, GLuint buffer); +GLAPI PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer; +#define glVertexArrayElementBuffer glad_glVertexArrayElementBuffer +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer; +#define glVertexArrayVertexBuffer glad_glVertexArrayVertexBuffer +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC)(GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +GLAPI PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers; +#define glVertexArrayVertexBuffers glad_glVertexArrayVertexBuffers +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding; +#define glVertexArrayAttribBinding glad_glVertexArrayAttribBinding +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat; +#define glVertexArrayAttribFormat glad_glVertexArrayAttribFormat +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat; +#define glVertexArrayAttribIFormat glad_glVertexArrayAttribIFormat +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat; +#define glVertexArrayAttribLFormat glad_glVertexArrayAttribLFormat +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor; +#define glVertexArrayBindingDivisor glad_glVertexArrayBindingDivisor +typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC)(GLuint vaobj, GLenum pname, GLint *param); +GLAPI PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv; +#define glGetVertexArrayiv glad_glGetVertexArrayiv +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv; +#define glGetVertexArrayIndexediv glad_glGetVertexArrayIndexediv +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); +GLAPI PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv; +#define glGetVertexArrayIndexed64iv glad_glGetVertexArrayIndexed64iv +typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC)(GLsizei n, GLuint *samplers); +GLAPI PFNGLCREATESAMPLERSPROC glad_glCreateSamplers; +#define glCreateSamplers glad_glCreateSamplers +typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC)(GLsizei n, GLuint *pipelines); +GLAPI PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines; +#define glCreateProgramPipelines glad_glCreateProgramPipelines +typedef void (APIENTRYP PFNGLCREATEQUERIESPROC)(GLenum target, GLsizei n, GLuint *ids); +GLAPI PFNGLCREATEQUERIESPROC glad_glCreateQueries; +#define glCreateQueries glad_glCreateQueries +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v; +#define glGetQueryBufferObjecti64v glad_glGetQueryBufferObjecti64v +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv; +#define glGetQueryBufferObjectiv glad_glGetQueryBufferObjectiv +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v; +#define glGetQueryBufferObjectui64v glad_glGetQueryBufferObjectui64v +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv; +#define glGetQueryBufferObjectuiv glad_glGetQueryBufferObjectuiv +typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers); +GLAPI PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion; +#define glMemoryBarrierByRegion glad_glMemoryBarrierByRegion +typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage; +#define glGetTextureSubImage glad_glGetTextureSubImage +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); +GLAPI PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage; +#define glGetCompressedTextureSubImage glad_glGetCompressedTextureSubImage +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC)(void); +GLAPI PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus; +#define glGetGraphicsResetStatus glad_glGetGraphicsResetStatus +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint lod, GLsizei bufSize, void *pixels); +GLAPI PFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage; +#define glGetnCompressedTexImage glad_glGetnCompressedTexImage +typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI PFNGLGETNTEXIMAGEPROC glad_glGetnTexImage; +#define glGetnTexImage glad_glGetnTexImage +typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI PFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv; +#define glGetnUniformdv glad_glGetnUniformdv +typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv; +#define glGetnUniformfv glad_glGetnUniformfv +typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv; +#define glGetnUniformiv glad_glGetnUniformiv +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv; +#define glGetnUniformuiv glad_glGetnUniformuiv +typedef void (APIENTRYP PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI PFNGLREADNPIXELSPROC glad_glReadnPixels; +#define glReadnPixels glad_glReadnPixels +typedef void (APIENTRYP PFNGLGETNMAPDVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI PFNGLGETNMAPDVPROC glad_glGetnMapdv; +#define glGetnMapdv glad_glGetnMapdv +typedef void (APIENTRYP PFNGLGETNMAPFVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI PFNGLGETNMAPFVPROC glad_glGetnMapfv; +#define glGetnMapfv glad_glGetnMapfv +typedef void (APIENTRYP PFNGLGETNMAPIVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI PFNGLGETNMAPIVPROC glad_glGetnMapiv; +#define glGetnMapiv glad_glGetnMapiv +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC)(GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI PFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv; +#define glGetnPixelMapfv glad_glGetnPixelMapfv +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC)(GLenum map, GLsizei bufSize, GLuint *values); +GLAPI PFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv; +#define glGetnPixelMapuiv glad_glGetnPixelMapuiv +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC)(GLenum map, GLsizei bufSize, GLushort *values); +GLAPI PFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv; +#define glGetnPixelMapusv glad_glGetnPixelMapusv +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC)(GLsizei bufSize, GLubyte *pattern); +GLAPI PFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple; +#define glGetnPolygonStipple glad_glGetnPolygonStipple +typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI PFNGLGETNCOLORTABLEPROC glad_glGetnColorTable; +#define glGetnColorTable glad_glGetnColorTable +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI PFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter; +#define glGetnConvolutionFilter glad_glGetnConvolutionFilter +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI PFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter; +#define glGetnSeparableFilter glad_glGetnSeparableFilter +typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI PFNGLGETNHISTOGRAMPROC glad_glGetnHistogram; +#define glGetnHistogram glad_glGetnHistogram +typedef void (APIENTRYP PFNGLGETNMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI PFNGLGETNMINMAXPROC glad_glGetnMinmax; +#define glGetnMinmax glad_glGetnMinmax +typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC)(void); +GLAPI PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier; +#define glTextureBarrier glad_glTextureBarrier +#endif +#ifndef GL_VERSION_4_6 +#define GL_VERSION_4_6 1 +GLAPI int GLAD_GL_VERSION_4_6; +typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC)(GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +GLAPI PFNGLSPECIALIZESHADERPROC glad_glSpecializeShader; +#define glSpecializeShader glad_glSpecializeShader +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC)(GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount; +#define glMultiDrawArraysIndirectCount glad_glMultiDrawArraysIndirectCount +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC)(GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount; +#define glMultiDrawElementsIndirectCount glad_glMultiDrawElementsIndirectCount +typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC)(GLfloat factor, GLfloat units, GLfloat clamp); +GLAPI PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp; +#define glPolygonOffsetClamp glad_glPolygonOffsetClamp +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/glc/lib/libglc.a b/glc/lib/libglc.a new file mode 100644 index 0000000000000000000000000000000000000000..2bc42b8dbde783ad8762bbdb3a314ade2db747c2 GIT binary patch literal 151590 zcmeFa3w&Kwnf`y;a;XJrPiRS6?^BXjV?kWG4S2 zlWBidCbQy?narC%9RBr?{Vn&T|Go9?nGFBkc#QqKrJTv!c60Q12f3g4o5+KSIxtZO zChEXM9hj&C6Lnys4ouX6i8^qwbzpt5udB4aV|6*-TUa%)dUc`PQ7K+k=;+M%^sLHv zuFXKuU+U@UD6A{=RVxmyFLqVCJJuAc4s;iaYr3nFbe0SGYQfpN3YBWPw85R);3^%J z_4)qHn*M=~N_W1C!tX5g_7{5!2KARqYba_R-TA(*oM>y<>bCG}sDv6$^ z;Le^xzMNTCC|3)EE^3u>XNIzBO)uqxWFq#3a=BDCc_3qh_=iRt0?Ux|BF-Q#%Y>+_ zoL`?=)06LNE#uOdV@_78R=P)pD_KjQ}lu)xw%Wd7VI3 zQzZ9u7j!IY?YN|QS$oUUB^`AgwF#^)fz>Clh6L7_z|M}b`h;-nJL2IsBg>1`6d3aneG6i5%%vH7K* zQdG^DG{0patQZou7y9#M?j&4oNHP`^tsz}F(AOEr7$o{G4RJpNDOQuJL{G80gepp6 zburbQtDujGA??)?Rm~`k77nbE%K6=e&b1=E_G-R5;Ir0Pb+Ag(LzO7V{rRQ~L&lmD zTaZDptg*OVMJTeY_L(AlS?xOy0gFj+K+$+47Zm!d-7e3JcZRGEkV$?@3WO~w89L`w zf@0<{722$lqs=}EV(NyFs zUv`W06&fGeX4PaegQ)CS($+8#2T^j3q)|%<2#Fb{h)dfq+*zq{iZLH;|l|1V{1S#9*u|@Q~9b9@s@Cy9T|MDx1bOo z)-Nbl@~e1uY+HGpidfshc(UD$(}OV{-1{zp&inJ#&Tekd2cl7#!W8vlxzHI^ADWXI zZ==lgBwb5Yu$u4djAj}Ogd>=E=yW1DNz6Xzl+(vdA8 z+A(8V#1n;MMMPwTm8JP?s-N>-CMqx_r#sdtN%t|MD-b_L?W5#foyq6w$<{A5zS4H20Y(i7d!kW_acjLK>e zM0z1AsKf=H+%7Km_wpjAZL`TILlJ^DR_*G~+-j+}*g3y6Kr3~aphbglTGDeWUV4dq z2BtAzxinCv)d#LTW0+~(fLC=6PL&Wo+{Z!ypVw3BT$|{*6r}q*meWe;%q)Qwy6k{V zlt49kb&7IuUa3S=+`eLm@0=qTATwQ$F0t8-V_6eyr6QMM+@MDO6ncCfC2}?}@_;&+ zDQeep#4S9LW5CvuToPVT8lZtim>ZVKm^btKw(xIZPl*sILWNht<+2Kegq85wjbS1@mO%l=m1SCB zYsEMoae<@mhUZ#Q){hQkp2=t5V;XxxGR zJ)u_f@Hp^}#zDF#Bh*TFn|plT1<8+DwRhfGnC0XyvV_?!O*$;^MhBDB2a`vP$Bunm zk>s@xHlw)IKy1au?L0mA7Szdl}w5aPG zY=n!Q(Hb8$8R=CJmZ-LdSqO7iLJWf3gf7TLu+T#>H$W3c!wuh(osU!D$S|xf(()_f{4?NX}TA2v7F{pff3cW3PeN1H?!B3dT3TdjaRXU zx@&376)RQqtcZj(e-0wrM<9qGgD_%?i+#O$*-iJg6$cAFF^7(ZdF#ak6pUB0K-MH5!r z&CA;o+NK7Mky#8KT{bPh%lAqzPUvbUuYE-JQE?AnoE1#kf*vT6$6DUVgbP&O^>3v` zgG>3*E~g@}R;7qW(8bQBenEpSjxg&y2-d5Jnv#ua1q~e(dQ0UE^YUf7dE+nk#S+fj zu#6saiJm#3tJmfh4`xIMW#(GZ^0G^s!rX<(W$hHRS(Ax*p;unLV`qr3yv8J{5paGu zK|Bgn>hnvba#vejbo18uFAcs;3N7_%PRNkrMBGIV{USq(6LD8LbRzFAi>e^o27%SH z6w(sjNHrF5eRA=KRWDuP*N?QskGgytpcTssdG**+T)|Ibtum`ht{Q2Lx`x*_lSL@E!#%0T6sSu5Om2AtkYW;yZEru`;rk0!+jORmYt~no4bIA(Ei9u>jf$Q;dpkXle zig7-SlY)l9aZ)gj`|(_lmx9LeQqVYFDUu*4#dW2%G~Tr1Y2T>R-QIYsZpQq$ujiEU zK?4)hvH7706Fa{Yh;Cq2@Sr$Pp6PcJexRJt)kncaBM^)d5=H^k>kRa!_r!LfJ-@V$ zZe~W$wptoIcW6=BcS>TVB4!fJq_+76BWCb@khb_HBW8%4&}wKUx}()@Ps3++08RHB zJ*^Vb$iqS>JzzlVV`hm%j-lFPmdKHr(S?0^(t0eIeVo|bT;(Ux#YCsQpO$xN5`Psc zg)4D9gDM|l5=cKL4U>GrNuU&UG#`X^X}?y|s5Tsddl1a~q*D8!+&l*S*zJ0wu@LU?vtoT`hyf zbJ32$krCh zmxI#Kg&d74ix^64OG-HLGQ_YxO)rPrK^VbIL0Qt`70e9+H)$@!Y#`L9#w!^AD>rGW z4@UfOL-!EyoLxn<_{-@Ql3Ecr$gI$X1EA%V0;Zt8jq$`hmf;(tOK@vO$raYO7{mg< zeGX2I7i0GDv4EJlWgL5JsvQ9@D6T7t@wNy6YusV}2)q4yQ06Gp?5`Tlz0PRS3!Z}d z79zmD(F$p@I61uN7NGPaYQIC8=yQEyG(>YA_>mZm`s8Rt4Y%|{)cpV_MnkmYfjBW5 z4aw1HT(T-L;f+h8-cfqqxFpS=0sjcx#~8JFZ{!(2hhSF|xDHU`GhQs+Ba84TgX>d+$YYK8igbhJcE zw}D;^b3z_<=$a=-C|Xnv^kU!=@)ZB&ASQ6om|WXhqGixfo|11V)uN>_rCyLBxnSh@ zCJZ^H#w7O?w(#+AiR<#Df33;QG~vW@XiaWT2`9^wo4wYQcCR%WPzG@n1CfBI*Z0;j zk}Pl8O7EB_rlL(OcLWaP06j2JHA~8DUY$w~A*C9$rB#E(MMkck+4LmD znBx>CE{r8j9Q#YrPaSz8$>-q`pQBjgi<)Vu9rqFRKgsSdm*}yxN=LDeelRzy^Q^SD zW6o}DH1EW$Yiy{uFVI{$?QPAi3nx#SlyS$T%9DlI5po>&~84KdUZVUt2%Bw!ZeYnap7%%hDhFL5j@e%%ovvE>4rw`SE1qW71X2 zGLr^tCY^NjkyE#j_+(=I$43MIH}{yDcTArD{3H5Ez~?CkhjUow*Uu%Hr}$Vz))&y% zV+A*15v!-ann)IXQ-$STMYKBlHI#b&5q`4cst0^J0iRqfoIeMivqx5NQDm9StjdPo zYJL@cR?GIY+kGn+dh)ZXv=Wt>MNeMkGqYAzDw$cGrC$EULuOWAsalvtWpO6m0jAe6 z+4D7h1G6Y8{WQAWkeOwCD0JJGI3WiAxerbUm&FmvnGiE999JhCr`N?AJ_S1WQE^|?rw;!$WM@DBQulS_mi?@yKY6(DUEOvz7ry&E zmkjQ^)9~jl@s+6&2cB>e?-h|agbjgFVgKbSMC=nMO)-48=B2cPakyT5`AN#(Z( z5q0In<;QNFd&iT)=CDTjKRO2ON9HK{m4x^y;};ovy_eB}9Gy>h<)1ZBMg(JstVO$MfxnsmK2p+h~`s z$c9*Zl-5RX!o}dOG9g=hK6%yAL_V!2X{m`n#^ZY<``;OuG7UJB%}rCk^}t`^>}cz3?((@8(?~x%bnW9q1AB8r%l8j#FW6iNB z3rwGsrO*G$KKmT@*!9_E+h=ndcs_GFlI&UHm$Q+M%eh#c``k@a-gVfNrIW~;Ea8px z$Hz^=-@s`ju}i^h;hYC8Z(>;z0{5E1skGiaTa7mlr@mE~U9{NOUanqm-QmYftJm8X zc3GIIROxa1a%T1Va*^I>R2VdG%3QsEaei%qU!q4-@A(7eGS9Z@wYN*>&28;ix^Q88 z^Tiz(&z;xW++oI-6g9f>);YJUt4xbMX1U3}e-|&^)$0U^{8$SMtJk*&?>XQ^`=luC-3jcfxe?)M;W}QF# zz1vZkPCQdUt&v`Z`v*WEZvmy4SPZx`0h}eC;M}uCyBqWHrca zuG?HRd~NaJ>PgyqmRtj{F6{p(UXRk|N(bxS&6Q-GV9%XyhAwIQx?(ezHX@cE- z?1gY80GB_vpU%B2|D>?lNgEcaTsd$X!r^H5>?fr3Ejk9d(Wm1LD#O%iCT*@YhdrjF zYCrt{+C9IbA1|ptxb?8cT1>|dem!iCD4Zq}llXd=pIiA6`nW@Flb>1gkF)B(>Ym1- zjDtBZ4`mFj*T>wL>J;)PX$+PL3dgOFtuoKFy3G}6^w3U4XrGoA0J%b_|Nr4 zS^CZg7l$a4|8@5;T)vvb(toF5Yc{RTf3pived_Sj+Wdoc@7jFb zHahp?wb^O+Fs@SZcBeZ27m^{d&4vRVFPDGLzg6^w{S4|Lo$r8P4nEz7cAvIBwgVBB z<;QNFd&iT)=CDQ(;2=H^b$x6l!f$|k_W|rqQ`_v_5cYVb{i5BA?MDu(&2Ff#wVO5` z!aa-}`VWpllZi&qW@qWX^vKY_&vKj14b#odKO5Th-1ml>4`96~chmBb&CLhQI+R&o z8rnrSslECDtI3Y_82T11p$%PoU}#`;X!*0b%{;)S8{VU=`~f-nu1C)bgcvA4eORL$ zmOpzIA^Y%5N^(O3`*;QFp1RGvE@u0np=OFg^S*m(12&2^tLOGmYB_F;O+!bzit9P_i<<=G{V|+49Vqr6n0GPVF<%+Q%0-!i> ze~_iW|H?k|P2`_nJDR-QEFN(ibUt%B`uRV%wlsOIw_nbjj?4HzZ@GRL@mlXfwC_`C) zDjGRc)}(zE_@&^c42jPMuPDBl&XfG_fc_TfdAw|npb<^nqzaoYlzF2o`|CWjI7Giv zN&5XBexvDx(WY17&QSDhM||5W8<5oU9Czy+tmiJw@$2Y2ADX-MG3GqpbNY|7m=5-z#{rIinjsymKbrm=|0+W| zG<`cLoc{l@m=4VkM?GbKBIjPu9M51GsLs2-u`I`8z?3IDk)9KSt9 zpCt_+93TF3M-#p{?%J7^ihmpD8x?og`!>bh^**e)yWaOH?yl=YU%&e6UbotY@<4K_ zg$$3hIm||^Te-0?*J*aE$G~ZGn0-1R1gr6D;HO@@I9T^-a~S8|wf6|#q=CP?c$_P~ zI}LvxZ~_VGyT;s~Ce2}7C9hTPUH&<|3VzCKf^D?`qfUrV?LKV|Qw!mCxa0C;K1Bu!nU>EyQ_o;QtsAvcZmA8)#5UKDWNv}x-~#jb2`zSuYO^z7Bs=vjp|Jssq! z*}sp%Viz+xlv#rtu6j+jZdUE;)6biBEtfqX@%Z{+=p|Td5(1fK0`W!{1bh6NZ0)SG z&HwfEzYfX<=>8w)W;gdaS^Cp+3FlltQ|!3@gZsr7m{2Wu*G3lHox9JB ztZW%uGIEbkx|J8(_tW}p|L6G0>)iS4_zou?<5}R?W5DkAiFw4A@1*ditm`VzjL`C4)AU0dEljDvDI z`f84Dgg;(ixQx`0!lnJVAqggER}o9<3*GaAI$kdRE-(%TNp;A4y63(A()Bdgmva8f zLnn*Jx4Q1Iek&q1ARW_p?cU7LqQ}j~eI}TGQ*p@mK(>pEtI5PiJa2a0)11_yZ#@2| z=br1zZ9eSOnWV@KHILQ}W5p|X(``?aar2EVx#v1sk>cgB%{MZn2eOv?Ww+b*ds%Mi zyJl8$4;K#B-%RgLp0O%-lUZN0kF)LMIF0as(L-QccqOVU_i7uT>fy$W^{DZqY~zZE z-}CmgD0`WS(tlHwX&s_HH+MnvvX16u%a$&?A{#y8MbiL&w^G*j5$9%4t(b22vbJSQ z7cHB+IPQQpeqEczG#>IX`pL9D($zuTM;^~bK*w0WyWuq%zg{)@Gk(47eCBi{*{vo1 zKgT1z?{%>Z-6cK8#dB?5$8m>=1D(8-{&f4v8Xo^Aac&Efcv}izk-~X=o#YR%4{$tP z{M;v1&qV#-rSJ?I4Y_h8R(kA$2t8V4mvf?Dzj@@|;_n_|>ZfhItE=rZOdTEOCqW&Z z-D^8m(}Rk^(oEXYkA04bS8{^Tu)5=dJB8B22RDt}7`XZWg$(In&P|o${S4_~&V7XA zZ)Hdab8dSbznLK&T<^J`aC|F6I+)9KnZGyGa=!4K{s-Xfzg%beli+f_;}ldq9nU(! zIi5UL;A1Yhj;CBtk?~w9^fI1V2GUl+hBmB$x zL>w;u4!JRAtpoTx3?7a*#+yg_q@-qbgy65%@)$8`jOX0zc_ zkdceJNs9P8#ziiCE`Pr6oO@UPoE{xEq0DwbSAV#zaMv{3oqP6Emp$7@0eA9=ICTD{ zjWKHx|Eh4yU$uL)`h5sv%(}B{5BYaz+e8L6nfL_vY-@fy{RPbj=)c9I^xyJl>Ax%X zA?$y)#hWQ4n89Ls}1vvh%jZNUD9J2J4 zU5@p94wnrd2Q&6r&O(2$ux-qnbzBCAGPdD($T5rwi`a4WS3`gLIF&#W&!DhPw{35G z;34Aqd=JE|*Z5m7=B|kK`DF-zi;?TF>kAhN&Uxv0R&Y`D|LdOTapi#I#;&cjzGVa# zp=(>X-)5xSmbAX*HW#4!)Yo=e-*T|-UEkv3>4J0a$Lkx?*1|vMJW`)J{uh!xsc&#? zqK=o#Kj-Z#`oew&b&$?SAee(s_o3aVt%c8khpr9h@?*Eoz2iw?b68mxi z_u740-{9_{)U#u8==@9V8xa2<;g-K@_jsbu_YUK&g*VhS9P(PY=~NMqCi5Be4Ndgm z3H|nLV9(I*)l)o+j^a-9&xR_uMbbnjfD2 zS$ZMHF#Q~CGC80%i#>P$j1;+{`;F2(cVs%R&C8#?@28XJnun6+4(&0YUp<0)oqIT3 z^B4_3qhz%H>;y7pC}H~(BD0?&^PVs=yLDuSePmb}MaBnUg1d)9u?cfAu*i77XY=wA zO4r_@n$63fHecEfqxXQ=Z~U{wy_B?}wxc&M-)&iqxpe7yBVN8a-Yh4D%Qtwl2&w7! zi-+AfTzwJJ&2Dnn-+vfAqhyPbqGNvJ7}rcynhZ%!aHU6%q6`xcG1&*4Y^JiuypH7t z7aaEHWi>-TuqAUimCU`|4<5{TgLPT@Nhw8t zT?+qT3jbOPf0#I@%caNUF|mJ1(LbBQkD;<-f7}|pDGSo_?}L)^A>$iiGitME9qut0 zx17^wUsYsYFy!CW#_vKB+>PvLFKG8vHb#Few8&}fncNNs9+{VEsW&gBZHJz?T7(2d zzcR~r(Su9&@gNl~3q=YjW%T%t^MUr(ana>{cHDkNl$U(8*bme9%Q5Sl1?Owhjal88 zhFg7}IywF+p_l7S-w=GN(2oet{kQYycq(5$*nb``IQ|O3Ww_@EF2lW0a2f7^;4)qA z_goyV^yhDdUh=2GInVf7cJVx#J)na>vE;y?m9d4^{v0|b*)dz%%C)**pPbrJ7q4zCQs~_jaV1h4F_Bo`775Y zKHS(fZSL`;3fH=dho3h0I9T^-a}VeKFP(cFj&&6mZ}+M5??N*0b)l0x74B=DLwvgY zb9fbfVL!F|IdDJdg!t6%)8-yI2y<}9<;TdmcjcE9HappY@V6qthdTGj@kL8Vy~;3k zn))2h7DRNsxd(Sme&Rt7ri?fDsH>~3Z8X0oIQZXx?fYaD>n4+`ChCKy`*&^N@pybZ z)kCXKxtorEkd?WcOg_*((aHBrCSTmM`MDu*`#~emdN+W*$qp`~XY6Cz>9-9}|MKut z)30wnFzNbh4@_Ejvl%Yq&L-ZGL0-Ptd5LHHbGuAv94~s(9*^Z``Iiv6UCpB=y58}? zk;c!bnw=ly-|^Alm|w0z<6gSOOVgmy%zzJyNBT1AB%on(^dkUd(#Y_i`NnVcM9QEF zzZS#)X5qldY&w@eD#+SMT|YYcZ7!I5r@V}Z)ySDAe@$_Z(&l39GxFY-yq(q7n;VDU zdJVMH1C&K(CK_d|OEqQcMXn~E0=Rkk0q-NthkPyM3gmn}aE+hFxP(Mm8cl$jsJiU7 zZm2+}-?E)kjQkvG-bb}zU#5B_eeCABG3UpV)41N-solP?ZcrXwyWi`6YP@RR?K6$1 zh?A(0O&!{wJFj_Pb-K;jkxA3PoH;)`kmc+#U#myq>kY$hl76f8kFu|M-;-B!B||*v zfdka;@~-B`IgU@g5w^|CA6GfWg^OZQCd%oTB3-i18{fIXcwlWiUn! zzJeySe?1YMh{?o|a$-E~77!+`hKZ|T;%b<<8vX|lsmB<3yz8$jSz|=>X1b9w(G*WK z#S=~OL{t1%)n-jJN)wIJ|G`FSjIR2!i505Th2W}@0pRQvx#wI8EVedWaCH2-}Al!?oB;%>y)|K6q6 z)G5IKPrsfW`TW<+HWPU3!?clIU&s41{A*C!)Y~H6i(7`8_e5X!Mql^QD^u+2KJ0I* z@12Y{k~9y~OD%>o({Ff&);o4Jf1TR4%u~&qo4=mhn%lhKL2B&%YeIH|wi31P#~2oG z1EKdwOrwipcWzSi@KeWK-~9DS!V@xnI(O6JowQHw7jrkA&4G}XobNI(nJ_Wi-26qm zcD=cIr~8sXt{USlIo)q!pE_MVP1}}ba|PsJS>dmVX3inLd0?`VHnHt zl`fX!D_x0?uXH6ozVh%fQ)J$u%^_vxYWgG?VZI+rBtSG7Z(QG^0bLbp;{=f*5~UKDC%FU*$0&C}&`Zu_Uo4O%^sUHCC1FND6q?pl> zFM&p!8#}+~l~{G4%+a;)SH-z4j6QMJQV~*0j!C6|%c{8`Ol%rZon6T0T*c0?xt-PG zxd%m~7r!c>?u0Z=7a)jp7mREfF7C4fT-*Jpg(Q0I#z$#7&mbh2Wjq#0YM?83n zs=rd&3;on8R5|*K2YRZ-px`|b*=E|BsHTxSMYy7dh%X^USY+bh8VGaJ{FVW;O(+@Z zEx#8H6w1W{7pyJm=)9%E-#4%yg*8PZ}|o6gxos9aptirri(46aDjlqPVy);lZ-8uP+xQMKb;A+%RXq>+?AG#os%sG=R$*rhJ zEtRM&S}H!{X>74JGFa>*FL$HwK@{t_&&2n7@x4KOZxr9_xJht&@x4KOZxr9_Oxm0S zdD0+H8s$lyNxO3+Pa5P&qdZxhr}{luFTJrS2*x5C*d_U%BJDC;h_Xv&e;xO+A>e`w z2xm(OViK;Mfuy1(^*W$>Q$wU9Q!XKh`Jw}=j|J4A18Rr`WC~pdWHT=yI-rJFK#faQ z>F6~sF=Zt^YFv`waA1|nuf`<<37*+jKlE)N?p@ra&Vt5R7MQvo_-v|FK;mi9nbH`K zOhP&mk`Ye@u6fEATo9<~g9#P8A?X6B9}F%oTmnhThGeA;$dB&%;-(f4gXdxgmo=SZ zXl&1IBhShOwkP1Pe)P&Gru)CRobRh}!@jUk=vtNU##GKW~Q9~Rx#*uB11Mll&7eR|{oCB3@q60+n z(yc=aMJ&cBW-&%li?i5O-V(q1S{mb*A2D;4Qkme&vc7Y@;(g+IBp7z`2^21EX5++W zGfr#<lm_|?t zR&(VdZ|xMAPg*MWLRmGidbPP+I3E?VgGLGMwb`eUJm;CcouyHD(%>`0#J;6M#nW2| zf)9xeT`&Z$$o%d?=UTzqtNH2xO9i7W=BccisKv3F*~PJ$iV7^#!i!0Cm^>8{JCN@! z^i{*e(wv5-uGPZgVn0np$l1J}VpX`azOjEY5agtp8&=E|I5AbN`35{3u!dP<#Z zU07OejEVjj3p|rPaYouDC7EXK-)uf1Gfcj_nZ2;W>?}U7ghVVBI9Xt&(eS#`T8e`Y za3L-I71}qLr8$~u*e{s=*^~J_MXI5f=8IKW#aGG`j0|QsawA6PEONQxZGIeK3oEMb z)|sf=xc0~|`exQ@>KBAn+VKX(DQqD$O`2T^;^{NDVM$HDDO^(x$vH*C^b1jm_gNpx zT)&Yi=E^dFvdf;p@8}HQqGXaH#yGz;=S02slu*6itFzuvk!BSG23(lD5SMH;gzN0$F^()0QyQ zXp0Ym7{z>x4~*J^0SWuCLSp4_M zU_G@4c-CI%q|rXj6}+6hi9-{?BCdB{S+Nauu%c%g5x$k-)QNU zeB0BEy|@=PvmtXAj?c&$ipKktavqdbv?OavlrtW+1#u{?p;--wW|rq&%nao#lnWN& zv=#dcJyf}g+G154g_=P9TC(sWN{@rKwv|oLsGnx70v>wA(Nc^vNTUQ9H&aSxnghj5 ze;H$O|IE5csI#jUip67Rmywk$9y{AuDOp17&<%z{vxcKlJP~F|R>{mItynyEw$W9x zgxFzJ5DLwDl1A~^nblGyONgE6fRrquWNqK9bhhOSAv&alkkBusTI^D2qHhTif^Vr7 z+c72jhUM8Ln_Hz#vbn|DBpda4sp)b{x5@783T~3k_035(*Bd9wJLXw`a(wn98OyaG1I@ z+-jZU5e{>o)c6O0K8#x__n3!6EW>j`-Wkpzi39-bBzknjyNXcckaF8R`{JkO_6Zq# zDu=3Aso`}5x8z`lT^ttm@@}EQ8M|W2F?2Q$0~e+u@XA5CFWb1E@9;80PB4U9@6l7>J6GvH1 zeNK2wR586RYGO<(SJP8`rrJcDMzrQ>0CS<(3_(lhEYZkc8B%=m^N>W}oYjSA$AGAj zW+9QQw4IDn*4u1zE3;8$O;{v@A9|UL-0+3LjSWSJJ;ycZR`zAH<_E_Twj|QlL>fgN zq1ePk3qK2JO@GZ|dN_+_Jaqr9S}yT(h?3HUQ?SpzNol^P2e%Zd?4+EYFC-7z=)prn z7tySbm(bfv{lU3?z^FC9s=(oqA0e=3ZPjv25i;@22I{)MpJ6U(%58U5xN~v!aPC-V z6>b74B7(R=W`siHK|Y^ivCf^!2G22BsLW^;m+pbO{I&CqSc}HO7_<>I@$>CripWKo zvNNV|S4Z67?lH$Lvm1@g#ugbxQRFKS`G!g!LNuRJ=G#)Q#gs5|Sa5lt z$>p^$N0Cf0qVAHas+hR{}8yUIUYNz}(Fr1P#>R`0a6tl0_={k{V zzM_bjn%Zrya2Oct6=<7ZHoLCWvq-E#?lU4u#ei_%^0JOnaskQ5j*?4C`B3 zmv&Rq))iS1e6~yIE=Z0EN+rQ;`sj+eJgl~YY7mMa^pSj z|A5?>Patz6H*}cLy9N$qa?JX@vC5~aoqu3KuwW+K;Gy7{FR51JU#b;8o2S7O{ETt< z7UME!eChDa1*wY|H#!<}mDbEZ=)lqP&T)@Pi_wGFd*d)hx5%SjlGdttJ&!vfJJxYM zFp*du2^-YmllkTvjl2qtzE88^_yj0Np8LCPI%(03J8iKIi&-AT7>w`1^QDJpuLSi^ z)&@`Evff*S8pC6M0SS}+I-Z3iAspE-cz9w*t1*)vAVv|3jVL2iY*@)A1QLxRsenXq zu2=+W;Rgl^UFnwD_F*R5%8Bun1sLhO#R^WjHSo%`eHNagV3w(EuG#S;Zh0n}&@ac_ zxcj6@j%;5NOlaqASVm8@mHL7T?}wP8KZwnX>=6ZbS&AAX3{UM=?1&qR^XK(1O>L~;? zSFBXsT0Xm8T%?~6@B=EioTJr;_I|qWKvU_f+_U+n|MPQJvt(1D+G^(YW_^SEQE%6C zTC3pcjrnz%{q2u=;4!nbztFd+HQU^N=KRH3dDbeG6YRF1r}PsvVV#mR)e&PF=A`9Ei$ z-0A&)oH-pA2JV}^`vcaTDRBll_fxJs%=v#ZGA+&h`LM5Nf1LZtWgq_Kus;*npY--? z#<718_J86}=l_)N`1pSv_N%BoBKyEp7yrj$|6~yU$9(t)V84s@aEsi3;z;NIi$fxh?ur~zpo8{y8 zIPAv-{vYH0KLC4L`J7B|1K{I?qv$^$|C*y*{LhCywftevvM0{{WhVPg{k;bERYCl& z@bUW~>^BDK+i23qUM3wZJuLI<=aOtwd@B%Ir;rPMaF$OZUi(68;d4HYp+Dwx6ldEM z)9UcI=y)Z4r8dX|)0WWLYv^xMhJS-?j~aY(Tflm!Gi?j83&8Jz&a^4?eIfmEe3}p+ zmy%1t7bt!mcuvK?8@x^Fd%#yHJchDc}e+6#Z6k<1n zpM!{-wusmr;GaOoJN=iz_dk!m&|&HxeSVw%*#9;3!a6=oou<#9&>!>VT!-m!{5SNS z`TU~|&X{YMz8*p8VSeH+iv5HCyiTe;So5=iA4@v(}tB8T>(TbFITR zMbv+w%uLd|Yr!%8JS&Btox(35ek{f3H56YyOdm_1Iq=giG&p107W(=|;x7>GfVN6ge*v}K?Eeg#J>H*F!B1BFwcuIB7lXf2@jUoU#RtH-edWW&X9&F3 zV$VMW?&^ore-3<((mx1(zT!UwZ&LhM;0qL=L;-RBYOV{#PXcdKd=B^u z#V-M0sdx`~x8m1=_bdLl;I996`Md*sqtf3GzDe;Pf^Sj$ci>wU=Q$?l!#2fF2H&oD z9rzB#mxAw9ybM09_zmE@6@NGQ9>uv|iO2w}L?^e7YykGI_zy}q75BNsKKL)-@@h^jKQG6HpR>gk^zD@CG zz_%+tjmGz!Z#xu!75GlY=YbC^o(JEp_(t$OivJz>Ud8VR->3K!;3JApr2!Ymf4|}{ z2Om}Zwcs@AG>5B)mx51KycfJi@$127DE>k4tm0n+pQ-pG;I)cB1wKddsn56RZBqPH z@SNi3g10GtG589_i{L92eSNtpBgNpwn_(sM56?~K8e*)j4_;EDPLX}!G{(94ES!v9{}H@_>aN&D*hYreTvsix9J^G{8aG$ ziZ_9eDt-w#WnEDJuLPf}_%+})ir)%8L-EgpXBB@Ke5T?*2Cr588SpuZ^CXeWy-D#I z;5o(Xz}pmG0M6rmK3qGn0(_<7Yrwk|eqZ&UmMaGvK$|9=F&Qt{t|cPoA*Enx8V$n!$!&k5jzioXJUqvB2A zn-uQ^-=g?N@U4pf9r!lI?*`wl_@m%E6#q5&PQ{;3Z|~;x4lDi|@ZE}E0KP}@rQmxN zUk$!b@$0}x6n_u+e#P$sA65JwaJPi$>i>7ar_%gVmg6(vHHsfj>$#i{GZa4wJgYdb z`?G$g;%^48ReS(^j^ghHZ&LiL;5o&A0^X+h@4;6nej=?$b39inJ{!DS@nzusiuZyK zD*jIJjf!sr-=z4Lz_%#A8+@zcKL_8Y_~aQjUE38u34Dj*4d6Q!Zv!7z{4Ldio;QJJR6nsSSC&2eBJ_7D?R|eL-CuycPjn~@L|Ot0N<_n&%pO6 z&NpniJ=v@H%fR<3J{NpM@ow<_ioXMVRPj5&-N4qh^Irp>3gGy6z-tu$ckmgCKmR2* zU0KCvfzMQYF?g-wtHI|ez7f1h@vY!F#lHaFruf6)D-{0;_)5hybl;K7t6TAxg7+(a z0r;TeZvx+__3L`@Dat|4ZdITPlJyt{vddU*8gOC_!ID{ivJG0M)4D~HoY?xe=T@c@k_yH zD!vZ9R`K_M&ry5_c$4Da2G1$}EATeOk9oO`{|d#=1YfE68^F62UjyE+_(t$S#orIU zQSrOMH!1#);9C^`SMaTh{|JCV$K?Z;M`kJbRKx+;Jkh>^YdEp zLB($c->CR@@J)(;5qyi{d%(9U{_o)16hHb@)PKe6!FMQr8Td}cuLd7h{5J62ihmw_ zkK*@(?^XQ!;QJJR0(?aAKZ5U9{HRyi^o}b2O7INb2ax5}06tam7VsLy-vmBG@hicz ziVuR%RD1}$R`HL4&r$qt@FvB-4W3i{$KY*>KMlS@@jrpDRQ$NpY<_ktemZ!+;tRkB z6@Mf6M#a~GZ&Lhb@GXje9DJ+d-vr;L_z3uR#V5_Q>DrCReueRyhr1&Y|TNFPRe5>Lsz_%&B7JR$nZw23>_-)`j75{tiVa2}*zFYCf z!S^WsEAYLF^MkoOkJzX93E(4&p9Q{O@deMia+m6n-6moe+77x;^%?q6kiVBrg$&-3dP?6zEbfIgLfvw+ zg6~oM58!(hKlUutf5p!LA5nZh_Ek)nM}>Gd-;5uL7T{_&jiaZh{YY zU0en}L-7Idtl~F=&s2Onc&*}J0iUDz!{Gc}hK$co!E=iL0lZD|;~H%~tWbOw_)5j+ zfp;r@33$Ka>%j*VzXg1w;&*^=Qv4g>TNK{|zE$z3z_%%W0DQaRC!B5bVTa{C*;=cypt@xDlY<})h{CM!aioXhcpW^3$k0{;(zF+anz(*DD1E(M71@-@J z;8PWUH+YTWcYx1O{EOgO#UBKpsrX~ywTeFpK1cBb;7y93c)rc&oZ@GJw<*2|e1+n9 z@Rf>R4c@KzZQ%Wie-?aD@m=5>75^9TO^W{ke2e18U0~C@Rq->yw<*2|e7oWu;5!sw z5580JcY_Zrei!&|#UBLUqxipo?^XN&_&&v_zs{z2MDf$W_bdKd@KMDt0?!;5*8gts zsfxc7oS(UXrKJb3Ue-A#W`16}=dN(S53iu|)&jsJ2cpLau#n*suQ~X-+?TWt_ ze23zn0^h0lec;22KL);A@n^vID1O*nn-6;xKM8!F;tk*d3HYGme*oX8_;K@XK5SC_4Dc@STc(6?|Cn?}P7F{FmT+6ra2R^+zk%;o{LkQf6o2s|)PKca1HMo3*MpBJei8V7#k;^q6<-IQ zd0|-phrp*Qemi)L;-3Ydq4+NFtm6B?XDYs*IHu?}Lim3)g-^{T>*)n)`L0==_RVGH zgxVP8(PPjp3IWDi<{eL)n+<-N|geGHHB(NKWQ`c!nTf{ z673Ds)zO>3vQ!R0v5!FCKyL@V>9Nv5ud*ap{57+>TqxLY-T4ZC$*>vzoTUPUjC zjO{ILyovU<3iN7kt4JDq9lCc$mE68;)omUiE&i>o)+f?hf)~sy>RyzruzMZ7#xXg) znp$tA?A>S^z15Q6!73vgzS-KllrOZGa>@A}tloioKdUs!S4vBccf2N`z-LwL;${4J z&9ILHl%eZ#d^0ugK)jw-#=_!wF-jfJ7IFX+gs-;VCzjB6!w zXL%6XMZo2Wd9}MONEtzab%glU^45Xbf;;jOkY5_Cp?MpwhV})x5e=${iGbM?DDckj zb{9D_$xlgvuq7o!=bTDV%p4|7n^hvUStqxhMgW~f-q|Bc3tgY?b;SV`??DDv`yD$f z_Rp}W)Ke<+=E6Q02YiK=dyYnK+!nEd*v-*G5akHHfw|b@UKs4s6nibRdA&Wn(64N+ zUl2u7+std-T{Ko=*8$Zi;WZ67c0GZ<+^YXj<4`?cDZ+Ebd8t*bRTS8#70soY|#-%mVut0 zg|t1COS9Z!XnwT$kcn$x^Ly;XOnxIHSb7T8f+`5RwP#X61e<^d*Vf`{q73Zi@s*vtuMj!VvRqbvcWnXA9kE|r-o!v3Sd7i$1i19cu z$1Aus`}$4$H>b{t-QLboz{g@jN)CHuEUg+6sT z6A_;Hj*)O$heIaS+YpgiAwALk3`uqO!Kkbz(9#Rh1WQ~f=c@(3F_1|v`D7?U(8lW6 zn~K5>y2)Ks9-Fic&DIRH7+vpWS5EWh_C zpc1#YagG8b52%9~q;@Sw+@g5o@X+o~>AaU)?uJYzskvOHn-A#FC`_?!uXALObVFCJ zS(h^-9_cn^y^g(&nlCCpTHNd{^i`uGP`>vTR*g{#$-4=;*kZ+;wp=pXJI1gK3fj0* z><(;qKa}1Gqx4Md(`NP)a!$C;W0^EcaOi8IMEWfS@!BV>@hWJHhmieRAH_KqA=&yS z%ffw6U5>=|KXnGN;i*Suv-J@zjpoZ6L|sES5pCkF9B|Q={T95+=(gHQb?pQ}lY}7M zR=v9RE3;lcr;8v(F^)%EAn}B|SR}=e))Cj(t%p^*1F^X`VB5lALow$jZkH7xW_4SO zr8*bOXp|Smy-7JXP7B?@#uPpH*A zJPy30aggrG2!)#)2FZ_EwRb65PVOR0nBCH(!}4x)FiCwddBk|^*vAz~Ui)yvih~d$ zYb+(~y*KOB1jeLb-2$Je1F?bcCDgdujTK$(iAiXf6m+O@!8m4l`N`3uu5+*vE_N2= zz%RWD!V=ZiFbiQeJN~)!fd#n<7Gxq==%JV!pb5hckIwhFAn;U}len4nhLr>^tR*or z#?%_5Q94TKTBSMFU64W2MG$e?(U5LexGfG{E+p^nD6H{a5WP`udgvj|u7im3K8`^I z8H5q@nf*IC zSM1~cX-%NfhSRp2mp2}?O${6)vlu$Y{ndlTO(jj+aMl`&eKxmv)FL`4zh!B-O06(=Av8Sl*F%cgZF6cv9O$VQdG~j{^6DKs zLww~mCP|He^TP?^QJ_+vUn-Tm+Uf>;^)&uVgYQy9OMRLXGNd?ZNOMAl6er@Yau_@r zyc1CsWZNLHdX_?3!ds=rBCby^q_FCxEBr7*OZ>3PXR=l-qs@cI4kqa;*S@HWIK>>S zq8g3#J1M6U?4~d(`ChyKu&LBbN@aR}ke>{2mv}^cQQ2uyYkpP1KiXgsJ>eSAwtTg- z+h<(VjfUI@)s`Qq6jIwP)9-T13jQ`(gd#t9(IX1drNRtqBJ7hA@)Td9N^0cov}tq@p1$72>)NQz0Ao(9)Qa zipI25G^V7YF)bC1DXC~oONHofR9sWbVsW1CrVOUmADGi(2=icS$$7zeKBVTF^C2~t ztYDlNq}CL;9xn$P22-yX=fgNDXc!zP1>?9M&-HjIXdEvEjpLOf34&5wS6WNsO*@|U zP4qyeJKn0BF~1qW(L?=c{^NrNCZ=QaLlGu+ekl;$z^dR`Jia|d59SF!=@IAhD*LP{ zb(plq8wD3LC5!^7*BR(d?}_a|dwyvh-OP-Y{q#{T*SdehflG6fnka*8hoM62s z3>q*D8!+&l*S*zJ0wu>#(?p7j7C~JtgT-^vj=?9Nk1b(Q1kPk}ga%n8fkhTeXwXiO zhd~~(3tt>6nVu)-xo{fG%yEj#I87=tX$Xo<8e*YcQY@_ZaWAXqaBQQ(3oPSE!t&JK z;I4-6Uj3}d`Raksc1L`ndJvQNLUfYox^g6%14TspQ}0LG(1_uxBRV!>xaK4}HeyQS zB(d1Yh@rH$q=XYMLk#QF^m4czgb~aXlqD@* z!Q3ElljcIq210#myn^w+a+8+&V8jnMbPoadyDOr_U*6ZNSHul6D|F!iXnDmwG4IIE5+3r3D_!jMyHOma_Q3m*@c_&!Xu(yhtOG~vW@ zXiaWT2`9^wo4wYQcCR%WP|7qDPWC;$zPFB%WO>V02E#ltoHnuC5jcK1Z>} z7xi~gJMJTRX}(xB&t1@4Q~LO|DIFa&uIa3A=%`dW^L?x7obK6muI=dTUfZ!cPe1?0 z@hW^yrq7x5ci=gD&})v(aTxtiTh4e+uWK|1>!;A)Yw+G8daac?G`}c?uMqqQ`tHK* z1m|#ROBm0u1b6;7BHXv6@U4owcz!H}e;S;_r7c)|xL;6u_nxLl6?guRDDL9z&W00i*R=-z4QP3iaY=RImMr!Dt#OB^ZzOC>d#S}NIKXo z>&dy`9M9SG=koJ1!DT*wLHXn2`JEL0%M^Yr2S^8ha2w^qJq_H&)8$XI;PfhUufJGu zZhu}te|&Ta{v|qh{;w6B^(V8Kj;jU#1D!kl+XZJmx2=5KD)`M*SDpTL!CBAODj%N| z{NqBuLvYs9>z~arEI3~y&i`G4vz}ffXO71N-z)S#5uEkQp?^m3Qz)~Y|GyKQ^&QY3 zez^U@<+4ENj~1NuCFoBUyjkc^5uEiKp>Gg;q0pZzIP14Sf1%)ug#IGIS^p8}^MYR> z^xcB9{xi@I3jR8wf1BW}{~GkS2>t_NE|C8WDLjTW#v;Jx5pA!5!q5qBGtmkWkkI8((pY(T@$e-s4&R>tDy2!_i1izWi zUH)VR=dZ^>Un}@SLVu3n{PktfFB1G=py)FUn4kw zJrDYK3I6Xw{~p2l>wM@xDtNEZe@bxv>c$OU75q-}!{z6Fg7eom!vF6Iex@j|y@K=C zHPDX;UMKYbE;xU!K>wWJ4-$9rIpRnmL-S^p*I%Yq*(;Op-zhlj{~7*&MR2|*Tz=joIO~4_{Ud_Qap0qZv;KF`KOwjre?BcZ>nCwR({VuX zOGSL9Otp4bAErZpoZy!W{fh->|GBT?;|#&C5c)d7S$_`na|K@^^f|#<-v<2(!TB0; z`Pm^j>xjY>00QBz=d>3)&|4o9k{_W6zNbo-sbNVj|PFtRM{(#`@&rR^> z`+|Q@=zk)#LkF9qK#^uHFI^`C@(((~wq4nF;%$cL$dv;J=AX9)fg;x1h;6P)$m zhW;$U?-2Ugg0tR@n->cHQK4TfIP3o%{$C;Z$ArF1aMn-3xV9?zV)Dbq|7yWme;o9i z1z#fcw+hbsQ=q>?@Vto6Ck1DH9rSk#e!tMW{oFa3te*$H+qa#0MwHiM!XMVRLH`TE z?-2Sw3r<_b_FB1G;$nNqjD>#SS4}GoRO(NgU5uEkcLcd7xr9!_% zaMs@h{hI~fr3jGHJXZ`1(zf16wL_9w)IP33+{(iyV zC;b1G;H>{4^gk5*Z-w6NKhEXO`u)(mea4yJCiMRy{9*l(m?s>06rIq)`uEeH%b#Ne zXZ_2ef2rWN3;n5rv;I8j&la55f}H>73(orG(6`yQJdAs0! zLO&!p>#u|UcELX@!gc#}yL^5R^lm?H=ARe(uLytG|2v`ICHVJ+{t>}he>e0$5&WNo z{t3ZZ|1k8w6Z}!3KOi{k-F))sqv?bWj{gsY{y4!||7-Yvis0SET{)g1IP3om{keh{ zh5jPJX)7J?&q~4BpJOm@=@t7B1hXwzT$cK*$&ib>V z|B~QKh5ug{ob~gde^~He3jOy5XZ>R6|4r}{L^fw4z5&mx$ob?Yt{{g`Vg#He}S^s_LKQH(TMSSiSob^A4{#%0c+{Il-ZvSOh zUT)sLPv~zaqtpLFaQ5GH0`&18f*&vZ|Fht%KhZd%>+BeIY}l>3rxf6Z|ouUnMw8FM_@-c)iGn4T7`O&Hsl4pC$BepJJEKSHpj| zA2IVfg0u8N=nn{f zm(Wj{PA7D@^gasxaf0t4yNmye1!w8cpg%)!UNdw0I>A}`Ec9~)9~SzY;4GbjdFBei z|3T%MCjKE&U&}*@D9O$A@ny1&iY00|3i|C>*8aQlm3m+e^KyhLjN_v z+5aBs|3UESLjOI%S$`e$KNY-2=${mv^|wL)2f>?!-fd>$>chvNuc;x&bTFSS^d}0= z{_lkTG{M`2ewN^@e+c^53En33&4RQ3htMw?XZ>`{lix3RztDd~aMr&R`p*fzLFnCnwJ!hbp?CYzGQUdbza#u%{})34FM?k! z^gkDz^>2dy_ks@!{htJ9eHHrW<3?Qc1V4i!<>K>3!CAi@`l8?;5c+<>S^p*IHwwN+=-(+g>+gg9eS(*S{= zyY;5kf)5IPui&gdAO2q}_(q|>L2%Z$K>uFBuN3+Z2+sOTpubD-ve18CaMpK1f4|^Y z3H`SOXMI2PKNOtTAYJ*oeM*~syZuR-zfkmNxZoxk#^lm>;LMH!@!Mcpw_mlZuLjPIe5BvWz=LBx&ZeLVuLttS>-+lHfap{uP3=em(T{ zf`3lvUn@B4H$mSb_~(VbO>ow~ANrMoe?jQi2+n%9-nU-xFADuz1!w&?;Q!5ne@Wu;Uzby2h7M%5N9q{Xde?{mY5S;bDhX3Cee5cU=NO0Cq!TQlJ1?RPYSO0%4 zIO|^s{iGAq0+UaMmw{{|g1@XM0@y z7YojMx6XKl;P(i9m*A{l5C5xz-z)T23(oq@&~FxeSmaqM{uhFOQ|O-&ob~?({htMYQ0NcGb59&D z>)kr$34%W)^d}3>`XjLZ^%}u<34Md$te*k>e8G1M{e^woVKj?{(MGo_Gb;ky+`mN;m?DDv;G?B9~Jx-p?_R( z*1sG2rv=|E^uHCH^`C%#%87JB2T3!x3H>y|S^qWYUo7~$h5qG&vwjcsb%MW7=yQTM zk>2J1rGm3RPr#owg5M(aeS)+8H_*RT@E3^r%Z-AwelphGZWH`8q5q)ZtUng|PYXUG z;`0T;S${J04+#Dpq5rnvtUnF<9|?ZDh|j+Y&iY2^e=Yb$!v9ghS-%+isWa$=4lehn z>Cff=birBQ1^vqeUoP~o5}ftxpr0-H#X^69;H-Zq^os@W67}R_!CC)N=(_}8E%Ilr z;HLH2+sO5pnpd2bwd9;!CBt~{oya76FRs)JR;(AwBW2?2K~u`e^2O75uEj1 z|6gf$9&Tf~@Ns+_k_KfcL+I=zvz@6-#U>&gO;j=uyLgSUDMggbTTvYvBt^t2hY(Td zq>?d3sgxm8qDji^y?=ZC?$`HP=k(WmU)LU<@BXZNJ?nX%wXkl=zB>9B@O9AT2iZ46 z*WWdW*XQl%@?-2fqkjtD9bNuK`-jlCzz;*0pJ)FR`ZoB<=<@H|&qCh;|0cTp7W?l)0!`Tte*wCDs(mr^&G4z{ z@-^(Mpl^k*i7p@Ck8Xng6?{u{`F5Va1Nu(*40QQ^_5;zsh9811Kf*o>{ag5F(B&uF z&p`hUelEKFT>E9{yWrnPmtSGO8T|n~-?yR5Z?r#veoyG}`uQ1Mey{ym^s6v`p5g(8 z5q2^A_lGC#3#0eM{+C48{CWNUW@YpN@HNooFSl=m{s???boo;DZP7=-cR`oG*1kV_ zFZjXe@;BO#MbCtvh%VpUemeRP_}S?4ZS0qzKLNi2UH*Rijpz;Gx1!4rw%?0>6Z|1` z`7HZW==b7!$mPHAAEwB@9^(7&h0xo=UxBXqmw5gP=#PdTug|LJ@*mqbKpzI*6kUFs z{XOVI;X9(sAF%I>J_LRcy8JQwQRvm+C!oup=l648LZ61?GZS6Du>B(R4w!#Ax_o*2 zb?7VLKSP(VZ@(M;4Ezu1^6`ED)%+# z>mdzY{vY=B(C-aB`o`$;v+Y}>FN1G~F8{85FZ7e}1JLC++K)gV1V0X4e!u+-=ttpS zL6<*czX1IY_@(Ibm;3$VHRylBZ$g)^WWNLb2>d>D`4;wnpqIk=I*l&h-#*`!VIvG( zC%ND+Lzf?6UmE>^(Bt{7h%P_XzAkz(T%Qfm<=?Zv1N|80Z-XxXrF{?dIoSVx=<)~b zhok?3`A4J6=kWWvQ_wTur=iOivY&^(8h$ald^!6M(Q{(|*Q3kVvEPn96aEN#1Ke-U zzlDu3;_E;&&r=Y6OZa&_kHye+zn$#MqkjWm1zr9j`*if`IPXo+<)5&>8+|(-R|j>ABo-*^Jk&UueP6xehK^xbosCC7oz8bUxqIKtNmJZ{oB}h{5PY^ z=k@!@yU;I&KY%VD*9nfHUj%;^UA~^@zce*$grVzXB+ggiRMm6WPkdjZOlo${_IzKW zGP>rE?@Qc>&i5r6q07hjg<7HWeW9M{4TF!z?O}Ay)5?!)9Qs%AlhEaR+rNUoGxRwB z>*(@X_Dj*fg`a+zSFVN-J+wVg!fb((~UH&`!)98mokNcnds<07;&aZr2 zx3~;l|5iHs;^^{6Jby*>_d}1q8oGSS<@yxX&Cs*LcJ#NP%NMY3gPt?|-RKuzudkYdWkSu-2eLMHw7Pi zOLWciiRbBn-UdDcT|Ta_3`9@GehxvGKjHba(9dH2XVB&I`u+MD=quspqRSVvUxxlN z_UCF=L&SqpJ87C{U`XU=<*NQH$eXxzA3tVmi;~Gzrc4ymw(y5FZ!?W zgV5#Uy3r`~-{2>p%YWqgUqU|uKNDR(t|u)*{~dlgy8L0!zYhH<{AcL$IlQj08~qsk z59soj*dIqf4xe&OKw*TGeLa-0&yRirz6iSJFK=HK{Um%Ex_nLhdg!O%8>7oNvTu!k z8onL6{2lha(656ZfG*$JegyjU@Z-?sAFzJ`y(auC=<>tu7ogXIUy3e2(S8kjZTL;- z@-N%(K(7P84_*FW_J5$)g+GlhzrsFWnXnN?peZ-NUxqHf(Y`eL+j#w{h%Ud|zApL_ z_=f26f7;)Hz7)O;j{QX`5bouA) zuR@;$Uk+V9uIJT4e;U3%y8K(7|5o&8;O|10Uul0IdRbi0z0u|4`rlCWa`4ZhH^TkS zK-WA6eZLFQ=ixXnLzh2ozZSh0=HHAie~H(PcA@u#KY%V@*8UiJKlrog@-^%)Ef+Sz z(0T70KH_;Vj4pqReHrx6;VYxd$92RT(Z7aogf1V~5nG{W;Jma&mw(Lr(-XZne1CNL z3HFbp4}>3!F8{p!^XNn2r=!ciWP!S6+vUvGaD z{ZaT+=<;9LUtB(Hgb`@UDELC?@`voNM$dw;fG!``LF=GD4c`D=zM$91Zbu&je-FBR zS^Mtj4E;&?QRwow+fPQH2>%kg{C)OsqCX422wnaW`_<@^;n$(d$Mw-~ z(EH%^XE(b1Owa!tdTaRO=<*-fUr-@zgb{Wnr4@XBbouS}spuELmqnM4>!3B!^TO9d zmoMpcvXVD$@bl2+pSE9t-WbPcD?8@dgRXgId7j_Vi{QAOM3-M-e^I5d z5r)otdH90p@*C_+q2G@EERQaKz`i#6+R)>9Nk^BD>!Y`!KMsF4x_oZ0tKE-&9rmXW zx_lA)N7289ABiqs*8U&p-@#8smyheIZ=g@b@mz>5-_rAcfZjaxczo8P%XhQ?8hru$ zE_C@v?0-dX4}T0@ev*CO%3&i6T@UYukGMaVqRY><{~P)#_%i77tL(2wpNivoBf9(+ z`@f^thHr%~AJ11ebe^xC=<+{${zuTi$NZ0@%b&4-8hsD^^XT$%9d{1;F8KNA^4EC% zZx#A(_>a-$YukT`z61U{bomzcKcVl0KZ-8j$^N{wun~r?hrRF@qswR7mq6bKe>J-N zSo`YeKf>2Rmyhed&Cn0Q-;ORn-}84y{{g-`y8H+B51}7~ABHafrTtUr`{5^}%OA9# zg?<43O?3G)_V1w|hF^^?UobU%3S$fUPw?NM%a=`+4$lMhBk;eW%hySj4%fl8{u;jg z4u1i^q?U0-u2{Kh=I9`ce2H z=<@UJv(W#5e+FItL;D%%C*kL!%Wtz^hJFhEeRTOl_M6dvcoEjD2DBWAG)>`SBTe>@Oh&nu$K_pq;vo&&xiy8KZ4JJ3sGf7+nS$MxwR=-0sa zLzkcC`G=#Ifgg=7Ki_@|`kK(=h_x_s_3;ZqpL(07OJcz(~K%U80$^g7)tah>c5U!yOB-UR(R zbj@?8=V^@oFnkMi`3(DZ=#Rj6MVEiregOKX@DHQQXW5TK-wZzqU4EARE9fu7zm6{d zj{Q>f-{4oG%Wt;dgnl)yt1r;y58LlUF9&}ZUH&|;Q=Uej44?b@fWiouPWJ0SN&Cyt z{{dedUGrD7uZTVoz8boG3;TxXPr=`UF5lI@4f-VbPU!NF*!M$!7XCqW`N{U9(dWZI zi7r3iej55B_}9?o*V`{fuL=Jyy8Isd_2_lrKS!58WB)z+jqnH2<%@Wo@&tN4_#8C@ z3L{<*Y4!!s>%tdB*ZeK)%c0)@e=WLvAN%^~74bTDGrIgZ`@7I z{v-7D@Eg$O_t<}nUJZT^y8Kc5-_bX~pG23><8{r8YKM(5bUjpuFNiLGg?%aX8t}Ez zn+6}xdsB4HQ_l0;gPsZB5naBPeP8r(@Pp9ho7#^;9}hnPUB0dTOXzpO&qSB+ZNCWp zZusTs^26=dp?8J<3|;;y``zfB;D11upJsm?y&Zf?ov;yx&aeDi_W9B84?Ui*vgo&< zUyrVNKJq*_qfdbUJG%T9`}XJy;k%*B$MyJ3^e%WlK7uZPnb&K_qj!aW8eP7+{j2Cb za6QjKmv3SJ4tjU^Rp|2f*?)?DKm3>I@{il^N1qdVJTE_?%Rg;@27M*wKd){;VZ`$u z*VivcUjbhNUGu-=`75EXg0GG)ztR3C^y#6;{cnaYzu*2|^bzo#(dEzBKY;!O{6pyS zMZI1-27NB}|0#6&xE}v9`aj`kq086z{BNVbfa~o&boo2%H=zF-dOSW`(B=Et??JDG z{rM4HKFj_jdPVr0Hv|+$ydLJ-7eucNUkqLI$94De=xOj((B;4J{ORa(LywQQ3A+66 z_IIOyi1|C9%NO$cYajFv;0L11SFs<7{t*Wj4--lm@E@U4BY=oifT7BL+=28 z99_P#{RQ>IMi_ynbcD~3F5kvJ6}=ODS#UF{Q(Octqu0fZ-+I}1Q zUGO{5SB$93PT=!-&+=c^XF{BxeaDf$NZThZkg+IK|X2Y(;B{093$ z=reJB4n>zgU_Sxk*68pyJ1K?Yr z%Wt-Chu$B)E4ut)`vK_x3O!z*52MSUu^)&22K*#+`66EDdj@y8MIor_me1=e{YRFmi?u`APPdp}z@V99@2neMR&P z_-g3#tL+=27lXeAUH*IfHt40{JE6;;vhRmJ6#hYU`OCe|HyV8`{FCVNrR}GokAr^= zUA~6>V)XIw@1n~$vR{v$1^+p^d@K9!(I>zkM3>L7KY?C2oc#EF$zb#v*6=(*aThkwDdf8qgTQ_9nj^w+4n(T zfc+eZF8_r6Nc6?g<(GN>gGqgj`_ZKSg?rwc!;Qnxan>JA`$TVEw|X;LDyR^vF}FLAHie4NQ-J= zXn*uavDj;%r=zz=Z-71;y&?JnbiE|U`M*ZjQ!w^iS{w>P`=d)H_R8oww6Wifu7?== zW9Yi8*#C*HZ)4wz&gbbj=)6w${YC#ZsfWAB9;eWC{nYYxl1FzIh8{1ktE=2~{ht?p z5cl&scIrr3vvx!K z^P``qdHti<|8P%r*Zlg3Bi-M`KFQmilKKj74^Qe^^U#={{W&qW=IZ3WDyfh3o$pNQ z`n$H-!?%n3Q&T4{jMSt)%MUa?ssD08!pHlM^W1-7q7P5KE z_xjH@JCk}*|NbHS$rEm>AM2x{*R50aqzWVUVqVuwPwHv@^{G=*f6aY(Qvc9>dQvaz z=SfQ1fWf^pJ9i0RGy5mLc8}ln&*;@TEi>bx%#^floijV9q;(lEASJDT-^51tPxWnD z_%5wi->#i|rKEN3+q-v0pKyadeKRxCnzU?Pc|d08u06edf1iPA{rdOqm(f3SaF|Hb zXLRp)U;oa%GZK&f|Nl8POrc9h&smOiZ@l5>d;FO%v$&a3Jbb68MEd`g#5YTeB;@=j z6WjU17nS&WP&AQK%DDS*yN30pr2CCONWOn918UCX+yCO*cZ$ygPY~}v&ZoE0G^eg3 zj(GdCe!Yr6OTN8+&DHJyvH~Y$FKXW#3S|Fz9~9>I!E#T#BG%HcTr+9$^KHpw`bG$$@c!x&JQ2S$1l~lPu{P%|C&o< zSoqMK$+y4Fw_ln|>fA`a{lno$|Lyoa=i|536YKb06h7kZ_5V#E7!^!FQ535y2nHV^Jc1yiL0DXrM?|7nOP7#rAevWqH$beZkr2yv z-5Oh|)YcZQwe+jD=}RdUT~GFvu0Yy;qPhIC#+#e z4;7rsFH-=y>M0zO3iCCdXqF4={B(G#rZdn;NXT;8p59R^$3Ux4rCBbIuP*+<cmti~Xq%pgRDRE{RA`iF8rr5Zw4Av}v0Se%*Q?9fkcu#0 zLt{_M$baS9p6T#R7Q$m7Y55THU)cjpWq=B8w`Y2NZMs}Kbm?*in)CfF+=s%qW ze?k`gV_=-g|8K}b|NSiVmu8{AF$?|GS?E8Tg??lf{P|hNESW|v*7Ep@EM<_ zT|SkC&#_tfd_4>PZ{RZy|I(kEfymTeku3P%13%I_+3MY`IGOp>YN%{z4Al92O;%kX zSQ)eeErF`Wh8nA?uCeNR?;2k)SX=M2yk2A?UA6XlZ%t)womJ!a`S_=@+NxSxUF)}e z8)}0fs|*Bu{-B}>1pU>`P2?2tkpyXf)mpz*>Elob} zYA-6c>aS-ZaF}Yb9?V(S^QDe?z74*rbxl^iN_oAQ*{Ucas;;lBZ2(<;<2oPsR--O! zU7(@KU)vC@VGSE9y*0HBm36f@FkcB2^wrfdp#)=Xth(M;Usc~^)rbO21$;rPrl~nt z1^x|{Fw43c&3AoeZLq1f+M-GoS)23 zVy70DTHb}r7kgnG-N+;|n)=2DZBDNu%}5AW%0+R!48JQ>^w#tN7<>tlng|ORVDKArk)&>x)*)N#81c9){d~OeCt7tyW{q+ zAe=eMdRV7_B+box%oA8Ng*(?6E<5bG74Za$^tHvOsd zOoczVOF@G#)A;D_RJ=*=OT#xTQ*_bC6=Y0ibS7q>1J6A3^f>Sn3=;6513$xo?{(lW zaN@N*T)QwfvY)7WI|@LXKoI#3yj}_jzR-a;u`x5oIPk2)Jg%sEBY*xgPf=985oc^l zOi7e~6)hUZer871E9sB1v6fZlz;iA)k0+|$NI%>l0n4K*K|CDGepW=)EAhwKSj$@F zz!y01YaMvwtITe4;5oOMXG2uIk-u}CZ*$;}S0wUxvjfj{fO$Hj>WzFx8zkV?s7erj zqI#9T+oCE#{7LFn{%((|1o30ktNiVXss!F1dvc z{6q)+7zh3=2j1nt7dh}n4*VnszQln)+kv0yz@Ov5mpSm~I`AF`{yYc1+<`B4;8!^C zlO6a~4t$9Nzt(}D;=ngK@KYW54G#P?2fodLpYFhKcHm1L_)Z7@dL#DYE74MSte=*H1sQ5NX-^(<&p5mR7zKiK$Ot(q;OH6Z_A8(TM z7ntVOQ+$=AH!{sFr+B%fZ(y2RP4O~G`+&YT)O8OF}xn&gZk@N*jbE_yGmGo4mxkVK3lJwb3b89HR zP156-=9W;rQ_`m}&8?t#o1{lE%`KpKlcbMfnp;2dRg%tSnp-~ca!J4c4Wzl%6EBnW z-nOC8oJG6K|6A z7ntUjOnjB3H!{twn0UFQZ(y2RF!3@;`8VU}>m=SK>9d*UmPve@ zq{lJMt&(`Bq)%ab2Geawvwu!`ePL+-r#+!pJ?($$FJJDS5}opMPh`#utI#n=|MP2> z^>$5h!Reb&1RXds=e@fL^8QXRYalopUHkVSV%I)8(OYnO8|j|V5cEG6`qDiFlRor> z`aQefxY)CMV2CGYuV?>h%GWmMZj`l}r&V~`=X?Q_mM8S* z;0RB6&ZmJ-jNSlLtO~ZHkXXO(~c_BxcRg+AUUwjQ{E5O5Z^Pzs>wrdP9p3qO& zLp`A_?D(EgWG%p=P)C!1$OeE-(V(kflDn;7(&Em7Nfp})Cavr$nBI!BLlm1cgJ+Rv2i^ScOeL7BI${AloNzHIG}jCJ2-BD z#EM^!VJ|F&+Xp7EAMXhZMR*I@g`V@|^r+YNJ^3NQ^^F3FVp*OKJ>)e^L5j#Z+%ZN# zS-vMyo|8-#dS>+$v_~nGO;U*FY(B@NyUPlB3eb0oL4?Z+J&_Y^`cQdcGA9Ffe|IvQ z1)rjNHVOj1=m~Yln&6L~@D>p=lYTb2`iwRd{;nJ-MdCqO%OoUUajis?@{Q8E+?|n zu|r$rRkbsXutKWJ?e4H(OHOUw9YgWv=!f}8q92wKgrxbyLTvgS9U{Di#dW{qtMog* zNWW7o#M1IAmTnV!?jo=XHvL&y^8d!jqiC#*Mqc3;BUjdlk?$gakzdnB-udp~8Cg^f z<;I_YuIM$Y4eZ9*AWiT~c2sKtI!s3pi1uClYqcEnIQozkvml{H$BLQ+b2faC1Au30i%B`po29henKxx{Djpm486B7)c@Ep zHg~97)q5+=-~MEw7Pbdu=zhHl^aFSzTgV5&a)~F@3%4eTCw%uof)IxD6$qjuEC6Io zkRD7SE5-mT<->OmD69+EA}AbdLRgAAOO!sCKekXh*hbV=`rd%nQ0Bi`8d{M=M5o8t zEVc$u(-7e;JHR5`A>-XvOhLei!8uagL-Md{06kJL&mJj+P(})Q`v_kC{f19+z!2*w zp%=VEn~02{lMFpz+}a2cBBfiZ2=Y#=ru_SN4joF^9ed+#hwN#b!x3uc+5HOQlHK6C zim4DB=U1^i;eZ)54|Pb1|NeH{aWurW+fDo7s}SOG7}$y(#9Qo%wI8@28KJBBOw2kosNSS{Db_8=9u+6P89pG7K9WJEEI6x!nn{ZjZUKkb`n zSv%P7eJf+PNfB`R3Jm~CDOWm1%Iyc@ajwHuxgW6{#p|1(*^kb|{#L_Y%bh6#bIgA3 zfhkc~p2IJiWDG&1^!e44Tk2~V=sfu<^*Y5Lu*kfwvJ?_)43+$Jd{bt*@N8%E{Zu0u`n7clBD=A@D6sE6J##zMkNE692PiDgI>JS^Vm z30DkYVmv{X9SBgr16l2Hp&aAF4o|l`3ZmS zNtk5>R(zUP))07?1w=M>epbz@AT=SxmGwdyEC4-FI@e_AS>SuJL@2#&r6|zm1;8v& ztGjUwHdO^QL#`2qgGa?dprNA-`u9>zRd0%lA<=l>V=k%)b9|EAI-&&~CyAHCkRf+J z3idPeU#}xGrS?z_7k>1S`q@6Cb$WACC+H~6{dwCq(%iO8s%x-y^&Y_g zYD-TMsWR#OO`qu8c8%!#88$d{Zqz#e`maXkk80_5H&?~(F`ilOXu-yxV#V5*)7hy; z*~gb-EQsZx{*`)Lp#9KV47*#MkxXn#bg%ncIo3pUQC;s!I@jmhRzg(;$mijal1Pj~Ex*fI~f?+d%{Yad87 zD{X!*6Po)z=m95nmzV-2ED)Ch+r#ed$pTwdf$b;|MS+>7z)Tj{Aq5@`yB|yzSfdI& zhywc-g%{%=3u6A2Bap>tuR~)zq1QZND0M}?Cp63xx(bGvTj&WbC|neJdQoU^>>{;l zbA{Yps8coTyJ)%g)-Iz6S5%TmtH@rSSV+yi_t>qBK^9}`8A561-s4p{nM(^jInU{- zR~a~!mH&XQgIjhT;Hv8cSP6k;4t_L-)(8zzgxmv`FnYmiIzwr}RRnn+x(0mWCG8Vy z|6*FOL<<8YE>k`c8M;L(!UkQ~-31pIL(m-?Kgul2htV<7_u%C_EbaokcSwBw6>P9d z;3BxF;5I7UK1H`ra1Fo}JnVLnv#AI^YR4 z_oL(hN`f6K#{1qfm%wgr3DHIS=`Lr=3p6;RfMgW|AqFc0T!|%`kCI;BmnRD@6R|zn z#-Rf>bk>9_zUUl6uo&VHVnzqGm4F^FNoJr<=_9%Y4y;0Lk` z3KFzGiH>=n=%m}ez4g9C^W`a~x{47e{9kF%SwYG7?>t&-u=Y=4ecM#wiha~T2Hcrw z2&BnBR4BEmuvay%MA>XLOhXv>9)vcE1_&KJ(V54{jtiq~MXRE0G(!29k7ntA#!==e z8cU}!R7rP#Rz$A=t4m-gVV`e0eI-N3Na-od2=abGH-XXxTIs+aMQNpnz4hWo8g*b` z41Wd;2^SWsJ(xFjuyKmA7II|FN-+eM4FwNZe36oDE_b1URezH8MREdk?&x*J=QGmXc+Od>mGR1#cF+5i>9HsTWN;B+G42yPBJ+ny`%Q?-A z{I(r8V7$YCynPXM4Yy)e=UovwdbMMvj~bIlQc)R`Z#B-JoRZbt_C7>tZ@tygctbeb znGiBH<}sVtI-dHU4xd_Sr$OP<`La+c?O7y^bu?WHjkQYKcGB;S1D7Zzun5Z-KHZA& zX>8biE8OHyh;P)8cZ}|ujG**{*vIj*3*%)JluKojb9b@V9K?9p#qm;xwDibm?(Zmv zBQkP1M?!AgMr6gPP8WXkTamigQ`=)beb;Po$FdP4V(QM->!4C`5N7C^o^Uf%Y%LO} zkjVKJrEvwOWyFh!pxIqRa}hf4i4Bw9@uX{T9OVgBY)+R=jf&0V(HpAi!=b&7&Ft3@ zqU^w^kcbap0MkQw7Y>&YOGKKx{=Gb&(7Ul4xgLdULdG5HOch&hv-SjnKtwrdjz$AS zWvV__P&^qyPAa+oPp}b@U3v<>jAmDBgDx}mPQ03)Qu@uy#9_J?D~I{Ac9?1`k>V^J>~|XMBj@<`aQ7vCBock^(JsuR^NzT&5{Kj&Cf73lFOzz5npo z`%2U_{$g`PMknz_`Z9l;g9&@VE1OizA0zogRsI+|Um`2!yCnZl9DtBe`Ge#~R?LJB zs&N|80Omk*X6(%uv{MWKt(*c&s?s+WfNQ!(jK+n{9URd6hGeW~=Y5bh^$aXGrLs+? zvT#ae`xa)XY&&AI43!mzT0cPL7#Z$-5r;gfjg>w4A`MQ zME@GHu&f@@*7~j$JW5z%`-1eF-S4*fP`uqez}SHsr33y)vDSLm=70D;ALC&d`^#oG z#~Rzo!OkJB?8I;v27-MR1(FqoS`VdJw7vCEqWKt+H2!;t+wJbB)Sk%V{;>Oy^f7h( z_dYBFlh2CX{=D|Dt!M=J7s%jV$8%5&?N2%TegrX-;>>U!8$a#6H(@B9g}2=U`4bXA zhTLzrx4vx!SB2egV*e^B zG8@gXiw^6|*vwm?i*23qQ0t?i<{g6!^r&s14)g|uA+^!6OA0J36y>yU@j=hdAKmfd z#MrULBR!#go_GK13H9I}=P91u?_KN(J?)uL?Iwq*Sci{fuso zXTt7BO>Ba8z5W3Ed=Iy@(I)@euiJ$ELE7X|w8>4X%cr!-c!Yz}3FB-T7H=NQfYgjA zu|3Zv5~|Veltz0-HCkEN{YI{of9-MUB zeXd9)rQM1|OlODvoL&0F6xk*k+0wh~v(VpeM|P)yQ1jaeZ)4~r1G4|8mNR@;yTSKD zIi1PnketM-ZA-MVME;6a?Gd3X$u3JKUUI@_h&!aUq*C~z%+^1E&@x=89ZpW;I-d9r zBZx?;RYs6^g`4iXf9FwfTK3#)pp%lYB&mg*v_TrVuZbf9ZU?_@7-RQfwmas>ZB*6w z@5YR%RyP?pR1Xz?{KdpidCx%Bm3qv+7j@W{SM%w|3INuoGrYpdkWKlYMFWLNzA%S9 zP^yXMbxh^9&{D^L8Wen&w;q%|oYml+UgZc13f_~}%o-H@Z9wv~1_i%T`N^OF9x^eh z2KU~j)$^`vw5(3GA?FF_eF`a^z*Q*Bw6a5wjuFmlLDnqy2L&77htJ|N)R2NrZ<)8x zx2d<>;0omAt`G9ER4^ZZbAo5~)qwF>l*aYHUtB_G-Mte&tB%WJt9uYl+yILA8ie8p znu4E($bnj{j1((C@sgsrOH*Jit|?9<#SBpVL?}kwOp3_pmo6kIy>hM!P?xEWB7;@z zH@`%H`r0!zV%|+Gh4Tswx&3-2_w`>%4t`__;_iK%!o*gfNZ-&-toW0@;INP~31>rj z`}ZcvSL(b9@o18hY;~5Raxuwk^;BTaK}~UrO>rJ6Xp$!t#ePk3qD^ruDQJ>=gPhj3oCYJMeKQI2&J_jr@BEo^ z?AUy0z1MwPj@}5^hU0@SCzFtSt3F_`v5*dj(pUn7+;?EhZUuyqNwHwlAH~>O0+6|* zVfP)p@}-XpWcjbJoXHZs6EwZDW^6xHB)5?lLxq(%zQaKf?;&%wzw#hX@zHp^fsAAO z5Ds9%@@0d3-={AfUH7j*%a;#KlR8O&lSW!+)7AXzb{~*{3 z0n#Zw;h#uP4NJdW7>eRcw?(1nVrQlK!VS_$;)n$gV}V<+=~Z}yIHVU@o$=?9?2JFl zzqar^2IU2)q;T2*FU_UqrG=$pfJ29k&nL1$l4ysPTx0E+80PIGv#MR*Z1$wK<4;YzIF9 zMu?sMB+SW!2xG#m7VRh#R*y|1$h(XDVbOfWF?P~Z|JI@y%v_!jH$k^ywA!9LKIlSn z2agbNoG>Q#7Nb{$xjZ69M#@c)D?%Ue(KX!f&nE;{%DrX7?YIWZkjT_VCU!)2TbF?*Ol6;VaQlD_~c& zQ1iAylc;;U^iDaod5sfi$}UI=z6z1yGyXaB*}d+^&FrZT-y?F20>-jheF?;RdVC*} zg4&AnM{^A-7-x$}=_4fsdH9)p6xqM?Ox=Wqup%rQRfT41i7;d~!L1g99j;i&M{%bf z#jk_Dgk5r;Jw|Zmgyy{(2El;S@lOO!Xrq1D<--8*xVma(IuCfmjqS6y9wZS3=+5&n zIOxvvI5JW?&k4IJo8z#s42_JU%{}Nm`}Vs3!hOe>*dj9e8cz3e-%#wam3r|~b$e^S z)qFv0;BgcGNd`k#oGX-0VyX0?^i+H-0q$1(7G-8s=Z^K^2o5VIbPo zf;sH{7afJ(e5i|(hIVllb9MkZP*sZ({Q-gUmb;>|UpYJW%46CrG1@u=v#75QBBj@4 z5;PZr?m!)hzH&AEPOz{BoMW}&OKTl!pP!OZCK>1=R^MqU8QUa-p*JFaL`rD8)b4!} zR7_iz&?b=)zvB!ENmIT+s^wOLgy-F{Pe3PZ#?FilHOd`plp}-E?ZO~!AyNbeG7h9J zKn~+mqrDyHz#wMW*v5eyr@s79)*WS{CuK;F{Z4vN$4r!gvBwa=ZA#IBLb6nAmlY-U z8-nPeCh_?%+lkzQO&2>7pKq}fR>7tLgbS(+f?6+fP(`7x;%KZ6)P@%>Qcz?o&MG_% zc8ws?b-s(8lQhE1NvOV$LQ`4s8yJ?zFr(I*$&W%Jqu=ISq1^0BX$c7Y5#-%T@-sF0 z@g&!`nQhTJ%9OzatgquRV43|!c8r!k{|T+{fttmo~guUM^B1w43YDhoJ!%nk z!`Y&1SlVj;&TnX4pQl`@x=I~Ja=G~bMP(4`Y6OsFq#JIR?mg14I)I7D&AkEJaUrKG|@5oA|v~7}Te)|-*?*5(M)SCaAa;0i6br{J-^E;Gz zsJRh9X}(WKZQ`fA+RWoT8Ex9z)>x#%J zHRgMC#%CwfaB{z|jm}uTgIc;bgCmFmllrYk`rqp3EWx`Ka@^Xh+wnVM!c^tPtHsa< z6Gb_wo%Ns$kB%#B1`9LFG}rPpA)5$OCqgcRQo~4yJq$+G}H96m~v&w+b-X6 zVkmHL_so*_f{o1sxN-J?1W+lTJgd>+83dnt#lm1#bL{&Zyt`N=-zztqB=U)!8Ao7O zh0Z&M{WvmWrck7vI45F=RaN}ZcfKc_H~A{sVMGyWBcrc4lc4lj=*;E&E@c(Pz5=F+ zt@^Rr4VkG2_}{2qGHBl&n~pr_h91!!D^l;<_?qNNM%N<+rQyN9*!$=<+!zkLw*DA*kkF)vw4HlYl*{dhG}F3cRPe=n^Pk zuhaU)4a`qRt&mReKXYhAFF2f^jxwi3dMP3+fT?0N^8-*t((fdSb$;Zu4*F`ny7TIn zv9X+ot6pHVPbAM@F9Xt?zqa#iXTTGB(-Vp+|HMrX`eX1MN<*?93}4T*f=BDBwH{cicD)q zEQUU(FKC^CU%2903$u+9a<=$G!NyC06r-j)x(~wGgCN>gfANOPQmAae8DG-BY)Y3I zwI4&zgxcM)Ixv#4hQqXcjfD|An$tHFd}4OFWDUkyBBi%63{=fQBdd95@vGEPf-U1v zcXdg7UmSboA+!Gh3=XDkx=3jScwr73)Vd$Ol5wX%eu78sPRY(xWb{-DliZOSCN*H} zHMhw0ojD9mF^eCYV#BEz-bN*Na%03kdA$+#fOjgAV>Jm4b-dG1I=_!bBnukAW--gj zVxJ=E!PimwAjL*gk90h)L%4G}+ua}dBr=c!D;Q4o!aUZ-RfudcN~R9N`(%++y8KjB z9m$)+U=CyQ?MD-K#~y->6*sanSB1FD#)ozU%dp*eA$}DMQ8kLO+abV<-SVIm1Fk!E z9p164hP_2>l5rOdrG!~Ncfr(V#gy0yppr|XW5q6JkMAHOwe&tZvlrZHdD&ExN_;4u zvZeR94@gsI{}I1$$?C53?UT`v zk-Q0vG2ti=Y5!UbwQcT&_M18!R6k?*v3^ZaS&ShBC;3Q;7}CVnG8w`n2fpj5)TunT zP_=dPwe8gokaO<5;J*e9fGS=@m|2!@qP1R`3ONYkhs)SbdgO@zP8tnE35eA(ue=w^ z2cCB&GYh#&9*6G2D_-h!muC(vr;m2=u6kr9UUKGu4C%6frnx?V^s2Y!DsJ{!!zfwD zm0mtZ8tTDus-br2hPqE|#_CJ76p&sn?Li7$+T+h-@Vm=?u5fxi=U`--k8 zd(U?F2Kb$iGQMmM;8m)IbBOR4r3#O1sRyeA*2Ct_Hw@0<(n@0~le2QJoXnC%t(uTV z186Ecx_4!Y*}xWKx48q(wvg-G`0B(x5SSc$RN5U=370Ym?sA?kczBej;4%CfDSwc( z;1R3fk>~`=Wm#}n%BR{sNiOUCmtt4K5A5mx;|p?rY?=rH)n!ekYLWBveeezl6y@G< zx3aO)m!V)dO0`vWKHgHBen-?*Q1 zYr!2+Wm+DldPJSwKVunB=q)gddP2O(gHvybX1il6L^{sH*m}e-YWSDR+d06<#c#bX z5+?)-`!z4czKoj?$c1q57R@JDM%UI}tPJ6BoX}!p+1=Im0V$_{C7Cn^GkPwg5?moy zfdMu4&xER!4w=$kC#uT(L2G+8zH$KxzCcnH-wXTdifuP5G)-cMQpLtz1rKYJ!D5Av zTbRRR&HbVwD;Ri;7zQuT-UlQ+drB%E%a&WLE zAIIRt ziJEy7r93sK#}+!p38tZ=Jccb(G2Z!*MU&lp$OYFMv>fi}{~N@`^|7(okW|ho+o*Hy zVc2*GneDsy*J@#-JafF_yX_EcJT@%(o~j;CM6pqw>KGaXVmf1+PlKHjgf}2#5YH)z z+-t=B@5t!WA%+?lWNeCEg>v`=2t!dv%}`|VmN;zuw{5h!`jO@KT`s6Rq~I2}Aqa0F z#?$^+{wNWc9uUuv4*w$f@unSr&p;i)%Bd2LWM%VTpUSrJh!$Tp%VHa{@|bf4Sjwvw z;ZZiT{d?FZ0^~0`16$7e@$1b5n*Ks1GNZu0=`c^B2?{p}m& zX@7`?;XblcWHn8vbL`ntr%Bi;}&y1W32L_}Zys4Vta=_9JZ z`Ruuo5#5S%p8%nhZ%}QrLLnRd;c+%6bLT;^>8DX5d0%AtklME}KZw{JyWpG1)IZM{ z=Bb3*Y(W!+D>}`2P^UTc>a-7MJJsQAC&&gDlJg*B@q|N+6%;$`^BKJq-A=EHlnxcO z@{SSd_V2_l9}N&2N4fAj3ShEXAI{E%p&_3{`RZ8VcZ$dY7?;kgl64lsSvix;{#0kCcuXLy&hG0hUGBNETgZP_9&6m5gdTN9p>e zBBHKF0Cm9CrrjsC(f>({hxKoucgMaZLSY(H{-ajz+Rb`Es{5E+MCNq}kKW8OKUa+V zMd6j(lNW@$klc~HAdIL(?hkuh=EsSj=QbC9ZqE?s(Sz8#PL*}3$f}OS?8$q| z-Bf@c)E#^3Yw}*w&AzUFzZUjNxqL^{zMy(sSoAaI7u_{O)8y44z5ADVP79v?BFD%r~u;BB*N+feeElSj9VGA#aRbM@6(s>uv27UDb*BNtMODYyEa!s7*8h1%^i>toT?{h7i zyVzCNSU1ips`Rg^n&i63Rf2L81C7o8DxbHhGPpKyxEv+~iW}>yt@9eKD(k!rR#lae z2>d>VAl0>gUsbTt-{M*|A+X9-S?BjvR=2o(8)^f=fUvA;Y_6+zH8ciYRmcnaT&YDa za7_qUDyKRv%c^Q@YN>5l0}9u97m<$7>gJk{G|m}kjI-w1bv8En8eBECbv_iAsvLQ1 zd_kDC+UIJlNg+v=))HqaPgPwt{>J(&rPuq>l&)Z7O14Xsz@MTbzptU%=Re#AyUul? ztEjOlSX>!sX{dsqz_1NL@<}2O(|gdqy100dlBj56O?AMqMO{mlUgDj*Y}wpvyo=mR z;1nuXoD&D)taoD7+REAna5{Xy)g^p>|J26jprbAP%?&PJeN(W-Rn=HuU)fMCe!co| zjbqJQJYO}hgJ(^n|9V%|+FH0@lfSXb7tkJ{^i8&Mz!z+8as`6bwQ!Y2f0iN{=%GUP z0vYI`c6NHz@4OAob#;fWH8n}r2%L-A9^gn|!L2GOwfX`pVj%tFghftgEQ0w%RqJ zdXj1|-QFBBg1&0k`r6=Hc?UVV=7eg^4*bL~OjEknR|Z@`pTEAg0fS1lYjuk&P`jp~ zvd$DKDq^D__IP;h!X*oqu5?+~UOji&l7&ky<*R$yvZc%LvIM4E)VRjG$hXc{XT7@V zr+?dVn``W~(`MAGQe&?zsdrhg-nC8Rr`6kBR962t@7m4+Q|dKOg%;J4mJ}l=M@QXm z$$S}a8hjgqj&ai05cIc*Avs9N6yWIEGJDt=Vlo(Ib>-^178#L|X!7}y;8b&7(wgH$ z<*O^}uJ_KZ3f49@SjARxu{D`Pa8Z%X@NoUqQNke{+>Qp|&|*YCT!!;18#tkeLDZIi>~gA-?%K(G?tUt{K< zYG0j?%#d~v3f7l0QNS(%f0Z|I*kd3snBhUW>Ok;glvBm5jSRZfOtxvxv8nq&yLpO3tANo$#k%#$vJ~sGR}aD*Y;!#G*!+1KrK2?i)HzJf#$kk z$`rn^frCiECv(nn_u_Kzyt(Cb=Pg`*4enU@Q%Kz#f|xa3!L>eg_Zy^Qz9VFUc$El4 zD(mVRt11zZjI$bC7tKL{q@N7+ejH|1_E;zlsyipVtP&%TBScBkNgm@4h5&|swG~)> z7$II`U1}JkLJemaV->+O4ucbdMfDW1z{e<&RD@oP282G2kw*>QV4bAHJUW=pq5NbH z$dd!Ux|+$Ds;qK!S=FTw|H=>mTk1LFJQ}$cktzOvHAXytB_NvCDxSQ$8NGXQJln*Y|+RTWoS{;Ggg z=?4~_bh342u+lHRTBIv3F6Pe+sfYbRCf>>>#G=*GKfG%i(J6%1i=F|CSjm1vQ=q8y zBhJ?nB^quHJmzskeu|EPm{dYc>LYw4AB?2L;Cv|xlly~Swhp4}R!;`01dtos_E-54;|3{1`%xCxa27>s-^^Kqt)^ zJ7o5KSo&Rw_o9u7#6i4o??@#0>n!)&f-_m1W4^jMk#GTCe_J9kA8>ppE`9^He;Hq* z1ID)|688bV2lyo5^EknY0hZ$6Cm$!l&*D_52=E|JhX7y4J(fDaIk-M?D_|?&gMcsN zj@vVUr{HqoA;9&3!}Bcbd|XvL7x0^aivWk?a%&ynnSi$feh=_Lz~jD$@_;J=4*{+R z96rplwtOGu0axM*_aeYsaH3TQ_!8i)fJOKK;X%M#0iOZ965oLw0;~lbew1ac13VXS zD?S8S1h^d^)zksr_z21aj@W_nfZqdr2JmUXLx8_~4F5Ihe9M|1#ec&V@RU7?#B!#e zNF?|f@bUPehC2Yi2>4^bSvWvB02l>)8*nyGi%!5jzQ+Nl1OB!LO0iSvv<!kvp7e)A zVg;Zda0B3)-b7+6;Hj_RJPU9h;6cD=00#iS{#qh&>ImhzCuj%GxnY@=v!O6&?C_)V zJ8>vS{HgfY3*Vhcn)yfJ9tL~^|EA-g=cYuW4Zdg{SGeG~F_#q_yFS0oy7-jYXHPp* zrXZI66#jj+J(1vlTG5(&T;VOb^F|CCa$zp2uv|dhh<`iLCqnQEJKxhjWXO%fNFw!b zL)PiH>T@~6BlkykeiZqSAb%BQG5JHT9YO+;ALw_{ziQyO$^6PZlh5P&Ia}0!o!rj9 zT-b|@F65tw{Fj~l-H@?Is*pP7gXWK06N%NR!sd~?(w4Cr`4hg1HgWP8@?~4bO~}6+ zeH%@iEWaQr1Am)$GxA3}b)cQ{MGcW*A819U8{C&tDg>fAJ9g1Z6+(ov0G33wthkq(3g?V zwzAvjY9+r5C=c>qME>#VW7)9eSXKv`r!dD|oub1s(SbZ}Mg9kv`(AVAbFBHTkcb_- zK=T;BhCanfGi0=FhaTkb*qKQD0sL$^b6>Xg=tutgpCuBXP03$p=NCf$=aByZ<~h6k zko%7&0d+4y{>rBkiO;8$-)NUFNB)z@&&IzA`KRwie3MfCCcAtm^4pRBi4^_D*!p!L zzpWedSxWim?eaaypSdrQ;74+{{EH=9w8UBme#s`R}piZ$kcef1XI3?JVz0mhVLVkB~ppnIA~zcOm~5$j|1-J;=WhzmBp$ zrT%B^`umap`Y#fRH5dRQ&P&GYnNxdIVi2N#Ne(tC3@;^rYBgoGrBirBr^8b$ff25S}x68kc{BFdq zKS{~&vhzO`HgW;C9Qn^6zXxNk?PH8ro{(_DBFzTSZ1{B| z@uJhuIMyjw1%-OZf}1)RwyaB+R9LxfR+KmvJR3*wZG=6rke!=oeJuU@gp22I~Eh>Go0#?s1^)gncF)Ya=@gv?2>U{QR zJ|_PkA0`@^?nFGthy8-jX59fWy~!iLLxwkWGkNB4yvHMJ3_yvK0Y?+*cr;u5a-l-% zViw~cK4!g$X+)lrG~A&THTZqn5Jv8PO=tS4ssEn|r4O=&^h2HY=<*4jHg@jU>AhN! z_jLOIx$P2LbnLh&SVv$+`?LIo8QmOzTJa_*{j5 zIq2nP{1GJnFrFhHGyWNT2roI-@%DIT@Z0f{N&fE%{c%?R*Ayk^Wm&uN-wOU@t7wlxnDOMV8egXImenQ%ZwdZ5YmDXtj`AD>1Tf3cKA|6NrH}J(1CQUUwgz;)hR;z$XwQ@EdDP%P0sKhx zJ8O@^n0ad&@Wv*FmTgKni8voTZRgH2cfmiOA(LSSADZK2f;q|pF{NK%jza~q&9D{(I{3~SR z*s^5*7W^j)Ue)RRdtnxQx#lxlj{}@{`Fth|eOS}KGDFds@%bxR=)bG!D;6nwvkuvl zh5iLiUpimWmnmRze~tPcyILW1cd{&u1H=#2{%_)c{x{(>`P&Gg*GwJYv@G~(n*Zs3 zMSQz1b5R!ha!o%>>#Li`3QB)*RH$E9W#PmBXk8}xH);MRZj^m(@cO#OzdTVfma{Ls z{z&6pS15e70@g2qXFp9JKYt_in#cj((0rz8$KRy${-yC<+CH*Bh`dn<7}zdbS`?x2 zs}))Nc|7Pje--Na%e3R!!p9+qe!WohFT7D9nl*l@#!snJh|g<0f9Tnz-<{x(2yHXj zxdHSebH~_mx+(Kn;crq&7}51sou_a+bQXW6b0p)>PKAIQ$iwqv+ULC4DlKPtc-^b< zuQV#W?q=4@8vpkV3g4=L)u-_%H7SJb599S;g4aY2FcJ#`*4wyHA)`8PhQ@DOt`G+_ z{vyHagacfm=?kO#m@d~fIhqYhRH){Vh_&*9hg|#I9q3Pe$ z4I<~Z$jLiK)!WGn8F=Iz3Gh^nf8Yi|TbC+e6$xG^9Nyy?+=Dz)84=rW(u z_&an*l>JWRRciccy55MU$30xJ&w&PoIH>WPH2&|J{#=dUqVW&v{#B*%-xIt}IKVMk z`t_bH^e<@sn{>l=YhLeZe2X67@6`CCv+y4)_~F*cx?lWS)0bqSpPvPPbryV`=70a? zit#GV|FarDwpim4U-AiM;q!G(|C~qBl__9-Pvbv3MIq!q0bX}${JEc2_}6k2+@FR2 zt6A{>0G{JmdOVhcanGe#ru-c%)c|E|AiixO#i(|<4@4>!&#cXT<|HZ zB~g_Hzd`fq(EeulY}WYCrHupkYW!nb9@8(nG=4{&s@uc~yEXnnO>f5h9*w_Fk7NJP zBEKs5!ScTa{J6nr>o^E7Di_Y{O3gfhc#KPXu2Oh8$HnV8f={Jo>OxI_iypw_ycGCr zHGbD;RGG6Cuo|-PxdnL6r)E6CbRf@HHJ`>sDlPX0_nhuO>M)Kz~T!NyasT$+Z(L+R@F5&_yQoUZuG9H!%gryZ#C}9;%;9vz5!~)#XTSH z_!gIBrtsF(Hq?46{r<`p-q!QCST%lJ+4NR7*Vnh8h$H0%WiW*l_vCO{)9Wo?=3c)1 z8t;ONCG(aqT)M>TEuJzfGkT`uE+6jt+NsRc=VwOGkYaL!(aR4J)VB|rX-gF?zmiD3 z44F~t>596B#MS(oB_q|e%;>3^(Nh%9I(%%f79YXX`TUvb*g%5~nc0prGty=@*Nlv` zr5Ul)Gh#FAn?>D>97^cFxT{L<^?DcJn>V-Dy=1=EYkB8ivt;h#h4X;Meyi8*(Yc=a z%PjAui*44$YMp$+QRDad$}U~B@RE7nso1eC zwNmeD@th`=)<hLyj{q-Oj zB!%3NwQs=IK<385M1gf)-)F>z^4%8dQ5T3|zsl+qmg@oy>N0H#Rt$;ng1qV*Azb~h ztman*DMS#v>UuBkmZGqHq;gnv!ACc9O zI-jp8ok>P6qCP$pYrv-sUVc{A9HjqAuYiYF1_C}@6;Dx*GO@kk2e>P4)#DphUuw?~ zZ;*@RY8-|$;hPM6O@g+sTA%7qq|NfN8ne{rGH4auCty|O{rn0oMMFWSw-H&WuQRNg zrsiN(N{OVH>W+II+B2!hv}shWsy@|@N~W4heAptxj2XL$&v4hDXrmoJ=JaBy*S5gS z3};rOjkIxwnxu8)I~TFI^YXlH5p><4zqTF&UQH0+DX==LCg`h6`lD$uP|DaAkc<6E z@7LGqA%A^igC71c1beFkje2epOEk6E)|;YSTm~F(ZH*V7Xu)~pLtyX1rC@;%EWOPE zpZW$u4JkB(`HDgGqTr3*D%38bAX&Axu}SGcyEXWH)d3hwKAw;fB~$Af>!yC_=&&r;nw1zUVb4Z${4BG<`}m0#~{iO z60q5(fZF`97#+@!&!}qxK40pf>6FKquc{K`nSYQNG$=fQrW&NG*Sk7^fsj+12uP8g zv4?#4BKm1}^4G3et4LL2=`ScWiHK}B9ho_7C?9EHrmYR)^UoB6S61Sxh@&S!|nX?eGUt1 zkvJRJNlGpeSWWr}jPI#7RB}$n2RApQj`yZp*b^8$Fl6OtYUmpiCGjd=vQ#9dBZ^ID_+ykTr7jyd9~G6F+NQ4 z`I{`kuB{BLwTi1-8o)t8433hs&WFz``E@P}>x371eqUWB3+T6|x*$2$;%|^mT+DSG z@){*@D)!-XE?LK|twvdsvWji7Fs0)&;b4nK&Anvdd0b`+OSQ&REX_M=##fP55UUZD z;ZLzhplZX2V-@pbZg{0y$^QTS9gE^e;a{$1Q?B=O3_LT9z1hb#Xl?^>i^h}>>hcDj zY6vyd+c`Ft+luet&XFl^?qL~d>NoY8^}JzFh8Jx0*!7!xS_bkwiVp$nHs!|GEr| zRfiYyHs$wWpN5Zt{VHkKpRWHp$tXL+;VZQ#?ZO-Th!IfK15t-QHcXdt$YQl51A zzog3>`Z<~~ZVF5gS%!o&W@$JA@u@onHpV#-G!Cl&6weP6*M1?<13yn*i_ z$64Oo6OHNeJ-U9wz?3sE7x~We=3H~f4^#;=&ZU>P(&BZ0Z-_)-+tT~UIi+@IMqZf{+Y}uut{!{*>dihRT|1 +#include +#include "nob.h" + +#define BUILD_DIR "./build/" +#define SRC_DIR "./src/" +#define OBJDIR BUILD_DIR"obj/" +#define LIB_DIR "./lib/" +#define LIB_OUT LIB_DIR"libglc.a" + +Cmd ar_cmd = {0}; + +_Bool walk_dir_func(Nob_Walk_Entry e) { + printf("Path: %s\n", e.path); + if (e.type == NOB_FILE_REGULAR) { + size_t input_len = strlen(e.path); + if (input_len > 3) { + if (strcmp(&e.path[input_len - 2], ".h") != 0) { + Cmd cmd = {0}; + String_Builder sb_out = {0}; + String_View sv = {0}; + + char *path_cpy = strdup(e.path); + + sv = sv_from_cstr(path_cpy); + + size_t l = strlen(e.path); + while (--l) { + if (e.path[l] == '/') { + sv_chop_left(&sv, l + 1); + break ; + } + } + + printf("file_name: %s\n", sv.data); + + cmd_append(&cmd, "cc", "-c", "-static"); + nob_cc_flags(&cmd); + + cmd_append(&cmd, "-o"); + sb_append_cstr(&sb_out, OBJDIR); + sb_append_cstr(&sb_out, sv.data); + cmd_append(&cmd, sb_out.items); + cmd_append(&cmd, strdup(path_cpy)); + cmd_run(&cmd); + cmd_append(&ar_cmd, strdup(sb_out.items)); + memset(sb_out.items, 0, sb_out.count); + sb_free(sb_out); + } + } + } + *e.action = NOB_WALK_CONT; + return true; +} + +int main(int argc, char **argv) { + NOB_GO_REBUILD_URSELF(argc, argv); + + if (!nob_mkdir_if_not_exists(BUILD_DIR)) { + nob_log(ERROR, "Failed to create %s: %s\n", BUILD_DIR, strerror(errno)); + return 1; + } + + if (!nob_mkdir_if_not_exists(OBJDIR)) { + nob_log(ERROR, "Failed to create %s: %s\n", OBJDIR, strerror(errno)); + return 1; + } + + const char *bin_path = BUILD_DIR "main"; + + cmd_append(&ar_cmd, "ar", "rcs", LIB_OUT); + nob_walk_dir(SRC_DIR, walk_dir_func, .post_order = true); + + cmd_run(&ar_cmd); + + nob_log(INFO, "Starting build...\n"); +} diff --git a/glc/nob.h b/glc/nob.h new file mode 100644 index 0000000..2bdb18e --- /dev/null +++ b/glc/nob.h @@ -0,0 +1,3156 @@ +/* nob - v3.2.2 - Public Domain - https://github.com/tsoding/nob.h + + This library is the next generation of the [NoBuild](https://github.com/tsoding/nobuild) idea. + + # Quick Example + + ```c + // nob.c + #define NOB_IMPLEMENTATION + #include "nob.h" + + int main(int argc, char **argv) + { + NOB_GO_REBUILD_URSELF(argc, argv); + Nob_Cmd cmd = {0}; + nob_cmd_append(&cmd, "cc", "-Wall", "-Wextra", "-o", "main", "main.c"); + if (!nob_cmd_run(&cmd)) return 1; + return 0; + } + ``` + + ```console + $ cc -o nob nob.c + $ ./nob + ``` + + The `nob` automatically rebuilds itself if `nob.c` is modified thanks to + the `NOB_GO_REBUILD_URSELF` macro (don't forget to check out how it works below) + + # Stripping off `nob_` Prefixes + + Since Pure C does not have any namespaces we prefix each name of the API with the `nob_` to avoid any + potential conflicts with any other names in your code. But sometimes it is very annoying and makes + the code noisy. Because of that you can drop the `nob_` prefix. + + ```c + // nob.c + #define NOB_IMPLEMENTATION + #include "nob.h" + + int main(int argc, char **argv) + { + GO_REBUILD_URSELF(argc, argv); + Cmd cmd = {0}; + cmd_append(&cmd, "cc", "-Wall", "-Wextra", "-o", "main", "main.c"); + if (!cmd_run(&cmd)) return 1; + return 0; + } + ``` + + If the lack of prefixes causes any problems you can disable the prefix stripping by defining + `NOB_UNSTRIP_PREFIX` feature macro before including "nob.h". + + Not all the names have strippable prefixes. All the redefinable names like `NOB_REBUILD_URSELF` + for instance will retain their prefix always. Notable exception is the nob_log() function. Stripping + away the prefix results in log() which was historically always referring to the natural logarithmic + function that is already defined in math.h. So there is no reason to strip off the prefix for nob_log(). + Another exception is nob_rename() which collides with the widely known POSIX function rename(2) if you + strip the prefix off. + + The prefixes are stripped off only on the level of the preprocessor. The names of the functions in the + compiled object file will still retain the `nob_` prefix. Keep that in mind when you FFI with nob.h + from other languages (for whatever reason). + + If only few specific names create conflicts for you, you can just #undef those names after the + `#include ` without enabling `NOB_UNSTRIP_PREFIX` since they are macros anyway. + + # Macro Interface + + All these macros are `#define`d by the user before including nob.h + + ## Flags + + Enable or disable certain aspects of nob.h + + - NOB_IMPLEMENTATION - Enable definitions of the functions. By default only declarations are included. + See https://github.com/nothings/stb/blob/f58f558c120e9b32c217290b80bad1a0729fbb2c/docs/stb_howto.txt + for more info. + - NOB_WARN_DEPRECATED - Warn about the usage of deprecated function. We rarely actually remove deprecated functions, + but if you want to know what is discouraged you may want to enable this flag. + - NOB_EXPERIMENTAL_DELETE_OLD - Experimental feature that automatically removes `nob.old` files. It's unclear how well + it works on Windows, so it's experimental for now. + - NOB_UNSTRIP_PREFIX - do not strip the `nob_` prefixes from non-redefinable names. + - NOB_NO_ECHO - do not echo the actions various nob functions are doing (like nob_cmd_run(), nob_mkdir_if_not_exists(), etc). + + ## Redefinable Macros + + Redefine default behaviors of nob.h. + + - NOBDEF - Appends additional things to function declarations. You can do something like `#define NOBDEF static inline`. + - NOB_ASSERT(condition) - Redefine which assert() nob.h shall use. + - NOB_REALLOC(oldptr, size) - Redefine which realloc() nob.h shall use. + - NOB_FREE(ptr) - Redefine which free() nob.h shall use. + - NOB_DEPRECATED(message) - Redefine how nob.h shall mark functions as deprecated. + - NOB_DA_INIT_CAP - Redefine initial capacity of Dynamic Arrays. + - NOB_TEMP_CAPACITY - Redefine the capacity of the temporary storate. + - NOB_REBUILD_URSELF(binary_path, source_path) - redefine how nob.h shall rebuild itself. + - NOB_WIN32_ERR_MSG_SIZE - Redefine the capacity of the buffer for error message on Windows. +*/ + +#ifndef NOB_H_ +#define NOB_H_ +#ifdef _WIN32 +# ifndef _CRT_SECURE_NO_WARNINGS +# define _CRT_SECURE_NO_WARNINGS (1) +# endif // _CRT_SECURE_NO_WARNINGS +#endif // _WIN32 + +#ifndef NOBDEF +/* + Goes before declarations and definitions of the nob functions. Useful to `#define NOBDEF static inline` + if your source code is a single file and you want the compiler to remove unused functions. +*/ +#define NOBDEF +#endif /* NOBDEF */ + +#ifndef NOB_ASSERT +#include +#define NOB_ASSERT assert +#endif /* NOB_ASSERT */ + +#ifndef NOB_REALLOC +#include +#define NOB_REALLOC realloc +#endif /* NOB_REALLOC */ + +#ifndef NOB_FREE +#include +#define NOB_FREE free +#endif /* NOB_FREE */ + +#ifdef NOB_WARN_DEPRECATED +# ifndef NOB_DEPRECATED +# if defined(__GNUC__) || defined(__clang__) +# define NOB_DEPRECATED(message) __attribute__((deprecated(message))) +# elif defined(_MSC_VER) +# define NOB_DEPRECATED(message) __declspec(deprecated(message)) +# else +# define NOB_DEPRECATED(...) +# endif +# endif /* NOB_DEPRECATED */ +#else +# define NOB_DEPRECATED(...) +#endif /* NOB_WARN_DEPRECATED */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +# define WIN32_LEAN_AND_MEAN +# define _WINUSER_ +# define _WINGDI_ +# define _IMM_ +# define _WINCON_ +# include +# include +# include +# include +#else +# ifdef __APPLE__ +# include +# endif +# ifdef __FreeBSD__ +# include +# endif +# include +# include +# include +# include +# include +# include +#endif + +#ifdef __HAIKU__ +# include +#endif + +#ifdef _WIN32 +# define NOB_LINE_END "\r\n" +#else +# define NOB_LINE_END "\n" +#endif + +#if defined(__GNUC__) || defined(__clang__) +// https://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html +# ifdef __MINGW_PRINTF_FORMAT +# define NOB_PRINTF_FORMAT(STRING_INDEX, FIRST_TO_CHECK) __attribute__ ((format (__MINGW_PRINTF_FORMAT, STRING_INDEX, FIRST_TO_CHECK))) +# else +# define NOB_PRINTF_FORMAT(STRING_INDEX, FIRST_TO_CHECK) __attribute__ ((format (printf, STRING_INDEX, FIRST_TO_CHECK))) +# endif // __MINGW_PRINTF_FORMAT +#else +// TODO: implement NOB_PRINTF_FORMAT for MSVC +# define NOB_PRINTF_FORMAT(STRING_INDEX, FIRST_TO_CHECK) +#endif + +#define NOB_UNUSED(value) (void)(value) +#define NOB_TODO(message) do { fprintf(stderr, "%s:%d: TODO: %s\n", __FILE__, __LINE__, message); abort(); } while(0) +#define NOB_UNREACHABLE(message) do { fprintf(stderr, "%s:%d: UNREACHABLE: %s\n", __FILE__, __LINE__, message); abort(); } while(0) + +#define NOB_ARRAY_LEN(array) (sizeof(array)/sizeof(array[0])) +#define NOB_ARRAY_GET(array, index) \ + (NOB_ASSERT((size_t)index < NOB_ARRAY_LEN(array)), array[(size_t)index]) + +typedef enum { + NOB_INFO, + NOB_WARNING, + NOB_ERROR, + NOB_NO_LOGS, +} Nob_Log_Level; + +// Any messages with the level below nob_minimal_log_level are going to be suppressed. +extern Nob_Log_Level nob_minimal_log_level; + +typedef void (nob_log_handler)(Nob_Log_Level level, const char *fmt, va_list args); + +NOBDEF void nob_set_log_handler(nob_log_handler *handler); +NOBDEF nob_log_handler *nob_get_log_handler(void); + +NOBDEF nob_log_handler nob_default_log_handler; +NOBDEF nob_log_handler nob_cancer_log_handler; + +NOBDEF void nob_log(Nob_Log_Level level, const char *fmt, ...) NOB_PRINTF_FORMAT(2, 3); + +// It is an equivalent of shift command from bash (do `help shift` in bash). It basically +// pops an element from the beginning of a sized array. +#define nob_shift(xs, xs_sz) (NOB_ASSERT((xs_sz) > 0), (xs_sz)--, *(xs)++) +// NOTE: nob_shift_args() is an alias for an old variant of nob_shift that only worked with +// the command line arguments passed to the main() function. nob_shift() is more generic. +// So nob_shift_args() is semi-deprecated, but I don't see much reason to urgently +// remove it. This alias does not hurt anybody. +#define nob_shift_args(argc, argv) nob_shift(*argv, *argc) + +typedef struct { + const char **items; + size_t count; + size_t capacity; +} Nob_File_Paths; + +typedef enum { + NOB_FILE_REGULAR = 0, + NOB_FILE_DIRECTORY, + NOB_FILE_SYMLINK, + NOB_FILE_OTHER, +} Nob_File_Type; + +NOBDEF bool nob_mkdir_if_not_exists(const char *path); +NOBDEF bool nob_copy_file(const char *src_path, const char *dst_path); +NOBDEF bool nob_copy_directory_recursively(const char *src_path, const char *dst_path); +NOBDEF bool nob_read_entire_dir(const char *parent, Nob_File_Paths *children); +NOBDEF bool nob_write_entire_file(const char *path, const void *data, size_t size); +NOBDEF Nob_File_Type nob_get_file_type(const char *path); +NOBDEF bool nob_delete_file(const char *path); + +typedef enum { + // If the current file is a directory go inside of it. + NOB_WALK_CONT, + // If the current file is a directory do not go inside of it. + NOB_WALK_SKIP, + // Stop the recursive traversal process entirely. + NOB_WALK_STOP, +} Nob_Walk_Action; + +typedef struct { + // The path to the visited file + const char *path; + // The type of the visited file + Nob_File_Type type; + // How nested we currently are in the directory tree + size_t level; + // User data supplied in Nob_Walk_Dir_Opt.data + void *data; + // The action nob_walk_dir_opt() must perform after the Nob_Walk_Func has returned. + // Default is NOB_WALK_CONT. + Nob_Walk_Action *action; +} Nob_Walk_Entry; + +// A function that is called by nob_walk_dir_opt() on each visited file. +// Nob_Walk_Entry provides the details about the visited file and also +// expects you to modify the `action` in case you want to alter the +// usual behavior of the recursive walking algorithm. +// +// If the function returns `false`, an error is assumed which causes the entire +// recursive walking process to exit and nob_walk_dir_opt() return `false`. +typedef bool (*Nob_Walk_Func)(Nob_Walk_Entry entry); + +typedef struct { + // User data passed to Nob_Walk_Entry.data + void *data; + // Walk the directory in post-order visiting the leaf files first. + bool post_order; +} Nob_Walk_Dir_Opt; + +NOBDEF bool nob_walk_dir_opt(const char *root, Nob_Walk_Func func, Nob_Walk_Dir_Opt); + +#define nob_walk_dir(root, func, ...) nob_walk_dir_opt((root), (func), (Nob_Walk_Dir_Opt){__VA_ARGS__}) + +typedef struct { + char *name; + bool error; + + struct { +#ifdef _WIN32 + WIN32_FIND_DATA win32_data; + HANDLE win32_hFind; + bool win32_init; +#else + DIR *posix_dir; + struct dirent *posix_ent; +#endif // _WIN32 + } nob__private; // TODO: we don't have solid conventions regarding private struct fields +} Nob_Dir_Entry; + +// nob_dir_entry_open() - open the directory entry for iteration. +// RETURN: +// true - Sucess. +// false - Error. I will be logged automatically with nob_log(). +NOBDEF bool nob_dir_entry_open(const char *dir_path, Nob_Dir_Entry *dir); +// nob_dir_entry_next() - acquire the next file in the directory. +// RETURN: +// true - Successfully acquired the next file. +// false - Either failure or no more files to iterate. In case of failure dir->error is set to true. +NOBDEF bool nob_dir_entry_next(Nob_Dir_Entry *dir); +NOBDEF void nob_dir_entry_close(Nob_Dir_Entry dir); + +#define nob_return_defer(value) do { result = (value); goto defer; } while(0) + +// Initial capacity of a dynamic array +#ifndef NOB_DA_INIT_CAP +#define NOB_DA_INIT_CAP 256 +#endif + +#ifdef __cplusplus +#define NOB_DECLTYPE_CAST(T) (decltype(T)) +#else +#define NOB_DECLTYPE_CAST(T) +#endif // __cplusplus + +#define nob_da_reserve(da, expected_capacity) \ + do { \ + if ((expected_capacity) > (da)->capacity) { \ + if ((da)->capacity == 0) { \ + (da)->capacity = NOB_DA_INIT_CAP; \ + } \ + while ((expected_capacity) > (da)->capacity) { \ + (da)->capacity *= 2; \ + } \ + (da)->items = NOB_DECLTYPE_CAST((da)->items)NOB_REALLOC((da)->items, (da)->capacity * sizeof(*(da)->items)); \ + NOB_ASSERT((da)->items != NULL && "Buy more RAM lol"); \ + } \ + } while (0) + +// Append an item to a dynamic array +#define nob_da_append(da, item) \ + do { \ + nob_da_reserve((da), (da)->count + 1); \ + (da)->items[(da)->count++] = (item); \ + } while (0) + +#define nob_da_free(da) NOB_FREE((da).items) + +// Append several items to a dynamic array +#define nob_da_append_many(da, new_items, new_items_count) \ + do { \ + nob_da_reserve((da), (da)->count + (new_items_count)); \ + memcpy((da)->items + (da)->count, (new_items), (new_items_count)*sizeof(*(da)->items)); \ + (da)->count += (new_items_count); \ + } while (0) + +#define nob_da_resize(da, new_size) \ + do { \ + nob_da_reserve((da), new_size); \ + (da)->count = (new_size); \ + } while (0) + +#define nob_da_last(da) (da)->items[(NOB_ASSERT((da)->count > 0), (da)->count-1)] +#define nob_da_remove_unordered(da, i) \ + do { \ + size_t j = (i); \ + NOB_ASSERT(j < (da)->count); \ + (da)->items[j] = (da)->items[--(da)->count]; \ + } while(0) + +// Foreach over Dynamic Arrays. Example: +// ```c +// typedef struct { +// int *items; +// size_t count; +// size_t capacity; +// } Numbers; +// +// Numbers xs = {0}; +// +// nob_da_append(&xs, 69); +// nob_da_append(&xs, 420); +// nob_da_append(&xs, 1337); +// +// nob_da_foreach(int, x, &xs) { +// // `x` here is a pointer to the current element. You can get its index by taking a difference +// // between `x` and the start of the array which is `x.items`. +// size_t index = x - xs.items; +// nob_log(INFO, "%zu: %d", index, *x); +// } +// ``` +#define nob_da_foreach(Type, it, da) for (Type *it = (da)->items; it < (da)->items + (da)->count; ++it) + +// The Fixed Array append. `items` fields must be a fixed size array. Its size determines the capacity. +#define nob_fa_append(fa, item) \ + (NOB_ASSERT((fa)->count < NOB_ARRAY_LEN((fa)->items)), \ + (fa)->items[(fa)->count++] = (item)) + +typedef struct { + char *items; + size_t count; + size_t capacity; +} Nob_String_Builder; + +#define nob_swap(T, a, b) do { T t = a; a = b; b = t; } while (0) + +NOBDEF bool nob_read_entire_file(const char *path, Nob_String_Builder *sb); +NOBDEF int nob_sb_appendf(Nob_String_Builder *sb, const char *fmt, ...) NOB_PRINTF_FORMAT(2, 3); +// Pads the String_Builder (sb) to the desired word size boundary with 0s. +// Imagine we have sb that contains 5 `a`-s: +// +// aaaa|a +// +// If we pad align it by size 4 it will look like this: +// +// aaaa|a000| <- padded with 0s to the next size 4 boundary +// +// Useful when you are building some sort of binary format using String_Builder. +NOBDEF void nob_sb_pad_align(Nob_String_Builder *sb, size_t size); + +// Append a sized buffer to a string builder +#define nob_sb_append_buf(sb, buf, size) nob_da_append_many(sb, buf, size) + +// Append a NULL-terminated string to a string builder +#define nob_sb_append_cstr(sb, cstr) \ + do { \ + const char *s = (cstr); \ + size_t n = strlen(s); \ + nob_da_append_many(sb, s, n); \ + } while (0) + +// Append a single NULL character at the end of a string builder. So then you can +// use it a NULL-terminated C string +#define nob_sb_append_null(sb) nob_da_append_many(sb, "", 1) + +#define nob_sb_append nob_da_append + +// Free the memory allocated by a string builder +#define nob_sb_free(sb) NOB_FREE((sb).items) + +// Process handle +#ifdef _WIN32 +typedef HANDLE Nob_Proc; +#define NOB_INVALID_PROC INVALID_HANDLE_VALUE +typedef HANDLE Nob_Fd; +#define NOB_INVALID_FD INVALID_HANDLE_VALUE +#else +typedef int Nob_Proc; +#define NOB_INVALID_PROC (-1) +typedef int Nob_Fd; +#define NOB_INVALID_FD (-1) +#endif // _WIN32 + +NOBDEF Nob_Fd nob_fd_open_for_read(const char *path); +NOBDEF Nob_Fd nob_fd_open_for_write(const char *path); +NOBDEF void nob_fd_close(Nob_Fd fd); + +typedef struct { + Nob_Fd read; + Nob_Fd write; +} Nob_Pipe; + +NOBDEF bool nob_pipe_create(Nob_Pipe *pp); + +typedef struct { + Nob_Proc *items; + size_t count; + size_t capacity; +} Nob_Procs; + +// Wait until the process has finished +NOBDEF bool nob_proc_wait(Nob_Proc proc); + +// Wait until all the processes have finished +NOBDEF bool nob_procs_wait(Nob_Procs procs); + +// Wait until all the processes have finished and empty the procs array. +NOBDEF bool nob_procs_flush(Nob_Procs *procs); + +// Alias to nob_procs_flush +NOB_DEPRECATED("Use `nob_procs_flush(&procs)` instead.") +NOBDEF bool nob_procs_wait_and_reset(Nob_Procs *procs); + +// Append a new process to procs array and if procs.count reaches max_procs_count call nob_procs_wait_and_reset() on it +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, .async = &procs, .max_procs = )` instead") +NOBDEF bool nob_procs_append_with_flush(Nob_Procs *procs, Nob_Proc proc, size_t max_procs_count); + +// A command - the main workhorse of Nob. Nob is all about building commands and running them +typedef struct { + const char **items; + size_t count; + size_t capacity; +} Nob_Cmd; + +// Options for nob_cmd_run_opt() function. +typedef struct { + // Run the command asynchronously appending its Nob_Proc to the provided Nob_Procs array + Nob_Procs *async; + // Maximum processes allowed in the .async list. Zero implies nob_nprocs(). + size_t max_procs; + // Do not reset the command after execution. + bool dont_reset; + // Redirect stdin to file + const char *stdin_path; + // Redirect stdout to file + const char *stdout_path; + // Redirect stderr to file + const char *stderr_path; +} Nob_Cmd_Opt; + +// Run the command with options. +NOBDEF bool nob_cmd_run_opt(Nob_Cmd *cmd, Nob_Cmd_Opt opt); + +// Command Chains (in Shell Scripting they are know as Pipes) +// +// Usage: +// ```c +// Nob_Cmd cmd = {0}; +// Nob_Chain chain = {0}; +// if (!nob_chain_begin(&chain)) return 1; +// { +// nob_cmd_append(&cmd, "echo", "Hello, World"); +// if (!nob_chain_cmd(&chain, &cmd)) return 1; +// +// nob_cmd_append(&cmd, "rev"); +// if (!nob_chain_cmd(&chain, &cmd)) return 1; +// +// nob_cmd_append(&cmd, "xxd"); +// if (!nob_chain_cmd(&chain, &cmd)) return 1; +// } +// if (!nob_chain_end(&chain)) return 1; +// ``` +// +// The above is equivalent to a shell command: +// +// ```sh +// echo "Hello, World" | rev | xxd +// ``` +// +// After nob_chain_end() the Nob_Chain struct can be reused again. +// +// The fields of the Nob_Chain struct contain the intermediate state of the Command +// Chain that is being built with the nob_chain_cmd() calls and generally have no +// particular use for the user. +// +// The only memory dynamically allocated within Nob_Chain belongs to the .cmd field. +// So if you want to clean it all up you can just do free(chain.cmd.items). +typedef struct { + // The file descriptor of the output of the previous command. Will be used as the input for the next command. + Nob_Fd fdin; + // The command from the last nob_chain_cmd() call. + Nob_Cmd cmd; + // The value of the optional .err2out parameter from the last nob_chain_cmd() call. + bool err2out; +} Nob_Chain; + +typedef struct { + const char *stdin_path; +} Nob_Chain_Begin_Opt; +#define nob_chain_begin(chain, ...) nob_chain_begin_opt((chain), (Nob_Chain_Begin_Opt) { __VA_ARGS__ }) +NOBDEF bool nob_chain_begin_opt(Nob_Chain *chain, Nob_Chain_Begin_Opt opt); + +typedef struct { + bool err2out; + bool dont_reset; +} Nob_Chain_Cmd_Opt; +#define nob_chain_cmd(chain, cmd, ...) nob_chain_cmd_opt((chain), (cmd), (Nob_Chain_Cmd_Opt) { __VA_ARGS__ }) +NOBDEF bool nob_chain_cmd_opt(Nob_Chain *chain, Nob_Cmd *cmd, Nob_Chain_Cmd_Opt opt); + +typedef struct { + Nob_Procs *async; + size_t max_procs; + const char *stdout_path; + const char *stderr_path; +} Nob_Chain_End_Opt; +#define nob_chain_end(chain, ...) nob_chain_end_opt((chain), (Nob_Chain_End_Opt) { __VA_ARGS__ }) +NOBDEF bool nob_chain_end_opt(Nob_Chain *chain, Nob_Chain_End_Opt opt); + +// Get amount of processors on the machine. +NOBDEF int nob_nprocs(void); + +#define NOB_NANOS_PER_SEC (1000*1000*1000) + +// The maximum time span representable is 584 years. +NOBDEF uint64_t nob_nanos_since_unspecified_epoch(void); + +// Same as nob_cmd_run_opt but using cool variadic macro to set the default options. +// See https://x.com/vkrajacic/status/1749816169736073295 for more info on how to use such macros. +#define nob_cmd_run(cmd, ...) nob_cmd_run_opt((cmd), (Nob_Cmd_Opt){__VA_ARGS__}) + +// DEPRECATED: +// +// You were suppose to use this structure like this: +// +// ```c +// Nob_Fd fdin = nob_fd_open_for_read("input.txt"); +// if (fdin == NOB_INVALID_FD) fail(); +// Nob_Fd fdout = nob_fd_open_for_write("output.txt"); +// if (fdout == NOB_INVALID_FD) fail(); +// Nob_Cmd cmd = {0}; +// nob_cmd_append(&cmd, "cat"); +// if (!nob_cmd_run_sync_redirect_and_reset(&cmd, (Nob_Cmd_Redirect) { +// .fdin = &fdin, +// .fdout = &fdout +// })) fail(); +// ``` +// +// But these days you should do: +// +// ```c +// Nob_Cmd cmd = {0}; +// nob_cmd_append(&cmd, "cat"); +// if (!nob_cmd_run(&cmd, .stdin_path = "input.txt", .stdout_path = "output.txt")) fail(); +// ``` +typedef struct { + Nob_Fd *fdin; + Nob_Fd *fdout; + Nob_Fd *fderr; +} Nob_Cmd_Redirect; + +// Render a string representation of a command into a string builder. Keep in mind the the +// string builder is not NULL-terminated by default. Use nob_sb_append_null if you plan to +// use it as a C string. +NOBDEF void nob_cmd_render(Nob_Cmd cmd, Nob_String_Builder *render); + +NOBDEF void nob__cmd_append(Nob_Cmd *cmd, size_t n, ...); +#define nob_cmd_append(cmd, ...) \ + nob__cmd_append(cmd, (sizeof((const char*[]){__VA_ARGS__})/sizeof(const char*)), __VA_ARGS__) + +// TODO: nob_cmd_extend() evaluates other_cmd twice +// It can be fixed by turning nob_cmd_extend() call into a statement. +// But that may break backward compatibility of the API. +#define nob_cmd_extend(cmd, other_cmd) \ + nob_da_append_many(cmd, (other_cmd)->items, (other_cmd)->count) + +// Free all the memory allocated by command arguments +#define nob_cmd_free(cmd) NOB_FREE(cmd.items) + +// Run command asynchronously +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, .async = &procs, .dont_reset = true)`.") +NOBDEF Nob_Proc nob_cmd_run_async(Nob_Cmd cmd); + +// nob_cmd_run_async_and_reset() is just like nob_cmd_run_async() except it also resets cmd.count to 0 +// so the Nob_Cmd instance can be seamlessly used several times in a row +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, .async = &procs)` intead.") +NOBDEF Nob_Proc nob_cmd_run_async_and_reset(Nob_Cmd *cmd); + +// Run redirected command asynchronously +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, " + ".async = &procs, " + ".stdin_path = \"path/to/stdin\", " + ".stdout_path = \"path/to/stdout\", " + ".stderr_path = \"path/to/stderr\", " + ".dont_reset = true" + ")` instead.") +NOBDEF Nob_Proc nob_cmd_run_async_redirect(Nob_Cmd cmd, Nob_Cmd_Redirect redirect); + +// Run redirected command asynchronously and set cmd.count to 0 and close all the opened files +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, " + ".async = &procs, " + ".stdin_path = \"path/to/stdin\", " + ".stdout_path = \"path/to/stdout\", " + ".stderr_path = \"path/to/stderr\")` instead.") +NOBDEF Nob_Proc nob_cmd_run_async_redirect_and_reset(Nob_Cmd *cmd, Nob_Cmd_Redirect redirect); + +// Run command synchronously +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, .dont_reset = true)` instead.") +NOBDEF bool nob_cmd_run_sync(Nob_Cmd cmd); + +// NOTE: nob_cmd_run_sync_and_reset() is just like nob_cmd_run_sync() except it also resets cmd.count to 0 +// so the Nob_Cmd instance can be seamlessly used several times in a row +NOB_DEPRECATED("Use `nob_cmd_run(&cmd)` instead.") +NOBDEF bool nob_cmd_run_sync_and_reset(Nob_Cmd *cmd); + +// Run redirected command synchronously +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, " + ".stdin_path = \"path/to/stdin\", " + ".stdout_path = \"path/to/stdout\", " + ".stderr_path = \"path/to/stderr\", " + ".dont_reset = true" + ")` instead.") +NOBDEF bool nob_cmd_run_sync_redirect(Nob_Cmd cmd, Nob_Cmd_Redirect redirect); + +// Run redirected command synchronously and set cmd.count to 0 and close all the opened files +NOB_DEPRECATED("Use `nob_cmd_run(&cmd, " + ".stdin_path = \"path/to/stdin\", " + ".stdout_path = \"path/to/stdout\", " + ".stderr_path = \"path/to/stderr\")` instead.") +NOBDEF bool nob_cmd_run_sync_redirect_and_reset(Nob_Cmd *cmd, Nob_Cmd_Redirect redirect); + +#ifndef NOB_TEMP_CAPACITY +#define NOB_TEMP_CAPACITY (8*1024*1024) +#endif // NOB_TEMP_CAPACITY +NOBDEF char *nob_temp_strdup(const char *cstr); +NOBDEF char *nob_temp_strndup(const char *cstr, size_t size); +NOBDEF void *nob_temp_alloc(size_t size); +NOBDEF char *nob_temp_sprintf(const char *format, ...) NOB_PRINTF_FORMAT(1, 2); +NOBDEF char *nob_temp_vsprintf(const char *format, va_list ap); +// nob_temp_reset() - Resets the entire temporary storage to 0. +// +// It is generally not recommended to call this function ever. What you usually want to do is let's say you have a loop, +// that allocates some temporary objects and cleans them up at the end of each iteration. You should use +// nob_temp_save() and nob_temp_rewind() to organize such loop like this: +// +// ```c +// char *message = nob_temp_sprintf("This message is still valid after the loop below"); +// while (!quit) { +// size_t mark = nob_temp_save(); +// nob_temp_alloc(69); +// nob_temp_alloc(420); +// nob_temp_alloc(1337); +// nob_temp_rewind(mark); +// } +// printf("%s\n", message); +// ``` +// +// That way all the temporary allocations created before the loop are still valid even after the loop. +// Such save/rewind blocks define lifetime boundaries of the temporary objects which also could be nested. +// This turns the temporary storage into kind of a second stack with a more manual management. +NOBDEF void nob_temp_reset(void); +NOBDEF size_t nob_temp_save(void); +NOBDEF void nob_temp_rewind(size_t checkpoint); + +// Given any path returns the last part of that path. +// "/path/to/a/file.c" -> "file.c"; "/path/to/a/directory" -> "directory" +NOBDEF const char *nob_path_name(const char *path); +NOBDEF bool nob_rename(const char *old_path, const char *new_path); +NOBDEF int nob_needs_rebuild(const char *output_path, const char **input_paths, size_t input_paths_count); +NOBDEF int nob_needs_rebuild1(const char *output_path, const char *input_path); +NOBDEF int nob_file_exists(const char *file_path); +NOBDEF const char *nob_get_current_dir_temp(void); +NOBDEF bool nob_set_current_dir(const char *path); +// Returns you the directory part of the path allocated on the temporary storage. +NOBDEF char *nob_temp_dir_name(const char *path); +NOBDEF char *nob_temp_file_name(const char *path); +NOBDEF char *nob_temp_file_ext(const char *path); +NOBDEF char *nob_temp_running_executable_path(void); + +// TODO: we should probably document somewhere all the compilers we support + +// The nob_cc_* macros try to abstract away the specific compiler. +// They are verify basic and not particularly flexible, but you can redefine them if you need to +// or not use them at all and create your own abstraction on top of Nob_Cmd. + +#ifndef nob_cc +# if _WIN32 +# if defined(__GNUC__) +# define nob_cc(cmd) nob_cmd_append(cmd, "cc") +# elif defined(__clang__) +# define nob_cc(cmd) nob_cmd_append(cmd, "clang") +# elif defined(_MSC_VER) +# define nob_cc(cmd) nob_cmd_append(cmd, "cl.exe") +# elif defined(__TINYC__) +# define nob_cc(cmd) nob_cmd_append(cmd, "tcc") +# endif +# else +# define nob_cc(cmd) nob_cmd_append(cmd, "cc") +# endif +#endif // nob_cc + +#ifndef nob_cc_flags +# if defined(_MSC_VER) && !defined(__clang__) +# define nob_cc_flags(cmd) nob_cmd_append(cmd, "/W4", "/nologo", "/D_CRT_SECURE_NO_WARNINGS") +# else +# define nob_cc_flags(cmd) nob_cmd_append(cmd, "-Wall", "-Wextra") +# endif +#endif // nob_cc_flags + +#ifndef nob_cc_output +# if defined(_MSC_VER) && !defined(__clang__) +# define nob_cc_output(cmd, output_path) nob_cmd_append(cmd, nob_temp_sprintf("/Fe:%s", (output_path)), nob_temp_sprintf("/Fo:%s", (output_path))) +# else +# define nob_cc_output(cmd, output_path) nob_cmd_append(cmd, "-o", (output_path)) +# endif +#endif // nob_cc_output + +#ifndef nob_cc_inputs +# define nob_cc_inputs(cmd, ...) nob_cmd_append(cmd, __VA_ARGS__) +#endif // nob_cc_inputs + +// TODO: add MinGW support for Go Rebuild Urself™ Technology and all the nob_cc_* macros above +// Musializer contributors came up with a pretty interesting idea of an optional prefix macro which could be useful for +// MinGW support: +// https://github.com/tsoding/musializer/blob/b7578cc76b9ecb573d239acc9ccf5a04d3aba2c9/src_build/nob_win64_mingw.c#L3-L9 +// TODO: Maybe instead NOB_REBUILD_URSELF macro, the Go Rebuild Urself™ Technology should use the +// user defined nob_cc_* macros instead? +#ifndef NOB_REBUILD_URSELF +# if defined(_WIN32) +# if defined(__clang__) +# if defined(__cplusplus) +# define NOB_REBUILD_URSELF(binary_path, source_path) "clang", "-x", "c++", "-o", binary_path, source_path +# else +# define NOB_REBUILD_URSELF(binary_path, source_path) "clang", "-x", "c", "-o", binary_path, source_path +# endif +# elif defined(__GNUC__) +# if defined(__cplusplus) +# define NOB_REBUILD_URSELF(binary_path, source_path) "gcc", "-x", "c++", "-o", binary_path, source_path +# else +# define NOB_REBUILD_URSELF(binary_path, source_path) "gcc", "-x", "c", "-o", binary_path, source_path +# endif +# elif defined(_MSC_VER) +# define NOB_REBUILD_URSELF(binary_path, source_path) "cl.exe", nob_temp_sprintf("/Fe:%s", (binary_path)), source_path +# elif defined(__TINYC__) +# define NOB_REBUILD_URSELF(binary_path, source_path) "tcc", "-o", binary_path, source_path +# endif +# else +# if defined(__cplusplus) +# define NOB_REBUILD_URSELF(binary_path, source_path) "cc", "-x", "c++", "-o", binary_path, source_path +# else +# define NOB_REBUILD_URSELF(binary_path, source_path) "cc", "-x", "c", "-o", binary_path, source_path +# endif +# endif +#endif + +// Go Rebuild Urself™ Technology +// +// How to use it: +// int main(int argc, char** argv) { +// NOB_GO_REBUILD_URSELF(argc, argv); +// // actual work +// return 0; +// } +// +// After you added this macro every time you run ./nob it will detect +// that you modified its original source code and will try to rebuild itself +// before doing any actual work. So you only need to bootstrap your build system +// once. +// +// The modification is detected by comparing the last modified times of the executable +// and its source code. The same way the make utility usually does it. +// +// The rebuilding is done by using the NOB_REBUILD_URSELF macro which you can redefine +// if you need a special way of bootstraping your build system. (which I personally +// do not recommend since the whole idea of NoBuild is to keep the process of bootstrapping +// as simple as possible and doing all of the actual work inside of ./nob) +// +NOBDEF void nob__go_rebuild_urself(int argc, char **argv, const char *source_path, ...); +#define NOB_GO_REBUILD_URSELF(argc, argv) nob__go_rebuild_urself(argc, argv, __FILE__, NULL) +// Sometimes your nob.c includes additional files, so you want the Go Rebuild Urself™ Technology to check +// if they also were modified and rebuild nob.c accordingly. For that we have NOB_GO_REBUILD_URSELF_PLUS(): +// ```c +// #define NOB_IMPLEMENTATION +// #include "nob.h" +// +// #include "foo.c" +// #include "bar.c" +// +// int main(int argc, char **argv) +// { +// NOB_GO_REBUILD_URSELF_PLUS(argc, argv, "foo.c", "bar.c"); +// // ... +// return 0; +// } +#define NOB_GO_REBUILD_URSELF_PLUS(argc, argv, ...) nob__go_rebuild_urself(argc, argv, __FILE__, __VA_ARGS__, NULL); + +typedef struct { + size_t count; + const char *data; +} Nob_String_View; + +NOBDEF const char *nob_temp_sv_to_cstr(Nob_String_View sv); + +NOBDEF Nob_String_View nob_sv_chop_by_delim(Nob_String_View *sv, char delim); +NOBDEF Nob_String_View nob_sv_chop_left(Nob_String_View *sv, size_t n); +NOBDEF Nob_String_View nob_sv_trim(Nob_String_View sv); +NOBDEF Nob_String_View nob_sv_trim_left(Nob_String_View sv); +NOBDEF Nob_String_View nob_sv_trim_right(Nob_String_View sv); +NOBDEF bool nob_sv_eq(Nob_String_View a, Nob_String_View b); +NOBDEF bool nob_sv_end_with(Nob_String_View sv, const char *cstr); +NOBDEF bool nob_sv_starts_with(Nob_String_View sv, Nob_String_View expected_prefix); +NOBDEF Nob_String_View nob_sv_from_cstr(const char *cstr); +NOBDEF Nob_String_View nob_sv_from_parts(const char *data, size_t count); +// nob_sb_to_sv() enables you to just view Nob_String_Builder as Nob_String_View +#define nob_sb_to_sv(sb) nob_sv_from_parts((sb).items, (sb).count) + +// printf macros for String_View +#ifndef SV_Fmt +#define SV_Fmt "%.*s" +#endif // SV_Fmt +#ifndef SV_Arg +#define SV_Arg(sv) (int) (sv).count, (sv).data +#endif // SV_Arg +// USAGE: +// String_View name = ...; +// printf("Name: "SV_Fmt"\n", SV_Arg(name)); + +#ifdef _WIN32 + +NOBDEF char *nob_win32_error_message(DWORD err); + +#endif // _WIN32 + +#endif // NOB_H_ + +#ifdef NOB_IMPLEMENTATION + +// This is like nob_proc_wait() but waits asynchronously. Depending on the platform ms means different thing. +// On Windows it means timeout. On POSIX it means for how long to sleep after checking if the process exited, +// so to not peg the core too much. Since this API is kinda of weird, the function is private for now. +static int nob__proc_wait_async(Nob_Proc proc, int ms); + +// Starts the process for the command. Its main purpose is to be the base for nob_cmd_run() and nob_cmd_run_opt(). +static Nob_Proc nob__cmd_start_process(Nob_Cmd cmd, Nob_Fd *fdin, Nob_Fd *fdout, Nob_Fd *fderr); + +// Any messages with the level below nob_minimal_log_level are going to be suppressed. +Nob_Log_Level nob_minimal_log_level = NOB_INFO; + +NOBDEF void nob__cmd_append(Nob_Cmd *cmd, size_t n, ...) +{ + va_list args; + va_start(args, n); + for (size_t i = 0; i < n; ++i) { + const char *arg = va_arg(args, const char *); + nob_da_append(cmd, arg); + } + va_end(args); +} + +#ifdef _WIN32 + +// Base on https://stackoverflow.com/a/75644008 +// > .NET Core uses 4096 * sizeof(WCHAR) buffer on stack for FormatMessageW call. And...thats it. +// > +// > https://github.com/dotnet/runtime/blob/3b63eb1346f1ddbc921374a5108d025662fb5ffd/src/coreclr/utilcode/posterror.cpp#L264-L265 +#ifndef NOB_WIN32_ERR_MSG_SIZE +#define NOB_WIN32_ERR_MSG_SIZE (4 * 1024) +#endif // NOB_WIN32_ERR_MSG_SIZE + +NOBDEF char *nob_win32_error_message(DWORD err) { + static char win32ErrMsg[NOB_WIN32_ERR_MSG_SIZE] = {0}; + DWORD errMsgSize = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, LANG_USER_DEFAULT, win32ErrMsg, + NOB_WIN32_ERR_MSG_SIZE, NULL); + + if (errMsgSize == 0) { + if (GetLastError() != ERROR_MR_MID_NOT_FOUND) { + if (sprintf(win32ErrMsg, "Could not get error message for 0x%lX", err) > 0) { + return (char *)&win32ErrMsg; + } else { + return NULL; + } + } else { + if (sprintf(win32ErrMsg, "Invalid Windows Error code (0x%lX)", err) > 0) { + return (char *)&win32ErrMsg; + } else { + return NULL; + } + } + } + + while (errMsgSize > 1 && isspace(win32ErrMsg[errMsgSize - 1])) { + win32ErrMsg[--errMsgSize] = '\0'; + } + + return win32ErrMsg; +} + +#endif // _WIN32 + +// The implementation idea is stolen from https://github.com/zhiayang/nabs +NOBDEF void nob__go_rebuild_urself(int argc, char **argv, const char *source_path, ...) +{ + const char *binary_path = nob_shift(argv, argc); +#ifdef _WIN32 + // On Windows executables almost always invoked without extension, so + // it's ./nob, not ./nob.exe. For renaming the extension is a must. + if (!nob_sv_end_with(nob_sv_from_cstr(binary_path), ".exe")) { + binary_path = nob_temp_sprintf("%s.exe", binary_path); + } +#endif + + Nob_File_Paths source_paths = {0}; + nob_da_append(&source_paths, source_path); + va_list args; + va_start(args, source_path); + for (;;) { + const char *path = va_arg(args, const char*); + if (path == NULL) break; + nob_da_append(&source_paths, path); + } + va_end(args); + + int rebuild_is_needed = nob_needs_rebuild(binary_path, source_paths.items, source_paths.count); + if (rebuild_is_needed < 0) exit(1); // error + if (!rebuild_is_needed) { // no rebuild is needed + NOB_FREE(source_paths.items); + return; + } + + Nob_Cmd cmd = {0}; + + const char *old_binary_path = nob_temp_sprintf("%s.old", binary_path); + + if (!nob_rename(binary_path, old_binary_path)) exit(1); + nob_cmd_append(&cmd, NOB_REBUILD_URSELF(binary_path, source_path)); + Nob_Cmd_Opt opt = {0}; + if (!nob_cmd_run_opt(&cmd, opt)) { + nob_rename(old_binary_path, binary_path); + exit(1); + } +#ifdef NOB_EXPERIMENTAL_DELETE_OLD + // TODO: this is an experimental behavior behind a compilation flag. + // Once it is confirmed that it does not cause much problems on both POSIX and Windows + // we may turn it on by default. + nob_delete_file(old_binary_path); +#endif // NOB_EXPERIMENTAL_DELETE_OLD + + nob_cmd_append(&cmd, binary_path); + nob_da_append_many(&cmd, argv, argc); + if (!nob_cmd_run_opt(&cmd, opt)) exit(1); + exit(0); +} + +static size_t nob_temp_size = 0; +static char nob_temp[NOB_TEMP_CAPACITY] = {0}; + +NOBDEF bool nob_mkdir_if_not_exists(const char *path) +{ +#ifdef _WIN32 + int result = _mkdir(path); +#else + int result = mkdir(path, 0755); +#endif + if (result < 0) { + if (errno == EEXIST) { +#ifndef NOB_NO_ECHO + nob_log(NOB_INFO, "directory `%s` already exists", path); +#endif // NOB_NO_ECHO + return true; + } + nob_log(NOB_ERROR, "could not create directory `%s`: %s", path, strerror(errno)); + return false; + } + +#ifndef NOB_NO_ECHO + nob_log(NOB_INFO, "created directory `%s`", path); +#endif // NOB_NO_ECHO + return true; +} + +NOBDEF bool nob_copy_file(const char *src_path, const char *dst_path) +{ +#ifndef NOB_NO_ECHO + nob_log(NOB_INFO, "copying %s -> %s", src_path, dst_path); +#endif // NOB_NO_ECHO +#ifdef _WIN32 + if (!CopyFile(src_path, dst_path, FALSE)) { + nob_log(NOB_ERROR, "Could not copy file: %s", nob_win32_error_message(GetLastError())); + return false; + } + return true; +#else + int src_fd = -1; + int dst_fd = -1; + size_t buf_size = 32*1024; + char *buf = (char*)NOB_REALLOC(NULL, buf_size); + NOB_ASSERT(buf != NULL && "Buy more RAM lol!!"); + bool result = true; + + src_fd = open(src_path, O_RDONLY); + if (src_fd < 0) { + nob_log(NOB_ERROR, "Could not open file %s: %s", src_path, strerror(errno)); + nob_return_defer(false); + } + + struct stat src_stat; + if (fstat(src_fd, &src_stat) < 0) { + nob_log(NOB_ERROR, "Could not get mode of file %s: %s", src_path, strerror(errno)); + nob_return_defer(false); + } + + dst_fd = open(dst_path, O_CREAT | O_TRUNC | O_WRONLY, src_stat.st_mode); + if (dst_fd < 0) { + nob_log(NOB_ERROR, "Could not create file %s: %s", dst_path, strerror(errno)); + nob_return_defer(false); + } + + for (;;) { + ssize_t n = read(src_fd, buf, buf_size); + if (n == 0) break; + if (n < 0) { + nob_log(NOB_ERROR, "Could not read from file %s: %s", src_path, strerror(errno)); + nob_return_defer(false); + } + char *buf2 = buf; + while (n > 0) { + ssize_t m = write(dst_fd, buf2, n); + if (m < 0) { + nob_log(NOB_ERROR, "Could not write to file %s: %s", dst_path, strerror(errno)); + nob_return_defer(false); + } + n -= m; + buf2 += m; + } + } + +defer: + NOB_FREE(buf); + close(src_fd); + close(dst_fd); + return result; +#endif +} + +NOBDEF void nob_cmd_render(Nob_Cmd cmd, Nob_String_Builder *render) +{ + for (size_t i = 0; i < cmd.count; ++i) { + const char *arg = cmd.items[i]; + if (arg == NULL) break; + if (i > 0) nob_sb_append_cstr(render, " "); + if (!strchr(arg, ' ')) { + nob_sb_append_cstr(render, arg); + } else { + nob_da_append(render, '\''); + nob_sb_append_cstr(render, arg); + nob_da_append(render, '\''); + } + } +} + +#ifdef _WIN32 +// https://learn.microsoft.com/en-gb/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way +static void nob__win32_cmd_quote(Nob_Cmd cmd, Nob_String_Builder *quoted) +{ + for (size_t i = 0; i < cmd.count; ++i) { + const char *arg = cmd.items[i]; + if (arg == NULL) break; + size_t len = strlen(arg); + if (i > 0) nob_da_append(quoted, ' '); + if (len != 0 && NULL == strpbrk(arg, " \t\n\v\"")) { + // no need to quote + nob_da_append_many(quoted, arg, len); + } else { + // we need to escape: + // 1. double quotes in the original arg + // 2. consequent backslashes before a double quote + size_t backslashes = 0; + nob_da_append(quoted, '\"'); + for (size_t j = 0; j < len; ++j) { + char x = arg[j]; + if (x == '\\') { + backslashes += 1; + } else { + if (x == '\"') { + // escape backslashes (if any) and the double quote + for (size_t k = 0; k < 1+backslashes; ++k) { + nob_da_append(quoted, '\\'); + } + } + backslashes = 0; + } + nob_da_append(quoted, x); + } + // escape backslashes (if any) + for (size_t k = 0; k < backslashes; ++k) { + nob_da_append(quoted, '\\'); + } + nob_da_append(quoted, '\"'); + } + } +} +#endif + +NOBDEF int nob_nprocs(void) +{ +#ifdef _WIN32 + SYSTEM_INFO siSysInfo; + GetSystemInfo(&siSysInfo); + return siSysInfo.dwNumberOfProcessors; +#else + return sysconf(_SC_NPROCESSORS_ONLN); +#endif +} + +NOBDEF bool nob_cmd_run_opt(Nob_Cmd *cmd, Nob_Cmd_Opt opt) +{ + bool result = true; + Nob_Fd fdin = NOB_INVALID_FD; + Nob_Fd fdout = NOB_INVALID_FD; + Nob_Fd fderr = NOB_INVALID_FD; + Nob_Fd *opt_fdin = NULL; + Nob_Fd *opt_fdout = NULL; + Nob_Fd *opt_fderr = NULL; + Nob_Proc proc = NOB_INVALID_PROC; + + size_t max_procs = opt.max_procs > 0 ? opt.max_procs : (size_t) nob_nprocs() + 1; + + if (opt.async && max_procs > 0) { + while (opt.async->count >= max_procs) { + for (size_t i = 0; i < opt.async->count; ++i) { + int ret = nob__proc_wait_async(opt.async->items[i], 1); + if (ret < 0) nob_return_defer(false); + if (ret) { + nob_da_remove_unordered(opt.async, i); + break; + } + } + } + } + + if (opt.stdin_path) { + fdin = nob_fd_open_for_read(opt.stdin_path); + if (fdin == NOB_INVALID_FD) nob_return_defer(false); + opt_fdin = &fdin; + } + if (opt.stdout_path) { + fdout = nob_fd_open_for_write(opt.stdout_path); + if (fdout == NOB_INVALID_FD) nob_return_defer(false); + opt_fdout = &fdout; + } + if (opt.stderr_path) { + fderr = nob_fd_open_for_write(opt.stderr_path); + if (fderr == NOB_INVALID_FD) nob_return_defer(false); + opt_fderr = &fderr; + } + proc = nob__cmd_start_process(*cmd, opt_fdin, opt_fdout, opt_fderr); + + if (opt.async) { + if (proc == NOB_INVALID_PROC) nob_return_defer(false); + nob_da_append(opt.async, proc); + } else { + if (!nob_proc_wait(proc)) nob_return_defer(false); + } + +defer: + if (opt_fdin) nob_fd_close(*opt_fdin); + if (opt_fdout) nob_fd_close(*opt_fdout); + if (opt_fderr) nob_fd_close(*opt_fderr); + if (!opt.dont_reset) cmd->count = 0; + return result; +} + +NOBDEF bool nob_chain_begin_opt(Nob_Chain *chain, Nob_Chain_Begin_Opt opt) +{ + chain->cmd.count = 0; + chain->err2out = false; + chain->fdin = NOB_INVALID_FD; + if (opt.stdin_path) { + chain->fdin = nob_fd_open_for_read(opt.stdin_path); + if (chain->fdin == NOB_INVALID_FD) return false; + } + return true; +} + +NOBDEF bool nob_chain_cmd_opt(Nob_Chain *chain, Nob_Cmd *cmd, Nob_Chain_Cmd_Opt opt) +{ + bool result = true; + Nob_Pipe pp = {0}; + struct { + Nob_Fd items[5]; // should be no more than 3, but we allocate 5 just in case + size_t count; + } fds = {0}; + + NOB_ASSERT(cmd->count > 0); + + if (chain->cmd.count != 0) { // not first cmd in the chain + Nob_Fd *pfdin = NULL; + if (chain->fdin != NOB_INVALID_FD) { + nob_fa_append(&fds, chain->fdin); + pfdin = &chain->fdin; + } + if (!nob_pipe_create(&pp)) nob_return_defer(false); + nob_fa_append(&fds, pp.write); + Nob_Fd *pfdout = &pp.write; + Nob_Fd *pfderr = chain->err2out ? pfdout : NULL; + + Nob_Proc proc = nob__cmd_start_process(chain->cmd, pfdin, pfdout, pfderr); + chain->cmd.count = 0; + if (proc == NOB_INVALID_PROC) { + nob_fa_append(&fds, pp.read); + nob_return_defer(false); + } + chain->fdin = pp.read; + } + + nob_da_append_many(&chain->cmd, cmd->items, cmd->count); + chain->err2out = opt.err2out; + +defer: + for (size_t i = 0; i < fds.count; ++i) { + nob_fd_close(fds.items[i]); + } + if (!opt.dont_reset) cmd->count = 0; + return result; +} + +static Nob_Fd nob__fd_stdout(void) +{ +#ifdef _WIN32 + return GetStdHandle(STD_OUTPUT_HANDLE); +#else + return STDOUT_FILENO; +#endif // _WIN32 +} + +NOBDEF bool nob_chain_end_opt(Nob_Chain *chain, Nob_Chain_End_Opt opt) +{ + bool result = true; + + Nob_Fd *pfdin = NULL; + struct { + Nob_Fd items[5]; // should be no more than 3, but we allocate 5 just in case + size_t count; + } fds = {0}; + + if (chain->fdin != NOB_INVALID_FD) { + nob_fa_append(&fds, chain->fdin); + pfdin = &chain->fdin; + } + + if (chain->cmd.count != 0) { // Non-empty chain case + size_t max_procs = opt.max_procs > 0 ? opt.max_procs : (size_t) nob_nprocs() + 1; + + if (opt.async && max_procs > 0) { + while (opt.async->count >= max_procs) { + for (size_t i = 0; i < opt.async->count; ++i) { + int ret = nob__proc_wait_async(opt.async->items[i], 1); + if (ret < 0) nob_return_defer(false); + if (ret) { + nob_da_remove_unordered(opt.async, i); + break; + } + } + } + } + + Nob_Fd fdout = nob__fd_stdout(); + if (opt.stdout_path) { + fdout = nob_fd_open_for_write(opt.stdout_path); + if (fdout == NOB_INVALID_FD) nob_return_defer(false); + nob_fa_append(&fds, fdout); + } + + Nob_Fd fderr = 0; + Nob_Fd *pfderr = NULL; + if (chain->err2out) pfderr = &fdout; + if (opt.stderr_path) { + if (pfderr == NULL) { + fderr = nob_fd_open_for_write(opt.stderr_path); + if (fderr == NOB_INVALID_FD) nob_return_defer(false); + nob_fa_append(&fds, fderr); + pfderr = &fderr; + } else { + // There was err2out set for the last command. + // All the stderr will go to stdout. + // So the stderr file is going to be empty. + NOB_ASSERT(chain->err2out); + if (!nob_write_entire_file(opt.stderr_path, NULL, 0)) nob_return_defer(false); + } + } + + Nob_Proc proc = nob__cmd_start_process(chain->cmd, pfdin, &fdout, pfderr); + chain->cmd.count = 0; + + if (opt.async) { + if (proc == NOB_INVALID_PROC) nob_return_defer(false); + nob_da_append(opt.async, proc); + } else { + if (!nob_proc_wait(proc)) nob_return_defer(false); + } + } + +defer: + for (size_t i = 0; i < fds.count; ++i) { + nob_fd_close(fds.items[i]); + } + return result; +} + +// The maximum time span representable is 584 years. +NOBDEF uint64_t nob_nanos_since_unspecified_epoch(void) +{ +#ifdef _WIN32 + LARGE_INTEGER Time; + QueryPerformanceCounter(&Time); + + static LARGE_INTEGER Frequency = {0}; + if (Frequency.QuadPart == 0) { + QueryPerformanceFrequency(&Frequency); + } + + uint64_t Secs = Time.QuadPart / Frequency.QuadPart; + uint64_t Nanos = Time.QuadPart % Frequency.QuadPart * NOB_NANOS_PER_SEC / Frequency.QuadPart; + return NOB_NANOS_PER_SEC * Secs + Nanos; +#else + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + + return NOB_NANOS_PER_SEC * ts.tv_sec + ts.tv_nsec; +#endif // _WIN32 +} + +NOBDEF Nob_Proc nob_cmd_run_async_redirect(Nob_Cmd cmd, Nob_Cmd_Redirect redirect) +{ + return nob__cmd_start_process(cmd, redirect.fdin, redirect.fdout, redirect.fderr); +} + +static Nob_Proc nob__cmd_start_process(Nob_Cmd cmd, Nob_Fd *fdin, Nob_Fd *fdout, Nob_Fd *fderr) +{ + if (cmd.count < 1) { + nob_log(NOB_ERROR, "Could not run empty command"); + return NOB_INVALID_PROC; + } + +#ifndef NOB_NO_ECHO + Nob_String_Builder sb = {0}; + nob_cmd_render(cmd, &sb); + nob_sb_append_null(&sb); + nob_log(NOB_INFO, "CMD: %s", sb.items); + nob_sb_free(sb); + memset(&sb, 0, sizeof(sb)); +#endif // NOB_NO_ECHO + +#ifdef _WIN32 + // https://docs.microsoft.com/en-us/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output + + STARTUPINFO siStartInfo; + ZeroMemory(&siStartInfo, sizeof(siStartInfo)); + siStartInfo.cb = sizeof(STARTUPINFO); + // NOTE: theoretically setting NULL to std handles should not be a problem + // https://docs.microsoft.com/en-us/windows/console/getstdhandle?redirectedfrom=MSDN#attachdetach-behavior + // TODO: check for errors in GetStdHandle + siStartInfo.hStdError = fderr ? *fderr : GetStdHandle(STD_ERROR_HANDLE); + siStartInfo.hStdOutput = fdout ? *fdout : GetStdHandle(STD_OUTPUT_HANDLE); + siStartInfo.hStdInput = fdin ? *fdin : GetStdHandle(STD_INPUT_HANDLE); + siStartInfo.dwFlags |= STARTF_USESTDHANDLES; + + PROCESS_INFORMATION piProcInfo; + ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION)); + + Nob_String_Builder quoted = {0}; + nob__win32_cmd_quote(cmd, "ed); + nob_sb_append_null("ed); + BOOL bSuccess = CreateProcessA(NULL, quoted.items, NULL, NULL, TRUE, 0, NULL, NULL, &siStartInfo, &piProcInfo); + nob_sb_free(quoted); + + if (!bSuccess) { + nob_log(NOB_ERROR, "Could not create child process for %s: %s", cmd.items[0], nob_win32_error_message(GetLastError())); + return NOB_INVALID_PROC; + } + + CloseHandle(piProcInfo.hThread); + + return piProcInfo.hProcess; +#else + pid_t cpid = fork(); + if (cpid < 0) { + nob_log(NOB_ERROR, "Could not fork child process: %s", strerror(errno)); + return NOB_INVALID_PROC; + } + + if (cpid == 0) { + if (fdin) { + if (dup2(*fdin, STDIN_FILENO) < 0) { + nob_log(NOB_ERROR, "Could not setup stdin for child process: %s", strerror(errno)); + exit(1); + } + } + + if (fdout) { + if (dup2(*fdout, STDOUT_FILENO) < 0) { + nob_log(NOB_ERROR, "Could not setup stdout for child process: %s", strerror(errno)); + exit(1); + } + } + + if (fderr) { + if (dup2(*fderr, STDERR_FILENO) < 0) { + nob_log(NOB_ERROR, "Could not setup stderr for child process: %s", strerror(errno)); + exit(1); + } + } + + // NOTE: This leaks a bit of memory in the child process. + // But do we actually care? It's a one off leak anyway... + Nob_Cmd cmd_null = {0}; + nob_da_append_many(&cmd_null, cmd.items, cmd.count); + nob_cmd_append(&cmd_null, NULL); + + if (execvp(cmd.items[0], (char * const*) cmd_null.items) < 0) { + nob_log(NOB_ERROR, "Could not exec child process for %s: %s", cmd.items[0], strerror(errno)); + exit(1); + } + NOB_UNREACHABLE("nob_cmd_run_async_redirect"); + } + + return cpid; +#endif +} + +NOBDEF Nob_Proc nob_cmd_run_async(Nob_Cmd cmd) +{ + return nob__cmd_start_process(cmd, NULL, NULL, NULL); +} + +NOBDEF Nob_Proc nob_cmd_run_async_and_reset(Nob_Cmd *cmd) +{ + Nob_Proc proc = nob__cmd_start_process(*cmd, NULL, NULL, NULL); + cmd->count = 0; + return proc; +} + +NOBDEF Nob_Proc nob_cmd_run_async_redirect_and_reset(Nob_Cmd *cmd, Nob_Cmd_Redirect redirect) +{ + Nob_Proc proc = nob__cmd_start_process(*cmd, redirect.fdin, redirect.fdout, redirect.fderr); + cmd->count = 0; + if (redirect.fdin) { + nob_fd_close(*redirect.fdin); + *redirect.fdin = NOB_INVALID_FD; + } + if (redirect.fdout) { + nob_fd_close(*redirect.fdout); + *redirect.fdout = NOB_INVALID_FD; + } + if (redirect.fderr) { + nob_fd_close(*redirect.fderr); + *redirect.fderr = NOB_INVALID_FD; + } + return proc; +} + +NOBDEF Nob_Fd nob_fd_open_for_read(const char *path) +{ +#ifndef _WIN32 + Nob_Fd result = open(path, O_RDONLY); + if (result < 0) { + nob_log(NOB_ERROR, "Could not open file %s: %s", path, strerror(errno)); + return NOB_INVALID_FD; + } + return result; +#else + // https://docs.microsoft.com/en-us/windows/win32/fileio/opening-a-file-for-reading-or-writing + SECURITY_ATTRIBUTES saAttr = {0}; + saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); + saAttr.bInheritHandle = TRUE; + + Nob_Fd result = CreateFile( + path, + GENERIC_READ, + 0, + &saAttr, + OPEN_EXISTING, + FILE_ATTRIBUTE_READONLY, + NULL); + + if (result == INVALID_HANDLE_VALUE) { + nob_log(NOB_ERROR, "Could not open file %s: %s", path, nob_win32_error_message(GetLastError())); + return NOB_INVALID_FD; + } + + return result; +#endif // _WIN32 +} + +NOBDEF Nob_Fd nob_fd_open_for_write(const char *path) +{ +#ifndef _WIN32 + Nob_Fd result = open(path, + O_WRONLY | O_CREAT | O_TRUNC, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (result < 0) { + nob_log(NOB_ERROR, "could not open file %s: %s", path, strerror(errno)); + return NOB_INVALID_FD; + } + return result; +#else + SECURITY_ATTRIBUTES saAttr = {0}; + saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); + saAttr.bInheritHandle = TRUE; + + Nob_Fd result = CreateFile( + path, // name of the write + GENERIC_WRITE, // open for writing + 0, // do not share + &saAttr, // default security + CREATE_ALWAYS, // create always + FILE_ATTRIBUTE_NORMAL, // normal file + NULL // no attr. template + ); + + if (result == INVALID_HANDLE_VALUE) { + nob_log(NOB_ERROR, "Could not open file %s: %s", path, nob_win32_error_message(GetLastError())); + return NOB_INVALID_FD; + } + + return result; +#endif // _WIN32 +} + +NOBDEF void nob_fd_close(Nob_Fd fd) +{ +#ifdef _WIN32 + CloseHandle(fd); +#else + close(fd); +#endif // _WIN32 +} + +NOBDEF bool nob_pipe_create(Nob_Pipe *pp) +{ +#ifdef _WIN32 + // https://docs.microsoft.com/en-us/windows/win32/ProcThread/creating-a-child-process-with-redirected-input-and-output + + SECURITY_ATTRIBUTES saAttr = {0}; + saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); + saAttr.bInheritHandle = TRUE; + + if (!CreatePipe(&pp->read, &pp->write, &saAttr, 0)) { + nob_log(NOB_ERROR, "Could not create pipe: %s", nob_win32_error_message(GetLastError())); + return false; + } + + return true; +#else + int pipefd[2]; + if (pipe(pipefd) < 0) { + nob_log(NOB_ERROR, "Could not create pipe: %s\n", strerror(errno)); + return false; + } + + pp->read = pipefd[0]; + pp->write = pipefd[1]; + + return true; +#endif // _WIN32 +} + +NOBDEF bool nob_procs_wait(Nob_Procs procs) +{ + bool success = true; + for (size_t i = 0; i < procs.count; ++i) { + success = nob_proc_wait(procs.items[i]) && success; + } + return success; +} + +NOBDEF bool nob_procs_flush(Nob_Procs *procs) +{ + bool success = nob_procs_wait(*procs); + procs->count = 0; + return success; +} + +NOBDEF bool nob_procs_wait_and_reset(Nob_Procs *procs) +{ + return nob_procs_flush(procs); +} + +NOBDEF bool nob_proc_wait(Nob_Proc proc) +{ + if (proc == NOB_INVALID_PROC) return false; + +#ifdef _WIN32 + DWORD result = WaitForSingleObject( + proc, // HANDLE hHandle, + INFINITE // DWORD dwMilliseconds + ); + + if (result == WAIT_FAILED) { + nob_log(NOB_ERROR, "could not wait on child process: %s", nob_win32_error_message(GetLastError())); + return false; + } + + DWORD exit_status; + if (!GetExitCodeProcess(proc, &exit_status)) { + nob_log(NOB_ERROR, "could not get process exit code: %s", nob_win32_error_message(GetLastError())); + return false; + } + + if (exit_status != 0) { + nob_log(NOB_ERROR, "command exited with exit code %lu", exit_status); + return false; + } + + CloseHandle(proc); + + return true; +#else + for (;;) { + int wstatus = 0; + if (waitpid(proc, &wstatus, 0) < 0) { + nob_log(NOB_ERROR, "could not wait on command (pid %d): %s", proc, strerror(errno)); + return false; + } + + if (WIFEXITED(wstatus)) { + int exit_status = WEXITSTATUS(wstatus); + if (exit_status != 0) { + nob_log(NOB_ERROR, "command exited with exit code %d", exit_status); + return false; + } + + break; + } + + if (WIFSIGNALED(wstatus)) { + nob_log(NOB_ERROR, "command process was terminated by signal %d", WTERMSIG(wstatus)); + return false; + } + } + + return true; +#endif +} + +static int nob__proc_wait_async(Nob_Proc proc, int ms) +{ + if (proc == NOB_INVALID_PROC) return false; + +#ifdef _WIN32 + DWORD result = WaitForSingleObject( + proc, // HANDLE hHandle, + ms // DWORD dwMilliseconds + ); + + if (result == WAIT_TIMEOUT) { + return 0; + } + + if (result == WAIT_FAILED) { + nob_log(NOB_ERROR, "could not wait on child process: %s", nob_win32_error_message(GetLastError())); + return -1; + } + + DWORD exit_status; + if (!GetExitCodeProcess(proc, &exit_status)) { + nob_log(NOB_ERROR, "could not get process exit code: %s", nob_win32_error_message(GetLastError())); + return -1; + } + + if (exit_status != 0) { + nob_log(NOB_ERROR, "command exited with exit code %lu", exit_status); + return -1; + } + + CloseHandle(proc); + + return 1; +#else + long ns = ms*1000*1000; + struct timespec duration = { + .tv_sec = ns/(1000*1000*1000), + .tv_nsec = ns%(1000*1000*1000), + }; + + int wstatus = 0; + pid_t pid = waitpid(proc, &wstatus, WNOHANG); + if (pid < 0) { + nob_log(NOB_ERROR, "could not wait on command (pid %d): %s", proc, strerror(errno)); + return -1; + } + + if (pid == 0) { + nanosleep(&duration, NULL); + return 0; + } + + if (WIFEXITED(wstatus)) { + int exit_status = WEXITSTATUS(wstatus); + if (exit_status != 0) { + nob_log(NOB_ERROR, "command exited with exit code %d", exit_status); + return -1; + } + + return 1; + } + + if (WIFSIGNALED(wstatus)) { + nob_log(NOB_ERROR, "command process was terminated by signal %d", WTERMSIG(wstatus)); + return -1; + } + + nanosleep(&duration, NULL); + return 0; +#endif +} + +NOBDEF bool nob_procs_append_with_flush(Nob_Procs *procs, Nob_Proc proc, size_t max_procs_count) +{ + nob_da_append(procs, proc); + + if (procs->count >= max_procs_count) { + if (!nob_procs_flush(procs)) return false; + } + + return true; +} + +NOBDEF bool nob_cmd_run_sync_redirect(Nob_Cmd cmd, Nob_Cmd_Redirect redirect) +{ + Nob_Proc p = nob__cmd_start_process(cmd, redirect.fdin, redirect.fdout, redirect.fderr); + return nob_proc_wait(p); +} + +NOBDEF bool nob_cmd_run_sync(Nob_Cmd cmd) +{ + Nob_Proc p = nob__cmd_start_process(cmd, NULL, NULL, NULL); + return nob_proc_wait(p); +} + +NOBDEF bool nob_cmd_run_sync_and_reset(Nob_Cmd *cmd) +{ + Nob_Proc p = nob__cmd_start_process(*cmd, NULL, NULL, NULL); + cmd->count = 0; + return nob_proc_wait(p); +} + +NOBDEF bool nob_cmd_run_sync_redirect_and_reset(Nob_Cmd *cmd, Nob_Cmd_Redirect redirect) +{ + Nob_Proc p = nob__cmd_start_process(*cmd, redirect.fdin, redirect.fdout, redirect.fderr); + cmd->count = 0; + if (redirect.fdin) { + nob_fd_close(*redirect.fdin); + *redirect.fdin = NOB_INVALID_FD; + } + if (redirect.fdout) { + nob_fd_close(*redirect.fdout); + *redirect.fdout = NOB_INVALID_FD; + } + if (redirect.fderr) { + nob_fd_close(*redirect.fderr); + *redirect.fderr = NOB_INVALID_FD; + } + return nob_proc_wait(p); +} + +static nob_log_handler *nob__log_handler = &nob_default_log_handler; + +NOBDEF void nob_set_log_handler(nob_log_handler *handler) +{ + nob__log_handler = handler; +} + +NOBDEF nob_log_handler *nob_get_log_handler(void) +{ + return nob__log_handler; +} + +NOBDEF void nob_default_log_handler(Nob_Log_Level level, const char *fmt, va_list args) +{ + if (level < nob_minimal_log_level) return; + + switch (level) { + case NOB_INFO: + fprintf(stderr, "[INFO] "); + break; + case NOB_WARNING: + fprintf(stderr, "[WARNING] "); + break; + case NOB_ERROR: + fprintf(stderr, "[ERROR] "); + break; + case NOB_NO_LOGS: return; + default: + NOB_UNREACHABLE("Nob_Log_Level"); + } + + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); +} + +NOBDEF void nob_cancer_log_handler(Nob_Log_Level level, const char *fmt, va_list args) +{ + switch (level) { + case NOB_INFO: + fprintf(stderr, "ℹ️ \x1b[36m[INFO]\x1b[0m "); + break; + case NOB_WARNING: + fprintf(stderr, "⚠️ \x1b[33m[WARNING]\x1b[0m "); + break; + case NOB_ERROR: + fprintf(stderr, "🚨 \x1b[31m[ERROR]\x1b[0m "); + break; + case NOB_NO_LOGS: return; + default: + NOB_UNREACHABLE("Nob_Log_Level"); + } + + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); +} + +NOBDEF void nob_log(Nob_Log_Level level, const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + nob__log_handler(level, fmt, args); + va_end(args); +} + +NOBDEF bool nob_dir_entry_open(const char *dir_path, Nob_Dir_Entry *dir) +{ + memset(dir, 0, sizeof(*dir)); +#ifdef _WIN32 + size_t temp_mark = nob_temp_save(); + char *buffer = nob_temp_sprintf("%s\\*", dir_path); + dir->nob__private.win32_hFind = FindFirstFile(buffer, &dir->nob__private.win32_data); + nob_temp_rewind(temp_mark); + + if (dir->nob__private.win32_hFind == INVALID_HANDLE_VALUE) { + nob_log(NOB_ERROR, "Could not open directory %s: %s", dir_path, nob_win32_error_message(GetLastError())); + dir->error = true; + return false; + } +#else + dir->nob__private.posix_dir = opendir(dir_path); + if (dir->nob__private.posix_dir == NULL) { + nob_log(NOB_ERROR, "Could not open directory %s: %s", dir_path, strerror(errno)); + dir->error = true; + return false; + } +#endif // _WIN32 + return true; +} + +NOBDEF bool nob_dir_entry_next(Nob_Dir_Entry *dir) +{ +#ifdef _WIN32 + if (!dir->nob__private.win32_init) { + dir->nob__private.win32_init = true; + dir->name = dir->nob__private.win32_data.cFileName; + return true; + } + + if (!FindNextFile(dir->nob__private.win32_hFind, &dir->nob__private.win32_data)) { + if (GetLastError() == ERROR_NO_MORE_FILES) return false; + nob_log(NOB_ERROR, "Could not read next directory entry: %s", nob_win32_error_message(GetLastError())); + dir->error = true; + return false; + } + dir->name = dir->nob__private.win32_data.cFileName; +#else + errno = 0; + dir->nob__private.posix_ent = readdir(dir->nob__private.posix_dir); + if (dir->nob__private.posix_ent == NULL) { + if (errno == 0) return false; + nob_log(NOB_ERROR, "Could not read next directory entry: %s", strerror(errno)); + dir->error = true; + return false; + } + dir->name = dir->nob__private.posix_ent->d_name; +#endif // _WIN32 + return true; +} + +NOBDEF void nob_dir_entry_close(Nob_Dir_Entry dir) +{ +#ifdef _WIN32 + FindClose(dir.nob__private.win32_hFind); +#else + if (dir.nob__private.posix_dir) closedir(dir.nob__private.posix_dir); +#endif +} + +// On the moment of entering `nob__walk_dir_opt_impl()`, the `file_path` Nob_String_Builder is expected to be NULL-terminated. +// So you can freely pass `file_path->items` to functions that expect NULL-terminated file path. +// On existing `nob__walk_dir_opt_impl()` is expected to restore the original content of `file_path` +bool nob__walk_dir_opt_impl(Nob_String_Builder *file_path, Nob_Walk_Func func, size_t level, bool *stop, Nob_Walk_Dir_Opt opt) +{ + NOB_ASSERT(file_path->count > 0 && "file_path was probably not properly NULL-terminated"); + bool result = true; + + Nob_Dir_Entry dir = {0}; + size_t saved_file_path_count = file_path->count; + Nob_Walk_Action action = NOB_WALK_CONT; + + Nob_File_Type file_type = nob_get_file_type(file_path->items); + if (file_type < 0) nob_return_defer(false); + + // Pre-order walking + if (!opt.post_order) { + if (!func((Nob_Walk_Entry) { + .path = file_path->items, + .type = file_type, + .level = level, + .data = opt.data, + .action = &action, + })) nob_return_defer(false); + switch (action) { + case NOB_WALK_CONT: break; + case NOB_WALK_STOP: *stop = true; // fallthrough + case NOB_WALK_SKIP: nob_return_defer(true); + default: NOB_UNREACHABLE("Nob_Walk_Action"); + } + } + + if (file_type == NOB_FILE_DIRECTORY) { + if (!nob_dir_entry_open(file_path->items, &dir)) nob_return_defer(false); + for (;;) { + // Next entry + if (!nob_dir_entry_next(&dir)) { + if (!dir.error) break; + nob_return_defer(false); + } + + // Ignore . and .. + if (strcmp(dir.name, ".") == 0) continue; + if (strcmp(dir.name, "..") == 0) continue; + + // Prepare the new file_path + file_path->count = saved_file_path_count - 1; +#ifdef _WIN32 + nob_sb_appendf(file_path, "\\%s", dir.name); +#else + nob_sb_appendf(file_path, "/%s", dir.name); +#endif // _WIN32 + nob_sb_append_null(file_path); + + // Recurse + if (!nob__walk_dir_opt_impl(file_path, func, level+1, stop, opt)) nob_return_defer(false); + if (*stop) nob_return_defer(true); + } + file_path->count = saved_file_path_count; + nob_da_last(file_path) = '\0'; + } + + // Post-order walking + if (opt.post_order) { + if (!func((Nob_Walk_Entry) { + .path = file_path->items, + .type = file_type, + .level = level, + .data = opt.data, + .action = &action, + })) nob_return_defer(false); + switch (action) { + case NOB_WALK_CONT: break; + case NOB_WALK_STOP: *stop = true; // fallthrough + case NOB_WALK_SKIP: nob_return_defer(true); + default: NOB_UNREACHABLE("Nob_Walk_Action"); + } + } + +defer: + // Always reset the file_path back to what it was + file_path->count = saved_file_path_count; + nob_da_last(file_path) = '\0'; + + nob_dir_entry_close(dir); + return result; +} + +NOBDEF bool nob_walk_dir_opt(const char *root, Nob_Walk_Func func, Nob_Walk_Dir_Opt opt) +{ + Nob_String_Builder file_path = {0}; + + nob_sb_appendf(&file_path, "%s", root); + nob_sb_append_null(&file_path); + + bool stop = false; + bool ok = nob__walk_dir_opt_impl(&file_path, func, 0, &stop, opt); + free(file_path.items); + return ok; +} + +NOBDEF bool nob_read_entire_dir(const char *parent, Nob_File_Paths *children) +{ + if (strlen(parent) == 0) { + nob_log(NOB_ERROR, "Cannot read empty path"); + return false; + } + bool result = true; + Nob_Dir_Entry dir = {0}; + if (!nob_dir_entry_open(parent, &dir)) nob_return_defer(false); + while (nob_dir_entry_next(&dir)) nob_da_append(children, nob_temp_strdup(dir.name)); + if (dir.error) nob_return_defer(false); +defer: + nob_dir_entry_close(dir); + return result; +} + +NOBDEF bool nob_write_entire_file(const char *path, const void *data, size_t size) +{ + bool result = true; + + const char *buf = NULL; + FILE *f = fopen(path, "wb"); + if (f == NULL) { + nob_log(NOB_ERROR, "Could not open file %s for writing: %s\n", path, strerror(errno)); + nob_return_defer(false); + } + + // len + // v + // aaaaaaaaaa + // ^ + // data + + buf = (const char*)data; + while (size > 0) { + size_t n = fwrite(buf, 1, size, f); + if (ferror(f)) { + nob_log(NOB_ERROR, "Could not write into file %s: %s\n", path, strerror(errno)); + nob_return_defer(false); + } + size -= n; + buf += n; + } + +defer: + if (f) fclose(f); + return result; +} + +NOBDEF Nob_File_Type nob_get_file_type(const char *path) +{ +#ifdef _WIN32 + DWORD attr = GetFileAttributesA(path); + if (attr == INVALID_FILE_ATTRIBUTES) { + nob_log(NOB_ERROR, "Could not get file attributes of %s: %s", path, nob_win32_error_message(GetLastError())); + return -1; + } + + if (attr & FILE_ATTRIBUTE_DIRECTORY) return NOB_FILE_DIRECTORY; + // TODO: detect symlinks on Windows (whatever that means on Windows anyway) + return NOB_FILE_REGULAR; +#else // _WIN32 + struct stat statbuf; + if (lstat(path, &statbuf) < 0) { + nob_log(NOB_ERROR, "Could not get stat of %s: %s", path, strerror(errno)); + return (Nob_File_Type)(-1); + } + + if (S_ISREG(statbuf.st_mode)) return NOB_FILE_REGULAR; + if (S_ISDIR(statbuf.st_mode)) return NOB_FILE_DIRECTORY; + if (S_ISLNK(statbuf.st_mode)) return NOB_FILE_SYMLINK; + return NOB_FILE_OTHER; +#endif // _WIN32 +} + +NOBDEF bool nob_delete_file(const char *path) +{ +#ifndef NOB_NO_ECHO + nob_log(NOB_INFO, "deleting %s", path); +#endif // NOB_NO_ECHO +#ifdef _WIN32 + Nob_File_Type type = nob_get_file_type(path); + switch (type) { + case NOB_FILE_DIRECTORY: + if (!RemoveDirectoryA(path)) { + nob_log(NOB_ERROR, "Could not delete directory %s: %s", path, nob_win32_error_message(GetLastError())); + return false; + } + break; + case NOB_FILE_REGULAR: + case NOB_FILE_SYMLINK: + case NOB_FILE_OTHER: + if (!DeleteFileA(path)) { + nob_log(NOB_ERROR, "Could not delete file %s: %s", path, nob_win32_error_message(GetLastError())); + return false; + } + break; + default: NOB_UNREACHABLE("Nob_File_Type"); + } + return true; +#else + if (remove(path) < 0) { + nob_log(NOB_ERROR, "Could not delete file %s: %s", path, strerror(errno)); + return false; + } + return true; +#endif // _WIN32 +} + +NOBDEF bool nob_copy_directory_recursively(const char *src_path, const char *dst_path) +{ + bool result = true; + Nob_File_Paths children = {0}; + Nob_String_Builder src_sb = {0}; + Nob_String_Builder dst_sb = {0}; + size_t temp_checkpoint = nob_temp_save(); + + Nob_File_Type type = nob_get_file_type(src_path); + if (type < 0) return false; + + switch (type) { + case NOB_FILE_DIRECTORY: { + if (!nob_mkdir_if_not_exists(dst_path)) nob_return_defer(false); + if (!nob_read_entire_dir(src_path, &children)) nob_return_defer(false); + + for (size_t i = 0; i < children.count; ++i) { + if (strcmp(children.items[i], ".") == 0) continue; + if (strcmp(children.items[i], "..") == 0) continue; + + src_sb.count = 0; + nob_sb_append_cstr(&src_sb, src_path); + nob_sb_append_cstr(&src_sb, "/"); + nob_sb_append_cstr(&src_sb, children.items[i]); + nob_sb_append_null(&src_sb); + + dst_sb.count = 0; + nob_sb_append_cstr(&dst_sb, dst_path); + nob_sb_append_cstr(&dst_sb, "/"); + nob_sb_append_cstr(&dst_sb, children.items[i]); + nob_sb_append_null(&dst_sb); + + if (!nob_copy_directory_recursively(src_sb.items, dst_sb.items)) { + nob_return_defer(false); + } + } + } break; + + case NOB_FILE_REGULAR: { + if (!nob_copy_file(src_path, dst_path)) { + nob_return_defer(false); + } + } break; + + case NOB_FILE_SYMLINK: { + nob_log(NOB_WARNING, "TODO: Copying symlinks is not supported yet"); + } break; + + case NOB_FILE_OTHER: { + nob_log(NOB_ERROR, "Unsupported type of file %s", src_path); + nob_return_defer(false); + } break; + + default: NOB_UNREACHABLE("nob_copy_directory_recursively"); + } + +defer: + nob_temp_rewind(temp_checkpoint); + nob_da_free(src_sb); + nob_da_free(dst_sb); + nob_da_free(children); + return result; +} + +NOBDEF char *nob_temp_strdup(const char *cstr) +{ + size_t n = strlen(cstr); + char *result = (char*)nob_temp_alloc(n + 1); + NOB_ASSERT(result != NULL && "Increase NOB_TEMP_CAPACITY"); + memcpy(result, cstr, n); + result[n] = '\0'; + return result; +} + +NOBDEF char *nob_temp_strndup(const char *s, size_t n) +{ + char *r = (char*)nob_temp_alloc(n + 1); + NOB_ASSERT(r != NULL && "Extend the size of the temporary allocator"); + memcpy(r, s, n); + r[n] = '\0'; + return r; +} + +NOBDEF void *nob_temp_alloc(size_t requested_size) +{ + size_t word_size = sizeof(uintptr_t); + size_t size = (requested_size + word_size - 1)/word_size*word_size; + if (nob_temp_size + size > NOB_TEMP_CAPACITY) return NULL; + void *result = &nob_temp[nob_temp_size]; + nob_temp_size += size; + return result; +} + +NOBDEF char *nob_temp_vsprintf(const char *format, va_list ap) +{ + va_list args; + va_copy(args, ap); + int n = vsnprintf(NULL, 0, format, args); + va_end(args); + + NOB_ASSERT(n >= 0); + char *result = (char*)nob_temp_alloc(n + 1); + NOB_ASSERT(result != NULL && "Extend the size of the temporary allocator"); + // TODO: use proper arenas for the temporary allocator; + va_copy(args, ap); + vsnprintf(result, n + 1, format, args); + va_end(args); + + return result; +} + +NOBDEF char *nob_temp_sprintf(const char *format, ...) +{ + va_list args; + va_start(args, format); + char *result = nob_temp_vsprintf(format, args); + va_end(args); + return result; +} + +NOBDEF void nob_temp_reset(void) +{ + nob_temp_size = 0; +} + +NOBDEF size_t nob_temp_save(void) +{ + return nob_temp_size; +} + +NOBDEF void nob_temp_rewind(size_t checkpoint) +{ + nob_temp_size = checkpoint; +} + +NOBDEF const char *nob_temp_sv_to_cstr(Nob_String_View sv) +{ + return nob_temp_strndup(sv.data, sv.count); +} + +NOBDEF int nob_needs_rebuild(const char *output_path, const char **input_paths, size_t input_paths_count) +{ +#ifdef _WIN32 + BOOL bSuccess; + + HANDLE output_path_fd = CreateFile(output_path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); + if (output_path_fd == INVALID_HANDLE_VALUE) { + // NOTE: if output does not exist it 100% must be rebuilt + if (GetLastError() == ERROR_FILE_NOT_FOUND) return 1; + nob_log(NOB_ERROR, "Could not open file %s: %s", output_path, nob_win32_error_message(GetLastError())); + return -1; + } + FILETIME output_path_time; + bSuccess = GetFileTime(output_path_fd, NULL, NULL, &output_path_time); + CloseHandle(output_path_fd); + if (!bSuccess) { + nob_log(NOB_ERROR, "Could not get time of %s: %s", output_path, nob_win32_error_message(GetLastError())); + return -1; + } + + for (size_t i = 0; i < input_paths_count; ++i) { + const char *input_path = input_paths[i]; + HANDLE input_path_fd = CreateFile(input_path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); + if (input_path_fd == INVALID_HANDLE_VALUE) { + // NOTE: non-existing input is an error cause it is needed for building in the first place + nob_log(NOB_ERROR, "Could not open file %s: %s", input_path, nob_win32_error_message(GetLastError())); + return -1; + } + FILETIME input_path_time; + bSuccess = GetFileTime(input_path_fd, NULL, NULL, &input_path_time); + CloseHandle(input_path_fd); + if (!bSuccess) { + nob_log(NOB_ERROR, "Could not get time of %s: %s", input_path, nob_win32_error_message(GetLastError())); + return -1; + } + + // NOTE: if even a single input_path is fresher than output_path that's 100% rebuild + if (CompareFileTime(&input_path_time, &output_path_time) == 1) return 1; + } + + return 0; +#else + struct stat statbuf = {0}; + + if (stat(output_path, &statbuf) < 0) { + // NOTE: if output does not exist it 100% must be rebuilt + if (errno == ENOENT) return 1; + nob_log(NOB_ERROR, "could not stat %s: %s", output_path, strerror(errno)); + return -1; + } + time_t output_path_time = statbuf.st_mtime; + + for (size_t i = 0; i < input_paths_count; ++i) { + const char *input_path = input_paths[i]; + if (stat(input_path, &statbuf) < 0) { + // NOTE: non-existing input is an error cause it is needed for building in the first place + nob_log(NOB_ERROR, "could not stat %s: %s", input_path, strerror(errno)); + return -1; + } + time_t input_path_time = statbuf.st_mtime; + // NOTE: if even a single input_path is fresher than output_path that's 100% rebuild + if (input_path_time > output_path_time) return 1; + } + + return 0; +#endif +} + +NOBDEF int nob_needs_rebuild1(const char *output_path, const char *input_path) +{ + return nob_needs_rebuild(output_path, &input_path, 1); +} + +NOBDEF const char *nob_path_name(const char *path) +{ +#ifdef _WIN32 + const char *p1 = strrchr(path, '/'); + const char *p2 = strrchr(path, '\\'); + const char *p = (p1 > p2)? p1 : p2; // NULL is ignored if the other search is successful + return p ? p + 1 : path; +#else + const char *p = strrchr(path, '/'); + return p ? p + 1 : path; +#endif // _WIN32 +} + +NOBDEF bool nob_rename(const char *old_path, const char *new_path) +{ +#ifndef NOB_NO_ECHO + nob_log(NOB_INFO, "renaming %s -> %s", old_path, new_path); +#endif // NOB_NO_ECHO +#ifdef _WIN32 + if (!MoveFileEx(old_path, new_path, MOVEFILE_REPLACE_EXISTING)) { + nob_log(NOB_ERROR, "could not rename %s to %s: %s", old_path, new_path, nob_win32_error_message(GetLastError())); + return false; + } +#else + if (rename(old_path, new_path) < 0) { + nob_log(NOB_ERROR, "could not rename %s to %s: %s", old_path, new_path, strerror(errno)); + return false; + } +#endif // _WIN32 + return true; +} + +NOBDEF bool nob_read_entire_file(const char *path, Nob_String_Builder *sb) +{ + bool result = true; + + FILE *f = fopen(path, "rb"); + size_t new_count = 0; + long long m = 0; + if (f == NULL) nob_return_defer(false); + if (fseek(f, 0, SEEK_END) < 0) nob_return_defer(false); +#ifndef _WIN32 + m = ftell(f); +#else + m = _telli64(_fileno(f)); +#endif + if (m < 0) nob_return_defer(false); + if (fseek(f, 0, SEEK_SET) < 0) nob_return_defer(false); + + new_count = sb->count + m; + if (new_count > sb->capacity) { + sb->items = NOB_DECLTYPE_CAST(sb->items)NOB_REALLOC(sb->items, new_count); + NOB_ASSERT(sb->items != NULL && "Buy more RAM lool!!"); + sb->capacity = new_count; + } + + fread(sb->items + sb->count, m, 1, f); + if (ferror(f)) { + // TODO: Afaik, ferror does not set errno. So the error reporting in defer is not correct in this case. + nob_return_defer(false); + } + sb->count = new_count; + +defer: + if (!result) nob_log(NOB_ERROR, "Could not read file %s: %s", path, strerror(errno)); + if (f) fclose(f); + return result; +} + +NOBDEF int nob_sb_appendf(Nob_String_Builder *sb, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + int n = vsnprintf(NULL, 0, fmt, args); + va_end(args); + + // NOTE: the new_capacity needs to be +1 because of the null terminator. + // However, further below we increase sb->count by n, not n + 1. + // This is because we don't want the sb to include the null terminator. The user can always sb_append_null() if they want it + nob_da_reserve(sb, sb->count + n + 1); + char *dest = sb->items + sb->count; + va_start(args, fmt); + vsnprintf(dest, n+1, fmt, args); + va_end(args); + + sb->count += n; + + return n; +} + +NOBDEF void nob_sb_pad_align(Nob_String_Builder *sb, size_t size) +{ + size_t rem = sb->count%size; + if (rem == 0) return; + for (size_t i = 0; i < size - rem; ++i) { + nob_da_append(sb, 0); + } +} + +NOBDEF Nob_String_View nob_sv_chop_by_delim(Nob_String_View *sv, char delim) +{ + size_t i = 0; + while (i < sv->count && sv->data[i] != delim) { + i += 1; + } + + Nob_String_View result = nob_sv_from_parts(sv->data, i); + + if (i < sv->count) { + sv->count -= i + 1; + sv->data += i + 1; + } else { + sv->count -= i; + sv->data += i; + } + + return result; +} + +NOBDEF Nob_String_View nob_sv_chop_left(Nob_String_View *sv, size_t n) +{ + if (n > sv->count) { + n = sv->count; + } + + Nob_String_View result = nob_sv_from_parts(sv->data, n); + + sv->data += n; + sv->count -= n; + + return result; +} + +NOBDEF Nob_String_View nob_sv_from_parts(const char *data, size_t count) +{ + Nob_String_View sv; + sv.count = count; + sv.data = data; + return sv; +} + +NOBDEF Nob_String_View nob_sv_trim_left(Nob_String_View sv) +{ + size_t i = 0; + while (i < sv.count && isspace(sv.data[i])) { + i += 1; + } + + return nob_sv_from_parts(sv.data + i, sv.count - i); +} + +NOBDEF Nob_String_View nob_sv_trim_right(Nob_String_View sv) +{ + size_t i = 0; + while (i < sv.count && isspace(sv.data[sv.count - 1 - i])) { + i += 1; + } + + return nob_sv_from_parts(sv.data, sv.count - i); +} + +NOBDEF Nob_String_View nob_sv_trim(Nob_String_View sv) +{ + return nob_sv_trim_right(nob_sv_trim_left(sv)); +} + +NOBDEF Nob_String_View nob_sv_from_cstr(const char *cstr) +{ + return nob_sv_from_parts(cstr, strlen(cstr)); +} + +NOBDEF bool nob_sv_eq(Nob_String_View a, Nob_String_View b) +{ + if (a.count != b.count) { + return false; + } else { + return memcmp(a.data, b.data, a.count) == 0; + } +} + +NOBDEF bool nob_sv_end_with(Nob_String_View sv, const char *cstr) +{ + size_t cstr_count = strlen(cstr); + if (sv.count >= cstr_count) { + size_t ending_start = sv.count - cstr_count; + Nob_String_View sv_ending = nob_sv_from_parts(sv.data + ending_start, cstr_count); + return nob_sv_eq(sv_ending, nob_sv_from_cstr(cstr)); + } + return false; +} + + +NOBDEF bool nob_sv_starts_with(Nob_String_View sv, Nob_String_View expected_prefix) +{ + if (expected_prefix.count <= sv.count) { + Nob_String_View actual_prefix = nob_sv_from_parts(sv.data, expected_prefix.count); + return nob_sv_eq(expected_prefix, actual_prefix); + } + + return false; +} + +// RETURNS: +// 0 - file does not exists +// 1 - file exists +NOBDEF int nob_file_exists(const char *file_path) +{ +#if _WIN32 + return GetFileAttributesA(file_path) != INVALID_FILE_ATTRIBUTES; +#else + return access(file_path, F_OK) == 0; +#endif +} + +NOBDEF const char *nob_get_current_dir_temp(void) +{ +#ifdef _WIN32 + DWORD nBufferLength = GetCurrentDirectory(0, NULL); + if (nBufferLength == 0) { + nob_log(NOB_ERROR, "could not get current directory: %s", nob_win32_error_message(GetLastError())); + return NULL; + } + + char *buffer = (char*) nob_temp_alloc(nBufferLength); + if (GetCurrentDirectory(nBufferLength, buffer) == 0) { + nob_log(NOB_ERROR, "could not get current directory: %s", nob_win32_error_message(GetLastError())); + return NULL; + } + + return buffer; +#else + char *buffer = (char*) nob_temp_alloc(PATH_MAX); + if (getcwd(buffer, PATH_MAX) == NULL) { + nob_log(NOB_ERROR, "could not get current directory: %s", strerror(errno)); + return NULL; + } + + return buffer; +#endif // _WIN32 +} + +NOBDEF bool nob_set_current_dir(const char *path) +{ +#ifdef _WIN32 + if (!SetCurrentDirectory(path)) { + nob_log(NOB_ERROR, "could not set current directory to %s: %s", path, nob_win32_error_message(GetLastError())); + return false; + } + return true; +#else + if (chdir(path) < 0) { + nob_log(NOB_ERROR, "could not set current directory to %s: %s", path, strerror(errno)); + return false; + } + return true; +#endif // _WIN32 +} + +NOBDEF char *nob_temp_dir_name(const char *path) +{ +#ifndef _WIN32 + // Stolen from the musl's implementation of dirname. + // We are implementing our own one because libc vendors cannot agree on whether dirname(3) + // modifies the path or not. + if (!path || !*path) return nob_temp_strdup("."); + size_t i = strlen(path) - 1; + for (; path[i] == '/'; i--) if (!i) return nob_temp_strdup("/"); + for (; path[i] != '/'; i--) if (!i) return nob_temp_strdup("."); + for (; path[i] == '/'; i--) if (!i) return nob_temp_strdup("/"); + return nob_temp_strndup(path, i + 1); +#else + if (!path) path = ""; // Treating NULL as empty. + char *drive = nob_temp_alloc(_MAX_DRIVE); + char *dir = nob_temp_alloc(_MAX_DIR); + // https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/8e46eyt7(v=vs.100) + errno_t ret = _splitpath_s(path, drive, _MAX_DRIVE, dir, _MAX_DIR, NULL, 0, NULL, 0); + NOB_ASSERT(ret == 0); + return nob_temp_sprintf("%s%s", drive, dir); +#endif // _WIN32 +} + +NOBDEF char *nob_temp_file_name(const char *path) +{ +#ifndef _WIN32 + // Stolen from the musl's implementation of dirname. + // We are implementing our own one because libc vendors cannot agree on whether basename(3) + // modifies the path or not. + if (!path || !*path) return nob_temp_strdup("."); + char *s = nob_temp_strdup(path); + size_t i = strlen(s)-1; + for (; i&&s[i]=='/'; i--) s[i] = 0; + for (; i&&s[i-1]!='/'; i--); + return s+i; +#else + if (!path) path = ""; // Treating NULL as empty. + char *fname = nob_temp_alloc(_MAX_FNAME); + char *ext = nob_temp_alloc(_MAX_EXT); + // https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/8e46eyt7(v=vs.100) + errno_t ret = _splitpath_s(path, NULL, 0, NULL, 0, fname, _MAX_FNAME, ext, _MAX_EXT); + NOB_ASSERT(ret == 0); + return nob_temp_sprintf("%s%s", fname, ext); +#endif // _WIN32 +} + +NOBDEF char *nob_temp_file_ext(const char *path) +{ +#ifndef _WIN32 + return strrchr(nob_temp_file_name(path), '.'); +#else + if (!path) path = ""; // Treating NULL as empty. + char *ext = nob_temp_alloc(_MAX_EXT); + // https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/8e46eyt7(v=vs.100) + errno_t ret = _splitpath_s(path, NULL, 0, NULL, 0, NULL, 0, ext, _MAX_EXT); + NOB_ASSERT(ret == 0); + return ext; +#endif // _WIN32 +} + +NOBDEF char *nob_temp_running_executable_path(void) +{ +#if defined(__linux__) + char buf[4096]; + int length = readlink("/proc/self/exe", buf, NOB_ARRAY_LEN(buf)); + if (length < 0) return nob_temp_strdup(""); + return nob_temp_strndup(buf, length); +#elif defined(_WIN32) + char buf[MAX_PATH]; + int length = GetModuleFileNameA(NULL, buf, MAX_PATH); + return nob_temp_strndup(buf, length); +#elif defined(__APPLE__) + char buf[4096]; + uint32_t size = NOB_ARRAY_LEN(buf); + if (_NSGetExecutablePath(buf, &size) != 0) return nob_temp_strdup(""); + int length = strlen(buf); + return nob_temp_strndup(buf, length); +#elif defined(__FreeBSD__) + char buf[4096]; + int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; + size_t length = sizeof(buf); + if (sysctl(mib, 4, buf, &length, NULL, 0) < 0) return nob_temp_strdup(""); + return nob_temp_strndup(buf, length); +#elif defined(__HAIKU__) + int cookie = 0; + image_info info; + while (get_next_image_info(B_CURRENT_TEAM, &cookie, &info) == B_OK) + if (info.type == B_APP_IMAGE) + break; + return nob_temp_strndup(info.name, strlen(info.name)); +#else + fprintf(stderr, "%s:%d: TODO: nob_temp_running_executable_path is not implemented for this platform\n", __FILE__, __LINE__); + return nob_temp_strdup(""); +#endif +} + +#endif // NOB_IMPLEMENTATION + +#ifndef NOB_STRIP_PREFIX_GUARD_ +#define NOB_STRIP_PREFIX_GUARD_ + // NOTE: The name stripping should be part of the header so it's not accidentally included + // several times. At the same time, it should be at the end of the file so to not create any + // potential conflicts in the NOB_IMPLEMENTATION. The header obviously cannot be at the end + // of the file because NOB_IMPLEMENTATION needs the forward declarations from there. So the + // solution is to split the header into two parts where the name stripping part is at the + // end of the file after the NOB_IMPLEMENTATION. + #ifndef NOB_UNSTRIP_PREFIX + #define TODO NOB_TODO + #define UNREACHABLE NOB_UNREACHABLE + #define UNUSED NOB_UNUSED + #define ARRAY_LEN NOB_ARRAY_LEN + #define ARRAY_GET NOB_ARRAY_GET + #define INFO NOB_INFO + #define WARNING NOB_WARNING + #define ERROR NOB_ERROR + #define NO_LOGS NOB_NO_LOGS + #define Log_Level Nob_Log_Level + #define minimal_log_level nob_minimal_log_level + #define log_handler nob_log_handler + #define set_log_handler nob_set_log_handler + #define get_log_handler nob_get_log_handler + #define default_log_handler nob_default_log_handler + #define cancer_log_handler nob_cancer_log_handler + // NOTE: Name log is already defined in math.h and historically always was the natural logarithmic function. + // So there should be no reason to strip the `nob_` prefix in this specific case. + // #define log nob_log + #define shift nob_shift + #define shift_args nob_shift_args + #define GO_REBUILD_URSELF NOB_GO_REBUILD_URSELF + #define GO_REBUILD_URSELF_PLUS NOB_GO_REBUILD_URSELF_PLUS + #define File_Paths Nob_File_Paths + #define FILE_REGULAR NOB_FILE_REGULAR + #define FILE_DIRECTORY NOB_FILE_DIRECTORY + #define FILE_SYMLINK NOB_FILE_SYMLINK + #define FILE_OTHER NOB_FILE_OTHER + #define File_Type Nob_File_Type + #define mkdir_if_not_exists nob_mkdir_if_not_exists + #define copy_file nob_copy_file + #define copy_directory_recursively nob_copy_directory_recursively + #define read_entire_dir nob_read_entire_dir + #define WALK_CONT NOB_WALK_CONT + #define WALK_SKIP NOB_WALK_SKIP + #define WALK_STOP NOB_WALK_STOP + #define Walk_Action Nob_Walk_Action + #define Walk_Entry Nob_Walk_Entry + #define Walk_Func Nob_Walk_Func + #define Walk_Dir_Opt Nob_Walk_Dir_Opt + #define walk_dir nob_walk_dir + #define walk_dir_opt nob_walk_dir_opt + #define write_entire_file nob_write_entire_file + #define get_file_type nob_get_file_type + #define delete_file nob_delete_file + #define Dir_Entry Nob_Dir_Entry + #define dir_entry_open nob_dir_entry_open + #define dir_entry_next nob_dir_entry_next + #define dir_entry_close nob_dir_entry_close + #define return_defer nob_return_defer + #define da_append nob_da_append + #define da_free nob_da_free + #define da_append_many nob_da_append_many + #define da_resize nob_da_resize + #define da_reserve nob_da_reserve + #define da_last nob_da_last + #define da_remove_unordered nob_da_remove_unordered + #define da_foreach nob_da_foreach + #define fa_append nob_fa_append + #define swap nob_swap + #define String_Builder Nob_String_Builder + #define read_entire_file nob_read_entire_file + #define sb_appendf nob_sb_appendf + #define sb_append_buf nob_sb_append_buf + #define sb_append_cstr nob_sb_append_cstr + #define sb_append_null nob_sb_append_null + #define sb_append nob_sb_append + #define sb_pad_align nob_sb_pad_align + #define sb_free nob_sb_free + #define Proc Nob_Proc + #define INVALID_PROC NOB_INVALID_PROC + #define Fd Nob_Fd + #define Pipe Nob_Pipe + #define pipe_create nob_pipe_create + #define Chain Nob_Chain + #define Chain_Begin_Opt Nob_Chain_Begin_Opt + #define chain_begin nob_chain_begin + #define chain_begin_opt nob_chain_begin_opt + #define Chain_Cmd_Opt Nob_Chain_Cmd_Opt + #define chain_cmd nob_chain_cmd + #define chain_cmd_opt nob_chain_cmd_opt + #define Chain_End_Opt Nob_Chain_End_Opt + #define chain_end nob_chain_end + #define chain_end_opt nob_chain_end_opt + #define INVALID_FD NOB_INVALID_FD + #define fd_open_for_read nob_fd_open_for_read + #define fd_open_for_write nob_fd_open_for_write + #define fd_close nob_fd_close + #define Procs Nob_Procs + #define proc_wait nob_proc_wait + #define procs_wait nob_procs_wait + #define procs_wait_and_reset nob_procs_wait_and_reset + #define procs_append_with_flush nob_procs_append_with_flush + #define procs_flush nob_procs_flush + #define Cmd Nob_Cmd + #define Cmd_Redirect Nob_Cmd_Redirect + #define Cmd_Opt Nob_Cmd_Opt + #define cmd_run_opt nob_cmd_run_opt + #define cmd_run nob_cmd_run + #define cmd_render nob_cmd_render + #define cmd_append nob_cmd_append + #define cmd_extend nob_cmd_extend + #define cmd_free nob_cmd_free + #define cmd_run_async nob_cmd_run_async + #define cmd_run_async_and_reset nob_cmd_run_async_and_reset + #define cmd_run_async_redirect nob_cmd_run_async_redirect + #define cmd_run_async_redirect_and_reset nob_cmd_run_async_redirect_and_reset + #define cmd_run_sync nob_cmd_run_sync + #define cmd_run_sync_and_reset nob_cmd_run_sync_and_reset + #define cmd_run_sync_redirect nob_cmd_run_sync_redirect + #define cmd_run_sync_redirect_and_reset nob_cmd_run_sync_redirect_and_reset + #define temp_strdup nob_temp_strdup + #define temp_strndup nob_temp_strndup + #define temp_alloc nob_temp_alloc + #define temp_sprintf nob_temp_sprintf + #define temp_vsprintf nob_temp_vsprintf + #define temp_reset nob_temp_reset + #define temp_save nob_temp_save + #define temp_rewind nob_temp_rewind + #define path_name nob_path_name + // NOTE: rename(2) is widely known POSIX function. We never wanna collide with it. + // #define rename nob_rename + #define needs_rebuild nob_needs_rebuild + #define needs_rebuild1 nob_needs_rebuild1 + #define file_exists nob_file_exists + #define get_current_dir_temp nob_get_current_dir_temp + #define set_current_dir nob_set_current_dir + #define temp_dir_name nob_temp_dir_name + #define temp_file_name nob_temp_file_name + #define temp_file_ext nob_temp_file_ext + #define temp_running_executable_path nob_temp_running_executable_path + #define String_View Nob_String_View + #define temp_sv_to_cstr nob_temp_sv_to_cstr + #define sv_chop_by_delim nob_sv_chop_by_delim + #define sv_chop_left nob_sv_chop_left + #define sv_trim nob_sv_trim + #define sv_trim_left nob_sv_trim_left + #define sv_trim_right nob_sv_trim_right + #define sv_eq nob_sv_eq + #define sv_starts_with nob_sv_starts_with + #define sv_end_with nob_sv_end_with + #define sv_from_cstr nob_sv_from_cstr + #define sv_from_parts nob_sv_from_parts + #define sb_to_sv nob_sb_to_sv + #define win32_error_message nob_win32_error_message + #define nprocs nob_nprocs + #define nanos_since_unspecified_epoch nob_nanos_since_unspecified_epoch + #define NANOS_PER_SEC NOB_NANOS_PER_SEC + #endif // NOB_STRIP_PREFIX +#endif // NOB_STRIP_PREFIX_GUARD_ + +/* + Revision history: + + 3.2.2 (2026-02-06) Fix read_entire_dir crash on empty path (by @ysoftware) + 3.2.1 (2026-01-29) Fix the implicit declaration error when nob is included as a header (by @ysoftware) + 3.2.0 (2026-01-28) Introduce Chain API + - Nob_Chain + - Nob_Chain_Begin_Opt + - nob_chain_begin() + - nob_chain_begin_opt() + - Nob_Chain_Cmd_Opt + - nob_chain_cmd() + - nob_chain_cmd_opt() + - Nob_Chain_End_Opt + - nob_chain_end() + - nob_chain_end_opt() + Introduce some auxiliary things that were used in Chain API implementation, but might be useful outside of it: + - Nob_Pipe + - nob_pipe_create() + - nob_fa_append() + 3.1.0 (2026-01-22) Make nob_delete_file() be able to delete empty dir on Windows (by @rexim) + Introduce Directory Entry API - similar to POSIX dirent but with names that don't collide + - Nob_Dir_Entry + - nob_dir_entry_open() + - nob_dir_entry_next() + - nob_dir_entry_close() + Rewrite Directory Walking API using Directory Entry API + Introduce .post_order parameter to Nob_Walk_Dir_Opt which walks the directories in post order starting from leaf files + Rewrite nob_read_entire_dir() using Directory Entry API + 3.0.0 (2026-01-13) Improve C++ support (by @rexim) + - Fix various C++ compilers warnings and complains throughout the code. + - Reimplement nob_cmd_append() without taking a pointer to temporary array (some C++ compilers don't like that) + - Make default NOB_REBUILD_URSELF() try to recompile with C++ if __cplusplus macro is defined + Strip prefixes by default (by @rexim) + - Ignore NOB_STRIP_PREFIX macro + - Introduce NOB_UNSTRIP_PREFIX macro + BACKWARD INCOMPATIBLE CHANGE!!! If you had code that intentionally didn't enable NOB_STRIP_PREFIX + because all the names from nob.h were causing too many collisions for you, upgrading to 3.0.0 may break it. + In that case you should go and explicitly enable NOB_UNSTRIP_PREFIX where needed after upgrading. + Add nob_sb_append alias to nob_da_append (by @rexim) + 2.0.1 (2026-01-07) Fix Walk_Entry naming (by @Sinha-Ujjawal) + Using single String Builder in nob__walk_dir_opt_impl (by @Sinha-Ujjawal) + Add tcc to nob_cc_*() and NOB_REBUILD_URSELF() macros (by @vylsaz) + Fix building nob_read_entire_file() with tcc on windows (by @vylsaz) + Fix Y2038 in nob_needs_rebuild() (by @lnvitesace) + 2.0.0 (2026-01-06) Remove minirent.h (by @rexim) + BACKWARD INCOMPATIBLE CHANGE!!! If you were using minirent.h from this library + just use it directly from https://github.com/tsoding/minirent + or consider using the New Directory Walking API. + Introduce New Directory Walking API (by @rexim) + - NOB_WALK_CONT + - NOB_WALK_SKIP + - NOB_WALK_STOP + - Nob_Walk_Action + - Nob_Walk_Entry + - Nob_Walk_Func + - Nob_Walk_Dir_Opt + - nob_walk_dir() + - nob_walk_dir_opt() + Add support for Haiku to nob_temp_running_executable_path() (By @Cephon) + Make nob_file_exists() unfailable (By @rexim) + 1.27.0 (2025-12-30) Add .dont_reset option to cmd_run (by @Israel77) + Fix support for FreeBSD (by @cqundefine) + Strip prefixes from NOB_GO_REBUILD_URSELF and NOB_GO_REBUILD_URSELF_PLUS (by @huwwa) + Add /Fo flag to MSVC version of nob_cc_output() (by @ratchetfreak) + 1.26.0 (2025-12-28) Introduce customizable log handlers (by @rexim) + - Add nob_log_handler + - Add nob_set_log_handler + - Add nob_get_log_handler + - Add nob_default_log_handler + - Add nob_cancer_log_handler + Introduce nob_temp_vsprintf (by @rexim) + Fix compilation error on Windows when NOB_NO_ECHO is enabled (by @mlorenc227) + Do not redefine _CRT_SECURE_NO_WARNINGS if it's already defined (by @vylsaz) + 1.25.1 (2025-11-06) Fix forward declaration of _NSGetExecutablePath on MacOS (by @agss0) + 1.25.0 (2025-10-25) - Add nob_sb_pad_align() + - Add nob_swap() + - Add nob_temp_strndup() + - Add nob_temp_dir_name() + - Add nob_temp_file_name() + - Add nob_temp_file_ext() + - Add nob_temp_running_executable_path() + 1.24.0 (2025-10-23) Introduce NOB_NO_ECHO macro flag (@rexim) + 1.23.0 (2025-08-22) Introduce new API for running commands (by @rexim, @programmerlexi, @0x152a) + - Add nob_cmd_run() + - Add nob_cmd_run_opt() + - Add struct Nob_Cmd_Opt + - Add nob_procs_flush() + - Add nob_nprocs() + Deprecate old API for running commands. (by @rexim) + We do not plan to delete this API any time, but we believe that the new one is more convenient. + - Deprecate struct Nob_Cmd_Redirect{} (it's not explicitly marked with NOB_DEPRECATED, but functions that use it are) + - Turn nob_cmd_run_async() into a function (otherwise it's not deprecatable with NOB_DEPRECATED) + - Deprecate nob_cmd_run_async() + - Deprecate nob_cmd_run_async_and_reset() + - Deprecate nob_cmd_run_async_redirect() + - Deprecate nob_cmd_run_async_redirect_and_reset() + - Deprecate nob_cmd_run_sync() + - Deprecate nob_cmd_run_sync_and_reset() + - Deprecate nob_cmd_run_sync_redirect() + - Deprecate nob_cmd_run_sync_redirect_and_reset() + - Deprecate nob_procs_append_with_flush() + - Deprecate nob_procs_wait_and_reset() + Introduce deprecation mechanism (by @yuI4140, @rexim) + By default, deprecation warnings are not reported. You have to #define NOB_WARN_DEPRECATED to enable them. + - Add NOB_DEPRECATED() + - Add NOB_WARN_DEPRECATED + Add NOB_DECLTYPE_CAST() for C++-compatible casting of allocation results (by @rexim) + Introduce basic performance measuring mechanism (By @mikmart) + - Add nob_nanos_since_unspecified_epoch() + - Add NOB_NANOS_PER_SEC + 1.22.0 (2025-08-12) Add NOBDEF macro to the beginning of function declarations (by @minefreak19) + Add more flags to MSVC nob_cc_flags() (by @PieVieRo) + 1.21.0 (2025-08-11) Add NOB_NO_MINIRENT guard for "minirent.h" (by @fietec) + 1.20.9 (2025-08-11) Fix warnings on Windows: Define _CRT_SECURE_NO_WARNINGS, Rename mkdir to _mkdir (by @OetkenPurveyorOfCode) + 1.20.8 (2025-08-11) Fix the bug with nob_get_file_type() not identifying symlinks correctly on POSIX (By @samuellieberman) + 1.20.7 (2025-07-29) Align nob_temp_alloc() allocations by the word size (By @rexim) + 1.20.6 (2025-05-16) Never strip nob_* suffix from nob_rename (By @rexim) + 1.20.5 (2025-05-16) NOB_PRINTF_FORMAT() support for MinGW (By @KillerxDBr) + 1.20.4 (2025-05-16) More reliable rendering of the Windows command (By @vylsaz) + 1.20.3 (2025-05-16) Add check for __clang__ along with _MSC_VER checks (By @nashiora) + 1.20.2 (2025-04-24) Report the program name that failed to start up in nob_cmd_run_async_redirect() (By @rexim) + 1.20.1 (2025-04-16) Use vsnprintf() in nob_sb_appendf() instead of vsprintf() (By @LainLayer) + 1.20.0 (2025-04-16) Introduce nob_cc(), nob_cc_flags(), nob_cc_inputs(), nob_cc_output() macros (By @rexim) + 1.19.0 (2025-03-25) Add nob_procs_append_with_flush() (By @rexim and @anion155) + 1.18.0 (2025-03-24) Add nob_da_foreach() (By @rexim) + Allow file sizes greater than 2GB to be read on windows (By @satchelfrost and @KillerxDBr) + Fix nob_fd_open_for_write behaviour on windows so it truncates the opened files (By @twixuss) + 1.17.0 (2025-03-16) Factor out nob_da_reserve() (By @rexim) + Add nob_sb_appendf() (By @angelcaru) + 1.16.1 (2025-03-16) Make nob_da_resize() exponentially grow capacity similar to no_da_append_many() + 1.16.0 (2025-03-16) Introduce NOB_PRINTF_FORMAT + 1.15.1 (2025-03-16) Make nob.h compilable in gcc/clang with -std=c99 on POSIX. This includes: + not using strsignal() + using S_IS* stat macros instead of S_IF* flags + 1.15.0 (2025-03-03) Add nob_sv_chop_left() + 1.14.1 (2025-03-02) Add NOB_EXPERIMENTAL_DELETE_OLD flag that enables deletion of nob.old in Go Rebuild Urself™ Technology + 1.14.0 (2025-02-17) Add nob_da_last() + Add nob_da_remove_unordered() + 1.13.1 (2025-02-17) Fix segfault in nob_delete_file() (By @SileNce5k) + 1.13.0 (2025-02-11) Add nob_da_resize() (By @satchelfrost) + 1.12.0 (2025-02-04) Add nob_delete_file() + Add nob_sv_start_with() + 1.11.0 (2025-02-04) Add NOB_GO_REBUILD_URSELF_PLUS() (By @rexim) + 1.10.0 (2025-02-04) Make NOB_ASSERT, NOB_REALLOC, and NOB_FREE redefinable (By @OleksiiBulba) + 1.9.1 (2025-02-04) Fix signature of nob_get_current_dir_temp() (By @julianstoerig) + 1.9.0 (2024-11-06) Add Nob_Cmd_Redirect mechanism (By @rexim) + Add nob_path_name() (By @0dminnimda) + 1.8.0 (2024-11-03) Add nob_cmd_extend() (By @0dminnimda) + 1.7.0 (2024-11-03) Add nob_win32_error_message and NOB_WIN32_ERR_MSG_SIZE (By @KillerxDBr) + 1.6.0 (2024-10-27) Add nob_cmd_run_sync_and_reset() + Add nob_sb_to_sv() + Add nob_procs_wait_and_reset() + 1.5.1 (2024-10-25) Include limits.h for Linux musl libc (by @pgalkin) + 1.5.0 (2024-10-23) Add nob_get_current_dir_temp() + Add nob_set_current_dir() + 1.4.0 (2024-10-21) Fix UX issues with NOB_GO_REBUILD_URSELF on Windows when you call nob without the .exe extension (By @pgalkin) + Add nob_sv_end_with (By @pgalkin) + 1.3.2 (2024-10-21) Fix unreachable error in nob_log on passing NOB_NO_LOGS + 1.3.1 (2024-10-21) Fix redeclaration error for minimal_log_level (By @KillerxDBr) + 1.3.0 (2024-10-17) Add NOB_UNREACHABLE + 1.2.2 (2024-10-16) Fix compilation of nob_cmd_run_sync_and_reset on Windows (By @KillerxDBr) + 1.2.1 (2024-10-16) Add a separate include guard for NOB_STRIP_PREFIX. + 1.2.0 (2024-10-15) Make NOB_DA_INIT_CAP redefinable + Add NOB_STRIP_PREFIX which strips off nob_* prefix from all the user facing names + Add NOB_UNUSED macro + Add NOB_TODO macro + Add nob_sv_trim_left and nob_sv_trim_right declarations to the header part + 1.1.1 (2024-10-15) Remove forward declaration for is_path1_modified_after_path2 + 1.1.0 (2024-10-15) nob_minimal_log_level + nob_cmd_run_sync_and_reset + 1.0.0 (2024-10-15) first release based on https://github.com/tsoding/musializer/blob/4ac7cce9874bc19e02d8c160c8c6229de8919401/nob.h +*/ + +/* + Version Conventions: + + We are following https://semver.org/ so the version has a format MAJOR.MINOR.PATCH: + - Modifying comments does not update the version. + - PATCH is incremented in case of a bug fix or refactoring without touching the API. + - MINOR is incremented when new functions and/or types are added in a way that does + not break any existing user code. We want to do this in the majority of the situation. + If we want to delete a certain function or type in favor of another one we should + just add the new function/type and deprecate the old one in a backward compatible way + and let them co-exist for a while. + - MAJOR update should be just a periodic cleanup of the DEPRECATED functions and types + without really modifying any existing functionality. + - Breaking backward compatibility in a MINOR release should be considered a bug and + should be promptly fixed in the next PATCH release. + + API conventions: + + - All the user facing names should be prefixed with `nob_`, `NOB_`, or `Nob_` depending on the case. + - The prefixes of non-redefinable names should be stripped in NOB_STRIP_PREFIX_GUARD_ section, + unless explicitly stated otherwise like in case of nob_log() or nob_rename(). + - Internal (private) names should be prefixed with `nob__` (double underscore). The user code is discouraged + from using such names since they are allowed to be broken in a backward incompatible way even in PATCH + releases. (This is why they are internal) + - If a public macro uses an private function internally such function must be forward declared in the NOB_H_ + section. +*/ + +/* + ------------------------------------------------------------------------------ + This software is available under 2 licenses -- choose whichever you prefer. + ------------------------------------------------------------------------------ + ALTERNATIVE A - MIT License + Copyright (c) 2024 Alexey Kutepov + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is furnished to do + so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + ------------------------------------------------------------------------------ + ALTERNATIVE B - Public Domain (www.unlicense.org) + This is free and unencumbered software released into the public domain. + Anyone is free to copy, modify, publish, use, compile, sell, or distribute this + software, either in source code form or as a compiled binary, for any purpose, + commercial or non-commercial, and by any means. + In jurisdictions that recognize copyright laws, the author or authors of this + software dedicate any and all copyright interest in the software to the public + domain. We make this dedication for the benefit of the public at large and to + the detriment of our heirs and successors. We intend this dedication to be an + overt act of relinquishment in perpetuity of all present and future rights to + this software under copyright law. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ------------------------------------------------------------------------------ +*/ diff --git a/glc/nob.old b/glc/nob.old new file mode 100755 index 0000000000000000000000000000000000000000..d3d5ff2aabec0c9010f9c03546f991878d5d152b GIT binary patch literal 55952 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 Iq$REY2lft_6#xJL literal 0 HcmV?d00001 diff --git a/glc/src/bindings.h b/glc/src/bindings.h new file mode 100644 index 0000000..dac313a --- /dev/null +++ b/glc/src/bindings.h @@ -0,0 +1 @@ +#include "glc_api.h" diff --git a/glc/src/gl/buffers.c b/glc/src/gl/buffers.c new file mode 100644 index 0000000..6368fd5 --- /dev/null +++ b/glc/src/gl/buffers.c @@ -0,0 +1,52 @@ +#include "../glc.h" // IWYU pragma: keep + +u32 gpu_buffer_create(GpuBuffer *buf, float *vertices, u32 vertex_count, u32 *indices, int idx_count) { + u32 vao = 0, vbo = 0, ebo = 0, vao_stride = 0; + + glGenVertexArrays(1, &vao); + glBindVertexArray(vao); + + if (!vertices) return 1; + if (!indices) return 2; + + vao_stride = DEFAULT_VERTEX_STRIDE; + + glGenBuffers(1, &vbo); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, vertex_count * vao_stride * sizeof(*vertices), vertices, GL_STATIC_DRAW); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(*vertices) * vao_stride, (void*)0); + glEnableVertexAttribArray(0); + + glGenBuffers(1, &ebo); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, idx_count * vao_stride * sizeof(*indices), indices, GL_STATIC_DRAW); + + glBindVertexArray(0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + buf->vao = vao; + buf->vbo = vbo; + buf->ebo = ebo; + buf->stride = vao_stride; + buf->index_count = idx_count; + + return 0; +} + +void gpu_buffer_destroy(GpuBuffer *buffer) { + if (buffer->vbo != 0) { + glDeleteBuffers(1, &buffer->vbo); + } + if (buffer->ebo != 0) { + glDeleteBuffers(1, &buffer->ebo); + } + if (buffer->vao != 0) { + glDeleteVertexArrays(1, &buffer->vao); + } +} + +void gpu_buffer_draw(GpuBuffer *buf) { + glBindVertexArray(buf->vao); + glDrawElements(GL_TRIANGLES, buf->index_count, GL_UNSIGNED_INT, 0); +} diff --git a/glc/src/gl/clear.c b/glc/src/gl/clear.c new file mode 100644 index 0000000..021c545 --- /dev/null +++ b/glc/src/gl/clear.c @@ -0,0 +1,6 @@ +#include "../glc.h" // IWYU pragma: keep + +void gpu_clear(float r, float g, float b, float a) { + glClearColor(r, g, b, a); + glClear(GL_COLOR_BUFFER_BIT); +} diff --git a/glc/src/gl/error.c b/glc/src/gl/error.c new file mode 100644 index 0000000..6baee0b --- /dev/null +++ b/glc/src/gl/error.c @@ -0,0 +1,25 @@ +#include "../glc.h" // IWYU pragma: keep + +INTERN +void gpu_shader_error_get(uint32_t shader) { + int success; + char infoLog[512]; + glGetShaderiv(shader, GL_COMPILE_STATUS, &success); + + if (!success) { + glGetShaderInfoLog(shader, 512, NULL, infoLog); + err("[SHADER_ERROR] Failed to compile shader: %s\n", infoLog); + } +} + +INTERN +void gpu_program_handle_error_get(GpuProgramHandle program) { + int success; + char info_log[512]; + + glGetProgramiv(program, GL_LINK_STATUS, &success); + if (!success) { + glGetProgramInfoLog(program, 512, NULL, info_log); + err("[PROGRAM_ERROR] Failed to link program: %s\n", info_log); + } +} diff --git a/glc/src/gl/gpu_program.c b/glc/src/gl/gpu_program.c new file mode 100644 index 0000000..a5b7f7e --- /dev/null +++ b/glc/src/gl/gpu_program.c @@ -0,0 +1,62 @@ +#include "../glc.h" // IWYU pragma: keep + +INTERN +GpuShaderHandle gpu_shader_compile(char const *src, GpuShaderType type) { + uint32_t shader = glCreateShader(type); + + glShaderSource(shader, 1, &src, NULL); + glCompileShader(shader); + gpu_shader_error_get(shader); + + return shader; + +} + +INTERN +GpuProgramHandle gpu_program_handle_link(GpuProgramHandle handle, GpuShaderHandle vertex_shader, GpuShaderHandle fragment_shader) { + + glAttachShader(handle, vertex_shader); + glAttachShader(handle, fragment_shader); + glLinkProgram(handle); + gpu_program_handle_error_get(handle); + + glDeleteShader(vertex_shader); + glDeleteShader(fragment_shader); + + return handle; +} + +INTERN +GpuProgramHandle gpu_program_handle_create(const char *vert_src, const char *frag_src) { + GpuShaderHandle vert_shader = gpu_shader_compile(vert_src, GL_VERTEX_SHADER); + GpuShaderHandle frag_shader = gpu_shader_compile(frag_src, GL_FRAGMENT_SHADER); + GpuProgramHandle handle = glCreateProgram(); + gpu_program_handle_link(handle, vert_shader, frag_shader); + + return handle; +} + +API +GpuProgram gpu_program_create(const char *vert_src, const char *frag_src) { + GpuProgram program = {0}; + program.handle = gpu_program_handle_create(vert_src, frag_src); + + return program; +} + +API +void gpu_program_use(GpuProgram *program) { + gpu_program_handle_use(program->handle); +} + +INTERN +void gpu_program_handle_use(GpuProgramHandle handle) { + glUseProgram(handle); +} + +INTERN +void gpu_program_handle_clear() { + gpu_program_handle_use(0); +} + + diff --git a/glc/src/glad.c b/glc/src/glad.c new file mode 100644 index 0000000..7eba651 --- /dev/null +++ b/glc/src/glad.c @@ -0,0 +1,1833 @@ +/* + + OpenGL loader generated by glad 0.1.36 on Sun Feb 15 08:27:07 2026. + + Language/Generator: C/C++ + Specification: gl + APIs: gl=4.6 + Profile: core + Extensions: + + Loader: True + Local files: False + Omit khrplatform: False + Reproducible: False + + Commandline: + --profile="core" --api="gl=4.6" --generator="c" --spec="gl" --extensions="" + Online: + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D4.6 +*/ + +#include +#include +#include +#include "../lib/include/glad/glad.h" + +static void* get_proc(const char *namez); + +#if defined(_WIN32) || defined(__CYGWIN__) +#ifndef _WINDOWS_ +#undef APIENTRY +#endif +#include +static HMODULE libGL; + +typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); +static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; + +#ifdef _MSC_VER +#ifdef __has_include + #if __has_include() + #define HAVE_WINAPIFAMILY 1 + #endif +#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ + #define HAVE_WINAPIFAMILY 1 +#endif +#endif + +#ifdef HAVE_WINAPIFAMILY + #include + #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + #define IS_UWP 1 + #endif +#endif + +static +int open_gl(void) { +#ifndef IS_UWP + libGL = LoadLibraryW(L"opengl32.dll"); + if(libGL != NULL) { + void (* tmp)(void); + tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); + gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; + return gladGetProcAddressPtr != NULL; + } +#endif + + return 0; +} + +static +void close_gl(void) { + if(libGL != NULL) { + FreeLibrary((HMODULE) libGL); + libGL = NULL; + } +} +#else +#include +static void* libGL; + +#if !defined(__APPLE__) && !defined(__HAIKU__) +typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); +static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; +#endif + +static +int open_gl(void) { +#ifdef __APPLE__ + static const char *NAMES[] = { + "../Frameworks/OpenGL.framework/OpenGL", + "/Library/Frameworks/OpenGL.framework/OpenGL", + "/System/Library/Frameworks/OpenGL.framework/OpenGL", + "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" + }; +#else + static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; +#endif + + unsigned int index = 0; + for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { + libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); + + if(libGL != NULL) { +#if defined(__APPLE__) || defined(__HAIKU__) + return 1; +#else + gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, + "glXGetProcAddressARB"); + return gladGetProcAddressPtr != NULL; +#endif + } + } + + return 0; +} + +static +void close_gl(void) { + if(libGL != NULL) { + dlclose(libGL); + libGL = NULL; + } +} +#endif + +static +void* get_proc(const char *namez) { + void* result = NULL; + if(libGL == NULL) return NULL; + +#if !defined(__APPLE__) && !defined(__HAIKU__) + if(gladGetProcAddressPtr != NULL) { + result = gladGetProcAddressPtr(namez); + } +#endif + if(result == NULL) { +#if defined(_WIN32) || defined(__CYGWIN__) + result = (void*)GetProcAddress((HMODULE) libGL, namez); +#else + result = dlsym(libGL, namez); +#endif + } + + return result; +} + +int gladLoadGL(void) { + int status = 0; + + if(open_gl()) { + status = gladLoadGLLoader(&get_proc); + close_gl(); + } + + return status; +} + +struct gladGLversionStruct GLVersion = { 0, 0 }; + +#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) +#define _GLAD_IS_SOME_NEW_VERSION 1 +#endif + +static int max_loaded_major; +static int max_loaded_minor; + +static const char *exts = NULL; +static int num_exts_i = 0; +static char **exts_i = NULL; + +static int get_exts(void) { +#ifdef _GLAD_IS_SOME_NEW_VERSION + if(max_loaded_major < 3) { +#endif + exts = (const char *)glGetString(GL_EXTENSIONS); +#ifdef _GLAD_IS_SOME_NEW_VERSION + } else { + int index; + + num_exts_i = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); + if (num_exts_i > 0) { + exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); + } + + if (exts_i == NULL) { + return 0; + } + + for(index = 0; index < num_exts_i; index++) { + const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); + size_t len = strlen(gl_str_tmp); + + char *local_str = (char*)malloc((len+1) * sizeof(char)); + if(local_str != NULL) { + memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); + } + exts_i[index] = local_str; + } + } +#endif + return 1; +} + +static void free_exts(void) { + if (exts_i != NULL) { + int index; + for(index = 0; index < num_exts_i; index++) { + free((char *)exts_i[index]); + } + free((void *)exts_i); + exts_i = NULL; + } +} + +static int has_ext(const char *ext) { +#ifdef _GLAD_IS_SOME_NEW_VERSION + if(max_loaded_major < 3) { +#endif + const char *extensions; + const char *loc; + const char *terminator; + extensions = exts; + if(extensions == NULL || ext == NULL) { + return 0; + } + + while(1) { + loc = strstr(extensions, ext); + if(loc == NULL) { + return 0; + } + + terminator = loc + strlen(ext); + if((loc == extensions || *(loc - 1) == ' ') && + (*terminator == ' ' || *terminator == '\0')) { + return 1; + } + extensions = terminator; + } +#ifdef _GLAD_IS_SOME_NEW_VERSION + } else { + int index; + if(exts_i == NULL) return 0; + for(index = 0; index < num_exts_i; index++) { + const char *e = exts_i[index]; + + if(exts_i[index] != NULL && strcmp(e, ext) == 0) { + return 1; + } + } + } +#endif + + return 0; +} +int GLAD_GL_VERSION_1_0 = 0; +int GLAD_GL_VERSION_1_1 = 0; +int GLAD_GL_VERSION_1_2 = 0; +int GLAD_GL_VERSION_1_3 = 0; +int GLAD_GL_VERSION_1_4 = 0; +int GLAD_GL_VERSION_1_5 = 0; +int GLAD_GL_VERSION_2_0 = 0; +int GLAD_GL_VERSION_2_1 = 0; +int GLAD_GL_VERSION_3_0 = 0; +int GLAD_GL_VERSION_3_1 = 0; +int GLAD_GL_VERSION_3_2 = 0; +int GLAD_GL_VERSION_3_3 = 0; +int GLAD_GL_VERSION_4_0 = 0; +int GLAD_GL_VERSION_4_1 = 0; +int GLAD_GL_VERSION_4_2 = 0; +int GLAD_GL_VERSION_4_3 = 0; +int GLAD_GL_VERSION_4_4 = 0; +int GLAD_GL_VERSION_4_5 = 0; +int GLAD_GL_VERSION_4_6 = 0; +PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram = NULL; +PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; +PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; +PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; +PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; +PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed = NULL; +PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; +PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; +PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; +PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; +PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; +PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase = NULL; +PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange = NULL; +PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; +PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; +PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; +PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture = NULL; +PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures = NULL; +PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline = NULL; +PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; +PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; +PFNGLBINDSAMPLERSPROC glad_glBindSamplers = NULL; +PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; +PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit = NULL; +PFNGLBINDTEXTURESPROC glad_glBindTextures = NULL; +PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback = NULL; +PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; +PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer = NULL; +PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers = NULL; +PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; +PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; +PFNGLBLENDEQUATIONSEPARATEIPROC glad_glBlendEquationSeparatei = NULL; +PFNGLBLENDEQUATIONIPROC glad_glBlendEquationi = NULL; +PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; +PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; +PFNGLBLENDFUNCSEPARATEIPROC glad_glBlendFuncSeparatei = NULL; +PFNGLBLENDFUNCIPROC glad_glBlendFunci = NULL; +PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; +PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer = NULL; +PFNGLBUFFERDATAPROC glad_glBufferData = NULL; +PFNGLBUFFERSTORAGEPROC glad_glBufferStorage = NULL; +PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; +PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus = NULL; +PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; +PFNGLCLEARPROC glad_glClear = NULL; +PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData = NULL; +PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData = NULL; +PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; +PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; +PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; +PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; +PFNGLCLEARCOLORPROC glad_glClearColor = NULL; +PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; +PFNGLCLEARDEPTHFPROC glad_glClearDepthf = NULL; +PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData = NULL; +PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv = NULL; +PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; +PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage = NULL; +PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage = NULL; +PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; +PFNGLCLIPCONTROLPROC glad_glClipControl = NULL; +PFNGLCOLORMASKPROC glad_glColorMask = NULL; +PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; +PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; +PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; +PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; +PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; +PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D = NULL; +PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D = NULL; +PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; +PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData = NULL; +PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData = NULL; +PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; +PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; +PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; +PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D = NULL; +PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D = NULL; +PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D = NULL; +PFNGLCREATEBUFFERSPROC glad_glCreateBuffers = NULL; +PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers = NULL; +PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; +PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines = NULL; +PFNGLCREATEQUERIESPROC glad_glCreateQueries = NULL; +PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers = NULL; +PFNGLCREATESAMPLERSPROC glad_glCreateSamplers = NULL; +PFNGLCREATESHADERPROC glad_glCreateShader = NULL; +PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv = NULL; +PFNGLCREATETEXTURESPROC glad_glCreateTextures = NULL; +PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks = NULL; +PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays = NULL; +PFNGLCULLFACEPROC glad_glCullFace = NULL; +PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback = NULL; +PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl = NULL; +PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert = NULL; +PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; +PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; +PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; +PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines = NULL; +PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; +PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; +PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; +PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; +PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; +PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; +PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks = NULL; +PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; +PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; +PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; +PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; +PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv = NULL; +PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed = NULL; +PFNGLDEPTHRANGEFPROC glad_glDepthRangef = NULL; +PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; +PFNGLDISABLEPROC glad_glDisable = NULL; +PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; +PFNGLDISABLEIPROC glad_glDisablei = NULL; +PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute = NULL; +PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect = NULL; +PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; +PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect = NULL; +PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; +PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance = NULL; +PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; +PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; +PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; +PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; +PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect = NULL; +PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance = NULL; +PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; +PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; +PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback = NULL; +PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced = NULL; +PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream = NULL; +PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced = NULL; +PFNGLENABLEPROC glad_glEnable = NULL; +PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; +PFNGLENABLEIPROC glad_glEnablei = NULL; +PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; +PFNGLENDQUERYPROC glad_glEndQuery = NULL; +PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed = NULL; +PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; +PFNGLFENCESYNCPROC glad_glFenceSync = NULL; +PFNGLFINISHPROC glad_glFinish = NULL; +PFNGLFLUSHPROC glad_glFlush = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; +PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange = NULL; +PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri = NULL; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; +PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; +PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; +PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; +PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; +PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; +PFNGLFRONTFACEPROC glad_glFrontFace = NULL; +PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; +PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; +PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines = NULL; +PFNGLGENQUERIESPROC glad_glGenQueries = NULL; +PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; +PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; +PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; +PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks = NULL; +PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; +PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; +PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap = NULL; +PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv = NULL; +PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; +PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName = NULL; +PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName = NULL; +PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv = NULL; +PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; +PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; +PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; +PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; +PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; +PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; +PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; +PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; +PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; +PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; +PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; +PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; +PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; +PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage = NULL; +PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage = NULL; +PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog = NULL; +PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v = NULL; +PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; +PFNGLGETERRORPROC glad_glGetError = NULL; +PFNGLGETFLOATI_VPROC glad_glGetFloati_v = NULL; +PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; +PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; +PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; +PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv = NULL; +PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus = NULL; +PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; +PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; +PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; +PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; +PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v = NULL; +PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ = NULL; +PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; +PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v = NULL; +PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv = NULL; +PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv = NULL; +PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData = NULL; +PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv = NULL; +PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv = NULL; +PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv = NULL; +PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel = NULL; +PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel = NULL; +PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; +PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary = NULL; +PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; +PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv = NULL; +PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog = NULL; +PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv = NULL; +PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex = NULL; +PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation = NULL; +PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex = NULL; +PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName = NULL; +PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv = NULL; +PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv = NULL; +PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; +PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v = NULL; +PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv = NULL; +PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v = NULL; +PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv = NULL; +PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv = NULL; +PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; +PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; +PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; +PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; +PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; +PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; +PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; +PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; +PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; +PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; +PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat = NULL; +PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; +PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; +PFNGLGETSTRINGPROC glad_glGetString = NULL; +PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; +PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex = NULL; +PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation = NULL; +PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; +PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; +PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; +PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; +PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; +PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; +PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; +PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; +PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage = NULL; +PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv = NULL; +PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv = NULL; +PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv = NULL; +PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv = NULL; +PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv = NULL; +PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv = NULL; +PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; +PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v = NULL; +PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v = NULL; +PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv = NULL; +PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; +PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; +PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; +PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv = NULL; +PFNGLGETUNIFORMDVPROC glad_glGetUniformdv = NULL; +PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; +PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; +PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; +PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv = NULL; +PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv = NULL; +PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv = NULL; +PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; +PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; +PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv = NULL; +PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; +PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; +PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; +PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; +PFNGLGETNCOLORTABLEPROC glad_glGetnColorTable = NULL; +PFNGLGETNCOMPRESSEDTEXIMAGEPROC glad_glGetnCompressedTexImage = NULL; +PFNGLGETNCONVOLUTIONFILTERPROC glad_glGetnConvolutionFilter = NULL; +PFNGLGETNHISTOGRAMPROC glad_glGetnHistogram = NULL; +PFNGLGETNMAPDVPROC glad_glGetnMapdv = NULL; +PFNGLGETNMAPFVPROC glad_glGetnMapfv = NULL; +PFNGLGETNMAPIVPROC glad_glGetnMapiv = NULL; +PFNGLGETNMINMAXPROC glad_glGetnMinmax = NULL; +PFNGLGETNPIXELMAPFVPROC glad_glGetnPixelMapfv = NULL; +PFNGLGETNPIXELMAPUIVPROC glad_glGetnPixelMapuiv = NULL; +PFNGLGETNPIXELMAPUSVPROC glad_glGetnPixelMapusv = NULL; +PFNGLGETNPOLYGONSTIPPLEPROC glad_glGetnPolygonStipple = NULL; +PFNGLGETNSEPARABLEFILTERPROC glad_glGetnSeparableFilter = NULL; +PFNGLGETNTEXIMAGEPROC glad_glGetnTexImage = NULL; +PFNGLGETNUNIFORMDVPROC glad_glGetnUniformdv = NULL; +PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv = NULL; +PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv = NULL; +PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv = NULL; +PFNGLHINTPROC glad_glHint = NULL; +PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData = NULL; +PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData = NULL; +PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer = NULL; +PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData = NULL; +PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData = NULL; +PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer = NULL; +PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage = NULL; +PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage = NULL; +PFNGLISBUFFERPROC glad_glIsBuffer = NULL; +PFNGLISENABLEDPROC glad_glIsEnabled = NULL; +PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; +PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; +PFNGLISPROGRAMPROC glad_glIsProgram = NULL; +PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline = NULL; +PFNGLISQUERYPROC glad_glIsQuery = NULL; +PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; +PFNGLISSAMPLERPROC glad_glIsSampler = NULL; +PFNGLISSHADERPROC glad_glIsShader = NULL; +PFNGLISSYNCPROC glad_glIsSync = NULL; +PFNGLISTEXTUREPROC glad_glIsTexture = NULL; +PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback = NULL; +PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; +PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; +PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; +PFNGLLOGICOPPROC glad_glLogicOp = NULL; +PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; +PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; +PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer = NULL; +PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange = NULL; +PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier = NULL; +PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion = NULL; +PFNGLMINSAMPLESHADINGPROC glad_glMinSampleShading = NULL; +PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect = NULL; +PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC glad_glMultiDrawArraysIndirectCount = NULL; +PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; +PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect = NULL; +PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC glad_glMultiDrawElementsIndirectCount = NULL; +PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; +PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; +PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; +PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; +PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; +PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; +PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; +PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; +PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData = NULL; +PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage = NULL; +PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData = NULL; +PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer = NULL; +PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers = NULL; +PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri = NULL; +PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer = NULL; +PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage = NULL; +PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample = NULL; +PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; +PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; +PFNGLOBJECTLABELPROC glad_glObjectLabel = NULL; +PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel = NULL; +PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv = NULL; +PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri = NULL; +PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback = NULL; +PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; +PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; +PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; +PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; +PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; +PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; +PFNGLPOINTSIZEPROC glad_glPointSize = NULL; +PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; +PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; +PFNGLPOLYGONOFFSETCLAMPPROC glad_glPolygonOffsetClamp = NULL; +PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup = NULL; +PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; +PFNGLPROGRAMBINARYPROC glad_glProgramBinary = NULL; +PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri = NULL; +PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d = NULL; +PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv = NULL; +PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f = NULL; +PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv = NULL; +PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i = NULL; +PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv = NULL; +PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui = NULL; +PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv = NULL; +PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d = NULL; +PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv = NULL; +PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f = NULL; +PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv = NULL; +PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i = NULL; +PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv = NULL; +PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui = NULL; +PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv = NULL; +PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d = NULL; +PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv = NULL; +PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f = NULL; +PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv = NULL; +PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i = NULL; +PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv = NULL; +PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui = NULL; +PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv = NULL; +PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d = NULL; +PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv = NULL; +PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f = NULL; +PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv = NULL; +PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i = NULL; +PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv = NULL; +PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui = NULL; +PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv = NULL; +PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv = NULL; +PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; +PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup = NULL; +PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; +PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; +PFNGLREADPIXELSPROC glad_glReadPixels = NULL; +PFNGLREADNPIXELSPROC glad_glReadnPixels = NULL; +PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler = NULL; +PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; +PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback = NULL; +PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; +PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; +PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; +PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; +PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; +PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; +PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; +PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; +PFNGLSCISSORPROC glad_glScissor = NULL; +PFNGLSCISSORARRAYVPROC glad_glScissorArrayv = NULL; +PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed = NULL; +PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv = NULL; +PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; +PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; +PFNGLSHADERBINARYPROC glad_glShaderBinary = NULL; +PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; +PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding = NULL; +PFNGLSPECIALIZESHADERPROC glad_glSpecializeShader = NULL; +PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; +PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; +PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; +PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; +PFNGLSTENCILOPPROC glad_glStencilOp = NULL; +PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; +PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; +PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange = NULL; +PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; +PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; +PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; +PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; +PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; +PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; +PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; +PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; +PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; +PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; +PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; +PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; +PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; +PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; +PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; +PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; +PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; +PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; +PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; +PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D = NULL; +PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D = NULL; +PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample = NULL; +PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D = NULL; +PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample = NULL; +PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; +PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; +PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; +PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier = NULL; +PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer = NULL; +PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange = NULL; +PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv = NULL; +PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv = NULL; +PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf = NULL; +PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv = NULL; +PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri = NULL; +PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv = NULL; +PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D = NULL; +PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D = NULL; +PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample = NULL; +PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D = NULL; +PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample = NULL; +PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D = NULL; +PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D = NULL; +PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D = NULL; +PFNGLTEXTUREVIEWPROC glad_glTextureView = NULL; +PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase = NULL; +PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; +PFNGLUNIFORM1DPROC glad_glUniform1d = NULL; +PFNGLUNIFORM1DVPROC glad_glUniform1dv = NULL; +PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; +PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; +PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; +PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; +PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; +PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; +PFNGLUNIFORM2DPROC glad_glUniform2d = NULL; +PFNGLUNIFORM2DVPROC glad_glUniform2dv = NULL; +PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; +PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; +PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; +PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; +PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; +PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; +PFNGLUNIFORM3DPROC glad_glUniform3d = NULL; +PFNGLUNIFORM3DVPROC glad_glUniform3dv = NULL; +PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; +PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; +PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; +PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; +PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; +PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; +PFNGLUNIFORM4DPROC glad_glUniform4d = NULL; +PFNGLUNIFORM4DVPROC glad_glUniform4dv = NULL; +PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; +PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; +PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; +PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; +PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; +PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; +PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; +PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv = NULL; +PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; +PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv = NULL; +PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; +PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv = NULL; +PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; +PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv = NULL; +PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; +PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv = NULL; +PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; +PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv = NULL; +PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; +PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv = NULL; +PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; +PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv = NULL; +PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; +PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv = NULL; +PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; +PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv = NULL; +PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; +PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer = NULL; +PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; +PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages = NULL; +PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; +PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline = NULL; +PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding = NULL; +PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat = NULL; +PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat = NULL; +PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat = NULL; +PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor = NULL; +PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer = NULL; +PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer = NULL; +PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers = NULL; +PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; +PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; +PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; +PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; +PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; +PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; +PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; +PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; +PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; +PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; +PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; +PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; +PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; +PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; +PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; +PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; +PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; +PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; +PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; +PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; +PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; +PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; +PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; +PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; +PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; +PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; +PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; +PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; +PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; +PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; +PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; +PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; +PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; +PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; +PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; +PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding = NULL; +PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; +PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat = NULL; +PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; +PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; +PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; +PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; +PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; +PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; +PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; +PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; +PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; +PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; +PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; +PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; +PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; +PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; +PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; +PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; +PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; +PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; +PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; +PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; +PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat = NULL; +PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; +PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d = NULL; +PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv = NULL; +PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d = NULL; +PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv = NULL; +PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d = NULL; +PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv = NULL; +PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d = NULL; +PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv = NULL; +PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat = NULL; +PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer = NULL; +PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; +PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; +PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; +PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; +PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; +PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; +PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; +PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; +PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; +PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor = NULL; +PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; +PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; +PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; +PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; +PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; +PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; +PFNGLVIEWPORTPROC glad_glViewport = NULL; +PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv = NULL; +PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf = NULL; +PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv = NULL; +PFNGLWAITSYNCPROC glad_glWaitSync = NULL; +static void load_GL_VERSION_1_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_0) return; + glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); + glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); + glad_glHint = (PFNGLHINTPROC)load("glHint"); + glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); + glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); + glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); + glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); + glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); + glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); + glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); + glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); + glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); + glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); + glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); + glad_glClear = (PFNGLCLEARPROC)load("glClear"); + glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); + glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); + glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); + glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); + glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); + glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); + glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); + glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); + glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); + glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); + glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); + glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); + glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); + glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); + glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); + glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); + glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); + glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); + glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); + glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); + glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); + glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); + glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); + glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); + glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); + glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); + glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); + glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); + glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); + glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); + glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); + glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); + glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); +} +static void load_GL_VERSION_1_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_1) return; + glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); + glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); + glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); + glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); + glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); + glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); + glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); + glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); + glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); + glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); + glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); + glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); + glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); +} +static void load_GL_VERSION_1_2(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_2) return; + glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); + glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); + glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); + glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); +} +static void load_GL_VERSION_1_3(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_3) return; + glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); + glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); + glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); + glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); + glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); + glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); + glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); + glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); + glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); +} +static void load_GL_VERSION_1_4(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_4) return; + glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); + glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); + glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); + glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); + glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); + glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); + glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); + glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); + glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); +} +static void load_GL_VERSION_1_5(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_5) return; + glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); + glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); + glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); + glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); + glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); + glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); + glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); + glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); + glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); + glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); + glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); + glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); + glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); + glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); + glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); + glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); + glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); + glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); + glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); +} +static void load_GL_VERSION_2_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_2_0) return; + glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); + glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); + glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); + glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); + glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); + glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); + glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); + glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); + glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); + glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); + glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); + glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); + glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); + glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); + glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); + glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); + glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); + glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); + glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); + glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); + glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); + glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); + glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); + glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); + glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); + glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); + glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); + glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); + glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); + glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); + glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); + glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); + glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); + glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); + glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); + glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); + glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); + glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); + glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); + glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); + glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); + glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); + glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); + glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); + glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); + glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); + glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); + glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); + glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); + glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); + glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); + glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); + glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); + glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); + glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); + glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); + glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); + glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); + glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); + glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); + glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); + glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); + glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); + glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); + glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); + glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); + glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); + glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); + glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); + glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); + glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); + glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); + glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); + glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); + glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); + glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); + glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); + glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); + glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); + glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); + glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); + glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); + glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); + glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); + glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); + glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); + glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); + glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); + glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); + glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); + glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); + glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); + glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); +} +static void load_GL_VERSION_2_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_2_1) return; + glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); + glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); + glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); + glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); + glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); + glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); +} +static void load_GL_VERSION_3_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_0) return; + glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); + glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); + glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); + glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); + glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); + glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); + glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); + glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); + glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); + glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); + glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); + glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); + glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); + glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); + glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); + glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); + glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); + glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); + glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); + glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); + glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); + glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); + glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); + glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); + glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); + glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); + glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); + glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); + glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); + glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); + glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); + glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); + glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); + glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); + glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); + glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); + glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); + glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); + glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); + glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); + glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); + glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); + glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); + glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); + glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); + glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); + glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); + glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); + glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); + glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); + glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); + glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); + glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); + glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); + glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); + glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); + glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); + glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); + glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); + glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); + glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); + glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); + glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); + glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); + glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); + glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); + glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); + glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); + glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); + glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); + glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); + glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); + glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); + glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); + glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); + glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); + glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); + glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); + glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); + glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); + glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); +} +static void load_GL_VERSION_3_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_1) return; + glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); + glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); + glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); + glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); + glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); + glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); + glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); + glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); + glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); + glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); + glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); + glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); +} +static void load_GL_VERSION_3_2(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_2) return; + glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); + glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); + glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); + glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); + glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); + glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); + glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); + glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); + glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); + glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); + glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); + glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); + glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); + glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); + glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); + glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); + glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); + glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); + glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); +} +static void load_GL_VERSION_3_3(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_3) return; + glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); + glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); + glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); + glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); + glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); + glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); + glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); + glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); + glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); + glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); + glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); + glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); + glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); + glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); + glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); + glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); + glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); + glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); + glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); + glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); + glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); + glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); + glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); + glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); + glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); + glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); + glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); + glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); + glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); + glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); + glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); + glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); + glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); + glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); + glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); + glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); + glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); + glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); + glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); + glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); + glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); + glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); + glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); + glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); + glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); + glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); + glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); + glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); + glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); + glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); + glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); + glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); + glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); + glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); + glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); + glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); + glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); + glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); +} +static void load_GL_VERSION_4_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_4_0) return; + glad_glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)load("glMinSampleShading"); + glad_glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)load("glBlendEquationi"); + glad_glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)load("glBlendEquationSeparatei"); + glad_glBlendFunci = (PFNGLBLENDFUNCIPROC)load("glBlendFunci"); + glad_glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)load("glBlendFuncSeparatei"); + glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect"); + glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect"); + glad_glUniform1d = (PFNGLUNIFORM1DPROC)load("glUniform1d"); + glad_glUniform2d = (PFNGLUNIFORM2DPROC)load("glUniform2d"); + glad_glUniform3d = (PFNGLUNIFORM3DPROC)load("glUniform3d"); + glad_glUniform4d = (PFNGLUNIFORM4DPROC)load("glUniform4d"); + glad_glUniform1dv = (PFNGLUNIFORM1DVPROC)load("glUniform1dv"); + glad_glUniform2dv = (PFNGLUNIFORM2DVPROC)load("glUniform2dv"); + glad_glUniform3dv = (PFNGLUNIFORM3DVPROC)load("glUniform3dv"); + glad_glUniform4dv = (PFNGLUNIFORM4DVPROC)load("glUniform4dv"); + glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)load("glUniformMatrix2dv"); + glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)load("glUniformMatrix3dv"); + glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)load("glUniformMatrix4dv"); + glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)load("glUniformMatrix2x3dv"); + glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)load("glUniformMatrix2x4dv"); + glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)load("glUniformMatrix3x2dv"); + glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)load("glUniformMatrix3x4dv"); + glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)load("glUniformMatrix4x2dv"); + glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)load("glUniformMatrix4x3dv"); + glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC)load("glGetUniformdv"); + glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load("glGetSubroutineUniformLocation"); + glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)load("glGetSubroutineIndex"); + glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load("glGetActiveSubroutineUniformiv"); + glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load("glGetActiveSubroutineUniformName"); + glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)load("glGetActiveSubroutineName"); + glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)load("glUniformSubroutinesuiv"); + glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load("glGetUniformSubroutineuiv"); + glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)load("glGetProgramStageiv"); + glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri"); + glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)load("glPatchParameterfv"); + glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback"); + glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks"); + glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks"); + glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback"); + glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback"); + glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback"); + glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)load("glDrawTransformFeedback"); + glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)load("glDrawTransformFeedbackStream"); + glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)load("glBeginQueryIndexed"); + glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)load("glEndQueryIndexed"); + glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)load("glGetQueryIndexediv"); +} +static void load_GL_VERSION_4_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_4_1) return; + glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler"); + glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary"); + glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat"); + glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); + glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); + glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load("glGetProgramBinary"); + glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load("glProgramBinary"); + glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); + glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load("glUseProgramStages"); + glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load("glActiveShaderProgram"); + glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load("glCreateShaderProgramv"); + glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load("glBindProgramPipeline"); + glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load("glDeleteProgramPipelines"); + glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load("glGenProgramPipelines"); + glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load("glIsProgramPipeline"); + glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load("glGetProgramPipelineiv"); + glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri"); + glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load("glProgramUniform1i"); + glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load("glProgramUniform1iv"); + glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load("glProgramUniform1f"); + glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load("glProgramUniform1fv"); + glad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)load("glProgramUniform1d"); + glad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)load("glProgramUniform1dv"); + glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load("glProgramUniform1ui"); + glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load("glProgramUniform1uiv"); + glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load("glProgramUniform2i"); + glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load("glProgramUniform2iv"); + glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load("glProgramUniform2f"); + glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load("glProgramUniform2fv"); + glad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)load("glProgramUniform2d"); + glad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)load("glProgramUniform2dv"); + glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load("glProgramUniform2ui"); + glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load("glProgramUniform2uiv"); + glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load("glProgramUniform3i"); + glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load("glProgramUniform3iv"); + glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load("glProgramUniform3f"); + glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load("glProgramUniform3fv"); + glad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)load("glProgramUniform3d"); + glad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)load("glProgramUniform3dv"); + glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load("glProgramUniform3ui"); + glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load("glProgramUniform3uiv"); + glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load("glProgramUniform4i"); + glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load("glProgramUniform4iv"); + glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load("glProgramUniform4f"); + glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load("glProgramUniform4fv"); + glad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)load("glProgramUniform4d"); + glad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)load("glProgramUniform4dv"); + glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load("glProgramUniform4ui"); + glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load("glProgramUniform4uiv"); + glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load("glProgramUniformMatrix2fv"); + glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load("glProgramUniformMatrix3fv"); + glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load("glProgramUniformMatrix4fv"); + glad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)load("glProgramUniformMatrix2dv"); + glad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)load("glProgramUniformMatrix3dv"); + glad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)load("glProgramUniformMatrix4dv"); + glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load("glProgramUniformMatrix2x3fv"); + glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load("glProgramUniformMatrix3x2fv"); + glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load("glProgramUniformMatrix2x4fv"); + glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load("glProgramUniformMatrix4x2fv"); + glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load("glProgramUniformMatrix3x4fv"); + glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load("glProgramUniformMatrix4x3fv"); + glad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)load("glProgramUniformMatrix2x3dv"); + glad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)load("glProgramUniformMatrix3x2dv"); + glad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)load("glProgramUniformMatrix2x4dv"); + glad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)load("glProgramUniformMatrix4x2dv"); + glad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)load("glProgramUniformMatrix3x4dv"); + glad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)load("glProgramUniformMatrix4x3dv"); + glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load("glValidateProgramPipeline"); + glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load("glGetProgramPipelineInfoLog"); + glad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)load("glVertexAttribL1d"); + glad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)load("glVertexAttribL2d"); + glad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)load("glVertexAttribL3d"); + glad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)load("glVertexAttribL4d"); + glad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)load("glVertexAttribL1dv"); + glad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)load("glVertexAttribL2dv"); + glad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)load("glVertexAttribL3dv"); + glad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)load("glVertexAttribL4dv"); + glad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)load("glVertexAttribLPointer"); + glad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)load("glGetVertexAttribLdv"); + glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)load("glViewportArrayv"); + glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)load("glViewportIndexedf"); + glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)load("glViewportIndexedfv"); + glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC)load("glScissorArrayv"); + glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)load("glScissorIndexed"); + glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)load("glScissorIndexedv"); + glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)load("glDepthRangeArrayv"); + glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)load("glDepthRangeIndexed"); + glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC)load("glGetFloati_v"); + glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)load("glGetDoublei_v"); +} +static void load_GL_VERSION_4_2(GLADloadproc load) { + if(!GLAD_GL_VERSION_4_2) return; + glad_glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)load("glDrawArraysInstancedBaseInstance"); + glad_glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)load("glDrawElementsInstancedBaseInstance"); + glad_glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)load("glDrawElementsInstancedBaseVertexBaseInstance"); + glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load("glGetInternalformativ"); + glad_glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)load("glGetActiveAtomicCounterBufferiv"); + glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)load("glBindImageTexture"); + glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)load("glMemoryBarrier"); + glad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)load("glTexStorage1D"); + glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)load("glTexStorage2D"); + glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load("glTexStorage3D"); + glad_glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)load("glDrawTransformFeedbackInstanced"); + glad_glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)load("glDrawTransformFeedbackStreamInstanced"); +} +static void load_GL_VERSION_4_3(GLADloadproc load) { + if(!GLAD_GL_VERSION_4_3) return; + glad_glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)load("glClearBufferData"); + glad_glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)load("glClearBufferSubData"); + glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)load("glDispatchCompute"); + glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)load("glDispatchComputeIndirect"); + glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)load("glCopyImageSubData"); + glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)load("glFramebufferParameteri"); + glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)load("glGetFramebufferParameteriv"); + glad_glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)load("glGetInternalformati64v"); + glad_glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)load("glInvalidateTexSubImage"); + glad_glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)load("glInvalidateTexImage"); + glad_glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)load("glInvalidateBufferSubData"); + glad_glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)load("glInvalidateBufferData"); + glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)load("glInvalidateFramebuffer"); + glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)load("glInvalidateSubFramebuffer"); + glad_glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)load("glMultiDrawArraysIndirect"); + glad_glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)load("glMultiDrawElementsIndirect"); + glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)load("glGetProgramInterfaceiv"); + glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)load("glGetProgramResourceIndex"); + glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)load("glGetProgramResourceName"); + glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)load("glGetProgramResourceiv"); + glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)load("glGetProgramResourceLocation"); + glad_glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)load("glGetProgramResourceLocationIndex"); + glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)load("glShaderStorageBlockBinding"); + glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)load("glTexBufferRange"); + glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)load("glTexStorage2DMultisample"); + glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)load("glTexStorage3DMultisample"); + glad_glTextureView = (PFNGLTEXTUREVIEWPROC)load("glTextureView"); + glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer"); + glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat"); + glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat"); + glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)load("glVertexAttribLFormat"); + glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding"); + glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor"); + glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)load("glDebugMessageControl"); + glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)load("glDebugMessageInsert"); + glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)load("glDebugMessageCallback"); + glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)load("glGetDebugMessageLog"); + glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load("glPushDebugGroup"); + glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)load("glPopDebugGroup"); + glad_glObjectLabel = (PFNGLOBJECTLABELPROC)load("glObjectLabel"); + glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load("glGetObjectLabel"); + glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load("glObjectPtrLabel"); + glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)load("glGetObjectPtrLabel"); + glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); +} +static void load_GL_VERSION_4_4(GLADloadproc load) { + if(!GLAD_GL_VERSION_4_4) return; + glad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC)load("glBufferStorage"); + glad_glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)load("glClearTexImage"); + glad_glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)load("glClearTexSubImage"); + glad_glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)load("glBindBuffersBase"); + glad_glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)load("glBindBuffersRange"); + glad_glBindTextures = (PFNGLBINDTEXTURESPROC)load("glBindTextures"); + glad_glBindSamplers = (PFNGLBINDSAMPLERSPROC)load("glBindSamplers"); + glad_glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)load("glBindImageTextures"); + glad_glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)load("glBindVertexBuffers"); +} +static void load_GL_VERSION_4_5(GLADloadproc load) { + if(!GLAD_GL_VERSION_4_5) return; + glad_glClipControl = (PFNGLCLIPCONTROLPROC)load("glClipControl"); + glad_glCreateTransformFeedbacks = (PFNGLCREATETRANSFORMFEEDBACKSPROC)load("glCreateTransformFeedbacks"); + glad_glTransformFeedbackBufferBase = (PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)load("glTransformFeedbackBufferBase"); + glad_glTransformFeedbackBufferRange = (PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)load("glTransformFeedbackBufferRange"); + glad_glGetTransformFeedbackiv = (PFNGLGETTRANSFORMFEEDBACKIVPROC)load("glGetTransformFeedbackiv"); + glad_glGetTransformFeedbacki_v = (PFNGLGETTRANSFORMFEEDBACKI_VPROC)load("glGetTransformFeedbacki_v"); + glad_glGetTransformFeedbacki64_v = (PFNGLGETTRANSFORMFEEDBACKI64_VPROC)load("glGetTransformFeedbacki64_v"); + glad_glCreateBuffers = (PFNGLCREATEBUFFERSPROC)load("glCreateBuffers"); + glad_glNamedBufferStorage = (PFNGLNAMEDBUFFERSTORAGEPROC)load("glNamedBufferStorage"); + glad_glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC)load("glNamedBufferData"); + glad_glNamedBufferSubData = (PFNGLNAMEDBUFFERSUBDATAPROC)load("glNamedBufferSubData"); + glad_glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC)load("glCopyNamedBufferSubData"); + glad_glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC)load("glClearNamedBufferData"); + glad_glClearNamedBufferSubData = (PFNGLCLEARNAMEDBUFFERSUBDATAPROC)load("glClearNamedBufferSubData"); + glad_glMapNamedBuffer = (PFNGLMAPNAMEDBUFFERPROC)load("glMapNamedBuffer"); + glad_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC)load("glMapNamedBufferRange"); + glad_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC)load("glUnmapNamedBuffer"); + glad_glFlushMappedNamedBufferRange = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)load("glFlushMappedNamedBufferRange"); + glad_glGetNamedBufferParameteriv = (PFNGLGETNAMEDBUFFERPARAMETERIVPROC)load("glGetNamedBufferParameteriv"); + glad_glGetNamedBufferParameteri64v = (PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)load("glGetNamedBufferParameteri64v"); + glad_glGetNamedBufferPointerv = (PFNGLGETNAMEDBUFFERPOINTERVPROC)load("glGetNamedBufferPointerv"); + glad_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC)load("glGetNamedBufferSubData"); + glad_glCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC)load("glCreateFramebuffers"); + glad_glNamedFramebufferRenderbuffer = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)load("glNamedFramebufferRenderbuffer"); + glad_glNamedFramebufferParameteri = (PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)load("glNamedFramebufferParameteri"); + glad_glNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)load("glNamedFramebufferTexture"); + glad_glNamedFramebufferTextureLayer = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)load("glNamedFramebufferTextureLayer"); + glad_glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)load("glNamedFramebufferDrawBuffer"); + glad_glNamedFramebufferDrawBuffers = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)load("glNamedFramebufferDrawBuffers"); + glad_glNamedFramebufferReadBuffer = (PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)load("glNamedFramebufferReadBuffer"); + glad_glInvalidateNamedFramebufferData = (PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)load("glInvalidateNamedFramebufferData"); + glad_glInvalidateNamedFramebufferSubData = (PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)load("glInvalidateNamedFramebufferSubData"); + glad_glClearNamedFramebufferiv = (PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)load("glClearNamedFramebufferiv"); + glad_glClearNamedFramebufferuiv = (PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)load("glClearNamedFramebufferuiv"); + glad_glClearNamedFramebufferfv = (PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)load("glClearNamedFramebufferfv"); + glad_glClearNamedFramebufferfi = (PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)load("glClearNamedFramebufferfi"); + glad_glBlitNamedFramebuffer = (PFNGLBLITNAMEDFRAMEBUFFERPROC)load("glBlitNamedFramebuffer"); + glad_glCheckNamedFramebufferStatus = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)load("glCheckNamedFramebufferStatus"); + glad_glGetNamedFramebufferParameteriv = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)load("glGetNamedFramebufferParameteriv"); + glad_glGetNamedFramebufferAttachmentParameteriv = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetNamedFramebufferAttachmentParameteriv"); + glad_glCreateRenderbuffers = (PFNGLCREATERENDERBUFFERSPROC)load("glCreateRenderbuffers"); + glad_glNamedRenderbufferStorage = (PFNGLNAMEDRENDERBUFFERSTORAGEPROC)load("glNamedRenderbufferStorage"); + glad_glNamedRenderbufferStorageMultisample = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glNamedRenderbufferStorageMultisample"); + glad_glGetNamedRenderbufferParameteriv = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)load("glGetNamedRenderbufferParameteriv"); + glad_glCreateTextures = (PFNGLCREATETEXTURESPROC)load("glCreateTextures"); + glad_glTextureBuffer = (PFNGLTEXTUREBUFFERPROC)load("glTextureBuffer"); + glad_glTextureBufferRange = (PFNGLTEXTUREBUFFERRANGEPROC)load("glTextureBufferRange"); + glad_glTextureStorage1D = (PFNGLTEXTURESTORAGE1DPROC)load("glTextureStorage1D"); + glad_glTextureStorage2D = (PFNGLTEXTURESTORAGE2DPROC)load("glTextureStorage2D"); + glad_glTextureStorage3D = (PFNGLTEXTURESTORAGE3DPROC)load("glTextureStorage3D"); + glad_glTextureStorage2DMultisample = (PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)load("glTextureStorage2DMultisample"); + glad_glTextureStorage3DMultisample = (PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)load("glTextureStorage3DMultisample"); + glad_glTextureSubImage1D = (PFNGLTEXTURESUBIMAGE1DPROC)load("glTextureSubImage1D"); + glad_glTextureSubImage2D = (PFNGLTEXTURESUBIMAGE2DPROC)load("glTextureSubImage2D"); + glad_glTextureSubImage3D = (PFNGLTEXTURESUBIMAGE3DPROC)load("glTextureSubImage3D"); + glad_glCompressedTextureSubImage1D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)load("glCompressedTextureSubImage1D"); + glad_glCompressedTextureSubImage2D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)load("glCompressedTextureSubImage2D"); + glad_glCompressedTextureSubImage3D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)load("glCompressedTextureSubImage3D"); + glad_glCopyTextureSubImage1D = (PFNGLCOPYTEXTURESUBIMAGE1DPROC)load("glCopyTextureSubImage1D"); + glad_glCopyTextureSubImage2D = (PFNGLCOPYTEXTURESUBIMAGE2DPROC)load("glCopyTextureSubImage2D"); + glad_glCopyTextureSubImage3D = (PFNGLCOPYTEXTURESUBIMAGE3DPROC)load("glCopyTextureSubImage3D"); + glad_glTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC)load("glTextureParameterf"); + glad_glTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC)load("glTextureParameterfv"); + glad_glTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC)load("glTextureParameteri"); + glad_glTextureParameterIiv = (PFNGLTEXTUREPARAMETERIIVPROC)load("glTextureParameterIiv"); + glad_glTextureParameterIuiv = (PFNGLTEXTUREPARAMETERIUIVPROC)load("glTextureParameterIuiv"); + glad_glTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC)load("glTextureParameteriv"); + glad_glGenerateTextureMipmap = (PFNGLGENERATETEXTUREMIPMAPPROC)load("glGenerateTextureMipmap"); + glad_glBindTextureUnit = (PFNGLBINDTEXTUREUNITPROC)load("glBindTextureUnit"); + glad_glGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC)load("glGetTextureImage"); + glad_glGetCompressedTextureImage = (PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)load("glGetCompressedTextureImage"); + glad_glGetTextureLevelParameterfv = (PFNGLGETTEXTURELEVELPARAMETERFVPROC)load("glGetTextureLevelParameterfv"); + glad_glGetTextureLevelParameteriv = (PFNGLGETTEXTURELEVELPARAMETERIVPROC)load("glGetTextureLevelParameteriv"); + glad_glGetTextureParameterfv = (PFNGLGETTEXTUREPARAMETERFVPROC)load("glGetTextureParameterfv"); + glad_glGetTextureParameterIiv = (PFNGLGETTEXTUREPARAMETERIIVPROC)load("glGetTextureParameterIiv"); + glad_glGetTextureParameterIuiv = (PFNGLGETTEXTUREPARAMETERIUIVPROC)load("glGetTextureParameterIuiv"); + glad_glGetTextureParameteriv = (PFNGLGETTEXTUREPARAMETERIVPROC)load("glGetTextureParameteriv"); + glad_glCreateVertexArrays = (PFNGLCREATEVERTEXARRAYSPROC)load("glCreateVertexArrays"); + glad_glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC)load("glDisableVertexArrayAttrib"); + glad_glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC)load("glEnableVertexArrayAttrib"); + glad_glVertexArrayElementBuffer = (PFNGLVERTEXARRAYELEMENTBUFFERPROC)load("glVertexArrayElementBuffer"); + glad_glVertexArrayVertexBuffer = (PFNGLVERTEXARRAYVERTEXBUFFERPROC)load("glVertexArrayVertexBuffer"); + glad_glVertexArrayVertexBuffers = (PFNGLVERTEXARRAYVERTEXBUFFERSPROC)load("glVertexArrayVertexBuffers"); + glad_glVertexArrayAttribBinding = (PFNGLVERTEXARRAYATTRIBBINDINGPROC)load("glVertexArrayAttribBinding"); + glad_glVertexArrayAttribFormat = (PFNGLVERTEXARRAYATTRIBFORMATPROC)load("glVertexArrayAttribFormat"); + glad_glVertexArrayAttribIFormat = (PFNGLVERTEXARRAYATTRIBIFORMATPROC)load("glVertexArrayAttribIFormat"); + glad_glVertexArrayAttribLFormat = (PFNGLVERTEXARRAYATTRIBLFORMATPROC)load("glVertexArrayAttribLFormat"); + glad_glVertexArrayBindingDivisor = (PFNGLVERTEXARRAYBINDINGDIVISORPROC)load("glVertexArrayBindingDivisor"); + glad_glGetVertexArrayiv = (PFNGLGETVERTEXARRAYIVPROC)load("glGetVertexArrayiv"); + glad_glGetVertexArrayIndexediv = (PFNGLGETVERTEXARRAYINDEXEDIVPROC)load("glGetVertexArrayIndexediv"); + glad_glGetVertexArrayIndexed64iv = (PFNGLGETVERTEXARRAYINDEXED64IVPROC)load("glGetVertexArrayIndexed64iv"); + glad_glCreateSamplers = (PFNGLCREATESAMPLERSPROC)load("glCreateSamplers"); + glad_glCreateProgramPipelines = (PFNGLCREATEPROGRAMPIPELINESPROC)load("glCreateProgramPipelines"); + glad_glCreateQueries = (PFNGLCREATEQUERIESPROC)load("glCreateQueries"); + glad_glGetQueryBufferObjecti64v = (PFNGLGETQUERYBUFFEROBJECTI64VPROC)load("glGetQueryBufferObjecti64v"); + glad_glGetQueryBufferObjectiv = (PFNGLGETQUERYBUFFEROBJECTIVPROC)load("glGetQueryBufferObjectiv"); + glad_glGetQueryBufferObjectui64v = (PFNGLGETQUERYBUFFEROBJECTUI64VPROC)load("glGetQueryBufferObjectui64v"); + glad_glGetQueryBufferObjectuiv = (PFNGLGETQUERYBUFFEROBJECTUIVPROC)load("glGetQueryBufferObjectuiv"); + glad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC)load("glMemoryBarrierByRegion"); + glad_glGetTextureSubImage = (PFNGLGETTEXTURESUBIMAGEPROC)load("glGetTextureSubImage"); + glad_glGetCompressedTextureSubImage = (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)load("glGetCompressedTextureSubImage"); + glad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC)load("glGetGraphicsResetStatus"); + glad_glGetnCompressedTexImage = (PFNGLGETNCOMPRESSEDTEXIMAGEPROC)load("glGetnCompressedTexImage"); + glad_glGetnTexImage = (PFNGLGETNTEXIMAGEPROC)load("glGetnTexImage"); + glad_glGetnUniformdv = (PFNGLGETNUNIFORMDVPROC)load("glGetnUniformdv"); + glad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC)load("glGetnUniformfv"); + glad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC)load("glGetnUniformiv"); + glad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC)load("glGetnUniformuiv"); + glad_glReadnPixels = (PFNGLREADNPIXELSPROC)load("glReadnPixels"); + glad_glGetnMapdv = (PFNGLGETNMAPDVPROC)load("glGetnMapdv"); + glad_glGetnMapfv = (PFNGLGETNMAPFVPROC)load("glGetnMapfv"); + glad_glGetnMapiv = (PFNGLGETNMAPIVPROC)load("glGetnMapiv"); + glad_glGetnPixelMapfv = (PFNGLGETNPIXELMAPFVPROC)load("glGetnPixelMapfv"); + glad_glGetnPixelMapuiv = (PFNGLGETNPIXELMAPUIVPROC)load("glGetnPixelMapuiv"); + glad_glGetnPixelMapusv = (PFNGLGETNPIXELMAPUSVPROC)load("glGetnPixelMapusv"); + glad_glGetnPolygonStipple = (PFNGLGETNPOLYGONSTIPPLEPROC)load("glGetnPolygonStipple"); + glad_glGetnColorTable = (PFNGLGETNCOLORTABLEPROC)load("glGetnColorTable"); + glad_glGetnConvolutionFilter = (PFNGLGETNCONVOLUTIONFILTERPROC)load("glGetnConvolutionFilter"); + glad_glGetnSeparableFilter = (PFNGLGETNSEPARABLEFILTERPROC)load("glGetnSeparableFilter"); + glad_glGetnHistogram = (PFNGLGETNHISTOGRAMPROC)load("glGetnHistogram"); + glad_glGetnMinmax = (PFNGLGETNMINMAXPROC)load("glGetnMinmax"); + glad_glTextureBarrier = (PFNGLTEXTUREBARRIERPROC)load("glTextureBarrier"); +} +static void load_GL_VERSION_4_6(GLADloadproc load) { + if(!GLAD_GL_VERSION_4_6) return; + glad_glSpecializeShader = (PFNGLSPECIALIZESHADERPROC)load("glSpecializeShader"); + glad_glMultiDrawArraysIndirectCount = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC)load("glMultiDrawArraysIndirectCount"); + glad_glMultiDrawElementsIndirectCount = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC)load("glMultiDrawElementsIndirectCount"); + glad_glPolygonOffsetClamp = (PFNGLPOLYGONOFFSETCLAMPPROC)load("glPolygonOffsetClamp"); +} +static int find_extensionsGL(void) { + if (!get_exts()) return 0; + (void)&has_ext; + free_exts(); + return 1; +} + +static void find_coreGL(void) { + + /* Thank you @elmindreda + * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 + * https://github.com/glfw/glfw/blob/master/src/context.c#L36 + */ + int i, major, minor; + + const char* version; + const char* prefixes[] = { + "OpenGL ES-CM ", + "OpenGL ES-CL ", + "OpenGL ES ", + NULL + }; + + version = (const char*) glGetString(GL_VERSION); + if (!version) return; + + for (i = 0; prefixes[i]; i++) { + const size_t length = strlen(prefixes[i]); + if (strncmp(version, prefixes[i], length) == 0) { + version += length; + break; + } + } + +/* PR #18 */ +#ifdef _MSC_VER + sscanf_s(version, "%d.%d", &major, &minor); +#else + sscanf(version, "%d.%d", &major, &minor); +#endif + + GLVersion.major = major; GLVersion.minor = minor; + max_loaded_major = major; max_loaded_minor = minor; + GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; + GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; + GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; + GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; + GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; + GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; + GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; + GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; + GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; + GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; + GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; + GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; + GLAD_GL_VERSION_4_0 = (major == 4 && minor >= 0) || major > 4; + GLAD_GL_VERSION_4_1 = (major == 4 && minor >= 1) || major > 4; + GLAD_GL_VERSION_4_2 = (major == 4 && minor >= 2) || major > 4; + GLAD_GL_VERSION_4_3 = (major == 4 && minor >= 3) || major > 4; + GLAD_GL_VERSION_4_4 = (major == 4 && minor >= 4) || major > 4; + GLAD_GL_VERSION_4_5 = (major == 4 && minor >= 5) || major > 4; + GLAD_GL_VERSION_4_6 = (major == 4 && minor >= 6) || major > 4; + if (GLVersion.major > 4 || (GLVersion.major >= 4 && GLVersion.minor >= 6)) { + max_loaded_major = 4; + max_loaded_minor = 6; + } +} + +int gladLoadGLLoader(GLADloadproc load) { + GLVersion.major = 0; GLVersion.minor = 0; + glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); + if(glGetString == NULL) return 0; + if(glGetString(GL_VERSION) == NULL) return 0; + find_coreGL(); + load_GL_VERSION_1_0(load); + load_GL_VERSION_1_1(load); + load_GL_VERSION_1_2(load); + load_GL_VERSION_1_3(load); + load_GL_VERSION_1_4(load); + load_GL_VERSION_1_5(load); + load_GL_VERSION_2_0(load); + load_GL_VERSION_2_1(load); + load_GL_VERSION_3_0(load); + load_GL_VERSION_3_1(load); + load_GL_VERSION_3_2(load); + load_GL_VERSION_3_3(load); + load_GL_VERSION_4_0(load); + load_GL_VERSION_4_1(load); + load_GL_VERSION_4_2(load); + load_GL_VERSION_4_3(load); + load_GL_VERSION_4_4(load); + load_GL_VERSION_4_5(load); + load_GL_VERSION_4_6(load); + + if (!find_extensionsGL()) return 0; + return GLVersion.major != 0 || GLVersion.minor != 0; +} + diff --git a/glc/src/glc.h b/glc/src/glc.h new file mode 100644 index 0000000..3129b5b --- /dev/null +++ b/glc/src/glc.h @@ -0,0 +1,5 @@ +#pragma once + +# include "glc_internal.h" +# include "glc_api.h" +# include "glc_types.h" diff --git a/glc/src/glc_api.h b/glc/src/glc_api.h new file mode 100644 index 0000000..8bfa4c4 --- /dev/null +++ b/glc/src/glc_api.h @@ -0,0 +1,23 @@ +#pragma once +#include "glc_types.h" + +#define API + +/* GPU */ + +API GpuProgram gpu_program_create(const char *vert_src, const char *frag_src); +API void gpu_program_destroy(GpuProgram *gpu_program); +API void gpu_program_use(GpuProgram *program); +API void gpu_program_clear(); +API u32 gpu_buffer_create(GpuBuffer *buf, float *vertices, u32 vertex_count, u32 *indices, int idx_count); +API void gpu_buffer_destroy(GpuBuffer *buffer); +API void gpu_buffer_draw(GpuBuffer *buffer); +API void gpu_clear(float r, float g, float b, float a); + +/* ### PLATFORM ### */ + +/* WINDOW */ +API Window window_create(u32 width, u32 height, const char *title); +API void window_destroy(Window *win); +API void window_buffers_swap(Window *win); +API void window_poll_events(Window *win); diff --git a/glc/src/glc_internal.h b/glc/src/glc_internal.h new file mode 100644 index 0000000..5abda25 --- /dev/null +++ b/glc/src/glc_internal.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include + +#include "glc_types.h" + +#include "../lib/include/glad/glad.h" +#include + +#define err(...) do { fprintf(stderr, __VA_ARGS__); exit(EXIT_FAILURE); } while (0) + +#define DEFAULT_VERTEX_STRIDE 3 +#define INTERN + +extern char const *vertex_shader_src; +extern char const *fragment_shader_src; + +/* GPU */ + +INTERN GpuShaderHandle gpu_shader_compile(char const *src, GpuShaderType type); +INTERN void gpu_shader_error_get(uint32_t shader); + +INTERN GpuProgramHandle gpu_program_handle_create(const char *vert_src, const char *frag_src); +INTERN GpuProgramHandle gpu_program_handle_link(GpuProgramHandle handle, GpuShaderHandle vert_shader, GpuShaderHandle frag_shader); +INTERN void gpu_program_handle_error_get(GpuProgramHandle program); +INTERN void gpu_program_handle_use(GpuProgramHandle handle); + +INTERN void window_framebuffer_size_callback(GLFWwindow *win, int width, int height); + diff --git a/glc/src/glc_types.h b/glc/src/glc_types.h new file mode 100644 index 0000000..873bc0c --- /dev/null +++ b/glc/src/glc_types.h @@ -0,0 +1,52 @@ +#pragma once + +#include "../lib/include/glad/glad.h" +#include + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; + +typedef i32 GpuShaderHandle; +typedef i32 GpuProgramHandle; + +typedef GLvoid GpuVoid; +typedef GLboolean GpuBool; +typedef GLbyte GpuByte; +typedef GLshort GpuShort; +typedef GLsizei GpuSizeI; +typedef GLsizeiptr GpuSizeIPtr; +typedef GLint GpuInt; +typedef GLuint GpuUint; +typedef GLfloat GpuFloat; +typedef GLdouble GpuDouble; + +typedef enum { + FRAGMENT_SHADER = GL_FRAGMENT_SHADER, + VERTEX_SHADER = GL_VERTEX_SHADER, +} GpuShaderType; + +typedef struct { + GpuShaderHandle handle; +} GpuProgram; + +typedef struct { + GLFWwindow *win; + i32 width; + i32 height; +} Window; + +typedef struct { + GLuint vao; + GLuint vbo; + GLuint ebo; + u32 stride; + u32 index_count; +} GpuBuffer; + diff --git a/glc/src/platform/io/poll_events.c b/glc/src/platform/io/poll_events.c new file mode 100644 index 0000000..94cd22b --- /dev/null +++ b/glc/src/platform/io/poll_events.c @@ -0,0 +1,6 @@ +#include "../../glc.h" // IWYU pragma: keep + +void window_poll_events(Window *win) { + (void)win; + glfwPollEvents(); +} diff --git a/glc/src/platform/io/process_input.c b/glc/src/platform/io/process_input.c new file mode 100644 index 0000000..88d4dc2 --- /dev/null +++ b/glc/src/platform/io/process_input.c @@ -0,0 +1,6 @@ +#include "../../glc.h" // IWYU pragma: keep + +void window_framebuffer_size_callback(GLFWwindow *win, int width, int height) { + (void)win; + glViewport(0, 0, width, height); +} diff --git a/glc/src/platform/window/swap_buffer.c b/glc/src/platform/window/swap_buffer.c new file mode 100644 index 0000000..abb0679 --- /dev/null +++ b/glc/src/platform/window/swap_buffer.c @@ -0,0 +1,5 @@ +#include "../../glc.h" // IWYU pragma: keep + +void window_buffers_swap(Window *win) { + glfwSwapBuffers(win->win); +} diff --git a/glc/src/platform/window/window.c b/glc/src/platform/window/window.c new file mode 100644 index 0000000..604bf64 --- /dev/null +++ b/glc/src/platform/window/window.c @@ -0,0 +1,38 @@ +#include "../../glc.h" // IWYU pragma: keep + +i32 window_width_get(Window *win) { + glfwGetWindowSize(win->win, &win->width, &win->height); + return win->width; +} + +i32 window_height_get(Window *win) { + glfwGetWindowSize(win->win, &win->width, &win->height); + return win->height; +} + +Window window_create(u32 width, u32 height, const char *title) { + glfwInit(); + + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + + GLFWwindow *glfw_window = glfwCreateWindow(width, height, title, NULL, NULL); + if (glfw_window == NULL) { + err("Failed to create GL window\n"); + } + + glfwMakeContextCurrent(glfw_window); + + if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { + err("Failed to initialize glad\n"); + } + + glViewport(0, 0, width, height); + glfwSetFramebufferSizeCallback(glfw_window, (GLFWframebuffersizefun)window_framebuffer_size_callback); + return (Window){ glfw_window, width, height }; +} + +void window_destroy(Window *win) { + glfwDestroyWindow(win->win); +} diff --git a/glrs/Cargo.lock b/glrs/Cargo.lock new file mode 100644 index 0000000..d0b526a --- /dev/null +++ b/glrs/Cargo.lock @@ -0,0 +1,245 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "bindgen" +version = "0.72.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", +] + +[[package]] +name = "bitflags" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" + +[[package]] +name = "cc" +version = "1.2.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "glrs" +version = "0.1.0" +dependencies = [ + "bindgen", + "cc", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "libc" +version = "0.2.182" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" diff --git a/glrs/Cargo.toml b/glrs/Cargo.toml new file mode 100644 index 0000000..7404636 --- /dev/null +++ b/glrs/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "glrs" +version = "0.1.0" +edition = "2024" + +[dependencies] +cc = "1.2.56" + +[build-dependencies] +bindgen = "0.72.1" +cc = "1.2.56" diff --git a/glrs/build.rs b/glrs/build.rs new file mode 100644 index 0000000..feb1e60 --- /dev/null +++ b/glrs/build.rs @@ -0,0 +1,41 @@ +use cc; + +fn collect_c_files(dir: &str) -> Vec { + let mut files = vec![]; + for entry in std::fs::read_dir(dir).unwrap() { + let path = entry.unwrap().path(); + if path.is_dir() { + files.extend(collect_c_files(path.to_str().unwrap())); + } else if path.extension().map_or(false, |e| e == "c") { + files.push(path); + } + } + files +} + +fn main() { + + let cfiles = collect_c_files("../glc/src"); + + cc::Build::new() + .files(&cfiles) + .compile("glc"); // produces libgl_layer.a + + let bindings = bindgen::Builder::default() + .header("../glc/src/glc_api.h") + .parse_callbacks(Box::new(bindgen::CargoCallbacks::new())) + .generate() + .unwrap(); + + bindings + .write_to_file(std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()).join("bindings.rs")) + .unwrap(); + + let bindings_header = "../glc/src/glc_api.h"; + + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed={bindings_header}"); + cfiles.iter().for_each(|c| { + println!("cargo::rerun-if-changed={}", c.parent().unwrap().to_str().unwrap()); + }); +} diff --git a/glrs/src/glrs.rs b/glrs/src/glrs.rs new file mode 100644 index 0000000..550a37f --- /dev/null +++ b/glrs/src/glrs.rs @@ -0,0 +1,2 @@ +use crate::glc; + diff --git a/glrs/src/lib.rs b/glrs/src/lib.rs new file mode 100644 index 0000000..c31fca2 --- /dev/null +++ b/glrs/src/lib.rs @@ -0,0 +1,6 @@ +pub mod glc { + #![allow(non_snake_case, nonstandard_style)] + include!(concat!(env!("OUT_DIR"), "/bindings.rs")); +} + +pub mod glrs; diff --git a/src/app/app.rs b/src/app/app.rs deleted file mode 100644 index ee3374b..0000000 --- a/src/app/app.rs +++ /dev/null @@ -1,196 +0,0 @@ -use std::num::NonZero; -use glutin::config::{ ConfigTemplateBuilder, GetGlConfig }; -use glutin::context::PossiblyCurrentContext; -use glutin::display::GetGlDisplay; -use glutin::prelude::{GlDisplay, NotCurrentGlContext, PossiblyCurrentGlContext}; -use glutin::surface::{GlSurface, Surface, SwapInterval, WindowSurface}; -use glutin_winit::{DisplayBuilder, GlWindow}; -use winit::application::ApplicationHandler; -use winit::event::KeyEvent; -use winit::keyboard::{Key, NamedKey}; -use winit::window::{ Window, WindowAttributes }; -use winit::{event, window}; - -use crate::app::gl::{gl_config_picker, gl_create_context}; -use crate::app::renderer::Renderer; -use crate::models::ModelData; - -enum GlDisplayCreationState { - Builder(Box), - Init -} - -struct AppState { - gl_surface: Surface, - window: Window, -} - -pub struct App { - gl_display: GlDisplayCreationState, - gl_context: Option, - template: ConfigTemplateBuilder, - - renderer: Option, - current_scene: Option, - scene_data: ModelData, - - state: Option, -} - -impl App { - pub fn new(scene_data: ModelData) -> Self { - let template = ConfigTemplateBuilder::new() - .with_alpha_size(8) - .with_transparency(cfg!(target_os = "macos")); - - let display_builder = DisplayBuilder::new().with_window_attributes(Some(window_attributes())); - - Self { - template, - gl_display: GlDisplayCreationState::Builder(Box::new(display_builder)), - gl_context: None, - renderer: None, - state: None, - scene_data, - current_scene: None, - } - } - - pub fn set_current_scene(&mut self, current_scene: &str) { - self.current_scene = Some(current_scene.to_string()); - } -} - -pub fn window_attributes() -> WindowAttributes { - window::Window::default_attributes() - .with_transparent(false) - .with_title("Test Window") -} - -impl ApplicationHandler for App { - fn resumed(&mut self, event_loop: &winit::event_loop::ActiveEventLoop) { - let (window, gl_config) = match &self.gl_display { - GlDisplayCreationState::Builder(builder) => { - let (window, gl_config) = match builder.clone().build( - event_loop, - self.template.clone(), - gl_config_picker - ) { - Ok((window, gl_config)) => (window.unwrap(), gl_config), - Err(e) => { - panic!("Encountered Error {:#?}", e); - } - }; - - self.gl_display = GlDisplayCreationState::Init; - self.gl_context = Some(gl_create_context(&window, &gl_config).treat_as_possibly_current()); - - (window, gl_config) - }, - GlDisplayCreationState::Init => { - let gl_config = self.gl_context.as_ref().unwrap().config(); - match glutin_winit::finalize_window(event_loop, window_attributes(), &gl_config) { - Ok(window) => (window, gl_config), - Err(e) => { - panic!("Todo: Handle error for {:#?}", e); - } - } - }, - }; - - let attrs = window - .build_surface_attributes(Default::default()) - .expect("Failed to build surface attributes"); - - let gl_surface = unsafe { - gl_config.display().create_window_surface(&gl_config, &attrs).unwrap() - }; - - let gl_context = self.gl_context.as_ref().unwrap(); - gl_context.make_current(&gl_surface).unwrap(); - - if self.renderer.is_none() { - let mut renderer = Renderer::new(&gl_context.display()); - - renderer.upload_scene_data(&self.scene_data); - - println!("Built Renderer"); - - self.renderer.get_or_insert_with(|| renderer); - } - - if let Err(res) = gl_surface.set_swap_interval( - gl_context, - SwapInterval::Wait(NonZero::new(1).unwrap()) - ) { - eprintln!("Error setting vsync: {:?}", res) - } - - assert!(self.state.replace(AppState { gl_surface, window }).is_none()); - } - - fn suspended(&mut self, _event_loop: &winit::event_loop::ActiveEventLoop) { - println!("Android window removed"); - self.state = None; - self.gl_context = Some( - self.gl_context.take().unwrap().make_not_current().unwrap().treat_as_possibly_current() - ); - } - - fn window_event( - &mut self, - event_loop: &winit::event_loop::ActiveEventLoop, - _window_id: window::WindowId, - event: event::WindowEvent, - ) { - match event { - event::WindowEvent::Resized(size) if size.width != 0 && size.height != 0 => { - if let Some(AppState { gl_surface, window: _ }) = &self.state { - let gl_context = self.gl_context.as_ref().unwrap(); - - gl_surface.resize( - gl_context, - NonZero::new(size.width).unwrap(), - NonZero::new(size.height).unwrap() - ); - - let renderer = self.renderer.as_ref().unwrap(); - renderer.resize(size.width as i32, size.height as i32); - } - }, - event::WindowEvent::CloseRequested - | event::WindowEvent::KeyboardInput { event: KeyEvent { logical_key: Key::Named(NamedKey::Escape), .. }, .. } => { - event_loop.exit(); - } - _ => () - } - } - - fn exiting(&mut self, _event_loop: &winit::event_loop::ActiveEventLoop) { - let _gl_display = self.gl_context.take().unwrap().display(); - - self.state = None; - - #[cfg(egl_backend)] - #[allow(irrefutable_let_patterns)] - if let glutin::display::Display::Egl(display) = _gl_display { - unsafe { - display.terminate(); - } - } - } - - fn about_to_wait(&mut self, _event_loop: &winit::event_loop::ActiveEventLoop) { - if let Some(AppState { gl_surface, window }) = self.state.as_ref() { - let gl_context = self.gl_context.as_ref().unwrap(); - let renderer = self.renderer.as_ref().unwrap(); - - if let Some(current_scene) = &self.current_scene { - renderer.render(current_scene); - } - - window.request_redraw(); - gl_surface.swap_buffers(gl_context).unwrap(); - } - } -} diff --git a/src/app/gl.rs b/src/app/gl.rs deleted file mode 100644 index 5766115..0000000 --- a/src/app/gl.rs +++ /dev/null @@ -1,53 +0,0 @@ -#![allow(clippy::all)] -#![allow(unsafe_op_in_unsafe_fn)] -include!(concat!(env!("OUT_DIR"), "/gl_bindings.rs")); - -pub use Gles2 as Gl; - -use glutin::config::{Config, GlConfig}; -use glutin::context::{ContextApi, ContextAttributesBuilder, NotCurrentContext, Version}; -use glutin::display::GetGlDisplay; -use glutin::prelude::GlDisplay; -use raw_window_handle::HasWindowHandle; -use winit::window::Window; - -pub fn gl_config_picker(configs: Box + '_>) -> Config { - configs - .reduce(|accum, config| { - let transparency_check = config.supports_transparency().unwrap_or(false) - & !accum.supports_transparency().unwrap_or(false); - - if transparency_check || config.num_samples() > accum.num_samples() { - config - } else { - accum - } - }) - .unwrap() -} - -pub fn gl_create_context(window: &Window, gl_config: &Config) -> NotCurrentContext { - let raw_window_handle = window.window_handle().ok().map(|wh| wh.as_raw()); - let context_attributes = ContextAttributesBuilder::new().build(raw_window_handle); - - let fallback_context_attributes = ContextAttributesBuilder::new() - .with_context_api(ContextApi::Gles(None)) - .build(raw_window_handle); - - let legacy_context_attributes = ContextAttributesBuilder::new() - .with_context_api(ContextApi::OpenGl(Some(Version::new(2, 1)))) - .build(raw_window_handle); - - let gl_display = gl_config.display(); - - unsafe { - gl_display.create_context(gl_config, &context_attributes).unwrap_or_else(|_| { - gl_display.create_context(gl_config, &fallback_context_attributes).unwrap_or_else(|_| { - gl_display - .create_context(gl_config, &legacy_context_attributes) - .expect("Failed to create context") - }) - }) - } -} - diff --git a/src/app/renderer.rs b/src/app/renderer.rs deleted file mode 100644 index 92734da..0000000 --- a/src/app/renderer.rs +++ /dev/null @@ -1,208 +0,0 @@ -use glutin::prelude::GlDisplay; -use crate::app::gl; -use crate::models::{self, Model, ModelData, RenderObject, Scene, ShaderSource}; -use std::collections::HashMap; -use std::ops::Deref; -use std::ffi::{ CStr, CString }; - -fn get_gl_string(gl: &gl::Gl, variant: gl::types::GLenum) -> Option<&'static CStr>{ - unsafe { - let s = gl.GetString(variant); - (!s.is_null()).then(|| CStr::from_ptr(s.cast())) - } -} - -pub struct Renderer { - gl: gl::Gl, - shaders: HashMap, - scenes: HashMap -} - -impl Renderer { - pub fn new(gl_display: &D) -> Self { - let gl = gl::Gl::load_with(|symbol| { - let symbol = CString::new(symbol).unwrap(); - gl_display.get_proc_address(symbol.as_c_str()).cast() - }); - - if let Some(renderer) = get_gl_string(&gl, gl::RENDERER) { - println!("Running on {}", renderer.to_string_lossy()); - } - - if let Some(version) = get_gl_string(&gl, gl::VERSION) { - println!("OpenGL version {}", version.to_string_lossy()); - } - - if let Some(shaders_version) = get_gl_string(&gl, gl::SHADING_LANGUAGE_VERSION) { - println!("Shaders version on {}", shaders_version.to_string_lossy()); - } - - Self { - gl, - shaders: HashMap::new(), - scenes: HashMap::new() - } - } - - pub fn upload_scene_data(&mut self, scene_data: &ModelData) { - let objects = scene_data.objects_data - .iter() - .map(|(mesh, shader_src)| { - let shader = self.create_shader(shader_src); - let render_object = self.upload_mesh(mesh); - (render_object, shader) - }) - .collect::>(); - println!("Uploading Scene {}", scene_data.name); - self.scenes.insert(scene_data.name.clone(), Model { objects }); - } - - pub fn upload_mesh(&self, mesh: &models::Mesh) -> RenderObject { - unsafe { - let gl = &self.gl; - - let mut vao = std::mem::zeroed(); - gl.GenVertexArrays(1, &mut vao); - gl.BindVertexArray(vao); - - let mut vbo = std::mem::zeroed(); - gl.GenBuffers(1, &mut vbo); - gl.BindBuffer(gl::ARRAY_BUFFER, vbo); - let vertex_data = mesh.vertices - .iter() - .map(|v| { - [v.x, v.y, v.z, 1.0, 0.1, 0.1] - }) - .collect::>(); - - gl.BufferData( - gl::ARRAY_BUFFER, - (vertex_data.len() * std::mem::size_of::<[f32; 6]>()) as gl::types::GLsizeiptr, - vertex_data.as_ptr() as *const _, - gl::STATIC_DRAW, - ); - - let pos_attrib = 0; - let color_attrib = 1; - - gl.VertexAttribPointer( - pos_attrib as gl::types::GLuint, - 3, - gl::FLOAT, - 0, - 6 * std::mem::size_of::() as gl::types::GLsizei, - std::ptr::null() - ); - - gl.VertexAttribPointer( - color_attrib as gl::types::GLuint, - 3, - gl::FLOAT, - 0, - 6 * std::mem::size_of::() as gl::types::GLsizei, - (3 * std::mem::size_of::()) as *const _, - ); - - gl.EnableVertexAttribArray(pos_attrib as gl::types::GLuint); - gl.EnableVertexAttribArray(color_attrib as gl::types::GLuint); - - RenderObject { - vao, - vbo, - _ebo: None, - vertex_count: mesh.vertices.len() as i32, - _index_count: None - } - } - } - - fn compile_shader(gl: &gl::Gl, shader: gl::types::GLenum, source: &[u8]) -> gl::types::GLuint { - unsafe { - let shader = gl.CreateShader(shader); - gl.ShaderSource(shader, 1, [source.as_ptr().cast()].as_ptr(), std::ptr::null()); - gl.CompileShader(shader); - shader - } - } - - pub fn create_shader(&self, shader_src: &ShaderSource) -> gl::types::GLuint { - unsafe { - let vertex_shader = Renderer::compile_shader(&self.gl, gl::VERTEX_SHADER, shader_src.vertex_src); - let fragment_shader = Renderer::compile_shader(&self.gl, gl::FRAGMENT_SHADER, shader_src.fragment_src); - - let program = self.gl.CreateProgram(); - - self.gl.AttachShader(program, vertex_shader); - self.gl.AttachShader(program, fragment_shader); - - self.gl.LinkProgram(program); - - self.gl.DeleteShader(vertex_shader); - self.gl.DeleteShader(fragment_shader); - - program - } - } - - pub fn add_shader(&mut self, name: &str, shader: gl::types::GLuint) { - if let None = self.shaders.get(name) { - self.shaders.insert(name.to_string(), shader); - } - } - - pub fn get_shader(&self, name: &str) -> Option<&gl::types::GLuint> { - self.shaders.get(name) - } - - pub fn remove_shader(&mut self, name: &str) { - self.shaders.remove(name); - } - - pub fn resize(&self, width: i32, height: i32) { - unsafe { - self.gl.Viewport(0, 0, width, height); - } - } - - pub fn draw_object(&self, obj: &RenderObject, shader: gl::types::GLuint) { - unsafe { - self.UseProgram(shader); - - self.BindBuffer(gl::ARRAY_BUFFER, obj.vbo); - self.BindVertexArray(obj.vao); - - self.DrawArrays(gl::TRIANGLES, 0, obj.vertex_count); - } - } - - pub fn render(&self, current_scene: &String) { - unsafe { - self.ClearColor(1.0, 1.0, 1.0, 0.9); - self.Clear(gl::COLOR_BUFFER_BIT); - } - - if let Some(scene) = self.scenes.get(current_scene) { - for model in scene.models { - self.draw_object(obj, *shader); - } - } else { - eprintln!("Unknown Scene Requested: {}", current_scene); - } - } -} - -impl Deref for Renderer { - type Target = gl::Gl; - - fn deref(&self) -> &Self::Target { - &self.gl - } -} - -impl Drop for Renderer { - fn drop(&mut self) { - unsafe { - self.shaders.values().for_each(|shader| self.gl.DeleteProgram(*shader)); - } - } -}