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

5
src/Magnum/GL/Context.h

@ -94,9 +94,8 @@ class MAGNUM_GL_EXPORT Extension {
/** @brief Extension string */ /** @brief Extension string */
constexpr const char* string() const { return _string; } constexpr const char* string() const { return _string; }
#ifndef DOXYGEN_GENERATING_OUTPUT /** @brief Construct from a compile-time extension */
constexpr Extension(std::size_t index, Version requiredVersion, Version coreVersion, const char* string): _index{index}, _requiredVersion{requiredVersion}, _coreVersion{coreVersion}, _string{string} {} 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()} {}
#endif
private: private:
std::size_t _index; std::size_t _index;

Loading…
Cancel
Save