[experiment] rework c opengl extensions loading + allow force core profile in less than GL 3.2
fixes #492
- rework c glad opengl extension loading using a generated constant ordered crc32 hash table from selected extension names, this removes the needing of malloc each extension name temporaly and brute-force string compare because searching in the table is just using "lower-bound" search at the iteration of each opengl extension name
- additionally allow core profile remove deprecate procs even from older versions than opengl 3.2
for example `--api='gl:core=2.1'` gonna remove `glBegin`, `glEnd`, etc. from opengl 2.1
example of the generated code:
```c
static unsigned int glad_gl_crc32_extensions_gl[] = {
0x22eb0518, // GL_ARB_gl_spirv
0x299a86ca, // GL_ARB_texture_compression_bptc
0x3f22171c, // GL_EXT_texture_compression_s3tc
0x4a03d323, // GL_ARB_texture_buffer_range
0x56ea549b, // GL_ARB_texture_storage_multisample
0x67b4f8bb, // GL_ARB_shader_storage_buffer_object
0x7a21b127, // GL_ARB_shader_atomic_counters
0x7b80afe6, // GL_ARB_texture_cube_map_array
0x8a58e0da, // GL_ARB_spirv_extensions
0x98127c6a, // GL_ARB_get_texture_sub_image
0xb04ac249, // GL_ARB_compute_shader
0xb9ab7373, // GL_ARB_ES3_compatibility
0xc4e4e799, // GL_ARB_texture_storage
0xc8a531f1, // GL_ARB_debug_output
0xe47cbcf8, // GL_ARB_shader_image_size
0xe9fdddb4, // GL_KHR_texture_compression_astc_ldr
0xeef47568, // GL_KHR_texture_compression_astc_hdr
0xf48228f4, // GL_ARB_shader_image_load_store
0xffffffff
};
static void glad_gl_find_extensions_gl(void) {
unsigned int glad_gl_flags_extensions_gl[19] = {0};
glad_gl_check_extensions(glad_gl_flags_extensions_gl, glad_gl_crc32_extensions_gl, 18);
GLAD_GL_ARB_gl_spirv = (glad_gl_flags_extensions_gl[0] != 0);
GLAD_GL_ARB_texture_compression_bptc = (glad_gl_flags_extensions_gl[1] != 0);
GLAD_GL_EXT_texture_compression_s3tc = (glad_gl_flags_extensions_gl[2] != 0);
GLAD_GL_ARB_texture_buffer_range = (glad_gl_flags_extensions_gl[3] != 0);
GLAD_GL_ARB_texture_storage_multisample = (glad_gl_flags_extensions_gl[4] != 0);
GLAD_GL_ARB_shader_storage_buffer_object = (glad_gl_flags_extensions_gl[5] != 0);
GLAD_GL_ARB_shader_atomic_counters = (glad_gl_flags_extensions_gl[6] != 0);
GLAD_GL_ARB_texture_cube_map_array = (glad_gl_flags_extensions_gl[7] != 0);
GLAD_GL_ARB_spirv_extensions = (glad_gl_flags_extensions_gl[8] != 0);
GLAD_GL_ARB_get_texture_sub_image = (glad_gl_flags_extensions_gl[9] != 0);
GLAD_GL_ARB_compute_shader = (glad_gl_flags_extensions_gl[10] != 0);
GLAD_GL_ARB_ES3_compatibility = (glad_gl_flags_extensions_gl[11] != 0);
GLAD_GL_ARB_texture_storage = (glad_gl_flags_extensions_gl[12] != 0);
GLAD_GL_ARB_debug_output = (glad_gl_flags_extensions_gl[13] != 0);
GLAD_GL_ARB_shader_image_size = (glad_gl_flags_extensions_gl[14] != 0);
GLAD_GL_KHR_texture_compression_astc_ldr = (glad_gl_flags_extensions_gl[15] != 0);
GLAD_GL_KHR_texture_compression_astc_hdr = (glad_gl_flags_extensions_gl[16] != 0);
GLAD_GL_ARB_shader_image_load_store = (glad_gl_flags_extensions_gl[17] != 0);
}
```
合并状态:未合并 关闭于 2025-09-14 0 条评论