Browse Source

GL: support EXT_base_instance on GLES.

Somehow I overlooked this extension back when implementing multidraw, or
maybe it was intentional because ANGLE supported multidraw but not this
extension.
next
Vladimír Vondruš 3 months ago
parent
commit
43baa4502e
  1. 2
      doc/changelog.dox
  2. 8
      src/Magnum/GL/AbstractShaderProgram.h
  3. 3
      src/Magnum/GL/Context.cpp
  4. 73
      src/Magnum/GL/Extensions.h
  5. 9
      src/Magnum/GL/Implementation/MeshState.cpp
  6. 3
      src/Magnum/GL/Mesh.h
  7. 21
      src/Magnum/GL/Test/MeshGLTest.cpp
  8. 1
      src/MagnumExternal/OpenGL/GLES3/extensions.txt
  9. 12
      src/MagnumExternal/OpenGL/GLES3/flextGL.h
  10. 5
      src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp
  11. 10
      src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp
  12. 5
      src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp
  13. 12
      src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h

2
doc/changelog.dox

@ -185,6 +185,8 @@ See also:
@webgl_extension{KHR,parallel_shader_compile} WebGL extension (see @webgl_extension{KHR,parallel_shader_compile} WebGL extension (see
[mosra/magnum#534](https://github.com/mosra/magnum/issues/534) and [mosra/magnum#534](https://github.com/mosra/magnum/issues/534) and
[mosra/magnum#576](https://github.com/mosra/magnum/pull/576)) [mosra/magnum#576](https://github.com/mosra/magnum/pull/576))
- @ref GL::Mesh::setBaseInstance() now supports also the
@gl_extension{EXT,base_instance} extension on OpenGL ES
- Recognizing ANGLE GLES and WebGL base vertex, base instance and multi-draw - Recognizing ANGLE GLES and WebGL base vertex, base instance and multi-draw
extensions and using them in @ref GL::AbstractShaderProgram::draw(Mesh&) extensions and using them in @ref GL::AbstractShaderProgram::draw(Mesh&)
and @ref GL::AbstractShaderProgram::draw(const Containers::Iterable<MeshView>&): and @ref GL::AbstractShaderProgram::draw(const Containers::Iterable<MeshView>&):

8
src/Magnum/GL/AbstractShaderProgram.h

@ -884,6 +884,10 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject {
* @gl_extension{NV,instanced_arrays}, * @gl_extension{NV,instanced_arrays},
* @gl_extension{NV,draw_instanced} in OpenGL ES 2.0 if * @gl_extension{NV,draw_instanced} in OpenGL ES 2.0 if
* @ref Mesh::instanceCount() is more than `1`. * @ref Mesh::instanceCount() is more than `1`.
* @requires_es_extension OpenGL ES 3.0 and extension
* @gl_extension{EXT,base_instance} or OpenGL ES 3.1 and extension
* @m_class{m-doc-external} [ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_base_vertex_base_instance.txt)
* if @ref Mesh::baseInstance() is not `0`.
* @requires_webgl20 Extension @webgl_extension{ANGLE,instanced_arrays} * @requires_webgl20 Extension @webgl_extension{ANGLE,instanced_arrays}
* in WebGL 1.0 if @ref Mesh::instanceCount() is more than `1`. * in WebGL 1.0 if @ref Mesh::instanceCount() is more than `1`.
* @requires_gl Specifying base vertex for indexed meshes is not * @requires_gl Specifying base vertex for indexed meshes is not
@ -920,6 +924,10 @@ class MAGNUM_GL_EXPORT AbstractShaderProgram: public AbstractObject {
* @gl_extension{NV,instanced_arrays}, * @gl_extension{NV,instanced_arrays},
* @gl_extension{NV,draw_instanced} in OpenGL ES 2.0 if * @gl_extension{NV,draw_instanced} in OpenGL ES 2.0 if
* @ref MeshView::instanceCount() is more than `1`. * @ref MeshView::instanceCount() is more than `1`.
* @requires_es_extension OpenGL ES 3.0 and extension
* @gl_extension{EXT,base_instance} or OpenGL ES 3.1 and extension
* @m_class{m-doc-external} [ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_base_vertex_base_instance.txt)
* if @ref Mesh::baseInstance() is not `0`.
* @requires_webgl20 Extension @webgl_extension{ANGLE,instanced_arrays} * @requires_webgl20 Extension @webgl_extension{ANGLE,instanced_arrays}
* in WebGL 1.0 if @ref MeshView::instanceCount() is more than * in WebGL 1.0 if @ref MeshView::instanceCount() is more than
* `1` * `1`

3
src/Magnum/GL/Context.cpp

@ -395,6 +395,9 @@ constexpr Extension ExtensionList[]{
Extensions::APPLE::texture_format_BGRA8888{}, Extensions::APPLE::texture_format_BGRA8888{},
Extensions::ARM::shader_framebuffer_fetch{}, Extensions::ARM::shader_framebuffer_fetch{},
Extensions::ARM::shader_framebuffer_fetch_depth_stencil{}, Extensions::ARM::shader_framebuffer_fetch_depth_stencil{},
#ifndef MAGNUM_TARGET_GLES2
Extensions::EXT::base_instance{},
#endif
Extensions::EXT::blend_func_extended{}, Extensions::EXT::blend_func_extended{},
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
Extensions::EXT::buffer_storage{}, Extensions::EXT::buffer_storage{},

73
src/Magnum/GL/Extensions.h

@ -525,54 +525,57 @@ namespace ANDROID {
_extension( 72,EXT,texture_view, GLES310, None) // #185 _extension( 72,EXT,texture_view, GLES310, None) // #185
_extension( 73,EXT,primitive_bounding_box, GLES310, GLES320) // #186 _extension( 73,EXT,primitive_bounding_box, GLES310, GLES320) // #186
#endif #endif
_extension( 74,EXT,draw_elements_base_vertex, GLES200, None) // #204
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension( 75,EXT,multi_draw_indirect, GLES310, None) // #205 _extension( 74,EXT,base_instance, GLES300, None) // #203
_extension( 76,EXT,texture_norm16, GLES310, None) // #207 #endif
_extension( 77,EXT,texture_sRGB_R8, GLES300, None) // #221 _extension( 75,EXT,draw_elements_base_vertex, GLES200, None) // #204
_extension( 78,EXT,texture_sRGB_RG8, GLES300, None) // #223 #ifndef MAGNUM_TARGET_GLES2
_extension( 79,EXT,buffer_storage, GLES310, None) // #239 _extension( 76,EXT,multi_draw_indirect, GLES310, None) // #205
#endif _extension( 77,EXT,texture_norm16, GLES310, None) // #207
_extension( 80,EXT,blend_func_extended, GLES200, None) // #247 _extension( 78,EXT,texture_sRGB_R8, GLES300, None) // #221
_extension( 81,EXT,polygon_offset_clamp, GLES200, None) // #252 _extension( 79,EXT,texture_sRGB_RG8, GLES300, None) // #223
_extension( 80,EXT,buffer_storage, GLES310, None) // #239
#endif
_extension( 81,EXT,blend_func_extended, GLES200, None) // #247
_extension( 82,EXT,polygon_offset_clamp, GLES200, None) // #252
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension( 82,EXT,clip_cull_distance, GLES300, None) // #257 _extension( 83,EXT,clip_cull_distance, GLES300, None) // #257
/* The extension says "Requires ARB_texture_storage or a version of OpenGL /* The extension says "Requires ARB_texture_storage or a version of OpenGL
or OpenGL ES that incorporates it." There's EXT_texture_storage on ES2, or OpenGL ES that incorporates it." There's EXT_texture_storage on ES2,
however I don't think ES2 really matters today, so it's just ES3+. */ however I don't think ES2 really matters today, so it's just ES3+. */
_extension( 83,EXT,memory_object, GLES300, None) // #280 _extension( 84,EXT,memory_object, GLES300, None) // #280
_extension( 84,EXT,semaphore, GLES300, None) // #280 _extension( 85,EXT,semaphore, GLES300, None) // #280
/* These two pairs appear to be exclusive so they share the same indices */ /* These two pairs appear to be exclusive so they share the same indices */
#ifndef CORRADE_TARGET_WINDOWS #ifndef CORRADE_TARGET_WINDOWS
_extension( 85,EXT,memory_object_fd, GLES300, None) // #281 _extension( 84,EXT,memory_object_fd, GLES300, None) // #281
_extension( 86,EXT,semaphore_fd, GLES300, None) // #281 _extension( 85,EXT,semaphore_fd, GLES300, None) // #281
#else #else
_extension( 85,EXT,memory_object_win32, GLES300, None) // #282 _extension( 86,EXT,memory_object_win32, GLES300, None) // #282
_extension( 86,EXT,semaphore_win32, GLES300, None) // #282 _extension( 87,EXT,semaphore_win32, GLES300, None) // #282
#endif #endif
_extension( 87,EXT,texture_compression_rgtc, GLES300, None) // #286 _extension( 88,EXT,texture_compression_rgtc, GLES300, None) // #286
_extension( 88,EXT,texture_compression_bptc, GLES300, None) // #287 _extension( 89,EXT,texture_compression_bptc, GLES300, None) // #287
#endif #endif
_extension( 89,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 _extension( 90,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289
_extension( 90,EXT,clip_control, GLES200, None) // #290 _extension( 91,EXT,clip_control, GLES200, None) // #290
_extension( 91,EXT,texture_mirror_clamp_to_edge, GLES200, None) // #291 _extension( 92,EXT,texture_mirror_clamp_to_edge, GLES200, None) // #291
_extension( 92,EXT,depth_clamp, GLES200, None) // #309 _extension( 93,EXT,depth_clamp, GLES200, None) // #309
} namespace IMG { } namespace IMG {
_extension( 93,IMG,texture_compression_pvrtc, GLES200, None) // #54 _extension( 94,IMG,texture_compression_pvrtc, GLES200, None) // #54
} namespace INTEL { } namespace INTEL {
_extension( 94,INTEL,blackhole_render, /*?*/ GLES200, None) // #300 _extension( 95,INTEL,blackhole_render, /*?*/ GLES200, None) // #300
} namespace KHR { } namespace KHR {
_extension( 95,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117 _extension( 96,KHR,texture_compression_astc_ldr,GLES200, GLES320) // #117
_extension( 96,KHR,texture_compression_astc_hdr,GLES200, None) // #117 _extension( 97,KHR,texture_compression_astc_hdr,GLES200, None) // #117
_extension( 97,KHR,debug, GLES200, GLES320) // #118 _extension( 98,KHR,debug, GLES200, GLES320) // #118
_extension( 98,KHR,blend_equation_advanced, GLES200, GLES320) // #168 _extension( 99,KHR,blend_equation_advanced, GLES200, GLES320) // #168
_extension( 99,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 _extension(100,KHR,blend_equation_advanced_coherent, GLES200, None) // #168
_extension(100,KHR,robustness, GLES200, GLES320) // #170 _extension(101,KHR,robustness, GLES200, GLES320) // #170
_extension(101,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189 _extension(102,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189
_extension(102,KHR,context_flush_control, GLES200, None) // #191 _extension(103,KHR,context_flush_control, GLES200, None) // #191
_extension(103,KHR,no_error, GLES200, None) // #243 _extension(104,KHR,no_error, GLES200, None) // #243
_extension(104,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249 _extension(105,KHR,texture_compression_astc_sliced_3d, GLES200, None) // #249
_extension(105,KHR,parallel_shader_compile, GLES200, None) // #288 _extension(106,KHR,parallel_shader_compile, GLES200, None) // #288
} namespace NV { } namespace NV {
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(110,NV,draw_buffers, GLES200, GLES300) // #91 _extension(110,NV,draw_buffers, GLES200, GLES300) // #91

9
src/Magnum/GL/Implementation/MeshState.cpp

@ -216,7 +216,14 @@ MeshState::MeshState(Context& context, ContextState& contextState, Containers::S
#if defined(MAGNUM_TARGET_GLES) && !defined(MAGNUM_TARGET_GLES2) #if defined(MAGNUM_TARGET_GLES) && !defined(MAGNUM_TARGET_GLES2)
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
if(context.isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) { if(context.isExtensionSupported<Extensions::EXT::base_instance>()) {
extensions[Extensions::EXT::base_instance::Index] =
Extensions::EXT::base_instance::string();
drawArraysInstancedBaseInstanceImplementation = glDrawArraysInstancedBaseInstanceEXT;
drawElementsInstancedBaseInstanceImplementation = glDrawElementsInstancedBaseInstanceEXT;
drawElementsInstancedBaseVertexBaseInstanceImplementation = glDrawElementsInstancedBaseVertexBaseInstanceEXT;
} else if(context.isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) {
extensions[Extensions::ANGLE::base_vertex_base_instance::Index] = extensions[Extensions::ANGLE::base_vertex_base_instance::Index] =
Extensions::ANGLE::base_vertex_base_instance::string(); Extensions::ANGLE::base_vertex_base_instance::string();

3
src/Magnum/GL/Mesh.h

@ -846,7 +846,8 @@ class MAGNUM_GL_EXPORT Mesh: public AbstractObject {
* Default is @cpp 0 @ce. * Default is @cpp 0 @ce.
* @see @ref setInstanceCount(), @ref setBaseVertex() * @see @ref setInstanceCount(), @ref setBaseVertex()
* @requires_gl42 Extension @gl_extension{ARB,base_instance} * @requires_gl42 Extension @gl_extension{ARB,base_instance}
* @requires_es_extension OpenGL ES 3.1 and extension * @requires_es_extension OpenGL ES 3.0 and extension
* @gl_extension{EXT,base_instance} or OpenGL ES 3.1 and extension
* @m_class{m-doc-external} [ANGLE_base_vertex_base_instance](https://chromium.googlesource.com/angle/angle/+/master/extensions/ANGLE_base_vertex_base_instance.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)
* @requires_webgl_extension WebGL 2.0 and extension * @requires_webgl_extension WebGL 2.0 and extension
* @webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} * @webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance}

21
src/Magnum/GL/Test/MeshGLTest.cpp

@ -3328,8 +3328,9 @@ void MeshGLTest::setInstanceCountBaseInstance() {
if(!Context::current().isExtensionSupported<Extensions::ARB::base_instance>()) if(!Context::current().isExtensionSupported<Extensions::ARB::base_instance>())
CORRADE_SKIP(Extensions::ARB::base_instance::string() << "is not supported."); CORRADE_SKIP(Extensions::ARB::base_instance::string() << "is not supported.");
#elif !defined(MAGNUM_TARGET_WEBGL) #elif !defined(MAGNUM_TARGET_WEBGL)
if(!Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) if(!Context::current().isExtensionSupported<Extensions::EXT::base_instance>() &&
CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is not supported."); !Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>())
CORRADE_SKIP("Neither" << Extensions::EXT::base_instance::string() << "nor" << Extensions::ANGLE::base_vertex_base_instance::string() << "is supported.");
#else #else
if(!Context::current().isExtensionSupported<Extensions::WEBGL::draw_instanced_base_vertex_base_instance>()) if(!Context::current().isExtensionSupported<Extensions::WEBGL::draw_instanced_base_vertex_base_instance>())
CORRADE_SKIP(Extensions::WEBGL::draw_instanced_base_vertex_base_instance::string() << "is not supported."); CORRADE_SKIP(Extensions::WEBGL::draw_instanced_base_vertex_base_instance::string() << "is not supported.");
@ -3360,6 +3361,8 @@ void MeshGLTest::setInstanceCountBaseInstance() {
#ifdef MAGNUM_TARGET_GLES #ifdef MAGNUM_TARGET_GLES
void MeshGLTest::setInstanceCountBaseInstanceNoExtensionAvailable() { void MeshGLTest::setInstanceCountBaseInstanceNoExtensionAvailable() {
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
if(Context::current().isExtensionSupported<Extensions::EXT::base_instance>())
CORRADE_SKIP(Extensions::EXT::base_instance::string() << "is supported.");
if(Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) if(Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>())
CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is supported."); CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is supported.");
#else #else
@ -3447,8 +3450,9 @@ void MeshGLTest::setInstanceCountIndexedBaseInstance() {
if(!Context::current().isExtensionSupported<Extensions::ARB::base_instance>()) if(!Context::current().isExtensionSupported<Extensions::ARB::base_instance>())
CORRADE_SKIP(Extensions::ARB::base_instance::string() << "is not supported."); CORRADE_SKIP(Extensions::ARB::base_instance::string() << "is not supported.");
#elif !defined(MAGNUM_TARGET_WEBGL) #elif !defined(MAGNUM_TARGET_WEBGL)
if(!Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) if(!Context::current().isExtensionSupported<Extensions::EXT::base_instance>() &&
CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is not supported."); !Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>())
CORRADE_SKIP("Neither" << Extensions::EXT::base_instance::string() << "nor" << Extensions::ANGLE::base_vertex_base_instance::string() << "is supported.");
#else #else
if(!Context::current().isExtensionSupported<Extensions::WEBGL::draw_instanced_base_vertex_base_instance>()) if(!Context::current().isExtensionSupported<Extensions::WEBGL::draw_instanced_base_vertex_base_instance>())
CORRADE_SKIP(Extensions::WEBGL::draw_instanced_base_vertex_base_instance::string() << "is not supported."); CORRADE_SKIP(Extensions::WEBGL::draw_instanced_base_vertex_base_instance::string() << "is not supported.");
@ -3480,6 +3484,8 @@ void MeshGLTest::setInstanceCountIndexedBaseInstance() {
#ifdef MAGNUM_TARGET_GLES #ifdef MAGNUM_TARGET_GLES
void MeshGLTest::setInstanceCountIndexedBaseInstanceNoExtensionAvailable() { void MeshGLTest::setInstanceCountIndexedBaseInstanceNoExtensionAvailable() {
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
if(Context::current().isExtensionSupported<Extensions::EXT::base_instance>())
CORRADE_SKIP(Extensions::EXT::base_instance::string() << "is supported.");
if(Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) if(Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>())
CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is supported."); CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is supported.");
#else #else
@ -3613,8 +3619,9 @@ void MeshGLTest::setInstanceCountIndexedBaseVertexBaseInstance() {
if(!Context::current().isExtensionSupported<Extensions::ARB::base_instance>()) if(!Context::current().isExtensionSupported<Extensions::ARB::base_instance>())
CORRADE_SKIP(Extensions::ARB::base_instance::string() << "is not supported."); CORRADE_SKIP(Extensions::ARB::base_instance::string() << "is not supported.");
#elif !defined(MAGNUM_TARGET_WEBGL) #elif !defined(MAGNUM_TARGET_WEBGL)
if(!Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) if(!Context::current().isExtensionSupported<Extensions::EXT::base_instance>() &&
CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is not supported."); !Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>())
CORRADE_SKIP("Neither" << Extensions::EXT::base_instance::string() << "nor" << Extensions::ANGLE::base_vertex_base_instance::string() << "is supported.");
#else #else
if(!Context::current().isExtensionSupported<Extensions::WEBGL::draw_instanced_base_vertex_base_instance>()) if(!Context::current().isExtensionSupported<Extensions::WEBGL::draw_instanced_base_vertex_base_instance>())
CORRADE_SKIP(Extensions::WEBGL::draw_instanced_base_vertex_base_instance::string() << "is not supported."); CORRADE_SKIP(Extensions::WEBGL::draw_instanced_base_vertex_base_instance::string() << "is not supported.");
@ -3647,6 +3654,8 @@ void MeshGLTest::setInstanceCountIndexedBaseVertexBaseInstance() {
#ifdef MAGNUM_TARGET_GLES #ifdef MAGNUM_TARGET_GLES
void MeshGLTest::setInstanceCountIndexedBaseVertexBaseInstanceNoExtensionAvailable() { void MeshGLTest::setInstanceCountIndexedBaseVertexBaseInstanceNoExtensionAvailable() {
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
if(Context::current().isExtensionSupported<Extensions::EXT::base_instance>())
CORRADE_SKIP(Extensions::EXT::base_instance::string() << "is supported.");
if(Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>()) if(Context::current().isExtensionSupported<Extensions::ANGLE::base_vertex_base_instance>())
CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is supported."); CORRADE_SKIP(Extensions::ANGLE::base_vertex_base_instance::string() << "is supported.");
#else #else

1
src/MagnumExternal/OpenGL/GLES3/extensions.txt vendored

@ -68,6 +68,7 @@ extension EXT_multi_draw_indirect optional
extension EXT_texture_norm16 optional extension EXT_texture_norm16 optional
extension EXT_texture_sRGB_R8 optional extension EXT_texture_sRGB_R8 optional
extension EXT_texture_sRGB_RG8 optional extension EXT_texture_sRGB_RG8 optional
extension EXT_base_instance optional
extension EXT_buffer_storage optional extension EXT_buffer_storage optional
extension EXT_blend_func_extended optional extension EXT_blend_func_extended optional
extension EXT_polygon_offset_clamp optional extension EXT_polygon_offset_clamp optional

12
src/MagnumExternal/OpenGL/GLES3/flextGL.h vendored

@ -2222,6 +2222,12 @@ struct FlextGL {
void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *); void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *);
void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean); void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
/* GL_EXT_base_instance */
void(APIENTRY *DrawArraysInstancedBaseInstanceEXT)(GLenum, GLint, GLsizei, GLsizei, GLuint);
void(APIENTRY *DrawElementsInstancedBaseInstanceEXT)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLuint);
void(APIENTRY *DrawElementsInstancedBaseVertexBaseInstanceEXT)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint, GLuint);
/* GL_EXT_blend_func_extended */ /* GL_EXT_blend_func_extended */
void(APIENTRY *BindFragDataLocationEXT)(GLuint, GLuint, const GLchar *); void(APIENTRY *BindFragDataLocationEXT)(GLuint, GLuint, const GLchar *);
@ -2650,6 +2656,12 @@ extern FLEXTGL_EXPORT FlextGL flextGL;
#define glTexParameterIuiv flextGL.TexParameterIuiv #define glTexParameterIuiv flextGL.TexParameterIuiv
#define glTexStorage3DMultisample flextGL.TexStorage3DMultisample #define glTexStorage3DMultisample flextGL.TexStorage3DMultisample
/* GL_EXT_base_instance */
#define glDrawArraysInstancedBaseInstanceEXT flextGL.DrawArraysInstancedBaseInstanceEXT
#define glDrawElementsInstancedBaseInstanceEXT flextGL.DrawElementsInstancedBaseInstanceEXT
#define glDrawElementsInstancedBaseVertexBaseInstanceEXT flextGL.DrawElementsInstancedBaseVertexBaseInstanceEXT
/* GL_EXT_blend_func_extended */ /* GL_EXT_blend_func_extended */
#define glBindFragDataLocationEXT flextGL.BindFragDataLocationEXT #define glBindFragDataLocationEXT flextGL.BindFragDataLocationEXT

5
src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp vendored

@ -168,6 +168,11 @@ void flextGLInit(Magnum::GL::Context&) {
flextGL.TexParameterIuiv = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, const GLuint *)>(loader.load("glTexParameterIuiv")); flextGL.TexParameterIuiv = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, const GLuint *)>(loader.load("glTexParameterIuiv"));
flextGL.TexStorage3DMultisample = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean)>(loader.load("glTexStorage3DMultisample")); flextGL.TexStorage3DMultisample = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean)>(loader.load("glTexStorage3DMultisample"));
/* GL_EXT_base_instance */
flextGL.DrawArraysInstancedBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLint, GLsizei, GLsizei, GLuint)>(loader.load("glDrawArraysInstancedBaseInstanceEXT"));
flextGL.DrawElementsInstancedBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLuint)>(loader.load("glDrawElementsInstancedBaseInstanceEXT"));
flextGL.DrawElementsInstancedBaseVertexBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint, GLuint)>(loader.load("glDrawElementsInstancedBaseVertexBaseInstanceEXT"));
/* GL_EXT_blend_func_extended */ /* GL_EXT_blend_func_extended */
flextGL.BindFragDataLocationEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationEXT")); flextGL.BindFragDataLocationEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationEXT"));
flextGL.BindFragDataLocationIndexedEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationIndexedEXT")); flextGL.BindFragDataLocationIndexedEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationIndexedEXT"));

10
src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp vendored

@ -36,6 +36,9 @@
#undef glMultiDrawElementsInstancedANGLE #undef glMultiDrawElementsInstancedANGLE
#undef glPolygonModeANGLE #undef glPolygonModeANGLE
#undef glProvokingVertexANGLE #undef glProvokingVertexANGLE
#undef glDrawArraysInstancedBaseInstanceEXT
#undef glDrawElementsInstancedBaseInstanceEXT
#undef glDrawElementsInstancedBaseVertexBaseInstanceEXT
#undef glBindFragDataLocationEXT #undef glBindFragDataLocationEXT
#undef glBindFragDataLocationIndexedEXT #undef glBindFragDataLocationIndexedEXT
#undef glGetFragDataIndexEXT #undef glGetFragDataIndexEXT
@ -236,6 +239,13 @@ void flextGLInit(Magnum::GL::Context&) {
flextGL.ProvokingVertexANGLE = reinterpret_cast<void(APIENTRY*)(GLenum)>(glProvokingVertexANGLE); flextGL.ProvokingVertexANGLE = reinterpret_cast<void(APIENTRY*)(GLenum)>(glProvokingVertexANGLE);
#endif #endif
/* GL_EXT_base_instance */
#if GL_EXT_base_instance
flextGL.DrawArraysInstancedBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLint, GLsizei, GLsizei, GLuint)>(glDrawArraysInstancedBaseInstanceEXT);
flextGL.DrawElementsInstancedBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLuint)>(glDrawElementsInstancedBaseInstanceEXT);
flextGL.DrawElementsInstancedBaseVertexBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint, GLuint)>(glDrawElementsInstancedBaseVertexBaseInstanceEXT);
#endif
/* GL_EXT_blend_func_extended */ /* GL_EXT_blend_func_extended */
#if GL_EXT_blend_func_extended #if GL_EXT_blend_func_extended
flextGL.BindFragDataLocationEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, const GLchar *)>(glBindFragDataLocationEXT); flextGL.BindFragDataLocationEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, const GLchar *)>(glBindFragDataLocationEXT);

5
src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp vendored

@ -370,6 +370,11 @@ void flextGLInit(Magnum::GL::Context&) {
flextGL.TexParameterIuiv = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, const GLuint *)>(loader.load("glTexParameterIuiv")); flextGL.TexParameterIuiv = reinterpret_cast<void(APIENTRY*)(GLenum, GLenum, const GLuint *)>(loader.load("glTexParameterIuiv"));
flextGL.TexStorage3DMultisample = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean)>(loader.load("glTexStorage3DMultisample")); flextGL.TexStorage3DMultisample = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean)>(loader.load("glTexStorage3DMultisample"));
/* GL_EXT_base_instance */
flextGL.DrawArraysInstancedBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLint, GLsizei, GLsizei, GLuint)>(loader.load("glDrawArraysInstancedBaseInstanceEXT"));
flextGL.DrawElementsInstancedBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLuint)>(loader.load("glDrawElementsInstancedBaseInstanceEXT"));
flextGL.DrawElementsInstancedBaseVertexBaseInstanceEXT = reinterpret_cast<void(APIENTRY*)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint, GLuint)>(loader.load("glDrawElementsInstancedBaseVertexBaseInstanceEXT"));
/* GL_EXT_blend_func_extended */ /* GL_EXT_blend_func_extended */
flextGL.BindFragDataLocationEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationEXT")); flextGL.BindFragDataLocationEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationEXT"));
flextGL.BindFragDataLocationIndexedEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationIndexedEXT")); flextGL.BindFragDataLocationIndexedEXT = reinterpret_cast<void(APIENTRY*)(GLuint, GLuint, GLuint, const GLchar *)>(loader.load("glBindFragDataLocationIndexedEXT"));

12
src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h vendored

@ -2226,6 +2226,12 @@ struct FlextGL {
void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *); void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *);
void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean); void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
/* GL_EXT_base_instance */
void(APIENTRY *DrawArraysInstancedBaseInstanceEXT)(GLenum, GLint, GLsizei, GLsizei, GLuint);
void(APIENTRY *DrawElementsInstancedBaseInstanceEXT)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLuint);
void(APIENTRY *DrawElementsInstancedBaseVertexBaseInstanceEXT)(GLenum, GLsizei, GLenum, const void *, GLsizei, GLint, GLuint);
/* GL_EXT_blend_func_extended */ /* GL_EXT_blend_func_extended */
void(APIENTRY *BindFragDataLocationEXT)(GLuint, GLuint, const GLchar *); void(APIENTRY *BindFragDataLocationEXT)(GLuint, GLuint, const GLchar *);
@ -2858,6 +2864,12 @@ extern FLEXTGL_EXPORT FlextGL flextGL;
#define glTexParameterIuiv flextGL.TexParameterIuiv #define glTexParameterIuiv flextGL.TexParameterIuiv
#define glTexStorage3DMultisample flextGL.TexStorage3DMultisample #define glTexStorage3DMultisample flextGL.TexStorage3DMultisample
/* GL_EXT_base_instance */
#define glDrawArraysInstancedBaseInstanceEXT flextGL.DrawArraysInstancedBaseInstanceEXT
#define glDrawElementsInstancedBaseInstanceEXT flextGL.DrawElementsInstancedBaseInstanceEXT
#define glDrawElementsInstancedBaseVertexBaseInstanceEXT flextGL.DrawElementsInstancedBaseVertexBaseInstanceEXT
/* GL_EXT_blend_func_extended */ /* GL_EXT_blend_func_extended */
#define glBindFragDataLocationEXT flextGL.BindFragDataLocationEXT #define glBindFragDataLocationEXT flextGL.BindFragDataLocationEXT

Loading…
Cancel
Save