From 671c99226f26b1e3336ff9240ec55a188be91eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 26 Apr 2017 21:43:26 +0200 Subject: [PATCH] Initial support for OpenGL ES 3.2. A bunch of extensions formerly in AEP are now part of ES 3.2, which means they were reordered in the extension lists. While at it, also added corresponding new GL and WebGL extensions and fixed a few wrongly categorized extensions in WebGL. --- Doxyfile | 1 + Doxyfile-mcss | 1 + Doxyfile-public | 1 + doc/opengl-support.dox | 64 ++++++++++++++-------- doc/opengl.dox | 7 +++ src/Magnum/Context.cpp | 84 +++++++++++++++++------------ src/Magnum/Extensions.h | 53 ++++++++++-------- src/Magnum/Platform/magnum-info.cpp | 1 + src/Magnum/Shader.cpp | 1 + src/Magnum/Version.cpp | 1 + src/Magnum/Version.h | 18 ++++++- 11 files changed, 153 insertions(+), 79 deletions(-) diff --git a/Doxyfile b/Doxyfile index 5e25c0380..afcc8888b 100644 --- a/Doxyfile +++ b/Doxyfile @@ -268,6 +268,7 @@ ALIASES = \ "requires_gles20=@xrefitem requires-gles20 \"Requires OpenGL ES 2.0 / WebGL 1.0\" \"Functionality requiring OpenGL ES 2.0 or WebGL 1.0\"" \ "requires_gles30=@xrefitem requires-gles30 \"Requires OpenGL ES 3.0\" \"Functionality requiring OpenGL ES 3.0\"" \ "requires_gles31=@xrefitem requires-gles31 \"Requires OpenGL ES 3.1\" \"Functionality requiring OpenGL ES 3.1\"" \ + "requires_gles32=@xrefitem requires-gles32 \"Requires OpenGL ES 3.2\" \"Functionality requiring OpenGL ES 3.2\"" \ "requires_es_extension=@xrefitem requires-es-extension \"Requires OpenGL ES extension\" \"Functionality requiring specific OpenGL ES extension\"" \ "requires_gles=@xrefitem requires-gles \"Requires OpenGL ES or desktop OpenGL\" \"Functionality requiring OpenGL ES or desktop OpenGL\"" \ "requires_webgl20=@xrefitem requires-webgl20 \"Requires WebGL 2.0\" \"Functionality requiring WebGL 2.0\"" \ diff --git a/Doxyfile-mcss b/Doxyfile-mcss index c04498012..4a46522a6 100644 --- a/Doxyfile-mcss +++ b/Doxyfile-mcss @@ -47,6 +47,7 @@ ALIASES = \ "requires_gles20=@xrefitem requires-gles20 \"Requires OpenGL ES 2.0 / WebGL 1.0\" \"Functionality requiring OpenGL ES 2.0 or WebGL 1.0\"" \ "requires_gles30=@xrefitem requires-gles30 \"Requires OpenGL ES 3.0\" \"Functionality requiring OpenGL ES 3.0\"" \ "requires_gles31=@xrefitem requires-gles31 \"Requires OpenGL ES 3.1\" \"Functionality requiring OpenGL ES 3.1\"" \ + "requires_gles32=@xrefitem requires-gles32 \"Requires OpenGL ES 3.2\" \"Functionality requiring OpenGL ES 3.2\"" \ "requires_es_extension=@xrefitem requires-es-extension \"Requires OpenGL ES extension\" \"Functionality requiring specific OpenGL ES extension\"" \ "requires_gles=@xrefitem requires-gles \"Requires OpenGL ES or desktop OpenGL\" \"Functionality requiring OpenGL ES or desktop OpenGL\"" \ "requires_webgl20=@xrefitem requires-webgl20 \"Requires WebGL 2.0\" \"Functionality requiring WebGL 2.0\"" \ diff --git a/Doxyfile-public b/Doxyfile-public index 749fb28c5..d6e6c172d 100644 --- a/Doxyfile-public +++ b/Doxyfile-public @@ -44,6 +44,7 @@ ALIASES = \ "requires_gles20=@xrefitem requires-gles20 \"Requires OpenGL ES 2.0 / WebGL 1.0\" \"Functionality requiring OpenGL ES 2.0 or WebGL 1.0\"" \ "requires_gles30=@xrefitem requires-gles30 \"Requires OpenGL ES 3.0\" \"Functionality requiring OpenGL ES 3.0\"" \ "requires_gles31=@xrefitem requires-gles31 \"Requires OpenGL ES 3.1\" \"Functionality requiring OpenGL ES 3.1\"" \ + "requires_gles32=@xrefitem requires-gles32 \"Requires OpenGL ES 3.2\" \"Functionality requiring OpenGL ES 3.2\"" \ "requires_es_extension=@xrefitem requires-es-extension \"Requires OpenGL ES extension\" \"Functionality requiring specific OpenGL ES extension\"" \ "requires_gles=@xrefitem requires-gles \"Requires OpenGL ES or desktop OpenGL\" \"Functionality requiring OpenGL ES or desktop OpenGL\"" \ "requires_webgl20=@xrefitem requires-webgl20 \"Requires WebGL 2.0\" \"Functionality requiring WebGL 2.0\"" \ diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 00e078d64..0bc699bc3 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -256,7 +256,6 @@ GLSL 4.50 | done Extension | Status ------------------------------------------- | ------ @extension{ARB,robustness} | done -@extension2{KHR,texture_compression_astc_ldr,texture_compression_astc_hdr} | done @extension{KHR,texture_compression_astc_hdr} | done @extension{ARB,robustness_isolation} | done @extension{ARB,bindless_texture} | | @@ -269,6 +268,9 @@ Extension | Status @extension{ARB,pipeline_statistics_query} | | @extension{ARB,sparse_buffer} | | @extension{ARB,transform_feedback_overflow_query} | done +@extension{ARB,ES3_2_compatibility} | | +@extension2{KHR,texture_compression_astc_ldr,texture_compression_astc_hdr} | done +@extension{KHR,robust_buffer_access_behavior} | done (nothing to do) @extension{KHR,blend_equation_advanced} | done @extension2{KHR,blend_equation_advanced_coherent,blend_equation_advanced} | done @extension{KHR,no_error} | done @@ -312,6 +314,37 @@ supported. ESSL 3.00 is supported. Features that have their equivalents implemented in desktop version are supported. ESSL 3.10 is supported. +@subsection opengl-support-es32 OpenGL ES 3.2 + +Features that have their equivalents implemented in desktop version are +supported. ESSL 3.20 is supported. + +Extension | Status +------------------------------------------- | ------ +@extension{EXT,color_buffer_half_float} | | +@extension{EXT,color_buffer_float} | | +@extension{EXT,copy_image} | | +@extension{EXT,draw_buffers_indexed} | | +@extension{EXT,geometry_shader} | missing some ES-specific limit queries +@extension{EXT,gpu_shader5} | done (shading language only) +@extension{EXT,shader_io_blocks} | done (shading language only) +@extension{EXT,tessellation_shader} | see above +@extension{EXT,texture_border_clamp} | done +@extension{EXT,texture_buffer} | done +@extension{EXT,texture_cube_map_array} | done +@extension{EXT,primitive_bounding_box} | | +@extension2{KHR,texture_compression_astc_ldr,texture_compression_astc_hdr} | done +@extension{KHR,debug} | see above +@extension2{KHR,blend_equation_advanced,blend_equation_advanced} | done +@extension{KHR,robustness} | | +@extension{KHR,robust_buffer_access_behavior} | done (nothing to do) +@extension{OES,sample_shading} | | +@extension{OES,sample_variables} | done (shading language only) +@extension{OES,shader_image_atomic} | done (shading language only) +@extension{OES,shader_multisample_interpolation} | | +@extension{OES,texture_stencil8} | done +@extension{OES,texture_storage_multisample_2d_array} | done + @subsection opengl-support-es30-extensions OpenGL ES 2.0 extensions to match ES 3.0 functionality @m_class{m-fullwidth} @@ -396,23 +429,8 @@ Extension | Status @extension{EXT,sRGB_write_control} | done @extension2{EXT,texture_compression_s3tc,texture_compression_s3tc} | done @extension{EXT,shader_integer_mix} | done (shading language only) -@extension{EXT,copy_image} | | -@extension{EXT,draw_buffers_indexed} | | -@extension{EXT,geometry_shader} | missing some ES-specific limit queries -@extension{EXT,gpu_shader5} | done (shading language only) -@extension{EXT,shader_io_blocks} | done (shading language only) -@extension{EXT,tessellation_shader} | see above -@extension{EXT,texture_border_clamp} | done -@extension{EXT,texture_buffer} | done -@extension{EXT,texture_cube_map_array} | done -@extension{EXT,primitive_bounding_box} | | -@extension2{KHR,texture_compression_astc_ldr,texture_compression_astc_hdr} | done @extension2{KHR,texture_compression_astc_hdr,texture_compression_astc_hdr} | done -@extension{KHR,debug} | see above -@extension2{KHR,blend_equation_advanced,blend_equation_advanced} | done @extension2{KHR,blend_equation_advanced_coherent,blend_equation_advanced} | done -@extension{KHR,robustness} | | -@extension{KHR,robust_buffer_access_behavior} | done (nothing to do) @extension{KHR,context_flush_control} | | @extension2{KHR,no_error,no_error} | done @extension2{NV,read_buffer_front,NV_read_buffer} | done @@ -426,12 +444,6 @@ Extension | Status @extension{OES,mapbuffer} | done @extension{OES,stencil1} | done @extension{OES,stencil4} | done -@extension{OES,sample_shading} | | -@extension{OES,sample_variables} | done (shading language only) -@extension{OES,shader_image_atomic} | done (shading language only) -@extension{OES,shader_multisample_interpolation} | | -@extension{OES,texture_stencil8} | done -@extension{OES,texture_storage_multisample_2d_array} | done @subsection opengl-support-webgl10 WebGL 1.0 @@ -450,6 +462,7 @@ supported. Extension | Status ------------------------------------------- | ------ @webgl_extension{ANGLE,instanced_arrays} | done +@webgl_extension{EXT,color_buffer_half_float} | | @webgl_extension{EXT,blend_minmax} | done @webgl_extension{EXT,shader_texture_lod} | done (shading language only) @webgl_extension{OES,texture_float} | done @@ -461,8 +474,14 @@ Extension | Status @webgl_extension{OES,texture_half_float_linear} | done @webgl_extension{OES,fbo_render_mipmap} | done @webgl_extension{WEBGL,depth_texture} | done +@webgl_extension{WEBGL,color_buffer_float} | | @webgl_extension{WEBGL,draw_buffers} | done +@attention @webgl_extension{EXT,color_buffer_half_float} and + @webgl_extension{WEBGL,color_buffer_float} are not part of WebGL 2.0, but + are included in this table because they are subsumed by + @webgl_extension{EXT,color_buffer_float} in WebGL 2.0. + @subsection opengl-support-webgl-extensions WebGL extensions to match desktop functionality @m_class{m-fullwidth} @@ -472,6 +491,7 @@ Extension | Status @webgl_extension{EXT,texture_filter_anisotropic} | done @webgl_extension{EXT,sRGB} | done @webgl_extension{EXT,disjoint_timer_query} | only time elapsed query +@webgl_extension{EXT,color_buffer_float} | | @webgl_extension{WEBGL,compressed_texture_s3tc} | done @section opengl-unsupported Unsupported OpenGL features diff --git a/doc/opengl.dox b/doc/opengl.dox index 8a84bc84a..f6913132d 100644 --- a/doc/opengl.dox +++ b/doc/opengl.dox @@ -67,6 +67,7 @@ is supported on older Intel GPUs even if they are capable of OpenGL 2.1 only). - @subpage requires-gles20 - @subpage requires-gles30 - @subpage requires-gles31 +- @subpage requires-gles32 - @subpage requires-es-extension - @subpage requires-gles - @subpage requires-webgl20 @@ -149,6 +150,12 @@ or desktop OpenGL. The following symbols are not defined when targeting OpenGL ES 2.0. */ +/** @page requires-gles32 Functionality requiring OpenGL ES 3.2 +@m_footernavigation + +The following symbols are not defined when targeting OpenGL ES 2.0. +*/ + /** @page requires-es-extension Functionality requiring specific OpenGL ES extension * @m_footernavigation */ diff --git a/src/Magnum/Context.cpp b/src/Magnum/Context.cpp index 7e4f5de85..17d452899 100644 --- a/src/Magnum/Context.cpp +++ b/src/Magnum/Context.cpp @@ -87,6 +87,7 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,ARB,pipeline_statistics_query), _extension(GL,ARB,sparse_buffer), _extension(GL,ARB,transform_feedback_overflow_query), + _extension(GL,ARB,ES3_2_compatibility), _extension(GL,ATI,texture_mirror_once), _extension(GL,EXT,texture_filter_anisotropic), _extension(GL,EXT,texture_compression_s3tc), @@ -235,10 +236,12 @@ const std::vector& Extension::extensions(Version version) { static const std::vector extensions{ _extension(GL,EXT,texture_filter_anisotropic), _extension(GL,EXT,disjoint_timer_query), + _extension(GL,EXT,color_buffer_float), _extension(GL,WEBGL,compressed_texture_s3tc)}; #ifdef MAGNUM_TARGET_GLES2 static const std::vector extensionsES300{ _extension(GL,ANGLE,instanced_arrays), + _extension(GL,EXT,color_buffer_half_float), _extension(GL,EXT,sRGB), _extension(GL,EXT,blend_minmax), _extension(GL,EXT,shader_texture_lod), @@ -251,6 +254,7 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,OES,texture_half_float_linear), _extension(GL,OES,fbo_render_mipmap), _extension(GL,WEBGL,depth_texture), + _extension(GL,WEBGL,color_buffer_float), _extension(GL,WEBGL,draw_buffers)}; #endif #else @@ -267,6 +271,9 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,EXT,multi_draw_arrays), _extension(GL,EXT,debug_label), _extension(GL,EXT,debug_marker), + _extension(GL,EXT,separate_shader_objects), + _extension(GL,EXT,multisampled_render_to_texture), + _extension(GL,EXT,robustness), _extension(GL,EXT,shader_framebuffer_fetch), _extension(GL,EXT,disjoint_timer_query), _extension(GL,EXT,texture_sRGB_decode), @@ -274,31 +281,9 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,EXT,texture_compression_s3tc), #ifndef MAGNUM_TARGET_GLES2 _extension(GL,EXT,shader_integer_mix), - _extension(GL,EXT,copy_image), - #endif - _extension(GL,EXT,draw_buffers_indexed), - #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,EXT,geometry_shader), - _extension(GL,EXT,gpu_shader5), - _extension(GL,EXT,shader_io_blocks), - _extension(GL,EXT,tessellation_shader), #endif - _extension(GL,EXT,texture_border_clamp), - #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,EXT,texture_buffer), - _extension(GL,EXT,texture_cube_map_array), - _extension(GL,EXT,primitive_bounding_box), - #endif - _extension(GL,EXT,separate_shader_objects), - _extension(GL,EXT,multisampled_render_to_texture), - _extension(GL,EXT,robustness), - _extension(GL,KHR,texture_compression_astc_ldr), _extension(GL,KHR,texture_compression_astc_hdr), - _extension(GL,KHR,debug), - _extension(GL,KHR,blend_equation_advanced), _extension(GL,KHR,blend_equation_advanced_coherent), - _extension(GL,KHR,robustness), - _extension(GL,KHR,robust_buffer_access_behavior), _extension(GL,KHR,context_flush_control), _extension(GL,KHR,no_error), _extension(GL,NV,read_buffer_front), @@ -313,18 +298,7 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,OES,depth32), _extension(GL,OES,mapbuffer), _extension(GL,OES,stencil1), - _extension(GL,OES,stencil4), - #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,OES,sample_shading), - _extension(GL,OES,sample_variables), - _extension(GL,OES,shader_image_atomic), - _extension(GL,OES,shader_multisample_interpolation), - #endif - _extension(GL,OES,texture_stencil8), - #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,OES,texture_storage_multisample_2d_array) - #endif - }; + _extension(GL,OES,stencil4)}; #ifdef MAGNUM_TARGET_GLES2 static const std::vector extensionsES300{ _extension(GL,ANGLE,framebuffer_blit), @@ -376,6 +350,41 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,OES,required_internalformat), _extension(GL,OES,surfaceless_context)}; #endif + static const std::vector extensionsES320{ + _extension(GL,EXT,color_buffer_half_float), + #ifndef MAGNUM_TARGET_GLES2 + _extension(GL,EXT,color_buffer_float), + _extension(GL,EXT,copy_image), + #endif + _extension(GL,EXT,draw_buffers_indexed), + #ifndef MAGNUM_TARGET_GLES2 + _extension(GL,EXT,geometry_shader), + _extension(GL,EXT,gpu_shader5), + _extension(GL,EXT,shader_io_blocks), + _extension(GL,EXT,tessellation_shader), + #endif + _extension(GL,EXT,texture_border_clamp), + #ifndef MAGNUM_TARGET_GLES2 + _extension(GL,EXT,texture_buffer), + _extension(GL,EXT,texture_cube_map_array), + _extension(GL,EXT,primitive_bounding_box), + #endif + _extension(GL,KHR,texture_compression_astc_ldr), + _extension(GL,KHR,debug), + _extension(GL,KHR,blend_equation_advanced), + _extension(GL,KHR,robustness), + _extension(GL,KHR,robust_buffer_access_behavior), + #ifndef MAGNUM_TARGET_GLES2 + _extension(GL,OES,sample_shading), + _extension(GL,OES,sample_variables), + _extension(GL,OES,shader_image_atomic), + _extension(GL,OES,shader_multisample_interpolation), + #endif + _extension(GL,OES,texture_stencil8), + #ifndef MAGNUM_TARGET_GLES2 + _extension(GL,OES,texture_storage_multisample_2d_array) + #endif + }; #endif #undef _extension @@ -395,7 +404,8 @@ const std::vector& Extension::extensions(Version version) { case Version::GL450: return extensions450; case Version::GLES200: case Version::GLES300: - case Version::GLES310: return empty; + case Version::GLES310: + case Version::GLES320: return empty; #else case Version::GLES200: return empty; case Version::GLES300: @@ -406,6 +416,7 @@ const std::vector& Extension::extensions(Version version) { #endif #ifndef MAGNUM_TARGET_WEBGL case Version::GLES310: return empty; + case Version::GLES320: return extensionsES320; #endif #endif } @@ -612,6 +623,7 @@ bool Context::tryCreate() { Version::GLES300, #ifndef MAGNUM_TARGET_WEBGL Version::GLES310, + Version::GLES320, #endif #endif Version::None @@ -813,6 +825,8 @@ bool Context::isVersionSupported(Version version) const { return isExtensionSupported(); if(version == Version::GLES310) return isExtensionSupported(); + if(version == Version::GLES320) + return isExtensionSupported(); #endif return _version >= version; diff --git a/src/Magnum/Extensions.h b/src/Magnum/Extensions.h index 8a17046e8..eef7e989e 100644 --- a/src/Magnum/Extensions.h +++ b/src/Magnum/Extensions.h @@ -210,6 +210,7 @@ namespace GL { _extension(GL,ARB,pipeline_statistics_query, GL300, None) // #171 _extension(GL,ARB,sparse_buffer, GL210, None) // #172 _extension(GL,ARB,transform_feedback_overflow_query, GL300, None) // #173 + _extension(GL,ARB,ES3_2_compatibility, GL450, None) // #177 } namespace ATI { _extension(GL,ATI,texture_mirror_once, GL210, None) // #221 } namespace EXT { @@ -239,6 +240,7 @@ namespace GL { _extension(GL,KHR,texture_compression_astc_hdr, GL210, None) // #118 _extension(GL,KHR,debug, GL210, GL430) // #119 _extension(GL,KHR,context_flush_control, GL210, GL450) // #168 + _extension(GL,KHR,robust_buffer_access_behavior, GL320, None) // #169 _extension(GL,KHR,robustness, GL320, GL450) // #170 _extension(GL,KHR,blend_equation_advanced, GL210, None) // #174 _extension(GL,KHR,blend_equation_advanced_coherent, GL210, None) // #174 @@ -259,6 +261,9 @@ namespace GL { } namespace EXT { _extension(GL,EXT,texture_filter_anisotropic, GLES200, None) // #11 #ifdef MAGNUM_TARGET_GLES2 + _extension(GL,EXT,color_buffer_half_float, GLES200, None) // #14 + #endif + #ifdef MAGNUM_TARGET_GLES2 _extension(GL,EXT,sRGB, GLES200, GLES300) // #17 _extension(GL,EXT,blend_minmax, GLES200, GLES300) // #25 #endif @@ -266,6 +271,7 @@ namespace GL { #ifdef MAGNUM_TARGET_GLES2 _extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #27 #endif + _extension(GL,EXT,color_buffer_float, GLES300, None) // #31 } namespace OES { #ifdef MAGNUM_TARGET_GLES2 _extension(GL,OES,texture_float, GLES200, GLES300) // #1 @@ -281,6 +287,7 @@ namespace GL { _extension(GL,WEBGL,compressed_texture_s3tc, GLES200, None) // #8 #ifdef MAGNUM_TARGET_GLES2 _extension(GL,WEBGL,depth_texture, GLES200, GLES300) // #9 + _extension(GL,WEBGL,color_buffer_float, GLES200, None) // #14 _extension(GL,WEBGL,draw_buffers, GLES200, GLES300) // #18 #endif } @@ -327,6 +334,7 @@ namespace GL { _extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #77 _extension(GL,EXT,unpack_subimage, GLES200, GLES300) // #90 #endif + _extension(GL,EXT,color_buffer_half_float, GLES200, GLES320) // #97 _extension(GL,EXT,debug_label, GLES200, None) // #98 _extension(GL,EXT,debug_marker, GLES200, None) // #99 #ifdef MAGNUM_TARGET_GLES2 @@ -345,6 +353,9 @@ namespace GL { _extension(GL,EXT,map_buffer_range, GLES200, GLES300) // #121 #endif _extension(GL,EXT,shader_framebuffer_fetch, GLES200, None) // #122 + #ifndef MAGNUM_TARGET_GLES2 + _extension(GL,EXT,color_buffer_float, GLES300, GLES320) // #137 + #endif _extension(GL,EXT,disjoint_timer_query, GLES200, None) // #150 #ifdef MAGNUM_TARGET_GLES2 _extension(GL,EXT,draw_buffers, GLES200, GLES300) // #151 @@ -358,29 +369,29 @@ namespace GL { #endif #ifndef MAGNUM_TARGET_GLES2 _extension(GL,EXT,shader_integer_mix, GLES300, None) // #161 - _extension(GL,EXT,copy_image, GLES300, None) // #175 + _extension(GL,EXT,copy_image, GLES300, GLES320) // #175 #endif - _extension(GL,EXT,draw_buffers_indexed, GLES200, None) // #176 + _extension(GL,EXT,draw_buffers_indexed, GLES200, GLES320) // #176 #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,EXT,geometry_shader, GLES310, None) // #177 - _extension(GL,EXT,gpu_shader5, GLES310, None) // #178 - _extension(GL,EXT,shader_io_blocks, GLES310, None) // #180 - _extension(GL,EXT,tessellation_shader, GLES310, None) // #181 + _extension(GL,EXT,geometry_shader, GLES310, GLES320) // #177 + _extension(GL,EXT,gpu_shader5, GLES310, GLES320) // #178 + _extension(GL,EXT,shader_io_blocks, GLES310, GLES320) // #180 + _extension(GL,EXT,tessellation_shader, GLES310, GLES320) // #181 #endif - _extension(GL,EXT,texture_border_clamp, GLES200, None) // #182 + _extension(GL,EXT,texture_border_clamp, GLES200, GLES320) // #182 #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,EXT,texture_buffer, GLES310, None) // #183 - _extension(GL,EXT,texture_cube_map_array, GLES310, None) // #184 - _extension(GL,EXT,primitive_bounding_box, GLES310, None) // #186 + _extension(GL,EXT,texture_buffer, GLES310, GLES320) // #183 + _extension(GL,EXT,texture_cube_map_array, GLES310, GLES320) // #184 + _extension(GL,EXT,primitive_bounding_box, GLES310, GLES320) // #186 #endif } namespace KHR { - _extension(GL,KHR,texture_compression_astc_ldr, GLES200, None) // #117 + _extension(GL,KHR,texture_compression_astc_ldr, GLES200, GLES320) // #117 _extension(GL,KHR,texture_compression_astc_hdr, GLES200, None) // #117 - _extension(GL,KHR,debug, GLES200, None) // #118 - _extension(GL,KHR,blend_equation_advanced, GLES200, None) // #168 + _extension(GL,KHR,debug, GLES200, GLES320) // #118 + _extension(GL,KHR,blend_equation_advanced, GLES200, GLES320) // #168 _extension(GL,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 - _extension(GL,KHR,robustness, GLES200, None) // #170 - _extension(GL,KHR,robust_buffer_access_behavior, GLES200, None) // #189 + _extension(GL,KHR,robustness, GLES200, GLES320) // #170 + _extension(GL,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189 _extension(GL,KHR,context_flush_control, GLES200, None) // #191 _extension(GL,KHR,no_error, GLES200, None) // #243 } namespace NV { @@ -438,14 +449,14 @@ namespace GL { _extension(GL,OES,surfaceless_context, GLES200, GLES300) // #116 #endif #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,OES,sample_shading, GLES300, None) // #169 - _extension(GL,OES,sample_variables, GLES300, None) // #170 - _extension(GL,OES,shader_image_atomic, GLES310, None) // #171 - _extension(GL,OES,shader_multisample_interpolation, GLES300, None) // #172 + _extension(GL,OES,sample_shading, GLES300, GLES320) // #169 + _extension(GL,OES,sample_variables, GLES300, GLES320) // #170 + _extension(GL,OES,shader_image_atomic, GLES310, GLES320) // #171 + _extension(GL,OES,shader_multisample_interpolation, GLES300, GLES320) // #172 #endif - _extension(GL,OES,texture_stencil8, GLES200, None) // #173 + _extension(GL,OES,texture_stencil8, GLES200, GLES320) // #173 #ifndef MAGNUM_TARGET_GLES2 - _extension(GL,OES,texture_storage_multisample_2d_array, GLES310, None) // #174 + _extension(GL,OES,texture_storage_multisample_2d_array, GLES310, GLES320) // #174 #endif } #endif diff --git a/src/Magnum/Platform/magnum-info.cpp b/src/Magnum/Platform/magnum-info.cpp index f7fbeed6e..c66a224eb 100644 --- a/src/Magnum/Platform/magnum-info.cpp +++ b/src/Magnum/Platform/magnum-info.cpp @@ -299,6 +299,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat Version::GLES300, #ifndef MAGNUM_TARGET_WEBGL Version::GLES310, + Version::GLES320, #endif #endif Version::None diff --git a/src/Magnum/Shader.cpp b/src/Magnum/Shader.cpp index e18d4658c..d14bb868a 100644 --- a/src/Magnum/Shader.cpp +++ b/src/Magnum/Shader.cpp @@ -739,6 +739,7 @@ Shader::Shader(const Version version, const Type type): _type(type), _id(0) { case Version::GLES300: _sources.emplace_back("#version 300 es\n"); return; #ifndef MAGNUM_TARGET_WEBGL case Version::GLES310: _sources.emplace_back("#version 310 es\n"); return; + case Version::GLES320: _sources.emplace_back("#version 320 es\n"); return; #endif /* The user is responsible for (not) adding #version directive */ diff --git a/src/Magnum/Version.cpp b/src/Magnum/Version.cpp index 3b8938d30..138274293 100644 --- a/src/Magnum/Version.cpp +++ b/src/Magnum/Version.cpp @@ -55,6 +55,7 @@ Debug& operator<<(Debug& debug, Version value) { _c(GLES200, "OpenGL ES 2.0") _c(GLES300, "OpenGL ES 3.0") _c(GLES310, "OpenGL ES 3.1") + _c(GLES320, "OpenGL ES 3.2") #endif #undef _c /* LCOV_EXCL_STOP */ diff --git a/src/Magnum/Version.h b/src/Magnum/Version.h index d5a066bcf..3d2a704f8 100644 --- a/src/Magnum/Version.h +++ b/src/Magnum/Version.h @@ -103,7 +103,23 @@ enum class Version: Int { #ifndef MAGNUM_TARGET_GLES GLES310 = Implementation::VersionESMask|310, #else - GLES310 = 310 + GLES310 = 310, + #endif + #endif + + #ifndef MAGNUM_TARGET_WEBGL + /** + * OpenGL ES 3.2, GLSL ES 3.20. + * + * On desktop OpenGL, all related functionality is present in extension + * @extension{ARB,ES3_2_compatibility}, so testing for this version using + * @ref Context::isVersionSupported() is equivalent to testing for + * availability of that extension. + */ + #ifndef MAGNUM_TARGET_GLES + GLES320 = Implementation::VersionESMask|320, + #else + GLES320 = 320 #endif #endif };