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_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\"" \

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_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\"" \

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_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\"" \

64
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

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-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
*/

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,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>& Extension::extensions(Version version) {
static const std::vector<Extension> 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<Extension> 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>& 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>& 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>& 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>& 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<Extension> extensionsES300{
_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,surfaceless_context)};
#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
#undef _extension
@ -395,7 +404,8 @@ const std::vector<Extension>& 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>& 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<Extensions::GL::ARB::ES3_compatibility>();
if(version == Version::GLES310)
return isExtensionSupported<Extensions::GL::ARB::ES3_1_compatibility>();
if(version == Version::GLES320)
return isExtensionSupported<Extensions::GL::ARB::ES3_2_compatibility>();
#endif
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,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

1
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

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;
#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 */

1
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 */

18
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
};

Loading…
Cancel
Save