@ -67,370 +67,374 @@
namespace Magnum { namespace GL {
const std : : vector < Extension > & Extension : : extensions ( Version version ) {
# define _extension(vendor, extension) \
{ Extensions : : vendor : : extension : : Index , Extensions : : vendor : : extension : : requiredVersion ( ) , Extensions : : vendor : : extension : : coreVersion ( ) , Extensions : : vendor : : extension : : string ( ) }
static const std : : vector < Extension > empty ;
# ifndef MAGNUM_TARGET_GLES
static const std : : vector < Extension > extensions {
_extension ( AMD , transform_feedback3_lines_triangles ) ,
_extension ( AMD , vertex_shader_layer ) ,
_extension ( AMD , shader_trinary_minmax ) ,
_extension ( ARB , robustness ) ,
_extension ( ARB , robustness_isolation ) ,
_extension ( ARB , robustness_application_isolation ) ,
_extension ( ARB , robustness_share_group_isolation ) ,
_extension ( ARB , bindless_texture ) ,
_extension ( ARB , compute_variable_group_size ) ,
_extension ( ARB , seamless_cubemap_per_texture ) ,
_extension ( ARB , sparse_texture ) ,
_extension ( ARB , sparse_buffer ) ,
_extension ( ARB , ES3_2_compatibility ) ,
_extension ( ATI , texture_mirror_once ) ,
_extension ( EXT , texture_filter_anisotropic ) ,
_extension ( EXT , texture_compression_s3tc ) ,
_extension ( EXT , texture_mirror_clamp ) ,
_extension ( EXT , texture_sRGB_decode ) ,
_extension ( EXT , shader_integer_mix ) ,
_extension ( EXT , debug_label ) ,
_extension ( EXT , debug_marker ) ,
_extension ( GREMEDY , string_marker ) ,
_extension ( KHR , texture_compression_astc_ldr ) ,
_extension ( KHR , texture_compression_astc_hdr ) ,
_extension ( KHR , blend_equation_advanced ) ,
_extension ( KHR , blend_equation_advanced_coherent ) } ;
static const std : : vector < Extension > extensions300 {
_extension ( ARB , map_buffer_range ) ,
_extension ( ARB , color_buffer_float ) ,
_extension ( ARB , half_float_pixel ) ,
_extension ( ARB , texture_float ) ,
_extension ( ARB , depth_buffer_float ) ,
_extension ( ARB , texture_rg ) ,
_extension ( ARB , vertex_array_object ) ,
_extension ( ARB , framebuffer_object ) ,
_extension ( ARB , framebuffer_sRGB ) ,
_extension ( ARB , half_float_vertex ) ,
_extension ( EXT , gpu_shader4 ) ,
_extension ( EXT , packed_float ) ,
_extension ( EXT , texture_array ) ,
_extension ( EXT , texture_compression_rgtc ) ,
_extension ( EXT , texture_shared_exponent ) ,
_extension ( EXT , draw_buffers2 ) ,
_extension ( EXT , texture_integer ) ,
_extension ( EXT , transform_feedback ) ,
_extension ( MAGNUM , shader_vertex_id ) ,
_extension ( NV , depth_buffer_float ) ,
_extension ( NV , conditional_render ) } ;
static const std : : vector < Extension > extensions310 {
_extension ( ARB , texture_rectangle ) ,
_extension ( ARB , draw_instanced ) ,
_extension ( ARB , texture_buffer_object ) ,
_extension ( ARB , uniform_buffer_object ) ,
_extension ( ARB , copy_buffer ) ,
_extension ( EXT , texture_snorm ) ,
_extension ( NV , primitive_restart ) } ;
static const std : : vector < Extension > extensions320 {
_extension ( ARB , geometry_shader4 ) ,
_extension ( ARB , depth_clamp ) ,
_extension ( ARB , draw_elements_base_vertex ) ,
_extension ( ARB , fragment_coord_conventions ) ,
_extension ( ARB , provoking_vertex ) ,
_extension ( ARB , seamless_cube_map ) ,
_extension ( ARB , sync ) ,
_extension ( ARB , texture_multisample ) ,
_extension ( ARB , vertex_array_bgra ) } ;
static const std : : vector < Extension > extensions330 {
_extension ( ARB , instanced_arrays ) ,
_extension ( ARB , blend_func_extended ) ,
_extension ( ARB , explicit_attrib_location ) ,
_extension ( ARB , occlusion_query2 ) ,
_extension ( ARB , sampler_objects ) ,
_extension ( ARB , shader_bit_encoding ) ,
_extension ( ARB , texture_rgb10_a2ui ) ,
_extension ( ARB , texture_swizzle ) ,
_extension ( ARB , timer_query ) ,
_extension ( ARB , vertex_type_2_10_10_10_rev ) } ;
static const std : : vector < Extension > extensions400 {
_extension ( ARB , draw_buffers_blend ) ,
_extension ( ARB , sample_shading ) ,
_extension ( ARB , texture_cube_map_array ) ,
_extension ( ARB , texture_gather ) ,
_extension ( ARB , texture_query_lod ) ,
_extension ( ARB , draw_indirect ) ,
_extension ( ARB , gpu_shader5 ) ,
_extension ( ARB , gpu_shader_fp64 ) ,
_extension ( ARB , shader_subroutine ) ,
_extension ( ARB , tessellation_shader ) ,
_extension ( ARB , texture_buffer_object_rgb32 ) ,
_extension ( ARB , transform_feedback2 ) ,
_extension ( ARB , transform_feedback3 ) } ;
static const std : : vector < Extension > extensions410 {
_extension ( ARB , ES2_compatibility ) ,
_extension ( ARB , get_program_binary ) ,
_extension ( ARB , separate_shader_objects ) ,
_extension ( ARB , shader_precision ) ,
_extension ( ARB , vertex_attrib_64bit ) ,
_extension ( ARB , viewport_array ) } ;
static const std : : vector < Extension > extensions420 {
_extension ( ARB , texture_compression_bptc ) ,
_extension ( ARB , base_instance ) ,
_extension ( ARB , shading_language_420pack ) ,
_extension ( ARB , transform_feedback_instanced ) ,
_extension ( ARB , compressed_texture_pixel_storage ) ,
_extension ( ARB , conservative_depth ) ,
_extension ( ARB , internalformat_query ) ,
_extension ( ARB , map_buffer_alignment ) ,
_extension ( ARB , shader_atomic_counters ) ,
_extension ( ARB , shader_image_load_store ) ,
/* Mentioned in GLSL 4.20 specs as newly added */
_extension ( ARB , shading_language_packing ) ,
_extension ( ARB , texture_storage ) } ;
static const std : : vector < Extension > extensions430 {
_extension ( ARB , arrays_of_arrays ) ,
_extension ( ARB , ES3_compatibility ) ,
_extension ( ARB , clear_buffer_object ) ,
_extension ( ARB , compute_shader ) ,
_extension ( ARB , copy_image ) ,
_extension ( ARB , explicit_uniform_location ) ,
_extension ( ARB , fragment_layer_viewport ) ,
_extension ( ARB , framebuffer_no_attachments ) ,
_extension ( ARB , internalformat_query2 ) ,
_extension ( ARB , invalidate_subdata ) ,
_extension ( ARB , multi_draw_indirect ) ,
_extension ( ARB , program_interface_query ) ,
_extension ( ARB , robust_buffer_access_behavior ) ,
_extension ( ARB , shader_image_size ) ,
_extension ( ARB , shader_storage_buffer_object ) ,
_extension ( ARB , stencil_texturing ) ,
_extension ( ARB , texture_buffer_range ) ,
_extension ( ARB , texture_query_levels ) ,
_extension ( ARB , texture_storage_multisample ) ,
_extension ( ARB , texture_view ) ,
_extension ( ARB , vertex_attrib_binding ) ,
_extension ( KHR , debug ) } ;
static const std : : vector < Extension > extensions440 {
_extension ( ARB , buffer_storage ) ,
_extension ( ARB , clear_texture ) ,
_extension ( ARB , enhanced_layouts ) ,
_extension ( ARB , multi_bind ) ,
_extension ( ARB , query_buffer_object ) ,
_extension ( ARB , texture_mirror_clamp_to_edge ) ,
_extension ( ARB , texture_stencil8 ) ,
_extension ( ARB , vertex_type_10f_11f_11f_rev ) } ;
static const std : : vector < Extension > extensions450 {
_extension ( ARB , ES3_1_compatibility ) ,
_extension ( ARB , clip_control ) ,
_extension ( ARB , conditional_render_inverted ) ,
_extension ( ARB , cull_distance ) ,
_extension ( ARB , derivative_control ) ,
_extension ( ARB , direct_state_access ) ,
_extension ( ARB , get_texture_sub_image ) ,
_extension ( ARB , shader_texture_image_samples ) ,
_extension ( ARB , texture_barrier ) ,
_extension ( KHR , context_flush_control ) ,
_extension ( KHR , robustness ) } ;
static const std : : vector < Extension > extensions460 {
_extension ( ARB , indirect_parameters ) ,
_extension ( ARB , shader_draw_parameters ) ,
_extension ( ARB , shader_group_vote ) ,
_extension ( ARB , pipeline_statistics_query ) ,
_extension ( ARB , transform_feedback_overflow_query ) ,
_extension ( ARB , shader_atomic_counter_ops ) ,
_extension ( ARB , gl_spirv ) ,
_extension ( ARB , polygon_offset_clamp ) ,
_extension ( ARB , spirv_extensions ) ,
_extension ( ARB , texture_filter_anisotropic ) ,
_extension ( KHR , no_error ) } ;
# elif defined(MAGNUM_TARGET_WEBGL)
static const std : : vector < Extension > extensions {
_extension ( EXT , texture_filter_anisotropic ) ,
_extension ( EXT , disjoint_timer_query ) ,
_extension ( EXT , color_buffer_float ) ,
_extension ( OES , texture_float_linear ) ,
_extension ( WEBGL , compressed_texture_s3tc ) } ;
static const std : : vector < Extension > extensionsES300 {
# ifdef MAGNUM_TARGET_GLES2
_extension ( ANGLE , instanced_arrays ) ,
_extension ( EXT , color_buffer_half_float ) ,
_extension ( EXT , sRGB ) ,
_extension ( EXT , blend_minmax ) ,
_extension ( EXT , shader_texture_lod ) ,
# endif
_extension ( MAGNUM , shader_vertex_id ) ,
# ifdef MAGNUM_TARGET_GLES2
_extension ( OES , texture_float ) ,
_extension ( OES , texture_half_float ) ,
_extension ( OES , standard_derivatives ) ,
_extension ( OES , vertex_array_object ) ,
_extension ( OES , element_index_uint ) ,
_extension ( OES , texture_half_float_linear ) ,
_extension ( OES , fbo_render_mipmap ) ,
_extension ( WEBGL , depth_texture ) ,
_extension ( WEBGL , color_buffer_float ) ,
_extension ( WEBGL , draw_buffers )
# endif
namespace {
# define _extension(vendor, extension) \
{ Extensions : : vendor : : extension : : Index , Extensions : : vendor : : extension : : requiredVersion ( ) , Extensions : : vendor : : extension : : coreVersion ( ) , Extensions : : vendor : : extension : : string ( ) }
# ifndef MAGNUM_TARGET_GLES
constexpr Extension ExtensionList [ ] {
_extension ( AMD , transform_feedback3_lines_triangles ) ,
_extension ( AMD , vertex_shader_layer ) ,
_extension ( AMD , shader_trinary_minmax ) ,
_extension ( ARB , robustness ) ,
_extension ( ARB , robustness_isolation ) ,
_extension ( ARB , robustness_application_isolation ) ,
_extension ( ARB , robustness_share_group_isolation ) ,
_extension ( ARB , bindless_texture ) ,
_extension ( ARB , compute_variable_group_size ) ,
_extension ( ARB , seamless_cubemap_per_texture ) ,
_extension ( ARB , sparse_texture ) ,
_extension ( ARB , sparse_buffer ) ,
_extension ( ARB , ES3_2_compatibility ) ,
_extension ( ATI , texture_mirror_once ) ,
_extension ( EXT , texture_filter_anisotropic ) ,
_extension ( EXT , texture_compression_s3tc ) ,
_extension ( EXT , texture_mirror_clamp ) ,
_extension ( EXT , texture_sRGB_decode ) ,
_extension ( EXT , shader_integer_mix ) ,
_extension ( EXT , debug_label ) ,
_extension ( EXT , debug_marker ) ,
_extension ( GREMEDY , string_marker ) ,
_extension ( KHR , texture_compression_astc_ldr ) ,
_extension ( KHR , texture_compression_astc_hdr ) ,
_extension ( KHR , blend_equation_advanced ) ,
_extension ( KHR , blend_equation_advanced_coherent ) } ;
constexpr Extension ExtensionList300 [ ] {
_extension ( ARB , map_buffer_range ) ,
_extension ( ARB , color_buffer_float ) ,
_extension ( ARB , half_float_pixel ) ,
_extension ( ARB , texture_float ) ,
_extension ( ARB , depth_buffer_float ) ,
_extension ( ARB , texture_rg ) ,
_extension ( ARB , vertex_array_object ) ,
_extension ( ARB , framebuffer_object ) ,
_extension ( ARB , framebuffer_sRGB ) ,
_extension ( ARB , half_float_vertex ) ,
_extension ( EXT , gpu_shader4 ) ,
_extension ( EXT , packed_float ) ,
_extension ( EXT , texture_array ) ,
_extension ( EXT , texture_compression_rgtc ) ,
_extension ( EXT , texture_shared_exponent ) ,
_extension ( EXT , draw_buffers2 ) ,
_extension ( EXT , texture_integer ) ,
_extension ( EXT , transform_feedback ) ,
_extension ( MAGNUM , shader_vertex_id ) ,
_extension ( NV , depth_buffer_float ) ,
_extension ( NV , conditional_render ) } ;
constexpr Extension ExtensionList310 [ ] {
_extension ( ARB , texture_rectangle ) ,
_extension ( ARB , draw_instanced ) ,
_extension ( ARB , texture_buffer_object ) ,
_extension ( ARB , uniform_buffer_object ) ,
_extension ( ARB , copy_buffer ) ,
_extension ( EXT , texture_snorm ) ,
_extension ( NV , primitive_restart ) } ;
constexpr Extension ExtensionList320 [ ] {
_extension ( ARB , geometry_shader4 ) ,
_extension ( ARB , depth_clamp ) ,
_extension ( ARB , draw_elements_base_vertex ) ,
_extension ( ARB , fragment_coord_conventions ) ,
_extension ( ARB , provoking_vertex ) ,
_extension ( ARB , seamless_cube_map ) ,
_extension ( ARB , sync ) ,
_extension ( ARB , texture_multisample ) ,
_extension ( ARB , vertex_array_bgra ) } ;
constexpr Extension ExtensionList330 [ ] {
_extension ( ARB , instanced_arrays ) ,
_extension ( ARB , blend_func_extended ) ,
_extension ( ARB , explicit_attrib_location ) ,
_extension ( ARB , occlusion_query2 ) ,
_extension ( ARB , sampler_objects ) ,
_extension ( ARB , shader_bit_encoding ) ,
_extension ( ARB , texture_rgb10_a2ui ) ,
_extension ( ARB , texture_swizzle ) ,
_extension ( ARB , timer_query ) ,
_extension ( ARB , vertex_type_2_10_10_10_rev ) } ;
constexpr Extension ExtensionList400 [ ] {
_extension ( ARB , draw_buffers_blend ) ,
_extension ( ARB , sample_shading ) ,
_extension ( ARB , texture_cube_map_array ) ,
_extension ( ARB , texture_gather ) ,
_extension ( ARB , texture_query_lod ) ,
_extension ( ARB , draw_indirect ) ,
_extension ( ARB , gpu_shader5 ) ,
_extension ( ARB , gpu_shader_fp64 ) ,
_extension ( ARB , shader_subroutine ) ,
_extension ( ARB , tessellation_shader ) ,
_extension ( ARB , texture_buffer_object_rgb32 ) ,
_extension ( ARB , transform_feedback2 ) ,
_extension ( ARB , transform_feedback3 ) } ;
constexpr Extension ExtensionList410 [ ] {
_extension ( ARB , ES2_compatibility ) ,
_extension ( ARB , get_program_binary ) ,
_extension ( ARB , separate_shader_objects ) ,
_extension ( ARB , shader_precision ) ,
_extension ( ARB , vertex_attrib_64bit ) ,
_extension ( ARB , viewport_array ) } ;
constexpr Extension ExtensionList420 [ ] {
_extension ( ARB , texture_compression_bptc ) ,
_extension ( ARB , base_instance ) ,
_extension ( ARB , shading_language_420pack ) ,
_extension ( ARB , transform_feedback_instanced ) ,
_extension ( ARB , compressed_texture_pixel_storage ) ,
_extension ( ARB , conservative_depth ) ,
_extension ( ARB , internalformat_query ) ,
_extension ( ARB , map_buffer_alignment ) ,
_extension ( ARB , shader_atomic_counters ) ,
_extension ( ARB , shader_image_load_store ) ,
/* Mentioned in GLSL 4.20 specs as newly added */
_extension ( ARB , shading_language_packing ) ,
_extension ( ARB , texture_storage ) } ;
constexpr Extension ExtensionList430 [ ] {
_extension ( ARB , arrays_of_arrays ) ,
_extension ( ARB , ES3_compatibility ) ,
_extension ( ARB , clear_buffer_object ) ,
_extension ( ARB , compute_shader ) ,
_extension ( ARB , copy_image ) ,
_extension ( ARB , explicit_uniform_location ) ,
_extension ( ARB , fragment_layer_viewport ) ,
_extension ( ARB , framebuffer_no_attachments ) ,
_extension ( ARB , internalformat_query2 ) ,
_extension ( ARB , invalidate_subdata ) ,
_extension ( ARB , multi_draw_indirect ) ,
_extension ( ARB , program_interface_query ) ,
_extension ( ARB , robust_buffer_access_behavior ) ,
_extension ( ARB , shader_image_size ) ,
_extension ( ARB , shader_storage_buffer_object ) ,
_extension ( ARB , stencil_texturing ) ,
_extension ( ARB , texture_buffer_range ) ,
_extension ( ARB , texture_query_levels ) ,
_extension ( ARB , texture_storage_multisample ) ,
_extension ( ARB , texture_view ) ,
_extension ( ARB , vertex_attrib_binding ) ,
_extension ( KHR , debug ) } ;
constexpr Extension ExtensionList440 [ ] {
_extension ( ARB , buffer_storage ) ,
_extension ( ARB , clear_texture ) ,
_extension ( ARB , enhanced_layouts ) ,
_extension ( ARB , multi_bind ) ,
_extension ( ARB , query_buffer_object ) ,
_extension ( ARB , texture_mirror_clamp_to_edge ) ,
_extension ( ARB , texture_stencil8 ) ,
_extension ( ARB , vertex_type_10f_11f_11f_rev ) } ;
constexpr Extension ExtensionList450 [ ] {
_extension ( ARB , ES3_1_compatibility ) ,
_extension ( ARB , clip_control ) ,
_extension ( ARB , conditional_render_inverted ) ,
_extension ( ARB , cull_distance ) ,
_extension ( ARB , derivative_control ) ,
_extension ( ARB , direct_state_access ) ,
_extension ( ARB , get_texture_sub_image ) ,
_extension ( ARB , shader_texture_image_samples ) ,
_extension ( ARB , texture_barrier ) ,
_extension ( KHR , context_flush_control ) ,
_extension ( KHR , robustness ) } ;
constexpr Extension ExtensionList460 [ ] {
_extension ( ARB , indirect_parameters ) ,
_extension ( ARB , shader_draw_parameters ) ,
_extension ( ARB , shader_group_vote ) ,
_extension ( ARB , pipeline_statistics_query ) ,
_extension ( ARB , transform_feedback_overflow_query ) ,
_extension ( ARB , shader_atomic_counter_ops ) ,
_extension ( ARB , gl_spirv ) ,
_extension ( ARB , polygon_offset_clamp ) ,
_extension ( ARB , spirv_extensions ) ,
_extension ( ARB , texture_filter_anisotropic ) ,
_extension ( KHR , no_error ) } ;
# elif defined(MAGNUM_TARGET_WEBGL)
constexpr Extension ExtensionList [ ] {
_extension ( EXT , texture_filter_anisotropic ) ,
_extension ( EXT , disjoint_timer_query ) ,
_extension ( EXT , color_buffer_float ) ,
_extension ( OES , texture_float_linear ) ,
_extension ( WEBGL , compressed_texture_s3tc ) } ;
constexpr Extension ExtensionListES300 [ ] {
# ifdef MAGNUM_TARGET_GLES2
_extension ( ANGLE , instanced_arrays ) ,
_extension ( EXT , color_buffer_half_float ) ,
_extension ( EXT , sRGB ) ,
_extension ( EXT , blend_minmax ) ,
_extension ( EXT , shader_texture_lod ) ,
# endif
_extension ( MAGNUM , shader_vertex_id ) ,
# ifdef MAGNUM_TARGET_GLES2
_extension ( OES , texture_float ) ,
_extension ( OES , texture_half_float ) ,
_extension ( OES , standard_derivatives ) ,
_extension ( OES , vertex_array_object ) ,
_extension ( OES , element_index_uint ) ,
_extension ( OES , texture_half_float_linear ) ,
_extension ( OES , fbo_render_mipmap ) ,
_extension ( WEBGL , depth_texture ) ,
_extension ( WEBGL , color_buffer_float ) ,
_extension ( WEBGL , draw_buffers )
# endif
} ;
# else
constexpr Extension ExtensionList [ ] {
# ifndef MAGNUM_TARGET_GLES2
_extension ( ANDROID , extension_pack_es31a ) ,
# endif
_extension ( APPLE , texture_format_BGRA8888 ) ,
_extension ( ARM , shader_framebuffer_fetch ) ,
_extension ( ARM , shader_framebuffer_fetch_depth_stencil ) ,
_extension ( EXT , texture_filter_anisotropic ) ,
_extension ( EXT , texture_format_BGRA8888 ) ,
_extension ( EXT , read_format_bgra ) ,
_extension ( EXT , multi_draw_arrays ) ,
_extension ( EXT , debug_label ) ,
_extension ( EXT , debug_marker ) ,
_extension ( EXT , separate_shader_objects ) ,
_extension ( EXT , multisampled_render_to_texture ) ,
_extension ( EXT , robustness ) ,
_extension ( EXT , shader_framebuffer_fetch ) ,
_extension ( EXT , disjoint_timer_query ) ,
_extension ( EXT , texture_sRGB_decode ) ,
_extension ( EXT , sRGB_write_control ) ,
_extension ( EXT , texture_compression_s3tc ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , shader_integer_mix ) ,
# endif
_extension ( EXT , polygon_offset_clamp ) ,
_extension ( KHR , texture_compression_astc_hdr ) ,
_extension ( KHR , blend_equation_advanced_coherent ) ,
_extension ( KHR , context_flush_control ) ,
_extension ( KHR , no_error ) ,
_extension ( NV , read_buffer_front ) ,
_extension ( NV , read_depth ) ,
_extension ( NV , read_stencil ) ,
_extension ( NV , read_depth_stencil ) ,
_extension ( NV , texture_border_clamp ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( NV , shader_noperspective_interpolation ) ,
# endif
_extension ( NV , polygon_mode ) ,
_extension ( OES , depth32 ) ,
_extension ( OES , mapbuffer ) ,
_extension ( OES , stencil1 ) ,
_extension ( OES , stencil4 ) ,
_extension ( OES , texture_float_linear ) } ;
constexpr Extension ExtensionListES300 [ ] {
# ifdef MAGNUM_TARGET_GLES2
_extension ( ANGLE , framebuffer_blit ) ,
_extension ( ANGLE , framebuffer_multisample ) ,
_extension ( ANGLE , instanced_arrays ) ,
_extension ( ANGLE , depth_texture ) ,
_extension ( APPLE , framebuffer_multisample ) ,
_extension ( APPLE , texture_max_level ) ,
_extension ( ARM , rgba8 ) ,
_extension ( EXT , texture_type_2_10_10_10_REV ) ,
_extension ( EXT , discard_framebuffer ) ,
_extension ( EXT , blend_minmax ) ,
_extension ( EXT , shader_texture_lod ) ,
_extension ( EXT , unpack_subimage ) ,
_extension ( EXT , occlusion_query_boolean ) ,
_extension ( EXT , shadow_samplers ) ,
_extension ( EXT , texture_rg ) ,
_extension ( EXT , sRGB ) ,
_extension ( EXT , texture_storage ) ,
_extension ( EXT , map_buffer_range ) ,
_extension ( EXT , draw_buffers ) ,
_extension ( EXT , instanced_arrays ) ,
_extension ( EXT , draw_instanced ) ,
# endif
_extension ( MAGNUM , shader_vertex_id ) ,
# ifdef MAGNUM_TARGET_GLES2
_extension ( NV , draw_buffers ) ,
_extension ( NV , fbo_color_attachments ) ,
_extension ( NV , read_buffer ) ,
_extension ( NV , pack_subimage ) ,
_extension ( NV , draw_instanced ) ,
_extension ( NV , framebuffer_blit ) ,
_extension ( NV , framebuffer_multisample ) ,
_extension ( NV , instanced_arrays ) ,
_extension ( NV , shadow_samplers_array ) ,
_extension ( NV , shadow_samplers_cube ) ,
_extension ( OES , depth24 ) ,
_extension ( OES , element_index_uint ) ,
_extension ( OES , fbo_render_mipmap ) ,
_extension ( OES , rgb8_rgba8 ) ,
_extension ( OES , texture_3D ) ,
_extension ( OES , texture_half_float_linear ) ,
_extension ( OES , texture_half_float ) ,
_extension ( OES , texture_float ) ,
_extension ( OES , texture_npot ) ,
_extension ( OES , vertex_half_float ) ,
_extension ( OES , packed_depth_stencil ) ,
_extension ( OES , depth_texture ) ,
_extension ( OES , standard_derivatives ) ,
_extension ( OES , vertex_array_object ) ,
_extension ( OES , required_internalformat ) ,
_extension ( OES , surfaceless_context )
# endif
} ;
# else
static const std : : vector < Extension > extensions {
# ifndef MAGNUM_TARGET_GLES2
_extension ( ANDROID , extension_pack_es31a ) ,
# endif
_extension ( APPLE , texture_format_BGRA8888 ) ,
_extension ( ARM , shader_framebuffer_fetch ) ,
_extension ( ARM , shader_framebuffer_fetch_depth_stencil ) ,
_extension ( EXT , texture_filter_anisotropic ) ,
_extension ( EXT , texture_format_BGRA8888 ) ,
_extension ( EXT , read_format_bgra ) ,
_extension ( EXT , multi_draw_arrays ) ,
_extension ( EXT , debug_label ) ,
_extension ( EXT , debug_marker ) ,
_extension ( EXT , separate_shader_objects ) ,
_extension ( EXT , multisampled_render_to_texture ) ,
_extension ( EXT , robustness ) ,
_extension ( EXT , shader_framebuffer_fetch ) ,
_extension ( EXT , disjoint_timer_query ) ,
_extension ( EXT , texture_sRGB_decode ) ,
_extension ( EXT , sRGB_write_control ) ,
_extension ( EXT , texture_compression_s3tc ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , shader_integer_mix ) ,
# endif
_extension ( EXT , polygon_offset_clamp ) ,
_extension ( KHR , texture_compression_astc_hdr ) ,
_extension ( KHR , blend_equation_advanced_coherent ) ,
_extension ( KHR , context_flush_control ) ,
_extension ( KHR , no_error ) ,
_extension ( NV , read_buffer_front ) ,
_extension ( NV , read_depth ) ,
_extension ( NV , read_stencil ) ,
_extension ( NV , read_depth_stencil ) ,
_extension ( NV , texture_border_clamp ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( NV , shader_noperspective_interpolation ) ,
# endif
_extension ( NV , polygon_mode ) ,
_extension ( OES , depth32 ) ,
_extension ( OES , mapbuffer ) ,
_extension ( OES , stencil1 ) ,
_extension ( OES , stencil4 ) ,
_extension ( OES , texture_float_linear ) } ;
static const std : : vector < Extension > extensionsES300 {
# ifdef MAGNUM_TARGET_GLES2
_extension ( ANGLE , framebuffer_blit ) ,
_extension ( ANGLE , framebuffer_multisample ) ,
_extension ( ANGLE , instanced_arrays ) ,
_extension ( ANGLE , depth_texture ) ,
_extension ( APPLE , framebuffer_multisample ) ,
_extension ( APPLE , texture_max_level ) ,
_extension ( ARM , rgba8 ) ,
_extension ( EXT , texture_type_2_10_10_10_REV ) ,
_extension ( EXT , discard_framebuffer ) ,
_extension ( EXT , blend_minmax ) ,
_extension ( EXT , shader_texture_lod ) ,
_extension ( EXT , unpack_subimage ) ,
_extension ( EXT , occlusion_query_boolean ) ,
_extension ( EXT , shadow_samplers ) ,
_extension ( EXT , texture_rg ) ,
_extension ( EXT , sRGB ) ,
_extension ( EXT , texture_storage ) ,
_extension ( EXT , map_buffer_range ) ,
_extension ( EXT , draw_buffers ) ,
_extension ( EXT , instanced_arrays ) ,
_extension ( EXT , draw_instanced ) ,
# endif
_extension ( MAGNUM , shader_vertex_id ) ,
# ifdef MAGNUM_TARGET_GLES2
_extension ( NV , draw_buffers ) ,
_extension ( NV , fbo_color_attachments ) ,
_extension ( NV , read_buffer ) ,
_extension ( NV , pack_subimage ) ,
_extension ( NV , draw_instanced ) ,
_extension ( NV , framebuffer_blit ) ,
_extension ( NV , framebuffer_multisample ) ,
_extension ( NV , instanced_arrays ) ,
_extension ( NV , shadow_samplers_array ) ,
_extension ( NV , shadow_samplers_cube ) ,
_extension ( OES , depth24 ) ,
_extension ( OES , element_index_uint ) ,
_extension ( OES , fbo_render_mipmap ) ,
_extension ( OES , rgb8_rgba8 ) ,
_extension ( OES , texture_3D ) ,
_extension ( OES , texture_half_float_linear ) ,
_extension ( OES , texture_half_float ) ,
_extension ( OES , texture_float ) ,
_extension ( OES , texture_npot ) ,
_extension ( OES , vertex_half_float ) ,
_extension ( OES , packed_depth_stencil ) ,
_extension ( OES , depth_texture ) ,
_extension ( OES , standard_derivatives ) ,
_extension ( OES , vertex_array_object ) ,
_extension ( OES , required_internalformat ) ,
_extension ( OES , surfaceless_context )
# endif
} ;
static const std : : vector < Extension > extensionsES320 {
_extension ( EXT , color_buffer_half_float ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , color_buffer_float ) ,
_extension ( EXT , copy_image ) ,
# endif
_extension ( EXT , draw_buffers_indexed ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , geometry_shader ) ,
_extension ( EXT , gpu_shader5 ) ,
_extension ( EXT , shader_io_blocks ) ,
_extension ( EXT , tessellation_shader ) ,
# endif
_extension ( EXT , texture_border_clamp ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , texture_buffer ) ,
_extension ( EXT , texture_cube_map_array ) ,
_extension ( EXT , primitive_bounding_box ) ,
# endif
_extension ( KHR , texture_compression_astc_ldr ) ,
_extension ( KHR , debug ) ,
_extension ( KHR , blend_equation_advanced ) ,
_extension ( KHR , robustness ) ,
_extension ( KHR , robust_buffer_access_behavior ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( OES , sample_shading ) ,
_extension ( OES , sample_variables ) ,
_extension ( OES , shader_image_atomic ) ,
_extension ( OES , shader_multisample_interpolation ) ,
# endif
_extension ( OES , texture_stencil8 ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( OES , texture_storage_multisample_2d_array )
# endif
} ;
constexpr Extension ExtensionListES320 [ ] {
_extension ( EXT , color_buffer_half_float ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , color_buffer_float ) ,
_extension ( EXT , copy_image ) ,
# endif
# undef _extension
_extension ( EXT , draw_buffers_indexed ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , geometry_shader ) ,
_extension ( EXT , gpu_shader5 ) ,
_extension ( EXT , shader_io_blocks ) ,
_extension ( EXT , tessellation_shader ) ,
# endif
_extension ( EXT , texture_border_clamp ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( EXT , texture_buffer ) ,
_extension ( EXT , texture_cube_map_array ) ,
_extension ( EXT , primitive_bounding_box ) ,
# endif
_extension ( KHR , texture_compression_astc_ldr ) ,
_extension ( KHR , debug ) ,
_extension ( KHR , blend_equation_advanced ) ,
_extension ( KHR , robustness ) ,
_extension ( KHR , robust_buffer_access_behavior ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( OES , sample_shading ) ,
_extension ( OES , sample_variables ) ,
_extension ( OES , shader_image_atomic ) ,
_extension ( OES , shader_multisample_interpolation ) ,
# endif
_extension ( OES , texture_stencil8 ) ,
# ifndef MAGNUM_TARGET_GLES2
_extension ( OES , texture_storage_multisample_2d_array )
# endif
} ;
# endif
# undef _extension
}
Containers : : ArrayView < const Extension > Extension : : extensions ( Version version ) {
switch ( version ) {
case Version : : None : return extensions ;
/* GCC 4.8 needs an explicit cast */
case Version : : None : return Containers : : arrayView ( ExtensionList ) ;
# ifndef MAGNUM_TARGET_GLES
case Version : : GL210 : return empty ;
case Version : : GL300 : return extensions300 ;
case Version : : GL310 : return extensions310 ;
case Version : : GL320 : return extensions320 ;
case Version : : GL330 : return extensions330 ;
case Version : : GL400 : return extensions400 ;
case Version : : GL410 : return extensions410 ;
case Version : : GL420 : return extensions420 ;
case Version : : GL430 : return extensions430 ;
case Version : : GL440 : return extensions440 ;
case Version : : GL450 : return extensions450 ;
case Version : : GL460 : return extensions460 ;
case Version : : GL210 : return { } ;
case Version : : GL300 : return Containers : : arrayView ( ExtensionList300 ) ;
case Version : : GL310 : return Containers : : arrayView ( ExtensionList310 ) ;
case Version : : GL320 : return Containers : : arrayView ( ExtensionList320 ) ;
case Version : : GL330 : return Containers : : arrayView ( ExtensionList330 ) ;
case Version : : GL400 : return Containers : : arrayView ( ExtensionList400 ) ;
case Version : : GL410 : return Containers : : arrayView ( ExtensionList410 ) ;
case Version : : GL420 : return Containers : : arrayView ( ExtensionList420 ) ;
case Version : : GL430 : return Containers : : arrayView ( ExtensionList430 ) ;
case Version : : GL440 : return Containers : : arrayView ( ExtensionList440 ) ;
case Version : : GL450 : return Containers : : arrayView ( ExtensionList450 ) ;
case Version : : GL460 : return Containers : : arrayView ( ExtensionList460 ) ;
case Version : : GLES200 :
case Version : : GLES300 :
case Version : : GLES310 :
case Version : : GLES320 : return empty ;
case Version : : GLES320 : return { } ;
# else
case Version : : GLES200 : return empty ;
case Version : : GLES300 : return extensionsES300 ;
case Version : : GLES200 : return { } ;
case Version : : GLES300 : return Containers : : arrayView ( ExtensionListES300 ) ;
# ifndef MAGNUM_TARGET_WEBGL
case Version : : GLES310 : return empty ;
case Version : : GLES320 : return extensionsES320 ;
case Version : : GLES310 : return { } ;
case Version : : GLES320 : return Containers : : arrayView ( ExtensionListES320 ) ;
# endif
# endif
}