Browse Source

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.
pull/231/head
Vladimír Vondruš 9 years ago
parent
commit
671c99226f
  1. 1
      Doxyfile
  2. 1
      Doxyfile-mcss
  3. 1
      Doxyfile-public
  4. 64
      doc/opengl-support.dox
  5. 7
      doc/opengl.dox
  6. 84
      src/Magnum/Context.cpp
  7. 53
      src/Magnum/Extensions.h
  8. 1
      src/Magnum/Platform/magnum-info.cpp
  9. 1
      src/Magnum/Shader.cpp
  10. 1
      src/Magnum/Version.cpp
  11. 18
      src/Magnum/Version.h

1
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_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_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_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_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_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\"" \ "requires_webgl20=@xrefitem requires-webgl20 \"Requires WebGL 2.0\" \"Functionality requiring WebGL 2.0\"" \

1
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_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_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_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_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_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\"" \ "requires_webgl20=@xrefitem requires-webgl20 \"Requires WebGL 2.0\" \"Functionality requiring WebGL 2.0\"" \

1
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_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_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_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_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_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\"" \ "requires_webgl20=@xrefitem requires-webgl20 \"Requires WebGL 2.0\" \"Functionality requiring WebGL 2.0\"" \

64
doc/opengl-support.dox

@ -256,7 +256,6 @@ GLSL 4.50 | done
Extension | Status Extension | Status
------------------------------------------- | ------ ------------------------------------------- | ------
@extension{ARB,robustness} | done @extension{ARB,robustness} | done
@extension2{KHR,texture_compression_astc_ldr,texture_compression_astc_hdr} | done
@extension{KHR,texture_compression_astc_hdr} | done @extension{KHR,texture_compression_astc_hdr} | done
@extension{ARB,robustness_isolation} | done @extension{ARB,robustness_isolation} | done
@extension{ARB,bindless_texture} | | @extension{ARB,bindless_texture} | |
@ -269,6 +268,9 @@ Extension | Status
@extension{ARB,pipeline_statistics_query} | | @extension{ARB,pipeline_statistics_query} | |
@extension{ARB,sparse_buffer} | | @extension{ARB,sparse_buffer} | |
@extension{ARB,transform_feedback_overflow_query} | done @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 @extension{KHR,blend_equation_advanced} | done
@extension2{KHR,blend_equation_advanced_coherent,blend_equation_advanced} | done @extension2{KHR,blend_equation_advanced_coherent,blend_equation_advanced} | done
@extension{KHR,no_error} | 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 Features that have their equivalents implemented in desktop version are
supported. ESSL 3.10 is supported. 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 @subsection opengl-support-es30-extensions OpenGL ES 2.0 extensions to match ES 3.0 functionality
@m_class{m-fullwidth} @m_class{m-fullwidth}
@ -396,23 +429,8 @@ Extension | Status
@extension{EXT,sRGB_write_control} | done @extension{EXT,sRGB_write_control} | done
@extension2{EXT,texture_compression_s3tc,texture_compression_s3tc} | done @extension2{EXT,texture_compression_s3tc,texture_compression_s3tc} | done
@extension{EXT,shader_integer_mix} | done (shading language only) @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 @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 @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} | | @extension{KHR,context_flush_control} | |
@extension2{KHR,no_error,no_error} | done @extension2{KHR,no_error,no_error} | done
@extension2{NV,read_buffer_front,NV_read_buffer} | done @extension2{NV,read_buffer_front,NV_read_buffer} | done
@ -426,12 +444,6 @@ Extension | Status
@extension{OES,mapbuffer} | done @extension{OES,mapbuffer} | done
@extension{OES,stencil1} | done @extension{OES,stencil1} | done
@extension{OES,stencil4} | 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 @subsection opengl-support-webgl10 WebGL 1.0
@ -450,6 +462,7 @@ supported.
Extension | Status Extension | Status
------------------------------------------- | ------ ------------------------------------------- | ------
@webgl_extension{ANGLE,instanced_arrays} | done @webgl_extension{ANGLE,instanced_arrays} | done
@webgl_extension{EXT,color_buffer_half_float} | |
@webgl_extension{EXT,blend_minmax} | done @webgl_extension{EXT,blend_minmax} | done
@webgl_extension{EXT,shader_texture_lod} | done (shading language only) @webgl_extension{EXT,shader_texture_lod} | done (shading language only)
@webgl_extension{OES,texture_float} | done @webgl_extension{OES,texture_float} | done
@ -461,8 +474,14 @@ Extension | Status
@webgl_extension{OES,texture_half_float_linear} | done @webgl_extension{OES,texture_half_float_linear} | done
@webgl_extension{OES,fbo_render_mipmap} | done @webgl_extension{OES,fbo_render_mipmap} | done
@webgl_extension{WEBGL,depth_texture} | done @webgl_extension{WEBGL,depth_texture} | done
@webgl_extension{WEBGL,color_buffer_float} | |
@webgl_extension{WEBGL,draw_buffers} | done @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 @subsection opengl-support-webgl-extensions WebGL extensions to match desktop functionality
@m_class{m-fullwidth} @m_class{m-fullwidth}
@ -472,6 +491,7 @@ Extension | Status
@webgl_extension{EXT,texture_filter_anisotropic} | done @webgl_extension{EXT,texture_filter_anisotropic} | done
@webgl_extension{EXT,sRGB} | done @webgl_extension{EXT,sRGB} | done
@webgl_extension{EXT,disjoint_timer_query} | only time elapsed query @webgl_extension{EXT,disjoint_timer_query} | only time elapsed query
@webgl_extension{EXT,color_buffer_float} | |
@webgl_extension{WEBGL,compressed_texture_s3tc} | done @webgl_extension{WEBGL,compressed_texture_s3tc} | done
@section opengl-unsupported Unsupported OpenGL features @section opengl-unsupported Unsupported OpenGL features

7
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-gles20
- @subpage requires-gles30 - @subpage requires-gles30
- @subpage requires-gles31 - @subpage requires-gles31
- @subpage requires-gles32
- @subpage requires-es-extension - @subpage requires-es-extension
- @subpage requires-gles - @subpage requires-gles
- @subpage requires-webgl20 - @subpage requires-webgl20
@ -149,6 +150,12 @@ or desktop OpenGL.
The following symbols are not defined when targeting OpenGL ES 2.0. 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 /** @page requires-es-extension Functionality requiring specific OpenGL ES extension
* @m_footernavigation * @m_footernavigation
*/ */

84
src/Magnum/Context.cpp

@ -87,6 +87,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,ARB,pipeline_statistics_query), _extension(GL,ARB,pipeline_statistics_query),
_extension(GL,ARB,sparse_buffer), _extension(GL,ARB,sparse_buffer),
_extension(GL,ARB,transform_feedback_overflow_query), _extension(GL,ARB,transform_feedback_overflow_query),
_extension(GL,ARB,ES3_2_compatibility),
_extension(GL,ATI,texture_mirror_once), _extension(GL,ATI,texture_mirror_once),
_extension(GL,EXT,texture_filter_anisotropic), _extension(GL,EXT,texture_filter_anisotropic),
_extension(GL,EXT,texture_compression_s3tc), _extension(GL,EXT,texture_compression_s3tc),
@ -235,10 +236,12 @@ const std::vector<Extension>& Extension::extensions(Version version) {
static const std::vector<Extension> extensions{ static const std::vector<Extension> extensions{
_extension(GL,EXT,texture_filter_anisotropic), _extension(GL,EXT,texture_filter_anisotropic),
_extension(GL,EXT,disjoint_timer_query), _extension(GL,EXT,disjoint_timer_query),
_extension(GL,EXT,color_buffer_float),
_extension(GL,WEBGL,compressed_texture_s3tc)}; _extension(GL,WEBGL,compressed_texture_s3tc)};
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
static const std::vector<Extension> extensionsES300{ static const std::vector<Extension> extensionsES300{
_extension(GL,ANGLE,instanced_arrays), _extension(GL,ANGLE,instanced_arrays),
_extension(GL,EXT,color_buffer_half_float),
_extension(GL,EXT,sRGB), _extension(GL,EXT,sRGB),
_extension(GL,EXT,blend_minmax), _extension(GL,EXT,blend_minmax),
_extension(GL,EXT,shader_texture_lod), _extension(GL,EXT,shader_texture_lod),
@ -251,6 +254,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,OES,texture_half_float_linear), _extension(GL,OES,texture_half_float_linear),
_extension(GL,OES,fbo_render_mipmap), _extension(GL,OES,fbo_render_mipmap),
_extension(GL,WEBGL,depth_texture), _extension(GL,WEBGL,depth_texture),
_extension(GL,WEBGL,color_buffer_float),
_extension(GL,WEBGL,draw_buffers)}; _extension(GL,WEBGL,draw_buffers)};
#endif #endif
#else #else
@ -267,6 +271,9 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,EXT,multi_draw_arrays), _extension(GL,EXT,multi_draw_arrays),
_extension(GL,EXT,debug_label), _extension(GL,EXT,debug_label),
_extension(GL,EXT,debug_marker), _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,shader_framebuffer_fetch),
_extension(GL,EXT,disjoint_timer_query), _extension(GL,EXT,disjoint_timer_query),
_extension(GL,EXT,texture_sRGB_decode), _extension(GL,EXT,texture_sRGB_decode),
@ -274,31 +281,9 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,EXT,texture_compression_s3tc), _extension(GL,EXT,texture_compression_s3tc),
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shader_integer_mix), _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 #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,texture_compression_astc_hdr),
_extension(GL,KHR,debug),
_extension(GL,KHR,blend_equation_advanced),
_extension(GL,KHR,blend_equation_advanced_coherent), _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,context_flush_control),
_extension(GL,KHR,no_error), _extension(GL,KHR,no_error),
_extension(GL,NV,read_buffer_front), _extension(GL,NV,read_buffer_front),
@ -313,18 +298,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,OES,depth32), _extension(GL,OES,depth32),
_extension(GL,OES,mapbuffer), _extension(GL,OES,mapbuffer),
_extension(GL,OES,stencil1), _extension(GL,OES,stencil1),
_extension(GL,OES,stencil4), _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
};
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
static const std::vector<Extension> extensionsES300{ static const std::vector<Extension> extensionsES300{
_extension(GL,ANGLE,framebuffer_blit), _extension(GL,ANGLE,framebuffer_blit),
@ -376,6 +350,41 @@ const std::vector<Extension>& Extension::extensions(Version version) {
_extension(GL,OES,required_internalformat), _extension(GL,OES,required_internalformat),
_extension(GL,OES,surfaceless_context)}; _extension(GL,OES,surfaceless_context)};
#endif #endif
static const std::vector<Extension> 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 #endif
#undef _extension #undef _extension
@ -395,7 +404,8 @@ const std::vector<Extension>& Extension::extensions(Version version) {
case Version::GL450: return extensions450; case Version::GL450: return extensions450;
case Version::GLES200: case Version::GLES200:
case Version::GLES300: case Version::GLES300:
case Version::GLES310: return empty; case Version::GLES310:
case Version::GLES320: return empty;
#else #else
case Version::GLES200: return empty; case Version::GLES200: return empty;
case Version::GLES300: case Version::GLES300:
@ -406,6 +416,7 @@ const std::vector<Extension>& Extension::extensions(Version version) {
#endif #endif
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
case Version::GLES310: return empty; case Version::GLES310: return empty;
case Version::GLES320: return extensionsES320;
#endif #endif
#endif #endif
} }
@ -612,6 +623,7 @@ bool Context::tryCreate() {
Version::GLES300, Version::GLES300,
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
Version::GLES310, Version::GLES310,
Version::GLES320,
#endif #endif
#endif #endif
Version::None Version::None
@ -813,6 +825,8 @@ bool Context::isVersionSupported(Version version) const {
return isExtensionSupported<Extensions::GL::ARB::ES3_compatibility>(); return isExtensionSupported<Extensions::GL::ARB::ES3_compatibility>();
if(version == Version::GLES310) if(version == Version::GLES310)
return isExtensionSupported<Extensions::GL::ARB::ES3_1_compatibility>(); return isExtensionSupported<Extensions::GL::ARB::ES3_1_compatibility>();
if(version == Version::GLES320)
return isExtensionSupported<Extensions::GL::ARB::ES3_2_compatibility>();
#endif #endif
return _version >= version; return _version >= version;

53
src/Magnum/Extensions.h

@ -210,6 +210,7 @@ namespace GL {
_extension(GL,ARB,pipeline_statistics_query, GL300, None) // #171 _extension(GL,ARB,pipeline_statistics_query, GL300, None) // #171
_extension(GL,ARB,sparse_buffer, GL210, None) // #172 _extension(GL,ARB,sparse_buffer, GL210, None) // #172
_extension(GL,ARB,transform_feedback_overflow_query, GL300, None) // #173 _extension(GL,ARB,transform_feedback_overflow_query, GL300, None) // #173
_extension(GL,ARB,ES3_2_compatibility, GL450, None) // #177
} namespace ATI { } namespace ATI {
_extension(GL,ATI,texture_mirror_once, GL210, None) // #221 _extension(GL,ATI,texture_mirror_once, GL210, None) // #221
} namespace EXT { } namespace EXT {
@ -239,6 +240,7 @@ namespace GL {
_extension(GL,KHR,texture_compression_astc_hdr, GL210, None) // #118 _extension(GL,KHR,texture_compression_astc_hdr, GL210, None) // #118
_extension(GL,KHR,debug, GL210, GL430) // #119 _extension(GL,KHR,debug, GL210, GL430) // #119
_extension(GL,KHR,context_flush_control, GL210, GL450) // #168 _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,robustness, GL320, GL450) // #170
_extension(GL,KHR,blend_equation_advanced, GL210, None) // #174 _extension(GL,KHR,blend_equation_advanced, GL210, None) // #174
_extension(GL,KHR,blend_equation_advanced_coherent, GL210, None) // #174 _extension(GL,KHR,blend_equation_advanced_coherent, GL210, None) // #174
@ -259,6 +261,9 @@ namespace GL {
} namespace EXT { } namespace EXT {
_extension(GL,EXT,texture_filter_anisotropic, GLES200, None) // #11 _extension(GL,EXT,texture_filter_anisotropic, GLES200, None) // #11
#ifdef MAGNUM_TARGET_GLES2 #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,sRGB, GLES200, GLES300) // #17
_extension(GL,EXT,blend_minmax, GLES200, GLES300) // #25 _extension(GL,EXT,blend_minmax, GLES200, GLES300) // #25
#endif #endif
@ -266,6 +271,7 @@ namespace GL {
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #27 _extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #27
#endif #endif
_extension(GL,EXT,color_buffer_float, GLES300, None) // #31
} namespace OES { } namespace OES {
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,texture_float, GLES200, GLES300) // #1 _extension(GL,OES,texture_float, GLES200, GLES300) // #1
@ -281,6 +287,7 @@ namespace GL {
_extension(GL,WEBGL,compressed_texture_s3tc, GLES200, None) // #8 _extension(GL,WEBGL,compressed_texture_s3tc, GLES200, None) // #8
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(GL,WEBGL,depth_texture, GLES200, GLES300) // #9 _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 _extension(GL,WEBGL,draw_buffers, GLES200, GLES300) // #18
#endif #endif
} }
@ -327,6 +334,7 @@ namespace GL {
_extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #77 _extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #77
_extension(GL,EXT,unpack_subimage, GLES200, GLES300) // #90 _extension(GL,EXT,unpack_subimage, GLES200, GLES300) // #90
#endif #endif
_extension(GL,EXT,color_buffer_half_float, GLES200, GLES320) // #97
_extension(GL,EXT,debug_label, GLES200, None) // #98 _extension(GL,EXT,debug_label, GLES200, None) // #98
_extension(GL,EXT,debug_marker, GLES200, None) // #99 _extension(GL,EXT,debug_marker, GLES200, None) // #99
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
@ -345,6 +353,9 @@ namespace GL {
_extension(GL,EXT,map_buffer_range, GLES200, GLES300) // #121 _extension(GL,EXT,map_buffer_range, GLES200, GLES300) // #121
#endif #endif
_extension(GL,EXT,shader_framebuffer_fetch, GLES200, None) // #122 _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 _extension(GL,EXT,disjoint_timer_query, GLES200, None) // #150
#ifdef MAGNUM_TARGET_GLES2 #ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,draw_buffers, GLES200, GLES300) // #151 _extension(GL,EXT,draw_buffers, GLES200, GLES300) // #151
@ -358,29 +369,29 @@ namespace GL {
#endif #endif
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shader_integer_mix, GLES300, None) // #161 _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 #endif
_extension(GL,EXT,draw_buffers_indexed, GLES200, None) // #176 _extension(GL,EXT,draw_buffers_indexed, GLES200, GLES320) // #176
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,geometry_shader, GLES310, None) // #177 _extension(GL,EXT,geometry_shader, GLES310, GLES320) // #177
_extension(GL,EXT,gpu_shader5, GLES310, None) // #178 _extension(GL,EXT,gpu_shader5, GLES310, GLES320) // #178
_extension(GL,EXT,shader_io_blocks, GLES310, None) // #180 _extension(GL,EXT,shader_io_blocks, GLES310, GLES320) // #180
_extension(GL,EXT,tessellation_shader, GLES310, None) // #181 _extension(GL,EXT,tessellation_shader, GLES310, GLES320) // #181
#endif #endif
_extension(GL,EXT,texture_border_clamp, GLES200, None) // #182 _extension(GL,EXT,texture_border_clamp, GLES200, GLES320) // #182
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,texture_buffer, GLES310, None) // #183 _extension(GL,EXT,texture_buffer, GLES310, GLES320) // #183
_extension(GL,EXT,texture_cube_map_array, GLES310, None) // #184 _extension(GL,EXT,texture_cube_map_array, GLES310, GLES320) // #184
_extension(GL,EXT,primitive_bounding_box, GLES310, None) // #186 _extension(GL,EXT,primitive_bounding_box, GLES310, GLES320) // #186
#endif #endif
} namespace KHR { } 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,texture_compression_astc_hdr, GLES200, None) // #117
_extension(GL,KHR,debug, GLES200, None) // #118 _extension(GL,KHR,debug, GLES200, GLES320) // #118
_extension(GL,KHR,blend_equation_advanced, GLES200, None) // #168 _extension(GL,KHR,blend_equation_advanced, GLES200, GLES320) // #168
_extension(GL,KHR,blend_equation_advanced_coherent, GLES200, None) // #168 _extension(GL,KHR,blend_equation_advanced_coherent, GLES200, None) // #168
_extension(GL,KHR,robustness, GLES200, None) // #170 _extension(GL,KHR,robustness, GLES200, GLES320) // #170
_extension(GL,KHR,robust_buffer_access_behavior, GLES200, None) // #189 _extension(GL,KHR,robust_buffer_access_behavior, GLES200, GLES320) // #189
_extension(GL,KHR,context_flush_control, GLES200, None) // #191 _extension(GL,KHR,context_flush_control, GLES200, None) // #191
_extension(GL,KHR,no_error, GLES200, None) // #243 _extension(GL,KHR,no_error, GLES200, None) // #243
} namespace NV { } namespace NV {
@ -438,14 +449,14 @@ namespace GL {
_extension(GL,OES,surfaceless_context, GLES200, GLES300) // #116 _extension(GL,OES,surfaceless_context, GLES200, GLES300) // #116
#endif #endif
#ifndef MAGNUM_TARGET_GLES2 #ifndef MAGNUM_TARGET_GLES2
_extension(GL,OES,sample_shading, GLES300, None) // #169 _extension(GL,OES,sample_shading, GLES300, GLES320) // #169
_extension(GL,OES,sample_variables, GLES300, None) // #170 _extension(GL,OES,sample_variables, GLES300, GLES320) // #170
_extension(GL,OES,shader_image_atomic, GLES310, None) // #171 _extension(GL,OES,shader_image_atomic, GLES310, GLES320) // #171
_extension(GL,OES,shader_multisample_interpolation, GLES300, None) // #172 _extension(GL,OES,shader_multisample_interpolation, GLES300, GLES320) // #172
#endif #endif
_extension(GL,OES,texture_stencil8, GLES200, None) // #173 _extension(GL,OES,texture_stencil8, GLES200, GLES320) // #173
#ifndef MAGNUM_TARGET_GLES2 #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
} }
#endif #endif

1
src/Magnum/Platform/magnum-info.cpp

@ -299,6 +299,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat
Version::GLES300, Version::GLES300,
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
Version::GLES310, Version::GLES310,
Version::GLES320,
#endif #endif
#endif #endif
Version::None Version::None

1
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; case Version::GLES300: _sources.emplace_back("#version 300 es\n"); return;
#ifndef MAGNUM_TARGET_WEBGL #ifndef MAGNUM_TARGET_WEBGL
case Version::GLES310: _sources.emplace_back("#version 310 es\n"); return; case Version::GLES310: _sources.emplace_back("#version 310 es\n"); return;
case Version::GLES320: _sources.emplace_back("#version 320 es\n"); return;
#endif #endif
/* The user is responsible for (not) adding #version directive */ /* The user is responsible for (not) adding #version directive */

1
src/Magnum/Version.cpp

@ -55,6 +55,7 @@ Debug& operator<<(Debug& debug, Version value) {
_c(GLES200, "OpenGL ES 2.0") _c(GLES200, "OpenGL ES 2.0")
_c(GLES300, "OpenGL ES 3.0") _c(GLES300, "OpenGL ES 3.0")
_c(GLES310, "OpenGL ES 3.1") _c(GLES310, "OpenGL ES 3.1")
_c(GLES320, "OpenGL ES 3.2")
#endif #endif
#undef _c #undef _c
/* LCOV_EXCL_STOP */ /* LCOV_EXCL_STOP */

18
src/Magnum/Version.h

@ -103,7 +103,23 @@ enum class Version: Int {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
GLES310 = Implementation::VersionESMask|310, GLES310 = Implementation::VersionESMask|310,
#else #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
#endif #endif
}; };

Loading…
Cancel
Save