From 7233be75a28b20c6f269c0454a3c7128b8737be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 14 Feb 2024 15:34:39 +0100 Subject: [PATCH] GL: recognize 9 new WebGL extensions. And 5 new ES extensions that they're based on. --- doc/opengl-support.dox | 14 ++ src/Magnum/GL/Context.cpp | 18 ++ src/Magnum/GL/Extensions.h | 233 ++++++++++-------- src/Magnum/GL/GL.h | 2 +- .../OpenGL/GLES2/Emscripten/extensions.txt | 20 +- .../OpenGL/GLES2/extensions.txt | 9 + src/MagnumExternal/OpenGL/GLES2/flextGL.h | 29 +++ .../OpenGL/GLES2/flextGLEmscripten.h | 18 ++ .../OpenGL/GLES2/flextGLPlatform.cpp | 3 + .../OpenGL/GLES2/flextGLPlatformIOS.cpp | 6 + .../GLES2/flextGLPlatformWindowsDesktop.cpp | 3 + .../OpenGL/GLES2/flextGLWindowsDesktop.h | 29 +++ .../OpenGL/GLES3/Emscripten/extensions.txt | 24 +- .../OpenGL/GLES3/extensions.txt | 6 + src/MagnumExternal/OpenGL/GLES3/flextGL.h | 57 +++++ .../OpenGL/GLES3/flextGLEmscripten.h | 23 ++ .../OpenGL/GLES3/flextGLPlatform.cpp | 12 + .../OpenGL/GLES3/flextGLPlatformIOS.cpp | 24 ++ .../GLES3/flextGLPlatformWindowsDesktop.cpp | 12 + .../OpenGL/GLES3/flextGLWindowsDesktop.h | 57 +++++ 20 files changed, 493 insertions(+), 106 deletions(-) diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 61ff24234..ffc0fbc71 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -452,6 +452,9 @@ Extension | Status @gl_extension2{ANGLE,texture_compression_dxt5,ANGLE_texture_compression_dxt} | done @m_class{m-doc-external} [ANGLE_multi_draw](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_multi_draw.txt) (unlisted) | done @m_class{m-doc-external} [ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_base_vertex_base_instance.txt) (unlisted) | done +@m_class{m-doc-external} [ANGLE_provoking_vertex](https://chromium.googlesource.com/angle/angle/+/main/extensions/ANGLE_provoking_vertex.txt) (unlisted) | | +@m_class{m-doc-external} [ANGLE_polygon_mode](https://chromium.googlesource.com/angle/angle/+/HEAD/extensions/ANGLE_polygon_mode.txt) (unlisted) | | +@m_class{m-doc-external} [ANGLE_stencil_texturing](https://chromium.googlesource.com/angle/angle/+/HEAD/extensions/ANGLE_stencil_texturing.txt) (unlisted) | | @gl_extension{APPLE,texture_format_BGRA8888} | done @gl_extension{APPLE,clip_distance} | done @gl_extension{ARM,shader_framebuffer_fetch} | missing renderer setup and limit query @@ -478,12 +481,14 @@ Extension | Status @gl_extension{EXT,texture_norm16} | done @gl_extension{EXT,texture_sRGB_R8} | done @gl_extension{EXT,texture_sRGB_RG8} | done +@gl_extension{EXT,blend_func_extended} | | @gl_extension{EXT,polygon_offset_clamp} | | @gl_extension{EXT,clip_cull_distance} | done @gl_extension{EXT,texture_compression_rgtc} | done @gl_extension{EXT,texture_compression_bptc} | done @gl_extension{EXT,texture_compression_s3tc_srgb} | done @gl_extension{EXT,clip_control} | done +@gl_extension{EXT,texture_mirror_clamp_to_edge} | | @gl_extension{EXT,depth_clamp} | done @gl_extension{IMG,texture_compression_pvrtc} | done @gl_extension2{KHR,texture_compression_astc_hdr,KHR_texture_compression_astc_hdr} | done @@ -567,7 +572,12 @@ Extension | Status @webgl_extension{EXT,texture_compression_rgtc} | done @webgl_extension{EXT,texture_compression_bptc} | done @webgl_extension{EXT,texture_norm16} | done +@webgl_extension{EXT,polygon_offset_clamp} | missing support in Emscripten +@webgl_extension{EXT,clip_control} | missing support in Emscripten +@webgl_extension{EXT,depth_clamp} | | +@webgl_extension{EXT,texture_mirror_clamp_to_edge} | | @webgl_extension{KHR,parallel_shader_compile} | done +@webgl_extension{NV,shader_noperspective_interpolation} | done (shading language only) @webgl_extension{OES,texture_float_linear} | done @webgl_extension{OES,draw_buffers_indexed} \n (originally named `EXT_draw_buffers_indexed`) | done @webgl_extension{OVR,multiview2} | | @@ -584,6 +594,10 @@ Extension | Status @webgl_extension{WEBGL,clip_cull_distance} \n (originally named `EXT_clip_cull_distance`) | done @webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} | done @webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance} | done +@webgl_extension{WEBGL,provoking_vertex} | missing support in Emscripten +@webgl_extension{WEBGL,polygon_mode} | missing support in Emscripten +@webgl_extension{WEBGL,blend_func_extended} | | +@webgl_extension{WEBGL,stencil_texturing} | | @section opengl-unsupported Unsupported OpenGL features diff --git a/src/Magnum/GL/Context.cpp b/src/Magnum/GL/Context.cpp index 4071aafbf..306aa345b 100644 --- a/src/Magnum/GL/Context.cpp +++ b/src/Magnum/GL/Context.cpp @@ -271,6 +271,7 @@ constexpr Extension ExtensionList460[]{ }; #elif defined(MAGNUM_TARGET_WEBGL) constexpr Extension ExtensionList[]{ + Extensions::EXT::clip_control{}, #ifndef MAGNUM_TARGET_GLES2 Extensions::EXT::clip_cull_distance{}, #endif @@ -278,6 +279,7 @@ constexpr Extension ExtensionList[]{ Extensions::EXT::color_buffer_float{}, #endif Extensions::EXT::color_buffer_half_float{}, + Extensions::EXT::depth_clamp{}, #ifdef MAGNUM_TARGET_GLES2 Extensions::EXT::disjoint_timer_query{}, #endif @@ -288,14 +290,17 @@ constexpr Extension ExtensionList[]{ Extensions::EXT::draw_buffers_indexed{}, #endif Extensions::EXT::float_blend{}, + Extensions::EXT::polygon_offset_clamp{}, Extensions::EXT::texture_compression_bptc{}, Extensions::EXT::texture_compression_rgtc{}, Extensions::EXT::texture_filter_anisotropic{}, + Extensions::EXT::texture_mirror_clamp_to_edge{}, #ifndef MAGNUM_TARGET_GLES2 Extensions::EXT::texture_norm16{}, #endif Extensions::KHR::parallel_shader_compile{}, #ifndef MAGNUM_TARGET_GLES2 + Extensions::NV::shader_noperspective_interpolation{}, Extensions::OES::draw_buffers_indexed{}, #endif Extensions::OES::texture_float_linear{}, @@ -303,6 +308,7 @@ constexpr Extension ExtensionList[]{ Extensions::OVR::multiview2{}, #endif Extensions::WEBGL::blend_equation_advanced_coherent{}, + Extensions::WEBGL::blend_func_extended{}, #ifndef MAGNUM_TARGET_GLES2 Extensions::WEBGL::clip_cull_distance{}, #endif @@ -321,6 +327,11 @@ constexpr Extension ExtensionList[]{ #ifndef MAGNUM_TARGET_GLES2 Extensions::WEBGL::multi_draw_instanced_base_vertex_base_instance{}, #endif + Extensions::WEBGL::polygon_mode{}, + #ifndef MAGNUM_TARGET_GLES2 + Extensions::WEBGL::provoking_vertex{}, + Extensions::WEBGL::stencil_texturing{}, + #endif }; constexpr Extension ExtensionListES300[]{ #ifdef MAGNUM_TARGET_GLES2 @@ -356,6 +367,11 @@ constexpr Extension ExtensionList[]{ #endif Extensions::ANGLE::compressed_texture_etc{}, Extensions::ANGLE::multi_draw{}, + Extensions::ANGLE::polygon_mode{}, + #ifndef MAGNUM_TARGET_GLES2 + Extensions::ANGLE::provoking_vertex{}, + Extensions::ANGLE::stencil_texturing{}, + #endif Extensions::ANGLE::texture_compression_dxt1{}, Extensions::ANGLE::texture_compression_dxt3{}, Extensions::ANGLE::texture_compression_dxt5{}, @@ -363,6 +379,7 @@ constexpr Extension ExtensionList[]{ Extensions::APPLE::texture_format_BGRA8888{}, Extensions::ARM::shader_framebuffer_fetch{}, Extensions::ARM::shader_framebuffer_fetch_depth_stencil{}, + Extensions::EXT::blend_func_extended{}, Extensions::EXT::clip_control{}, #ifndef MAGNUM_TARGET_GLES2 Extensions::EXT::clip_cull_distance{}, @@ -395,6 +412,7 @@ constexpr Extension ExtensionList[]{ Extensions::EXT::texture_compression_s3tc_srgb{}, Extensions::EXT::texture_filter_anisotropic{}, Extensions::EXT::texture_format_BGRA8888{}, + Extensions::EXT::texture_mirror_clamp_to_edge{}, #ifndef MAGNUM_TARGET_GLES2 Extensions::EXT::texture_norm16{}, Extensions::EXT::texture_sRGB_R8{}, diff --git a/src/Magnum/GL/Extensions.h b/src/Magnum/GL/Extensions.h index c624c620c..7012b91c9 100644 --- a/src/Magnum/GL/Extensions.h +++ b/src/Magnum/GL/Extensions.h @@ -311,64 +311,82 @@ namespace ANGLE { recognizing both for compatibility: https://github.com/KhronosGroup/WebGL/commit/00b799a56c90f94c1f4cc402f33a281ed9f43e31 */ _extension(16,EXT,draw_buffers_indexed, GLES300, None) // #45 #endif + _extension(17,EXT,polygon_offset_clamp, GLES200, None) // #50 + _extension(18,EXT,clip_control, GLES200, None) // #51 + _extension(19,EXT,depth_clamp, GLES200, None) // #52 + /* EXT_conservative_depth (54) not exposed, as there's no corresponding ES + extension exposed yet either */ + _extension(20,EXT,texture_mirror_clamp_to_edge, GLES200, None) // #62 } namespace KHR { - _extension(17,KHR,parallel_shader_compile, GLES200, None) // #37 + _extension(21,KHR,parallel_shader_compile, GLES200, None) // #37 +} namespace NV { + #ifndef MAGNUM_TARGET_GLES2 + _extension(22,NV,shader_noperspective_interpolation, GLES300, None) // #55 + #endif } namespace OES { #ifdef MAGNUM_TARGET_GLES2 - _extension(20,OES,texture_float, GLES200, GLES300) // #1 - _extension(21,OES,texture_half_float, GLES200, GLES300) // #2 - _extension(22,OES,standard_derivatives, GLES200, GLES300) // #4 - _extension(23,OES,vertex_array_object, GLES200, GLES300) // #5 - _extension(24,OES,element_index_uint, GLES200, GLES300) // #10 + _extension(30,OES,texture_float, GLES200, GLES300) // #1 + _extension(31,OES,texture_half_float, GLES200, GLES300) // #2 + _extension(32,OES,standard_derivatives, GLES200, GLES300) // #4 + _extension(33,OES,vertex_array_object, GLES200, GLES300) // #5 + _extension(34,OES,element_index_uint, GLES200, GLES300) // #10 #endif - _extension(25,OES,texture_float_linear, GLES200, None) // #20 + _extension(35,OES,texture_float_linear, GLES200, None) // #20 #ifdef MAGNUM_TARGET_GLES2 - _extension(26,OES,texture_half_float_linear, GLES200, GLES300) // #21 - _extension(27,OES,fbo_render_mipmap, GLES200, GLES300) // #28 + _extension(36,OES,texture_half_float_linear, GLES200, GLES300) // #21 + _extension(37,OES,fbo_render_mipmap, GLES200, GLES300) // #28 #endif #ifndef MAGNUM_TARGET_GLES2 /* This one was renamed from EXT_draw_buffers_indexed in March 2020, recognizing both for compatibility: https://github.com/KhronosGroup/WebGL/commit/00b799a56c90f94c1f4cc402f33a281ed9f43e31 */ - _extension(28,OES,draw_buffers_indexed, GLES300, None) // #45 + _extension(38,OES,draw_buffers_indexed, GLES300, None) // #45 #endif } namespace OVR { #ifndef MAGNUM_TARGET_GLES2 - _extension(30,OVR,multiview2, GLES300, None) // #36 + _extension(40,OVR,multiview2, GLES300, None) // #36 #endif } namespace WEBGL { - _extension(31,WEBGL,lose_context, GLES200, None) // #3 - _extension(32,WEBGL,debug_renderer_info, GLES200, None) // #6 - _extension(33,WEBGL,debug_shaders, GLES200, None) // #7 - _extension(34,WEBGL,compressed_texture_s3tc, GLES200, None) // #8 + _extension(41,WEBGL,lose_context, GLES200, None) // #3 + _extension(42,WEBGL,debug_renderer_info, GLES200, None) // #6 + _extension(43,WEBGL,debug_shaders, GLES200, None) // #7 + _extension(44,WEBGL,compressed_texture_s3tc, GLES200, None) // #8 #ifdef MAGNUM_TARGET_GLES2 - _extension(35,WEBGL,depth_texture, GLES200, GLES300) // #9 + _extension(45,WEBGL,depth_texture, GLES200, GLES300) // #9 #endif - _extension(36,WEBGL,compressed_texture_pvrtc, GLES200, None) // #13 + _extension(46,WEBGL,compressed_texture_pvrtc, GLES200, None) // #13 #ifdef MAGNUM_TARGET_GLES2 /* Subsumed by the EXT_color_buffer_float extension in WebGL 2, so not exposing it on WebGL 2 builds even though it's not in core */ - _extension(37,WEBGL,color_buffer_float, GLES200, None) // #14 - _extension(38,WEBGL,draw_buffers, GLES200, GLES300) // #18 + _extension(47,WEBGL,color_buffer_float, GLES200, None) // #14 + _extension(48,WEBGL,draw_buffers, GLES200, GLES300) // #18 #endif /* WEBGL_compressed_texture_etc1 (24) not exposed as the ES OES_compressed_ETC1_RGB8_texture extension isn't exposed either */ - _extension(39,WEBGL,compressed_texture_etc, GLES200, None) // #29 - _extension(40,WEBGL,compressed_texture_astc, GLES200, None) // #30 - _extension(41,WEBGL,compressed_texture_s3tc_srgb, GLES200, None) // #32 - _extension(42,WEBGL,multi_draw, GLES200, None) // #40 - _extension(43,WEBGL,blend_equation_advanced_coherent,GLES200,None) // #42 + _extension(49,WEBGL,compressed_texture_etc, GLES200, None) // #29 + _extension(50,WEBGL,compressed_texture_astc, GLES200, None) // #30 + _extension(51,WEBGL,compressed_texture_s3tc_srgb, GLES200, None) // #32 + _extension(52,WEBGL,multi_draw, GLES200, None) // #40 + _extension(53,WEBGL,blend_equation_advanced_coherent,GLES200,None) // #42 #ifndef MAGNUM_TARGET_GLES2 /* This one was renamed from EXT_clip_cull_distance in January 2023, recognizing both for compatibility: https://github.com/KhronosGroup/WebGL/commit/c06fc8230ce4b1748be89ce3279cbe5348c9c9c9 */ - _extension(44,WEBGL,clip_cull_distance, GLES300, None) // #43 + _extension(54,WEBGL,clip_cull_distance, GLES300, None) // #43 + #endif + #ifndef MAGNUM_TARGET_GLES2 + _extension(55,WEBGL,draw_instanced_base_vertex_base_instance,GLES300,None) // #46 + _extension(56,WEBGL,multi_draw_instanced_base_vertex_base_instance,GLES300,None) // #47 + _extension(57,WEBGL,provoking_vertex, GLES300, None) // #48 #endif + _extension(58,WEBGL,polygon_mode, GLES200, None) // #53 + _extension(59,WEBGL,blend_func_extended, GLES200, None) // #58 #ifndef MAGNUM_TARGET_GLES2 - _extension(45,WEBGL,draw_instanced_base_vertex_base_instance,GLES300,None) // #46 - _extension(46,WEBGL,multi_draw_instanced_base_vertex_base_instance,GLES300,None) // #47 + /* WEBGL_render_shared_exponent (60) not exposed, as the ES + QCOM_render_shared_exponent extension isn't exposed yet either */ + _extension(60,WEBGL,stencil_texturing, GLES300, None) // #61 #endif } namespace MAGNUM { #ifndef MAGNUM_TARGET_GLES2 - _extension(47,MAGNUM,shader_vertex_id, GLES300, GLES300) + _extension(61,MAGNUM,shader_vertex_id, GLES300, GLES300) #endif } #else @@ -399,119 +417,128 @@ namespace ANDROID { _extension( 10,ANGLE,base_vertex_base_instance, GLES300, None) // #??? #endif _extension( 11,ANGLE,compressed_texture_etc, GLES200, None) // #??? + #ifndef MAGNUM_TARGET_GLES2 + _extension( 12,ANGLE,provoking_vertex, GLES300, None) // #??? + #endif + _extension( 13,ANGLE,polygon_mode, GLES200, None) // #??? + #ifndef MAGNUM_TARGET_GLES2 + _extension( 14,ANGLE,stencil_texturing, GLES300, None) // #??? + #endif } namespace APPLE { #ifdef MAGNUM_TARGET_GLES2 - _extension( 12,APPLE,framebuffer_multisample, GLES200, GLES300) // #78 + _extension( 20,APPLE,framebuffer_multisample, GLES200, GLES300) // #78 #endif - _extension( 13,APPLE,texture_format_BGRA8888, GLES200, None) // #79 + _extension( 21,APPLE,texture_format_BGRA8888, GLES200, None) // #79 #ifdef MAGNUM_TARGET_GLES2 - _extension( 14,APPLE,texture_max_level, GLES200, GLES300) // #80 + _extension( 22,APPLE,texture_max_level, GLES200, GLES300) // #80 #endif - _extension( 15,APPLE,clip_distance, GLES200, None) // #193 + _extension( 23,APPLE,clip_distance, GLES200, None) // #193 } namespace ARM { #ifdef MAGNUM_TARGET_GLES2 - _extension( 16,ARM,rgba8, GLES200, GLES300) // #82 + _extension( 24,ARM,rgba8, GLES200, GLES300) // #82 #endif - _extension( 17,ARM,shader_framebuffer_fetch, GLES200, None) // #165 - _extension( 18,ARM,shader_framebuffer_fetch_depth_stencil, GLES200, None) // #166 + _extension( 25,ARM,shader_framebuffer_fetch, GLES200, None) // #165 + _extension( 26,ARM,shader_framebuffer_fetch_depth_stencil, GLES200, None) // #166 } namespace EXT { - _extension( 19,EXT,texture_filter_anisotropic, GLES200, None) // #41 + _extension( 30,EXT,texture_filter_anisotropic, GLES200, None) // #41 #ifdef MAGNUM_TARGET_GLES2 - _extension( 20,EXT,texture_type_2_10_10_10_REV, GLES200, GLES300) // #42 + _extension( 31,EXT,texture_type_2_10_10_10_REV, GLES200, GLES300) // #42 #endif - _extension( 21,EXT,texture_compression_dxt1, GLES200, None) // #49 - _extension( 22,EXT,texture_format_BGRA8888, GLES200, None) // #51 + _extension( 32,EXT,texture_compression_dxt1, GLES200, None) // #49 + _extension( 33,EXT,texture_format_BGRA8888, GLES200, None) // #51 #ifdef MAGNUM_TARGET_GLES2 - _extension( 23,EXT,discard_framebuffer, GLES200, GLES300) // #64 - _extension( 24,EXT,blend_minmax, GLES200, GLES300) // #65 + _extension( 34,EXT,discard_framebuffer, GLES200, GLES300) // #64 + _extension( 35,EXT,blend_minmax, GLES200, GLES300) // #65 #endif - _extension( 25,EXT,read_format_bgra, GLES200, None) // #66 - _extension( 26,EXT,multi_draw_arrays, GLES200, None) // #67 + _extension( 36,EXT,read_format_bgra, GLES200, None) // #66 + _extension( 37,EXT,multi_draw_arrays, GLES200, None) // #67 #ifdef MAGNUM_TARGET_GLES2 - _extension( 27,EXT,shader_texture_lod, GLES200, GLES300) // #77 - _extension( 28,EXT,unpack_subimage, GLES200, GLES300) // #90 + _extension( 38,EXT,shader_texture_lod, GLES200, GLES300) // #77 + _extension( 39,EXT,unpack_subimage, GLES200, GLES300) // #90 #endif - _extension( 29,EXT,color_buffer_half_float, GLES200, GLES320) // #97 - _extension( 30,EXT,debug_label, GLES200, None) // #98 - _extension( 31,EXT,debug_marker, GLES200, None) // #99 + _extension( 40,EXT,color_buffer_half_float, GLES200, GLES320) // #97 + _extension( 41,EXT,debug_label, GLES200, None) // #98 + _extension( 42,EXT,debug_marker, GLES200, None) // #99 #ifdef MAGNUM_TARGET_GLES2 - _extension( 32,EXT,occlusion_query_boolean, GLES200, GLES300) // #100 + _extension( 43,EXT,occlusion_query_boolean, GLES200, GLES300) // #100 #endif - _extension( 33,EXT,separate_shader_objects, GLES200, None) // #101 + _extension( 44,EXT,separate_shader_objects, GLES200, None) // #101 #ifdef MAGNUM_TARGET_GLES2 - _extension( 34,EXT,shadow_samplers, GLES200, GLES300) // #102 - _extension( 35,EXT,texture_rg, GLES200, GLES300) // #103 - _extension( 36,EXT,sRGB, GLES200, GLES300) // #105 + _extension( 45,EXT,shadow_samplers, GLES200, GLES300) // #102 + _extension( 46,EXT,texture_rg, GLES200, GLES300) // #103 + _extension( 47,EXT,sRGB, GLES200, GLES300) // #105 #endif - _extension( 37,EXT,multisampled_render_to_texture, GLES200, None) // #106 - _extension( 38,EXT,robustness, GLES200, None) // #107 + _extension( 48,EXT,multisampled_render_to_texture, GLES200, None) // #106 + _extension( 49,EXT,robustness, GLES200, None) // #107 #ifdef MAGNUM_TARGET_GLES2 - _extension( 39,EXT,texture_storage, GLES200, GLES300) // #108 - _extension( 40,EXT,map_buffer_range, GLES200, GLES300) // #121 + _extension( 50,EXT,texture_storage, GLES200, GLES300) // #108 + _extension( 51,EXT,map_buffer_range, GLES200, GLES300) // #121 #endif - _extension( 41,EXT,shader_framebuffer_fetch, GLES200, None) // #122 + _extension( 52,EXT,shader_framebuffer_fetch, GLES200, None) // #122 #ifndef MAGNUM_TARGET_GLES2 - _extension( 42,EXT,color_buffer_float, GLES300, GLES320) // #137 + _extension( 53,EXT,color_buffer_float, GLES300, GLES320) // #137 #endif - _extension( 43,EXT,disjoint_timer_query, GLES200, None) // #150 + _extension( 54,EXT,disjoint_timer_query, GLES200, None) // #150 #ifdef MAGNUM_TARGET_GLES2 - _extension( 44,EXT,draw_buffers, GLES200, GLES300) // #151 + _extension( 55,EXT,draw_buffers, GLES200, GLES300) // #151 #endif - _extension( 45,EXT,texture_sRGB_decode, GLES200, None) // #152 - _extension( 46,EXT,sRGB_write_control, GLES200, None) // #153 - _extension( 47,EXT,texture_compression_s3tc, GLES200, None) // #154 - _extension( 48,EXT,pvrtc_sRGB, GLES200, None) // #155 + _extension( 56,EXT,texture_sRGB_decode, GLES200, None) // #152 + _extension( 57,EXT,sRGB_write_control, GLES200, None) // #153 + _extension( 58,EXT,texture_compression_s3tc, GLES200, None) // #154 + _extension( 59,EXT,pvrtc_sRGB, GLES200, None) // #155 #ifdef MAGNUM_TARGET_GLES2 - _extension( 49,EXT,instanced_arrays, GLES200, GLES300) // #156 - _extension( 50,EXT,draw_instanced, GLES200, GLES300) // #157 + _extension( 60,EXT,instanced_arrays, GLES200, GLES300) // #156 + _extension( 61,EXT,draw_instanced, GLES200, GLES300) // #157 #endif #ifndef MAGNUM_TARGET_GLES2 - _extension( 51,EXT,shader_integer_mix, GLES300, None) // #161 - _extension( 52,EXT,copy_image, GLES300, GLES320) // #175 + _extension( 62,EXT,shader_integer_mix, GLES300, None) // #161 + _extension( 63,EXT,copy_image, GLES300, GLES320) // #175 #endif - _extension( 53,EXT,draw_buffers_indexed, GLES200, GLES320) // #176 + _extension( 64,EXT,draw_buffers_indexed, GLES200, GLES320) // #176 #ifndef MAGNUM_TARGET_GLES2 - _extension( 54,EXT,geometry_shader, GLES310, GLES320) // #177 - _extension( 55,EXT,gpu_shader5, GLES310, GLES320) // #178 - _extension( 56,EXT,shader_io_blocks, GLES310, GLES320) // #180 - _extension( 57,EXT,tessellation_shader, GLES310, GLES320) // #181 + _extension( 65,EXT,geometry_shader, GLES310, GLES320) // #177 + _extension( 66,EXT,gpu_shader5, GLES310, GLES320) // #178 + _extension( 67,EXT,shader_io_blocks, GLES310, GLES320) // #180 + _extension( 68,EXT,tessellation_shader, GLES310, GLES320) // #181 #endif - _extension( 58,EXT,texture_border_clamp, GLES200, GLES320) // #182 + _extension( 69,EXT,texture_border_clamp, GLES200, GLES320) // #182 #ifndef MAGNUM_TARGET_GLES2 - _extension( 59,EXT,texture_buffer, GLES310, GLES320) // #183 - _extension( 60,EXT,texture_cube_map_array, GLES310, GLES320) // #184 - _extension( 61,EXT,texture_view, GLES310, None) // #185 - _extension( 62,EXT,primitive_bounding_box, GLES310, GLES320) // #186 + _extension( 70,EXT,texture_buffer, GLES310, GLES320) // #183 + _extension( 71,EXT,texture_cube_map_array, GLES310, GLES320) // #184 + _extension( 72,EXT,texture_view, GLES310, None) // #185 + _extension( 73,EXT,primitive_bounding_box, GLES310, GLES320) // #186 #endif - _extension( 63,EXT,draw_elements_base_vertex, GLES200, None) // #204 + _extension( 74,EXT,draw_elements_base_vertex, GLES200, None) // #204 #ifndef MAGNUM_TARGET_GLES2 - _extension( 64,EXT,texture_norm16, GLES310, None) // #207 - _extension( 65,EXT,texture_sRGB_R8, GLES300, None) // #221 - _extension( 66,EXT,texture_sRGB_RG8, GLES300, None) // #223 + _extension( 75,EXT,texture_norm16, GLES310, None) // #207 + _extension( 76,EXT,texture_sRGB_R8, GLES300, None) // #221 + _extension( 77,EXT,texture_sRGB_RG8, GLES300, None) // #223 #endif - _extension( 67,EXT,polygon_offset_clamp, GLES200, None) // #252 + _extension( 78,EXT,blend_func_extended, GLES200, None) // #247 + _extension( 79,EXT,polygon_offset_clamp, GLES200, None) // #252 #ifndef MAGNUM_TARGET_GLES2 - _extension( 68,EXT,clip_cull_distance, GLES300, None) // #257 - _extension( 69,EXT,texture_compression_rgtc, GLES300, None) // #286 - _extension( 70,EXT,texture_compression_bptc, GLES300, None) // #287 - #endif - _extension( 71,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 - _extension( 72,EXT,clip_control, GLES200, None) // #290 - _extension( 73,EXT,depth_clamp, GLES200, None) // #309 + _extension( 80,EXT,clip_cull_distance, GLES300, None) // #257 + _extension( 81,EXT,texture_compression_rgtc, GLES300, None) // #286 + _extension( 82,EXT,texture_compression_bptc, GLES300, None) // #287 + #endif + _extension( 83,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 + _extension( 84,EXT,clip_control, GLES200, None) // #290 + _extension( 85,EXT,texture_mirror_clamp_to_edge, GLES200, None) // #291 + _extension( 86,EXT,depth_clamp, GLES200, None) // #309 } namespace IMG { - _extension( 74,IMG,texture_compression_pvrtc, GLES200, None) // #54 + _extension( 87,IMG,texture_compression_pvrtc, GLES200, None) // #54 } namespace KHR { - _extension( 80,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117 - _extension( 81,KHR,texture_compression_astc_hdr,GLES200, None) // #117 - _extension( 82,KHR,debug, GLES200, GLES320) // #118 - _extension( 83,KHR,blend_equation_advanced, GLES200, GLES320) // #168 - _extension( 84,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 - _extension( 85,KHR,robustness, GLES200, GLES320) // #170 - _extension( 86,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189 - _extension( 87,KHR,context_flush_control, GLES200, None) // #191 - _extension( 88,KHR,no_error, GLES200, None) // #243 - _extension( 89,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249 - _extension( 90,KHR,parallel_shader_compile, GLES200, None) // #288 + _extension( 89,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117 + _extension( 90,KHR,texture_compression_astc_hdr,GLES200, None) // #117 + _extension( 91,KHR,debug, GLES200, GLES320) // #118 + _extension( 92,KHR,blend_equation_advanced, GLES200, GLES320) // #168 + _extension( 93,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 + _extension( 94,KHR,robustness, GLES200, GLES320) // #170 + _extension( 95,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189 + _extension( 96,KHR,context_flush_control, GLES200, None) // #191 + _extension( 97,KHR,no_error, GLES200, None) // #243 + _extension( 98,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249 + _extension( 99,KHR,parallel_shader_compile, GLES200, None) // #288 } namespace NV { #ifdef MAGNUM_TARGET_GLES2 _extension(100,NV,draw_buffers, GLES200, GLES300) // #91 diff --git a/src/Magnum/GL/GL.h b/src/Magnum/GL/GL.h index a714e33fd..f2900fd9a 100644 --- a/src/Magnum/GL/GL.h +++ b/src/Magnum/GL/GL.h @@ -51,7 +51,7 @@ namespace Implementation { #elif !defined(MAGNUM_TARGET_WEBGL) 160 #else - 48 + 64 #endif }; } diff --git a/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt b/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt index 31cb7bb1b..11a5e605d 100644 --- a/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt @@ -29,10 +29,17 @@ extension EXT_texture_filter_anisotropic optional extension EXT_disjoint_timer_query optional extension EXT_texture_compression_rgtc optional extension EXT_texture_compression_bptc optional -# These are used as a base for WEBGL_* extensions +# These three are used as a base for WEBGL_* extensions extension EXT_color_buffer_float optional extension EXT_texture_compression_s3tc optional extension EXT_texture_compression_s3tc_srgb optional +# Entrypoints for these two not in Emscripten yet. Last checked on 2024-02-14. +# extension EXT_polygon_offset_clamp optional +# extension EXT_clip_control optional +extension EXT_depth_clamp optional +extension EXT_texture_mirror_clamp_to_edge optional +# These three are used as a base for WEBGL_* extensions +extension EXT_blend_func_extended optional extension IMG_texture_compression_pvrtc optional extension KHR_texture_compression_astc_ldr optional @@ -53,7 +60,18 @@ extension ANGLE_base_vertex_base_instance optional # GOOGLE!!! # extension ANGLE_compressed_texture_etc optional +# These are based off ANGLE_ extensions, gl_angle_ext.xml has them but +# Emscripten not yet, and for Emscripten they'd need to get renamed from an +# ANGLE suffix to WEBGL. Last checked on 2024-02-14. +# extension WEBGL_provoking_vertex optional +# extension WEGBL_polygon_mode optional + begin functions blacklist + # Not present in WebGL variant of EXT_blend_func_extended + BindFragDataLocationEXT + BindFragDataLocationIndexedEXT + GetFragDataIndexEXT + GetProgramResourceLocationIndexEXT # Not present in WEBGL_blend_equation_advanced_coherent BlendBarrierKHR # Not present in WebGL variant of KHR_parallel_shader_compile diff --git a/src/MagnumExternal/OpenGL/GLES2/extensions.txt b/src/MagnumExternal/OpenGL/GLES2/extensions.txt index 940d098d2..13c55f37a 100644 --- a/src/MagnumExternal/OpenGL/GLES2/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES2/extensions.txt @@ -91,9 +91,11 @@ extension EXT_sRGB_write_control optional extension EXT_texture_compression_s3tc optional extension EXT_pvrtc_sRGB optional extension EXT_draw_elements_base_vertex optional +extension EXT_blend_func_extended optional extension EXT_polygon_offset_clamp optional extension EXT_texture_compression_s3tc_srgb optional extension EXT_clip_control optional +extension EXT_texture_mirror_clamp_to_edge optional extension EXT_depth_clamp optional extension IMG_texture_compression_pvrtc optional # extension KHR_texture_compression_astc_hdr optional @@ -120,6 +122,7 @@ extension ANGLE_multi_draw optional # Haha you wish, OF COURSE it's not included in gl_angle_ext.xml so I have to # hardcode the numeric values there. GOOGLE!!! # extension ANGLE_compressed_texture_etc optional +extension ANGLE_polygon_mode optional begin functions blacklist # These are listed in EXT_separate_shader_objects with only the comment @@ -156,6 +159,12 @@ begin functions blacklist TextureStorage2DEXT TextureStorage3DEXT + # These are listed in EXT_blend_func_extended only for ES3+ + BindFragDataLocationEXT + BindFragDataLocationIndexedEXT + GetFragDataIndexEXT + GetProgramResourceLocationIndexEXT + # EXT/OES_draw_elements_base_vertex lists those are only present in ES3 DrawRangeElementsBaseVertexEXT DrawRangeElementsBaseVertexOES diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGL.h b/src/MagnumExternal/OpenGL/GLES2/flextGL.h index f12507f4d..efeb7f2a3 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGL.h @@ -993,6 +993,16 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 +/* GL_EXT_blend_func_extended */ + +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC + /* GL_EXT_polygon_offset_clamp */ #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B @@ -1013,6 +1023,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_CLIP_ORIGIN_EXT 0x935C #define GL_CLIP_DEPTH_MODE_EXT 0x935D +/* GL_EXT_texture_mirror_clamp_to_edge */ + +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -1087,6 +1101,13 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_STENCIL_INDEX4_OES 0x8D47 +/* GL_ANGLE_polygon_mode */ + +#define GL_POLYGON_MODE_ANGLE 0x0B40 +#define GL_LINE_ANGLE 0x1B01 +#define GL_FILL_ANGLE 0x1B02 +#define GL_POLYGON_OFFSET_LINE_ANGLE 0x2A02 + /* Function prototypes */ /* GL_ES_VERSION_2_0 */ @@ -1260,6 +1281,10 @@ struct FlextGL { void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei); void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, const GLsizei*, GLsizei); + /* GL_ANGLE_polygon_mode */ + + void(APIENTRY *PolygonModeANGLE)(GLenum, GLenum); + /* GL_APPLE_framebuffer_multisample */ void(APIENTRY *RenderbufferStorageMultisampleAPPLE)(GLenum, GLsizei, GLenum, GLsizei, GLsizei); @@ -1518,6 +1543,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE #define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE +/* GL_ANGLE_polygon_mode */ + +#define glPolygonModeANGLE flextGL.PolygonModeANGLE + /* GL_APPLE_framebuffer_multisample */ #define glRenderbufferStorageMultisampleAPPLE flextGL.RenderbufferStorageMultisampleAPPLE diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h b/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h index c6f24db82..d8caa7e6d 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h @@ -520,6 +520,24 @@ typedef khronos_uint64_t GLuint64; #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +/* GL_EXT_depth_clamp */ + +#define GL_DEPTH_CLAMP_EXT 0x864F + +/* GL_EXT_texture_mirror_clamp_to_edge */ + +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 + +/* GL_EXT_blend_func_extended */ + +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC + /* GL_IMG_texture_compression_pvrtc */ #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp index 9a5f6cb54..8171475a1 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp @@ -50,6 +50,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_ANGLE_polygon_mode */ + flextGL.PolygonModeANGLE = reinterpret_cast(loader.load("glPolygonModeANGLE")); + /* GL_APPLE_framebuffer_multisample */ flextGL.RenderbufferStorageMultisampleAPPLE = reinterpret_cast(loader.load("glRenderbufferStorageMultisampleAPPLE")); flextGL.ResolveMultisampleFramebufferAPPLE = reinterpret_cast(loader.load("glResolveMultisampleFramebufferAPPLE")); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp index 67478b7db..3d0935ea2 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp @@ -34,6 +34,7 @@ #undef glMultiDrawArraysInstancedANGLE #undef glMultiDrawElementsANGLE #undef glMultiDrawElementsInstancedANGLE +#undef glPolygonModeANGLE #undef glRenderbufferStorageMultisampleAPPLE #undef glResolveMultisampleFramebufferAPPLE #undef glClipControlEXT @@ -197,6 +198,11 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(glMultiDrawElementsInstancedANGLE); #endif + /* GL_ANGLE_polygon_mode */ + #if GL_ANGLE_polygon_mode + flextGL.PolygonModeANGLE = reinterpret_cast(glPolygonModeANGLE); + #endif + /* GL_APPLE_framebuffer_multisample */ #if GL_APPLE_framebuffer_multisample flextGL.RenderbufferStorageMultisampleAPPLE = reinterpret_cast(glRenderbufferStorageMultisampleAPPLE); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp index 98c06cdff..a5acc3714 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp @@ -50,6 +50,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_ANGLE_polygon_mode */ + flextGL.PolygonModeANGLE = reinterpret_cast(loader.load("glPolygonModeANGLE")); + /* GL_APPLE_framebuffer_multisample */ flextGL.RenderbufferStorageMultisampleAPPLE = reinterpret_cast(loader.load("glRenderbufferStorageMultisampleAPPLE")); flextGL.ResolveMultisampleFramebufferAPPLE = reinterpret_cast(loader.load("glResolveMultisampleFramebufferAPPLE")); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h index 22b75daa4..f1f202c20 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h @@ -989,6 +989,16 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 #define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 +/* GL_EXT_blend_func_extended */ + +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC + /* GL_EXT_polygon_offset_clamp */ #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B @@ -1009,6 +1019,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_CLIP_ORIGIN_EXT 0x935C #define GL_CLIP_DEPTH_MODE_EXT 0x935D +/* GL_EXT_texture_mirror_clamp_to_edge */ + +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -1083,6 +1097,13 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_STENCIL_INDEX4_OES 0x8D47 +/* GL_ANGLE_polygon_mode */ + +#define GL_POLYGON_MODE_ANGLE 0x0B40 +#define GL_LINE_ANGLE 0x1B01 +#define GL_FILL_ANGLE 0x1B02 +#define GL_POLYGON_OFFSET_LINE_ANGLE 0x2A02 + /* Function prototypes. First an intersection of GL 1.0 / 1.1 functions that are also available in ES 2.0, which we can access directly. */ @@ -1160,6 +1181,10 @@ struct FlextGL { void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei); void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, const GLsizei*, GLsizei); + /* GL_ANGLE_polygon_mode */ + + void(APIENTRY *PolygonModeANGLE)(GLenum, GLenum); + /* GL_APPLE_framebuffer_multisample */ void(APIENTRY *RenderbufferStorageMultisampleAPPLE)(GLenum, GLsizei, GLenum, GLsizei, GLsizei); @@ -1518,6 +1543,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE #define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE +/* GL_ANGLE_polygon_mode */ + +#define glPolygonModeANGLE flextGL.PolygonModeANGLE + /* GL_APPLE_framebuffer_multisample */ #define glRenderbufferStorageMultisampleAPPLE flextGL.RenderbufferStorageMultisampleAPPLE diff --git a/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt index 3727199cc..0f645cb42 100644 --- a/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt @@ -19,11 +19,20 @@ extension EXT_draw_buffers_indexed optional # WebGL has only OVR_multiview2, but we need the definitions from OVR_multiview extension OVR_multiview optional extension OVR_multiview2 optional -# These are used as a base for WEBGL_* extensions +# These two are used as a base for WEBGL_* extensions extension EXT_texture_compression_s3tc optional extension EXT_texture_compression_s3tc_srgb optional +# Entrypoints for these two not in Emscripten yet. Last checked on 2024-02-14. +# extension EXT_polygon_offset_clamp optional +# extension EXT_clip_control optional +extension EXT_depth_clamp optional +extension EXT_texture_mirror_clamp_to_edge optional +# These three are used as a base for WEBGL_* extensions +extension EXT_blend_func_extended optional extension IMG_texture_compression_pvrtc optional extension KHR_texture_compression_astc_ldr optional +# GLSL-only extension, no actual API +extension NV_shader_noperspective_interpolation optional # WEBGL_blend_equation_advanced_coherent includes just the enums but not the # barrier @@ -36,13 +45,26 @@ extension KHR_parallel_shader_compile optional # From the gl_angle_ext file, base for WEBGL_multi_draw etc extension ANGLE_multi_draw optional extension ANGLE_base_vertex_base_instance optional +# Base for WEBGL_stencil_texturing +extension ANGLE_stencil_texturing optional # Haha you wish, OF COURSE it's not included in gl_angle_ext.xml. But # fortunately ES3 defines these constants on its own so I don't need it anyway. # extension ANGLE_compressed_texture_etc optional extension MAGNUM_what_webgl_has_but_es_not optional +# These are based off ANGLE_ extensions, gl_angle_ext.xml has them but +# Emscripten not yet, and for Emscripten they'd need to get renamed from an +# ANGLE suffix to WEBGL. Last checked on 2024-02-14. +# extension WEBGL_provoking_vertex optional +# extension WEGBL_polygon_mode optional + begin functions blacklist + # Not present in WebGL variant of EXT_blend_func_extended + BindFragDataLocationEXT + BindFragDataLocationIndexedEXT + GetFragDataIndexEXT + GetProgramResourceLocationIndexEXT # Not present in WEBGL_blend_equation_advanced_coherent BlendBarrierKHR # Not present in WebGL variant of KHR_parallel_shader_compile diff --git a/src/MagnumExternal/OpenGL/GLES3/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/extensions.txt index a05fd37f8..f2ee69381 100644 --- a/src/MagnumExternal/OpenGL/GLES3/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/extensions.txt @@ -64,12 +64,14 @@ extension EXT_draw_elements_base_vertex optional extension EXT_texture_norm16 optional extension EXT_texture_sRGB_R8 optional extension EXT_texture_sRGB_RG8 optional +extension EXT_blend_func_extended optional extension EXT_polygon_offset_clamp optional extension EXT_clip_cull_distance optional extension EXT_texture_compression_rgtc optional extension EXT_texture_compression_bptc optional extension EXT_texture_compression_s3tc_srgb optional extension EXT_clip_control optional +extension EXT_texture_mirror_clamp_to_edge optional extension EXT_depth_clamp optional extension IMG_texture_compression_pvrtc optional # extension KHR_texture_compression_astc_hdr optional @@ -101,5 +103,9 @@ extension ANGLE_base_vertex_base_instance optional # Haha you wish, OF COURSE it's not included in gl_angle_ext.xml. But # fortunately ES3 defines these constants on its own so I don't need it anyway. # extension ANGLE_compressed_texture_etc optional +extension ANGLE_provoking_vertex optional +extension ANGLE_polygon_mode optional +# Definitions already present in ES 3.1 +# extension ANGLE_stencil_texturing optional # kate: hl python diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGL.h b/src/MagnumExternal/OpenGL/GLES3/flextGL.h index 44092f05d..f7e36668f 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGL.h @@ -1590,6 +1590,16 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_SRG8_EXT 0x8FBE +/* GL_EXT_blend_func_extended */ + +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC + /* GL_EXT_polygon_offset_clamp */ #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B @@ -1638,6 +1648,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_CLIP_ORIGIN_EXT 0x935C #define GL_CLIP_DEPTH_MODE_EXT 0x935D +/* GL_EXT_texture_mirror_clamp_to_edge */ + +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -1719,6 +1733,19 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_MAX_VIEWS_OVR 0x9631 #define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 +/* GL_ANGLE_provoking_vertex */ + +#define GL_FIRST_VERTEX_CONVENTION_ANGLE 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_ANGLE 0x8E4E +#define GL_PROVOKING_VERTEX_ANGLE 0x8E4F + +/* GL_ANGLE_polygon_mode */ + +#define GL_POLYGON_MODE_ANGLE 0x0B40 +#define GL_LINE_ANGLE 0x1B01 +#define GL_FILL_ANGLE 0x1B02 +#define GL_POLYGON_OFFSET_LINE_ANGLE 0x2A02 + /* Function prototypes */ /* GL_ES_VERSION_2_0 */ @@ -1992,6 +2019,14 @@ struct FlextGL { void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei); void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, const GLsizei*, GLsizei); + /* GL_ANGLE_polygon_mode */ + + void(APIENTRY *PolygonModeANGLE)(GLenum, GLenum); + + /* GL_ANGLE_provoking_vertex */ + + void(APIENTRY *ProvokingVertexANGLE)(GLenum); + /* GL_ES_VERSION_3_1 */ void(APIENTRY *ActiveShaderProgram)(GLuint, GLuint); @@ -2110,6 +2145,13 @@ struct FlextGL { void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *); void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean); + /* GL_EXT_blend_func_extended */ + + void(APIENTRY *BindFragDataLocationEXT)(GLuint, GLuint, const GLchar *); + void(APIENTRY *BindFragDataLocationIndexedEXT)(GLuint, GLuint, GLuint, const GLchar *); + GLint(APIENTRY *GetFragDataIndexEXT)(GLuint, const GLchar *); + GLint(APIENTRY *GetProgramResourceLocationIndexEXT)(GLuint, GLenum, const GLchar *); + /* GL_EXT_clip_control */ void(APIENTRY *ClipControlEXT)(GLenum, GLenum); @@ -2347,6 +2389,14 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE #define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE +/* GL_ANGLE_polygon_mode */ + +#define glPolygonModeANGLE flextGL.PolygonModeANGLE + +/* GL_ANGLE_provoking_vertex */ + +#define glProvokingVertexANGLE flextGL.ProvokingVertexANGLE + /* GL_ES_VERSION_3_1 */ #define glActiveShaderProgram flextGL.ActiveShaderProgram @@ -2465,6 +2515,13 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glTexParameterIuiv flextGL.TexParameterIuiv #define glTexStorage3DMultisample flextGL.TexStorage3DMultisample +/* GL_EXT_blend_func_extended */ + +#define glBindFragDataLocationEXT flextGL.BindFragDataLocationEXT +#define glBindFragDataLocationIndexedEXT flextGL.BindFragDataLocationIndexedEXT +#define glGetFragDataIndexEXT flextGL.GetFragDataIndexEXT +#define glGetProgramResourceLocationIndexEXT flextGL.GetProgramResourceLocationIndexEXT + /* GL_EXT_clip_control */ #define glClipControlEXT flextGL.ClipControlEXT diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h b/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h index 8e10bceb1..8877983db 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h @@ -823,6 +823,24 @@ typedef struct __GLsync *GLsync; #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +/* GL_EXT_depth_clamp */ + +#define GL_DEPTH_CLAMP_EXT 0x864F + +/* GL_EXT_texture_mirror_clamp_to_edge */ + +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 + +/* GL_EXT_blend_func_extended */ + +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC + /* GL_IMG_texture_compression_pvrtc */ #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 @@ -884,6 +902,11 @@ typedef struct __GLsync *GLsync; #define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 #define GL_COMPLETION_STATUS_KHR 0x91B1 +/* GL_ANGLE_stencil_texturing */ + +#define GL_DEPTH_STENCIL_TEXTURE_MODE_ANGLE 0x90EA +#define GL_STENCIL_INDEX_ANGLE 0x1901 + /* Function prototypes */ /* GL_ANGLE_base_vertex_base_instance */ diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp index a482a6423..c557cb9f3 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp @@ -45,6 +45,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_ANGLE_polygon_mode */ + flextGL.PolygonModeANGLE = reinterpret_cast(loader.load("glPolygonModeANGLE")); + + /* GL_ANGLE_provoking_vertex */ + flextGL.ProvokingVertexANGLE = reinterpret_cast(loader.load("glProvokingVertexANGLE")); + /* GL_ES_VERSION_3_1 */ flextGL.ActiveShaderProgram = reinterpret_cast(loader.load("glActiveShaderProgram")); flextGL.BindImageTexture = reinterpret_cast(loader.load("glBindImageTexture")); @@ -161,6 +167,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.TexParameterIuiv = reinterpret_cast(loader.load("glTexParameterIuiv")); flextGL.TexStorage3DMultisample = reinterpret_cast(loader.load("glTexStorage3DMultisample")); + /* GL_EXT_blend_func_extended */ + flextGL.BindFragDataLocationEXT = reinterpret_cast(loader.load("glBindFragDataLocationEXT")); + flextGL.BindFragDataLocationIndexedEXT = reinterpret_cast(loader.load("glBindFragDataLocationIndexedEXT")); + flextGL.GetFragDataIndexEXT = reinterpret_cast(loader.load("glGetFragDataIndexEXT")); + flextGL.GetProgramResourceLocationIndexEXT = reinterpret_cast(loader.load("glGetProgramResourceLocationIndexEXT")); + /* GL_EXT_clip_control */ flextGL.ClipControlEXT = reinterpret_cast(loader.load("glClipControlEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp index 924ff79ce..40b2fd91e 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp @@ -33,6 +33,12 @@ #undef glMultiDrawArraysInstancedANGLE #undef glMultiDrawElementsANGLE #undef glMultiDrawElementsInstancedANGLE +#undef glPolygonModeANGLE +#undef glProvokingVertexANGLE +#undef glBindFragDataLocationEXT +#undef glBindFragDataLocationIndexedEXT +#undef glGetFragDataIndexEXT +#undef glGetProgramResourceLocationIndexEXT #undef glClipControlEXT #undef glCopyImageSubDataEXT #undef glGetObjectLabelEXT @@ -185,6 +191,24 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(glMultiDrawElementsInstancedANGLE); #endif + /* GL_ANGLE_polygon_mode */ + #if GL_ANGLE_polygon_mode + flextGL.PolygonModeANGLE = reinterpret_cast(glPolygonModeANGLE); + #endif + + /* GL_ANGLE_provoking_vertex */ + #if GL_ANGLE_provoking_vertex + flextGL.ProvokingVertexANGLE = reinterpret_cast(glProvokingVertexANGLE); + #endif + + /* GL_EXT_blend_func_extended */ + #if GL_EXT_blend_func_extended + flextGL.BindFragDataLocationEXT = reinterpret_cast(glBindFragDataLocationEXT); + flextGL.BindFragDataLocationIndexedEXT = reinterpret_cast(glBindFragDataLocationIndexedEXT); + flextGL.GetFragDataIndexEXT = reinterpret_cast(glGetFragDataIndexEXT); + flextGL.GetProgramResourceLocationIndexEXT = reinterpret_cast(glGetProgramResourceLocationIndexEXT); + #endif + /* GL_EXT_clip_control */ #if GL_EXT_clip_control flextGL.ClipControlEXT = reinterpret_cast(glClipControlEXT); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp index 3e071cc8d..7adb9fc0f 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp @@ -45,6 +45,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_ANGLE_polygon_mode */ + flextGL.PolygonModeANGLE = reinterpret_cast(loader.load("glPolygonModeANGLE")); + + /* GL_ANGLE_provoking_vertex */ + flextGL.ProvokingVertexANGLE = reinterpret_cast(loader.load("glProvokingVertexANGLE")); + /* GL_ES_VERSION_2_0 */ flextGL.ActiveTexture = reinterpret_cast(loader.load("glActiveTexture")); flextGL.AttachShader = reinterpret_cast(loader.load("glAttachShader")); @@ -363,6 +369,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.TexParameterIuiv = reinterpret_cast(loader.load("glTexParameterIuiv")); flextGL.TexStorage3DMultisample = reinterpret_cast(loader.load("glTexStorage3DMultisample")); + /* GL_EXT_blend_func_extended */ + flextGL.BindFragDataLocationEXT = reinterpret_cast(loader.load("glBindFragDataLocationEXT")); + flextGL.BindFragDataLocationIndexedEXT = reinterpret_cast(loader.load("glBindFragDataLocationIndexedEXT")); + flextGL.GetFragDataIndexEXT = reinterpret_cast(loader.load("glGetFragDataIndexEXT")); + flextGL.GetProgramResourceLocationIndexEXT = reinterpret_cast(loader.load("glGetProgramResourceLocationIndexEXT")); + /* GL_EXT_clip_control */ flextGL.ClipControlEXT = reinterpret_cast(loader.load("glClipControlEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h index 5fd5ab593..17bbc5b08 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h @@ -1583,6 +1583,16 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_SRG8_EXT 0x8FBE +/* GL_EXT_blend_func_extended */ + +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC + /* GL_EXT_polygon_offset_clamp */ #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B @@ -1631,6 +1641,10 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_CLIP_ORIGIN_EXT 0x935C #define GL_CLIP_DEPTH_MODE_EXT 0x935D +/* GL_EXT_texture_mirror_clamp_to_edge */ + +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -1712,6 +1726,19 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_MAX_VIEWS_OVR 0x9631 #define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 +/* GL_ANGLE_provoking_vertex */ + +#define GL_FIRST_VERTEX_CONVENTION_ANGLE 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_ANGLE 0x8E4E +#define GL_PROVOKING_VERTEX_ANGLE 0x8E4F + +/* GL_ANGLE_polygon_mode */ + +#define GL_POLYGON_MODE_ANGLE 0x0B40 +#define GL_LINE_ANGLE 0x1B01 +#define GL_FILL_ANGLE 0x1B02 +#define GL_POLYGON_OFFSET_LINE_ANGLE 0x2A02 + /* Function prototypes. First an intersection of GL 1.0 / 1.1 functions that are also available in ES, which we can access directly. ES 3.2 doesn't add anything new that would be in GL 1.1, so that section is omitted here. */ @@ -1792,6 +1819,14 @@ struct FlextGL { void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei); void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const void *const*, const GLsizei*, GLsizei); + /* GL_ANGLE_polygon_mode */ + + void(APIENTRY *PolygonModeANGLE)(GLenum, GLenum); + + /* GL_ANGLE_provoking_vertex */ + + void(APIENTRY *ProvokingVertexANGLE)(GLenum); + /* GL_ES_VERSION_2_0 */ void(APIENTRY *ActiveTexture)(GLenum); @@ -2114,6 +2149,13 @@ struct FlextGL { void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *); void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean); + /* GL_EXT_blend_func_extended */ + + void(APIENTRY *BindFragDataLocationEXT)(GLuint, GLuint, const GLchar *); + void(APIENTRY *BindFragDataLocationIndexedEXT)(GLuint, GLuint, GLuint, const GLchar *); + GLint(APIENTRY *GetFragDataIndexEXT)(GLuint, const GLchar *); + GLint(APIENTRY *GetProgramResourceLocationIndexEXT)(GLuint, GLenum, const GLchar *); + /* GL_EXT_clip_control */ void(APIENTRY *ClipControlEXT)(GLenum, GLenum); @@ -2351,6 +2393,14 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE #define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE +/* GL_ANGLE_polygon_mode */ + +#define glPolygonModeANGLE flextGL.PolygonModeANGLE + +/* GL_ANGLE_provoking_vertex */ + +#define glProvokingVertexANGLE flextGL.ProvokingVertexANGLE + /* GL_ES_VERSION_2_0 */ #define glActiveTexture flextGL.ActiveTexture @@ -2673,6 +2723,13 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glTexParameterIuiv flextGL.TexParameterIuiv #define glTexStorage3DMultisample flextGL.TexStorage3DMultisample +/* GL_EXT_blend_func_extended */ + +#define glBindFragDataLocationEXT flextGL.BindFragDataLocationEXT +#define glBindFragDataLocationIndexedEXT flextGL.BindFragDataLocationIndexedEXT +#define glGetFragDataIndexEXT flextGL.GetFragDataIndexEXT +#define glGetProgramResourceLocationIndexEXT flextGL.GetProgramResourceLocationIndexEXT + /* GL_EXT_clip_control */ #define glClipControlEXT flextGL.ClipControlEXT