Browse Source

GL: recognize all remaining WebGL extensions.

pull/461/head
Vladimír Vondruš 6 years ago
parent
commit
8d4dda12cd
  1. 11
      doc/changelog.dox
  2. 13
      doc/opengl-support.dox
  3. 15
      src/Magnum/GL/Context.cpp
  4. 68
      src/Magnum/GL/Extensions.h

11
doc/changelog.dox

@ -49,6 +49,17 @@ See also:
- Implemented @webgl_extension{WEBGL,blend_equation_advanced_coherent}
extension, making advanced @ref GL::Renderer::BlendEquation values
available on all platforms
- Implemented @webgl_extension{EXT,frag_depth} WebGL 1.0 extension (shading
language only)
- Recognizing @webgl_extension{EXT,float_blend},
@webgl_extension{WEBGL,debug_renderer_info} and
@webgl_extension{WEBGL,debug_shaders} extensions, no implementation done
yet
- Recognizing @webgl_extension{WEBGL,multi_draw},
@webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} and
@webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance}
extensions, however there's no Emscripten entrypoints for those yet which
means these can'be implemented right now.
@subsubsection changelog-latest-new-math Math library

13
doc/opengl-support.dox

@ -521,6 +521,8 @@ Extension | Status
------------------------------------------- | ------
@webgl_extension{ANGLE,instanced_arrays} | done
@webgl_extension{EXT,color_buffer_half_float} | |
@webgl_extension{EXT,frag_depth} | done (shading language only)
@webgl_extension{EXT,sRGB} | done
@webgl_extension{EXT,blend_minmax} | done
@webgl_extension{EXT,shader_texture_lod} | done (shading language only)
`MAGNUM_shader_vertex_id` \n @m_span{m-text m-dim} Pseudo-extension denoting support for the @glsl gl_VertexID @ce \n GLSL builtin. Exposed on WebGL 2 builds only. @m_endspan | done
@ -540,16 +542,17 @@ Extension | Status
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
@m_class{m-fullwidth}
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,disjoint_timer_query_webgl2} | [missing support in Emscripten](https://github.com/emscripten-core/emscripten/pull/9652)
@webgl_extension{EXT,color_buffer_float} | |
@webgl_extension{EXT,float_blend} | |
@webgl_extension{EXT,texture_compression_rgtc} | done
@webgl_extension{EXT,texture_compression_bptc} | done
@webgl_extension{EXT,clip_cull_distance} | done
@ -557,11 +560,17 @@ Extension | Status
@webgl_extension{EXT,draw_buffers_indexed} | done
@webgl_extension{OES,texture_float_linear} | done
@webgl_extension{OVR,multiview2} | |
@webgl_extension{WEBGL,lose_context} | |
@webgl_extension{WEBGL,debug_renderer_info} | |
@webgl_extension{WEBGL,debug_shaders} | |
@webgl_extension{WEBGL,compressed_texture_s3tc} | done
@webgl_extension{WEBGL,compressed_texture_pvrtc} | done
@webgl_extension{WEBGL,compressed_texture_astc} | done
@webgl_extension{WEBGL,compressed_texture_s3tc_srgb} | done
@webgl_extension{WEBGL,multi_draw} | missing support in Emscripten
@webgl_extension{WEBGL,blend_equation_advanced_coherent} | done
@webgl_extension{WEBGL,draw_instanced_base_vertex_base_instance} | missing support in Emscripten
@webgl_extension{WEBGL,multi_draw_instanced_base_vertex_base_instance} | missing support in Emscripten
@section opengl-unsupported Unsupported OpenGL features

15
src/Magnum/GL/Context.cpp

@ -272,6 +272,7 @@ constexpr Extension ExtensionList[]{
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,draw_buffers_indexed),
#endif
_extension(EXT,float_blend),
_extension(EXT,texture_compression_bptc),
_extension(EXT,texture_compression_rgtc),
_extension(EXT,texture_filter_anisotropic),
@ -284,12 +285,24 @@ constexpr Extension ExtensionList[]{
_extension(WEBGL,compressed_texture_astc),
_extension(WEBGL,compressed_texture_pvrtc),
_extension(WEBGL,compressed_texture_s3tc),
_extension(WEBGL,compressed_texture_s3tc_srgb)};
_extension(WEBGL,compressed_texture_s3tc_srgb),
_extension(WEBGL,debug_renderer_info),
_extension(WEBGL,debug_shaders),
#ifndef MAGNUM_TARGET_GLES2
_extension(WEBGL,draw_instanced_base_vertex_base_instance),
#endif
_extension(WEBGL,lose_context),
_extension(WEBGL,multi_draw),
#ifndef MAGNUM_TARGET_GLES2
_extension(WEBGL,multi_draw_instanced_base_vertex_base_instance)
#endif
};
constexpr Extension ExtensionListES300[]{
#ifdef MAGNUM_TARGET_GLES2
_extension(ANGLE,instanced_arrays),
_extension(EXT,blend_minmax),
_extension(EXT,color_buffer_half_float),
_extension(EXT,frag_depth),
_extension(EXT,sRGB),
_extension(EXT,shader_texture_lod),
#endif

68
src/Magnum/GL/Extensions.h

@ -279,66 +279,76 @@ namespace ANGLE {
_extension( 3,EXT,color_buffer_half_float, GLES200, None) // #14
#endif
#ifdef MAGNUM_TARGET_GLES2
_extension( 4,EXT,sRGB, GLES200, GLES300) // #17
_extension( 5,EXT,blend_minmax, GLES200, GLES300) // #25
_extension( 4,EXT,frag_depth, GLES200, GLES300) // #16
_extension( 5,EXT,sRGB, GLES200, GLES300) // #17
_extension( 6,EXT,blend_minmax, GLES200, GLES300) // #25
#endif
#ifdef MAGNUM_TARGET_GLES2
/* Replaced by EXT_disjoint_timer_query_webgl2 in WebGL 2 */
_extension( 6,EXT,disjoint_timer_query, GLES200, None) // #26
_extension( 7,EXT,disjoint_timer_query, GLES200, None) // #26
#endif
#ifdef MAGNUM_TARGET_GLES2
_extension( 7,EXT,shader_texture_lod, GLES200, GLES300) // #27
_extension( 8,EXT,shader_texture_lod, GLES200, GLES300) // #27
#endif
#ifndef MAGNUM_TARGET_GLES2
/* Replaces WEBGL_color_buffer_float from WebGL 1 */
_extension( 8,EXT,color_buffer_float, GLES300, None) // #31
_extension( 9,EXT,color_buffer_float, GLES300, None) // #31
/* Replaces WEBGL_disjoint_timer_query from WebGL 1 */
_extension( 9,EXT,disjoint_timer_query_webgl2, GLES300, None) // #33
_extension(10,EXT,disjoint_timer_query_webgl2, GLES300, None) // #33
#endif
_extension(10,EXT,texture_compression_rgtc, GLES200, None) // #38
_extension(11,EXT,texture_compression_bptc, GLES200, None) // #39
_extension(11,EXT,float_blend, GLES200, None) // #35
_extension(12,EXT,texture_compression_rgtc, GLES200, None) // #38
_extension(13,EXT,texture_compression_bptc, GLES200, None) // #39
#ifndef MAGNUM_TARGET_GLES2
_extension(12,EXT,clip_cull_distance, GLES300, None) // #43
_extension(14,EXT,clip_cull_distance, GLES300, None) // #43
#endif
_extension(13,EXT,texture_norm16, GLES200, None) // #44
_extension(15,EXT,texture_norm16, GLES200, None) // #44
#ifndef MAGNUM_TARGET_GLES2
_extension(14,EXT,draw_buffers_indexed, GLES300, None) // #45
_extension(16,EXT,draw_buffers_indexed, GLES300, None) // #45
#endif
} namespace OES {
#ifdef MAGNUM_TARGET_GLES2
_extension(15,OES,texture_float, GLES200, GLES300) // #1
_extension(16,OES,texture_half_float, GLES200, GLES300) // #2
_extension(17,OES,standard_derivatives, GLES200, GLES300) // #4
_extension(18,OES,vertex_array_object, GLES200, GLES300) // #5
_extension(19,OES,element_index_uint, GLES200, GLES300) // #10
_extension(20,OES,texture_float, GLES200, GLES300) // #1
_extension(21,OES,texture_half_float, GLES200, GLES300) // #2
_extension(22,OES,standard_derivatives, GLES200, GLES300) // #4
_extension(23,OES,vertex_array_object, GLES200, GLES300) // #5
_extension(24,OES,element_index_uint, GLES200, GLES300) // #10
#endif
_extension(20,OES,texture_float_linear, GLES200, None) // #20
_extension(25,OES,texture_float_linear, GLES200, None) // #20
#ifdef MAGNUM_TARGET_GLES2
_extension(21,OES,texture_half_float_linear, GLES200, GLES300) // #21
_extension(22,OES,fbo_render_mipmap, GLES200, GLES300) // #28
_extension(26,OES,texture_half_float_linear, GLES200, GLES300) // #21
_extension(27,OES,fbo_render_mipmap, GLES200, GLES300) // #28
#endif
} namespace OVR {
#ifndef MAGNUM_TARGET_GLES2
_extension(23,OVR,multiview2, GLES300, None) // #36
_extension(30,OVR,multiview2, GLES300, None) // #36
#endif
} namespace WEBGL {
_extension(25,WEBGL,compressed_texture_s3tc, GLES200, None) // #8
_extension(31,WEBGL,lose_context, GLES200, None) // #3
_extension(32,WEBGL,debug_renderer_info, GLES200, None) // #6
_extension(33,WEBGL,debug_shaders, GLES200, None) // #7
_extension(34,WEBGL,compressed_texture_s3tc, GLES200, None) // #8
#ifdef MAGNUM_TARGET_GLES2
_extension(26,WEBGL,depth_texture, GLES200, GLES300) // #9
_extension(35,WEBGL,depth_texture, GLES200, GLES300) // #9
#endif
_extension(27,WEBGL,compressed_texture_pvrtc, GLES200, None) // #13
_extension(36,WEBGL,compressed_texture_pvrtc, GLES200, None) // #13
#ifdef MAGNUM_TARGET_GLES2
/* Subsumed by the EXT_color_buffer_float extension in WebGL 2, so
not exposing it on WebGL 2 builds even though it's not in core */
_extension(28,WEBGL,color_buffer_float, GLES200, None) // #14
_extension(29,WEBGL,draw_buffers, GLES200, GLES300) // #18
_extension(37,WEBGL,color_buffer_float, GLES200, None) // #14
_extension(38,WEBGL,draw_buffers, GLES200, GLES300) // #18
#endif
_extension(39,WEBGL,compressed_texture_astc, GLES200, None) // #30
_extension(40,WEBGL,compressed_texture_s3tc_srgb, GLES200, None) // #32
_extension(41,WEBGL,multi_draw, GLES200, None) // #40
_extension(42,WEBGL,blend_equation_advanced_coherent,GLES200,None) // #42
#ifndef MAGNUM_TARGET_GLES2
_extension(43,WEBGL,draw_instanced_base_vertex_base_instance,GLES300,None) // #46
_extension(44,WEBGL,multi_draw_instanced_base_vertex_base_instance,GLES300,None) // #47
#endif
_extension(30,WEBGL,compressed_texture_astc, GLES200, None) // #30
_extension(31,WEBGL,compressed_texture_s3tc_srgb, GLES200, None) // #32
_extension(32,WEBGL,blend_equation_advanced_coherent,GLES200,None) // #42
} namespace MAGNUM {
#ifndef MAGNUM_TARGET_GLES2
_extension(40,MAGNUM,shader_vertex_id, GLES300, GLES300)
_extension(45,MAGNUM,shader_vertex_id, GLES300, GLES300)
#endif
}
#else

Loading…
Cancel
Save