You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

455 lines
26 KiB

#ifndef Magnum_Extensions_h
#define Magnum_Extensions_h
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
Vladimír Vondruš <mosra@centrum.cz>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
/** @file
* @brief Namespace @ref Magnum::Extensions
*/
#include "Magnum/Version.h"
namespace Magnum {
/* Standard Android build system thinks that it's okay to define unmangled
unprefixed macros. I think that whoever did that needs to be punished,
becuase I am then not able to use that identifier for extension names.
Use CORRADE_TARGET_ANDROID here instead. */
#ifdef ANDROID
#undef ANDROID
#endif
/**
@brief Compile-time information about OpenGL extensions
Each extension is `struct` named hierarchically by prefix, vendor and
extension name taken from list at @ref opengl-support, for example
`GL::ARB::texture_storage`. Note that desktop extensions are available only on
desktop build, OpenGL ES 2.0 extensions which are part of ES 3.0 are available
only on @ref MAGNUM_TARGET_GLES2 "OpenGL ES 2.0 build" and vendor OpenGL ES
extensions are available only on @ref MAGNUM_TARGET_GLES "OpenGL ES builds".
Each struct has the same public methods as @ref Extension class
(@ref Extension::requiredVersion() "requiredVersion()",
@ref Extension::coreVersion() "coreVersion()" and @ref Extension::string() "string()"),
but these structs are better suited for compile-time decisions rather than
@ref Extension instances. See @ref Context::isExtensionSupported() for example
usage.
This namespace is built by default. To use it, you need to link to
`Magnum::Magnum` target. See @ref building and @ref cmake for more information.
@see @ref MAGNUM_ASSERT_EXTENSION_SUPPORTED()
@todo Manual indices for extensions, this has gaps
*/
namespace Extensions {
#ifndef DOXYGEN_GENERATING_OUTPUT
#define _extension(prefix, vendor, extension, _requiredVersion, _coreVersion) \
struct extension { \
enum: std::size_t { Index = __LINE__-1 }; \
constexpr static Version requiredVersion() { return Version::_requiredVersion; } \
constexpr static Version coreVersion() { return Version::_coreVersion; } \
constexpr static const char* string() { return #prefix "_" #vendor "_" #extension; } \
};
/* IMPORTANT: don't forget to add new extensions also in Context.cpp */
namespace GL {
#ifndef MAGNUM_TARGET_GLES
#line 1
namespace AMD {
_extension(GL,AMD,transform_feedback3_lines_triangles, GL210, None) // #397
_extension(GL,AMD,vertex_shader_layer, GL210, None) // #417
_extension(GL,AMD,shader_trinary_minmax, GL210, None) // #428
} namespace ARB {
_extension(GL,ARB,texture_rectangle, GL210, GL310) // #38
_extension(GL,ARB,color_buffer_float, GL210, GL300) // #39
_extension(GL,ARB,half_float_pixel, GL210, GL300) // #40
_extension(GL,ARB,texture_float, GL210, GL300) // #41
_extension(GL,ARB,depth_buffer_float, GL210, GL300) // #43
_extension(GL,ARB,draw_instanced, GL210, GL310) // #44
_extension(GL,ARB,framebuffer_object, GL210, GL300) // #45
_extension(GL,ARB,framebuffer_sRGB, GL210, GL300) // #46
_extension(GL,ARB,geometry_shader4, GL210, GL320) // #47
_extension(GL,ARB,half_float_vertex, GL210, GL300) // #48
_extension(GL,ARB,instanced_arrays, GL210, GL330) // #49
_extension(GL,ARB,map_buffer_range, GL210, GL300) // #50
_extension(GL,ARB,texture_buffer_object, GL210, GL310) // #51
_extension(GL,ARB,texture_rg, GL210, GL300) // #53
_extension(GL,ARB,vertex_array_object, GL210, GL300) // #54
_extension(GL,ARB,uniform_buffer_object, GL210, GL310) // #57
_extension(GL,ARB,copy_buffer, /*?*/ GL210, GL310) // #59
_extension(GL,ARB,depth_clamp, /*?*/ GL210, GL320) // #61
_extension(GL,ARB,draw_elements_base_vertex, /*?*/ GL210, GL320) // #62
_extension(GL,ARB,fragment_coord_conventions, /*?*/ GL210, GL320) // #63
_extension(GL,ARB,provoking_vertex, /*?*/ GL210, GL320) // #64
_extension(GL,ARB,seamless_cube_map, GL210, GL320) // #65
_extension(GL,ARB,sync, GL310, GL320) // #66
_extension(GL,ARB,texture_multisample, /*?*/ GL210, GL320) // #67
_extension(GL,ARB,vertex_array_bgra, GL210, GL320) // #68
_extension(GL,ARB,draw_buffers_blend, GL210, GL400) // #69
_extension(GL,ARB,sample_shading, GL210, GL400) // #70
_extension(GL,ARB,texture_cube_map_array, /*?*/ GL210, GL400) // #71
_extension(GL,ARB,texture_gather, GL210, GL400) // #72
_extension(GL,ARB,texture_query_lod, GL210, GL400) // #73
_extension(GL,ARB,texture_compression_bptc, GL310, GL420) // #77
_extension(GL,ARB,blend_func_extended, GL210, GL330) // #78
_extension(GL,ARB,explicit_attrib_location, GL210, GL330) // #79
_extension(GL,ARB,occlusion_query2, GL210, GL330) // #80
_extension(GL,ARB,sampler_objects, GL210, GL330) // #81
_extension(GL,ARB,shader_bit_encoding, /*?*/ GL210, GL330) // #82
_extension(GL,ARB,texture_rgb10_a2ui, GL210, GL330) // #83
_extension(GL,ARB,texture_swizzle, /*?*/ GL210, GL330) // #84
_extension(GL,ARB,timer_query, /*?*/ GL210, GL330) // #85
_extension(GL,ARB,vertex_type_2_10_10_10_rev, GL210, GL330) // #86
_extension(GL,ARB,draw_indirect, GL310, GL400) // #87
_extension(GL,ARB,gpu_shader5, GL320, GL400) // #88
_extension(GL,ARB,gpu_shader_fp64, GL320, GL400) // #89
_extension(GL,ARB,shader_subroutine, GL320, GL400) // #90
_extension(GL,ARB,tessellation_shader, GL320, GL400) // #91
_extension(GL,ARB,texture_buffer_object_rgb32, /*?*/ GL210, GL400) // #92
_extension(GL,ARB,transform_feedback2, GL210, GL400) // #93
_extension(GL,ARB,transform_feedback3, GL210, GL400) // #94
_extension(GL,ARB,ES2_compatibility, /*?*/ GL210, GL410) // #95
_extension(GL,ARB,get_program_binary, GL300, GL410) // #96
_extension(GL,ARB,separate_shader_objects, GL210, GL410) // #97
_extension(GL,ARB,shader_precision, GL400, GL410) // #98
_extension(GL,ARB,vertex_attrib_64bit, GL300, GL410) // #99
_extension(GL,ARB,viewport_array, GL210, GL410) // #100
_extension(GL,ARB,robustness, GL210, None) // #105
_extension(GL,ARB,base_instance, GL210, GL420) // #107
_extension(GL,ARB,shading_language_420pack, GL300, GL420) // #108
_extension(GL,ARB,transform_feedback_instanced, GL210, GL420) // #109
_extension(GL,ARB,compressed_texture_pixel_storage, GL210, GL420) // #110
_extension(GL,ARB,conservative_depth, GL300, GL420) // #111
_extension(GL,ARB,internalformat_query, GL210, GL420) // #112
_extension(GL,ARB,map_buffer_alignment, GL210, GL420) // #113
_extension(GL,ARB,shader_atomic_counters, GL300, GL420) // #114
_extension(GL,ARB,shader_image_load_store, GL300, GL420) // #115
_extension(GL,ARB,shading_language_packing, /*?*/ GL210, GL420) // #116
_extension(GL,ARB,texture_storage, GL210, GL420) // #117
_extension(GL,ARB,arrays_of_arrays, GL210, GL430) // #120
_extension(GL,ARB,clear_buffer_object, GL210, GL430) // #121
_extension(GL,ARB,compute_shader, GL420, GL430) // #122
_extension(GL,ARB,copy_image, GL210, GL430) // #123
_extension(GL,ARB,texture_view, GL210, GL430) // #124
_extension(GL,ARB,vertex_attrib_binding, GL210, GL430) // #125
_extension(GL,ARB,robustness_isolation, GL210, None) // #126
_extension(GL,ARB,robustness_application_isolation, GL210, None) // #126
_extension(GL,ARB,robustness_share_group_isolation, GL210, None) // #126
_extension(GL,ARB,ES3_compatibility, GL330, GL430) // #127
_extension(GL,ARB,explicit_uniform_location, GL210, GL430) // #128
_extension(GL,ARB,fragment_layer_viewport, GL300, GL430) // #129
_extension(GL,ARB,framebuffer_no_attachments, GL210, GL430) // #130
_extension(GL,ARB,internalformat_query2, GL210, GL430) // #131
_extension(GL,ARB,invalidate_subdata, GL210, GL430) // #132
_extension(GL,ARB,multi_draw_indirect, GL310, GL430) // #133
_extension(GL,ARB,program_interface_query, GL210, GL430) // #134
_extension(GL,ARB,robust_buffer_access_behavior,GL210, GL430) // #135
_extension(GL,ARB,shader_image_size, GL420, GL430) // #136
_extension(GL,ARB,shader_storage_buffer_object, GL400, GL430) // #137
_extension(GL,ARB,stencil_texturing, GL210, GL430) // #138
_extension(GL,ARB,texture_buffer_range, GL210, GL430) // #139
_extension(GL,ARB,texture_query_levels, GL300, GL430) // #140
_extension(GL,ARB,texture_storage_multisample, GL210, GL430) // #141
_extension(GL,ARB,buffer_storage, /*?*/ GL430, GL440) // #144
_extension(GL,ARB,clear_texture, GL210, GL440) // #145
_extension(GL,ARB,enhanced_layouts, GL310, GL440) // #146
_extension(GL,ARB,multi_bind, GL300, GL440) // #147
_extension(GL,ARB,query_buffer_object, GL210, GL440) // #148
_extension(GL,ARB,texture_mirror_clamp_to_edge, GL210, GL440) // #149
_extension(GL,ARB,texture_stencil8, GL210, GL440) // #150
_extension(GL,ARB,vertex_type_10f_11f_11f_rev, GL300, GL440) // #151
_extension(GL,ARB,bindless_texture, GL400, None) // #152
_extension(GL,ARB,compute_variable_group_size, GL420, None) // #153
_extension(GL,ARB,indirect_parameters, GL420, None) // #154
_extension(GL,ARB,seamless_cubemap_per_texture, GL320, None) // #155
_extension(GL,ARB,shader_draw_parameters, GL310, None) // #156
_extension(GL,ARB,shader_group_vote, GL420, None) // #157
_extension(GL,ARB,sparse_texture, GL210, None) // #158
_extension(GL,ARB,ES3_1_compatibility, GL440, GL450) // #159
_extension(GL,ARB,clip_control, GL210, GL450) // #160
_extension(GL,ARB,conditional_render_inverted, GL300, GL450) // #161
_extension(GL,ARB,cull_distance, GL300, GL450) // #162
_extension(GL,ARB,derivative_control, GL400, GL450) // #163
_extension(GL,ARB,direct_state_access, GL210, GL450) // #164
_extension(GL,ARB,get_texture_sub_image, GL210, GL450) // #165
_extension(GL,ARB,shader_texture_image_samples, GL430, GL450) // #166
_extension(GL,ARB,texture_barrier, GL210, GL450) // #167
_extension(GL,ARB,pipeline_statistics_query, GL300, None) // #171
_extension(GL,ARB,sparse_buffer, GL210, None) // #172
_extension(GL,ARB,transform_feedback_overflow_query, GL300, None) // #173
} namespace ATI {
_extension(GL,ATI,texture_mirror_once, GL210, None) // #221
} namespace EXT {
_extension(GL,EXT,texture_filter_anisotropic, GL210, None) // #187
_extension(GL,EXT,texture_compression_s3tc, GL210, None) // #198
/* EXT_framebuffer_object, EXT_packed_depth_stencil, EXT_framebuffer_blit,
EXT_framebuffer_multisample replaced with ARB_framebuffer_object */
_extension(GL,EXT,texture_mirror_clamp, GL210, None) // #298
_extension(GL,EXT,gpu_shader4, GL210, GL300) // #326
_extension(GL,EXT,packed_float, GL210, GL300) // #328
_extension(GL,EXT,texture_array, GL210, GL300) // #329
_extension(GL,EXT,texture_compression_rgtc, GL210, GL300) // #332
_extension(GL,EXT,texture_shared_exponent, GL210, GL300) // #333
_extension(GL,EXT,draw_buffers2, GL210, GL300) // #340
_extension(GL,EXT,texture_integer, GL210, GL300) // #343
_extension(GL,EXT,transform_feedback, GL210, GL300) // #352
_extension(GL,EXT,direct_state_access, GL210, None) // #353
_extension(GL,EXT,texture_snorm, GL300, GL310) // #365
_extension(GL,EXT,texture_sRGB_decode, GL210, None) // #402
_extension(GL,EXT,shader_integer_mix, GL300, None) // #437
_extension(GL,EXT,debug_label, GL210, None) // #439
_extension(GL,EXT,debug_marker, GL210, None) // #440
} namespace GREMEDY {
_extension(GL,GREMEDY,string_marker, GL210, None) // #311
} namespace KHR {
_extension(GL,KHR,texture_compression_astc_ldr, GL210, None) // #118
_extension(GL,KHR,texture_compression_astc_hdr, GL210, None) // #118
_extension(GL,KHR,debug, GL210, GL430) // #119
_extension(GL,KHR,context_flush_control, GL210, GL450) // #168
_extension(GL,KHR,robustness, GL320, GL450) // #170
_extension(GL,KHR,blend_equation_advanced, GL210, None) // #174
_extension(GL,KHR,blend_equation_advanced_coherent, GL210, None) // #174
_extension(GL,KHR,no_error, GL210, None) // #175
} namespace NV {
_extension(GL,NV,primitive_restart, GL210, GL310) // #285
_extension(GL,NV,depth_buffer_float, GL210, GL300) // #334
_extension(GL,NV,conditional_render, GL210, GL300) // #346
/* NV_draw_texture not supported */ // #430
}
/* IMPORTANT: if this line is > 329 (73 + size), don't forget to update array size in Context.h */
#elif defined(MAGNUM_TARGET_WEBGL)
#line 1
namespace ANGLE {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,ANGLE,instanced_arrays, GLES200, GLES300) // #19
#endif
} namespace EXT {
_extension(GL,EXT,texture_filter_anisotropic, GLES200, None) // #11
_extension(GL,EXT,sRGB, GLES200, None) // #17
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,blend_minmax, GLES200, GLES300) // #25
#endif
_extension(GL,EXT,disjoint_timer_query, GLES200, None) // #26
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #27
#endif
} namespace OES {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,texture_float, GLES200, GLES300) // #1
_extension(GL,OES,texture_half_float, GLES200, GLES300) // #2
_extension(GL,OES,standard_derivatives, GLES200, GLES300) // #4
_extension(GL,OES,vertex_array_object, GLES200, GLES300) // #5
_extension(GL,OES,element_index_uint, GLES200, GLES300) // #10
_extension(GL,OES,texture_float_linear, GLES200, GLES300) // #20
_extension(GL,OES,texture_half_float_linear, GLES200, GLES300) // #21
_extension(GL,OES,fbo_render_mipmap, GLES200, GLES300) // #28
#endif
} namespace WEBGL {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,WEBGL,compressed_texture_s3tc, GLES200, None) // #8
_extension(GL,WEBGL,depth_texture, GLES200, GLES300) // #9
_extension(GL,WEBGL,draw_buffers, GLES200, GLES300) // #18
#endif
}
#else
#line 1
namespace ANDROID {
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,ANDROID,extension_pack_es31a, GLES310, None) // #187
#endif
} namespace ANGLE {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,ANGLE,framebuffer_blit, GLES200, GLES300) // #83
_extension(GL,ANGLE,framebuffer_multisample, GLES200, GLES300) // #84
_extension(GL,ANGLE,instanced_arrays, GLES200, GLES300) // #109
_extension(GL,ANGLE,depth_texture, GLES200, GLES300) // #138
#endif
} namespace APPLE {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,APPLE,framebuffer_multisample, GLES200, GLES300) // #78
#endif
_extension(GL,APPLE,texture_format_BGRA8888, GLES200, None) // #79
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,APPLE,texture_max_level, GLES200, None) // #80
#endif
} namespace ARM {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,ARM,rgba8, GLES200, GLES300) // #82
#endif
_extension(GL,ARM,shader_framebuffer_fetch, GLES200, None) // #165
_extension(GL,ARM,shader_framebuffer_fetch_depth_stencil, GLES200, None) // #166
} namespace CHROMIUM {
#ifdef CORRADE_TARGET_NACL
_extension(GL,CHROMIUM,map_sub, GLES200, None)
#endif
} namespace EXT {
_extension(GL,EXT,texture_filter_anisotropic, GLES200, None) // #41
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,texture_type_2_10_10_10_REV, GLES200, GLES300) // #42
#endif
_extension(GL,EXT,texture_format_BGRA8888, GLES200, None) // #51
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,discard_framebuffer, GLES200, GLES300) // #64
_extension(GL,EXT,blend_minmax, GLES200, GLES300) // #65
#endif
_extension(GL,EXT,read_format_bgra, GLES200, None) // #66
_extension(GL,EXT,multi_draw_arrays, GLES200, None) // #67
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shader_texture_lod, GLES200, GLES300) // #77
_extension(GL,EXT,unpack_subimage, GLES200, GLES300) // #90
#endif
_extension(GL,EXT,debug_label, GLES200, None) // #98
_extension(GL,EXT,debug_marker, GLES200, None) // #99
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,occlusion_query_boolean, GLES200, GLES300) // #100
#endif
_extension(GL,EXT,separate_shader_objects, GLES200, None) // #101
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shadow_samplers, GLES200, GLES300) // #102
_extension(GL,EXT,texture_rg, GLES200, GLES300) // #103
_extension(GL,EXT,sRGB, GLES200, GLES300) // #105
#endif
_extension(GL,EXT,multisampled_render_to_texture, GLES200, None) // #106
_extension(GL,EXT,robustness, GLES200, None) // #107
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,texture_storage, GLES200, GLES300) // #108
_extension(GL,EXT,map_buffer_range, GLES200, GLES300) // #121
#endif
_extension(GL,EXT,shader_framebuffer_fetch, GLES200, None) // #122
_extension(GL,EXT,disjoint_timer_query, GLES200, None) // #150
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,draw_buffers, GLES200, GLES300) // #151
#endif
_extension(GL,EXT,texture_sRGB_decode, GLES200, None) // #152
_extension(GL,EXT,sRGB_write_control, GLES200, None) // #153
_extension(GL,EXT,texture_compression_s3tc, GLES200, None) // #154
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,EXT,instanced_arrays, GLES200, GLES300) // #156
_extension(GL,EXT,draw_instanced, GLES200, GLES300) // #157
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,shader_integer_mix, GLES300, None) // #161
_extension(GL,EXT,copy_image, GLES300, None) // #175
#endif
_extension(GL,EXT,draw_buffers_indexed, GLES200, None) // #176
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,geometry_shader, GLES310, None) // #177
_extension(GL,EXT,gpu_shader5, GLES310, None) // #178
_extension(GL,EXT,shader_io_blocks, GLES310, None) // #180
_extension(GL,EXT,tessellation_shader, GLES310, None) // #181
#endif
_extension(GL,EXT,texture_border_clamp, GLES200, None) // #182
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,EXT,texture_buffer, GLES310, None) // #183
_extension(GL,EXT,texture_cube_map_array, GLES310, None) // #184
_extension(GL,EXT,primitive_bounding_box, GLES310, None) // #186
#endif
} namespace KHR {
_extension(GL,KHR,texture_compression_astc_ldr, GLES200, None) // #117
_extension(GL,KHR,texture_compression_astc_hdr, GLES200, None) // #117
_extension(GL,KHR,debug, GLES200, None) // #118
_extension(GL,KHR,blend_equation_advanced, GLES200, None) // #168
_extension(GL,KHR,blend_equation_advanced_coherent, GLES200, None) // #168
_extension(GL,KHR,robustness, GLES200, None) // #170
_extension(GL,KHR,robust_buffer_access_behavior, GLES200, None) // #189
_extension(GL,KHR,context_flush_control, GLES200, None) // #191
_extension(GL,KHR,no_error, GLES200, None) // #243
} namespace NV {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,NV,draw_buffers, GLES200, GLES300) // #91
_extension(GL,NV,fbo_color_attachments, GLES200, GLES300) // #92
_extension(GL,NV,read_buffer, GLES200, GLES300) // #93
#endif
_extension(GL,NV,read_buffer_front, GLES200, None) // #93
_extension(GL,NV,read_depth, GLES200, None) // #94
_extension(GL,NV,read_stencil, GLES200, None) // #94
_extension(GL,NV,read_depth_stencil, GLES200, None) // #94
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,NV,pack_subimage, GLES200, GLES300) // #132
_extension(GL,NV,draw_instanced, GLES200, GLES300) // #141
_extension(GL,NV,framebuffer_blit, GLES200, GLES300) // #142
_extension(GL,NV,framebuffer_multisample, GLES200, GLES300) // #143
_extension(GL,NV,instanced_arrays, GLES200, GLES300) // #145
_extension(GL,NV,shadow_samplers_array, GLES200, GLES300) // #146
_extension(GL,NV,shadow_samplers_cube, GLES200, GLES300) // #147
#endif
_extension(GL,NV,texture_border_clamp, GLES200, None) // #149
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,NV,shader_noperspective_interpolation, GLES300, None) // #201
#endif
_extension(GL,NV,polygon_mode, GLES200, None) // #238
} namespace OES {
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,depth24, GLES200, GLES300) // #24
#endif
_extension(GL,OES,depth32, GLES200, None) // #25
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,element_index_uint, GLES200, GLES300) // #26
_extension(GL,OES,fbo_render_mipmap, GLES200, GLES300) // #27
#endif
_extension(GL,OES,mapbuffer, GLES200, None) // #29
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,rgb8_rgba8, GLES200, GLES300) // #30
#endif
_extension(GL,OES,stencil1, GLES200, None) // #31
_extension(GL,OES,stencil4, GLES200, None) // #32
#ifdef MAGNUM_TARGET_GLES2
_extension(GL,OES,texture_3D, GLES200, GLES300) // #34
_extension(GL,OES,texture_half_float_linear, GLES200, GLES300) // #35
_extension(GL,OES,texture_float_linear, GLES200, GLES300) // #35
_extension(GL,OES,texture_half_float, GLES200, GLES300) // #36
_extension(GL,OES,texture_float, GLES200, GLES300) // #36
_extension(GL,OES,texture_npot, GLES200, GLES300) // #37
_extension(GL,OES,vertex_half_float, GLES200, GLES300) // #38
_extension(GL,OES,packed_depth_stencil, GLES200, GLES300) // #43
_extension(GL,OES,depth_texture, GLES200, GLES300) // #44
_extension(GL,OES,standard_derivatives, GLES200, GLES300) // #45
_extension(GL,OES,vertex_array_object, GLES200, GLES300) // #71
_extension(GL,OES,required_internalformat, GLES200, GLES300) // #115
_extension(GL,OES,surfaceless_context, GLES200, GLES300) // #116
#endif
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,OES,sample_shading, GLES300, None) // #169
_extension(GL,OES,sample_variables, GLES300, None) // #170
_extension(GL,OES,shader_image_atomic, GLES310, None) // #171
_extension(GL,OES,shader_multisample_interpolation, GLES300, None) // #172
#endif
_extension(GL,OES,texture_stencil8, GLES200, None) // #173
#ifndef MAGNUM_TARGET_GLES2
_extension(GL,OES,texture_storage_multisample_2d_array, GLES310, None) // #174
#endif
}
#endif
}
#undef _extension
#endif
}
}
#endif