ITADN

[experiment] rework c opengl extensions loading + allow force core profile in less than GL 3.2

#523Pull Requestmrgaturus 创建于 2025-09-10
M
mrgaturuscommented
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 条评论