diff --git a/doc/changelog.dox b/doc/changelog.dox index 7920049aa..bb2c60129 100644 --- a/doc/changelog.dox +++ b/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 diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index c84e5e6a8..5ef3d6fa5 100644 --- a/doc/opengl-support.dox +++ b/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 diff --git a/src/Magnum/GL/Context.cpp b/src/Magnum/GL/Context.cpp index 1da7bd97f..8ec3952ac 100644 --- a/src/Magnum/GL/Context.cpp +++ b/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 diff --git a/src/Magnum/GL/Extensions.h b/src/Magnum/GL/Extensions.h index f5ca8ee56..b67ad8787 100644 --- a/src/Magnum/GL/Extensions.h +++ b/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