From b0bc3663347513748fdb0902dbd71ef8fe6aa5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 12 Feb 2021 22:30:50 +0100 Subject: [PATCH] GL: recognize and load ANGLE multi-draw extensions. Needed a change in flextGL to allow merging in 3rd party gl.xml additions because Chrome is apparently a center of the universe and thus doesn't need to bother upstreaming its extensions, ffs. --- doc/changelog.dox | 13 +++-- doc/opengl-support.dox | 4 ++ src/Magnum/GL/Context.cpp | 6 +++ src/Magnum/GL/Extensions.h | 50 ++++++++++------- .../OpenGL/GLES2/Emscripten/extensions.txt | 7 +++ .../OpenGL/GLES2/extensions.txt | 13 +++++ src/MagnumExternal/OpenGL/GLES2/flextGL.h | 32 +++++++++++ .../OpenGL/GLES2/flextGLEmscripten.h | 14 +++++ .../OpenGL/GLES2/flextGLPlatform.cpp | 13 +++++ .../OpenGL/GLES2/flextGLPlatformIOS.cpp | 26 +++++++++ .../GLES2/flextGLPlatformWindowsDesktop.cpp | 13 +++++ .../OpenGL/GLES2/flextGLWindowsDesktop.h | 32 +++++++++++ .../OpenGL/GLES3/Emscripten/extensions.txt | 8 ++- .../OpenGL/GLES3/extensions.txt | 8 +++ src/MagnumExternal/OpenGL/GLES3/flextGL.h | 54 +++++++++++++++++++ .../OpenGL/GLES3/flextGLEmscripten.h | 14 +++++ .../OpenGL/GLES3/flextGLPlatform.cpp | 23 ++++++++ .../OpenGL/GLES3/flextGLPlatformIOS.cpp | 46 ++++++++++++++++ .../GLES3/flextGLPlatformWindowsDesktop.cpp | 23 ++++++++ .../OpenGL/GLES3/flextGLWindowsDesktop.h | 54 +++++++++++++++++++ 20 files changed, 428 insertions(+), 25 deletions(-) diff --git a/doc/changelog.dox b/doc/changelog.dox index c345876d0..52d89fe16 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -62,11 +62,14 @@ See also: @webgl_extension{WEBGL,debug_renderer_info} and @webgl_extension{WEBGL,debug_shaders} extensions, no implementation done yet -- Recognizing @webgl_extension{WEBGL,multi_draw}, - @webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} and - @webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance} - extensions, however there's no Emscripten entrypoints for those yet which - means these can'be implemented right now. +- Recognizing ANGLE GLES and WebGL multi-draw extensions: + - @m_class{m-doc-external} [ANGLE_multi_draw](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_multi_draw.txt) + - @m_class{m-doc-external} [ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_base_vertex_base_instance.txt) + - @gl_extension{EXT,draw_elements_base_vertex} + - @gl_extension{OES,draw_elements_base_vertex} + - @webgl_extension{WEBGL,multi_draw} + - @webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} + - @webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance} - Added a @ref GL::AbstractTexture::target() getter to simplify interaction with raw GL code - Exposed @gl_extension{ARB,buffer_storage} as diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 9a30dac23..eaee12a1b 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -449,6 +449,8 @@ Extension | Status @gl_extension2{ANGLE,texture_compression_dxt1,ANGLE_texture_compression_dxt} | done @gl_extension2{ANGLE,texture_compression_dxt3,ANGLE_texture_compression_dxt} | done @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) | | +@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) | | @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 @@ -470,6 +472,7 @@ Extension | Status @gl_extension{EXT,texture_compression_s3tc} | done @gl_extension{EXT,pvrtc_sRGB} | done @gl_extension{EXT,shader_integer_mix} | done (shading language only) +@gl_extension{EXT,draw_elements_base_vertex} | | @gl_extension{EXT,texture_norm16} | done @gl_extension{EXT,texture_sRGB_R8} | done @gl_extension{EXT,texture_sRGB_RG8} | done @@ -497,6 +500,7 @@ Extension | Status @gl_extension{OES,stencil1} | done @gl_extension{OES,stencil4} | done @gl_extension{OES,texture_float_linear} | done +@gl_extension{OES,draw_elements_base_vertex} | | @gl_extension{OVR,multiview} | | @gl_extension{OVR,multiview2} | | diff --git a/src/Magnum/GL/Context.cpp b/src/Magnum/GL/Context.cpp index b9fb43676..0086d1238 100644 --- a/src/Magnum/GL/Context.cpp +++ b/src/Magnum/GL/Context.cpp @@ -327,6 +327,10 @@ constexpr Extension ExtensionList[]{ #ifndef MAGNUM_TARGET_GLES2 _extension(ANDROID,extension_pack_es31a), #endif + #ifndef MAGNUM_TARGET_GLES2 + _extension(ANGLE,base_vertex_base_instance), + #endif + _extension(ANGLE,multi_draw), _extension(ANGLE,texture_compression_dxt1), _extension(ANGLE,texture_compression_dxt3), _extension(ANGLE,texture_compression_dxt5), @@ -340,6 +344,7 @@ constexpr Extension ExtensionList[]{ _extension(EXT,debug_label), _extension(EXT,debug_marker), _extension(EXT,disjoint_timer_query), + _extension(EXT,draw_elements_base_vertex), _extension(EXT,multi_draw_arrays), _extension(EXT,multisampled_render_to_texture), _extension(EXT,polygon_offset_clamp), @@ -391,6 +396,7 @@ constexpr Extension ExtensionList[]{ #endif _extension(NV,texture_border_clamp), _extension(OES,depth32), + _extension(OES,draw_elements_base_vertex), _extension(OES,mapbuffer), _extension(OES,stencil1), _extension(OES,stencil4), diff --git a/src/Magnum/GL/Extensions.h b/src/Magnum/GL/Extensions.h index bcbc47247..b03b8e944 100644 --- a/src/Magnum/GL/Extensions.h +++ b/src/Magnum/GL/Extensions.h @@ -368,21 +368,29 @@ namespace ANDROID { #ifdef MAGNUM_TARGET_GLES2 _extension( 8,ANGLE,depth_texture, GLES200, GLES300) // #138 #endif + /* Unlike the WEBGL variants, these don't have a number assigned because + Google just doesn't give a shit. These are also not in the official + gl.xml but had to be fetched from an extra file inside ANGLE's repo + (which doesn't even follow the XML schema, so it had to be fixed). */ + _extension( 9,ANGLE,multi_draw, GLES200, None) // #??? + #ifndef MAGNUM_TARGET_GLES2 + _extension( 10,ANGLE,base_vertex_base_instance, GLES310, None) // #??? + #endif } namespace APPLE { #ifdef MAGNUM_TARGET_GLES2 - _extension( 9,APPLE,framebuffer_multisample, GLES200, GLES300) // #78 + _extension( 11,APPLE,framebuffer_multisample, GLES200, GLES300) // #78 #endif - _extension( 10,APPLE,texture_format_BGRA8888, GLES200, None) // #79 + _extension( 12,APPLE,texture_format_BGRA8888, GLES200, None) // #79 #ifdef MAGNUM_TARGET_GLES2 - _extension( 11,APPLE,texture_max_level, GLES200, GLES300) // #80 + _extension( 13,APPLE,texture_max_level, GLES200, GLES300) // #80 #endif - _extension( 12,APPLE,clip_distance, GLES200, None) // #193 + _extension( 14,APPLE,clip_distance, GLES200, None) // #193 } namespace ARM { #ifdef MAGNUM_TARGET_GLES2 - _extension( 13,ARM,rgba8, GLES200, GLES300) // #82 + _extension( 15,ARM,rgba8, GLES200, GLES300) // #82 #endif - _extension( 14,ARM,shader_framebuffer_fetch, GLES200, None) // #165 - _extension( 15,ARM,shader_framebuffer_fetch_depth_stencil, GLES200, None) // #166 + _extension( 16,ARM,shader_framebuffer_fetch, GLES200, None) // #165 + _extension( 17,ARM,shader_framebuffer_fetch_depth_stencil, GLES200, None) // #166 } namespace EXT { _extension( 19,EXT,texture_filter_anisotropic, GLES200, None) // #41 #ifdef MAGNUM_TARGET_GLES2 @@ -450,19 +458,22 @@ namespace ANDROID { _extension( 59,EXT,texture_buffer, GLES310, GLES320) // #183 _extension( 60,EXT,texture_cube_map_array, GLES310, GLES320) // #184 _extension( 61,EXT,primitive_bounding_box, GLES310, GLES320) // #186 - _extension( 62,EXT,texture_norm16, GLES310, None) // #207 - _extension( 63,EXT,texture_sRGB_R8, GLES300, None) // #221 - _extension( 64,EXT,texture_sRGB_RG8, GLES300, None) // #223 #endif - _extension( 65,EXT,polygon_offset_clamp, GLES200, None) // #252 + _extension( 62,EXT,draw_elements_base_vertex, GLES200, None) // #204 + #ifndef MAGNUM_TARGET_GLES2 + _extension( 63,EXT,texture_norm16, GLES310, None) // #207 + _extension( 64,EXT,texture_sRGB_R8, GLES300, None) // #221 + _extension( 65,EXT,texture_sRGB_RG8, GLES300, None) // #223 + #endif + _extension( 66,EXT,polygon_offset_clamp, GLES200, None) // #252 #ifndef MAGNUM_TARGET_GLES2 - _extension( 66,EXT,clip_cull_distance, GLES300, None) // #257 - _extension( 67,EXT,texture_compression_rgtc, GLES300, None) // #286 - _extension( 68,EXT,texture_compression_bptc, GLES300, None) // #287 + _extension( 67,EXT,clip_cull_distance, GLES300, None) // #257 + _extension( 68,EXT,texture_compression_rgtc, GLES300, None) // #286 + _extension( 69,EXT,texture_compression_bptc, GLES300, None) // #287 #endif - _extension( 69,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 + _extension( 70,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 } namespace IMG { - _extension( 70,IMG,texture_compression_pvrtc, GLES200, None) // #54 + _extension( 71,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 @@ -545,14 +556,15 @@ namespace ANDROID { #ifndef MAGNUM_TARGET_GLES2 _extension(147,OES,texture_storage_multisample_2d_array, GLES310, GLES320) // #174 #endif + _extension(148,OES,draw_elements_base_vertex, GLES200, None) // #219 } namespace OVR { #ifndef MAGNUM_TARGET_GLES2 - _extension(148,OVR,multiview, GLES300, None) // #241 - _extension(149,OVR,multiview2, GLES300, None) // #242 + _extension(149,OVR,multiview, GLES300, None) // #241 + _extension(150,OVR,multiview2, GLES300, None) // #242 #endif } namespace MAGNUM { #ifndef MAGNUM_TARGET_GLES2 - _extension(150,MAGNUM,shader_vertex_id, GLES300, GLES300) + _extension(151,MAGNUM,shader_vertex_id, GLES300, GLES300) #endif } #endif diff --git a/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt b/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt index 3a3a378f2..a95e95b8c 100644 --- a/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES2/Emscripten/extensions.txt @@ -4,6 +4,8 @@ version 2.0 es +extraspec https://raw.githubusercontent.com/google/angle/master/scripts/gl_angle_ext.xml + extension ANGLE_instanced_arrays optional extension EXT_color_buffer_half_float optional extension EXT_sRGB optional @@ -37,6 +39,11 @@ extension KHR_texture_compression_astc_ldr optional # barrier extension KHR_blend_equation_advanced optional +# From the gl_angle_ext file, base for WEBGL_multi_draw +extension ANGLE_multi_draw optional +# Base for WEBGL_{multi_,}draw_instanced_base_vertex_base_instance +extension ANGLE_base_vertex_base_instance optional + begin functions blacklist # Not present in WEBGL_blend_equation_advanced_coherent BlendBarrierKHR diff --git a/src/MagnumExternal/OpenGL/GLES2/extensions.txt b/src/MagnumExternal/OpenGL/GLES2/extensions.txt index 8f8a361d0..8dc4dae15 100644 --- a/src/MagnumExternal/OpenGL/GLES2/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES2/extensions.txt @@ -4,6 +4,8 @@ version 2.0 es +extraspec https://raw.githubusercontent.com/google/angle/master/scripts/gl_angle_ext.xml + extension ANGLE_framebuffer_blit optional extension ANGLE_framebuffer_multisample optional extension ANGLE_instanced_arrays optional @@ -87,6 +89,7 @@ extension EXT_texture_sRGB_decode optional 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_polygon_offset_clamp optional extension EXT_texture_compression_s3tc_srgb optional extension IMG_texture_compression_pvrtc optional @@ -106,6 +109,10 @@ extension OES_depth32 optional extension OES_mapbuffer optional extension OES_stencil1 optional extension OES_stencil4 optional +extension OES_draw_elements_base_vertex optional + +# From the gl_angle_ext file +extension ANGLE_multi_draw optional begin functions blacklist # These are listed in EXT_separate_shader_objects with only the comment @@ -141,6 +148,12 @@ begin functions blacklist TextureStorage1DEXT TextureStorage2DEXT TextureStorage3DEXT + + # EXT/OES_draw_elements_base_vertex lists those are only present in ES3 + DrawRangeElementsBaseVertexEXT + DrawRangeElementsBaseVertexOES + DrawElementsInstancedBaseVertexEXT + DrawElementsInstancedBaseVertexOES end functions blacklist # kate: hl python diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGL.h b/src/MagnumExternal/OpenGL/GLES2/flextGL.h index 9e51a4eae..2bce54cde 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGL.h @@ -1230,6 +1230,13 @@ struct FlextGL { void(APIENTRY *DrawElementsInstancedANGLE)(GLenum, GLsizei, GLenum, const void *, GLsizei); void(APIENTRY *VertexAttribDivisorANGLE)(GLuint, GLuint); + /* GL_ANGLE_multi_draw */ + + void(APIENTRY *MultiDrawArraysANGLE)(GLenum, const GLint *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawArraysInstancedANGLE)(GLenum, const GLint *, const GLsizei *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, GLsizei); + void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei*, GLsizei); + /* GL_APPLE_framebuffer_multisample */ void(APIENTRY *RenderbufferStorageMultisampleAPPLE)(GLenum, GLsizei, GLenum, GLsizei, GLsizei); @@ -1273,6 +1280,11 @@ struct FlextGL { void(APIENTRY *EnableiEXT)(GLenum, GLuint); GLboolean(APIENTRY *IsEnablediEXT)(GLenum, GLuint); + /* GL_EXT_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexEXT)(GLenum, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *MultiDrawElementsBaseVertexEXT)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei, const GLint *); + /* GL_EXT_instanced_arrays */ void(APIENTRY *DrawArraysInstancedEXT)(GLenum, GLint, GLsizei, GLsizei); @@ -1425,6 +1437,10 @@ struct FlextGL { void(APIENTRY *NamedFramebufferSampleLocationsfvNV)(GLuint, GLuint, GLsizei, const GLfloat *); void(APIENTRY *ResolveDepthValuesNV)(void); + /* GL_OES_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexOES)(GLenum, GLsizei, GLenum, const void *, GLint); + /* GL_OES_mapbuffer */ void(APIENTRY *GetBufferPointervOES)(GLenum, GLenum, void **); @@ -1464,6 +1480,13 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glDrawElementsInstancedANGLE flextGL.DrawElementsInstancedANGLE #define glVertexAttribDivisorANGLE flextGL.VertexAttribDivisorANGLE +/* GL_ANGLE_multi_draw */ + +#define glMultiDrawArraysANGLE flextGL.MultiDrawArraysANGLE +#define glMultiDrawArraysInstancedANGLE flextGL.MultiDrawArraysInstancedANGLE +#define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE +#define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE + /* GL_APPLE_framebuffer_multisample */ #define glRenderbufferStorageMultisampleAPPLE flextGL.RenderbufferStorageMultisampleAPPLE @@ -1507,6 +1530,11 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glEnableiEXT flextGL.EnableiEXT #define glIsEnablediEXT flextGL.IsEnablediEXT +/* GL_EXT_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexEXT flextGL.DrawElementsBaseVertexEXT +#define glMultiDrawElementsBaseVertexEXT flextGL.MultiDrawElementsBaseVertexEXT + /* GL_EXT_instanced_arrays */ #define glDrawArraysInstancedEXT flextGL.DrawArraysInstancedEXT @@ -1659,6 +1687,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glNamedFramebufferSampleLocationsfvNV flextGL.NamedFramebufferSampleLocationsfvNV #define glResolveDepthValuesNV flextGL.ResolveDepthValuesNV +/* GL_OES_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexOES flextGL.DrawElementsBaseVertexOES + /* GL_OES_mapbuffer */ #define glGetBufferPointervOES flextGL.GetBufferPointervOES diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h b/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h index 3be9d7239..c357e5a57 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLEmscripten.h @@ -589,12 +589,26 @@ typedef khronos_uint64_t GLuint64; /* Function prototypes */ +/* GL_ANGLE_base_vertex_base_instance */ + +GLAPI void glDrawArraysInstancedBaseInstanceANGLE(GLenum, GLint, GLsizei, GLsizei, GLuint); +GLAPI void glDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei, GLint, GLuint); +GLAPI void glMultiDrawArraysInstancedBaseInstanceANGLE(GLenum, const GLint *, const GLsizei *, const GLsizei *, const GLuint *, GLsizei); +GLAPI void glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei *, const GLint *, const GLuint *, GLsizei); + /* GL_ANGLE_instanced_arrays */ GLAPI void glDrawArraysInstancedANGLE(GLenum, GLint, GLsizei, GLsizei); GLAPI void glDrawElementsInstancedANGLE(GLenum, GLsizei, GLenum, const void *, GLsizei); GLAPI void glVertexAttribDivisorANGLE(GLuint, GLuint); +/* GL_ANGLE_multi_draw */ + +GLAPI void glMultiDrawArraysANGLE(GLenum, const GLint *, const GLsizei *, GLsizei); +GLAPI void glMultiDrawArraysInstancedANGLE(GLenum, const GLint *, const GLsizei *, const GLsizei *, GLsizei); +GLAPI void glMultiDrawElementsANGLE(GLenum, const GLsizei *, GLenum, const GLvoid *const*, GLsizei); +GLAPI void glMultiDrawElementsInstancedANGLE(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei*, GLsizei); + /* GL_ES_VERSION_2_0 */ GLAPI void glActiveTexture(GLenum); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp index ea270afe8..47357d686 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp @@ -44,6 +44,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.DrawElementsInstancedANGLE = reinterpret_cast(loader.load("glDrawElementsInstancedANGLE")); flextGL.VertexAttribDivisorANGLE = reinterpret_cast(loader.load("glVertexAttribDivisorANGLE")); + /* GL_ANGLE_multi_draw */ + flextGL.MultiDrawArraysANGLE = reinterpret_cast(loader.load("glMultiDrawArraysANGLE")); + flextGL.MultiDrawArraysInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawArraysInstancedANGLE")); + flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); + flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_APPLE_framebuffer_multisample */ flextGL.RenderbufferStorageMultisampleAPPLE = reinterpret_cast(loader.load("glRenderbufferStorageMultisampleAPPLE")); flextGL.ResolveMultisampleFramebufferAPPLE = reinterpret_cast(loader.load("glResolveMultisampleFramebufferAPPLE")); @@ -80,6 +86,10 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.EnableiEXT = reinterpret_cast(loader.load("glEnableiEXT")); flextGL.IsEnablediEXT = reinterpret_cast(loader.load("glIsEnablediEXT")); + /* GL_EXT_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glDrawElementsBaseVertexEXT")); + flextGL.MultiDrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glMultiDrawElementsBaseVertexEXT")); + /* GL_EXT_instanced_arrays */ flextGL.DrawArraysInstancedEXT = reinterpret_cast(loader.load("glDrawArraysInstancedEXT")); flextGL.DrawElementsInstancedEXT = reinterpret_cast(loader.load("glDrawElementsInstancedEXT")); @@ -211,6 +221,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.NamedFramebufferSampleLocationsfvNV = reinterpret_cast(loader.load("glNamedFramebufferSampleLocationsfvNV")); flextGL.ResolveDepthValuesNV = reinterpret_cast(loader.load("glResolveDepthValuesNV")); + /* GL_OES_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexOES = reinterpret_cast(loader.load("glDrawElementsBaseVertexOES")); + /* GL_OES_mapbuffer */ flextGL.GetBufferPointervOES = reinterpret_cast(loader.load("glGetBufferPointervOES")); flextGL.MapBufferOES = reinterpret_cast(loader.load("glMapBufferOES")); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp index c31963cfc..34f55bcfd 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp @@ -30,6 +30,10 @@ #undef glDrawArraysInstancedANGLE #undef glDrawElementsInstancedANGLE #undef glVertexAttribDivisorANGLE +#undef glMultiDrawArraysANGLE +#undef glMultiDrawArraysInstancedANGLE +#undef glMultiDrawElementsANGLE +#undef glMultiDrawElementsInstancedANGLE #undef glRenderbufferStorageMultisampleAPPLE #undef glResolveMultisampleFramebufferAPPLE #undef glGetObjectLabelEXT @@ -52,6 +56,8 @@ #undef glDisableiEXT #undef glEnableiEXT #undef glIsEnablediEXT +#undef glDrawElementsBaseVertexEXT +#undef glMultiDrawElementsBaseVertexEXT #undef glDrawArraysInstancedEXT #undef glDrawElementsInstancedEXT #undef glVertexAttribDivisorEXT @@ -141,6 +147,7 @@ #undef glFramebufferSampleLocationsfvNV #undef glNamedFramebufferSampleLocationsfvNV #undef glResolveDepthValuesNV +#undef glDrawElementsBaseVertexOES #undef glGetBufferPointervOES #undef glMapBufferOES #undef glUnmapBufferOES @@ -179,6 +186,14 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.VertexAttribDivisorANGLE = reinterpret_cast(glVertexAttribDivisorANGLE); #endif + /* GL_ANGLE_multi_draw */ + #if GL_ANGLE_multi_draw + flextGL.MultiDrawArraysANGLE = reinterpret_cast(glMultiDrawArraysANGLE); + flextGL.MultiDrawArraysInstancedANGLE = reinterpret_cast(glMultiDrawArraysInstancedANGLE); + flextGL.MultiDrawElementsANGLE = reinterpret_cast(glMultiDrawElementsANGLE); + flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(glMultiDrawElementsInstancedANGLE); + #endif + /* GL_APPLE_framebuffer_multisample */ #if GL_APPLE_framebuffer_multisample flextGL.RenderbufferStorageMultisampleAPPLE = reinterpret_cast(glRenderbufferStorageMultisampleAPPLE); @@ -229,6 +244,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.IsEnablediEXT = reinterpret_cast(glIsEnablediEXT); #endif + /* GL_EXT_draw_elements_base_vertex */ + #if GL_EXT_draw_elements_base_vertex + flextGL.DrawElementsBaseVertexEXT = reinterpret_cast(glDrawElementsBaseVertexEXT); + flextGL.MultiDrawElementsBaseVertexEXT = reinterpret_cast(glMultiDrawElementsBaseVertexEXT); + #endif + /* GL_EXT_instanced_arrays */ #if GL_EXT_instanced_arrays flextGL.DrawArraysInstancedEXT = reinterpret_cast(glDrawArraysInstancedEXT); @@ -402,6 +423,11 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.ResolveDepthValuesNV = reinterpret_cast(glResolveDepthValuesNV); #endif + /* GL_OES_draw_elements_base_vertex */ + #if GL_OES_draw_elements_base_vertex + flextGL.DrawElementsBaseVertexOES = reinterpret_cast(glDrawElementsBaseVertexOES); + #endif + /* GL_OES_mapbuffer */ #if GL_OES_mapbuffer flextGL.GetBufferPointervOES = reinterpret_cast(glGetBufferPointervOES); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp index ab63b09d4..9f73452de 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp @@ -44,6 +44,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.DrawElementsInstancedANGLE = reinterpret_cast(loader.load("glDrawElementsInstancedANGLE")); flextGL.VertexAttribDivisorANGLE = reinterpret_cast(loader.load("glVertexAttribDivisorANGLE")); + /* GL_ANGLE_multi_draw */ + flextGL.MultiDrawArraysANGLE = reinterpret_cast(loader.load("glMultiDrawArraysANGLE")); + flextGL.MultiDrawArraysInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawArraysInstancedANGLE")); + flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); + flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_APPLE_framebuffer_multisample */ flextGL.RenderbufferStorageMultisampleAPPLE = reinterpret_cast(loader.load("glRenderbufferStorageMultisampleAPPLE")); flextGL.ResolveMultisampleFramebufferAPPLE = reinterpret_cast(loader.load("glResolveMultisampleFramebufferAPPLE")); @@ -179,6 +185,10 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.EnableiEXT = reinterpret_cast(loader.load("glEnableiEXT")); flextGL.IsEnablediEXT = reinterpret_cast(loader.load("glIsEnablediEXT")); + /* GL_EXT_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glDrawElementsBaseVertexEXT")); + flextGL.MultiDrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glMultiDrawElementsBaseVertexEXT")); + /* GL_EXT_instanced_arrays */ flextGL.DrawArraysInstancedEXT = reinterpret_cast(loader.load("glDrawArraysInstancedEXT")); flextGL.DrawElementsInstancedEXT = reinterpret_cast(loader.load("glDrawElementsInstancedEXT")); @@ -310,6 +320,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.NamedFramebufferSampleLocationsfvNV = reinterpret_cast(loader.load("glNamedFramebufferSampleLocationsfvNV")); flextGL.ResolveDepthValuesNV = reinterpret_cast(loader.load("glResolveDepthValuesNV")); + /* GL_OES_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexOES = reinterpret_cast(loader.load("glDrawElementsBaseVertexOES")); + /* GL_OES_mapbuffer */ flextGL.GetBufferPointervOES = reinterpret_cast(loader.load("glGetBufferPointervOES")); flextGL.MapBufferOES = reinterpret_cast(loader.load("glMapBufferOES")); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h index 2ab6ff922..3eda78f32 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h @@ -1129,6 +1129,13 @@ struct FlextGL { void(APIENTRY *DrawElementsInstancedANGLE)(GLenum, GLsizei, GLenum, const void *, GLsizei); void(APIENTRY *VertexAttribDivisorANGLE)(GLuint, GLuint); + /* GL_ANGLE_multi_draw */ + + void(APIENTRY *MultiDrawArraysANGLE)(GLenum, const GLint *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawArraysInstancedANGLE)(GLenum, const GLint *, const GLsizei *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, GLsizei); + void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei*, GLsizei); + /* GL_APPLE_framebuffer_multisample */ void(APIENTRY *RenderbufferStorageMultisampleAPPLE)(GLenum, GLsizei, GLenum, GLsizei, GLsizei); @@ -1272,6 +1279,11 @@ struct FlextGL { void(APIENTRY *EnableiEXT)(GLenum, GLuint); GLboolean(APIENTRY *IsEnablediEXT)(GLenum, GLuint); + /* GL_EXT_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexEXT)(GLenum, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *MultiDrawElementsBaseVertexEXT)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei, const GLint *); + /* GL_EXT_instanced_arrays */ void(APIENTRY *DrawArraysInstancedEXT)(GLenum, GLint, GLsizei, GLsizei); @@ -1424,6 +1436,10 @@ struct FlextGL { void(APIENTRY *NamedFramebufferSampleLocationsfvNV)(GLuint, GLuint, GLsizei, const GLfloat *); void(APIENTRY *ResolveDepthValuesNV)(void); + /* GL_OES_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexOES)(GLenum, GLsizei, GLenum, const void *, GLint); + /* GL_OES_mapbuffer */ void(APIENTRY *GetBufferPointervOES)(GLenum, GLenum, void **); @@ -1463,6 +1479,13 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glDrawElementsInstancedANGLE flextGL.DrawElementsInstancedANGLE #define glVertexAttribDivisorANGLE flextGL.VertexAttribDivisorANGLE +/* GL_ANGLE_multi_draw */ + +#define glMultiDrawArraysANGLE flextGL.MultiDrawArraysANGLE +#define glMultiDrawArraysInstancedANGLE flextGL.MultiDrawArraysInstancedANGLE +#define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE +#define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE + /* GL_APPLE_framebuffer_multisample */ #define glRenderbufferStorageMultisampleAPPLE flextGL.RenderbufferStorageMultisampleAPPLE @@ -1606,6 +1629,11 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glEnableiEXT flextGL.EnableiEXT #define glIsEnablediEXT flextGL.IsEnablediEXT +/* GL_EXT_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexEXT flextGL.DrawElementsBaseVertexEXT +#define glMultiDrawElementsBaseVertexEXT flextGL.MultiDrawElementsBaseVertexEXT + /* GL_EXT_instanced_arrays */ #define glDrawArraysInstancedEXT flextGL.DrawArraysInstancedEXT @@ -1758,6 +1786,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glNamedFramebufferSampleLocationsfvNV flextGL.NamedFramebufferSampleLocationsfvNV #define glResolveDepthValuesNV flextGL.ResolveDepthValuesNV +/* GL_OES_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexOES flextGL.DrawElementsBaseVertexOES + /* GL_OES_mapbuffer */ #define glGetBufferPointervOES flextGL.GetBufferPointervOES diff --git a/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt index 864728091..b51f38b25 100644 --- a/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/Emscripten/extensions.txt @@ -4,6 +4,8 @@ version 3.0 es +extraspec https://raw.githubusercontent.com/google/angle/master/scripts/gl_angle_ext.xml + extension EXT_texture_filter_anisotropic optional # It's actually EXT_disjoint_timer_query_webgl2, but that's not known to gl.xml extension EXT_disjoint_timer_query optional @@ -24,7 +26,11 @@ extension KHR_texture_compression_astc_ldr optional # WEBGL_blend_equation_advanced_coherent includes just the enums but not the # barrier -extension KHR_blend_equation_advanced optional +extension KHR_blend_equation_advanced 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 begin functions blacklist # Not present in WEBGL_blend_equation_advanced_coherent diff --git a/src/MagnumExternal/OpenGL/GLES3/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/extensions.txt index 99c57a7c3..9183fe213 100644 --- a/src/MagnumExternal/OpenGL/GLES3/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/extensions.txt @@ -5,6 +5,8 @@ version 3.2 es +extraspec https://raw.githubusercontent.com/google/angle/master/scripts/gl_angle_ext.xml + extension EXT_color_buffer_half_float optional extension EXT_color_buffer_float optional extension EXT_copy_image optional @@ -56,6 +58,7 @@ extension EXT_sRGB_write_control optional extension EXT_texture_compression_s3tc optional extension EXT_pvrtc_sRGB optional extension EXT_shader_integer_mix optional +extension EXT_draw_elements_base_vertex optional extension EXT_texture_norm16 optional extension EXT_texture_sRGB_R8 optional extension EXT_texture_sRGB_RG8 optional @@ -83,7 +86,12 @@ extension OES_depth32 optional extension OES_mapbuffer optional extension OES_stencil1 optional extension OES_stencil4 optional +extension OES_draw_elements_base_vertex optional extension OVR_multiview optional extension OVR_multiview2 optional +# From the gl_angle_ext file +extension ANGLE_multi_draw optional +extension ANGLE_base_vertex_base_instance optional + # kate: hl python diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGL.h b/src/MagnumExternal/OpenGL/GLES3/flextGL.h index f1a6a212a..86428b761 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGL.h @@ -1945,6 +1945,20 @@ GLAPI FLEXTGL_EXPORT void APIENTRY glWaitSync(GLsync, GLbitfield, GLuint64); less symbols is exported, saving on binary size. */ struct FlextGL { + /* GL_ANGLE_base_vertex_base_instance */ + + void(APIENTRY *DrawArraysInstancedBaseInstanceANGLE)(GLenum, GLint, GLsizei, GLsizei, GLuint); + void(APIENTRY *DrawElementsInstancedBaseVertexBaseInstanceANGLE)(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei, GLint, GLuint); + void(APIENTRY *MultiDrawArraysInstancedBaseInstanceANGLE)(GLenum, const GLint *, const GLsizei *, const GLsizei *, const GLuint *, GLsizei); + void(APIENTRY *MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei *, const GLint *, const GLuint *, GLsizei); + + /* GL_ANGLE_multi_draw */ + + void(APIENTRY *MultiDrawArraysANGLE)(GLenum, const GLint *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawArraysInstancedANGLE)(GLenum, const GLint *, const GLsizei *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, GLsizei); + void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei*, GLsizei); + /* GL_ES_VERSION_3_1 */ void(APIENTRY *ActiveShaderProgram)(GLuint, GLuint); @@ -2104,6 +2118,13 @@ struct FlextGL { void(APIENTRY *EnableiEXT)(GLenum, GLuint); GLboolean(APIENTRY *IsEnablediEXT)(GLenum, GLuint); + /* GL_EXT_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexEXT)(GLenum, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *DrawElementsInstancedBaseVertexEXT)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint); + void(APIENTRY *DrawRangeElementsBaseVertexEXT)(GLenum, GLuint, GLuint, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *MultiDrawElementsBaseVertexEXT)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei, const GLint *); + /* GL_EXT_geometry_shader */ void(APIENTRY *FramebufferTextureEXT)(GLenum, GLenum, GLuint, GLint); @@ -2236,6 +2257,12 @@ struct FlextGL { void(APIENTRY *NamedFramebufferSampleLocationsfvNV)(GLuint, GLuint, GLsizei, const GLfloat *); void(APIENTRY *ResolveDepthValuesNV)(void); + /* GL_OES_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexOES)(GLenum, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *DrawElementsInstancedBaseVertexOES)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint); + void(APIENTRY *DrawRangeElementsBaseVertexOES)(GLenum, GLuint, GLuint, GLsizei, GLenum, const void *, GLint); + /* GL_OES_mapbuffer */ void(APIENTRY *GetBufferPointervOES)(GLenum, GLenum, void **); @@ -2257,6 +2284,20 @@ struct FlextGL { extern FLEXTGL_EXPORT FlextGL flextGL; +/* GL_ANGLE_base_vertex_base_instance */ + +#define glDrawArraysInstancedBaseInstanceANGLE flextGL.DrawArraysInstancedBaseInstanceANGLE +#define glDrawElementsInstancedBaseVertexBaseInstanceANGLE flextGL.DrawElementsInstancedBaseVertexBaseInstanceANGLE +#define glMultiDrawArraysInstancedBaseInstanceANGLE flextGL.MultiDrawArraysInstancedBaseInstanceANGLE +#define glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE flextGL.MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE + +/* GL_ANGLE_multi_draw */ + +#define glMultiDrawArraysANGLE flextGL.MultiDrawArraysANGLE +#define glMultiDrawArraysInstancedANGLE flextGL.MultiDrawArraysInstancedANGLE +#define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE +#define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE + /* GL_ES_VERSION_3_1 */ #define glActiveShaderProgram flextGL.ActiveShaderProgram @@ -2416,6 +2457,13 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glEnableiEXT flextGL.EnableiEXT #define glIsEnablediEXT flextGL.IsEnablediEXT +/* GL_EXT_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexEXT flextGL.DrawElementsBaseVertexEXT +#define glDrawElementsInstancedBaseVertexEXT flextGL.DrawElementsInstancedBaseVertexEXT +#define glDrawRangeElementsBaseVertexEXT flextGL.DrawRangeElementsBaseVertexEXT +#define glMultiDrawElementsBaseVertexEXT flextGL.MultiDrawElementsBaseVertexEXT + /* GL_EXT_geometry_shader */ #define glFramebufferTextureEXT flextGL.FramebufferTextureEXT @@ -2548,6 +2596,12 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glNamedFramebufferSampleLocationsfvNV flextGL.NamedFramebufferSampleLocationsfvNV #define glResolveDepthValuesNV flextGL.ResolveDepthValuesNV +/* GL_OES_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexOES flextGL.DrawElementsBaseVertexOES +#define glDrawElementsInstancedBaseVertexOES flextGL.DrawElementsInstancedBaseVertexOES +#define glDrawRangeElementsBaseVertexOES flextGL.DrawRangeElementsBaseVertexOES + /* GL_OES_mapbuffer */ #define glGetBufferPointervOES flextGL.GetBufferPointervOES diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h b/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h index 56222ee9b..b8f0b7d5f 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLEmscripten.h @@ -881,6 +881,20 @@ typedef struct __GLsync *GLsync; /* Function prototypes */ +/* GL_ANGLE_base_vertex_base_instance */ + +GLAPI void glDrawArraysInstancedBaseInstanceANGLE(GLenum, GLint, GLsizei, GLsizei, GLuint); +GLAPI void glDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei, GLint, GLuint); +GLAPI void glMultiDrawArraysInstancedBaseInstanceANGLE(GLenum, const GLint *, const GLsizei *, const GLsizei *, const GLuint *, GLsizei); +GLAPI void glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei *, const GLint *, const GLuint *, GLsizei); + +/* GL_ANGLE_multi_draw */ + +GLAPI void glMultiDrawArraysANGLE(GLenum, const GLint *, const GLsizei *, GLsizei); +GLAPI void glMultiDrawArraysInstancedANGLE(GLenum, const GLint *, const GLsizei *, const GLsizei *, GLsizei); +GLAPI void glMultiDrawElementsANGLE(GLenum, const GLsizei *, GLenum, const GLvoid *const*, GLsizei); +GLAPI void glMultiDrawElementsInstancedANGLE(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei*, GLsizei); + /* GL_ES_VERSION_2_0 */ GLAPI void glActiveTexture(GLenum); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp index 19f46a724..2bf5ad8b1 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp @@ -33,6 +33,18 @@ void flextGLInit(Magnum::GL::Context&) { Magnum::Platform::Implementation::OpenGLFunctionLoader loader; + /* GL_ANGLE_base_vertex_base_instance */ + flextGL.DrawArraysInstancedBaseInstanceANGLE = reinterpret_cast(loader.load("glDrawArraysInstancedBaseInstanceANGLE")); + flextGL.DrawElementsInstancedBaseVertexBaseInstanceANGLE = reinterpret_cast(loader.load("glDrawElementsInstancedBaseVertexBaseInstanceANGLE")); + flextGL.MultiDrawArraysInstancedBaseInstanceANGLE = reinterpret_cast(loader.load("glMultiDrawArraysInstancedBaseInstanceANGLE")); + flextGL.MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE")); + + /* GL_ANGLE_multi_draw */ + flextGL.MultiDrawArraysANGLE = reinterpret_cast(loader.load("glMultiDrawArraysANGLE")); + flextGL.MultiDrawArraysInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawArraysInstancedANGLE")); + flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); + flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_ES_VERSION_3_1 */ flextGL.ActiveShaderProgram = reinterpret_cast(loader.load("glActiveShaderProgram")); flextGL.BindImageTexture = reinterpret_cast(loader.load("glBindImageTexture")); @@ -185,6 +197,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.EnableiEXT = reinterpret_cast(loader.load("glEnableiEXT")); flextGL.IsEnablediEXT = reinterpret_cast(loader.load("glIsEnablediEXT")); + /* GL_EXT_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glDrawElementsBaseVertexEXT")); + flextGL.DrawElementsInstancedBaseVertexEXT = reinterpret_cast(loader.load("glDrawElementsInstancedBaseVertexEXT")); + flextGL.DrawRangeElementsBaseVertexEXT = reinterpret_cast(loader.load("glDrawRangeElementsBaseVertexEXT")); + flextGL.MultiDrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glMultiDrawElementsBaseVertexEXT")); + /* GL_EXT_geometry_shader */ flextGL.FramebufferTextureEXT = reinterpret_cast(loader.load("glFramebufferTextureEXT")); @@ -302,6 +320,11 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.NamedFramebufferSampleLocationsfvNV = reinterpret_cast(loader.load("glNamedFramebufferSampleLocationsfvNV")); flextGL.ResolveDepthValuesNV = reinterpret_cast(loader.load("glResolveDepthValuesNV")); + /* GL_OES_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexOES = reinterpret_cast(loader.load("glDrawElementsBaseVertexOES")); + flextGL.DrawElementsInstancedBaseVertexOES = reinterpret_cast(loader.load("glDrawElementsInstancedBaseVertexOES")); + flextGL.DrawRangeElementsBaseVertexOES = reinterpret_cast(loader.load("glDrawRangeElementsBaseVertexOES")); + /* GL_OES_mapbuffer */ flextGL.GetBufferPointervOES = reinterpret_cast(loader.load("glGetBufferPointervOES")); flextGL.MapBufferOES = reinterpret_cast(loader.load("glMapBufferOES")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp index bfcfdc176..5c2408406 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp @@ -25,6 +25,14 @@ #include "flextGL.h" +#undef glDrawArraysInstancedBaseInstanceANGLE +#undef glDrawElementsInstancedBaseVertexBaseInstanceANGLE +#undef glMultiDrawArraysInstancedBaseInstanceANGLE +#undef glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE +#undef glMultiDrawArraysANGLE +#undef glMultiDrawArraysInstancedANGLE +#undef glMultiDrawElementsANGLE +#undef glMultiDrawElementsInstancedANGLE #undef glCopyImageSubDataEXT #undef glGetObjectLabelEXT #undef glLabelObjectEXT @@ -51,6 +59,10 @@ #undef glDisableiEXT #undef glEnableiEXT #undef glIsEnablediEXT +#undef glDrawElementsBaseVertexEXT +#undef glDrawElementsInstancedBaseVertexEXT +#undef glDrawRangeElementsBaseVertexEXT +#undef glMultiDrawElementsBaseVertexEXT #undef glFramebufferTextureEXT #undef glMultiDrawArraysEXT #undef glMultiDrawElementsEXT @@ -138,6 +150,9 @@ #undef glFramebufferSampleLocationsfvNV #undef glNamedFramebufferSampleLocationsfvNV #undef glResolveDepthValuesNV +#undef glDrawElementsBaseVertexOES +#undef glDrawElementsInstancedBaseVertexOES +#undef glDrawRangeElementsBaseVertexOES #undef glGetBufferPointervOES #undef glMapBufferOES #undef glUnmapBufferOES @@ -149,6 +164,22 @@ void flextGLInit(Magnum::GL::Context&) { + /* GL_ANGLE_base_vertex_base_instance */ + #if GL_ANGLE_base_vertex_base_instance + flextGL.DrawArraysInstancedBaseInstanceANGLE = reinterpret_cast(glDrawArraysInstancedBaseInstanceANGLE); + flextGL.DrawElementsInstancedBaseVertexBaseInstanceANGLE = reinterpret_cast(glDrawElementsInstancedBaseVertexBaseInstanceANGLE); + flextGL.MultiDrawArraysInstancedBaseInstanceANGLE = reinterpret_cast(glMultiDrawArraysInstancedBaseInstanceANGLE); + flextGL.MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE = reinterpret_cast(glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE); + #endif + + /* GL_ANGLE_multi_draw */ + #if GL_ANGLE_multi_draw + flextGL.MultiDrawArraysANGLE = reinterpret_cast(glMultiDrawArraysANGLE); + flextGL.MultiDrawArraysInstancedANGLE = reinterpret_cast(glMultiDrawArraysInstancedANGLE); + flextGL.MultiDrawElementsANGLE = reinterpret_cast(glMultiDrawElementsANGLE); + flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(glMultiDrawElementsInstancedANGLE); + #endif + /* GL_EXT_copy_image */ #if GL_EXT_copy_image flextGL.CopyImageSubDataEXT = reinterpret_cast(glCopyImageSubDataEXT); @@ -195,6 +226,14 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.IsEnablediEXT = reinterpret_cast(glIsEnablediEXT); #endif + /* GL_EXT_draw_elements_base_vertex */ + #if GL_EXT_draw_elements_base_vertex + flextGL.DrawElementsBaseVertexEXT = reinterpret_cast(glDrawElementsBaseVertexEXT); + flextGL.DrawElementsInstancedBaseVertexEXT = reinterpret_cast(glDrawElementsInstancedBaseVertexEXT); + flextGL.DrawRangeElementsBaseVertexEXT = reinterpret_cast(glDrawRangeElementsBaseVertexEXT); + flextGL.MultiDrawElementsBaseVertexEXT = reinterpret_cast(glMultiDrawElementsBaseVertexEXT); + #endif + /* GL_EXT_geometry_shader */ #if GL_EXT_geometry_shader flextGL.FramebufferTextureEXT = reinterpret_cast(glFramebufferTextureEXT); @@ -342,6 +381,13 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.ResolveDepthValuesNV = reinterpret_cast(glResolveDepthValuesNV); #endif + /* GL_OES_draw_elements_base_vertex */ + #if GL_OES_draw_elements_base_vertex + flextGL.DrawElementsBaseVertexOES = reinterpret_cast(glDrawElementsBaseVertexOES); + flextGL.DrawElementsInstancedBaseVertexOES = reinterpret_cast(glDrawElementsInstancedBaseVertexOES); + flextGL.DrawRangeElementsBaseVertexOES = reinterpret_cast(glDrawRangeElementsBaseVertexOES); + #endif + /* GL_OES_mapbuffer */ #if GL_OES_mapbuffer flextGL.GetBufferPointervOES = reinterpret_cast(glGetBufferPointervOES); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp index 66981e4d9..44a01cf9e 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp @@ -33,6 +33,18 @@ void flextGLInit(Magnum::GL::Context&) { Magnum::Platform::Implementation::OpenGLFunctionLoader loader; + /* GL_ANGLE_base_vertex_base_instance */ + flextGL.DrawArraysInstancedBaseInstanceANGLE = reinterpret_cast(loader.load("glDrawArraysInstancedBaseInstanceANGLE")); + flextGL.DrawElementsInstancedBaseVertexBaseInstanceANGLE = reinterpret_cast(loader.load("glDrawElementsInstancedBaseVertexBaseInstanceANGLE")); + flextGL.MultiDrawArraysInstancedBaseInstanceANGLE = reinterpret_cast(loader.load("glMultiDrawArraysInstancedBaseInstanceANGLE")); + flextGL.MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE")); + + /* GL_ANGLE_multi_draw */ + flextGL.MultiDrawArraysANGLE = reinterpret_cast(loader.load("glMultiDrawArraysANGLE")); + flextGL.MultiDrawArraysInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawArraysInstancedANGLE")); + flextGL.MultiDrawElementsANGLE = reinterpret_cast(loader.load("glMultiDrawElementsANGLE")); + flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(loader.load("glMultiDrawElementsInstancedANGLE")); + /* GL_ES_VERSION_2_0 */ flextGL.ActiveTexture = reinterpret_cast(loader.load("glActiveTexture")); flextGL.AttachShader = reinterpret_cast(loader.load("glAttachShader")); @@ -387,6 +399,12 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.EnableiEXT = reinterpret_cast(loader.load("glEnableiEXT")); flextGL.IsEnablediEXT = reinterpret_cast(loader.load("glIsEnablediEXT")); + /* GL_EXT_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glDrawElementsBaseVertexEXT")); + flextGL.DrawElementsInstancedBaseVertexEXT = reinterpret_cast(loader.load("glDrawElementsInstancedBaseVertexEXT")); + flextGL.DrawRangeElementsBaseVertexEXT = reinterpret_cast(loader.load("glDrawRangeElementsBaseVertexEXT")); + flextGL.MultiDrawElementsBaseVertexEXT = reinterpret_cast(loader.load("glMultiDrawElementsBaseVertexEXT")); + /* GL_EXT_geometry_shader */ flextGL.FramebufferTextureEXT = reinterpret_cast(loader.load("glFramebufferTextureEXT")); @@ -504,6 +522,11 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.NamedFramebufferSampleLocationsfvNV = reinterpret_cast(loader.load("glNamedFramebufferSampleLocationsfvNV")); flextGL.ResolveDepthValuesNV = reinterpret_cast(loader.load("glResolveDepthValuesNV")); + /* GL_OES_draw_elements_base_vertex */ + flextGL.DrawElementsBaseVertexOES = reinterpret_cast(loader.load("glDrawElementsBaseVertexOES")); + flextGL.DrawElementsInstancedBaseVertexOES = reinterpret_cast(loader.load("glDrawElementsInstancedBaseVertexOES")); + flextGL.DrawRangeElementsBaseVertexOES = reinterpret_cast(loader.load("glDrawRangeElementsBaseVertexOES")); + /* GL_OES_mapbuffer */ flextGL.GetBufferPointervOES = reinterpret_cast(loader.load("glGetBufferPointervOES")); flextGL.MapBufferOES = reinterpret_cast(loader.load("glMapBufferOES")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h index 9ea6b5537..7557e4c77 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h @@ -1744,6 +1744,20 @@ GLAPI FLEXTGL_EXPORT void APIENTRY glGetTexLevelParameteriv(GLenum, GLint, GLenu less symbols is exported, saving on binary size. */ struct FlextGL { + /* GL_ANGLE_base_vertex_base_instance */ + + void(APIENTRY *DrawArraysInstancedBaseInstanceANGLE)(GLenum, GLint, GLsizei, GLsizei, GLuint); + void(APIENTRY *DrawElementsInstancedBaseVertexBaseInstanceANGLE)(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei, GLint, GLuint); + void(APIENTRY *MultiDrawArraysInstancedBaseInstanceANGLE)(GLenum, const GLint *, const GLsizei *, const GLsizei *, const GLuint *, GLsizei); + void(APIENTRY *MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei *, const GLint *, const GLuint *, GLsizei); + + /* GL_ANGLE_multi_draw */ + + void(APIENTRY *MultiDrawArraysANGLE)(GLenum, const GLint *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawArraysInstancedANGLE)(GLenum, const GLint *, const GLsizei *, const GLsizei *, GLsizei); + void(APIENTRY *MultiDrawElementsANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, GLsizei); + void(APIENTRY *MultiDrawElementsInstancedANGLE)(GLenum, const GLsizei *, GLenum, const GLvoid *const*, const GLsizei*, GLsizei); + /* GL_ES_VERSION_2_0 */ void(APIENTRY *ActiveTexture)(GLenum); @@ -2107,6 +2121,13 @@ struct FlextGL { void(APIENTRY *EnableiEXT)(GLenum, GLuint); GLboolean(APIENTRY *IsEnablediEXT)(GLenum, GLuint); + /* GL_EXT_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexEXT)(GLenum, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *DrawElementsInstancedBaseVertexEXT)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint); + void(APIENTRY *DrawRangeElementsBaseVertexEXT)(GLenum, GLuint, GLuint, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *MultiDrawElementsBaseVertexEXT)(GLenum, const GLsizei *, GLenum, const void *const*, GLsizei, const GLint *); + /* GL_EXT_geometry_shader */ void(APIENTRY *FramebufferTextureEXT)(GLenum, GLenum, GLuint, GLint); @@ -2239,6 +2260,12 @@ struct FlextGL { void(APIENTRY *NamedFramebufferSampleLocationsfvNV)(GLuint, GLuint, GLsizei, const GLfloat *); void(APIENTRY *ResolveDepthValuesNV)(void); + /* GL_OES_draw_elements_base_vertex */ + + void(APIENTRY *DrawElementsBaseVertexOES)(GLenum, GLsizei, GLenum, const void *, GLint); + void(APIENTRY *DrawElementsInstancedBaseVertexOES)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint); + void(APIENTRY *DrawRangeElementsBaseVertexOES)(GLenum, GLuint, GLuint, GLsizei, GLenum, const void *, GLint); + /* GL_OES_mapbuffer */ void(APIENTRY *GetBufferPointervOES)(GLenum, GLenum, void **); @@ -2260,6 +2287,20 @@ struct FlextGL { extern FLEXTGL_EXPORT FlextGL flextGL; +/* GL_ANGLE_base_vertex_base_instance */ + +#define glDrawArraysInstancedBaseInstanceANGLE flextGL.DrawArraysInstancedBaseInstanceANGLE +#define glDrawElementsInstancedBaseVertexBaseInstanceANGLE flextGL.DrawElementsInstancedBaseVertexBaseInstanceANGLE +#define glMultiDrawArraysInstancedBaseInstanceANGLE flextGL.MultiDrawArraysInstancedBaseInstanceANGLE +#define glMultiDrawElementsInstancedBaseVertexBaseInstanceANGLE flextGL.MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE + +/* GL_ANGLE_multi_draw */ + +#define glMultiDrawArraysANGLE flextGL.MultiDrawArraysANGLE +#define glMultiDrawArraysInstancedANGLE flextGL.MultiDrawArraysInstancedANGLE +#define glMultiDrawElementsANGLE flextGL.MultiDrawElementsANGLE +#define glMultiDrawElementsInstancedANGLE flextGL.MultiDrawElementsInstancedANGLE + /* GL_ES_VERSION_2_0 */ #define glActiveTexture flextGL.ActiveTexture @@ -2623,6 +2664,13 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glEnableiEXT flextGL.EnableiEXT #define glIsEnablediEXT flextGL.IsEnablediEXT +/* GL_EXT_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexEXT flextGL.DrawElementsBaseVertexEXT +#define glDrawElementsInstancedBaseVertexEXT flextGL.DrawElementsInstancedBaseVertexEXT +#define glDrawRangeElementsBaseVertexEXT flextGL.DrawRangeElementsBaseVertexEXT +#define glMultiDrawElementsBaseVertexEXT flextGL.MultiDrawElementsBaseVertexEXT + /* GL_EXT_geometry_shader */ #define glFramebufferTextureEXT flextGL.FramebufferTextureEXT @@ -2755,6 +2803,12 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glNamedFramebufferSampleLocationsfvNV flextGL.NamedFramebufferSampleLocationsfvNV #define glResolveDepthValuesNV flextGL.ResolveDepthValuesNV +/* GL_OES_draw_elements_base_vertex */ + +#define glDrawElementsBaseVertexOES flextGL.DrawElementsBaseVertexOES +#define glDrawElementsInstancedBaseVertexOES flextGL.DrawElementsInstancedBaseVertexOES +#define glDrawRangeElementsBaseVertexOES flextGL.DrawRangeElementsBaseVertexOES + /* GL_OES_mapbuffer */ #define glGetBufferPointervOES flextGL.GetBufferPointervOES