diff --git a/doc/changelog.dox b/doc/changelog.dox index 8aad1c278..b75ee3151 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -101,6 +101,9 @@ See also: matching @gl_extension{OES,texture_view} and @gl_extension{EXT,texture_view} extensions on GLES 3.1+, exposed as @ref GL::Texture::view() and similar APIs on other texture types +- Implemented the GL 4.5 @gl_extension{ARB,clip_control} extension and + matching @gl_extension{EXT,clip_control} extension on GLES, exposed as + @ref GL::Renderer::setClipControl(). See also [mosra/magnum#543](https://github.com/mosra/magnum/issues/543). - Implemented @gl_extension{EXT,texture_norm16} and @webgl_extension{EXT,texture_norm16} ES and WebGL extensions, making normalized 16-bit texture and renderbuffer formats available on all diff --git a/doc/opengl-mapping.dox b/doc/opengl-mapping.dox index 2c77a4feb..ebfc4c564 100644 --- a/doc/opengl-mapping.dox +++ b/doc/opengl-mapping.dox @@ -106,7 +106,7 @@ OpenGL function | Matching API @fn_gl{ClearTexImage} | | @fn_gl{ClearTexSubImage} | | @fn_gl{ClientWaitSync} | | -@fn_gl{ClipControl} | | +@fn_gl{ClipControl} | @ref GL::Renderer::setClipControl() @fn_gl{ColorMask}, \n `glColorMaski()` | @ref GL::Renderer::setColorMask() @fn_gl{CompileShader} | @ref GL::Shader::compile() @fn_gl{CompressedTexImage1D}, \n @fn_gl{CompressedTexImage2D}, \n @fn_gl{CompressedTexImage3D} | @ref GL::Texture::setCompressedImage(), \n @ref GL::TextureArray::setCompressedImage(), \n @ref GL::CubeMapTexture::setCompressedImage(), \n @ref GL::CubeMapTextureArray::setCompressedImage(), \n @ref GL::RectangleTexture::setCompressedImage() diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 199a821f0..39950fb77 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -243,7 +243,7 @@ Extension | Status ------------------------------------------- | ------ GLSL 4.50 | done @gl_extension{ARB,ES3_1_compatibility} | done -@gl_extension{ARB,clip_control} | | +@gl_extension{ARB,clip_control} | done @gl_extension{ARB,conditional_render_inverted} | done @gl_extension{ARB,cull_distance} | done @gl_extension{ARB,derivative_control} | done (shading language only) @@ -482,6 +482,7 @@ Extension | Status @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,depth_clamp} | done @gl_extension{IMG,texture_compression_pvrtc} | done @gl_extension2{KHR,texture_compression_astc_hdr,KHR_texture_compression_astc_hdr} | done diff --git a/src/Magnum/GL/Context.cpp b/src/Magnum/GL/Context.cpp index ddb4acbb0..e775b6873 100644 --- a/src/Magnum/GL/Context.cpp +++ b/src/Magnum/GL/Context.cpp @@ -356,6 +356,7 @@ constexpr Extension ExtensionList[]{ Extensions::APPLE::texture_format_BGRA8888{}, Extensions::ARM::shader_framebuffer_fetch{}, Extensions::ARM::shader_framebuffer_fetch_depth_stencil{}, + Extensions::EXT::clip_control{}, #ifndef MAGNUM_TARGET_GLES2 Extensions::EXT::clip_cull_distance{}, #endif diff --git a/src/Magnum/GL/Extensions.h b/src/Magnum/GL/Extensions.h index d1fba845a..2c85a7c9a 100644 --- a/src/Magnum/GL/Extensions.h +++ b/src/Magnum/GL/Extensions.h @@ -479,9 +479,10 @@ namespace ANDROID { _extension( 70,EXT,texture_compression_bptc, GLES300, None) // #287 #endif _extension( 71,EXT,texture_compression_s3tc_srgb, GLES200, None) // #289 - _extension( 72,EXT,depth_clamp, GLES200, None) // #309 + _extension( 72,EXT,clip_control, GLES200, None) // #290 + _extension( 73,EXT,depth_clamp, GLES200, None) // #309 } namespace IMG { - _extension( 73,IMG,texture_compression_pvrtc, GLES200, None) // #54 + _extension( 74,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 diff --git a/src/Magnum/GL/Renderer.cpp b/src/Magnum/GL/Renderer.cpp index f7c3a175d..47db5659d 100644 --- a/src/Magnum/GL/Renderer.cpp +++ b/src/Magnum/GL/Renderer.cpp @@ -326,6 +326,16 @@ void Renderer::depthRangefImplementationDefault(const Float near, const Float fa } #endif +#ifndef MAGNUM_TARGET_WEBGL +void Renderer::setClipControl(const ClipOrigin origin, const ClipDepth depth) { + #ifndef MAGNUM_TARGET_GLES + glClipControl(GLenum(origin), GLenum(depth)); + #else + glClipControlEXT(GLenum(origin), GLenum(depth)); + #endif +} +#endif + void Renderer::setColorMask(const GLboolean allowRed, const GLboolean allowGreen, const GLboolean allowBlue, const GLboolean allowAlpha) { glColorMask(allowRed, allowGreen, allowBlue, allowAlpha); } diff --git a/src/Magnum/GL/Renderer.h b/src/Magnum/GL/Renderer.h index 344fda3f4..baeaa0c02 100644 --- a/src/Magnum/GL/Renderer.h +++ b/src/Magnum/GL/Renderer.h @@ -1187,7 +1187,61 @@ class MAGNUM_GL_EXPORT Renderer { * @} */ - /** @{ @name Depth testing */ + /** @{ @name Depth testing and clip control */ + + #ifndef MAGNUM_TARGET_WEBGL + /** + * @brief Clip origin + * @m_since_latest + * + * @see @ref setClipControl() + * @m_enum_values_as_keywords + * @requires_gl45 Extension @gl_extension{ARB,clip_control} + * @requires_es_extension Extension @gl_extension{EXT,clip_control} + * @requires_gles Clip control is not available in WebGL. + */ + enum class ClipOrigin: GLenum { + /** Lower left */ + #ifndef MAGNUM_TARGET_GLES + LowerLeft = GL_LOWER_LEFT, + #else + LowerLeft = GL_LOWER_LEFT_EXT, + #endif + + /** Upper left */ + #ifndef MAGNUM_TARGET_GLES + UpperLeft = GL_UPPER_LEFT, + #else + UpperLeft = GL_UPPER_LEFT_EXT, + #endif + }; + + /** + * @brief Clip depth + * @m_since_latest + * + * @see @ref setClipControl() + * @m_enum_values_as_keywords + * @requires_gl45 Extension @gl_extension{ARB,clip_control} + * @requires_es_extension Extension @gl_extension{EXT,clip_control} + * @requires_gles Clip control is not available in WebGL. + */ + enum class ClipDepth: GLenum { + /** -1 to 1 */ + #ifndef MAGNUM_TARGET_GLES + NegativeOneToOne = GL_NEGATIVE_ONE_TO_ONE, + #else + NegativeOneToOne = GL_NEGATIVE_ONE_TO_ONE_EXT, + #endif + + /** 0 to 1 */ + #ifndef MAGNUM_TARGET_GLES + ZeroToOne = GL_ZERO_TO_ONE, + #else + ZeroToOne = GL_ZERO_TO_ONE_EXT, + #endif + }; + #endif /** * @brief Depth function @@ -1236,6 +1290,21 @@ class MAGNUM_GL_EXPORT Renderer { */ static void setDepthRange(Float near, Float far); + #ifndef MAGNUM_TARGET_WEBGL + /** + * @brief Set clipping behavior + * @m_since_latest + * + * Initial value is @ref ClipOrigin::LowerLeft and + * @ref ClipDepth::NegativeOneToOne. + * @see @fn_gl_keyword{ClipControl} + * @requires_gl45 Extension @gl_extension{ARB,clip_control} + * @requires_es_extension Extension @gl_extension{EXT,clip_control} + * @requires_gles Clip control is not available in WebGL. + */ + static void setClipControl(ClipOrigin origin, ClipDepth depth); + #endif + /* Since 1.8.17, the original short-hand group closing doesn't work anymore. FFS. */ /** diff --git a/src/Magnum/GL/Test/RendererGLTest.cpp b/src/Magnum/GL/Test/RendererGLTest.cpp index cf10d655b..6916fde40 100644 --- a/src/Magnum/GL/Test/RendererGLTest.cpp +++ b/src/Magnum/GL/Test/RendererGLTest.cpp @@ -69,6 +69,9 @@ struct RendererGLTest: OpenGLTester { void drawBuffersBlend(); #endif template void clearDepthDepthRange(); + #ifndef MAGNUM_TARGET_WEBGL + void clipControl(); + #endif private: PluginManager::Manager _manager{"nonexistent"}; @@ -93,7 +96,11 @@ RendererGLTest::RendererGLTest() { #ifndef MAGNUM_TARGET_GLES &RendererGLTest::clearDepthDepthRange, #endif - &RendererGLTest::clearDepthDepthRange}); + &RendererGLTest::clearDepthDepthRange, + #ifndef MAGNUM_TARGET_WEBGL + &RendererGLTest::clipControl + #endif + }); /* Load the plugins directly from the build tree. Otherwise they're either static and already loaded or not present in the build tree */ @@ -314,6 +321,24 @@ template void RendererGLTest::clearDepthDepthRange() { MAGNUM_VERIFY_NO_GL_ERROR(); } +#ifndef MAGNUM_TARGET_WEBGL +void RendererGLTest::clipControl() { + #ifndef MAGNUM_TARGET_GLES + if(!Context::current().isExtensionSupported()) + CORRADE_SKIP(Extensions::ARB::clip_control::string() << "is not supported."); + #else + if(!Context::current().isExtensionSupported()) + CORRADE_SKIP(Extensions::EXT::clip_control::string() << "is not supported."); + #endif + + /* Just setting the default value to verify it doesn't crash or emit an + error */ + Renderer::setClipControl(Renderer::ClipOrigin::LowerLeft, Renderer::ClipDepth::NegativeOneToOne); + + MAGNUM_VERIFY_NO_GL_ERROR(); +} +#endif + }}}} CORRADE_TEST_MAIN(Magnum::GL::Test::RendererGLTest) diff --git a/src/MagnumExternal/OpenGL/GLES2/extensions.txt b/src/MagnumExternal/OpenGL/GLES2/extensions.txt index 590e5703d..940d098d2 100644 --- a/src/MagnumExternal/OpenGL/GLES2/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES2/extensions.txt @@ -93,6 +93,7 @@ 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 EXT_clip_control optional extension EXT_depth_clamp optional extension IMG_texture_compression_pvrtc optional # extension KHR_texture_compression_astc_hdr optional diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGL.h b/src/MagnumExternal/OpenGL/GLES2/flextGL.h index 691afa959..df7cdb4c9 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGL.h @@ -1004,6 +1004,15 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +/* GL_EXT_clip_control */ + +#define GL_LOWER_LEFT_EXT 0x8CA1 +#define GL_UPPER_LEFT_EXT 0x8CA2 +#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E +#define GL_ZERO_TO_ONE_EXT 0x935F +#define GL_CLIP_ORIGIN_EXT 0x935C +#define GL_CLIP_DEPTH_MODE_EXT 0x935D + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -1256,6 +1265,10 @@ struct FlextGL { void(APIENTRY *RenderbufferStorageMultisampleAPPLE)(GLenum, GLsizei, GLenum, GLsizei, GLsizei); void(APIENTRY *ResolveMultisampleFramebufferAPPLE)(void); + /* GL_EXT_clip_control */ + + void(APIENTRY *ClipControlEXT)(GLenum, GLenum); + /* GL_EXT_debug_label */ void(APIENTRY *GetObjectLabelEXT)(GLenum, GLuint, GLsizei, GLsizei *, GLchar *); @@ -1510,6 +1523,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glRenderbufferStorageMultisampleAPPLE flextGL.RenderbufferStorageMultisampleAPPLE #define glResolveMultisampleFramebufferAPPLE flextGL.ResolveMultisampleFramebufferAPPLE +/* GL_EXT_clip_control */ + +#define glClipControlEXT flextGL.ClipControlEXT + /* GL_EXT_debug_label */ #define glGetObjectLabelEXT flextGL.GetObjectLabelEXT diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp index a44776d77..9bf1c2ab3 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp @@ -54,6 +54,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.RenderbufferStorageMultisampleAPPLE = reinterpret_cast(loader.load("glRenderbufferStorageMultisampleAPPLE")); flextGL.ResolveMultisampleFramebufferAPPLE = reinterpret_cast(loader.load("glResolveMultisampleFramebufferAPPLE")); + /* GL_EXT_clip_control */ + flextGL.ClipControlEXT = reinterpret_cast(loader.load("glClipControlEXT")); + /* GL_EXT_debug_label */ flextGL.GetObjectLabelEXT = reinterpret_cast(loader.load("glGetObjectLabelEXT")); flextGL.LabelObjectEXT = reinterpret_cast(loader.load("glLabelObjectEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp index 29476b586..20f984684 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp @@ -36,6 +36,7 @@ #undef glMultiDrawElementsInstancedANGLE #undef glRenderbufferStorageMultisampleAPPLE #undef glResolveMultisampleFramebufferAPPLE +#undef glClipControlEXT #undef glGetObjectLabelEXT #undef glLabelObjectEXT #undef glInsertEventMarkerEXT @@ -202,6 +203,11 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.ResolveMultisampleFramebufferAPPLE = reinterpret_cast(glResolveMultisampleFramebufferAPPLE); #endif + /* GL_EXT_clip_control */ + #if GL_EXT_clip_control + flextGL.ClipControlEXT = reinterpret_cast(glClipControlEXT); + #endif + /* GL_EXT_debug_label */ #if GL_EXT_debug_label flextGL.GetObjectLabelEXT = reinterpret_cast(glGetObjectLabelEXT); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp index c0c6323b3..b17e95150 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformWindowsDesktop.cpp @@ -153,6 +153,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.VertexAttrib4fv = reinterpret_cast(loader.load("glVertexAttrib4fv")); flextGL.VertexAttribPointer = reinterpret_cast(loader.load("glVertexAttribPointer")); + /* GL_EXT_clip_control */ + flextGL.ClipControlEXT = reinterpret_cast(loader.load("glClipControlEXT")); + /* GL_EXT_debug_label */ flextGL.GetObjectLabelEXT = reinterpret_cast(loader.load("glGetObjectLabelEXT")); flextGL.LabelObjectEXT = reinterpret_cast(loader.load("glLabelObjectEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h index 54e11313a..6fa116d69 100644 --- a/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLWindowsDesktop.h @@ -1000,6 +1000,15 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +/* GL_EXT_clip_control */ + +#define GL_LOWER_LEFT_EXT 0x8CA1 +#define GL_UPPER_LEFT_EXT 0x8CA2 +#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E +#define GL_ZERO_TO_ONE_EXT 0x935F +#define GL_CLIP_ORIGIN_EXT 0x935C +#define GL_CLIP_DEPTH_MODE_EXT 0x935D + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -1256,6 +1265,10 @@ struct FlextGL { void(APIENTRY *VertexAttrib4fv)(GLuint, const GLfloat *); void(APIENTRY *VertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, const void *); + /* GL_EXT_clip_control */ + + void(APIENTRY *ClipControlEXT)(GLenum, GLenum); + /* GL_EXT_debug_label */ void(APIENTRY *GetObjectLabelEXT)(GLenum, GLuint, GLsizei, GLsizei *, GLchar *); @@ -1610,6 +1623,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glVertexAttrib4fv flextGL.VertexAttrib4fv #define glVertexAttribPointer flextGL.VertexAttribPointer +/* GL_EXT_clip_control */ + +#define glClipControlEXT flextGL.ClipControlEXT + /* GL_EXT_debug_label */ #define glGetObjectLabelEXT flextGL.GetObjectLabelEXT diff --git a/src/MagnumExternal/OpenGL/GLES3/extensions.txt b/src/MagnumExternal/OpenGL/GLES3/extensions.txt index 623c75469..a05fd37f8 100644 --- a/src/MagnumExternal/OpenGL/GLES3/extensions.txt +++ b/src/MagnumExternal/OpenGL/GLES3/extensions.txt @@ -69,6 +69,7 @@ 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_depth_clamp optional extension IMG_texture_compression_pvrtc optional # extension KHR_texture_compression_astc_hdr optional diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGL.h b/src/MagnumExternal/OpenGL/GLES3/flextGL.h index f07d56a82..7ffd6cbcc 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGL.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGL.h @@ -1629,6 +1629,15 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +/* GL_EXT_clip_control */ + +#define GL_LOWER_LEFT_EXT 0x8CA1 +#define GL_UPPER_LEFT_EXT 0x8CA2 +#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E +#define GL_ZERO_TO_ONE_EXT 0x935F +#define GL_CLIP_ORIGIN_EXT 0x935C +#define GL_CLIP_DEPTH_MODE_EXT 0x935D + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -2101,6 +2110,10 @@ struct FlextGL { void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *); void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean); + /* GL_EXT_clip_control */ + + void(APIENTRY *ClipControlEXT)(GLenum, GLenum); + /* GL_EXT_copy_image */ void(APIENTRY *CopyImageSubDataEXT)(GLuint, GLenum, GLint, GLint, GLint, GLint, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei); @@ -2452,6 +2465,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glTexParameterIuiv flextGL.TexParameterIuiv #define glTexStorage3DMultisample flextGL.TexStorage3DMultisample +/* GL_EXT_clip_control */ + +#define glClipControlEXT flextGL.ClipControlEXT + /* GL_EXT_copy_image */ #define glCopyImageSubDataEXT flextGL.CopyImageSubDataEXT diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp index 6fe1f5350..6b086dcbb 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp @@ -161,6 +161,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.TexParameterIuiv = reinterpret_cast(loader.load("glTexParameterIuiv")); flextGL.TexStorage3DMultisample = reinterpret_cast(loader.load("glTexStorage3DMultisample")); + /* GL_EXT_clip_control */ + flextGL.ClipControlEXT = reinterpret_cast(loader.load("glClipControlEXT")); + /* GL_EXT_copy_image */ flextGL.CopyImageSubDataEXT = reinterpret_cast(loader.load("glCopyImageSubDataEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp index 50a9fe424..c9dfdd84f 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp @@ -33,6 +33,7 @@ #undef glMultiDrawArraysInstancedANGLE #undef glMultiDrawElementsANGLE #undef glMultiDrawElementsInstancedANGLE +#undef glClipControlEXT #undef glCopyImageSubDataEXT #undef glGetObjectLabelEXT #undef glLabelObjectEXT @@ -184,6 +185,11 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.MultiDrawElementsInstancedANGLE = reinterpret_cast(glMultiDrawElementsInstancedANGLE); #endif + /* GL_EXT_clip_control */ + #if GL_EXT_clip_control + flextGL.ClipControlEXT = reinterpret_cast(glClipControlEXT); + #endif + /* GL_EXT_copy_image */ #if GL_EXT_copy_image flextGL.CopyImageSubDataEXT = reinterpret_cast(glCopyImageSubDataEXT); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp index cb38f9ff6..208ecdcf1 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformWindowsDesktop.cpp @@ -363,6 +363,9 @@ void flextGLInit(Magnum::GL::Context&) { flextGL.TexParameterIuiv = reinterpret_cast(loader.load("glTexParameterIuiv")); flextGL.TexStorage3DMultisample = reinterpret_cast(loader.load("glTexStorage3DMultisample")); + /* GL_EXT_clip_control */ + flextGL.ClipControlEXT = reinterpret_cast(loader.load("glClipControlEXT")); + /* GL_EXT_copy_image */ flextGL.CopyImageSubDataEXT = reinterpret_cast(loader.load("glCopyImageSubDataEXT")); diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h index 57630ce0c..6b769eb23 100644 --- a/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLWindowsDesktop.h @@ -1622,6 +1622,15 @@ typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLen #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +/* GL_EXT_clip_control */ + +#define GL_LOWER_LEFT_EXT 0x8CA1 +#define GL_UPPER_LEFT_EXT 0x8CA2 +#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E +#define GL_ZERO_TO_ONE_EXT 0x935F +#define GL_CLIP_ORIGIN_EXT 0x935C +#define GL_CLIP_DEPTH_MODE_EXT 0x935D + /* GL_EXT_depth_clamp */ #define GL_DEPTH_CLAMP_EXT 0x864F @@ -2105,6 +2114,10 @@ struct FlextGL { void(APIENTRY *TexParameterIuiv)(GLenum, GLenum, const GLuint *); void(APIENTRY *TexStorage3DMultisample)(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean); + /* GL_EXT_clip_control */ + + void(APIENTRY *ClipControlEXT)(GLenum, GLenum); + /* GL_EXT_copy_image */ void(APIENTRY *CopyImageSubDataEXT)(GLuint, GLenum, GLint, GLint, GLint, GLint, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei); @@ -2660,6 +2673,10 @@ extern FLEXTGL_EXPORT FlextGL flextGL; #define glTexParameterIuiv flextGL.TexParameterIuiv #define glTexStorage3DMultisample flextGL.TexStorage3DMultisample +/* GL_EXT_clip_control */ + +#define glClipControlEXT flextGL.ClipControlEXT + /* GL_EXT_copy_image */ #define glCopyImageSubDataEXT flextGL.CopyImageSubDataEXT