Browse Source

GL: make compile-time extensions convertible to the Extension class.

Will need this for supplying disabled extensions to Context
configuration.
euler-xxx
Vladimír Vondruš 5 years ago
parent
commit
ab0568d400
  1. 689
      src/Magnum/GL/Context.cpp
  2. 5
      src/Magnum/GL/Context.h

689
src/Magnum/GL/Context.cpp

@ -72,455 +72,464 @@ using namespace Containers::Literals;
to be sorted alphabetically. */
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,sample_positions),
_extension(AMD,shader_explicit_vertex_parameter),
_extension(AMD,shader_trinary_minmax),
_extension(AMD,transform_feedback3_lines_triangles),
_extension(AMD,vertex_shader_layer),
_extension(ARB,ES3_2_compatibility),
_extension(ARB,bindless_texture),
_extension(ARB,compute_variable_group_size),
_extension(ARB,robustness),
_extension(ARB,robustness_application_isolation),
_extension(ARB,robustness_isolation),
_extension(ARB,robustness_share_group_isolation),
_extension(ARB,sample_locations),
_extension(ARB,seamless_cubemap_per_texture),
_extension(ARB,sparse_buffer),
_extension(ARB,sparse_texture),
_extension(ATI,texture_mirror_once),
_extension(EXT,debug_label),
_extension(EXT,debug_marker),
_extension(EXT,shader_integer_mix),
_extension(EXT,texture_compression_dxt1),
_extension(EXT,texture_compression_s3tc),
_extension(EXT,texture_filter_anisotropic),
_extension(EXT,texture_mirror_clamp),
_extension(EXT,texture_sRGB_R8),
_extension(EXT,texture_sRGB_decode),
_extension(GREMEDY,string_marker),
_extension(KHR,blend_equation_advanced),
_extension(KHR,blend_equation_advanced_coherent),
_extension(KHR,texture_compression_astc_hdr),
_extension(KHR,texture_compression_astc_ldr),
_extension(KHR,texture_compression_astc_sliced_3d),
_extension(NV,fragment_shader_barycentric),
_extension(NV,sample_locations),
_extension(OVR,multiview),
_extension(OVR,multiview2)};
Extensions::AMD::sample_positions{},
Extensions::AMD::shader_explicit_vertex_parameter{},
Extensions::AMD::shader_trinary_minmax{},
Extensions::AMD::transform_feedback3_lines_triangles{},
Extensions::AMD::vertex_shader_layer{},
Extensions::ARB::ES3_2_compatibility{},
Extensions::ARB::bindless_texture{},
Extensions::ARB::compute_variable_group_size{},
Extensions::ARB::robustness{},
Extensions::ARB::robustness_application_isolation{},
Extensions::ARB::robustness_isolation{},
Extensions::ARB::robustness_share_group_isolation{},
Extensions::ARB::sample_locations{},
Extensions::ARB::seamless_cubemap_per_texture{},
Extensions::ARB::sparse_buffer{},
Extensions::ARB::sparse_texture{},
Extensions::ATI::texture_mirror_once{},
Extensions::EXT::debug_label{},
Extensions::EXT::debug_marker{},
Extensions::EXT::shader_integer_mix{},
Extensions::EXT::texture_compression_dxt1{},
Extensions::EXT::texture_compression_s3tc{},
Extensions::EXT::texture_filter_anisotropic{},
Extensions::EXT::texture_mirror_clamp{},
Extensions::EXT::texture_sRGB_R8{},
Extensions::EXT::texture_sRGB_decode{},
Extensions::GREMEDY::string_marker{},
Extensions::KHR::blend_equation_advanced{},
Extensions::KHR::blend_equation_advanced_coherent{},
Extensions::KHR::texture_compression_astc_hdr{},
Extensions::KHR::texture_compression_astc_ldr{},
Extensions::KHR::texture_compression_astc_sliced_3d{},
Extensions::NV::fragment_shader_barycentric{},
Extensions::NV::sample_locations{},
Extensions::OVR::multiview{},
Extensions::OVR::multiview2{}
};
constexpr Extension ExtensionList300[]{
_extension(ARB,color_buffer_float),
_extension(ARB,depth_buffer_float),
_extension(ARB,framebuffer_object),
_extension(ARB,framebuffer_sRGB),
_extension(ARB,half_float_pixel),
_extension(ARB,half_float_vertex),
_extension(ARB,map_buffer_range),
_extension(ARB,texture_float),
_extension(ARB,texture_rg),
_extension(ARB,vertex_array_object),
_extension(EXT,draw_buffers2),
_extension(EXT,gpu_shader4),
_extension(EXT,packed_float),
_extension(EXT,texture_array),
_extension(EXT,texture_compression_rgtc),
_extension(EXT,texture_integer),
_extension(EXT,texture_shared_exponent),
_extension(EXT,transform_feedback),
_extension(MAGNUM,shader_vertex_id),
_extension(NV,conditional_render),
_extension(NV,depth_buffer_float)};
Extensions::ARB::color_buffer_float{},
Extensions::ARB::depth_buffer_float{},
Extensions::ARB::framebuffer_object{},
Extensions::ARB::framebuffer_sRGB{},
Extensions::ARB::half_float_pixel{},
Extensions::ARB::half_float_vertex{},
Extensions::ARB::map_buffer_range{},
Extensions::ARB::texture_float{},
Extensions::ARB::texture_rg{},
Extensions::ARB::vertex_array_object{},
Extensions::EXT::draw_buffers2{},
Extensions::EXT::gpu_shader4{},
Extensions::EXT::packed_float{},
Extensions::EXT::texture_array{},
Extensions::EXT::texture_compression_rgtc{},
Extensions::EXT::texture_integer{},
Extensions::EXT::texture_shared_exponent{},
Extensions::EXT::transform_feedback{},
Extensions::MAGNUM::shader_vertex_id{},
Extensions::NV::conditional_render{},
Extensions::NV::depth_buffer_float{}
};
constexpr Extension ExtensionList310[]{
_extension(ARB,copy_buffer),
_extension(ARB,draw_instanced),
_extension(ARB,texture_buffer_object),
_extension(ARB,texture_rectangle),
_extension(ARB,uniform_buffer_object),
_extension(EXT,texture_snorm),
_extension(NV,primitive_restart)};
Extensions::ARB::copy_buffer{},
Extensions::ARB::draw_instanced{},
Extensions::ARB::texture_buffer_object{},
Extensions::ARB::texture_rectangle{},
Extensions::ARB::uniform_buffer_object{},
Extensions::EXT::texture_snorm{},
Extensions::NV::primitive_restart{}
};
constexpr Extension ExtensionList320[]{
_extension(ARB,depth_clamp),
_extension(ARB,draw_elements_base_vertex),
_extension(ARB,fragment_coord_conventions),
_extension(ARB,geometry_shader4),
_extension(ARB,provoking_vertex),
_extension(ARB,seamless_cube_map),
_extension(ARB,sync),
_extension(ARB,texture_multisample),
_extension(ARB,vertex_array_bgra)};
Extensions::ARB::depth_clamp{},
Extensions::ARB::draw_elements_base_vertex{},
Extensions::ARB::fragment_coord_conventions{},
Extensions::ARB::geometry_shader4{},
Extensions::ARB::provoking_vertex{},
Extensions::ARB::seamless_cube_map{},
Extensions::ARB::sync{},
Extensions::ARB::texture_multisample{},
Extensions::ARB::vertex_array_bgra{}
};
constexpr Extension ExtensionList330[]{
_extension(ARB,blend_func_extended),
_extension(ARB,explicit_attrib_location),
_extension(ARB,instanced_arrays),
_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)};
Extensions::ARB::blend_func_extended{},
Extensions::ARB::explicit_attrib_location{},
Extensions::ARB::instanced_arrays{},
Extensions::ARB::occlusion_query2{},
Extensions::ARB::sampler_objects{},
Extensions::ARB::shader_bit_encoding{},
Extensions::ARB::texture_rgb10_a2ui{},
Extensions::ARB::texture_swizzle{},
Extensions::ARB::timer_query{},
Extensions::ARB::vertex_type_2_10_10_10_rev{}
};
constexpr Extension ExtensionList400[]{
_extension(ARB,draw_buffers_blend),
_extension(ARB,draw_indirect),
_extension(ARB,gpu_shader5),
_extension(ARB,gpu_shader_fp64),
_extension(ARB,sample_shading),
_extension(ARB,shader_subroutine),
_extension(ARB,tessellation_shader),
_extension(ARB,texture_buffer_object_rgb32),
_extension(ARB,texture_cube_map_array),
_extension(ARB,texture_gather),
_extension(ARB,texture_query_lod),
_extension(ARB,transform_feedback2),
_extension(ARB,transform_feedback3)};
Extensions::ARB::draw_buffers_blend{},
Extensions::ARB::draw_indirect{},
Extensions::ARB::gpu_shader5{},
Extensions::ARB::gpu_shader_fp64{},
Extensions::ARB::sample_shading{},
Extensions::ARB::shader_subroutine{},
Extensions::ARB::tessellation_shader{},
Extensions::ARB::texture_buffer_object_rgb32{},
Extensions::ARB::texture_cube_map_array{},
Extensions::ARB::texture_gather{},
Extensions::ARB::texture_query_lod{},
Extensions::ARB::transform_feedback2{},
Extensions::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)};
Extensions::ARB::ES2_compatibility{},
Extensions::ARB::get_program_binary{},
Extensions::ARB::separate_shader_objects{},
Extensions::ARB::shader_precision{},
Extensions::ARB::vertex_attrib_64bit{},
Extensions::ARB::viewport_array{}
};
constexpr Extension ExtensionList420[]{
_extension(ARB,base_instance),
_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),
_extension(ARB,shading_language_420pack),
Extensions::ARB::base_instance{},
Extensions::ARB::compressed_texture_pixel_storage{},
Extensions::ARB::conservative_depth{},
Extensions::ARB::internalformat_query{},
Extensions::ARB::map_buffer_alignment{},
Extensions::ARB::shader_atomic_counters{},
Extensions::ARB::shader_image_load_store{},
Extensions::ARB::shading_language_420pack{},
/* Mentioned in GLSL 4.20 specs as newly added */
_extension(ARB,shading_language_packing),
_extension(ARB,texture_compression_bptc),
_extension(ARB,texture_storage),
_extension(ARB,transform_feedback_instanced)};
Extensions::ARB::shading_language_packing{},
Extensions::ARB::texture_compression_bptc{},
Extensions::ARB::texture_storage{},
Extensions::ARB::transform_feedback_instanced{}
};
constexpr Extension ExtensionList430[]{
_extension(ARB,ES3_compatibility),
_extension(ARB,arrays_of_arrays),
_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)};
Extensions::ARB::ES3_compatibility{},
Extensions::ARB::arrays_of_arrays{},
Extensions::ARB::clear_buffer_object{},
Extensions::ARB::compute_shader{},
Extensions::ARB::copy_image{},
Extensions::ARB::explicit_uniform_location{},
Extensions::ARB::fragment_layer_viewport{},
Extensions::ARB::framebuffer_no_attachments{},
Extensions::ARB::internalformat_query2{},
Extensions::ARB::invalidate_subdata{},
Extensions::ARB::multi_draw_indirect{},
Extensions::ARB::program_interface_query{},
Extensions::ARB::robust_buffer_access_behavior{},
Extensions::ARB::shader_image_size{},
Extensions::ARB::shader_storage_buffer_object{},
Extensions::ARB::stencil_texturing{},
Extensions::ARB::texture_buffer_range{},
Extensions::ARB::texture_query_levels{},
Extensions::ARB::texture_storage_multisample{},
Extensions::ARB::texture_view{},
Extensions::ARB::vertex_attrib_binding{},
Extensions::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)};
Extensions::ARB::buffer_storage{},
Extensions::ARB::clear_texture{},
Extensions::ARB::enhanced_layouts{},
Extensions::ARB::multi_bind{},
Extensions::ARB::query_buffer_object{},
Extensions::ARB::texture_mirror_clamp_to_edge{},
Extensions::ARB::texture_stencil8{},
Extensions::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)};
Extensions::ARB::ES3_1_compatibility{},
Extensions::ARB::clip_control{},
Extensions::ARB::conditional_render_inverted{},
Extensions::ARB::cull_distance{},
Extensions::ARB::derivative_control{},
Extensions::ARB::direct_state_access{},
Extensions::ARB::get_texture_sub_image{},
Extensions::ARB::shader_texture_image_samples{},
Extensions::ARB::texture_barrier{},
Extensions::KHR::context_flush_control{},
Extensions::KHR::robustness{}
};
constexpr Extension ExtensionList460[]{
_extension(ARB,gl_spirv),
_extension(ARB,indirect_parameters),
_extension(ARB,pipeline_statistics_query),
_extension(ARB,polygon_offset_clamp),
_extension(ARB,shader_atomic_counter_ops),
_extension(ARB,shader_draw_parameters),
_extension(ARB,shader_group_vote),
_extension(ARB,spirv_extensions),
_extension(ARB,texture_filter_anisotropic),
_extension(ARB,transform_feedback_overflow_query),
_extension(KHR,no_error)};
Extensions::ARB::gl_spirv{},
Extensions::ARB::indirect_parameters{},
Extensions::ARB::pipeline_statistics_query{},
Extensions::ARB::polygon_offset_clamp{},
Extensions::ARB::shader_atomic_counter_ops{},
Extensions::ARB::shader_draw_parameters{},
Extensions::ARB::shader_group_vote{},
Extensions::ARB::spirv_extensions{},
Extensions::ARB::texture_filter_anisotropic{},
Extensions::ARB::transform_feedback_overflow_query{},
Extensions::KHR::no_error{}
};
#elif defined(MAGNUM_TARGET_WEBGL)
constexpr Extension ExtensionList[]{
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,clip_cull_distance),
Extensions::EXT::clip_cull_distance{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,color_buffer_float),
Extensions::EXT::color_buffer_float{},
#endif
#ifdef MAGNUM_TARGET_GLES2
_extension(EXT,disjoint_timer_query),
Extensions::EXT::disjoint_timer_query{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,disjoint_timer_query_webgl2),
Extensions::EXT::disjoint_timer_query_webgl2{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,draw_buffers_indexed),
Extensions::EXT::draw_buffers_indexed{},
#endif
_extension(EXT,float_blend),
_extension(EXT,texture_compression_bptc),
_extension(EXT,texture_compression_rgtc),
_extension(EXT,texture_filter_anisotropic),
_extension(EXT,texture_norm16),
_extension(OES,texture_float_linear),
Extensions::EXT::float_blend{},
Extensions::EXT::texture_compression_bptc{},
Extensions::EXT::texture_compression_rgtc{},
Extensions::EXT::texture_filter_anisotropic{},
Extensions::EXT::texture_norm16{},
Extensions::OES::texture_float_linear{},
#ifndef MAGNUM_TARGET_GLES2
_extension(OVR,multiview2),
Extensions::OVR::multiview2{},
#endif
_extension(WEBGL,blend_equation_advanced_coherent),
_extension(WEBGL,compressed_texture_astc),
_extension(WEBGL,compressed_texture_pvrtc),
_extension(WEBGL,compressed_texture_s3tc),
_extension(WEBGL,compressed_texture_s3tc_srgb),
_extension(WEBGL,debug_renderer_info),
_extension(WEBGL,debug_shaders),
Extensions::WEBGL::blend_equation_advanced_coherent{},
Extensions::WEBGL::compressed_texture_astc{},
Extensions::WEBGL::compressed_texture_pvrtc{},
Extensions::WEBGL::compressed_texture_s3tc{},
Extensions::WEBGL::compressed_texture_s3tc_srgb{},
Extensions::WEBGL::debug_renderer_info{},
Extensions::WEBGL::debug_shaders{},
#ifndef MAGNUM_TARGET_GLES2
_extension(WEBGL,draw_instanced_base_vertex_base_instance),
Extensions::WEBGL::draw_instanced_base_vertex_base_instance{},
#endif
_extension(WEBGL,lose_context),
_extension(WEBGL,multi_draw),
Extensions::WEBGL::lose_context{},
Extensions::WEBGL::multi_draw{},
#ifndef MAGNUM_TARGET_GLES2
_extension(WEBGL,multi_draw_instanced_base_vertex_base_instance)
Extensions::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),
Extensions::ANGLE::instanced_arrays{},
Extensions::EXT::blend_minmax{},
Extensions::EXT::color_buffer_half_float{},
Extensions::EXT::frag_depth{},
Extensions::EXT::sRGB{},
Extensions::EXT::shader_texture_lod{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(MAGNUM,shader_vertex_id),
Extensions::MAGNUM::shader_vertex_id{},
#endif
#ifdef MAGNUM_TARGET_GLES2
_extension(OES,element_index_uint),
_extension(OES,fbo_render_mipmap),
_extension(OES,standard_derivatives),
_extension(OES,texture_float),
_extension(OES,texture_half_float),
_extension(OES,texture_half_float_linear),
_extension(OES,vertex_array_object),
_extension(WEBGL,color_buffer_float),
_extension(WEBGL,depth_texture),
_extension(WEBGL,draw_buffers)
Extensions::OES::element_index_uint{},
Extensions::OES::fbo_render_mipmap{},
Extensions::OES::standard_derivatives{},
Extensions::OES::texture_float{},
Extensions::OES::texture_half_float{},
Extensions::OES::texture_half_float_linear{},
Extensions::OES::vertex_array_object{},
Extensions::WEBGL::color_buffer_float{},
Extensions::WEBGL::depth_texture{},
Extensions::WEBGL::draw_buffers{},
#endif
};
#else
constexpr Extension ExtensionList[]{
#ifndef MAGNUM_TARGET_GLES2
_extension(ANDROID,extension_pack_es31a),
Extensions::ANDROID::extension_pack_es31a{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(ANGLE,base_vertex_base_instance),
Extensions::ANGLE::base_vertex_base_instance{},
#endif
_extension(ANGLE,multi_draw),
_extension(ANGLE,texture_compression_dxt1),
_extension(ANGLE,texture_compression_dxt3),
_extension(ANGLE,texture_compression_dxt5),
_extension(APPLE,clip_distance),
_extension(APPLE,texture_format_BGRA8888),
_extension(ARM,shader_framebuffer_fetch),
_extension(ARM,shader_framebuffer_fetch_depth_stencil),
Extensions::ANGLE::multi_draw{},
Extensions::ANGLE::texture_compression_dxt1{},
Extensions::ANGLE::texture_compression_dxt3{},
Extensions::ANGLE::texture_compression_dxt5{},
Extensions::APPLE::clip_distance{},
Extensions::APPLE::texture_format_BGRA8888{},
Extensions::ARM::shader_framebuffer_fetch{},
Extensions::ARM::shader_framebuffer_fetch_depth_stencil{},
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,clip_cull_distance),
Extensions::EXT::clip_cull_distance{},
#endif
_extension(EXT,debug_label),
_extension(EXT,debug_marker),
_extension(EXT,disjoint_timer_query),
_extension(EXT,draw_elements_base_vertex),
_extension(EXT,multi_draw_arrays),
_extension(EXT,multisampled_render_to_texture),
_extension(EXT,polygon_offset_clamp),
_extension(EXT,pvrtc_sRGB),
_extension(EXT,read_format_bgra),
_extension(EXT,robustness),
_extension(EXT,sRGB_write_control),
_extension(EXT,separate_shader_objects),
_extension(EXT,shader_framebuffer_fetch),
Extensions::EXT::debug_label{},
Extensions::EXT::debug_marker{},
Extensions::EXT::disjoint_timer_query{},
Extensions::EXT::draw_elements_base_vertex{},
Extensions::EXT::multi_draw_arrays{},
Extensions::EXT::multisampled_render_to_texture{},
Extensions::EXT::polygon_offset_clamp{},
Extensions::EXT::pvrtc_sRGB{},
Extensions::EXT::read_format_bgra{},
Extensions::EXT::robustness{},
Extensions::EXT::sRGB_write_control{},
Extensions::EXT::separate_shader_objects{},
Extensions::EXT::shader_framebuffer_fetch{},
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,shader_integer_mix),
Extensions::EXT::shader_integer_mix{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,texture_compression_bptc),
Extensions::EXT::texture_compression_bptc{},
#endif
_extension(EXT,texture_compression_dxt1),
Extensions::EXT::texture_compression_dxt1{},
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,texture_compression_rgtc),
Extensions::EXT::texture_compression_rgtc{},
#endif
_extension(EXT,texture_compression_s3tc),
_extension(EXT,texture_compression_s3tc_srgb),
_extension(EXT,texture_filter_anisotropic),
_extension(EXT,texture_format_BGRA8888),
Extensions::EXT::texture_compression_s3tc{},
Extensions::EXT::texture_compression_s3tc_srgb{},
Extensions::EXT::texture_filter_anisotropic{},
Extensions::EXT::texture_format_BGRA8888{},
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,texture_norm16),
_extension(EXT,texture_sRGB_R8),
Extensions::EXT::texture_norm16{},
Extensions::EXT::texture_sRGB_R8{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,texture_sRGB_RG8),
Extensions::EXT::texture_sRGB_RG8{},
#endif
_extension(EXT,texture_sRGB_decode),
_extension(IMG,texture_compression_pvrtc),
_extension(KHR,blend_equation_advanced_coherent),
_extension(KHR,context_flush_control),
_extension(KHR,no_error),
_extension(KHR,texture_compression_astc_hdr),
_extension(KHR,texture_compression_astc_sliced_3d),
Extensions::EXT::texture_sRGB_decode{},
Extensions::IMG::texture_compression_pvrtc{},
Extensions::KHR::blend_equation_advanced_coherent{},
Extensions::KHR::context_flush_control{},
Extensions::KHR::no_error{},
Extensions::KHR::texture_compression_astc_hdr{},
Extensions::KHR::texture_compression_astc_sliced_3d{},
#ifndef MAGNUM_TARGET_GLES2
_extension(NV,fragment_shader_barycentric),
Extensions::NV::fragment_shader_barycentric{},
#endif
_extension(NV,polygon_mode),
_extension(NV,read_buffer_front),
_extension(NV,read_depth),
_extension(NV,read_depth_stencil),
_extension(NV,read_stencil),
_extension(NV,sample_locations),
Extensions::NV::polygon_mode{},
Extensions::NV::read_buffer_front{},
Extensions::NV::read_depth{},
Extensions::NV::read_depth_stencil{},
Extensions::NV::read_stencil{},
Extensions::NV::sample_locations{},
#ifndef MAGNUM_TARGET_GLES2
_extension(NV,shader_noperspective_interpolation),
Extensions::NV::shader_noperspective_interpolation{},
#endif
_extension(NV,texture_border_clamp),
_extension(OES,depth32),
_extension(OES,draw_elements_base_vertex),
_extension(OES,mapbuffer),
_extension(OES,stencil1),
_extension(OES,stencil4),
Extensions::NV::texture_border_clamp{},
Extensions::OES::depth32{},
Extensions::OES::draw_elements_base_vertex{},
Extensions::OES::mapbuffer{},
Extensions::OES::stencil1{},
Extensions::OES::stencil4{},
#ifndef MAGNUM_TARGET_GLES2
_extension(OES,texture_compression_astc),
Extensions::OES::texture_compression_astc{},
#endif
_extension(OES,texture_float_linear),
Extensions::OES::texture_float_linear{},
#ifndef MAGNUM_TARGET_GLES2
_extension(OVR,multiview),
Extensions::OVR::multiview{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(OVR,multiview2),
Extensions::OVR::multiview2{},
#endif
};
constexpr Extension ExtensionListES300[]{
#ifdef MAGNUM_TARGET_GLES2
_extension(ANGLE,depth_texture),
_extension(ANGLE,framebuffer_blit),
_extension(ANGLE,framebuffer_multisample),
_extension(ANGLE,instanced_arrays),
_extension(APPLE,framebuffer_multisample),
_extension(APPLE,texture_max_level),
_extension(ARM,rgba8),
_extension(EXT,blend_minmax),
_extension(EXT,discard_framebuffer),
_extension(EXT,draw_buffers),
_extension(EXT,draw_instanced),
_extension(EXT,instanced_arrays),
_extension(EXT,map_buffer_range),
_extension(EXT,occlusion_query_boolean),
_extension(EXT,sRGB),
_extension(EXT,shader_texture_lod),
_extension(EXT,shadow_samplers),
_extension(EXT,texture_rg),
_extension(EXT,texture_storage),
_extension(EXT,texture_type_2_10_10_10_REV),
_extension(EXT,unpack_subimage),
Extensions::ANGLE::depth_texture{},
Extensions::ANGLE::framebuffer_blit{},
Extensions::ANGLE::framebuffer_multisample{},
Extensions::ANGLE::instanced_arrays{},
Extensions::APPLE::framebuffer_multisample{},
Extensions::APPLE::texture_max_level{},
Extensions::ARM::rgba8{},
Extensions::EXT::blend_minmax{},
Extensions::EXT::discard_framebuffer{},
Extensions::EXT::draw_buffers{},
Extensions::EXT::draw_instanced{},
Extensions::EXT::instanced_arrays{},
Extensions::EXT::map_buffer_range{},
Extensions::EXT::occlusion_query_boolean{},
Extensions::EXT::sRGB{},
Extensions::EXT::shader_texture_lod{},
Extensions::EXT::shadow_samplers{},
Extensions::EXT::texture_rg{},
Extensions::EXT::texture_storage{},
Extensions::EXT::texture_type_2_10_10_10_REV{},
Extensions::EXT::unpack_subimage{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(MAGNUM,shader_vertex_id),
Extensions::MAGNUM::shader_vertex_id{},
#endif
#ifdef MAGNUM_TARGET_GLES2
_extension(NV,draw_buffers),
_extension(NV,draw_instanced),
_extension(NV,fbo_color_attachments),
_extension(NV,framebuffer_blit),
_extension(NV,framebuffer_multisample),
_extension(NV,instanced_arrays),
_extension(NV,pack_subimage),
_extension(NV,read_buffer),
_extension(NV,shadow_samplers_array),
_extension(NV,shadow_samplers_cube),
_extension(OES,depth24),
_extension(OES,depth_texture),
_extension(OES,element_index_uint),
_extension(OES,fbo_render_mipmap),
_extension(OES,packed_depth_stencil),
_extension(OES,required_internalformat),
_extension(OES,rgb8_rgba8),
_extension(OES,standard_derivatives),
_extension(OES,surfaceless_context),
_extension(OES,texture_3D),
_extension(OES,texture_float),
_extension(OES,texture_half_float),
_extension(OES,texture_half_float_linear),
_extension(OES,texture_npot),
_extension(OES,vertex_array_object),
_extension(OES,vertex_half_float),
Extensions::NV::draw_buffers{},
Extensions::NV::draw_instanced{},
Extensions::NV::fbo_color_attachments{},
Extensions::NV::framebuffer_blit{},
Extensions::NV::framebuffer_multisample{},
Extensions::NV::instanced_arrays{},
Extensions::NV::pack_subimage{},
Extensions::NV::read_buffer{},
Extensions::NV::shadow_samplers_array{},
Extensions::NV::shadow_samplers_cube{},
Extensions::OES::depth24{},
Extensions::OES::depth_texture{},
Extensions::OES::element_index_uint{},
Extensions::OES::fbo_render_mipmap{},
Extensions::OES::packed_depth_stencil{},
Extensions::OES::required_internalformat{},
Extensions::OES::rgb8_rgba8{},
Extensions::OES::standard_derivatives{},
Extensions::OES::surfaceless_context{},
Extensions::OES::texture_3D{},
Extensions::OES::texture_float{},
Extensions::OES::texture_half_float{},
Extensions::OES::texture_half_float_linear{},
Extensions::OES::texture_npot{},
Extensions::OES::vertex_array_object{},
Extensions::OES::vertex_half_float{},
#endif
};
constexpr Extension ExtensionListES320[]{
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,color_buffer_float),
Extensions::EXT::color_buffer_float{},
#endif
_extension(EXT,color_buffer_half_float),
Extensions::EXT::color_buffer_half_float{},
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,copy_image),
Extensions::EXT::copy_image{},
#endif
_extension(EXT,draw_buffers_indexed),
Extensions::EXT::draw_buffers_indexed{},
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,geometry_shader),
Extensions::EXT::geometry_shader{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,gpu_shader5),
Extensions::EXT::gpu_shader5{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,primitive_bounding_box),
Extensions::EXT::primitive_bounding_box{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,shader_io_blocks),
Extensions::EXT::shader_io_blocks{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,tessellation_shader),
Extensions::EXT::tessellation_shader{},
#endif
_extension(EXT,texture_border_clamp),
Extensions::EXT::texture_border_clamp{},
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,texture_buffer),
Extensions::EXT::texture_buffer{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(EXT,texture_cube_map_array),
Extensions::EXT::texture_cube_map_array{},
#endif
_extension(KHR,blend_equation_advanced),
_extension(KHR,debug),
_extension(KHR,robust_buffer_access_behavior),
_extension(KHR,robustness),
_extension(KHR,texture_compression_astc_ldr),
Extensions::KHR::blend_equation_advanced{},
Extensions::KHR::debug{},
Extensions::KHR::robust_buffer_access_behavior{},
Extensions::KHR::robustness{},
Extensions::KHR::texture_compression_astc_ldr{},
#ifndef MAGNUM_TARGET_GLES2
_extension(OES,sample_shading),
Extensions::OES::sample_shading{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(OES,sample_variables),
Extensions::OES::sample_variables{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(OES,shader_image_atomic),
Extensions::OES::shader_image_atomic{},
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(OES,shader_multisample_interpolation),
Extensions::OES::shader_multisample_interpolation{},
#endif
_extension(OES,texture_stencil8),
Extensions::OES::texture_stencil8{},
#ifndef MAGNUM_TARGET_GLES2
_extension(OES,texture_storage_multisample_2d_array)
Extensions::OES::texture_storage_multisample_2d_array{}
#endif
};
#endif
#undef _extension
constexpr struct {
Version version;

5
src/Magnum/GL/Context.h

@ -94,9 +94,8 @@ class MAGNUM_GL_EXPORT Extension {
/** @brief Extension string */
constexpr const char* string() const { return _string; }
#ifndef DOXYGEN_GENERATING_OUTPUT
constexpr Extension(std::size_t index, Version requiredVersion, Version coreVersion, const char* string): _index{index}, _requiredVersion{requiredVersion}, _coreVersion{coreVersion}, _string{string} {}
#endif
/** @brief Construct from a compile-time extension */
template<class E, class = typename std::enable_if<Implementation::IsExtension<E>::value>::type> constexpr /*implicit*/ Extension(const E&): _index{E::Index}, _requiredVersion{E::requiredVersion()}, _coreVersion{E::coreVersion()}, _string{E::string()} {}
private:
std::size_t _index;

Loading…
Cancel
Save